Changeset a33f0a6 in mainline for uspace/lib/c/include
- Timestamp:
- 2011-08-03T17:34:57Z (14 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- 1940326
- Parents:
- 52a79081 (diff), 3fab770 (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:
- uspace/lib/c/include
- Files:
-
- 20 added
- 41 edited
- 3 moved
Legend:
- Unmodified
- Added
- Removed
-
uspace/lib/c/include/adt/fifo.h
r52a79081 ra33f0a6 51 51 typedef unsigned long fifo_index_t; 52 52 53 #define FIFO_CREATE_STATIC(name, t, itms) 54 struct { 55 t fifo[(itms)]; 56 fifo_count_t items; 57 fifo_index_t head; 58 fifo_index_t tail; 53 #define FIFO_CREATE_STATIC(name, t, itms) \ 54 struct { \ 55 t fifo[(itms)]; \ 56 fifo_count_t items; \ 57 fifo_index_t head; \ 58 fifo_index_t tail; \ 59 59 } name 60 60 -
uspace/lib/c/include/adt/hash_table.h
r52a79081 ra33f0a6 38 38 #include <adt/list.h> 39 39 #include <unistd.h> 40 #include <bool.h> 40 41 41 42 typedef unsigned long hash_count_t; … … 74 75 /** Hash table structure. */ 75 76 typedef struct { 76 li nk_t *entry;77 list_t *entry; 77 78 hash_count_t entries; 78 79 hash_count_t max_keys; … … 83 84 list_get_instance((item), type, member) 84 85 85 extern inthash_table_create(hash_table_t *, hash_count_t, hash_count_t,86 extern bool hash_table_create(hash_table_t *, hash_count_t, hash_count_t, 86 87 hash_table_operations_t *); 87 88 extern void hash_table_insert(hash_table_t *, unsigned long [], link_t *); -
uspace/lib/c/include/adt/list.h
r52a79081 ra33f0a6 1 1 /* 2 2 * Copyright (c) 2001-2004 Jakub Jermar 3 * Copyright (c) 2011 Jiri Svoboda 3 4 * All rights reserved. 4 5 * … … 36 37 #define LIBC_LIST_H_ 37 38 39 #include <assert.h> 38 40 #include <unistd.h> 39 41 40 /** Doubly linked list head and link type. */42 /** Doubly linked list link. */ 41 43 typedef struct link { 42 44 struct link *prev; /**< Pointer to the previous item in the list. */ … … 44 46 } link_t; 45 47 48 /** Doubly linked list. */ 49 typedef struct list { 50 link_t head; /**< List head. Does not have any data. */ 51 } list_t; 52 46 53 /** Declare and initialize statically allocated list. 47 54 * 48 55 * @param name Name of the new statically allocated list. 49 */ 50 #define LIST_INITIALIZE(name) link_t name = { \ 51 .prev = &name, \ 52 .next = &name \ 53 } 56 * 57 */ 58 #define LIST_INITIALIZE(name) \ 59 list_t name = { \ 60 .head = { \ 61 .prev = &(name).head, \ 62 .next = &(name).head \ 63 } \ 64 } 65 66 #define list_get_instance(link, type, member) \ 67 ((type *) (((void *)(link)) - ((void *) &(((type *) NULL)->member)))) 68 69 #define list_foreach(list, iterator) \ 70 for (link_t *iterator = (list).head.next; \ 71 iterator != &(list).head; iterator = iterator->next) 72 73 #define assert_link_not_used(link) \ 74 assert((link)->prev == NULL && (link)->next == NULL) 54 75 55 76 /** Initialize doubly-linked circular list link … … 58 79 * 59 80 * @param link Pointer to link_t structure to be initialized. 81 * 60 82 */ 61 83 static inline void link_initialize(link_t *link) … … 69 91 * Initialize doubly-linked circular list. 70 92 * 71 * @param head Pointer to link_t structure representing head of the list. 72 */ 73 static inline void list_initialize(link_t *head) 74 { 75 head->prev = head; 76 head->next = head; 93 * @param list Pointer to list_t structure. 94 * 95 */ 96 static inline void list_initialize(list_t *list) 97 { 98 list->head.prev = &list->head; 99 list->head.next = &list->head; 100 } 101 102 /** Insert item before another item in doubly-linked circular list. 103 * 104 */ 105 static inline void list_insert_before(link_t *lnew, link_t *lold) 106 { 107 lnew->next = lold; 108 lnew->prev = lold->prev; 109 lold->prev->next = lnew; 110 lold->prev = lnew; 111 } 112 113 /** Insert item after another item in doubly-linked circular list. 114 * 115 */ 116 static inline void list_insert_after(link_t *lnew, link_t *lold) 117 { 118 lnew->prev = lold; 119 lnew->next = lold->next; 120 lold->next->prev = lnew; 121 lold->next = lnew; 77 122 } 78 123 … … 82 127 * 83 128 * @param link Pointer to link_t structure to be added. 84 * @param head Pointer to link_t structure representing head of the list. 85 */ 86 static inline void list_prepend(link_t *link, link_t *head) 87 { 88 link->next = head->next; 89 link->prev = head; 90 head->next->prev = link; 91 head->next = link; 129 * @param list Pointer to list_t structure. 130 * 131 */ 132 static inline void list_prepend(link_t *link, list_t *list) 133 { 134 list_insert_after(link, &list->head); 92 135 } 93 136 … … 97 140 * 98 141 * @param link Pointer to link_t structure to be added. 99 * @param head Pointer to link_t structure representing head of the list. 100 */ 101 static inline void list_append(link_t *link, link_t *head) 102 { 103 link->prev = head->prev; 104 link->next = head; 105 head->prev->next = link; 106 head->prev = link; 107 } 108 109 /** Insert item before another item in doubly-linked circular list. */ 110 static inline void list_insert_before(link_t *l, link_t *r) 111 { 112 list_append(l, r); 113 } 114 115 /** Insert item after another item in doubly-linked circular list. */ 116 static inline void list_insert_after(link_t *r, link_t *l) 117 { 118 list_prepend(l, r); 142 * @param list Pointer to list_t structure. 143 * 144 */ 145 static inline void list_append(link_t *link, list_t *list) 146 { 147 list_insert_before(link, &list->head); 119 148 } 120 149 … … 123 152 * Remove item from doubly-linked circular list. 124 153 * 125 * @param link Pointer to link_t structure to be removed from the list it is contained in. 154 * @param link Pointer to link_t structure to be removed from the list 155 * it is contained in. 156 * 126 157 */ 127 158 static inline void list_remove(link_t *link) … … 136 167 * Query emptiness of doubly-linked circular list. 137 168 * 138 * @param head Pointer to link_t structure representing head of the list. 139 */ 140 static inline int list_empty(link_t *head) 141 { 142 return ((head->next == head) ? 1 : 0); 143 } 144 169 * @param list Pointer to lins_t structure. 170 * 171 */ 172 static inline int list_empty(list_t *list) 173 { 174 return (list->head.next == &list->head); 175 } 176 177 /** Get first item in list. 178 * 179 * @param list Pointer to list_t structure. 180 * 181 * @return Head item of the list. 182 * @return NULL if the list is empty. 183 * 184 */ 185 static inline link_t *list_first(list_t *list) 186 { 187 return ((list->head.next == &list->head) ? NULL : list->head.next); 188 } 189 190 /** Get last item in list. 191 * 192 * @param list Pointer to list_t structure. 193 * 194 * @return Head item of the list. 195 * @return NULL if the list is empty. 196 * 197 */ 198 static inline link_t *list_last(list_t *list) 199 { 200 return ((list->head.prev == &list->head) ? NULL : list->head.prev); 201 } 145 202 146 203 /** Split or concatenate headless doubly-linked circular list … … 151 208 * concatenates splitted lists and splits concatenated lists. 152 209 * 153 * @param part1 Pointer to link_t structure leading the first (half of the headless) list. 154 * @param part2 Pointer to link_t structure leading the second (half of the headless) list. 210 * @param part1 Pointer to link_t structure leading the first 211 * (half of the headless) list. 212 * @param part2 Pointer to link_t structure leading the second 213 * (half of the headless) list. 214 * 155 215 */ 156 216 static inline void headless_list_split_or_concat(link_t *part1, link_t *part2) … … 165 225 } 166 226 167 168 227 /** Split headless doubly-linked circular list 169 228 * 170 229 * Split headless doubly-linked circular list. 171 230 * 172 * @param part1 Pointer to link_t structure leading the first half of the headless list. 173 * @param part2 Pointer to link_t structure leading the second half of the headless list. 231 * @param part1 Pointer to link_t structure leading 232 * the first half of the headless list. 233 * @param part2 Pointer to link_t structure leading 234 * the second half of the headless list. 235 * 174 236 */ 175 237 static inline void headless_list_split(link_t *part1, link_t *part2) … … 182 244 * Concatenate two headless doubly-linked circular lists. 183 245 * 184 * @param part1 Pointer to link_t structure leading the first headless list. 185 * @param part2 Pointer to link_t structure leading the second headless list. 246 * @param part1 Pointer to link_t structure leading 247 * the first headless list. 248 * @param part2 Pointer to link_t structure leading 249 * the second headless list. 250 * 186 251 */ 187 252 static inline void headless_list_concat(link_t *part1, link_t *part2) … … 190 255 } 191 256 192 #define list_get_instance(link, type, member) ((type *) (((void *)(link)) - ((void *) &(((type *) NULL)->member)))) 193 194 extern int list_member(const link_t *link, const link_t *head); 195 extern void list_concat(link_t *head1, link_t *head2); 196 extern unsigned int list_count(const link_t *link); 257 /** Get n-th item in a list. 258 * 259 * @param list Pointer to link_t structure representing the list. 260 * @param n Item number (indexed from zero). 261 * 262 * @return n-th item of the list. 263 * @return NULL if no n-th item found. 264 * 265 */ 266 static inline link_t *list_nth(list_t *list, unsigned int n) 267 { 268 unsigned int cnt = 0; 269 270 list_foreach(*list, link) { 271 if (cnt == n) 272 return link; 273 274 cnt++; 275 } 276 277 return NULL; 278 } 279 280 extern int list_member(const link_t *, const list_t *); 281 extern void list_concat(list_t *, list_t *); 282 extern unsigned int list_count(const list_t *); 197 283 198 284 #endif -
uspace/lib/c/include/adt/measured_strings.h
r52a79081 ra33f0a6 41 41 42 42 #include <sys/types.h> 43 #include <async.h> 43 44 44 45 /** Type definition of the character string with measured length. … … 61 62 extern measured_string_t *measured_string_create_bulk(const uint8_t *, size_t); 62 63 extern measured_string_t *measured_string_copy(measured_string_t *); 64 63 65 extern int measured_strings_receive(measured_string_t **, uint8_t **, size_t); 64 66 extern int measured_strings_reply(const measured_string_t *, size_t); 65 extern int measured_strings_return(int, measured_string_t **, uint8_t **, size_t); 66 extern int measured_strings_send(int, const measured_string_t *, size_t); 67 68 extern int measured_strings_return(async_exch_t *, measured_string_t **, 69 uint8_t **, size_t); 70 extern int measured_strings_send(async_exch_t *, const measured_string_t *, 71 size_t); 67 72 68 73 #endif -
uspace/lib/c/include/as.h
r52a79081 ra33f0a6 54 54 } 55 55 56 extern void *as_area_create(void *address, size_t size, int flags); 57 extern int as_area_resize(void *address, size_t size, int flags); 58 extern int as_area_change_flags(void *address, int flags); 59 extern int as_area_destroy(void *address); 60 extern void *set_maxheapsize(size_t mhs); 61 extern void * as_get_mappable_page(size_t sz); 56 extern void *as_area_create(void *, size_t, unsigned int); 57 extern int as_area_resize(void *, size_t, unsigned int); 58 extern int as_area_change_flags(void *, unsigned int); 59 extern int as_area_destroy(void *); 60 extern void *set_maxheapsize(size_t); 61 extern void *as_get_mappable_page(size_t); 62 extern int as_get_physical_mapping(void *, uintptr_t *); 62 63 63 64 #endif -
uspace/lib/c/include/async.h
r52a79081 ra33f0a6 41 41 42 42 #include <ipc/common.h> 43 #include <async_sess.h>44 43 #include <fibril.h> 44 #include <fibril_synch.h> 45 45 #include <sys/time.h> 46 46 #include <atomic.h> … … 53 53 typedef void (*async_client_data_dtor_t)(void *); 54 54 55 typedef void (*async_client_conn_t)(ipc_callid_t, ipc_call_t *); 55 /** Client connection handler 56 * 57 * @param callid ID of incoming call or 0 if connection initiated from 58 * inside using async_connect_to_me() 59 * @param call Incoming call or 0 if connection initiated from inside 60 * @param arg Local argument passed from async_new_connection() or 61 * async_connect_to_me() 62 */ 63 typedef void (*async_client_conn_t)(ipc_callid_t, ipc_call_t *, void *); 64 65 /** Interrupt handler */ 66 typedef void (*async_interrupt_handler_t)(ipc_callid_t, ipc_call_t *); 67 68 /** Exchange management style 69 * 70 */ 71 typedef enum { 72 /** No explicit exchange management 73 * 74 * Suitable for protocols which use a single 75 * IPC message per exchange only. 76 * 77 */ 78 EXCHANGE_ATOMIC = 0, 79 80 /** Exchange management via phone cloning 81 * 82 * Suitable for servers which support client 83 * data tracking by task hashes and do not 84 * mind cloned phones. 85 * 86 */ 87 EXCHANGE_PARALLEL, 88 89 /** Exchange management via mutual exclusion 90 * 91 * Suitable for any kind of client/server communication, 92 * but can limit parallelism. 93 * 94 */ 95 EXCHANGE_SERIALIZE 96 } exch_mgmt_t; 97 98 /** Session data */ 99 typedef struct { 100 /** List of inactive exchanges */ 101 list_t exch_list; 102 103 /** Exchange management style */ 104 exch_mgmt_t mgmt; 105 106 /** Session identification */ 107 int phone; 108 109 /** First clone connection argument */ 110 sysarg_t arg1; 111 112 /** Second clone connection argument */ 113 sysarg_t arg2; 114 115 /** Third clone connection argument */ 116 sysarg_t arg3; 117 118 /** Exchange mutex */ 119 fibril_mutex_t mutex; 120 121 /** Number of opened exchanges */ 122 atomic_t refcnt; 123 } async_sess_t; 124 125 /** Exchange data */ 126 typedef struct { 127 /** Link into list of inactive exchanges */ 128 link_t sess_link; 129 130 /** Link into global list of inactive exchanges */ 131 link_t global_link; 132 133 /** Session pointer */ 134 async_sess_t *sess; 135 136 /** Exchange identification */ 137 int phone; 138 } async_exch_t; 56 139 57 140 extern atomic_t threads_in_ipc_wait; … … 68 151 * User-friendly wrappers for async_send_fast() and async_send_slow(). The 69 152 * macros are in the form async_send_m(), where m denotes the number of payload 70 * arguments. 153 * arguments. Each macros chooses between the fast and the slow version based 71 154 * on m. 72 155 */ 73 156 74 #define async_send_0(phoneid, method, dataptr) \ 75 async_send_fast((phoneid), (method), 0, 0, 0, 0, (dataptr)) 76 #define async_send_1(phoneid, method, arg1, dataptr) \ 77 async_send_fast((phoneid), (method), (arg1), 0, 0, 0, (dataptr)) 78 #define async_send_2(phoneid, method, arg1, arg2, dataptr) \ 79 async_send_fast((phoneid), (method), (arg1), (arg2), 0, 0, (dataptr)) 80 #define async_send_3(phoneid, method, arg1, arg2, arg3, dataptr) \ 81 async_send_fast((phoneid), (method), (arg1), (arg2), (arg3), 0, (dataptr)) 82 #define async_send_4(phoneid, method, arg1, arg2, arg3, arg4, dataptr) \ 83 async_send_fast((phoneid), (method), (arg1), (arg2), (arg3), (arg4), \ 84 (dataptr)) 85 #define async_send_5(phoneid, method, arg1, arg2, arg3, arg4, arg5, dataptr) \ 86 async_send_slow((phoneid), (method), (arg1), (arg2), (arg3), (arg4), \ 87 (arg5), (dataptr)) 88 89 extern aid_t async_send_fast(int, sysarg_t, sysarg_t, sysarg_t, sysarg_t, 90 sysarg_t, ipc_call_t *); 91 extern aid_t async_send_slow(int, sysarg_t, sysarg_t, sysarg_t, sysarg_t, 157 #define async_send_0(exch, method, dataptr) \ 158 async_send_fast(exch, method, 0, 0, 0, 0, dataptr) 159 #define async_send_1(exch, method, arg1, dataptr) \ 160 async_send_fast(exch, method, arg1, 0, 0, 0, dataptr) 161 #define async_send_2(exch, method, arg1, arg2, dataptr) \ 162 async_send_fast(exch, method, arg1, arg2, 0, 0, dataptr) 163 #define async_send_3(exch, method, arg1, arg2, arg3, dataptr) \ 164 async_send_fast(exch, method, arg1, arg2, arg3, 0, dataptr) 165 #define async_send_4(exch, method, arg1, arg2, arg3, arg4, dataptr) \ 166 async_send_fast(exch, method, arg1, arg2, arg3, arg4, dataptr) 167 #define async_send_5(exch, method, arg1, arg2, arg3, arg4, arg5, dataptr) \ 168 async_send_slow(exch, method, arg1, arg2, arg3, arg4, arg5, dataptr) 169 170 extern aid_t async_send_fast(async_exch_t *, sysarg_t, sysarg_t, sysarg_t, 92 171 sysarg_t, sysarg_t, ipc_call_t *); 172 extern aid_t async_send_slow(async_exch_t *, sysarg_t, sysarg_t, sysarg_t, 173 sysarg_t, sysarg_t, sysarg_t, ipc_call_t *); 174 93 175 extern void async_wait_for(aid_t, sysarg_t *); 94 176 extern int async_wait_timeout(aid_t, sysarg_t *, suseconds_t); 95 177 96 178 extern fid_t async_new_connection(sysarg_t, sysarg_t, ipc_callid_t, 97 ipc_call_t *, void (*)(ipc_callid_t, ipc_call_t *)); 179 ipc_call_t *, async_client_conn_t, void *); 180 98 181 extern void async_usleep(suseconds_t); 99 182 extern void async_create_manager(void); … … 102 185 extern void async_set_client_data_constructor(async_client_data_ctor_t); 103 186 extern void async_set_client_data_destructor(async_client_data_dtor_t); 104 105 extern void *async_client_data_get(void); 187 extern void *async_get_client_data(void); 106 188 107 189 extern void async_set_client_connection(async_client_conn_t); 108 extern void async_set_interrupt_received(async_ client_conn_t);190 extern void async_set_interrupt_received(async_interrupt_handler_t); 109 191 110 192 /* … … 112 194 */ 113 195 114 extern void async_msg_0(int, sysarg_t); 115 extern void async_msg_1(int, sysarg_t, sysarg_t); 116 extern void async_msg_2(int, sysarg_t, sysarg_t, sysarg_t); 117 extern void async_msg_3(int, sysarg_t, sysarg_t, sysarg_t, sysarg_t); 118 extern void async_msg_4(int, sysarg_t, sysarg_t, sysarg_t, sysarg_t, sysarg_t); 119 extern void async_msg_5(int, sysarg_t, sysarg_t, sysarg_t, sysarg_t, sysarg_t, 196 extern void async_msg_0(async_exch_t *, sysarg_t); 197 extern void async_msg_1(async_exch_t *, sysarg_t, sysarg_t); 198 extern void async_msg_2(async_exch_t *, sysarg_t, sysarg_t, sysarg_t); 199 extern void async_msg_3(async_exch_t *, sysarg_t, sysarg_t, sysarg_t, sysarg_t); 200 extern void async_msg_4(async_exch_t *, sysarg_t, sysarg_t, sysarg_t, sysarg_t, 120 201 sysarg_t); 202 extern void async_msg_5(async_exch_t *, sysarg_t, sysarg_t, sysarg_t, sysarg_t, 203 sysarg_t, sysarg_t); 121 204 122 205 /* … … 138 221 */ 139 222 140 extern int async_forward_fast(ipc_callid_t, int, sysarg_t, sysarg_t, sysarg_t,141 unsigned int);142 extern int async_forward_slow(ipc_callid_t, int, sysarg_t, sysarg_t, sysarg_t,143 sysarg_t, sysarg_t, sysarg_t, unsigned int);223 extern int async_forward_fast(ipc_callid_t, async_exch_t *, sysarg_t, sysarg_t, 224 sysarg_t, unsigned int); 225 extern int async_forward_slow(ipc_callid_t, async_exch_t *, sysarg_t, sysarg_t, 226 sysarg_t, sysarg_t, sysarg_t, sysarg_t, unsigned int); 144 227 145 228 /* … … 150 233 */ 151 234 152 #define async_req_0_0(phoneid, method) \ 153 async_req_fast((phoneid), (method), 0, 0, 0, 0, NULL, NULL, NULL, NULL, \ 154 NULL) 155 #define async_req_0_1(phoneid, method, r1) \ 156 async_req_fast((phoneid), (method), 0, 0, 0, 0, (r1), NULL, NULL, NULL, \ 157 NULL) 158 #define async_req_0_2(phoneid, method, r1, r2) \ 159 async_req_fast((phoneid), (method), 0, 0, 0, 0, (r1), (r2), NULL, NULL, \ 160 NULL) 161 #define async_req_0_3(phoneid, method, r1, r2, r3) \ 162 async_req_fast((phoneid), (method), 0, 0, 0, 0, (r1), (r2), (r3), NULL, \ 163 NULL) 164 #define async_req_0_4(phoneid, method, r1, r2, r3, r4) \ 165 async_req_fast((phoneid), (method), 0, 0, 0, 0, (r1), (r2), (r3), (r4), \ 166 NULL) 167 #define async_req_0_5(phoneid, method, r1, r2, r3, r4, r5) \ 168 async_req_fast((phoneid), (method), 0, 0, 0, 0, (r1), (r2), (r3), (r4), \ 169 (r5)) 170 #define async_req_1_0(phoneid, method, arg1) \ 171 async_req_fast((phoneid), (method), (arg1), 0, 0, 0, NULL, NULL, NULL, \ 172 NULL, NULL) 173 #define async_req_1_1(phoneid, method, arg1, rc1) \ 174 async_req_fast((phoneid), (method), (arg1), 0, 0, 0, (rc1), NULL, NULL, \ 175 NULL, NULL) 176 #define async_req_1_2(phoneid, method, arg1, rc1, rc2) \ 177 async_req_fast((phoneid), (method), (arg1), 0, 0, 0, (rc1), (rc2), NULL, \ 178 NULL, NULL) 179 #define async_req_1_3(phoneid, method, arg1, rc1, rc2, rc3) \ 180 async_req_fast((phoneid), (method), (arg1), 0, 0, 0, (rc1), (rc2), (rc3), \ 181 NULL, NULL) 182 #define async_req_1_4(phoneid, method, arg1, rc1, rc2, rc3, rc4) \ 183 async_req_fast((phoneid), (method), (arg1), 0, 0, 0, (rc1), (rc2), (rc3), \ 184 (rc4), NULL) 185 #define async_req_1_5(phoneid, method, arg1, rc1, rc2, rc3, rc4, rc5) \ 186 async_req_fast((phoneid), (method), (arg1), 0, 0, 0, (rc1), (rc2), (rc3), \ 187 (rc4), (rc5)) 188 #define async_req_2_0(phoneid, method, arg1, arg2) \ 189 async_req_fast((phoneid), (method), (arg1), (arg2), 0, 0, NULL, NULL, \ 235 #define async_req_0_0(exch, method) \ 236 async_req_fast(exch, method, 0, 0, 0, 0, NULL, NULL, NULL, NULL, NULL) 237 #define async_req_0_1(exch, method, r1) \ 238 async_req_fast(exch, method, 0, 0, 0, 0, r1, NULL, NULL, NULL, NULL) 239 #define async_req_0_2(exch, method, r1, r2) \ 240 async_req_fast(exch, method, 0, 0, 0, 0, r1, r2, NULL, NULL, NULL) 241 #define async_req_0_3(exch, method, r1, r2, r3) \ 242 async_req_fast(exch, method, 0, 0, 0, 0, r1, r2, r3, NULL, NULL) 243 #define async_req_0_4(exch, method, r1, r2, r3, r4) \ 244 async_req_fast(exch, method, 0, 0, 0, 0, r1, r2, r3, r4, NULL) 245 #define async_req_0_5(exch, method, r1, r2, r3, r4, r5) \ 246 async_req_fast(exch, method, 0, 0, 0, 0, r1, r2, r3, r4, r5) 247 248 #define async_req_1_0(exch, method, arg1) \ 249 async_req_fast(exch, method, arg1, 0, 0, 0, NULL, NULL, NULL, NULL, \ 250 NULL) 251 #define async_req_1_1(exch, method, arg1, rc1) \ 252 async_req_fast(exch, method, arg1, 0, 0, 0, rc1, NULL, NULL, NULL, \ 253 NULL) 254 #define async_req_1_2(exch, method, arg1, rc1, rc2) \ 255 async_req_fast(exch, method, arg1, 0, 0, 0, rc1, rc2, NULL, NULL, \ 256 NULL) 257 #define async_req_1_3(exch, method, arg1, rc1, rc2, rc3) \ 258 async_req_fast(exch, method, arg1, 0, 0, 0, rc1, rc2, rc3, NULL, \ 259 NULL) 260 #define async_req_1_4(exch, method, arg1, rc1, rc2, rc3, rc4) \ 261 async_req_fast(exch, method, arg1, 0, 0, 0, rc1, rc2, rc3, rc4, \ 262 NULL) 263 #define async_req_1_5(exch, method, arg1, rc1, rc2, rc3, rc4, rc5) \ 264 async_req_fast(exch, method, arg1, 0, 0, 0, rc1, rc2, rc3, rc4, \ 265 rc5) 266 267 #define async_req_2_0(exch, method, arg1, arg2) \ 268 async_req_fast(exch, method, arg1, arg2, 0, 0, NULL, NULL, NULL, \ 269 NULL, NULL) 270 #define async_req_2_1(exch, method, arg1, arg2, rc1) \ 271 async_req_fast(exch, method, arg1, arg2, 0, 0, rc1, NULL, NULL, \ 272 NULL, NULL) 273 #define async_req_2_2(exch, method, arg1, arg2, rc1, rc2) \ 274 async_req_fast(exch, method, arg1, arg2, 0, 0, rc1, rc2, NULL, NULL, \ 275 NULL) 276 #define async_req_2_3(exch, method, arg1, arg2, rc1, rc2, rc3) \ 277 async_req_fast(exch, method, arg1, arg2, 0, 0, rc1, rc2, rc3, NULL, \ 278 NULL) 279 #define async_req_2_4(exch, method, arg1, arg2, rc1, rc2, rc3, rc4) \ 280 async_req_fast(exch, method, arg1, arg2, 0, 0, rc1, rc2, rc3, rc4, \ 281 NULL) 282 #define async_req_2_5(exch, method, arg1, arg2, rc1, rc2, rc3, rc4, rc5) \ 283 async_req_fast(exch, method, arg1, arg2, 0, 0, rc1, rc2, rc3, rc4, \ 284 rc5) 285 286 #define async_req_3_0(exch, method, arg1, arg2, arg3) \ 287 async_req_fast(exch, method, arg1, arg2, arg3, 0, NULL, NULL, NULL, \ 288 NULL, NULL) 289 #define async_req_3_1(exch, method, arg1, arg2, arg3, rc1) \ 290 async_req_fast(exch, method, arg1, arg2, arg3, 0, rc1, NULL, NULL, \ 291 NULL, NULL) 292 #define async_req_3_2(exch, method, arg1, arg2, arg3, rc1, rc2) \ 293 async_req_fast(exch, method, arg1, arg2, arg3, 0, rc1, rc2, NULL, \ 294 NULL, NULL) 295 #define async_req_3_3(exch, method, arg1, arg2, arg3, rc1, rc2, rc3) \ 296 async_req_fast(exch, method, arg1, arg2, arg3, 0, rc1, rc2, rc3, \ 297 NULL, NULL) 298 #define async_req_3_4(exch, method, arg1, arg2, arg3, rc1, rc2, rc3, rc4) \ 299 async_req_fast(exch, method, arg1, arg2, arg3, 0, rc1, rc2, rc3, \ 300 rc4, NULL) 301 #define async_req_3_5(exch, method, arg1, arg2, arg3, rc1, rc2, rc3, rc4, \ 302 rc5) \ 303 async_req_fast(exch, method, arg1, arg2, arg3, 0, rc1, rc2, rc3, \ 304 rc4, rc5) 305 306 #define async_req_4_0(exch, method, arg1, arg2, arg3, arg4) \ 307 async_req_fast(exch, method, arg1, arg2, arg3, arg4, NULL, NULL, \ 190 308 NULL, NULL, NULL) 191 #define async_req_ 2_1(phoneid, method, arg1, arg2, rc1) \192 async_req_fast( (phoneid), (method), (arg1), (arg2), 0, 0, (rc1), NULL, \309 #define async_req_4_1(exch, method, arg1, arg2, arg3, arg4, rc1) \ 310 async_req_fast(exch, method, arg1, arg2, arg3, arg4, rc1, NULL, \ 193 311 NULL, NULL, NULL) 194 #define async_req_2_2(phoneid, method, arg1, arg2, rc1, rc2) \ 195 async_req_fast((phoneid), (method), (arg1), (arg2), 0, 0, (rc1), (rc2), \ 312 #define async_req_4_2(exch, method, arg1, arg2, arg3, arg4, rc1, rc2) \ 313 async_req_fast(exch, method, arg1, arg2, arg3, arg4, rc1, rc2, NULL, \ 314 NULL, NULL) 315 #define async_req_4_3(exch, method, arg1, arg2, arg3, arg4, rc1, rc2, rc3) \ 316 async_req_fast(exch, method, arg1, arg2, arg3, arg4, rc1, rc2, rc3, \ 317 NULL, NULL) 318 #define async_req_4_4(exch, method, arg1, arg2, arg3, arg4, rc1, rc2, rc3, \ 319 rc4) \ 320 async_req_fast(exch, method, arg1, arg2, arg3, arg4, rc1, rc2, rc3, \ 321 rc4, NULL) 322 #define async_req_4_5(exch, method, arg1, arg2, arg3, arg4, rc1, rc2, rc3, \ 323 rc4, rc5) \ 324 async_req_fast(exch, method, arg1, arg2, arg3, arg4, rc1, rc2, rc3, \ 325 rc4, rc5) 326 327 #define async_req_5_0(exch, method, arg1, arg2, arg3, arg4, arg5) \ 328 async_req_slow(exch, method, arg1, arg2, arg3, arg4, arg5, NULL, \ 329 NULL, NULL, NULL, NULL) 330 #define async_req_5_1(exch, method, arg1, arg2, arg3, arg4, arg5, rc1) \ 331 async_req_slow(exch, method, arg1, arg2, arg3, arg4, arg5, rc1, \ 332 NULL, NULL, NULL, NULL) 333 #define async_req_5_2(exch, method, arg1, arg2, arg3, arg4, arg5, rc1, rc2) \ 334 async_req_slow(exch, method, arg1, arg2, arg3, arg4, arg5, rc1, rc2, \ 196 335 NULL, NULL, NULL) 197 #define async_req_2_3(phoneid, method, arg1, arg2, rc1, rc2, rc3) \ 198 async_req_fast((phoneid), (method), (arg1), (arg2), 0, 0, (rc1), (rc2), \ 199 (rc3), NULL, NULL) 200 #define async_req_2_4(phoneid, method, arg1, arg2, rc1, rc2, rc3, rc4) \ 201 async_req_fast((phoneid), (method), (arg1), (arg2), 0, 0, (rc1), (rc2), \ 202 (rc3), (rc4), NULL) 203 #define async_req_2_5(phoneid, method, arg1, arg2, rc1, rc2, rc3, rc4, rc5) \ 204 async_req_fast((phoneid), (method), (arg1), (arg2), 0, 0, (rc1), (rc2), \ 205 (rc3), (rc4), (rc5)) 206 #define async_req_3_0(phoneid, method, arg1, arg2, arg3) \ 207 async_req_fast((phoneid), (method), (arg1), (arg2), (arg3), 0, NULL, NULL, \ 208 NULL, NULL, NULL) 209 #define async_req_3_1(phoneid, method, arg1, arg2, arg3, rc1) \ 210 async_req_fast((phoneid), (method), (arg1), (arg2), (arg3), 0, (rc1), \ 211 NULL, NULL, NULL, NULL) 212 #define async_req_3_2(phoneid, method, arg1, arg2, arg3, rc1, rc2) \ 213 async_req_fast((phoneid), (method), (arg1), (arg2), (arg3), 0, (rc1), \ 214 (rc2), NULL, NULL, NULL) 215 #define async_req_3_3(phoneid, method, arg1, arg2, arg3, rc1, rc2, rc3) \ 216 async_req_fast((phoneid), (method), (arg1), (arg2), (arg3), 0, (rc1), \ 217 (rc2), (rc3), NULL, NULL) 218 #define async_req_3_4(phoneid, method, arg1, arg2, arg3, rc1, rc2, rc3, rc4) \ 219 async_req_fast((phoneid), (method), (arg1), (arg2), (arg3), 0, (rc1), \ 220 (rc2), (rc3), (rc4), NULL) 221 #define async_req_3_5(phoneid, method, arg1, arg2, arg3, rc1, rc2, rc3, rc4, \ 222 rc5) \ 223 async_req_fast((phoneid), (method), (arg1), (arg2), (arg3), 0, (rc1), \ 224 (rc2), (rc3), (rc4), (rc5)) 225 #define async_req_4_0(phoneid, method, arg1, arg2, arg3, arg4) \ 226 async_req_fast((phoneid), (method), (arg1), (arg2), (arg3), (arg4), NULL, \ 227 NULL, NULL, NULL, NULL) 228 #define async_req_4_1(phoneid, method, arg1, arg2, arg3, arg4, rc1) \ 229 async_req_fast((phoneid), (method), (arg1), (arg2), (arg3), (arg4), (rc1), \ 230 NULL, NULL, NULL, NULL) 231 #define async_req_4_2(phoneid, method, arg1, arg2, arg3, arg4, rc1, rc2) \ 232 async_req_fast((phoneid), (method), (arg1), (arg2), (arg3), (arg4), (rc1), \ 233 (rc2), NULL, NULL, NULL) 234 #define async_req_4_3(phoneid, method, arg1, arg2, arg3, arg4, rc1, rc2, rc3) \ 235 async_req_fast((phoneid), (method), (arg1), (arg2), (arg3), (arg4), (rc1), \ 236 (rc2), (rc3), NULL, NULL) 237 #define async_req_4_4(phoneid, method, arg1, arg2, arg3, arg4, rc1, rc2, rc3, \ 238 rc4) \ 239 async_req_fast((phoneid), (method), (arg1), (arg2), (arg3), (arg4), \ 240 (rc1), (rc2), (rc3), (rc4), NULL) 241 #define async_req_4_5(phoneid, method, arg1, arg2, arg3, arg4, rc1, rc2, rc3, \ 242 rc4, rc5) \ 243 async_req_fast((phoneid), (method), (arg1), (arg2), (arg3), (arg4), \ 244 (rc1), (rc2), (rc3), (rc4), (rc5)) 245 #define async_req_5_0(phoneid, method, arg1, arg2, arg3, arg4, arg5) \ 246 async_req_slow((phoneid), (method), (arg1), (arg2), (arg3), (arg4), \ 247 (arg5), NULL, NULL, NULL, NULL, NULL) 248 #define async_req_5_1(phoneid, method, arg1, arg2, arg3, arg4, arg5, rc1) \ 249 async_req_slow((phoneid), (method), (arg1), (arg2), (arg3), (arg4), \ 250 (arg5), (rc1), NULL, NULL, NULL, NULL) 251 #define async_req_5_2(phoneid, method, arg1, arg2, arg3, arg4, arg5, rc1, rc2) \ 252 async_req_slow((phoneid), (method), (arg1), (arg2), (arg3), (arg4), \ 253 (arg5), (rc1), (rc2), NULL, NULL, NULL) 254 #define async_req_5_3(phoneid, method, arg1, arg2, arg3, arg4, arg5, rc1, rc2, \ 336 #define async_req_5_3(exch, method, arg1, arg2, arg3, arg4, arg5, rc1, rc2, \ 255 337 rc3) \ 256 async_req_slow( (phoneid), (method), (arg1), (arg2), (arg3), (arg4), \257 (arg5), (rc1), (rc2), (rc3), NULL, NULL)258 #define async_req_5_4( phoneid, method, arg1, arg2, arg3, arg4, arg5, rc1, rc2, \338 async_req_slow(exch, method, arg1, arg2, arg3, arg4, arg5, rc1, rc2, \ 339 rc3, NULL, NULL) 340 #define async_req_5_4(exch, method, arg1, arg2, arg3, arg4, arg5, rc1, rc2, \ 259 341 rc3, rc4) \ 260 async_req_slow( (phoneid), (method), (arg1), (arg2), (arg3), (arg4), \261 (arg5), (rc1), (rc2), (rc3), (rc4), NULL)262 #define async_req_5_5( phoneid, method, arg1, arg2, arg3, arg4, arg5, rc1, rc2, \342 async_req_slow(exch, method, arg1, arg2, arg3, arg4, arg5, rc1, rc2, \ 343 rc3, rc4, NULL) 344 #define async_req_5_5(exch, method, arg1, arg2, arg3, arg4, arg5, rc1, rc2, \ 263 345 rc3, rc4, rc5) \ 264 async_req_slow((phoneid), (method), (arg1), (arg2), (arg3), (arg4), \ 265 (arg5), (rc1), (rc2), (rc3), (rc4), (rc5)) 266 267 extern sysarg_t async_req_fast(int, sysarg_t, sysarg_t, sysarg_t, sysarg_t, 268 sysarg_t, sysarg_t *, sysarg_t *, sysarg_t *, sysarg_t *, sysarg_t *); 269 extern sysarg_t async_req_slow(int, sysarg_t, sysarg_t, sysarg_t, sysarg_t, 346 async_req_slow(exch, method, arg1, arg2, arg3, arg4, arg5, rc1, rc2, \ 347 rc3, rc4, rc5) 348 349 extern sysarg_t async_req_fast(async_exch_t *, sysarg_t, sysarg_t, sysarg_t, 270 350 sysarg_t, sysarg_t, sysarg_t *, sysarg_t *, sysarg_t *, sysarg_t *, 271 351 sysarg_t *); 272 273 static inline void async_serialize_start(void) 274 { 275 fibril_inc_sercount(); 276 } 277 278 static inline void async_serialize_end(void) 279 { 280 fibril_dec_sercount(); 281 } 282 283 extern int async_connect_to_me(int, sysarg_t, sysarg_t, sysarg_t, 284 async_client_conn_t); 285 extern int async_connect_me_to(int, sysarg_t, sysarg_t, sysarg_t); 286 extern int async_connect_me_to_blocking(int, sysarg_t, sysarg_t, sysarg_t); 287 extern int async_connect_kbox(task_id_t); 288 extern int async_hangup(int); 352 extern sysarg_t async_req_slow(async_exch_t *, sysarg_t, sysarg_t, sysarg_t, 353 sysarg_t, sysarg_t, sysarg_t, sysarg_t *, sysarg_t *, sysarg_t *, 354 sysarg_t *, sysarg_t *); 355 356 extern async_sess_t *async_connect_me(exch_mgmt_t, async_exch_t *); 357 extern async_sess_t *async_connect_me_to(exch_mgmt_t, async_exch_t *, sysarg_t, 358 sysarg_t, sysarg_t); 359 extern async_sess_t *async_connect_me_to_blocking(exch_mgmt_t, async_exch_t *, 360 sysarg_t, sysarg_t, sysarg_t); 361 extern async_sess_t *async_connect_kbox(task_id_t); 362 363 extern int async_connect_to_me(async_exch_t *, sysarg_t, sysarg_t, sysarg_t, 364 async_client_conn_t, void *); 365 366 extern int async_hangup(async_sess_t *); 289 367 extern void async_poke(void); 290 368 369 extern async_exch_t *async_exchange_begin(async_sess_t *); 370 extern void async_exchange_end(async_exch_t *); 371 291 372 /* 292 373 * User-friendly wrappers for async_share_in_start(). 293 374 */ 294 375 295 #define async_share_in_start_0_0(phoneid, dst, size) \ 296 async_share_in_start((phoneid), (dst), (size), 0, NULL) 297 #define async_share_in_start_0_1(phoneid, dst, size, flags) \ 298 async_share_in_start((phoneid), (dst), (size), 0, (flags)) 299 #define async_share_in_start_1_0(phoneid, dst, size, arg) \ 300 async_share_in_start((phoneid), (dst), (size), (arg), NULL) 301 #define async_share_in_start_1_1(phoneid, dst, size, arg, flags) \ 302 async_share_in_start((phoneid), (dst), (size), (arg), (flags)) 303 304 extern int async_share_in_start(int, void *, size_t, sysarg_t, unsigned int *); 376 #define async_share_in_start_0_0(exch, dst, size) \ 377 async_share_in_start(exch, dst, size, 0, NULL) 378 #define async_share_in_start_0_1(exch, dst, size, flags) \ 379 async_share_in_start(exch, dst, size, 0, flags) 380 #define async_share_in_start_1_0(exch, dst, size, arg) \ 381 async_share_in_start(exch, dst, size, arg, NULL) 382 #define async_share_in_start_1_1(exch, dst, size, arg, flags) \ 383 async_share_in_start(exch, dst, size, arg, flags) 384 385 extern int async_share_in_start(async_exch_t *, void *, size_t, sysarg_t, 386 unsigned int *); 305 387 extern bool async_share_in_receive(ipc_callid_t *, size_t *); 306 388 extern int async_share_in_finalize(ipc_callid_t, void *, unsigned int); 307 389 308 extern int async_share_out_start( int, void *, unsigned int);390 extern int async_share_out_start(async_exch_t *, void *, unsigned int); 309 391 extern bool async_share_out_receive(ipc_callid_t *, size_t *, unsigned int *); 310 392 extern int async_share_out_finalize(ipc_callid_t, void *); … … 314 396 */ 315 397 316 #define async_data_read_forward_0_0(phoneid, method, answer) \ 317 async_data_read_forward_fast((phoneid), (method), 0, 0, 0, 0, NULL) 318 #define async_data_read_forward_0_1(phoneid, method, answer) \ 319 async_data_read_forward_fast((phoneid), (method), 0, 0, 0, 0, (answer)) 320 #define async_data_read_forward_1_0(phoneid, method, arg1, answer) \ 321 async_data_read_forward_fast((phoneid), (method), (arg1), 0, 0, 0, NULL) 322 #define async_data_read_forward_1_1(phoneid, method, arg1, answer) \ 323 async_data_read_forward_fast((phoneid), (method), (arg1), 0, 0, 0, (answer)) 324 #define async_data_read_forward_2_0(phoneid, method, arg1, arg2, answer) \ 325 async_data_read_forward_fast((phoneid), (method), (arg1), (arg2), 0, 0, NULL) 326 #define async_data_read_forward_2_1(phoneid, method, arg1, arg2, answer) \ 327 async_data_read_forward_fast((phoneid), (method), (arg1), (arg2), 0, 0, \ 328 (answer)) 329 #define async_data_read_forward_3_0(phoneid, method, arg1, arg2, arg3, answer) \ 330 async_data_read_forward_fast((phoneid), (method), (arg1), (arg2), (arg3), 0, \ 331 NULL) 332 #define async_data_read_forward_3_1(phoneid, method, arg1, arg2, arg3, answer) \ 333 async_data_read_forward_fast((phoneid), (method), (arg1), (arg2), (arg3), 0, \ 334 (answer)) 335 #define async_data_read_forward_4_0(phoneid, method, arg1, arg2, arg3, arg4, answer) \ 336 async_data_read_forward_fast((phoneid), (method), (arg1), (arg2), (arg3), \ 337 (arg4), NULL) 338 #define async_data_read_forward_4_1(phoneid, method, arg1, arg2, arg3, arg4, answer) \ 339 async_data_read_forward_fast((phoneid), (method), (arg1), (arg2), (arg3), \ 340 (arg4), (answer)) 341 342 #define async_data_read_start(p, buf, len) \ 343 async_data_read_start_generic((p), (buf), (len), IPC_XF_NONE) 344 345 extern int async_data_read_start_generic(int, void *, size_t, int); 398 #define async_data_read_forward_0_0(exch, method, answer) \ 399 async_data_read_forward_fast(exch, method, 0, 0, 0, 0, NULL) 400 #define async_data_read_forward_0_1(exch, method, answer) \ 401 async_data_read_forward_fast(exch, method, 0, 0, 0, 0, answer) 402 #define async_data_read_forward_1_0(exch, method, arg1, answer) \ 403 async_data_read_forward_fast(exch, method, arg1, 0, 0, 0, NULL) 404 #define async_data_read_forward_1_1(exch, method, arg1, answer) \ 405 async_data_read_forward_fast(exch, method, arg1, 0, 0, 0, answer) 406 #define async_data_read_forward_2_0(exch, method, arg1, arg2, answer) \ 407 async_data_read_forward_fast(exch, method, arg1, arg2, 0, 0, NULL) 408 #define async_data_read_forward_2_1(exch, method, arg1, arg2, answer) \ 409 async_data_read_forward_fast(exch, method, arg1, arg2, 0, 0, answer) 410 #define async_data_read_forward_3_0(exch, method, arg1, arg2, arg3, answer) \ 411 async_data_read_forward_fast(exch, method, arg1, arg2, arg3, 0, NULL) 412 #define async_data_read_forward_3_1(exch, method, arg1, arg2, arg3, answer) \ 413 async_data_read_forward_fast(exch, method, arg1, arg2, arg3, 0, \ 414 answer) 415 #define async_data_read_forward_4_0(exch, method, arg1, arg2, arg3, arg4, \ 416 answer) \ 417 async_data_read_forward_fast(exch, method, arg1, arg2, arg3, arg4, \ 418 NULL) 419 #define async_data_read_forward_4_1(exch, method, arg1, arg2, arg3, arg4, \ 420 answer) \ 421 async_data_read_forward_fast(exch, method, arg1, arg2, arg3, arg4, \ 422 answer) 423 424 extern aid_t async_data_read(async_exch_t *, void *, size_t, ipc_call_t *); 425 extern int async_data_read_start(async_exch_t *, void *, size_t); 346 426 extern bool async_data_read_receive(ipc_callid_t *, size_t *); 347 427 extern int async_data_read_finalize(ipc_callid_t, const void *, size_t); 348 428 349 extern int async_data_read_forward_fast( int, sysarg_t, sysarg_t, sysarg_t,350 sysarg_t, sysarg_t, ipc_call_t *);429 extern int async_data_read_forward_fast(async_exch_t *, sysarg_t, sysarg_t, 430 sysarg_t, sysarg_t, sysarg_t, ipc_call_t *); 351 431 352 432 /* … … 354 434 */ 355 435 356 #define async_data_write_forward_0_0(phoneid, method, answer) \ 357 async_data_write_forward_fast((phoneid), (method), 0, 0, 0, 0, NULL) 358 #define async_data_write_forward_0_1(phoneid, method, answer) \ 359 async_data_write_forward_fast((phoneid), (method), 0, 0, 0, 0, (answer)) 360 #define async_data_write_forward_1_0(phoneid, method, arg1, answer) \ 361 async_data_write_forward_fast((phoneid), (method), (arg1), 0, 0, 0, NULL) 362 #define async_data_write_forward_1_1(phoneid, method, arg1, answer) \ 363 async_data_write_forward_fast((phoneid), (method), (arg1), 0, 0, 0, \ 364 (answer)) 365 #define async_data_write_forward_2_0(phoneid, method, arg1, arg2, answer) \ 366 async_data_write_forward_fast((phoneid), (method), (arg1), (arg2), 0, 0, \ 367 NULL) 368 #define async_data_write_forward_2_1(phoneid, method, arg1, arg2, answer) \ 369 async_data_write_forward_fast((phoneid), (method), (arg1), (arg2), 0, 0, \ 370 (answer)) 371 #define async_data_write_forward_3_0(phoneid, method, arg1, arg2, arg3, answer) \ 372 async_data_write_forward_fast((phoneid), (method), (arg1), (arg2), (arg3), \ 373 0, NULL) 374 #define async_data_write_forward_3_1(phoneid, method, arg1, arg2, arg3, answer) \ 375 async_data_write_forward_fast((phoneid), (method), (arg1), (arg2), (arg3), \ 376 0, (answer)) 377 #define async_data_write_forward_4_0(phoneid, method, arg1, arg2, arg3, arg4, answer) \ 378 async_data_write_forward_fast((phoneid), (method), (arg1), (arg2), (arg3), \ 379 (arg4), NULL) 380 #define async_data_write_forward_4_1(phoneid, method, arg1, arg2, arg3, arg4, answer) \ 381 async_data_write_forward_fast((phoneid), (method), (arg1), (arg2), (arg3), \ 382 (arg4), (answer)) 383 384 #define async_data_write_start(p, buf, len) \ 385 async_data_write_start_generic((p), (buf), (len), IPC_XF_NONE) 386 387 extern int async_data_write_start_generic(int, const void *, size_t, int); 436 #define async_data_write_forward_0_0(exch, method, answer) \ 437 async_data_write_forward_fast(exch, method, 0, 0, 0, 0, NULL) 438 #define async_data_write_forward_0_1(exch, method, answer) \ 439 async_data_write_forward_fast(exch, method, 0, 0, 0, 0, answer) 440 #define async_data_write_forward_1_0(exch, method, arg1, answer) \ 441 async_data_write_forward_fast(exch, method, arg1, 0, 0, 0, NULL) 442 #define async_data_write_forward_1_1(exch, method, arg1, answer) \ 443 async_data_write_forward_fast(exch, method, arg1, 0, 0, 0, answer) 444 #define async_data_write_forward_2_0(exch, method, arg1, arg2, answer) \ 445 async_data_write_forward_fast(exch, method, arg1, arg2, 0, 0, NULL) 446 #define async_data_write_forward_2_1(exch, method, arg1, arg2, answer) \ 447 async_data_write_forward_fast(exch, method, arg1, arg2, 0, 0, answer) 448 #define async_data_write_forward_3_0(exch, method, arg1, arg2, arg3, answer) \ 449 async_data_write_forward_fast(exch, method, arg1, arg2, arg3, 0, \ 450 NULL) 451 #define async_data_write_forward_3_1(exch, method, arg1, arg2, arg3, answer) \ 452 async_data_write_forward_fast(exch, method, arg1, arg2, arg3, 0, \ 453 answer) 454 #define async_data_write_forward_4_0(exch, method, arg1, arg2, arg3, arg4, \ 455 answer) \ 456 async_data_write_forward_fast(exch, method, arg1, arg2, arg3, arg4, \ 457 NULL) 458 #define async_data_write_forward_4_1(exch, method, arg1, arg2, arg3, arg4, \ 459 answer) \ 460 async_data_write_forward_fast(exch, method, arg1, arg2, arg3, arg4, \ 461 answer) 462 463 extern int async_data_write_start(async_exch_t *, const void *, size_t); 388 464 extern bool async_data_write_receive(ipc_callid_t *, size_t *); 389 465 extern int async_data_write_finalize(ipc_callid_t, void *, size_t); … … 393 469 extern void async_data_write_void(sysarg_t); 394 470 395 extern int async_data_write_forward_fast(int, sysarg_t, sysarg_t, sysarg_t, 396 sysarg_t, sysarg_t, ipc_call_t *); 471 extern int async_data_write_forward_fast(async_exch_t *, sysarg_t, sysarg_t, 472 sysarg_t, sysarg_t, sysarg_t, ipc_call_t *); 473 474 extern int async_exchange_clone(async_exch_t *, async_exch_t *); 475 extern async_sess_t *async_clone_receive(exch_mgmt_t); 476 extern async_sess_t *async_callback_receive(exch_mgmt_t); 477 extern async_sess_t *async_callback_receive_start(exch_mgmt_t, ipc_call_t *); 397 478 398 479 #endif -
uspace/lib/c/include/bitops.h
r52a79081 ra33f0a6 38 38 #include <sys/types.h> 39 39 40 /** Mask with bit @a n set. */ 41 #define BIT_V(type, n) \ 42 ((type)1 << ((n) - 1)) 43 44 /** Mask with rightmost @a n bits set. */ 45 #define BIT_RRANGE(type, n) \ 46 (BIT_V(type, (n) + 1) - 1) 47 48 /** Mask with bits @a hi .. @a lo set. @a hi >= @a lo. */ 49 #define BIT_RANGE(type, hi, lo) \ 50 (BIT_RRANGE(type, (hi) - (lo) + 1) << (lo)) 51 52 /** Extract range of bits @a hi .. @a lo from @a value. */ 53 #define BIT_RANGE_EXTRACT(type, hi, lo, value) \ 54 (((value) >> (lo)) & BIT_RRANGE(type, (hi) - (lo) + 1)) 40 55 41 56 /** Return position of first non-zero bit from left (i.e. [log_2(arg)]). -
uspace/lib/c/include/device/char_dev.h
r52a79081 ra33f0a6 36 36 #define LIBC_DEVICE_CHAR_DEV_H_ 37 37 38 #include <async.h> 39 38 40 typedef enum { 39 41 CHAR_DEV_READ = 0, … … 41 43 } char_dev_method_t; 42 44 43 ssize_t char_dev_read(int dev_phone, void *buf, size_t len);44 ssize_t char_dev_write(int dev_phone, void *buf, size_t len);45 extern ssize_t char_dev_read(async_sess_t *, void *, size_t); 46 extern ssize_t char_dev_write(async_sess_t *, void *, size_t); 45 47 46 48 #endif -
uspace/lib/c/include/device/hw_res.h
r52a79081 ra33f0a6 26 26 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 27 27 */ 28 28 29 29 /** @addtogroup libc 30 30 * @{ … … 32 32 /** @file 33 33 */ 34 34 35 35 #ifndef LIBC_DEVICE_HW_RES_H_ 36 36 #define LIBC_DEVICE_HW_RES_H_ 37 37 38 38 #include <ipc/dev_iface.h> 39 #include <async.h> 39 40 #include <bool.h> 40 41 … … 48 49 typedef enum { 49 50 INTERRUPT, 50 IO_RANGE, 51 IO_RANGE, 51 52 MEM_RANGE 52 53 } hw_res_type_t; … … 66 67 size_t size; 67 68 } mem_range; 68 69 69 70 struct { 70 71 uint64_t address; … … 72 73 size_t size; 73 74 } io_range; 74 75 75 76 struct { 76 77 int irq; … … 88 89 if (hw_res->resources != NULL) { 89 90 free(hw_res->resources); 90 91 91 hw_res->resources = NULL; 92 92 } 93 93 94 94 hw_res->count = 0; 95 95 } 96 96 97 extern int hw_res_get_resource_list( int, hw_resource_list_t *);98 extern bool hw_res_enable_interrupt( int);97 extern int hw_res_get_resource_list(async_sess_t *, hw_resource_list_t *); 98 extern bool hw_res_enable_interrupt(async_sess_t *); 99 99 100 100 #endif -
uspace/lib/c/include/devman.h
r52a79081 ra33f0a6 41 41 #include <bool.h> 42 42 43 extern int devman_get_phone(devman_interface_t, unsigned int); 44 extern void devman_hangup_phone(devman_interface_t); 43 extern async_exch_t *devman_exchange_begin_blocking(devman_interface_t); 44 extern async_exch_t *devman_exchange_begin(devman_interface_t); 45 extern void devman_exchange_end(async_exch_t *); 45 46 46 47 extern int devman_driver_register(const char *, async_client_conn_t); … … 48 49 devman_handle_t, devman_handle_t *); 49 50 50 extern int devman_device_connect(devman_handle_t, unsigned int); 51 extern int devman_parent_device_connect(devman_handle_t, unsigned int); 51 extern async_sess_t *devman_device_connect(exch_mgmt_t, devman_handle_t, 52 unsigned int); 53 extern async_sess_t *devman_parent_device_connect(exch_mgmt_t, devman_handle_t, 54 unsigned int); 52 55 53 56 extern int devman_device_get_handle(const char *, devman_handle_t *, … … 55 58 extern int devman_device_get_handle_by_class(const char *, const char *, 56 59 devman_handle_t *, unsigned int); 60 extern int devman_get_device_path(devman_handle_t, char *, size_t); 57 61 58 62 extern int devman_add_device_to_class(devman_handle_t, const char *); -
uspace/lib/c/include/devmap.h
r52a79081 ra33f0a6 40 40 #include <bool.h> 41 41 42 extern int devmap_get_phone(devmap_interface_t, unsigned int); 43 extern void devmap_hangup_phone(devmap_interface_t iface); 42 extern async_exch_t *devmap_exchange_begin_blocking(devmap_interface_t); 43 extern async_exch_t *devmap_exchange_begin(devmap_interface_t); 44 extern void devmap_exchange_end(async_exch_t *); 44 45 45 46 extern int devmap_driver_register(const char *, async_client_conn_t); 46 47 extern int devmap_device_register(const char *, devmap_handle_t *); 47 extern int devmap_device_register_with_iface(const char *, devmap_handle_t *, sysarg_t); 48 extern int devmap_device_register_with_iface(const char *, devmap_handle_t *, 49 sysarg_t); 48 50 49 extern int devmap_device_get_handle(const char *, devmap_handle_t *, unsigned int); 50 extern int devmap_namespace_get_handle(const char *, devmap_handle_t *, unsigned int); 51 extern int devmap_device_get_handle(const char *, devmap_handle_t *, 52 unsigned int); 53 extern int devmap_namespace_get_handle(const char *, devmap_handle_t *, 54 unsigned int); 51 55 extern devmap_handle_type_t devmap_handle_probe(devmap_handle_t); 52 56 53 extern int devmap_device_connect(devmap_handle_t, unsigned int); 57 extern async_sess_t *devmap_device_connect(exch_mgmt_t, devmap_handle_t, 58 unsigned int); 54 59 55 60 extern int devmap_null_create(void); -
uspace/lib/c/include/elf/elf_load.h
r52a79081 ra33f0a6 1 1 /* 2 * Copyright (c) 2006 Sergey Bondari 2 3 * Copyright (c) 2008 Jiri Svoboda 3 4 * All rights reserved. … … 38 39 39 40 #include <arch/elf.h> 41 #include <elf/elf.h> 40 42 #include <sys/types.h> 41 43 #include <loader/pcb.h> 42 44 43 #include "elf.h" 45 /** 46 * ELF error return codes 47 */ 48 #define EE_OK 0 /* No error */ 49 #define EE_INVALID 1 /* Invalid ELF image */ 50 #define EE_MEMORY 2 /* Cannot allocate address space */ 51 #define EE_INCOMPATIBLE 3 /* ELF image is not compatible with current architecture */ 52 #define EE_UNSUPPORTED 4 /* Non-supported ELF (e.g. dynamic ELFs) */ 53 #define EE_LOADER 5 /* The image is actually a program loader. */ 54 #define EE_IRRECOVERABLE 6 55 56 typedef enum { 57 /** Leave all segments in RW access mode. */ 58 ELDF_RW = 1 59 } eld_flags_t; 44 60 45 61 /** … … 67 83 uintptr_t bias; 68 84 85 /** Flags passed to the ELF loader. */ 86 eld_flags_t flags; 87 69 88 /** A copy of the ELF file header */ 70 89 elf_header_t *header; … … 74 93 } elf_ld_t; 75 94 76 int elf_load_file(const char *file_name, size_t so_bias, elf_info_t *info);77 void elf_run(elf_info_t *info, pcb_t *pcb);78 void elf_create_pcb(elf_info_t *info, pcb_t *pcb);95 extern const char *elf_error(unsigned int); 96 extern int elf_load_file(const char *, size_t, eld_flags_t, elf_info_t *); 97 extern void elf_create_pcb(elf_info_t *, pcb_t *); 79 98 80 99 #endif -
uspace/lib/c/include/errno.h
r52a79081 ra33f0a6 56 56 #define EMLINK (-266) 57 57 58 /** Bad checksum. */ 59 #define EBADCHECKSUM (-300) 60 61 /** USB: stalled operation. */ 62 #define ESTALL (-301) 63 64 /** Empty resource (no data). */ 65 #define EEMPTY (-302) 66 67 /** Negative acknowledgment. */ 68 #define ENAK (-303) 69 58 70 /** An API function is called while another blocking function is in progress. */ 59 71 #define EINPROGRESS (-10036) -
uspace/lib/c/include/event.h
r52a79081 ra33f0a6 39 39 40 40 extern int event_subscribe(event_type_t, sysarg_t); 41 extern int event_unmask(event_type_t); 41 42 42 43 #endif -
uspace/lib/c/include/fibril.h
r52a79081 ra33f0a6 70 70 int (*func)(void *); 71 71 tcb_t *tcb; 72 72 73 73 struct fibril *clean_after_me; 74 74 int retval; 75 75 int flags; 76 76 77 77 fibril_owner_info_t *waits_for; 78 78 } fibril_t; -
uspace/lib/c/include/fibril_synch.h
r52a79081 ra33f0a6 45 45 fibril_owner_info_t oi; /**< Keep this the first thing. */ 46 46 int counter; 47 li nk_t waiters;47 list_t waiters; 48 48 } fibril_mutex_t; 49 49 … … 55 55 .counter = 1, \ 56 56 .waiters = { \ 57 .prev = &name.waiters, \ 58 .next = &name.waiters, \ 57 .head = { \ 58 .prev = &(name).waiters.head, \ 59 .next = &(name).waiters.head, \ 60 } \ 59 61 } \ 60 62 } … … 67 69 unsigned writers; 68 70 unsigned readers; 69 li nk_t waiters;71 list_t waiters; 70 72 } fibril_rwlock_t; 71 73 … … 78 80 .writers = 0, \ 79 81 .waiters = { \ 80 .prev = &name.waiters, \ 81 .next = &name.waiters, \ 82 .head = { \ 83 .prev = &(name).waiters.head, \ 84 .next = &(name).waiters.head, \ 85 } \ 82 86 } \ 83 87 } … … 87 91 88 92 typedef struct { 89 li nk_t waiters;93 list_t waiters; 90 94 } fibril_condvar_t; 91 95 … … 93 97 { \ 94 98 .waiters = { \ 95 .next = &name.waiters, \ 96 .prev = &name.waiters, \ 99 .head = { \ 100 .next = &(name).waiters.head, \ 101 .prev = &(name).waiters.head, \ 102 } \ 97 103 } \ 98 104 } -
uspace/lib/c/include/io/console.h
r52a79081 ra33f0a6 36 36 #define LIBC_IO_CONSOLE_H_ 37 37 38 #include <sys/time.h> 39 #include <async.h> 38 40 #include <bool.h> 39 40 typedef enum { 41 KEY_PRESS, 42 KEY_RELEASE 43 } console_ev_type_t; 41 #include <stdio.h> 44 42 45 43 typedef enum { … … 50 48 } console_caps_t; 51 49 50 /** Console control structure. */ 51 typedef struct { 52 /** Console input file */ 53 FILE *input; 54 55 /** Console output file */ 56 FILE *output; 57 58 /** Console input session */ 59 async_sess_t *input_sess; 60 61 /** Console output session */ 62 async_sess_t *output_sess; 63 64 /** Input request call with timeout */ 65 ipc_call_t input_call; 66 67 /** Input response with timeout */ 68 aid_t input_aid; 69 } console_ctrl_t; 70 71 typedef enum { 72 KEY_PRESS, 73 KEY_RELEASE 74 } kbd_event_type_t; 75 52 76 /** Console event structure. */ 53 77 typedef struct { 54 78 /** Press or release event. */ 55 console_ev_type_t type;79 kbd_event_type_t type; 56 80 57 81 /** Keycode of the key that was pressed or released. */ … … 63 87 /** The character that was generated or '\0' for none. */ 64 88 wchar_t c; 65 } console_event_t;89 } kbd_event_t; 66 90 67 extern void console_clear(int phone); 91 extern console_ctrl_t *console_init(FILE *, FILE *); 92 extern void console_done(console_ctrl_t *); 93 extern bool console_kcon(void); 68 94 69 extern int console_get_size(int phone, sysarg_t *cols, sysarg_t *rows); 70 extern int console_get_pos(int phone, sysarg_t *col, sysarg_t *row); 71 extern void console_set_pos(int phone, sysarg_t col, sysarg_t row); 95 extern void console_flush(console_ctrl_t *); 96 extern void console_clear(console_ctrl_t *); 72 97 73 extern void console_set_style(int phone, uint8_t style); 74 extern void console_set_color(int phone, uint8_t fg_color, uint8_t bg_color, 75 uint8_t flags); 76 extern void console_set_rgb_color(int phone, uint32_t fg_color, uint32_t bg_color); 98 extern int console_get_size(console_ctrl_t *, sysarg_t *, sysarg_t *); 99 extern int console_get_pos(console_ctrl_t *, sysarg_t *, sysarg_t *); 100 extern void console_set_pos(console_ctrl_t *, sysarg_t, sysarg_t); 77 101 78 extern void console_ cursor_visibility(int phone, bool show);79 extern int console_get_color_cap(int phone, sysarg_t *ccap);80 extern void console_ kcon_enable(int phone);102 extern void console_set_style(console_ctrl_t *, uint8_t); 103 extern void console_set_color(console_ctrl_t *, uint8_t, uint8_t, uint8_t); 104 extern void console_set_rgb_color(console_ctrl_t *, uint32_t, uint32_t); 81 105 82 extern bool console_get_event(int phone, console_event_t *event); 106 extern void console_cursor_visibility(console_ctrl_t *, bool); 107 extern int console_get_color_cap(console_ctrl_t *, sysarg_t *); 108 extern bool console_get_kbd_event(console_ctrl_t *, kbd_event_t *); 109 extern bool console_get_kbd_event_timeout(console_ctrl_t *, kbd_event_t *, 110 suseconds_t *); 83 111 84 112 #endif -
uspace/lib/c/include/io/klog.h
r52a79081 ra33f0a6 37 37 38 38 #include <sys/types.h> 39 #include <stdarg.h> 39 40 40 41 extern size_t klog_write(const void *, size_t); 41 42 extern void klog_update(void); 43 extern int klog_printf(const char *, ...); 44 extern int klog_vprintf(const char *, va_list); 42 45 43 46 #endif -
uspace/lib/c/include/ipc/clipboard.h
r52a79081 ra33f0a6 36 36 #define LIBC_IPC_CLIPBOARD_H_ 37 37 38 #include <ipc/common.h> 39 38 40 typedef enum { 39 41 CLIPBOARD_PUT_DATA = IPC_FIRST_USER_METHOD, -
uspace/lib/c/include/ipc/console.h
r52a79081 ra33f0a6 48 48 CONSOLE_SET_COLOR, 49 49 CONSOLE_SET_RGB_COLOR, 50 CONSOLE_CURSOR_VISIBILITY, 51 CONSOLE_KCON_ENABLE 50 CONSOLE_CURSOR_VISIBILITY 52 51 } console_request_t; 53 52 -
uspace/lib/c/include/ipc/dev_iface.h
r52a79081 ra33f0a6 37 37 HW_RES_DEV_IFACE = 0, 38 38 CHAR_DEV_IFACE, 39 40 /** Interface provided by any PCI device. */ 41 PCI_DEV_IFACE, 42 43 /** Interface provided by any USB device. */ 44 USB_DEV_IFACE, 45 /** Interface provided by USB host controller. */ 46 USBHC_DEV_IFACE, 47 /** Interface provided by USB HID devices. */ 48 USBHID_DEV_IFACE, 49 39 50 DEV_IFACE_MAX 40 51 } dev_inferface_idx_t; … … 48 59 DEV_IFACE_ID(DEV_FIRST_CUSTOM_METHOD_IDX) 49 60 61 /* 62 * The first argument is actually method (as the "real" method is used 63 * for indexing into interfaces. 64 */ 65 66 #define DEV_IPC_GET_ARG1(call) IPC_GET_ARG2((call)) 67 #define DEV_IPC_GET_ARG2(call) IPC_GET_ARG3((call)) 68 #define DEV_IPC_GET_ARG3(call) IPC_GET_ARG4((call)) 69 #define DEV_IPC_GET_ARG4(call) IPC_GET_ARG5((call)) 70 50 71 51 72 #endif -
uspace/lib/c/include/ipc/devman.h
r52a79081 ra33f0a6 72 72 */ 73 73 typedef struct match_id_list { 74 li nk_t ids;74 list_t ids; 75 75 } match_id_list_t; 76 76 … … 95 95 { 96 96 match_id_t *mid = NULL; 97 link_t *link = ids->ids. next;97 link_t *link = ids->ids.head.next; 98 98 99 while (link != &ids->ids ) {99 while (link != &ids->ids.head) { 100 100 mid = list_get_instance(link, match_id_t,link); 101 101 if (mid->score < id->score) { 102 102 break; 103 } 103 } 104 104 link = link->next; 105 105 } … … 118 118 match_id_t *id; 119 119 120 while (!list_empty(&ids->ids)) {121 link = ids->ids.next;122 list_remove(link); 120 while (!list_empty(&ids->ids)) { 121 link = list_first(&ids->ids); 122 list_remove(link); 123 123 id = list_get_instance(link, match_id_t, link); 124 delete_match_id(id); 125 } 124 delete_match_id(id); 125 } 126 126 } 127 127 … … 149 149 typedef enum { 150 150 DEVMAN_DEVICE_GET_HANDLE = IPC_FIRST_USER_METHOD, 151 DEVMAN_DEVICE_GET_HANDLE_BY_CLASS 151 DEVMAN_DEVICE_GET_HANDLE_BY_CLASS, 152 DEVMAN_DEVICE_GET_DEVICE_PATH 152 153 } client_to_devman_t; 153 154 -
uspace/lib/c/include/ipc/devmap.h
r52a79081 ra33f0a6 31 31 */ 32 32 33 #ifndef DEVMAP_DEVMAP_H_34 #define DEVMAP_DEVMAP_H_33 #ifndef LIBC_IPC_DEVMAP_H_ 34 #define LIBC_IPC_DEVMAP_H_ 35 35 36 36 #include <ipc/common.h> -
uspace/lib/c/include/ipc/ipc.h
r52a79081 ra33f0a6 42 42 #include <sys/types.h> 43 43 #include <ipc/common.h> 44 #include <kernel/ipc/ipc_methods.h> 44 45 #include <kernel/synch/synch.h> 45 46 #include <task.h> … … 255 256 extern int ipc_connect_to_me(int, sysarg_t, sysarg_t, sysarg_t, sysarg_t *, 256 257 sysarg_t *); 258 extern int ipc_connect_me(int); 257 259 extern int ipc_connect_me_to(int, sysarg_t, sysarg_t, sysarg_t); 258 260 extern int ipc_connect_me_to_blocking(int, sysarg_t, sysarg_t, sysarg_t); -
uspace/lib/c/include/ipc/mouseev.h
r52a79081 ra33f0a6 27 27 */ 28 28 29 /** @addtogroup kbdgen generic 30 * @brief HelenOS generic uspace keyboard handler. 31 * @ingroup kbd 29 /** @addtogroup mouse 30 * @brief 32 31 * @{ 33 32 */ … … 35 34 */ 36 35 37 #ifndef LIBC_IPC_ KBD_H_38 #define LIBC_IPC_ KBD_H_36 #ifndef LIBC_IPC_MOUSEEV_H_ 37 #define LIBC_IPC_MOUSEEV_H_ 39 38 40 39 #include <ipc/common.h> 40 #include <ipc/dev_iface.h> 41 41 42 42 typedef enum { 43 KBD_YIELD = IPC_FIRST_USER_METHOD,44 KBD_RECLAIM45 } kbd_request_t;43 MOUSEEV_YIELD = DEV_FIRST_CUSTOM_METHOD, 44 MOUSEEV_RECLAIM 45 } mouseev_request_t; 46 46 47 47 typedef enum { 48 KBD_EVENT = IPC_FIRST_USER_METHOD 49 } kbd_notif_t; 48 MOUSEEV_MOVE_EVENT = IPC_FIRST_USER_METHOD, 49 MOUSEEV_BUTTON_EVENT 50 } mouseev_notif_t; 50 51 51 52 #endif -
uspace/lib/c/include/ipc/net.h
r52a79081 ra33f0a6 335 335 #define IPC_GET_ERROR(call) ((services_t) IPC_GET_ARG4(call)) 336 336 337 /** Return the phone message argument.338 *339 * @param[in] call Message call structure.340 *341 */342 #define IPC_GET_PHONE(call) ((int) IPC_GET_ARG5(call))343 344 337 /** Set the device identifier in the message answer. 345 338 * -
uspace/lib/c/include/ipc/ns.h
r52a79081 ra33f0a6 33 33 */ 34 34 35 #ifndef LIBC_ NS_H_36 #define LIBC_ NS_H_35 #ifndef LIBC_IPC_NS_H_ 36 #define LIBC_IPC_NS_H_ 37 37 38 #include <sys/types.h>39 38 #include <ipc/common.h> 40 39 … … 46 45 } ns_request_t; 47 46 48 extern int service_register(sysarg_t);49 extern int service_connect(sysarg_t, sysarg_t, sysarg_t);50 extern int service_connect_blocking(sysarg_t, sysarg_t, sysarg_t);51 52 47 #endif 53 48 -
uspace/lib/c/include/ipc/serial_ctl.h
r52a79081 ra33f0a6 32 32 #include <ipc/dev_iface.h> 33 33 34 /** ipc methods for getting/setting serial communication properties 35 * 1st ipc arg: baud rate 36 * 2nd ipc arg: parity 37 * 3rd ipc arg: number of bits in one word 38 * 4th ipc arg: number of stop bits 34 /** IPC methods for getting/setting serial communication properties 35 * 36 * 1st IPC arg: baud rate 37 * 2nd IPC arg: parity 38 * 3rd IPC arg: number of bits in one word 39 * 4th IPC arg: number of stop bits 40 * 39 41 */ 40 typedef enum { 42 typedef enum { 41 43 SERIAL_GET_COM_PROPS = DEV_FIRST_CUSTOM_METHOD, 42 44 SERIAL_SET_COM_PROPS … … 48 50 SERIAL_EVEN_PARITY = 3, 49 51 SERIAL_MARK_PARITY = 5, 50 SERIAL_SPACE_PARITY = 7 52 SERIAL_SPACE_PARITY = 7 51 53 } serial_parity_t; 52 54 -
uspace/lib/c/include/ipc/services.h
r52a79081 ra33f0a6 38 38 #define LIBC_SERVICES_H_ 39 39 40 #include <fourcc.h> 41 40 42 typedef enum { 41 SERVICE_NONE = 0, 42 SERVICE_LOAD, 43 SERVICE_PCI, 44 SERVICE_VIDEO, 45 SERVICE_CONSOLE, 46 SERVICE_VFS, 47 SERVICE_DEVMAP, 48 SERVICE_DEVMAN, 49 SERVICE_IRC, 50 SERVICE_CLIPBOARD, 51 SERVICE_NETWORKING, 52 SERVICE_LO, 53 SERVICE_NE2000, 54 SERVICE_ETHERNET, 55 SERVICE_NILDUMMY, 56 SERVICE_IP, 57 SERVICE_ARP, 58 SERVICE_RARP, 59 SERVICE_ICMP, 60 SERVICE_UDP, 61 SERVICE_TCP, 62 SERVICE_SOCKET 43 SERVICE_NONE = 0, 44 SERVICE_LOAD = FOURCC('l', 'o', 'a', 'd'), 45 SERVICE_VIDEO = FOURCC('v', 'i', 'd', ' '), 46 SERVICE_VFS = FOURCC('v', 'f', 's', ' '), 47 SERVICE_DEVMAP = FOURCC('d', 'e', 'v', 'p'), 48 SERVICE_DEVMAN = FOURCC('d', 'e', 'v', 'n'), 49 SERVICE_IRC = FOURCC('i', 'r', 'c', ' '), 50 SERVICE_CLIPBOARD = FOURCC('c', 'l', 'i', 'p'), 51 SERVICE_NETWORKING = FOURCC('n', 'e', 't', ' '), 52 SERVICE_LO = FOURCC('l', 'o', ' ', ' '), 53 SERVICE_NE2000 = FOURCC('n', 'e', '2', 'k'), 54 SERVICE_ETHERNET = FOURCC('e', 't', 'h', ' '), 55 SERVICE_NILDUMMY = FOURCC('n', 'i', 'l', 'd'), 56 SERVICE_IP = FOURCC('i', 'p', 'v', '4'), 57 SERVICE_ARP = FOURCC('a', 'r', 'p', ' '), 58 SERVICE_ICMP = FOURCC('i', 'c', 'm', 'p'), 59 SERVICE_UDP = FOURCC('u', 'd', 'p', ' '), 60 SERVICE_TCP = FOURCC('t', 'c', 'p', ' ') 63 61 } services_t; 64 62 -
uspace/lib/c/include/ipc/vfs.h
r52a79081 ra33f0a6 69 69 VFS_IN_FSTAT, 70 70 VFS_IN_CLOSE, 71 VFS_IN_PING, 71 72 VFS_IN_MOUNT, 72 73 VFS_IN_UNMOUNT, -
uspace/lib/c/include/loader/loader.h
r52a79081 ra33f0a6 40 40 #include <vfs/vfs.h> 41 41 42 /** Abstraction of a loader connection */ 43 typedef struct { 44 /** ID of the phone connected to the loader. */ 45 int phone_id; 46 } loader_t; 42 /** Forward declararion */ 43 struct loader; 44 typedef struct loader loader_t; 47 45 48 46 extern int loader_spawn(const char *); -
uspace/lib/c/include/loader/pcb.h
r52a79081 ra33f0a6 72 72 /** Pointer to ELF dynamic section of the program. */ 73 73 void *dynamic; 74 /** Pointer to dynamic linker state structure (runtime_env_t). */ 75 void *rtld_runtime; 74 76 } pcb_t; 75 77 -
uspace/lib/c/include/malloc.h
r52a79081 ra33f0a6 46 46 extern void *realloc(const void *addr, const size_t size); 47 47 extern void free(const void *addr); 48 extern void *heap_check(void); 48 49 49 50 #endif -
uspace/lib/c/include/net/icmp_api.h
r52a79081 ra33f0a6 42 42 #include <sys/types.h> 43 43 #include <sys/time.h> 44 45 44 #include <adt/measured_strings.h> 46 45 #include <net/ip_codes.h> 47 46 #include <net/icmp_codes.h> 48 47 #include <net/icmp_common.h> 48 #include <async.h> 49 49 50 50 /** @name ICMP module application interface … … 53 53 /*@{*/ 54 54 55 extern int icmp_echo_msg( int, size_t, mseconds_t, ip_ttl_t, ip_tos_t, int,56 const struct sockaddr *, socklen_t);55 extern int icmp_echo_msg(async_sess_t *, size_t, mseconds_t, ip_ttl_t, ip_tos_t, 56 int, const struct sockaddr *, socklen_t); 57 57 58 58 /*@}*/ -
uspace/lib/c/include/net/icmp_common.h
r52a79081 ra33f0a6 40 40 #include <ipc/services.h> 41 41 #include <sys/time.h> 42 #include <async.h> 42 43 43 /** Default timeout for incoming connections in microseconds (1 sec). */ 44 #define ICMP_CONNECT_TIMEOUT 1000000 45 46 extern int icmp_connect_module(suseconds_t); 44 extern async_sess_t *icmp_connect_module(void); 47 45 48 46 #endif -
uspace/lib/c/include/net/modules.h
r52a79081 ra33f0a6 46 46 #include <sys/time.h> 47 47 48 /** Connect to the neededmodule function type definition.48 /** Connect to module function type definition. 49 49 * 50 * @param[in] need The needed module service. 51 * 52 * @return The phone of the needed service. 50 * @return Session to the service. 53 51 * 54 52 */ 55 typedef int connect_module_t(services_t need);53 typedef async_sess_t *connect_module_t(services_t); 56 54 57 55 extern void answer_call(ipc_callid_t, int, ipc_call_t *, size_t); 58 extern intbind_service(services_t, sysarg_t, sysarg_t, sysarg_t,56 extern async_sess_t *bind_service(services_t, sysarg_t, sysarg_t, sysarg_t, 59 57 async_client_conn_t); 60 extern int bind_service_timeout(services_t, sysarg_t, sysarg_t, sysarg_t, 61 async_client_conn_t, suseconds_t); 62 extern int connect_to_service(services_t); 63 extern int connect_to_service_timeout(services_t, suseconds_t); 58 extern async_sess_t *connect_to_service(services_t); 64 59 extern int data_reply(void *, size_t); 65 60 extern void refresh_answer(ipc_call_t *, size_t *); -
uspace/lib/c/include/ns.h
r52a79081 ra33f0a6 1 1 /* 2 * Copyright (c) 200 9 Jiri Svoboda2 * Copyright (c) 2006 Ondrej Palkovsky 3 3 * All rights reserved. 4 4 * … … 27 27 */ 28 28 29 /** @addtogroup kbdgen generic 30 * @brief HelenOS generic uspace keyboard handler. 31 * @ingroup kbd 29 /** @addtogroup libc 32 30 * @{ 33 31 */ … … 35 33 */ 36 34 37 #ifndef KBD_LAYOUT_H_38 #define KBD_LAYOUT_H_35 #ifndef LIBC_NS_H_ 36 #define LIBC_NS_H_ 39 37 40 38 #include <sys/types.h> 41 #include <io/console.h> 39 #include <task.h> 40 #include <async.h> 42 41 43 typedef struct { 44 void (*reset)(void);45 wchar_t (*parse_ev)(console_event_t *); 46 } layout_op_t;42 extern int service_register(sysarg_t); 43 extern async_sess_t *service_connect(exch_mgmt_t, sysarg_t, sysarg_t, sysarg_t); 44 extern async_sess_t *service_connect_blocking(exch_mgmt_t, sysarg_t, sysarg_t, 45 sysarg_t); 47 46 48 extern layout_op_t us_qwerty_op; 49 extern layout_op_t us_dvorak_op; 50 extern layout_op_t cz_op; 47 extern int ns_ping(void); 48 extern int ns_intro(task_id_t); 51 49 52 50 #endif 53 51 54 /** 55 * @} 52 /** @} 56 53 */ -
uspace/lib/c/include/stdio.h
r52a79081 ra33f0a6 97 97 }; 98 98 99 typedef struct { 100 /** Linked list pointer. */ 101 link_t link; 102 103 /** Underlying file descriptor. */ 104 int fd; 105 106 /** Error indicator. */ 107 int error; 108 109 /** End-of-file indicator. */ 110 int eof; 111 112 /** Klog indicator */ 113 int klog; 114 115 /** Phone to the file provider */ 116 int phone; 117 118 /** 119 * Non-zero if the stream needs sync on fflush(). XXX change 120 * console semantics so that sync is not needed. 121 */ 122 int need_sync; 123 124 /** Buffering type */ 125 enum _buffer_type btype; 126 127 /** Buffer */ 128 uint8_t *buf; 129 130 /** Buffer size */ 131 size_t buf_size; 132 133 /** Buffer state */ 134 enum _buffer_state buf_state; 135 136 /** Buffer I/O pointer */ 137 uint8_t *buf_head; 138 139 /** Points to end of occupied space when in read mode. */ 140 uint8_t *buf_tail; 141 } FILE; 99 /** Forward declaration */ 100 struct _IO_FILE; 101 typedef struct _IO_FILE FILE; 142 102 143 103 extern FILE *stdin; -
uspace/lib/c/include/str.h
r52a79081 ra33f0a6 49 49 #define STR_BOUNDS(length) ((length) << 2) 50 50 51 /** 52 * Maximum size of a buffer needed to a string converted from space-padded 53 * ASCII of size @a spa_size using spascii_to_str(). 54 */ 55 #define SPASCII_STR_BUFSIZE(spa_size) ((spa_size) + 1) 56 51 57 extern wchar_t str_decode(const char *str, size_t *offset, size_t sz); 52 58 extern int chr_encode(const wchar_t ch, char *str, size_t *offset, size_t sz); … … 76 82 77 83 extern int wstr_to_str(char *dest, size_t size, const wchar_t *src); 84 extern int spascii_to_str(char *dest, size_t size, const uint8_t *src, size_t n); 85 extern void wstr_to_str(char *dest, size_t size, const wchar_t *src); 78 86 extern char *wstr_to_astr(const wchar_t *src); 79 87 extern int str_to_wstr(wchar_t *dest, size_t dlen, const char *src); -
uspace/lib/c/include/sys/time.h
r52a79081 ra33f0a6 62 62 extern int gettimeofday(struct timeval *tv, struct timezone *tz); 63 63 64 extern void udelay(useconds_t); 65 64 66 #endif 65 67 -
uspace/lib/c/include/task.h
r52a79081 ra33f0a6 37 37 38 38 #include <sys/types.h> 39 #include <vfs/vfs.h> 39 40 40 41 typedef uint64_t task_id_t; … … 51 52 extern task_id_t task_spawn(const char *, const char *const[], int *); 52 53 extern int task_spawnv(task_id_t *, const char *path, const char *const []); 54 extern int task_spawnvf(task_id_t *, const char *path, const char *const [], 55 fdi_node_t *const []); 53 56 extern int task_spawnl(task_id_t *, const char *path, ...); 54 57 -
uspace/lib/c/include/udebug.h
r52a79081 ra33f0a6 38 38 #include <kernel/udebug/udebug.h> 39 39 #include <sys/types.h> 40 #include <async.h> 40 41 41 42 typedef sysarg_t thash_t; 42 43 43 int udebug_begin(int); 44 int udebug_end(int); 45 int udebug_set_evmask(int, udebug_evmask_t); 46 int udebug_thread_read(int, void *, size_t , size_t *, size_t *); 47 int udebug_name_read(int, void *, size_t, size_t *, size_t *); 48 int udebug_areas_read(int, void *, size_t, size_t *, size_t *); 49 int udebug_mem_read(int, void *, uintptr_t, size_t); 50 int udebug_args_read(int, thash_t, sysarg_t *); 51 int udebug_regs_read(int, thash_t, void *); 52 int udebug_go(int, thash_t, udebug_event_t *, sysarg_t *, sysarg_t *); 53 int udebug_stop(int, thash_t); 44 extern int udebug_begin(async_sess_t *); 45 extern int udebug_end(async_sess_t *); 46 extern int udebug_set_evmask(async_sess_t *, udebug_evmask_t); 47 extern int udebug_thread_read(async_sess_t *, void *, size_t , size_t *, 48 size_t *); 49 extern int udebug_name_read(async_sess_t *, void *, size_t, size_t *, 50 size_t *); 51 extern int udebug_areas_read(async_sess_t *, void *, size_t, size_t *, 52 size_t *); 53 extern int udebug_mem_read(async_sess_t *, void *, uintptr_t, size_t); 54 extern int udebug_args_read(async_sess_t *, thash_t, sysarg_t *); 55 extern int udebug_regs_read(async_sess_t *, thash_t, void *); 56 extern int udebug_go(async_sess_t *, thash_t, udebug_event_t *, sysarg_t *, 57 sysarg_t *); 58 extern int udebug_stop(async_sess_t *, thash_t); 54 59 55 60 #endif -
uspace/lib/c/include/unistd.h
r52a79081 ra33f0a6 63 63 extern ssize_t read(int, void *, size_t); 64 64 65 extern ssize_t read_all(int, void *, size_t); 66 extern ssize_t write_all(int, const void *, size_t); 67 65 68 extern off64_t lseek(int, off64_t, int); 66 69 extern int ftruncate(int, aoff64_t); -
uspace/lib/c/include/vfs/vfs.h
r52a79081 ra33f0a6 41 41 #include <stdio.h> 42 42 43 /** 44 * This type is a libc version of the VFS triplet. 45 * It uniquely identifies a file system node within a file system instance. 43 /** Libc version of the VFS triplet. 44 * 45 * Unique identification of a file system node 46 * within a file system instance. 47 * 46 48 */ 47 49 typedef struct { … … 58 60 59 61 extern int open_node(fdi_node_t *, int); 60 extern int fd_phone(int);61 62 extern int fd_node(int, fdi_node_t *); 62 63 63 64 extern FILE *fopen_node(fdi_node_t *, const char *); 64 extern int fphone(FILE *);65 65 extern int fnode(FILE *, fdi_node_t *); 66 66
Note:
See TracChangeset
for help on using the changeset viewer.