Changeset 33c2952 in mainline for kernel/generic/include
- Timestamp:
- 2012-11-07T21:00:02Z (13 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- dcb0751
- Parents:
- fc89e32 (diff), 94795812 (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the(diff)
links above to see all the changes relative to each parent. - Location:
- kernel/generic/include
- Files:
-
- 3 added
- 8 edited
Legend:
- Unmodified
- Added
- Removed
-
kernel/generic/include/config.h
rfc89e32 r33c2952 47 47 #define CONFIG_INIT_TASKS 32 48 48 #define CONFIG_TASK_NAME_BUFLEN 32 49 #define CONFIG_TASK_ARGUMENTS_BUFLEN 64 50 51 /** 52 * Maximum buffer size allowed for IPC_M_DATA_WRITE and IPC_M_DATA_READ 53 * requests. 54 */ 55 #define DATA_XFER_LIMIT (64 * 1024) 49 56 50 57 #ifndef __ASM__ … … 56 63 size_t size; 57 64 char name[CONFIG_TASK_NAME_BUFLEN]; 65 char arguments[CONFIG_TASK_ARGUMENTS_BUFLEN]; 58 66 } init_task_t; 59 67 -
kernel/generic/include/interrupt.h
rfc89e32 r33c2952 59 59 extern exc_table_t exc_table[]; 60 60 61 extern void fault_from_uspace(istate_t *, const char *, ...); 61 extern void fault_from_uspace(istate_t *, const char *, ...) 62 PRINTF_ATTRIBUTE(2, 3); 62 63 extern void fault_if_from_uspace(istate_t *, const char *, ...) 63 64 PRINTF_ATTRIBUTE(2, 3); -
kernel/generic/include/ipc/ipc.h
rfc89e32 r33c2952 65 65 mutex_t lock; 66 66 link_t link; 67 struct task *caller; 67 68 struct answerbox *callee; 68 69 ipc_phone_state_t state; … … 72 73 typedef struct answerbox { 73 74 IRQ_SPINLOCK_DECLARE(lock); 75 76 /** Answerbox is active until it enters cleanup. */ 77 bool active; 74 78 75 79 struct task *task; … … 106 110 107 111 typedef struct { 108 link_t link; 112 /** 113 * Task link. 114 * Valid only when the call is not forgotten. 115 * Protected by the task's active_calls_lock. 116 */ 117 link_t ta_link; 118 119 atomic_t refcnt; 120 121 /** Answerbox link. */ 122 link_t ab_link; 109 123 110 124 unsigned int flags; 125 126 /** Protects the forget member. */ 127 SPINLOCK_DECLARE(forget_lock); 128 129 /** 130 * True if the caller 'forgot' this call and donated it to the callee. 131 * Forgotten calls are discarded upon answering (the answer is not 132 * delivered) and answered calls cannot be forgotten. Forgotten calls 133 * also do not figure on the task's active call list. 134 * 135 * We keep this separate from the flags so that it is not necessary 136 * to take a lock when accessing them. 137 */ 138 bool forget; 139 140 /** True if the call is in the active list. */ 141 bool active; 111 142 112 /** Identification of the caller. */ 143 /** 144 * Identification of the caller. 145 * Valid only when the call is not forgotten. 146 */ 113 147 struct task *sender; 148 149 /** Phone which was used to send the call. */ 150 phone_t *caller_phone; 114 151 115 152 /** Private data to internal IPC. */ … … 118 155 /** Data passed from/to userspace. */ 119 156 ipc_data_t data; 120 157 158 /** Method as it was sent in the request. */ 159 sysarg_t request_method; 160 121 161 /** Buffer for IPC_M_DATA_WRITE and IPC_M_DATA_READ. */ 122 162 uint8_t *buffer; 123 124 /*125 * The forward operation can masquerade the caller phone. For those126 * cases, we must keep it aside so that the answer is processed127 * correctly.128 */129 phone_t *caller_phone;130 163 } call_t; 131 164 … … 136 169 extern call_t *ipc_call_alloc(unsigned int); 137 170 extern void ipc_call_free(call_t *); 171 extern void ipc_call_hold(call_t *); 172 extern void ipc_call_release(call_t *); 138 173 139 174 extern int ipc_call(phone_t *, call_t *); … … 141 176 extern int ipc_forward(call_t *, phone_t *, answerbox_t *, unsigned int); 142 177 extern void ipc_answer(answerbox_t *, call_t *); 178 extern void _ipc_answer_free_call(call_t *, bool); 143 179 144 extern void ipc_phone_init(phone_t * );145 extern voidipc_phone_connect(phone_t *, answerbox_t *);180 extern void ipc_phone_init(phone_t *, struct task *); 181 extern bool ipc_phone_connect(phone_t *, answerbox_t *); 146 182 extern int ipc_phone_hangup(phone_t *); 147 183 … … 151 187 extern void ipc_backsend_err(phone_t *, call_t *, sysarg_t); 152 188 extern void ipc_answerbox_slam_phones(answerbox_t *, bool); 153 extern void ipc_cleanup_call_list( list_t *);189 extern void ipc_cleanup_call_list(answerbox_t *, list_t *); 154 190 155 191 extern void ipc_print_task(task_id_t); -
kernel/generic/include/ipc/ipcrsc.h
rfc89e32 r33c2952 40 40 41 41 extern call_t *get_call(sysarg_t); 42 extern int phone_get(sysarg_t, phone_t **); 42 43 extern int phone_alloc(task_t *); 43 extern voidphone_connect(int, answerbox_t *);44 extern bool phone_connect(int, answerbox_t *); 44 45 extern void phone_dealloc(int); 45 46 -
kernel/generic/include/lib/elf_load.h
rfc89e32 r33c2952 42 42 * ELF error return codes 43 43 */ 44 #define EE_OK 0/* No error */45 #define EE_INVALID 1/* Invalid ELF image */46 #define EE_MEMORY 2/* Cannot allocate address space */47 #define EE_INCOMPATIBLE 3/* ELF image is not compatible with current architecture */48 #define EE_UNSUPPORTED 4/* Non-supported ELF (e.g. dynamic ELFs) */49 #define EE_LOADER 5/* The image is actually a program loader. */50 #define EE_IRRECOVERABLE 644 #define EE_OK 0 /* No error */ 45 #define EE_INVALID 1 /* Invalid ELF image */ 46 #define EE_MEMORY 2 /* Cannot allocate address space */ 47 #define EE_INCOMPATIBLE 3 /* ELF image is not compatible with current architecture */ 48 #define EE_UNSUPPORTED 4 /* Non-supported ELF (e.g. dynamic ELFs) */ 49 #define EE_LOADER 5 /* The image is actually a program loader. */ 50 #define EE_IRRECOVERABLE 6 /* Irrecoverable error. */ 51 51 52 52 /** 53 53 * This flags is passed when running the loader, otherwise elf_load() 54 54 * would return with a EE_LOADER error code. 55 *56 55 */ 57 56 #define ELD_F_NONE 0 -
kernel/generic/include/macros.h
rfc89e32 r33c2952 52 52 uint64_t sz2) 53 53 { 54 uint64_t e1 = s1 + sz1; 55 uint64_t e2 = s2 + sz2; 56 57 return ((s1 < e2) && (s2 < e1)); 54 uint64_t e1 = s1 + sz1 - 1; 55 uint64_t e2 = s2 + sz2 - 1; 56 57 /* both sizes are non-zero */ 58 if (sz1 && sz2) 59 return ((s1 <= e2) && (s2 <= e1)); 60 61 /* one size is non-zero */ 62 if (sz2) 63 return ((s1 >= s2) && (s1 <= e2)); 64 if (sz1) 65 return ((s2 >= s1) && (s2 <= e1)); 66 67 /* both are zero */ 68 return (s1 == s2); 58 69 } 59 70 … … 119 130 | ((((uint64_t) (up)) & UINT32_C(0xffffffff)) << 32)) 120 131 132 /* Test for sum overflow. */ 133 #define overflows(a, b) \ 134 ((a) + (b) < (a)) 135 136 /* Test for sum overflow into positive numbers. */ 137 #define overflows_into_positive(a, b) \ 138 (overflows((a), (b)) && ((a) + (b) > 0)) 139 121 140 /** Pseudorandom generator 122 141 * -
kernel/generic/include/print.h
rfc89e32 r33c2952 38 38 #include <typedefs.h> 39 39 #include <stdarg.h> 40 41 #ifndef NVERIFY_PRINTF 42 43 #define PRINTF_ATTRIBUTE(start, end) \ 44 __attribute__((format(gnu_printf, start, end))) 45 46 #else /* NVERIFY_PRINTF */ 47 48 #define PRINTF_ATTRIBUTE(start, end) 49 50 #endif /* NVERIFY_PRINTF */ 40 #include <printf/verify.h> 51 41 52 42 #define EOF (-1) -
kernel/generic/include/proc/task.h
rfc89e32 r33c2952 95 95 96 96 /* IPC stuff */ 97 answerbox_t answerbox; /**< Communication endpoint */ 97 98 /** Receiving communication endpoint */ 99 answerbox_t answerbox; 100 101 /** Sending communication endpoints */ 98 102 phone_t phones[IPC_MAX_PHONES]; 99 stats_ipc_t ipc_info; /**< IPC statistics */ 103 104 /** Spinlock protecting the active_calls list. */ 105 SPINLOCK_DECLARE(active_calls_lock); 106 107 /** 108 * List of all calls sent by this task that have not yet been 109 * answered. 110 */ 111 list_t active_calls; 112 100 113 event_t events[EVENT_TASK_END - EVENT_END]; 114 115 /** IPC statistics */ 116 stats_ipc_t ipc_info; 101 117 102 118 #ifdef CONFIG_UDEBUG
Note:
See TracChangeset
for help on using the changeset viewer.