Changeset 357b5f5 in mainline for uspace/lib/c
- Timestamp:
- 2011-01-23T20:09:13Z (14 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- fdb9982c
- Parents:
- cead2aa (diff), 7e36c8d (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
- Files:
-
- 1 added
- 1 deleted
- 74 edited
- 4 moved
Legend:
- Unmodified
- Added
- Removed
-
uspace/lib/c/Makefile
rcead2aa r357b5f5 59 59 generic/devman.c \ 60 60 generic/device/hw_res.c \ 61 generic/device/char .c \61 generic/device/char_dev.c \ 62 62 generic/event.c \ 63 63 generic/errno.c \ … … 87 87 generic/ipc.c \ 88 88 generic/async.c \ 89 generic/async_ rel.c \89 generic/async_sess.c \ 90 90 generic/loader.c \ 91 91 generic/getopt.c \ -
uspace/lib/c/arch/abs32le/include/inttypes.h
rcead2aa r357b5f5 34 34 #define LIBC_abs32le_INTTYPES_H_ 35 35 36 #define PRIdn PRId32 /**< Format for sysarg_t, ipcarg_t, etc. */37 #define PRIun PRIu32 /**< Format for sysarg_t , ipcarg_t, etc. */38 #define PRIxn PRIx32 /**< Format for hexadecimal sysarg_t , ipcarg_t, etc. */36 #define PRIdn PRId32 /**< Format for native_t. */ 37 #define PRIun PRIu32 /**< Format for sysarg_t. */ 38 #define PRIxn PRIx32 /**< Format for hexadecimal sysarg_t. */ 39 39 #define PRIua PRIu32 /**< Format for atomic_count_t. */ 40 40 -
uspace/lib/c/arch/amd64/include/inttypes.h
rcead2aa r357b5f5 34 34 #define LIBC_amd64_INTTYPES_H_ 35 35 36 #define PRIdn PRId64 /**< Format for sysarg_t, ipcarg_t, etc. */37 #define PRIun PRIu64 /**< Format for sysarg_t , ipcarg_t, etc. */38 #define PRIxn PRIx64 /**< Format for hexadecimal sysarg_t , ipcarg_t, etc. */36 #define PRIdn PRId64 /**< Format for native_t. */ 37 #define PRIun PRIu64 /**< Format for sysarg_t. */ 38 #define PRIxn PRIx64 /**< Format for hexadecimal sysarg_t. */ 39 39 #define PRIua PRIu64 /**< Format for atomic_count_t. */ 40 40 -
uspace/lib/c/arch/arm32/include/inttypes.h
rcead2aa r357b5f5 34 34 #define LIBC_arm32_INTTYPES_H_ 35 35 36 #define PRIdn PRId32 /**< Format for sysarg_t, ipcarg_t, etc. */37 #define PRIun PRIu32 /**< Format for sysarg_t , ipcarg_t, etc. */38 #define PRIxn PRIx32 /**< Format for hexadecimal sysarg_t , ipcarg_t, etc. */36 #define PRIdn PRId32 /**< Format for native_t. */ 37 #define PRIun PRIu32 /**< Format for sysarg_t. */ 38 #define PRIxn PRIx32 /**< Format for hexadecimal sysarg_t. */ 39 39 #define PRIua PRIu32 /**< Format for atomic_count_t. */ 40 40 -
uspace/lib/c/arch/ia32/include/inttypes.h
rcead2aa r357b5f5 34 34 #define LIBC_ia32_INTTYPES_H_ 35 35 36 #define PRIdn PRId32 /**< Format for sysarg_t, ipcarg_t, etc. */37 #define PRIun PRIu32 /**< Format for sysarg_t , ipcarg_t, etc. */38 #define PRIxn PRIx32 /**< Format for hexadecimal sysarg_t , ipcarg_t, etc. */36 #define PRIdn PRId32 /**< Format for native_t. */ 37 #define PRIun PRIu32 /**< Format for sysarg_t. */ 38 #define PRIxn PRIx32 /**< Format for hexadecimal sysarg_t. */ 39 39 #define PRIua PRIu32 /**< Format for atomic_count_t. */ 40 40 -
uspace/lib/c/arch/ia64/include/inttypes.h
rcead2aa r357b5f5 34 34 #define LIBC_ia64_INTTYPES_H_ 35 35 36 #define PRIdn PRId64 /**< Format for sysarg_t, ipcarg_t, etc. */37 #define PRIun PRIu64 /**< Format for sysarg_t , ipcarg_t, etc. */38 #define PRIxn PRIx64 /**< Format for hexadecimal sysarg_t , ipcarg_t, etc. */36 #define PRIdn PRId64 /**< Format for native_t. */ 37 #define PRIun PRIu64 /**< Format for sysarg_t. */ 38 #define PRIxn PRIx64 /**< Format for hexadecimal sysarg_t. */ 39 39 #define PRIua PRIu64 /**< Format for atomic_count_t. */ 40 40 -
uspace/lib/c/arch/mips32/include/inttypes.h
rcead2aa r357b5f5 34 34 #define LIBC_mips32_INTTYPES_H_ 35 35 36 #define PRIdn PRId32 /**< Format for sysarg_t, ipcarg_t, etc. */37 #define PRIun PRIu32 /**< Format for sysarg_t , ipcarg_t, etc. */38 #define PRIxn PRIx32 /**< Format for hexadecimal sysarg_t , ipcarg_t, etc. */36 #define PRIdn PRId32 /**< Format for native_t. */ 37 #define PRIun PRIu32 /**< Format for sysarg_t. */ 38 #define PRIxn PRIx32 /**< Format for hexadecimal sysarg_t. */ 39 39 #define PRIua PRIu32 /**< Format for atomic_count_t. */ 40 40 -
uspace/lib/c/arch/ppc32/include/inttypes.h
rcead2aa r357b5f5 34 34 #define LIBC_ppc32_INTTYPES_H_ 35 35 36 #define PRIdn PRId32 /**< Format for sysarg_t, ipcarg_t, etc. */37 #define PRIun PRIu32 /**< Format for sysarg_t , ipcarg_t, etc. */38 #define PRIxn PRIx32 /**< Format for hexadecimal sysarg_t , ipcarg_t, etc. */36 #define PRIdn PRId32 /**< Format for native_t. */ 37 #define PRIun PRIu32 /**< Format for sysarg_t. */ 38 #define PRIxn PRIx32 /**< Format for hexadecimal sysarg_t. */ 39 39 #define PRIua PRIu32 /**< Format for atomic_count_t. */ 40 40 -
uspace/lib/c/arch/sparc64/include/inttypes.h
rcead2aa r357b5f5 34 34 #define LIBC_sparc64_INTTYPES_H_ 35 35 36 #define PRIdn PRId64 /**< Format for sysarg_t, ipcarg_t, etc. */37 #define PRIun PRIu64 /**< Format for sysarg_t , ipcarg_t, etc. */38 #define PRIxn PRIx64 /**< Format for hexadecimal sysarg_t , ipcarg_t, etc. */36 #define PRIdn PRId64 /**< Format for native_t. */ 37 #define PRIun PRIu64 /**< Format for sysarg_t. */ 38 #define PRIxn PRIx64 /**< Format for hexadecimal sysarg_t. */ 39 39 #define PRIua PRIu64 /**< Format for atomic_count_t. */ 40 40 -
uspace/lib/c/generic/adt/char_map.c
rcead2aa r357b5f5 65 65 */ 66 66 static int 67 char_map_add_item(char_map_t *map, const char*identifier, size_t length,67 char_map_add_item(char_map_t *map, const uint8_t *identifier, size_t length, 68 68 const int value) 69 69 { … … 90 90 } 91 91 92 map->items[map->next]->c = * 93 ++ identifier;94 ++ map->next;95 if ((length > 1) || ((length == 0) && (*identifier))) {92 map->items[map->next]->c = *identifier; 93 identifier++; 94 map->next++; 95 if ((length > 1) || ((length == 0) && *identifier)) { 96 96 map->items[map->next - 1]->value = CHAR_MAP_NULL; 97 97 return char_map_add_item(map->items[map->next - 1], identifier, … … 139 139 */ 140 140 int 141 char_map_add(char_map_t *map, const char*identifier, size_t length,141 char_map_add(char_map_t *map, const uint8_t *identifier, size_t length, 142 142 const int value) 143 143 { 144 if (char_map_is_valid(map) && (identifier) && 145 ((length) || (*identifier))) { 144 if (char_map_is_valid(map) && identifier && (length || *identifier)) { 146 145 int index; 147 146 148 for (index = 0; index < map->next; ++ index) {147 for (index = 0; index < map->next; index++) { 149 148 if (map->items[index]->c != *identifier) 150 149 continue; 151 150 152 ++ identifier;153 if((length > 1) || ((length == 0) && (*identifier))) {151 identifier++; 152 if((length > 1) || ((length == 0) && *identifier)) { 154 153 return char_map_add(map->items[index], 155 154 identifier, length ? length - 1 : 0, value); … … 178 177 179 178 map->magic = 0; 180 for (index = 0; index < map->next; ++index)179 for (index = 0; index < map->next; index++) 181 180 char_map_destroy(map->items[index]); 182 181 … … 201 200 */ 202 201 static char_map_t * 203 char_map_find_node(const char_map_t *map, const char*identifier,202 char_map_find_node(const char_map_t *map, const uint8_t *identifier, 204 203 size_t length) 205 204 { … … 207 206 return NULL; 208 207 209 if (length || (*identifier)) {208 if (length || *identifier) { 210 209 int index; 211 210 212 for (index = 0; index < map->next; ++index) {211 for (index = 0; index < map->next; index++) { 213 212 if (map->items[index]->c == *identifier) { 214 ++identifier;213 identifier++; 215 214 if (length == 1) 216 215 return map->items[index]; … … 242 241 * @return CHAR_MAP_NULL if the key is not assigned a value. 243 242 */ 244 int char_map_exclude(char_map_t *map, const char*identifier, size_t length)243 int char_map_exclude(char_map_t *map, const uint8_t *identifier, size_t length) 245 244 { 246 245 char_map_t *node; … … 270 269 * @return CHAR_MAP_NULL if the key is not assigned a value. 271 270 */ 272 int char_map_find(const char_map_t *map, const char*identifier, size_t length)271 int char_map_find(const char_map_t *map, const uint8_t *identifier, size_t length) 273 272 { 274 273 char_map_t *node; … … 330 329 */ 331 330 int 332 char_map_update(char_map_t *map, const char*identifier, const size_t length,331 char_map_update(char_map_t *map, const uint8_t *identifier, const size_t length, 333 332 const int value) 334 333 { -
uspace/lib/c/generic/adt/measured_strings.c
rcead2aa r357b5f5 59 59 */ 60 60 measured_string_t * 61 measured_string_create_bulk(const char*string, size_t length)61 measured_string_create_bulk(const uint8_t *string, size_t length) 62 62 { 63 63 measured_string_t *new; … … 68 68 } 69 69 new = (measured_string_t *) malloc(sizeof(measured_string_t) + 70 (sizeof( char) * (length + 1)));70 (sizeof(uint8_t) * (length + 1))); 71 71 if (!new) 72 72 return NULL; 73 73 74 74 new->length = length; 75 new->value = (( char*) new) + sizeof(measured_string_t);75 new->value = ((uint8_t *) new) + sizeof(measured_string_t); 76 76 // append terminating zero explicitly - to be safe 77 77 memcpy(new->value, string, new->length); … … 97 97 new = (measured_string_t *) malloc(sizeof(measured_string_t)); 98 98 if (new) { 99 new->value = ( char*) malloc(source->length + 1);99 new->value = (uint8_t *) malloc(source->length + 1); 100 100 if (new->value) { 101 101 new->length = source->length; … … 131 131 */ 132 132 int 133 measured_strings_receive(measured_string_t **strings, char**data,133 measured_strings_receive(measured_string_t **strings, uint8_t **data, 134 134 size_t count) 135 135 { … … 137 137 size_t index; 138 138 size_t length; 139 char*next;139 uint8_t *next; 140 140 ipc_callid_t callid; 141 141 int rc; … … 311 311 */ 312 312 int 313 measured_strings_return(int phone, measured_string_t **strings, char**data,313 measured_strings_return(int phone, measured_string_t **strings, uint8_t **data, 314 314 size_t count) 315 315 { 316 316 size_t *lengths; 317 317 size_t index; 318 char*next;318 uint8_t *next; 319 319 int rc; 320 320 -
uspace/lib/c/generic/async.c
rcead2aa r357b5f5 120 120 ipc_call_t *dataptr; 121 121 122 ipcarg_t retval;122 sysarg_t retval; 123 123 } amsg_t; 124 124 … … 140 140 141 141 /** Incoming phone hash. */ 142 ipcarg_t in_phone_hash;142 sysarg_t in_phone_hash; 143 143 144 144 /** Messages that should be delivered to this fibril. */ … … 288 288 list_append(&msg->link, &conn->msg_queue); 289 289 290 if (IPC_GET_ METHOD(*call) == IPC_M_PHONE_HUNGUP)290 if (IPC_GET_IMETHOD(*call) == IPC_M_PHONE_HUNGUP) 291 291 conn->close_callid = callid; 292 292 … … 401 401 */ 402 402 memset(call, 0, sizeof(ipc_call_t)); 403 IPC_SET_ METHOD(*call, IPC_M_PHONE_HUNGUP);403 IPC_SET_IMETHOD(*call, IPC_M_PHONE_HUNGUP); 404 404 futex_up(&async_futex); 405 405 return conn->close_callid; … … 529 529 * 530 530 */ 531 fid_t async_new_connection( ipcarg_t in_phone_hash, ipc_callid_t callid,531 fid_t async_new_connection(sysarg_t in_phone_hash, ipc_callid_t callid, 532 532 ipc_call_t *call, void (*cfibril)(ipc_callid_t, ipc_call_t *)) 533 533 { … … 588 588 } 589 589 590 switch (IPC_GET_ METHOD(*call)) {590 switch (IPC_GET_IMETHOD(*call)) { 591 591 case IPC_M_CONNECT_ME: 592 592 case IPC_M_CONNECT_ME_TO: … … 749 749 return ENOMEM; 750 750 } 751 752 _async_sess_init(); 751 753 752 754 return 0; … … 807 809 * 808 810 */ 809 aid_t async_send_fast(int phoneid, ipcarg_t method, ipcarg_t arg1,810 ipcarg_t arg2, ipcarg_t arg3, ipcarg_t arg4, ipc_call_t *dataptr)811 aid_t async_send_fast(int phoneid, sysarg_t method, sysarg_t arg1, 812 sysarg_t arg2, sysarg_t arg3, sysarg_t arg4, ipc_call_t *dataptr) 811 813 { 812 814 amsg_t *msg = malloc(sizeof(*msg)); … … 846 848 * 847 849 */ 848 aid_t async_send_slow(int phoneid, ipcarg_t method, ipcarg_t arg1,849 ipcarg_t arg2, ipcarg_t arg3, ipcarg_t arg4, ipcarg_t arg5,850 aid_t async_send_slow(int phoneid, sysarg_t method, sysarg_t arg1, 851 sysarg_t arg2, sysarg_t arg3, sysarg_t arg4, sysarg_t arg5, 850 852 ipc_call_t *dataptr) 851 853 { … … 875 877 * 876 878 */ 877 void async_wait_for(aid_t amsgid, ipcarg_t *retval)879 void async_wait_for(aid_t amsgid, sysarg_t *retval) 878 880 { 879 881 amsg_t *msg = (amsg_t *) amsgid; … … 911 913 * 912 914 */ 913 int async_wait_timeout(aid_t amsgid, ipcarg_t *retval, suseconds_t timeout)915 int async_wait_timeout(aid_t amsgid, sysarg_t *retval, suseconds_t timeout) 914 916 { 915 917 amsg_t *msg = (amsg_t *) amsgid; … … 1023 1025 * 1024 1026 */ 1025 ipcarg_t async_req_fast(int phoneid, ipcarg_t method, ipcarg_t arg1,1026 ipcarg_t arg2, ipcarg_t arg3, ipcarg_t arg4, ipcarg_t *r1, ipcarg_t *r2,1027 ipcarg_t *r3, ipcarg_t *r4, ipcarg_t *r5)1027 sysarg_t async_req_fast(int phoneid, sysarg_t method, sysarg_t arg1, 1028 sysarg_t arg2, sysarg_t arg3, sysarg_t arg4, sysarg_t *r1, sysarg_t *r2, 1029 sysarg_t *r3, sysarg_t *r4, sysarg_t *r5) 1028 1030 { 1029 1031 ipc_call_t result; … … 1031 1033 &result); 1032 1034 1033 ipcarg_t rc;1035 sysarg_t rc; 1034 1036 async_wait_for(eid, &rc); 1035 1037 … … 1072 1074 * 1073 1075 */ 1074 ipcarg_t async_req_slow(int phoneid, ipcarg_t method, ipcarg_t arg1,1075 ipcarg_t arg2, ipcarg_t arg3, ipcarg_t arg4, ipcarg_t arg5, ipcarg_t *r1,1076 ipcarg_t *r2, ipcarg_t *r3, ipcarg_t *r4, ipcarg_t *r5)1076 sysarg_t async_req_slow(int phoneid, sysarg_t method, sysarg_t arg1, 1077 sysarg_t arg2, sysarg_t arg3, sysarg_t arg4, sysarg_t arg5, sysarg_t *r1, 1078 sysarg_t *r2, sysarg_t *r3, sysarg_t *r4, sysarg_t *r5) 1077 1079 { 1078 1080 ipc_call_t result; … … 1080 1082 &result); 1081 1083 1082 ipcarg_t rc;1084 sysarg_t rc; 1083 1085 async_wait_for(eid, &rc); 1084 1086 … … 1113 1115 */ 1114 1116 int 1115 async_connect_me_to(int phoneid, ipcarg_t arg1, ipcarg_t arg2, ipcarg_t arg3)1117 async_connect_me_to(int phoneid, sysarg_t arg1, sysarg_t arg2, sysarg_t arg3) 1116 1118 { 1117 1119 int rc; 1118 ipcarg_t newphid;1120 sysarg_t newphid; 1119 1121 1120 1122 rc = async_req_3_5(phoneid, IPC_M_CONNECT_ME_TO, arg1, arg2, arg3, NULL, … … 1140 1142 */ 1141 1143 int 1142 async_connect_me_to_blocking(int phoneid, ipcarg_t arg1, ipcarg_t arg2,1143 ipcarg_t arg3)1144 async_connect_me_to_blocking(int phoneid, sysarg_t arg1, sysarg_t arg2, 1145 sysarg_t arg3) 1144 1146 { 1145 1147 int rc; 1146 ipcarg_t newphid;1148 sysarg_t newphid; 1147 1149 1148 1150 rc = async_req_4_5(phoneid, IPC_M_CONNECT_ME_TO, arg1, arg2, arg3, … … 1166 1168 * @return Zero on success or a negative error code from errno.h. 1167 1169 */ 1168 int async_share_in_start(int phoneid, void *dst, size_t size, ipcarg_t arg,1170 int async_share_in_start(int phoneid, void *dst, size_t size, sysarg_t arg, 1169 1171 int *flags) 1170 1172 { 1171 1173 int res; 1172 1174 sysarg_t tmp_flags; 1173 res = async_req_3_2(phoneid, IPC_M_SHARE_IN, ( ipcarg_t) dst,1174 ( ipcarg_t) size, arg, NULL, &tmp_flags);1175 res = async_req_3_2(phoneid, IPC_M_SHARE_IN, (sysarg_t) dst, 1176 (sysarg_t) size, arg, NULL, &tmp_flags); 1175 1177 if (flags) 1176 1178 *flags = tmp_flags; … … 1199 1201 1200 1202 *callid = async_get_call(&data); 1201 if (IPC_GET_ METHOD(data) != IPC_M_SHARE_IN)1203 if (IPC_GET_IMETHOD(data) != IPC_M_SHARE_IN) 1202 1204 return 0; 1203 1205 *size = (size_t) IPC_GET_ARG2(data); … … 1231 1233 int async_share_out_start(int phoneid, void *src, int flags) 1232 1234 { 1233 return async_req_3_0(phoneid, IPC_M_SHARE_OUT, ( ipcarg_t) src, 0,1234 ( ipcarg_t) flags);1235 return async_req_3_0(phoneid, IPC_M_SHARE_OUT, (sysarg_t) src, 0, 1236 (sysarg_t) flags); 1235 1237 } 1236 1238 … … 1259 1261 1260 1262 *callid = async_get_call(&data); 1261 if (IPC_GET_ METHOD(data) != IPC_M_SHARE_OUT)1263 if (IPC_GET_IMETHOD(data) != IPC_M_SHARE_OUT) 1262 1264 return 0; 1263 1265 *size = (size_t) IPC_GET_ARG2(data); … … 1292 1294 int async_data_read_start(int phoneid, void *dst, size_t size) 1293 1295 { 1294 return async_req_2_0(phoneid, IPC_M_DATA_READ, ( ipcarg_t) dst,1295 ( ipcarg_t) size);1296 return async_req_2_0(phoneid, IPC_M_DATA_READ, (sysarg_t) dst, 1297 (sysarg_t) size); 1296 1298 } 1297 1299 … … 1317 1319 1318 1320 *callid = async_get_call(&data); 1319 if (IPC_GET_ METHOD(data) != IPC_M_DATA_READ)1321 if (IPC_GET_IMETHOD(data) != IPC_M_DATA_READ) 1320 1322 return 0; 1321 1323 if (size) … … 1345 1347 * 1346 1348 */ 1347 int async_data_read_forward_fast(int phoneid, ipcarg_t method, ipcarg_t arg1,1348 ipcarg_t arg2, ipcarg_t arg3, ipcarg_t arg4, ipc_call_t *dataptr)1349 int async_data_read_forward_fast(int phoneid, sysarg_t method, sysarg_t arg1, 1350 sysarg_t arg2, sysarg_t arg3, sysarg_t arg4, ipc_call_t *dataptr) 1349 1351 { 1350 1352 ipc_callid_t callid; … … 1369 1371 } 1370 1372 1371 ipcarg_t rc;1373 sysarg_t rc; 1372 1374 async_wait_for(msg, &rc); 1373 1375 … … 1386 1388 int async_data_write_start(int phoneid, const void *src, size_t size) 1387 1389 { 1388 return async_req_2_0(phoneid, IPC_M_DATA_WRITE, ( ipcarg_t) src,1389 ( ipcarg_t) size);1390 return async_req_2_0(phoneid, IPC_M_DATA_WRITE, (sysarg_t) src, 1391 (sysarg_t) size); 1390 1392 } 1391 1393 … … 1412 1414 1413 1415 *callid = async_get_call(&data); 1414 if (IPC_GET_ METHOD(data) != IPC_M_DATA_WRITE)1416 if (IPC_GET_IMETHOD(data) != IPC_M_DATA_WRITE) 1415 1417 return 0; 1416 1418 … … 1531 1533 * 1532 1534 */ 1533 int async_data_write_forward_fast(int phoneid, ipcarg_t method, ipcarg_t arg1,1534 ipcarg_t arg2, ipcarg_t arg3, ipcarg_t arg4, ipc_call_t *dataptr)1535 int async_data_write_forward_fast(int phoneid, sysarg_t method, sysarg_t arg1, 1536 sysarg_t arg2, sysarg_t arg3, sysarg_t arg4, ipc_call_t *dataptr) 1535 1537 { 1536 1538 ipc_callid_t callid; … … 1555 1557 } 1556 1558 1557 ipcarg_t rc;1559 sysarg_t rc; 1558 1560 async_wait_for(msg, &rc); 1559 1561 -
uspace/lib/c/generic/cap.c
rcead2aa r357b5f5 31 31 */ 32 32 /** 33 * @file 34 * @brief 33 * @file cap.c 34 * @brief Functions to grant/revoke capabilities to/from a task. 35 35 */ 36 36 … … 38 38 #include <task.h> 39 39 #include <libc.h> 40 #include <kernel/syscall/sysarg64.h>41 40 42 41 /** Grant capabilities to a task. 43 42 * 44 * @param id Destination task ID.43 * @param id Destination task ID. 45 44 * @param caps Capabilities to grant. 46 45 * 47 46 * @return Zero on success or a value from @ref errno.h on failure. 47 * 48 48 */ 49 49 int cap_grant(task_id_t id, unsigned int caps) 50 50 { 51 sysarg64_t arg; 51 #ifdef __32_BITS__ 52 sysarg64_t arg = (sysarg64_t) id; 53 return __SYSCALL2(SYS_CAP_GRANT, (sysarg_t) &arg, (sysarg_t) caps); 54 #endif 52 55 53 arg.value = (unsigned long long) id; 54 55 return __SYSCALL2(SYS_CAP_GRANT, (sysarg_t) &arg, (sysarg_t) caps); 56 #ifdef __64_BITS__ 57 return __SYSCALL2(SYS_CAP_GRANT, (sysarg_t) id, (sysarg_t) caps); 58 #endif 56 59 } 57 60 58 61 /** Revoke capabilities from a task. 59 62 * 60 * @param id Destination task ID.63 * @param id Destination task ID. 61 64 * @param caps Capabilities to revoke. 62 65 * 63 66 * @return Zero on success or a value from @ref errno.h on failure. 67 * 64 68 */ 65 69 int cap_revoke(task_id_t id, unsigned int caps) 66 70 { 67 sysarg64_t arg; 71 #ifdef __32_BITS__ 72 sysarg64_t arg = (sysarg64_t) id; 73 return __SYSCALL2(SYS_CAP_REVOKE, (sysarg_t) &arg, (sysarg_t) caps); 74 #endif 68 75 69 arg.value = (unsigned long long) id; 70 71 return __SYSCALL2(SYS_CAP_REVOKE, (sysarg_t) &arg, (sysarg_t) caps); 76 #ifdef __64_BITS__ 77 return __SYSCALL2(SYS_CAP_REVOKE, (sysarg_t) id, (sysarg_t) caps); 78 #endif 72 79 } 73 80 -
uspace/lib/c/generic/clipboard.c
rcead2aa r357b5f5 75 75 clip_connect(); 76 76 77 ipcarg_t rc = async_req_1_0(clip_phone, CLIPBOARD_PUT_DATA, CLIPBOARD_TAG_NONE);77 sysarg_t rc = async_req_1_0(clip_phone, CLIPBOARD_PUT_DATA, CLIPBOARD_TAG_NONE); 78 78 79 79 async_serialize_end(); … … 85 85 86 86 aid_t req = async_send_1(clip_phone, CLIPBOARD_PUT_DATA, CLIPBOARD_TAG_DATA, NULL); 87 ipcarg_t rc = async_data_write_start(clip_phone, (void *) str, size);87 sysarg_t rc = async_data_write_start(clip_phone, (void *) str, size); 88 88 if (rc != EOK) { 89 ipcarg_t rc_orig;89 sysarg_t rc_orig; 90 90 async_wait_for(req, &rc_orig); 91 91 async_serialize_end(); … … 119 119 clip_connect(); 120 120 121 ipcarg_t size;122 ipcarg_t tag;123 ipcarg_t rc = async_req_0_2(clip_phone, CLIPBOARD_CONTENT, &size, &tag);121 sysarg_t size; 122 sysarg_t tag; 123 sysarg_t rc = async_req_0_2(clip_phone, CLIPBOARD_CONTENT, &size, &tag); 124 124 125 125 async_serialize_end(); … … 158 158 159 159 if (rc != EOK) { 160 ipcarg_t rc_orig;160 sysarg_t rc_orig; 161 161 async_wait_for(req, &rc_orig); 162 162 async_serialize_end(); -
uspace/lib/c/generic/ddi.c
rcead2aa r357b5f5 96 96 } 97 97 98 /** Enable an interrupt.99 *100 * @param irq the interrupt.101 *102 * @return Zero on success, negative error code otherwise.103 */104 int interrupt_enable(int irq)105 {106 return __SYSCALL2(SYS_INTERRUPT_ENABLE, (sysarg_t) irq, 1);107 }108 109 /** Disable an interrupt.110 *111 * @param irq the interrupt.112 *113 * @return Zero on success, negative error code otherwise.114 */115 int interrupt_disable(int irq)116 {117 return __SYSCALL2(SYS_INTERRUPT_ENABLE, (sysarg_t) irq, 0);118 }119 120 98 /** Enable PIO for specified I/O range. 121 99 * -
uspace/lib/c/generic/device/char_dev.c
rcead2aa r357b5f5 34 34 35 35 #include <ipc/dev_iface.h> 36 #include <device/char .h>36 #include <device/char_dev.h> 37 37 #include <errno.h> 38 38 #include <async.h> … … 45 45 * using its character interface. 46 46 * 47 * @param dev_phone Phone to the device. 48 * @param buf Buffer for the data read 49 * from or written to the device. 50 * @param len Maximum length of the data to be 51 * read or written. 52 * @param read Read from the device if true, 53 * write to it otherwise. 47 * @param dev_phone Phone to the device. 48 * @param buf Buffer for the data read from or written to the device. 49 * @param size Maximum size of data (in bytes) to be read or written. 50 * @param read Read from the device if true, write to it otherwise. 54 51 * 55 * @return Non-negative number of bytes actually read 56 * from or written to the device on success, 57 * negative error number otherwise. 58 * 52 * @return Non-negative number of bytes actually read from or 53 * written to the device on success, negative error number 54 * otherwise. 59 55 */ 60 static ssize_t rw_dev(int dev_phone, void *buf, size_t len, bool read)56 static ssize_t char_dev_rw(int dev_phone, void *buf, size_t size, bool read) 61 57 { 62 58 async_serialize_start(); … … 68 64 if (read) { 69 65 req = async_send_1(dev_phone, DEV_IFACE_ID(CHAR_DEV_IFACE), 70 CHAR_ READ_DEV, &answer);71 ret = async_data_read_start(dev_phone, buf, len);66 CHAR_DEV_READ, &answer); 67 ret = async_data_read_start(dev_phone, buf, size); 72 68 } else { 73 69 req = async_send_1(dev_phone, DEV_IFACE_ID(CHAR_DEV_IFACE), 74 CHAR_ WRITE_DEV, &answer);75 ret = async_data_write_start(dev_phone, buf, len);70 CHAR_DEV_WRITE, &answer); 71 ret = async_data_write_start(dev_phone, buf, size); 76 72 } 77 73 78 ipcarg_t rc;74 sysarg_t rc; 79 75 if (ret != EOK) { 80 76 async_wait_for(req, &rc); … … 82 78 if (rc == EOK) 83 79 return (ssize_t) ret; 84 80 85 81 return (ssize_t) rc; 86 82 } … … 96 92 } 97 93 98 /** Read from device using its character interface.94 /** Read from character device. 99 95 * 100 * @param dev_phone Phone to the device. 101 * @param buf Output buffer for the data 102 * read from the device. 103 * @param len Maximum length of the data to be read. 96 * @param dev_phone Phone to the device. 97 * @param buf Output buffer for the data read from the device. 98 * @param size Maximum size (in bytes) of the data to be read. 104 99 * 105 * @return Non-negative number of bytes actually read 106 * from the device on success, negative error 107 * number otherwise. 108 * 100 * @return Non-negative number of bytes actually read from the 101 * device on success, negative error number otherwise. 109 102 */ 110 ssize_t read_dev(int dev_phone, void *buf, size_t len)103 ssize_t char_dev_read(int dev_phone, void *buf, size_t size) 111 104 { 112 return rw_dev(dev_phone, buf, len, true);105 return char_dev_rw(dev_phone, buf, size, true); 113 106 } 114 107 115 /** Write to device using its character interface.108 /** Write to character device. 116 109 * 117 * @param dev_phone 118 * @param buf Input buffer containg the data119 * to be written to thedevice.120 * @param len Maximum lengthof the data to be written.110 * @param dev_phone Phone to the device. 111 * @param buf Input buffer containg the data to be written to the 112 * device. 113 * @param size Maximum size (in bytes) of the data to be written. 121 114 * 122 * @return Non-negative number of bytes actually written 123 * to the device on success, negative error number 124 * otherwise. 125 * 115 * @return Non-negative number of bytes actually written to the 116 * device on success, negative error number otherwise. 126 117 */ 127 ssize_t write_dev(int dev_phone, void *buf, size_t len)118 ssize_t char_dev_write(int dev_phone, void *buf, size_t size) 128 119 { 129 return rw_dev(dev_phone, buf, len, false);120 return char_dev_rw(dev_phone, buf, size, false); 130 121 } 131 122 -
uspace/lib/c/generic/device/hw_res.c
rcead2aa r357b5f5 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 #include <device/hw_res.h> 36 36 #include <errno.h> … … 38 38 #include <malloc.h> 39 39 40 bool get_hw_resources(int dev_phone, hw_resource_list_t *hw_resources)40 int hw_res_get_resource_list(int dev_phone, hw_resource_list_t *hw_resources) 41 41 { 42 ipcarg_t count = 0; 43 int rc = async_req_1_1(dev_phone, DEV_IFACE_ID(HW_RES_DEV_IFACE), GET_RESOURCE_LIST, &count); 42 sysarg_t count = 0; 43 44 int rc = async_req_1_1(dev_phone, DEV_IFACE_ID(HW_RES_DEV_IFACE), 45 HW_RES_GET_RESOURCE_LIST, &count); 46 44 47 hw_resources->count = count; 45 if (EOK != rc) { 46 return false; 47 } 48 if (rc != EOK) 49 return rc; 48 50 49 51 size_t size = count * sizeof(hw_resource_t); 50 52 hw_resources->resources = (hw_resource_t *)malloc(size); 51 if (NULL == hw_resources->resources) { 52 return false; 53 if (!hw_resources->resources) 54 return ENOMEM; 55 56 rc = async_data_read_start(dev_phone, hw_resources->resources, size); 57 if (rc != EOK) { 58 free(hw_resources->resources); 59 hw_resources->resources = NULL; 60 return rc; 53 61 } 54 62 55 rc = async_data_read_start(dev_phone, hw_resources->resources, size); 56 if (EOK != rc) { 57 free(hw_resources->resources); 58 hw_resources->resources = NULL; 59 return false; 60 } 61 62 return true; 63 return EOK; 63 64 } 64 65 65 bool enable_interrupt(int dev_phone)66 bool hw_res_enable_interrupt(int dev_phone) 66 67 { 67 int rc = async_req_1_0(dev_phone, DEV_IFACE_ID(HW_RES_DEV_IFACE), ENABLE_INTERRUPT); 68 int rc = async_req_1_0(dev_phone, DEV_IFACE_ID(HW_RES_DEV_IFACE), 69 HW_RES_ENABLE_INTERRUPT); 70 68 71 return rc == EOK; 69 72 } 70 71 72 73 /** @} 73 74 /** @} 74 75 */ -
uspace/lib/c/generic/devman.c
rcead2aa r357b5f5 42 42 #include <devman.h> 43 43 #include <async.h> 44 #include <fibril_synch.h> 44 45 #include <errno.h> 45 46 #include <malloc.h> … … 50 51 static int devman_phone_client = -1; 51 52 53 static FIBRIL_MUTEX_INITIALIZE(devman_phone_mutex); 54 52 55 int devman_get_phone(devman_interface_t iface, unsigned int flags) 53 56 { 54 57 switch (iface) { 55 58 case DEVMAN_DRIVER: 56 if (devman_phone_driver >= 0) 59 fibril_mutex_lock(&devman_phone_mutex); 60 if (devman_phone_driver >= 0) { 61 fibril_mutex_unlock(&devman_phone_mutex); 57 62 return devman_phone_driver; 63 } 58 64 59 65 if (flags & IPC_FLAG_BLOCKING) 60 devman_phone_driver = ipc_connect_me_to_blocking(PHONE_NS, 66 devman_phone_driver = async_connect_me_to_blocking( 67 PHONE_NS, SERVICE_DEVMAN, DEVMAN_DRIVER, 0); 68 else 69 devman_phone_driver = async_connect_me_to(PHONE_NS, 61 70 SERVICE_DEVMAN, DEVMAN_DRIVER, 0); 62 else 63 devman_phone_driver = ipc_connect_me_to(PHONE_NS, 64 SERVICE_DEVMAN, DEVMAN_DRIVER, 0); 65 71 72 fibril_mutex_unlock(&devman_phone_mutex); 66 73 return devman_phone_driver; 67 74 case DEVMAN_CLIENT: 68 if (devman_phone_client >= 0) 75 fibril_mutex_lock(&devman_phone_mutex); 76 if (devman_phone_client >= 0) { 77 fibril_mutex_unlock(&devman_phone_mutex); 69 78 return devman_phone_client; 70 71 if (flags & IPC_FLAG_BLOCKING) 72 devman_phone_client = ipc_connect_me_to_blocking(PHONE_NS, 79 } 80 81 if (flags & IPC_FLAG_BLOCKING) { 82 devman_phone_client = async_connect_me_to_blocking( 83 PHONE_NS, SERVICE_DEVMAN, DEVMAN_CLIENT, 0); 84 } else { 85 devman_phone_client = async_connect_me_to(PHONE_NS, 73 86 SERVICE_DEVMAN, DEVMAN_CLIENT, 0); 74 else 75 devman_phone_client = ipc_connect_me_to(PHONE_NS, 76 SERVICE_DEVMAN, DEVMAN_CLIENT, 0); 77 87 } 88 89 fibril_mutex_unlock(&devman_phone_mutex); 78 90 return devman_phone_client; 79 91 default: … … 95 107 aid_t req = async_send_2(phone, DEVMAN_DRIVER_REGISTER, 0, 0, &answer); 96 108 97 ipcarg_t retval = async_data_write_start(phone, name, str_size(name));109 sysarg_t retval = async_data_write_start(phone, name, str_size(name)); 98 110 if (retval != EOK) { 99 111 async_wait_for(req, NULL); … … 104 116 async_set_client_connection(conn); 105 117 106 ipcarg_t callback_phonehash;118 sysarg_t callback_phonehash; 107 119 ipc_connect_to_me(phone, 0, 0, 0, &callback_phonehash); 108 120 async_wait_for(req, &retval); … … 116 128 { 117 129 ipc_call_t answer; 118 a sync_send_1(phone, DEVMAN_ADD_MATCH_ID, match_id->score, &answer);130 aid_t req = async_send_1(phone, DEVMAN_ADD_MATCH_ID, match_id->score, &answer); 119 131 int retval = async_data_write_start(phone, match_id->id, str_size(match_id->id)); 120 return retval; 132 async_wait_for(req, NULL); 133 return retval; 121 134 } 122 135 … … 154 167 aid_t req = async_send_2(phone, DEVMAN_ADD_CHILD_DEVICE, parent_handle, match_count, &answer); 155 168 156 ipcarg_t retval = async_data_write_start(phone, name, str_size(name));169 sysarg_t retval = async_data_write_start(phone, name, str_size(name)); 157 170 if (retval != EOK) { 158 171 async_wait_for(req, NULL); … … 191 204 aid_t req = async_send_1(phone, DEVMAN_ADD_DEVICE_TO_CLASS, devman_handle, &answer); 192 205 193 ipcarg_t retval = async_data_write_start(phone, class_name, str_size(class_name));206 sysarg_t retval = async_data_write_start(phone, class_name, str_size(class_name)); 194 207 if (retval != EOK) { 195 208 async_wait_for(req, NULL); … … 229 242 230 243 if (flags & IPC_FLAG_BLOCKING) { 231 phone = ipc_connect_me_to_blocking(PHONE_NS, SERVICE_DEVMAN,244 phone = async_connect_me_to_blocking(PHONE_NS, SERVICE_DEVMAN, 232 245 DEVMAN_CONNECT_TO_DEVICE, handle); 233 246 } else { 234 phone = ipc_connect_me_to(PHONE_NS, SERVICE_DEVMAN,247 phone = async_connect_me_to(PHONE_NS, SERVICE_DEVMAN, 235 248 DEVMAN_CONNECT_TO_DEVICE, handle); 236 249 } … … 244 257 245 258 if (flags & IPC_FLAG_BLOCKING) { 246 phone = ipc_connect_me_to_blocking(PHONE_NS, SERVICE_DEVMAN,259 phone = async_connect_me_to_blocking(PHONE_NS, SERVICE_DEVMAN, 247 260 DEVMAN_CONNECT_TO_PARENTS_DEVICE, handle); 248 261 } else { 249 phone = ipc_connect_me_to(PHONE_NS, SERVICE_DEVMAN,262 phone = async_connect_me_to(PHONE_NS, SERVICE_DEVMAN, 250 263 DEVMAN_CONNECT_TO_PARENTS_DEVICE, handle); 251 264 } … … 267 280 &answer); 268 281 269 ipcarg_t retval = async_data_write_start(phone, pathname, str_size(pathname));282 sysarg_t retval = async_data_write_start(phone, pathname, str_size(pathname)); 270 283 if (retval != EOK) { 271 284 async_wait_for(req, NULL); -
uspace/lib/c/generic/devmap.c
rcead2aa r357b5f5 107 107 aid_t req = async_send_2(phone, DEVMAP_DRIVER_REGISTER, 0, 0, &answer); 108 108 109 ipcarg_t retval = async_data_write_start(phone, name, str_size(name));109 sysarg_t retval = async_data_write_start(phone, name, str_size(name)); 110 110 if (retval != EOK) { 111 111 async_wait_for(req, NULL); … … 116 116 async_set_client_connection(conn); 117 117 118 ipcarg_t callback_phonehash;118 sysarg_t callback_phonehash; 119 119 ipc_connect_to_me(phone, 0, 0, 0, &callback_phonehash); 120 120 async_wait_for(req, &retval); … … 127 127 /** Register new device. 128 128 * 129 * @param namespace Namespace name. 129 * The @p interface is used when forwarding connection to the driver. 130 * If not 0, the first argument is the interface and the second argument 131 * is the devmap handle of the device. 132 * When the interface is zero (default), the first argument is directly 133 * the handle (to ensure backward compatibility). 134 * 135 * @param fqdn Fully qualified device name. 136 * @param[out] handle Handle to the created instance of device. 137 * @param interface Interface when forwarding. 138 * 139 */ 140 int devmap_device_register_with_iface(const char *fqdn, 141 devmap_handle_t *handle, sysarg_t interface) 142 { 143 int phone = devmap_get_phone(DEVMAP_DRIVER, IPC_FLAG_BLOCKING); 144 145 if (phone < 0) 146 return phone; 147 148 async_serialize_start(); 149 150 ipc_call_t answer; 151 aid_t req = async_send_2(phone, DEVMAP_DEVICE_REGISTER, interface, 0, 152 &answer); 153 154 sysarg_t retval = async_data_write_start(phone, fqdn, str_size(fqdn)); 155 if (retval != EOK) { 156 async_wait_for(req, NULL); 157 async_serialize_end(); 158 return retval; 159 } 160 161 async_wait_for(req, &retval); 162 163 async_serialize_end(); 164 165 if (retval != EOK) { 166 if (handle != NULL) 167 *handle = -1; 168 return retval; 169 } 170 171 if (handle != NULL) 172 *handle = (devmap_handle_t) IPC_GET_ARG1(answer); 173 174 return retval; 175 } 176 177 /** Register new device. 178 * 130 179 * @param fqdn Fully qualified device name. 131 180 * @param handle Output: Handle to the created instance of device. … … 134 183 int devmap_device_register(const char *fqdn, devmap_handle_t *handle) 135 184 { 136 int phone = devmap_get_phone(DEVMAP_DRIVER, IPC_FLAG_BLOCKING); 137 138 if (phone < 0) 139 return phone; 140 141 async_serialize_start(); 142 143 ipc_call_t answer; 144 aid_t req = async_send_2(phone, DEVMAP_DEVICE_REGISTER, 0, 0, 145 &answer); 146 147 ipcarg_t retval = async_data_write_start(phone, fqdn, str_size(fqdn)); 148 if (retval != EOK) { 149 async_wait_for(req, NULL); 150 async_serialize_end(); 151 return retval; 152 } 153 154 async_wait_for(req, &retval); 155 156 async_serialize_end(); 157 158 if (retval != EOK) { 159 if (handle != NULL) 160 *handle = -1; 161 return retval; 162 } 163 164 if (handle != NULL) 165 *handle = (devmap_handle_t) IPC_GET_ARG1(answer); 166 167 return retval; 168 } 185 return devmap_device_register_with_iface(fqdn, handle, 0); 186 } 187 169 188 170 189 int devmap_device_get_handle(const char *fqdn, devmap_handle_t *handle, unsigned int flags) … … 181 200 &answer); 182 201 183 ipcarg_t retval = async_data_write_start(phone, fqdn, str_size(fqdn));202 sysarg_t retval = async_data_write_start(phone, fqdn, str_size(fqdn)); 184 203 if (retval != EOK) { 185 204 async_wait_for(req, NULL); … … 217 236 &answer); 218 237 219 ipcarg_t retval = async_data_write_start(phone, name, str_size(name));238 sysarg_t retval = async_data_write_start(phone, name, str_size(name)); 220 239 if (retval != EOK) { 221 240 async_wait_for(req, NULL); … … 247 266 return phone; 248 267 249 ipcarg_t type;268 sysarg_t type; 250 269 int retval = async_req_1_1(phone, DEVMAP_HANDLE_PROBE, handle, &type); 251 270 if (retval != EOK) … … 260 279 261 280 if (flags & IPC_FLAG_BLOCKING) { 262 phone = ipc_connect_me_to_blocking(PHONE_NS, SERVICE_DEVMAP,281 phone = async_connect_me_to_blocking(PHONE_NS, SERVICE_DEVMAP, 263 282 DEVMAP_CONNECT_TO_DEVICE, handle); 264 283 } else { 265 phone = ipc_connect_me_to(PHONE_NS, SERVICE_DEVMAP,284 phone = async_connect_me_to(PHONE_NS, SERVICE_DEVMAP, 266 285 DEVMAP_CONNECT_TO_DEVICE, handle); 267 286 } … … 277 296 return -1; 278 297 279 ipcarg_t null_id;298 sysarg_t null_id; 280 299 int retval = async_req_0_1(phone, DEVMAP_NULL_CREATE, &null_id); 281 300 if (retval != EOK) … … 292 311 return; 293 312 294 async_req_1_0(phone, DEVMAP_NULL_DESTROY, ( ipcarg_t) null_id);313 async_req_1_0(phone, DEVMAP_NULL_DESTROY, (sysarg_t) null_id); 295 314 } 296 315 297 316 static size_t devmap_count_namespaces_internal(int phone) 298 317 { 299 ipcarg_t count;318 sysarg_t count; 300 319 int retval = async_req_0_1(phone, DEVMAP_GET_NAMESPACE_COUNT, &count); 301 320 if (retval != EOK) … … 307 326 static size_t devmap_count_devices_internal(int phone, devmap_handle_t ns_handle) 308 327 { 309 ipcarg_t count;328 sysarg_t count; 310 329 int retval = async_req_1_1(phone, DEVMAP_GET_DEVICE_COUNT, ns_handle, &count); 311 330 if (retval != EOK) … … 375 394 } 376 395 377 ipcarg_t retval;396 sysarg_t retval; 378 397 async_wait_for(req, &retval); 379 398 async_serialize_end(); … … 427 446 } 428 447 429 ipcarg_t retval;448 sysarg_t retval; 430 449 async_wait_for(req, &retval); 431 450 async_serialize_end(); -
uspace/lib/c/generic/event.c
rcead2aa r357b5f5 49 49 * @return Value returned by the kernel. 50 50 */ 51 int event_subscribe(event_type_t e, ipcarg_t method)51 int event_subscribe(event_type_t e, sysarg_t method) 52 52 { 53 53 return __SYSCALL2(SYS_EVENT_SUBSCRIBE, (sysarg_t) e, (sysarg_t) method); -
uspace/lib/c/generic/fibril.c
rcead2aa r357b5f5 361 361 } 362 362 363 int fibril_get_sercount(void) 364 { 365 return serialization_count; 366 } 367 363 368 /** @} 364 369 */ -
uspace/lib/c/generic/fibril_synch.c
rcead2aa r357b5f5 104 104 fibril_t *f = (fibril_t *) fibril_get_id(); 105 105 106 if (fibril_get_sercount() != 0) 107 core(); 108 106 109 futex_down(&async_futex); 107 110 if (fm->counter-- <= 0) { … … 139 142 static void _fibril_mutex_unlock_unsafe(fibril_mutex_t *fm) 140 143 { 141 assert(fm->counter <= 0);142 144 if (fm->counter++ < 0) { 143 145 link_t *tmp; … … 165 167 void fibril_mutex_unlock(fibril_mutex_t *fm) 166 168 { 169 assert(fibril_mutex_is_locked(fm)); 167 170 futex_down(&async_futex); 168 171 _fibril_mutex_unlock_unsafe(fm); 169 172 futex_up(&async_futex); 173 } 174 175 bool fibril_mutex_is_locked(fibril_mutex_t *fm) 176 { 177 bool locked = false; 178 179 futex_down(&async_futex); 180 if (fm->counter <= 0) 181 locked = true; 182 futex_up(&async_futex); 183 184 return locked; 170 185 } 171 186 … … 182 197 fibril_t *f = (fibril_t *) fibril_get_id(); 183 198 199 if (fibril_get_sercount() != 0) 200 core(); 201 184 202 futex_down(&async_futex); 185 203 if (frw->writers) { … … 207 225 fibril_t *f = (fibril_t *) fibril_get_id(); 208 226 227 if (fibril_get_sercount() != 0) 228 core(); 229 209 230 futex_down(&async_futex); 210 231 if (frw->writers || frw->readers) { … … 230 251 { 231 252 futex_down(&async_futex); 232 assert(frw->readers || (frw->writers == 1));233 253 if (frw->readers) { 234 254 if (--frw->readers) { … … 296 316 void fibril_rwlock_read_unlock(fibril_rwlock_t *frw) 297 317 { 318 assert(fibril_rwlock_is_read_locked(frw)); 298 319 _fibril_rwlock_common_unlock(frw); 299 320 } … … 301 322 void fibril_rwlock_write_unlock(fibril_rwlock_t *frw) 302 323 { 324 assert(fibril_rwlock_is_write_locked(frw)); 303 325 _fibril_rwlock_common_unlock(frw); 326 } 327 328 bool fibril_rwlock_is_read_locked(fibril_rwlock_t *frw) 329 { 330 bool locked = false; 331 332 futex_down(&async_futex); 333 if (frw->readers) 334 locked = true; 335 futex_up(&async_futex); 336 337 return locked; 338 } 339 340 bool fibril_rwlock_is_write_locked(fibril_rwlock_t *frw) 341 { 342 bool locked = false; 343 344 futex_down(&async_futex); 345 if (frw->writers) { 346 assert(frw->writers == 1); 347 locked = true; 348 } 349 futex_up(&async_futex); 350 351 return locked; 352 } 353 354 bool fibril_rwlock_is_locked(fibril_rwlock_t *frw) 355 { 356 return fibril_rwlock_is_read_locked(frw) || 357 fibril_rwlock_is_write_locked(frw); 304 358 } 305 359 … … 314 368 { 315 369 awaiter_t wdata; 370 371 assert(fibril_mutex_is_locked(fm)); 316 372 317 373 if (timeout < 0) -
uspace/lib/c/generic/io/console.c
rcead2aa r357b5f5 45 45 } 46 46 47 int console_get_size(int phone, ipcarg_t *cols, ipcarg_t *rows)47 int console_get_size(int phone, sysarg_t *cols, sysarg_t *rows) 48 48 { 49 49 return async_req_0_2(phone, CONSOLE_GET_SIZE, cols, rows); … … 71 71 } 72 72 73 int console_get_color_cap(int phone, ipcarg_t *ccap)73 int console_get_color_cap(int phone, sysarg_t *ccap) 74 74 { 75 75 return async_req_0_1(phone, CONSOLE_GET_COLOR_CAP, ccap); … … 81 81 } 82 82 83 int console_get_pos(int phone, ipcarg_t *col, ipcarg_t *row)83 int console_get_pos(int phone, sysarg_t *col, sysarg_t *row) 84 84 { 85 85 return async_req_0_2(phone, CONSOLE_GET_POS, col, row); 86 86 } 87 87 88 void console_set_pos(int phone, ipcarg_t col, ipcarg_t row)88 void console_set_pos(int phone, sysarg_t col, sysarg_t row) 89 89 { 90 90 async_msg_2(phone, CONSOLE_GOTO, col, row); … … 93 93 bool console_get_event(int phone, console_event_t *event) 94 94 { 95 ipcarg_t type;96 ipcarg_t key;97 ipcarg_t mods;98 ipcarg_t c;95 sysarg_t type; 96 sysarg_t key; 97 sysarg_t mods; 98 sysarg_t c; 99 99 100 100 int rc = async_req_0_4(phone, CONSOLE_GET_EVENT, &type, &key, &mods, &c); -
uspace/lib/c/generic/io/screenbuffer.c
rcead2aa r357b5f5 67 67 * 68 68 */ 69 screenbuffer_t *screenbuffer_init(screenbuffer_t *scr, ipcarg_t size_x,70 ipcarg_t size_y)69 screenbuffer_t *screenbuffer_init(screenbuffer_t *scr, sysarg_t size_x, 70 sysarg_t size_y) 71 71 { 72 72 scr->buffer = (keyfield_t *) malloc(sizeof(keyfield_t) * size_x * size_y); … … 110 110 * 111 111 */ 112 void screenbuffer_clear_line(screenbuffer_t *scr, ipcarg_t line)112 void screenbuffer_clear_line(screenbuffer_t *scr, sysarg_t line) 113 113 { 114 ipcarg_t x;114 sysarg_t x; 115 115 116 116 for (x = 0; x < scr->size_x; x++) { … … 141 141 * 142 142 */ 143 void screenbuffer_goto(screenbuffer_t *scr, ipcarg_t x, ipcarg_t y)143 void screenbuffer_goto(screenbuffer_t *scr, sysarg_t x, sysarg_t y) 144 144 { 145 145 scr->position_x = x % scr->size_x; -
uspace/lib/c/generic/io/vprintf.c
rcead2aa r357b5f5 37 37 #include <unistd.h> 38 38 #include <io/printf_core.h> 39 #include <f utex.h>39 #include <fibril_synch.h> 40 40 #include <async.h> 41 41 #include <str.h> 42 42 43 static atomic_t printf_futex = FUTEX_INITIALIZER;43 static FIBRIL_MUTEX_INITIALIZE(printf_mutex); 44 44 45 45 static int vprintf_str_write(const char *str, size_t size, void *stream) … … 85 85 * Prevent other threads to execute printf_core() 86 86 */ 87 futex_down(&printf_futex); 88 89 /* 90 * Prevent other fibrils of the same thread 91 * to execute printf_core() 92 */ 93 async_serialize_start(); 87 fibril_mutex_lock(&printf_mutex); 94 88 95 89 int ret = printf_core(fmt, &ps, ap); 96 90 97 async_serialize_end(); 98 futex_up(&printf_futex); 91 fibril_mutex_unlock(&printf_mutex); 99 92 100 93 return ret; -
uspace/lib/c/generic/ipc.c
rcead2aa r357b5f5 38 38 */ 39 39 /** @file 40 */ 40 */ 41 41 42 42 #include <ipc/ipc.h> … … 104 104 */ 105 105 int 106 ipc_call_sync_fast(int phoneid, ipcarg_t method, ipcarg_t arg1, ipcarg_t arg2,107 ipcarg_t arg3, ipcarg_t *result1, ipcarg_t *result2, ipcarg_t *result3,108 ipcarg_t *result4, ipcarg_t *result5)106 ipc_call_sync_fast(int phoneid, sysarg_t method, sysarg_t arg1, sysarg_t arg2, 107 sysarg_t arg3, sysarg_t *result1, sysarg_t *result2, sysarg_t *result3, 108 sysarg_t *result4, sysarg_t *result5) 109 109 { 110 110 ipc_call_t resdata; … … 131 131 /** Make a synchronous call transmitting 5 arguments of payload. 132 132 * 133 * @param phoneid Phone handle for the call. 134 * @param method Requested method. 135 * @param arg1 Service-defined payload argument. 136 * @param arg2 Service-defined payload argument. 137 * @param arg3 Service-defined payload argument. 138 * @param arg4 Service-defined payload argument. 139 * @param arg5 Service-defined payload argument. 140 * @param result1 If non-NULL, storage for the first return argument. 141 * @param result2 If non-NULL, storage for the second return argument. 142 * @param result3 If non-NULL, storage for the third return argument. 143 * @param result4 If non-NULL, storage for the fourth return argument. 144 * @param result5 If non-NULL, storage for the fifth return argument. 145 * 146 * @return Negative value means IPC error. 147 * Otherwise the RETVAL of the answer. 133 * @param phoneid Phone handle for the call. 134 * @param imethod Requested interface and method. 135 * @param arg1 Service-defined payload argument. 136 * @param arg2 Service-defined payload argument. 137 * @param arg3 Service-defined payload argument. 138 * @param arg4 Service-defined payload argument. 139 * @param arg5 Service-defined payload argument. 140 * @param result1 If non-NULL, storage for the first return argument. 141 * @param result2 If non-NULL, storage for the second return argument. 142 * @param result3 If non-NULL, storage for the third return argument. 143 * @param result4 If non-NULL, storage for the fourth return argument. 144 * @param result5 If non-NULL, storage for the fifth return argument. 145 * 146 * @return Negative value means IPC error. 147 * Otherwise the RETVAL of the answer. 148 * 148 149 */ 149 150 int 150 ipc_call_sync_slow(int phoneid, ipcarg_t method, ipcarg_t arg1, ipcarg_t arg2,151 ipcarg_t arg3, ipcarg_t arg4, ipcarg_t arg5, ipcarg_t *result1,152 ipcarg_t *result2, ipcarg_t *result3, ipcarg_t *result4, ipcarg_t *result5)151 ipc_call_sync_slow(int phoneid, sysarg_t imethod, sysarg_t arg1, sysarg_t arg2, 152 sysarg_t arg3, sysarg_t arg4, sysarg_t arg5, sysarg_t *result1, 153 sysarg_t *result2, sysarg_t *result3, sysarg_t *result4, sysarg_t *result5) 153 154 { 154 155 ipc_call_t data; 155 int callres; 156 157 IPC_SET_METHOD(data, method); 156 157 IPC_SET_IMETHOD(data, imethod); 158 158 IPC_SET_ARG1(data, arg1); 159 159 IPC_SET_ARG2(data, arg2); … … 161 161 IPC_SET_ARG4(data, arg4); 162 162 IPC_SET_ARG5(data, arg5); 163 164 callres = __SYSCALL3(SYS_IPC_CALL_SYNC_SLOW, phoneid, (sysarg_t) &data,165 (sysarg_t) &data );163 164 int callres = __SYSCALL3(SYS_IPC_CALL_SYNC_SLOW, phoneid, 165 (sysarg_t) &data, (sysarg_t) &data); 166 166 if (callres) 167 167 return callres; 168 168 169 169 if (result1) 170 170 *result1 = IPC_GET_ARG1(data); … … 177 177 if (result5) 178 178 *result5 = IPC_GET_ARG5(data); 179 179 180 180 return IPC_GET_RETVAL(data); 181 181 } … … 183 183 /** Syscall to send asynchronous message. 184 184 * 185 * @param phoneid Phone handle for the call. 186 * @param data Call data with the request. 187 * 188 * @return Hash of the call or an error code. 185 * @param phoneid Phone handle for the call. 186 * @param data Call data with the request. 187 * 188 * @return Hash of the call or an error code. 189 * 189 190 */ 190 191 static ipc_callid_t _ipc_call_async(int phoneid, ipc_call_t *data) … … 277 278 * If the call cannot be temporarily made, queue it. 278 279 * 279 * @param phoneid Phone handle for the call. 280 * @param method Requested method. 281 * @param arg1 Service-defined payload argument. 282 * @param arg2 Service-defined payload argument. 283 * @param arg3 Service-defined payload argument. 284 * @param arg4 Service-defined payload argument. 285 * @param private Argument to be passed to the answer/error callback. 286 * @param callback Answer or error callback. 287 * @param can_preempt If non-zero, the current fibril will be preempted in 288 * case the kernel temporarily refuses to accept more 289 * asynchronous calls. 290 */ 291 void ipc_call_async_fast(int phoneid, ipcarg_t method, ipcarg_t arg1, 292 ipcarg_t arg2, ipcarg_t arg3, ipcarg_t arg4, void *private, 280 * @param phoneid Phone handle for the call. 281 * @param imethod Requested interface and method. 282 * @param arg1 Service-defined payload argument. 283 * @param arg2 Service-defined payload argument. 284 * @param arg3 Service-defined payload argument. 285 * @param arg4 Service-defined payload argument. 286 * @param private Argument to be passed to the answer/error callback. 287 * @param callback Answer or error callback. 288 * @param can_preempt If non-zero, the current fibril will be preempted in 289 * case the kernel temporarily refuses to accept more 290 * asynchronous calls. 291 * 292 */ 293 void ipc_call_async_fast(int phoneid, sysarg_t imethod, sysarg_t arg1, 294 sysarg_t arg2, sysarg_t arg3, sysarg_t arg4, void *private, 293 295 ipc_async_callback_t callback, int can_preempt) 294 296 { 295 297 async_call_t *call = NULL; 296 ipc_callid_t callid; 297 298 298 299 if (callback) { 299 300 call = ipc_prepare_async(private, callback); … … 301 302 return; 302 303 } 303 304 304 305 /* 305 306 * We need to make sure that we get callid before another thread … … 307 308 */ 308 309 futex_down(&ipc_futex); 309 callid = __SYSCALL6(SYS_IPC_CALL_ASYNC_FAST, phoneid, method, arg1,310 arg2, arg3, arg4);311 310 ipc_callid_t callid = __SYSCALL6(SYS_IPC_CALL_ASYNC_FAST, phoneid, 311 imethod, arg1, arg2, arg3, arg4); 312 312 313 if (callid == (ipc_callid_t) IPC_CALLRET_TEMPORARY) { 313 314 if (!call) { … … 316 317 return; 317 318 } 318 IPC_SET_ METHOD(call->u.msg.data,method);319 IPC_SET_IMETHOD(call->u.msg.data, imethod); 319 320 IPC_SET_ARG1(call->u.msg.data, arg1); 320 321 IPC_SET_ARG2(call->u.msg.data, arg2); … … 337 338 * If the call cannot be temporarily made, queue it. 338 339 * 339 * @param phoneid 340 * @param method Requested method.341 * @param arg1 342 * @param arg2 343 * @param arg3 344 * @param arg4 345 * @param arg5 346 * @param private 347 * @param callback 348 * @param can_preempt 349 * 350 * 351 * 352 */ 353 void ipc_call_async_slow(int phoneid, ipcarg_t method, ipcarg_t arg1,354 ipcarg_t arg2, ipcarg_t arg3, ipcarg_t arg4, ipcarg_t arg5, void *private,340 * @param phoneid Phone handle for the call. 341 * @param imethod Requested interface and method. 342 * @param arg1 Service-defined payload argument. 343 * @param arg2 Service-defined payload argument. 344 * @param arg3 Service-defined payload argument. 345 * @param arg4 Service-defined payload argument. 346 * @param arg5 Service-defined payload argument. 347 * @param private Argument to be passed to the answer/error callback. 348 * @param callback Answer or error callback. 349 * @param can_preempt If non-zero, the current fibril will be preempted in 350 * case the kernel temporarily refuses to accept more 351 * asynchronous calls. 352 * 353 */ 354 void ipc_call_async_slow(int phoneid, sysarg_t imethod, sysarg_t arg1, 355 sysarg_t arg2, sysarg_t arg3, sysarg_t arg4, sysarg_t arg5, void *private, 355 356 ipc_async_callback_t callback, int can_preempt) 356 357 { … … 362 363 return; 363 364 364 IPC_SET_ METHOD(call->u.msg.data,method);365 IPC_SET_IMETHOD(call->u.msg.data, imethod); 365 366 IPC_SET_ARG1(call->u.msg.data, arg1); 366 367 IPC_SET_ARG2(call->u.msg.data, arg2); … … 393 394 * @return Zero on success or a value from @ref errno.h on failure. 394 395 */ 395 ipcarg_t ipc_answer_fast(ipc_callid_t callid, ipcarg_t retval, ipcarg_t arg1,396 ipcarg_t arg2, ipcarg_t arg3, ipcarg_t arg4)396 sysarg_t ipc_answer_fast(ipc_callid_t callid, sysarg_t retval, sysarg_t arg1, 397 sysarg_t arg2, sysarg_t arg3, sysarg_t arg4) 397 398 { 398 399 return __SYSCALL6(SYS_IPC_ANSWER_FAST, callid, retval, arg1, arg2, arg3, … … 412 413 * @return Zero on success or a value from @ref errno.h on failure. 413 414 */ 414 ipcarg_t ipc_answer_slow(ipc_callid_t callid, ipcarg_t retval, ipcarg_t arg1,415 ipcarg_t arg2, ipcarg_t arg3, ipcarg_t arg4, ipcarg_t arg5)415 sysarg_t ipc_answer_slow(ipc_callid_t callid, sysarg_t retval, sysarg_t arg1, 416 sysarg_t arg2, sysarg_t arg3, sysarg_t arg4, sysarg_t arg5) 416 417 { 417 418 ipc_call_t data; … … 585 586 */ 586 587 int ipc_connect_to_me(int phoneid, int arg1, int arg2, int arg3, 587 ipcarg_t *phonehash)588 sysarg_t *phonehash) 588 589 { 589 590 return ipc_call_sync_3_5(phoneid, IPC_M_CONNECT_TO_ME, arg1, arg2, … … 602 603 int ipc_connect_me_to(int phoneid, int arg1, int arg2, int arg3) 603 604 { 604 ipcarg_t newphid;605 sysarg_t newphid; 605 606 int res; 606 607 … … 626 627 int ipc_connect_me_to_blocking(int phoneid, int arg1, int arg2, int arg3) 627 628 { 628 ipcarg_t newphid;629 sysarg_t newphid; 629 630 int res; 630 631 … … 676 677 /** Forward a received call to another destination. 677 678 * 678 * @param callid 679 * @param phoneid 680 * @param method Newmethod for the forwarded call.681 * @param arg1 682 * @param arg2 683 * @param mode 684 * 685 * @return 679 * @param callid Hash of the call to forward. 680 * @param phoneid Phone handle to use for forwarding. 681 * @param imethod New interface and method for the forwarded call. 682 * @param arg1 New value of the first argument for the forwarded call. 683 * @param arg2 New value of the second argument for the forwarded call. 684 * @param mode Flags specifying mode of the forward operation. 685 * 686 * @return Zero on success or an error code. 686 687 * 687 688 * For non-system methods, the old method, arg1 and arg2 are rewritten by the … … 690 691 * methods are forwarded verbatim. 691 692 */ 692 int ipc_forward_fast(ipc_callid_t callid, int phoneid, int method,693 ipcarg_t arg1, ipcarg_t arg2, int mode)694 { 695 return __SYSCALL6(SYS_IPC_FORWARD_FAST, callid, phoneid, method, arg1,693 int ipc_forward_fast(ipc_callid_t callid, int phoneid, int imethod, 694 sysarg_t arg1, sysarg_t arg2, int mode) 695 { 696 return __SYSCALL6(SYS_IPC_FORWARD_FAST, callid, phoneid, imethod, arg1, 696 697 arg2, mode); 697 698 } 698 699 699 700 700 int ipc_forward_slow(ipc_callid_t callid, int phoneid, int method,701 ipcarg_t arg1, ipcarg_t arg2, ipcarg_t arg3, ipcarg_t arg4, ipcarg_t arg5,701 int ipc_forward_slow(ipc_callid_t callid, int phoneid, int imethod, 702 sysarg_t arg1, sysarg_t arg2, sysarg_t arg3, sysarg_t arg4, sysarg_t arg5, 702 703 int mode) 703 704 { 704 705 ipc_call_t data; 705 706 IPC_SET_ METHOD(data,method);706 707 IPC_SET_IMETHOD(data, imethod); 707 708 IPC_SET_ARG1(data, arg1); 708 709 IPC_SET_ARG2(data, arg2); … … 710 711 IPC_SET_ARG4(data, arg4); 711 712 IPC_SET_ARG5(data, arg5); 712 713 713 714 return __SYSCALL4(SYS_IPC_FORWARD_SLOW, callid, phoneid, (sysarg_t) &data, mode); 714 715 } … … 725 726 * @return Zero on success or a negative error code from errno.h. 726 727 */ 727 int ipc_share_in_start(int phoneid, void *dst, size_t size, ipcarg_t arg,728 int ipc_share_in_start(int phoneid, void *dst, size_t size, sysarg_t arg, 728 729 int *flags) 729 730 { 730 731 sysarg_t tmp_flags = 0; 731 int res = ipc_call_sync_3_2(phoneid, IPC_M_SHARE_IN, ( ipcarg_t) dst,732 ( ipcarg_t) size, arg, NULL, &tmp_flags);732 int res = ipc_call_sync_3_2(phoneid, IPC_M_SHARE_IN, (sysarg_t) dst, 733 (sysarg_t) size, arg, NULL, &tmp_flags); 733 734 734 735 if (flags) … … 751 752 int ipc_share_in_finalize(ipc_callid_t callid, void *src, int flags) 752 753 { 753 return ipc_answer_2(callid, EOK, ( ipcarg_t) src, (ipcarg_t) flags);754 return ipc_answer_2(callid, EOK, (sysarg_t) src, (sysarg_t) flags); 754 755 } 755 756 … … 764 765 int ipc_share_out_start(int phoneid, void *src, int flags) 765 766 { 766 return ipc_call_sync_3_0(phoneid, IPC_M_SHARE_OUT, ( ipcarg_t) src, 0,767 ( ipcarg_t) flags);767 return ipc_call_sync_3_0(phoneid, IPC_M_SHARE_OUT, (sysarg_t) src, 0, 768 (sysarg_t) flags); 768 769 } 769 770 … … 780 781 int ipc_share_out_finalize(ipc_callid_t callid, void *dst) 781 782 { 782 return ipc_answer_1(callid, EOK, ( ipcarg_t) dst);783 return ipc_answer_1(callid, EOK, (sysarg_t) dst); 783 784 } 784 785 … … 794 795 int ipc_data_read_start(int phoneid, void *dst, size_t size) 795 796 { 796 return ipc_call_sync_2_0(phoneid, IPC_M_DATA_READ, ( ipcarg_t) dst,797 ( ipcarg_t) size);797 return ipc_call_sync_2_0(phoneid, IPC_M_DATA_READ, (sysarg_t) dst, 798 (sysarg_t) size); 798 799 } 799 800 … … 812 813 int ipc_data_read_finalize(ipc_callid_t callid, const void *src, size_t size) 813 814 { 814 return ipc_answer_2(callid, EOK, ( ipcarg_t) src, (ipcarg_t) size);815 return ipc_answer_2(callid, EOK, (sysarg_t) src, (sysarg_t) size); 815 816 } 816 817 … … 825 826 int ipc_data_write_start(int phoneid, const void *src, size_t size) 826 827 { 827 return ipc_call_sync_2_0(phoneid, IPC_M_DATA_WRITE, ( ipcarg_t) src,828 ( ipcarg_t) size);828 return ipc_call_sync_2_0(phoneid, IPC_M_DATA_WRITE, (sysarg_t) src, 829 (sysarg_t) size); 829 830 } 830 831 … … 842 843 int ipc_data_write_finalize(ipc_callid_t callid, void *dst, size_t size) 843 844 { 844 return ipc_answer_2(callid, EOK, (ipcarg_t) dst, (ipcarg_t) size); 845 } 846 847 #include <kernel/syscall/sysarg64.h> 845 return ipc_answer_2(callid, EOK, (sysarg_t) dst, (sysarg_t) size); 846 } 847 848 848 /** Connect to a task specified by id. 849 * 849 850 */ 850 851 int ipc_connect_kbox(task_id_t id) 851 852 { 852 sysarg64_t arg; 853 854 arg.value = (unsigned long long) id; 855 853 #ifdef __32_BITS__ 854 sysarg64_t arg = (sysarg64_t) id; 856 855 return __SYSCALL1(SYS_IPC_CONNECT_KBOX, (sysarg_t) &arg); 857 } 858 856 #endif 857 858 #ifdef __64_BITS__ 859 return __SYSCALL1(SYS_IPC_CONNECT_KBOX, (sysarg_t) id); 860 #endif 861 } 862 859 863 /** @} 860 864 */ -
uspace/lib/c/generic/libc.c
rcead2aa r357b5f5 50 50 #include <ipc/ipc.h> 51 51 #include <async.h> 52 #include <async_rel.h>53 52 #include <as.h> 54 53 #include <loader/pcb.h> … … 66 65 __heap_init(); 67 66 __async_init(); 68 (void) async_rel_init();69 67 fibril_t *fibril = fibril_setup(); 70 68 __tcb_set(fibril->tcb); -
uspace/lib/c/generic/loader.c
rcead2aa r357b5f5 96 96 } 97 97 98 ipcarg_t retval;98 sysarg_t retval; 99 99 async_wait_for(req, &retval); 100 100 return (int) retval; … … 131 131 } 132 132 133 ipcarg_t retval;133 sysarg_t retval; 134 134 async_wait_for(req, &retval); 135 135 return (int) retval; … … 166 166 free(pa); 167 167 168 ipcarg_t retval;168 sysarg_t retval; 169 169 async_wait_for(req, &retval); 170 170 return (int) retval; … … 213 213 ipc_call_t answer; 214 214 aid_t req = async_send_0(ldr->phone_id, LOADER_SET_ARGS, &answer); 215 ipcarg_t rc = async_data_write_start(ldr->phone_id, (void *) arg_buf, buffer_size);215 sysarg_t rc = async_data_write_start(ldr->phone_id, (void *) arg_buf, buffer_size); 216 216 if (rc != EOK) { 217 217 async_wait_for(req, NULL); … … 267 267 ipc_call_t answer; 268 268 aid_t req = async_send_0(ldr->phone_id, LOADER_SET_FILES, &answer); 269 ipcarg_t rc = async_data_write_start(ldr->phone_id, (void *) files_buf,269 sysarg_t rc = async_data_write_start(ldr->phone_id, (void *) files_buf, 270 270 count * sizeof(fdi_node_t)); 271 271 if (rc != EOK) { -
uspace/lib/c/generic/mem.c
rcead2aa r357b5f5 222 222 /** Compare two memory areas. 223 223 * 224 * @param s1 Pointer to the first area to compare. 225 * @param s2 Pointer to the second area to compare. 226 * @param len Size of the first area in bytes. Both areas must have 227 * the same length. 228 * @return If len is 0, return zero. If the areas match, return 229 * zero. Otherwise return non-zero. 230 */ 231 int bcmp(const char *s1, const char *s2, size_t len) 232 { 233 for (; len && *s1++ == *s2++; len--) 234 ; 224 * @param s1 Pointer to the first area to compare. 225 * @param s2 Pointer to the second area to compare. 226 * @param len Size of the first area in bytes. Both areas must have 227 * the same length. 228 * 229 * @return If len is 0, return zero. If the areas match, return 230 * zero. Otherwise return non-zero. 231 * 232 */ 233 int bcmp(const void *s1, const void *s2, size_t len) 234 { 235 uint8_t *u1 = (uint8_t *) s1; 236 uint8_t *u2 = (uint8_t *) s2; 237 238 for (; (len != 0) && (*u1++ == *u2++); len--); 239 235 240 return len; 236 241 } -
uspace/lib/c/generic/net/icmp_api.c
rcead2aa r357b5f5 81 81 { 82 82 aid_t message_id; 83 ipcarg_t result;83 sysarg_t result; 84 84 85 85 if (addrlen <= 0) … … 87 87 88 88 message_id = async_send_5(icmp_phone, NET_ICMP_ECHO, size, timeout, ttl, 89 tos, ( ipcarg_t) dont_fragment, NULL);89 tos, (sysarg_t) dont_fragment, NULL); 90 90 91 / / send the address91 /* Send the address */ 92 92 async_data_write_start(icmp_phone, addr, (size_t) addrlen); 93 93 -
uspace/lib/c/generic/net/icmp_common.c
rcead2aa r357b5f5 27 27 */ 28 28 29 /** @addtogroup libc 29 /** @addtogroup libc 30 30 * @{ 31 31 */ … … 38 38 #include <net/modules.h> 39 39 #include <net/icmp_common.h> 40 41 40 #include <ipc/services.h> 42 41 #include <ipc/icmp.h> 43 44 42 #include <sys/time.h> 45 43 #include <async.h> 46 44 47 /** Connect sto the ICMP module.45 /** Connect to the ICMP module. 48 46 * 49 * @param service The ICMP module service. Ignored parameter. 50 * @param[in] timeout The connection timeout in microseconds. No timeout if 51 * set to zero. 52 * @return The ICMP module phone on success. 53 * @return ETIMEOUT if the connection timeouted. 47 * @param[in] timeout Connection timeout in microseconds, zero 48 * for no timeout. 49 * 50 * @return ICMP module phone on success. 51 * @return ETIMEOUT if the connection timeouted. 52 * 54 53 */ 55 int icmp_connect_module(s ervices_t service, suseconds_t timeout)54 int icmp_connect_module(suseconds_t timeout) 56 55 { 57 int phone; 58 59 phone = connect_to_service_timeout(SERVICE_ICMP, timeout); 60 if (phone >= 0) 61 async_req_0_0(phone, NET_ICMP_INIT); 62 63 return phone; 56 return connect_to_service_timeout(SERVICE_ICMP, timeout); 64 57 } 65 58 -
uspace/lib/c/generic/net/inet.c
rcead2aa r357b5f5 64 64 switch (family) { 65 65 case AF_INET: 66 / / check the output buffer size66 /* Check output buffer size */ 67 67 if (length < INET_ADDRSTRLEN) 68 68 return ENOMEM; 69 69 70 / / fill the buffer with the IPv4 address70 /* Fill buffer with IPv4 address */ 71 71 snprintf(address, length, "%hhu.%hhu.%hhu.%hhu", 72 72 data[0], data[1], data[2], data[3]); … … 75 75 76 76 case AF_INET6: 77 / / check the output buffer size77 /* Check output buffer size */ 78 78 if (length < INET6_ADDRSTRLEN) 79 79 return ENOMEM; 80 80 81 / / fill the buffer with the IPv6 address81 /* Fill buffer with IPv6 address */ 82 82 snprintf(address, length, 83 83 "%hhx%hhx:%hhx%hhx:%hhx%hhx:%hhx%hhx:%hhx%hhx:%hhx%hhx:" … … 124 124 return EINVAL; 125 125 126 / / set the processing parameters126 /* Set processing parameters */ 127 127 switch (family) { 128 128 case AF_INET: … … 142 142 } 143 143 144 / / erase if no address144 /* Erase if no address */ 145 145 if (!address) { 146 146 bzero(data, count); … … 148 148 } 149 149 150 / / process the string from the beginning150 /* Process string from the beginning */ 151 151 next = address; 152 152 index = 0; 153 153 do { 154 / / if the actual character is set154 /* If the actual character is set */ 155 155 if (next && *next) { 156 156 157 / / if not on the first character157 /* If not on the first character */ 158 158 if (index) { 159 / / move to the next character159 /* Move to the next character */ 160 160 ++next; 161 161 } 162 162 163 / / parse the actual integral value163 /* Parse the actual integral value */ 164 164 value = strtoul(next, &last, base); 165 // remember the last problematic character 166 // should be either '.' or ':' but is ignored to be more 167 // generic 165 /* 166 * Remember the last problematic character 167 * should be either '.' or ':' but is ignored to be 168 * more generic 169 */ 168 170 next = last; 169 171 170 / / fill the address data byte by byte172 /* Fill the address data byte by byte */ 171 173 shift = bytes - 1; 172 174 do { 173 / / like little endian175 /* like little endian */ 174 176 data[index + shift] = value; 175 177 value >>= 8; … … 178 180 index += bytes; 179 181 } else { 180 / / erase the rest of the address182 /* Erase the rest of the address */ 181 183 bzero(data + index, count - index); 182 184 return EOK; -
uspace/lib/c/generic/net/modules.c
rcead2aa r357b5f5 32 32 33 33 /** @file 34 * Generic module functions implementation. 34 * Generic module functions implementation. 35 35 * 36 36 * @todo MAKE IT POSSIBLE TO REMOVE THIS FILE VIA EITHER REPLACING PART OF ITS … … 52 52 #define MODULE_WAIT_TIME (10 * 1000) 53 53 54 /** Answer s thecall.55 * 56 * @param[in] callid The call identifier.57 * @param[in] result The message processing result.58 * @param[in] answer The message processing answer.59 * @param[in] answer_count The number of answer parameters.60 * /61 void 62 answer_call(ipc_callid_t callid, int result, ipc_call_t *answer,63 int answer_count)64 { 65 / / choose the most efficient answer function66 if ( answer || (!answer_count)) {67 switch ( answer_count) {54 /** Answer a call. 55 * 56 * @param[in] callid Call identifier. 57 * @param[in] result Message processing result. 58 * @param[in] answer Message processing answer. 59 * @param[in] count Number of answer parameters. 60 * 61 */ 62 void answer_call(ipc_callid_t callid, int result, ipc_call_t *answer, 63 size_t count) 64 { 65 /* Choose the most efficient function */ 66 if ((answer != NULL) || (count == 0)) { 67 switch (count) { 68 68 case 0: 69 ipc_answer_0(callid, ( ipcarg_t) result);69 ipc_answer_0(callid, (sysarg_t) result); 70 70 break; 71 71 case 1: 72 ipc_answer_1(callid, ( ipcarg_t) result,72 ipc_answer_1(callid, (sysarg_t) result, 73 73 IPC_GET_ARG1(*answer)); 74 74 break; 75 75 case 2: 76 ipc_answer_2(callid, ( ipcarg_t) result,76 ipc_answer_2(callid, (sysarg_t) result, 77 77 IPC_GET_ARG1(*answer), IPC_GET_ARG2(*answer)); 78 78 break; 79 79 case 3: 80 ipc_answer_3(callid, ( ipcarg_t) result,80 ipc_answer_3(callid, (sysarg_t) result, 81 81 IPC_GET_ARG1(*answer), IPC_GET_ARG2(*answer), 82 82 IPC_GET_ARG3(*answer)); 83 83 break; 84 84 case 4: 85 ipc_answer_4(callid, ( ipcarg_t) result,85 ipc_answer_4(callid, (sysarg_t) result, 86 86 IPC_GET_ARG1(*answer), IPC_GET_ARG2(*answer), 87 87 IPC_GET_ARG3(*answer), IPC_GET_ARG4(*answer)); … … 89 89 case 5: 90 90 default: 91 ipc_answer_5(callid, ( ipcarg_t) result,91 ipc_answer_5(callid, (sysarg_t) result, 92 92 IPC_GET_ARG1(*answer), IPC_GET_ARG2(*answer), 93 93 IPC_GET_ARG3(*answer), IPC_GET_ARG4(*answer), … … 111 111 * function. 112 112 */ 113 int bind_service(services_t need, ipcarg_t arg1, ipcarg_t arg2, ipcarg_t arg3,113 int bind_service(services_t need, sysarg_t arg1, sysarg_t arg2, sysarg_t arg3, 114 114 async_client_conn_t client_receiver) 115 115 { … … 134 134 * 135 135 */ 136 int bind_service_timeout(services_t need, ipcarg_t arg1, ipcarg_t arg2,137 ipcarg_t arg3, async_client_conn_t client_receiver, suseconds_t timeout)136 int bind_service_timeout(services_t need, sysarg_t arg1, sysarg_t arg2, 137 sysarg_t arg3, async_client_conn_t client_receiver, suseconds_t timeout) 138 138 { 139 139 int rc; … … 143 143 if (phone >= 0) { 144 144 /* Request the bidirectional connection */ 145 ipcarg_t phonehash;145 sysarg_t phonehash; 146 146 147 147 rc = ipc_connect_to_me(phone, arg1, arg2, arg3, &phonehash); … … 178 178 int phone; 179 179 180 / / if no timeout is set180 /* If no timeout is set */ 181 181 if (timeout <= 0) 182 182 return async_connect_me_to_blocking(PHONE_NS, need, 0, 0); … … 187 187 return phone; 188 188 189 / / end if no time is left189 /* Abort if no time is left */ 190 190 if (timeout <= 0) 191 191 return ETIMEOUT; 192 192 193 / / wait the minimum of the module wait time and the timeout193 /* Wait the minimum of the module wait time and the timeout */ 194 194 usleep((timeout <= MODULE_WAIT_TIME) ? 195 195 timeout : MODULE_WAIT_TIME); 196 196 timeout -= MODULE_WAIT_TIME; 197 197 } 198 }199 200 /** Receives data from the other party.201 *202 * The received data buffer is allocated and returned.203 *204 * @param[out] data The data buffer to be filled.205 * @param[out] length The buffer length.206 * @return EOK on success.207 * @return EBADMEM if the data or the length parameter is NULL.208 * @return EINVAL if the client does not send data.209 * @return ENOMEM if there is not enough memory left.210 * @return Other error codes as defined for the211 * async_data_write_finalize() function.212 */213 int data_receive(void **data, size_t *length)214 {215 ipc_callid_t callid;216 int rc;217 218 if (!data || !length)219 return EBADMEM;220 221 // fetch the request222 if (!async_data_write_receive(&callid, length))223 return EINVAL;224 225 // allocate the buffer226 *data = malloc(*length);227 if (!*data)228 return ENOMEM;229 230 // fetch the data231 rc = async_data_write_finalize(callid, *data, *length);232 if (rc != EOK) {233 free(data);234 return rc;235 }236 237 return EOK;238 198 } 239 199 … … 254 214 ipc_callid_t callid; 255 215 256 / / fetch the request216 /* Fetch the request */ 257 217 if (!async_data_read_receive(&callid, &length)) 258 218 return EINVAL; 259 219 260 / / check the requested data size220 /* Check the requested data size */ 261 221 if (length < data_length) { 262 222 async_data_read_finalize(callid, data, length); … … 264 224 } 265 225 266 / / send the data226 /* Send the data */ 267 227 return async_data_read_finalize(callid, data, data_length); 268 228 } 269 229 270 /** Refreshes answer structure and parameters count. 271 * 272 * Erases all attributes. 273 * 274 * @param[in,out] answer The message processing answer structure. 275 * @param[in,out] answer_count The number of answer parameters. 276 */ 277 void refresh_answer(ipc_call_t *answer, int *answer_count) 278 { 279 if (answer_count) 280 *answer_count = 0; 281 282 if (answer) { 230 /** Refresh answer structure and argument count. 231 * 232 * Erase all arguments. 233 * 234 * @param[in,out] answer Message processing answer structure. 235 * @param[in,out] count Number of answer arguments. 236 * 237 */ 238 void refresh_answer(ipc_call_t *answer, size_t *count) 239 { 240 if (count != NULL) 241 *count = 0; 242 243 if (answer != NULL) { 283 244 IPC_SET_RETVAL(*answer, 0); 284 // just to be precize 285 IPC_SET_METHOD(*answer, 0); 245 IPC_SET_IMETHOD(*answer, 0); 286 246 IPC_SET_ARG1(*answer, 0); 287 247 IPC_SET_ARG2(*answer, 0); -
uspace/lib/c/generic/net/packet.c
rcead2aa r357b5f5 191 191 } 192 192 gpm_destroy(&pm_globals.packet_map); 193 / / leave locked193 /* leave locked */ 194 194 } 195 195 -
uspace/lib/c/generic/net/socket_client.c
rcead2aa r357b5f5 214 214 callid = async_get_call(&call); 215 215 216 switch (IPC_GET_ METHOD(call)) {216 switch (IPC_GET_IMETHOD(call)) { 217 217 case NET_SOCKET_RECEIVED: 218 218 case NET_SOCKET_ACCEPTED: … … 220 220 fibril_rwlock_read_lock(&socket_globals.lock); 221 221 222 / / find the socket222 /* Find the socket */ 223 223 socket = sockets_find(socket_get_sockets(), 224 224 SOCKET_GET_SOCKET_ID(call)); … … 229 229 } 230 230 231 switch (IPC_GET_ METHOD(call)) {231 switch (IPC_GET_IMETHOD(call)) { 232 232 case NET_SOCKET_RECEIVED: 233 233 fibril_mutex_lock(&socket->receive_lock); 234 / / push the number of received packet fragments234 /* Push the number of received packet fragments */ 235 235 rc = dyn_fifo_push(&socket->received, 236 236 SOCKET_GET_DATA_FRAGMENTS(call), 237 237 SOCKET_MAX_RECEIVED_SIZE); 238 238 if (rc == EOK) { 239 / / signal the received packet239 /* Signal the received packet */ 240 240 fibril_condvar_signal(&socket->receive_signal); 241 241 } … … 244 244 245 245 case NET_SOCKET_ACCEPTED: 246 / / push the new socket identifier246 /* Push the new socket identifier */ 247 247 fibril_mutex_lock(&socket->accept_lock); 248 248 rc = dyn_fifo_push(&socket->accepted, 1, 249 249 SOCKET_MAX_ACCEPTED_SIZE); 250 250 if (rc == EOK) { 251 / / signal the accepted socket251 /* Signal the accepted socket */ 252 252 fibril_condvar_signal(&socket->accept_signal); 253 253 } … … 264 264 fibril_rwlock_write_lock(&socket->sending_lock); 265 265 266 / / set the data fragment size266 /* Set the data fragment size */ 267 267 socket->data_fragment_size = 268 268 SOCKET_GET_DATA_FRAGMENT_SIZE(call); … … 278 278 } 279 279 280 ipc_answer_0(callid, ( ipcarg_t) rc);280 ipc_answer_0(callid, (sysarg_t) rc); 281 281 goto loop; 282 282 } … … 342 342 socket_id = 1; 343 343 ++count; 344 / / only this branch for last_id344 /* Only this branch for last_id */ 345 345 } else { 346 346 if (socket_id < INT_MAX) { … … 404 404 int socket_id; 405 405 services_t service; 406 ipcarg_t fragment_size;407 ipcarg_t header_size;406 sysarg_t fragment_size; 407 sysarg_t header_size; 408 408 int rc; 409 409 410 / / find the appropriate service410 /* Find the appropriate service */ 411 411 switch (domain) { 412 412 case PF_INET: … … 457 457 return phone; 458 458 459 / / create a new socket structure459 /* Create a new socket structure */ 460 460 socket = (socket_t *) malloc(sizeof(socket_t)); 461 461 if (!socket) … … 465 465 fibril_rwlock_write_lock(&socket_globals.lock); 466 466 467 / / request a new socket467 /* Request a new socket */ 468 468 socket_id = socket_generate_new_id(); 469 469 if (socket_id <= 0) { … … 484 484 socket->header_size = (size_t) header_size; 485 485 486 / / finish the new socket initialization486 /* Finish the new socket initialization */ 487 487 socket_initialize(socket, socket_id, phone, service); 488 / / store the new socket488 /* Store the new socket */ 489 489 rc = sockets_add(socket_get_sockets(), socket_id, socket); 490 490 … … 494 494 dyn_fifo_destroy(&socket->accepted); 495 495 free(socket); 496 async_msg_3(phone, NET_SOCKET_CLOSE, ( ipcarg_t) socket_id, 0,496 async_msg_3(phone, NET_SOCKET_CLOSE, (sysarg_t) socket_id, 0, 497 497 service); 498 498 return rc; … … 516 516 */ 517 517 static int 518 socket_send_data(int socket_id, ipcarg_t message, ipcarg_t arg2,518 socket_send_data(int socket_id, sysarg_t message, sysarg_t arg2, 519 519 const void *data, size_t datalength) 520 520 { 521 521 socket_t *socket; 522 522 aid_t message_id; 523 ipcarg_t result;523 sysarg_t result; 524 524 525 525 if (!data) … … 531 531 fibril_rwlock_read_lock(&socket_globals.lock); 532 532 533 / / find the socket533 /* Find the socket */ 534 534 socket = sockets_find(socket_get_sockets(), socket_id); 535 535 if (!socket) { … … 538 538 } 539 539 540 / / request the message540 /* Request the message */ 541 541 message_id = async_send_3(socket->phone, message, 542 ( ipcarg_t) socket->socket_id, arg2, socket->service, NULL);543 / / send the address542 (sysarg_t) socket->socket_id, arg2, socket->service, NULL); 543 /* Send the address */ 544 544 async_data_write_start(socket->phone, data, datalength); 545 545 … … 566 566 return EINVAL; 567 567 568 / / send the address568 /* Send the address */ 569 569 return socket_send_data(socket_id, NET_SOCKET_BIND, 0, my_addr, 570 570 (size_t) addrlen); … … 591 591 fibril_rwlock_read_lock(&socket_globals.lock); 592 592 593 / / find the socket593 /* Find the socket */ 594 594 socket = sockets_find(socket_get_sockets(), socket_id); 595 595 if (!socket) { … … 598 598 } 599 599 600 / / request listen backlog change600 /* Request listen backlog change */ 601 601 result = (int) async_req_3_0(socket->phone, NET_SOCKET_LISTEN, 602 ( ipcarg_t) socket->socket_id, (ipcarg_t) backlog, socket->service);602 (sysarg_t) socket->socket_id, (sysarg_t) backlog, socket->service); 603 603 604 604 fibril_rwlock_read_unlock(&socket_globals.lock); … … 625 625 socket_t *new_socket; 626 626 aid_t message_id; 627 ipcarg_t ipc_result;627 sysarg_t ipc_result; 628 628 int result; 629 629 ipc_call_t answer; … … 634 634 fibril_rwlock_write_lock(&socket_globals.lock); 635 635 636 / / find the socket636 /* Find the socket */ 637 637 socket = sockets_find(socket_get_sockets(), socket_id); 638 638 if (!socket) { … … 643 643 fibril_mutex_lock(&socket->accept_lock); 644 644 645 / / wait for an accepted socket645 /* Wait for an accepted socket */ 646 646 ++ socket->blocked; 647 647 while (dyn_fifo_value(&socket->accepted) <= 0) { 648 648 fibril_rwlock_write_unlock(&socket_globals.lock); 649 649 fibril_condvar_wait(&socket->accept_signal, &socket->accept_lock); 650 / / drop the accept lock to avoid deadlock650 /* Drop the accept lock to avoid deadlock */ 651 651 fibril_mutex_unlock(&socket->accept_lock); 652 652 fibril_rwlock_write_lock(&socket_globals.lock); … … 655 655 -- socket->blocked; 656 656 657 / / create a new scoket657 /* Create a new socket */ 658 658 new_socket = (socket_t *) malloc(sizeof(socket_t)); 659 659 if (!new_socket) { … … 681 681 } 682 682 683 / / request accept683 /* Request accept */ 684 684 message_id = async_send_5(socket->phone, NET_SOCKET_ACCEPT, 685 ( ipcarg_t) socket->socket_id, 0, socket->service, 0,685 (sysarg_t) socket->socket_id, 0, socket->service, 0, 686 686 new_socket->socket_id, &answer); 687 687 688 / / read address688 /* Read address */ 689 689 ipc_data_read_start(socket->phone, cliaddr, *addrlen); 690 690 fibril_rwlock_write_unlock(&socket_globals.lock); … … 695 695 result = EINVAL; 696 696 697 / / dequeue the accepted socket if successful697 /* Dequeue the accepted socket if successful */ 698 698 dyn_fifo_pop(&socket->accepted); 699 / / set address length699 /* Set address length */ 700 700 *addrlen = SOCKET_GET_ADDRESS_LENGTH(answer); 701 701 new_socket->data_fragment_size = 702 702 SOCKET_GET_DATA_FRAGMENT_SIZE(answer); 703 703 } else if (result == ENOTSOCK) { 704 / / empty the queue if no accepted sockets704 /* Empty the queue if no accepted sockets */ 705 705 while (dyn_fifo_pop(&socket->accepted) > 0) 706 706 ; … … 731 731 return EDESTADDRREQ; 732 732 733 / / send the address733 /* Send the address */ 734 734 return socket_send_data(socket_id, NET_SOCKET_CONNECT, 0, serv_addr, 735 735 addrlen); … … 744 744 int accepted_id; 745 745 746 / / destroy all accepted sockets746 /* Destroy all accepted sockets */ 747 747 while ((accepted_id = dyn_fifo_pop(&socket->accepted)) >= 0) 748 748 socket_destroy(sockets_find(socket_get_sockets(), accepted_id)); … … 780 780 } 781 781 782 / / request close782 /* Request close */ 783 783 rc = (int) async_req_3_0(socket->phone, NET_SOCKET_CLOSE, 784 ( ipcarg_t) socket->socket_id, 0, socket->service);784 (sysarg_t) socket->socket_id, 0, socket->service); 785 785 if (rc != EOK) { 786 786 fibril_rwlock_write_unlock(&socket_globals.lock); 787 787 return rc; 788 788 } 789 / / free the socket structure789 /* Free the socket structure */ 790 790 socket_destroy(socket); 791 791 … … 815 815 */ 816 816 static int 817 sendto_core( ipcarg_t message, int socket_id, const void *data,817 sendto_core(sysarg_t message, int socket_id, const void *data, 818 818 size_t datalength, int flags, const struct sockaddr *toaddr, 819 819 socklen_t addrlen) … … 821 821 socket_t *socket; 822 822 aid_t message_id; 823 ipcarg_t result;823 sysarg_t result; 824 824 size_t fragments; 825 825 ipc_call_t answer; … … 833 833 fibril_rwlock_read_lock(&socket_globals.lock); 834 834 835 / / find socket835 /* Find socket */ 836 836 socket = sockets_find(socket_get_sockets(), socket_id); 837 837 if (!socket) { … … 842 842 fibril_rwlock_read_lock(&socket->sending_lock); 843 843 844 / / compute data fragment count844 /* Compute data fragment count */ 845 845 if (socket->data_fragment_size > 0) { 846 846 fragments = (datalength + socket->header_size) / … … 853 853 } 854 854 855 / / request send855 /* Request send */ 856 856 message_id = async_send_5(socket->phone, message, 857 ( ipcarg_t) socket->socket_id,857 (sysarg_t) socket->socket_id, 858 858 (fragments == 1 ? datalength : socket->data_fragment_size), 859 socket->service, ( ipcarg_t) flags, fragments, &answer);860 861 / / send the address if given859 socket->service, (sysarg_t) flags, fragments, &answer); 860 861 /* Send the address if given */ 862 862 if (!toaddr || 863 863 (async_data_write_start(socket->phone, toaddr, addrlen) == EOK)) { 864 864 if (fragments == 1) { 865 / / send all if only one fragment865 /* Send all if only one fragment */ 866 866 async_data_write_start(socket->phone, data, datalength); 867 867 } else { 868 / / send the first fragment868 /* Send the first fragment */ 869 869 async_data_write_start(socket->phone, data, 870 870 socket->data_fragment_size - socket->header_size); … … 872 872 socket->data_fragment_size - socket->header_size; 873 873 874 / / send the middle fragments874 /* Send the middle fragments */ 875 875 while (--fragments > 1) { 876 876 async_data_write_start(socket->phone, data, … … 880 880 } 881 881 882 / / send the last fragment882 /* Send the last fragment */ 883 883 async_data_write_start(socket->phone, data, 884 884 (datalength + socket->header_size) % … … 892 892 (SOCKET_GET_DATA_FRAGMENT_SIZE(answer) != 893 893 socket->data_fragment_size)) { 894 / / set the data fragment size894 /* Set the data fragment size */ 895 895 socket->data_fragment_size = 896 896 SOCKET_GET_DATA_FRAGMENT_SIZE(answer); … … 917 917 int send(int socket_id, void *data, size_t datalength, int flags) 918 918 { 919 / / without the address919 /* Without the address */ 920 920 return sendto_core(NET_SOCKET_SEND, socket_id, data, datalength, flags, 921 921 NULL, 0); … … 950 950 return EDESTADDRREQ; 951 951 952 / / with the address952 /* With the address */ 953 953 return sendto_core(NET_SOCKET_SENDTO, socket_id, data, datalength, 954 954 flags, toaddr, addrlen); … … 966 966 * read. The actual address length is set. Used only if 967 967 * fromaddr is not NULL. 968 * @return EOK on success. 968 * @return Positive received message size in bytes on success. 969 * @return Zero if no more data (other side closed the connection). 969 970 * @return ENOTSOCK if the socket is not found. 970 971 * @return EBADMEM if the data parameter is NULL. … … 972 973 * @return Other error codes as defined for the spcific message. 973 974 */ 974 static int975 recvfrom_core( ipcarg_t message, int socket_id, void *data, size_t datalength,975 static ssize_t 976 recvfrom_core(sysarg_t message, int socket_id, void *data, size_t datalength, 976 977 int flags, struct sockaddr *fromaddr, socklen_t *addrlen) 977 978 { 978 979 socket_t *socket; 979 980 aid_t message_id; 980 ipcarg_t ipc_result;981 sysarg_t ipc_result; 981 982 int result; 982 983 size_t fragments; … … 984 985 size_t index; 985 986 ipc_call_t answer; 987 ssize_t retval; 986 988 987 989 if (!data) … … 996 998 fibril_rwlock_read_lock(&socket_globals.lock); 997 999 998 / / find the socket1000 /* Find the socket */ 999 1001 socket = sockets_find(socket_get_sockets(), socket_id); 1000 1002 if (!socket) { … … 1004 1006 1005 1007 fibril_mutex_lock(&socket->receive_lock); 1006 / / wait for a received packet1008 /* Wait for a received packet */ 1007 1009 ++socket->blocked; 1008 while ((result = dyn_fifo_value(&socket->received)) < =0) {1010 while ((result = dyn_fifo_value(&socket->received)) < 0) { 1009 1011 fibril_rwlock_read_unlock(&socket_globals.lock); 1010 1012 fibril_condvar_wait(&socket->receive_signal, 1011 1013 &socket->receive_lock); 1012 1014 1013 / / drop the receive lock to avoid deadlock1015 /* Drop the receive lock to avoid deadlock */ 1014 1016 fibril_mutex_unlock(&socket->receive_lock); 1015 1017 fibril_rwlock_read_lock(&socket_globals.lock); … … 1019 1021 fragments = (size_t) result; 1020 1022 1021 // prepare lengths if more fragments 1023 if (fragments == 0) { 1024 /* No more data, other side has closed the connection. */ 1025 fibril_mutex_unlock(&socket->receive_lock); 1026 fibril_rwlock_read_unlock(&socket_globals.lock); 1027 return 0; 1028 } 1029 1030 /* Prepare lengths if more fragments */ 1022 1031 if (fragments > 1) { 1023 1032 lengths = (size_t *) malloc(sizeof(size_t) * fragments + … … 1029 1038 } 1030 1039 1031 / / request packet data1040 /* Request packet data */ 1032 1041 message_id = async_send_4(socket->phone, message, 1033 ( ipcarg_t) socket->socket_id, 0, socket->service,1034 ( ipcarg_t) flags, &answer);1035 1036 / / read the address if desired1042 (sysarg_t) socket->socket_id, 0, socket->service, 1043 (sysarg_t) flags, &answer); 1044 1045 /* Read the address if desired */ 1037 1046 if(!fromaddr || 1038 1047 (async_data_read_start(socket->phone, fromaddr, 1039 1048 *addrlen) == EOK)) { 1040 / / read the fragment lengths1049 /* Read the fragment lengths */ 1041 1050 if (async_data_read_start(socket->phone, lengths, 1042 1051 sizeof(int) * (fragments + 1)) == EOK) { 1043 1052 if (lengths[fragments] <= datalength) { 1044 1053 1045 / / read all fragments if long enough1054 /* Read all fragments if long enough */ 1046 1055 for (index = 0; index < fragments; 1047 1056 ++index) { … … 1057 1066 1058 1067 free(lengths); 1059 } else { 1060 / / request packet data1068 } else { /* fragments == 1 */ 1069 /* Request packet data */ 1061 1070 message_id = async_send_4(socket->phone, message, 1062 ( ipcarg_t) socket->socket_id, 0, socket->service,1063 ( ipcarg_t) flags, &answer);1064 1065 / / read the address if desired1071 (sysarg_t) socket->socket_id, 0, socket->service, 1072 (sysarg_t) flags, &answer); 1073 1074 /* Read the address if desired */ 1066 1075 if (!fromaddr || 1067 1076 (async_data_read_start(socket->phone, fromaddr, 1068 1077 *addrlen) == EOK)) { 1069 / / read all if only one fragment1078 /* Read all if only one fragment */ 1070 1079 async_data_read_start(socket->phone, data, datalength); 1071 1080 } … … 1075 1084 result = (int) ipc_result; 1076 1085 if (result == EOK) { 1077 / / dequeue the received packet1086 /* Dequeue the received packet */ 1078 1087 dyn_fifo_pop(&socket->received); 1079 / / return read data length1080 re sult= SOCKET_GET_READ_DATA_LENGTH(answer);1081 / / set address length1088 /* Return read data length */ 1089 retval = SOCKET_GET_READ_DATA_LENGTH(answer); 1090 /* Set address length */ 1082 1091 if (fromaddr && addrlen) 1083 1092 *addrlen = SOCKET_GET_ADDRESS_LENGTH(answer); 1093 } else { 1094 retval = (ssize_t) result; 1084 1095 } 1085 1096 1086 1097 fibril_mutex_unlock(&socket->receive_lock); 1087 1098 fibril_rwlock_read_unlock(&socket_globals.lock); 1088 return re sult;1099 return retval; 1089 1100 } 1090 1101 … … 1095 1106 * @param[in] datalength The data length. 1096 1107 * @param[in] flags Various receive flags. 1097 * @return EOK on success. 1108 * @return Positive received message size in bytes on success. 1109 * @return Zero if no more data (other side closed the connection). 1098 1110 * @return ENOTSOCK if the socket is not found. 1099 1111 * @return EBADMEM if the data parameter is NULL. … … 1102 1114 * message. 1103 1115 */ 1104 int recv(int socket_id, void *data, size_t datalength, int flags)1105 { 1106 / / without the address1116 ssize_t recv(int socket_id, void *data, size_t datalength, int flags) 1117 { 1118 /* Without the address */ 1107 1119 return recvfrom_core(NET_SOCKET_RECV, socket_id, data, datalength, 1108 1120 flags, NULL, NULL); … … 1118 1130 * @param[in,out] addrlen The address length. The maximum address length is 1119 1131 * read. The actual address length is set. 1120 * @return EOK on success. 1132 * @return Positive received message size in bytes on success. 1133 * @return Zero if no more data (other side closed the connection). 1121 1134 * @return ENOTSOCK if the socket is not found. 1122 1135 * @return EBADMEM if the data or fromaddr parameter is NULL. … … 1125 1138 * message. 1126 1139 */ 1127 int1140 ssize_t 1128 1141 recvfrom(int socket_id, void *data, size_t datalength, int flags, 1129 1142 struct sockaddr *fromaddr, socklen_t *addrlen) … … 1135 1148 return NO_DATA; 1136 1149 1137 / / with the address1150 /* With the address */ 1138 1151 return recvfrom_core(NET_SOCKET_RECVFROM, socket_id, data, datalength, 1139 1152 flags, fromaddr, addrlen); … … 1160 1173 socket_t *socket; 1161 1174 aid_t message_id; 1162 ipcarg_t result;1175 sysarg_t result; 1163 1176 1164 1177 if (!value || !optlen) … … 1170 1183 fibril_rwlock_read_lock(&socket_globals.lock); 1171 1184 1172 / / find the socket1185 /* Find the socket */ 1173 1186 socket = sockets_find(socket_get_sockets(), socket_id); 1174 1187 if (!socket) { … … 1177 1190 } 1178 1191 1179 / / request option value1192 /* Request option value */ 1180 1193 message_id = async_send_3(socket->phone, NET_SOCKET_GETSOCKOPT, 1181 ( ipcarg_t) socket->socket_id, (ipcarg_t) optname, socket->service,1194 (sysarg_t) socket->socket_id, (sysarg_t) optname, socket->service, 1182 1195 NULL); 1183 1196 1184 / / read the length1197 /* Read the length */ 1185 1198 if (async_data_read_start(socket->phone, optlen, 1186 1199 sizeof(*optlen)) == EOK) { 1187 / / read the value1200 /* Read the value */ 1188 1201 async_data_read_start(socket->phone, value, *optlen); 1189 1202 } … … 1212 1225 size_t optlen) 1213 1226 { 1214 / / send the value1227 /* Send the value */ 1215 1228 return socket_send_data(socket_id, NET_SOCKET_SETSOCKOPT, 1216 ( ipcarg_t) optname, value, optlen);1229 (sysarg_t) optname, value, optlen); 1217 1230 } 1218 1231 -
uspace/lib/c/generic/task.c
rcead2aa r357b5f5 47 47 task_id_t task_get_id(void) 48 48 { 49 #ifdef __32_BITS__ 49 50 task_id_t task_id; 50 51 (void) __SYSCALL1(SYS_TASK_GET_ID, (sysarg_t) &task_id); 51 52 52 53 return task_id; 54 #endif /* __32_BITS__ */ 55 56 #ifdef __64_BITS__ 57 return (task_id_t) __SYSCALL0(SYS_TASK_GET_ID); 58 #endif /* __64_BITS__ */ 53 59 } 54 60 … … 59 65 * 60 66 * @return Zero on success or negative error code. 61 *62 67 */ 63 68 int task_set_name(const char *name) 64 69 { 65 70 return __SYSCALL2(SYS_TASK_SET_NAME, (sysarg_t) name, str_size(name)); 71 } 72 73 /** Kill a task. 74 * 75 * @param task_id ID of task to kill. 76 * 77 * @return Zero on success or negative error code. 78 */ 79 80 int task_kill(task_id_t task_id) 81 { 82 return (int) __SYSCALL1(SYS_TASK_KILL, (sysarg_t) &task_id); 66 83 } 67 84 … … 211 228 int task_wait(task_id_t id, task_exit_t *texit, int *retval) 212 229 { 213 ipcarg_t te, rv;230 sysarg_t te, rv; 214 231 int rc; 215 232 -
uspace/lib/c/generic/udebug.c
rcead2aa r357b5f5 57 57 size_t *copied, size_t *needed) 58 58 { 59 ipcarg_t a_copied, a_needed;59 sysarg_t a_copied, a_needed; 60 60 int rc; 61 61 … … 72 72 size_t *copied, size_t *needed) 73 73 { 74 ipcarg_t a_copied, a_needed;74 sysarg_t a_copied, a_needed; 75 75 int rc; 76 76 … … 87 87 size_t *copied, size_t *needed) 88 88 { 89 ipcarg_t a_copied, a_needed;89 sysarg_t a_copied, a_needed; 90 90 int rc; 91 91 … … 120 120 sysarg_t *val0, sysarg_t *val1) 121 121 { 122 ipcarg_t a_ev_type;122 sysarg_t a_ev_type; 123 123 int rc; 124 124 -
uspace/lib/c/generic/vfs/vfs.c
rcead2aa r357b5f5 158 158 vfs_connect(); 159 159 160 ipcarg_t rc_orig;160 sysarg_t rc_orig; 161 161 aid_t req = async_send_2(vfs_phone, VFS_IN_MOUNT, devmap_handle, flags, NULL); 162 ipcarg_t rc = async_data_write_start(vfs_phone, (void *) mpa, mpa_size);162 sysarg_t rc = async_data_write_start(vfs_phone, (void *) mpa, mpa_size); 163 163 if (rc != EOK) { 164 164 async_wait_for(req, &rc_orig); … … 238 238 int unmount(const char *mp) 239 239 { 240 ipcarg_t rc;241 ipcarg_t rc_orig;240 sysarg_t rc; 241 sysarg_t rc_orig; 242 242 aid_t req; 243 243 size_t mpa_size; … … 282 282 ipc_call_t answer; 283 283 aid_t req = async_send_3(vfs_phone, VFS_IN_OPEN, lflag, oflag, 0, &answer); 284 ipcarg_t rc = async_data_write_start(vfs_phone, abs, abs_size);285 286 if (rc != EOK) { 287 ipcarg_t rc_orig;284 sysarg_t rc = async_data_write_start(vfs_phone, abs, abs_size); 285 286 if (rc != EOK) { 287 sysarg_t rc_orig; 288 288 async_wait_for(req, &rc_orig); 289 289 … … 330 330 node->devmap_handle, node->index, oflag, &answer); 331 331 332 ipcarg_t rc;332 sysarg_t rc; 333 333 async_wait_for(req, &rc); 334 334 async_serialize_end(); … … 343 343 int close(int fildes) 344 344 { 345 ipcarg_t rc;345 sysarg_t rc; 346 346 347 347 futex_down(&vfs_phone_futex); … … 359 359 ssize_t read(int fildes, void *buf, size_t nbyte) 360 360 { 361 ipcarg_t rc;361 sysarg_t rc; 362 362 ipc_call_t answer; 363 363 aid_t req; … … 370 370 rc = async_data_read_start(vfs_phone, (void *)buf, nbyte); 371 371 if (rc != EOK) { 372 ipcarg_t rc_orig;372 sysarg_t rc_orig; 373 373 374 374 async_wait_for(req, &rc_orig); … … 391 391 ssize_t write(int fildes, const void *buf, size_t nbyte) 392 392 { 393 ipcarg_t rc;393 sysarg_t rc; 394 394 ipc_call_t answer; 395 395 aid_t req; … … 402 402 rc = async_data_write_start(vfs_phone, (void *)buf, nbyte); 403 403 if (rc != EOK) { 404 ipcarg_t rc_orig;404 sysarg_t rc_orig; 405 405 406 406 async_wait_for(req, &rc_orig); … … 427 427 vfs_connect(); 428 428 429 ipcarg_t rc = async_req_1_0(vfs_phone, VFS_IN_SYNC, fildes);429 sysarg_t rc = async_req_1_0(vfs_phone, VFS_IN_SYNC, fildes); 430 430 431 431 async_serialize_end(); … … 441 441 vfs_connect(); 442 442 443 ipcarg_t newoff_lo;444 ipcarg_t newoff_hi;445 ipcarg_t rc = async_req_4_2(vfs_phone, VFS_IN_SEEK, fildes,443 sysarg_t newoff_lo; 444 sysarg_t newoff_hi; 445 sysarg_t rc = async_req_4_2(vfs_phone, VFS_IN_SEEK, fildes, 446 446 LOWER32(offset), UPPER32(offset), whence, 447 447 &newoff_lo, &newoff_hi); … … 458 458 int ftruncate(int fildes, aoff64_t length) 459 459 { 460 ipcarg_t rc;460 sysarg_t rc; 461 461 462 462 futex_down(&vfs_phone_futex); … … 474 474 int fstat(int fildes, struct stat *stat) 475 475 { 476 ipcarg_t rc;476 sysarg_t rc; 477 477 aid_t req; 478 478 … … 484 484 rc = async_data_read_start(vfs_phone, (void *) stat, sizeof(struct stat)); 485 485 if (rc != EOK) { 486 ipcarg_t rc_orig;486 sysarg_t rc_orig; 487 487 488 488 async_wait_for(req, &rc_orig); … … 503 503 int stat(const char *path, struct stat *stat) 504 504 { 505 ipcarg_t rc;506 ipcarg_t rc_orig;505 sysarg_t rc; 506 sysarg_t rc_orig; 507 507 aid_t req; 508 508 … … 593 593 int mkdir(const char *path, mode_t mode) 594 594 { 595 ipcarg_t rc;595 sysarg_t rc; 596 596 aid_t req; 597 597 … … 608 608 rc = async_data_write_start(vfs_phone, pa, pa_size); 609 609 if (rc != EOK) { 610 ipcarg_t rc_orig;610 sysarg_t rc_orig; 611 611 612 612 async_wait_for(req, &rc_orig); … … 628 628 static int _unlink(const char *path, int lflag) 629 629 { 630 ipcarg_t rc;630 sysarg_t rc; 631 631 aid_t req; 632 632 … … 643 643 rc = async_data_write_start(vfs_phone, pa, pa_size); 644 644 if (rc != EOK) { 645 ipcarg_t rc_orig;645 sysarg_t rc_orig; 646 646 647 647 async_wait_for(req, &rc_orig); … … 673 673 int rename(const char *old, const char *new) 674 674 { 675 ipcarg_t rc;676 ipcarg_t rc_orig;675 sysarg_t rc; 676 sysarg_t rc_orig; 677 677 aid_t req; 678 678 … … 810 810 vfs_connect(); 811 811 812 ipcarg_t ret;813 ipcarg_t rc = async_req_2_1(vfs_phone, VFS_IN_DUP, oldfd, newfd, &ret);812 sysarg_t ret; 813 sysarg_t rc = async_req_2_1(vfs_phone, VFS_IN_DUP, oldfd, newfd, &ret); 814 814 815 815 async_serialize_end(); -
uspace/lib/c/include/adt/char_map.h
rcead2aa r357b5f5 41 41 42 42 /** Invalid assigned value used also if an entry does not exist. */ 43 #define CHAR_MAP_NULL 43 #define CHAR_MAP_NULL (-1) 44 44 45 45 /** Type definition of the character string to integer map. 46 46 * @see char_map 47 47 */ 48 typedef struct char_map 48 typedef struct char_map char_map_t; 49 49 50 50 /** Character string to integer map item. … … 56 56 struct char_map { 57 57 /** Actually mapped character. */ 58 charc;58 uint8_t c; 59 59 /** Stored integral value. */ 60 60 int value; … … 71 71 extern int char_map_initialize(char_map_t *); 72 72 extern void char_map_destroy(char_map_t *); 73 extern int char_map_exclude(char_map_t *, const char*, size_t);74 extern int char_map_add(char_map_t *, const char*, size_t, const int);75 extern int char_map_find(const char_map_t *, const char*, size_t);76 extern int char_map_update(char_map_t *, const char*, size_t, const int);73 extern int char_map_exclude(char_map_t *, const uint8_t *, size_t); 74 extern int char_map_add(char_map_t *, const uint8_t *, size_t, const int); 75 extern int char_map_find(const char_map_t *, const uint8_t *, size_t); 76 extern int char_map_update(char_map_t *, const uint8_t *, size_t, const int); 77 77 78 78 #endif -
uspace/lib/c/include/adt/generic_char_map.h
rcead2aa r357b5f5 62 62 }; \ 63 63 \ 64 int name##_add(name##_t *, const char*, const size_t, type *); \64 int name##_add(name##_t *, const uint8_t *, const size_t, type *); \ 65 65 int name##_count(name##_t *); \ 66 66 void name##_destroy(name##_t *); \ 67 void name##_exclude(name##_t *, const char*, const size_t); \68 type *name##_find(name##_t *, const char*, const size_t); \67 void name##_exclude(name##_t *, const uint8_t *, const size_t); \ 68 type *name##_find(name##_t *, const uint8_t *, const size_t); \ 69 69 int name##_initialize(name##_t *); \ 70 70 int name##_is_valid(name##_t *); … … 74 74 * Should follow declaration with the same parameters. 75 75 * 76 * @param[in] name Name of the map. 77 * @param[in] type Inner object type. 76 * @param[in] name Name of the map. 77 * @param[in] type Inner object type. 78 * 78 79 */ 79 80 #define GENERIC_CHAR_MAP_IMPLEMENT(name, type) \ 80 81 GENERIC_FIELD_IMPLEMENT(name##_items, type) \ 81 82 \ 82 int name##_add(name##_t *map, const char*name, const size_t length, \83 int name##_add(name##_t *map, const uint8_t *name, const size_t length, \ 83 84 type *value) \ 84 85 { \ … … 112 113 } \ 113 114 \ 114 void name##_exclude(name##_t *map, const char*name, \115 void name##_exclude(name##_t *map, const uint8_t *name, \ 115 116 const size_t length) \ 116 117 { \ … … 124 125 } \ 125 126 \ 126 type *name##_find(name##_t *map, const char*name, \127 type *name##_find(name##_t *map, const uint8_t *name, \ 127 128 const size_t length) \ 128 129 { \ -
uspace/lib/c/include/adt/generic_field.h
rcead2aa r357b5f5 91 91 } \ 92 92 field->items[field->next] = value; \ 93 ++field->next; \93 field->next++; \ 94 94 field->items[field->next] = NULL; \ 95 95 return field->next - 1; \ … … 108 108 int index; \ 109 109 field->magic = 0; \ 110 for (index = 0; index < field->next; ++ index) { \110 for (index = 0; index < field->next; index++) { \ 111 111 if (field->items[index]) \ 112 112 free(field->items[index]); \ -
uspace/lib/c/include/adt/hash_table.h
rcead2aa r357b5f5 41 41 typedef unsigned long hash_count_t; 42 42 typedef unsigned long hash_index_t; 43 typedef struct hash_table hash_table_t; 44 typedef struct hash_table_operations hash_table_operations_t; 43 44 /** Set of operations for hash table. */ 45 typedef struct { 46 /** Hash function. 47 * 48 * @param key Array of keys needed to compute hash index. 49 * All keys must be passed. 50 * 51 * @return Index into hash table. 52 * 53 */ 54 hash_index_t (*hash)(unsigned long key[]); 55 56 /** Hash table item comparison function. 57 * 58 * @param key Array of keys that will be compared with item. It is 59 * not necessary to pass all keys. 60 * 61 * @return True if the keys match, false otherwise. 62 * 63 */ 64 int (*compare)(unsigned long key[], hash_count_t keys, link_t *item); 65 66 /** Hash table item removal callback. 67 * 68 * @param item Item that was removed from the hash table. 69 * 70 */ 71 void (*remove_callback)(link_t *item); 72 } hash_table_operations_t; 45 73 46 74 /** Hash table structure. */ 47 struct hash_table{75 typedef struct { 48 76 link_t *entry; 49 77 hash_count_t entries; 50 78 hash_count_t max_keys; 51 79 hash_table_operations_t *op; 52 }; 53 54 /** Set of operations for hash table. */ 55 struct hash_table_operations { 56 /** Hash function. 57 * 58 * @param key Array of keys needed to compute hash index. All keys 59 * must be passed. 60 * 61 * @return Index into hash table. 62 */ 63 hash_index_t (* hash)(unsigned long key[]); 64 65 /** Hash table item comparison function. 66 * 67 * @param key Array of keys that will be compared with item. It is 68 * not necessary to pass all keys. 69 * 70 * @return true if the keys match, false otherwise. 71 */ 72 int (*compare)(unsigned long key[], hash_count_t keys, link_t *item); 73 74 /** Hash table item removal callback. 75 * 76 * @param item Item that was removed from the hash table. 77 */ 78 void (*remove_callback)(link_t *item); 79 }; 80 } hash_table_t; 80 81 81 82 #define hash_table_get_instance(item, type, member) \ -
uspace/lib/c/include/adt/measured_strings.h
rcead2aa r357b5f5 54 54 struct measured_string { 55 55 /** Character string data. */ 56 char*value;56 uint8_t *value; 57 57 /** Character string length. */ 58 58 size_t length; 59 59 }; 60 60 61 extern measured_string_t *measured_string_create_bulk(const char*, size_t);61 extern measured_string_t *measured_string_create_bulk(const uint8_t *, size_t); 62 62 extern measured_string_t *measured_string_copy(measured_string_t *); 63 extern int measured_strings_receive(measured_string_t **, char**, size_t);63 extern int measured_strings_receive(measured_string_t **, uint8_t **, size_t); 64 64 extern int measured_strings_reply(const measured_string_t *, size_t); 65 extern int measured_strings_return(int, measured_string_t **, char**, size_t);65 extern int measured_strings_return(int, measured_string_t **, uint8_t **, size_t); 66 66 extern int measured_strings_send(int, const measured_string_t *, size_t); 67 67 -
uspace/lib/c/include/async.h
rcead2aa r357b5f5 37 37 38 38 #include <ipc/ipc.h> 39 #include <async_sess.h> 39 40 #include <fibril.h> 40 41 #include <sys/time.h> … … 84 85 (arg5), (dataptr)) 85 86 86 extern aid_t async_send_fast(int phoneid, ipcarg_t method, ipcarg_t arg1,87 ipcarg_t arg2, ipcarg_t arg3, ipcarg_t arg4, ipc_call_t *dataptr);88 extern aid_t async_send_slow(int phoneid, ipcarg_t method, ipcarg_t arg1,89 ipcarg_t arg2, ipcarg_t arg3, ipcarg_t arg4, ipcarg_t arg5,87 extern aid_t async_send_fast(int phoneid, sysarg_t method, sysarg_t arg1, 88 sysarg_t arg2, sysarg_t arg3, sysarg_t arg4, ipc_call_t *dataptr); 89 extern aid_t async_send_slow(int phoneid, sysarg_t method, sysarg_t arg1, 90 sysarg_t arg2, sysarg_t arg3, sysarg_t arg4, sysarg_t arg5, 90 91 ipc_call_t *dataptr); 91 extern void async_wait_for(aid_t amsgid, ipcarg_t *result);92 extern int async_wait_timeout(aid_t amsgid, ipcarg_t *retval,92 extern void async_wait_for(aid_t amsgid, sysarg_t *result); 93 extern int async_wait_timeout(aid_t amsgid, sysarg_t *retval, 93 94 suseconds_t timeout); 94 95 95 extern fid_t async_new_connection( ipcarg_t in_phone_hash, ipc_callid_t callid,96 extern fid_t async_new_connection(sysarg_t in_phone_hash, ipc_callid_t callid, 96 97 ipc_call_t *call, void (*cthread)(ipc_callid_t, ipc_call_t *)); 97 98 extern void async_usleep(suseconds_t timeout); … … 242 243 (arg5), (rc1), (rc2), (rc3), (rc4), (rc5)) 243 244 244 extern ipcarg_t async_req_fast(int phoneid, ipcarg_t method, ipcarg_t arg1,245 ipcarg_t arg2, ipcarg_t arg3, ipcarg_t arg4, ipcarg_t *r1, ipcarg_t *r2,246 ipcarg_t *r3, ipcarg_t *r4, ipcarg_t *r5);247 extern ipcarg_t async_req_slow(int phoneid, ipcarg_t method, ipcarg_t arg1,248 ipcarg_t arg2, ipcarg_t arg3, ipcarg_t arg4, ipcarg_t arg5, ipcarg_t *r1,249 ipcarg_t *r2, ipcarg_t *r3, ipcarg_t *r4, ipcarg_t *r5);245 extern sysarg_t async_req_fast(int phoneid, sysarg_t method, sysarg_t arg1, 246 sysarg_t arg2, sysarg_t arg3, sysarg_t arg4, sysarg_t *r1, sysarg_t *r2, 247 sysarg_t *r3, sysarg_t *r4, sysarg_t *r5); 248 extern sysarg_t async_req_slow(int phoneid, sysarg_t method, sysarg_t arg1, 249 sysarg_t arg2, sysarg_t arg3, sysarg_t arg4, sysarg_t arg5, sysarg_t *r1, 250 sysarg_t *r2, sysarg_t *r3, sysarg_t *r4, sysarg_t *r5); 250 251 251 252 static inline void async_serialize_start(void) … … 259 260 } 260 261 261 extern int async_connect_me_to(int, ipcarg_t, ipcarg_t, ipcarg_t);262 extern int async_connect_me_to_blocking(int, ipcarg_t, ipcarg_t, ipcarg_t);262 extern int async_connect_me_to(int, sysarg_t, sysarg_t, sysarg_t); 263 extern int async_connect_me_to_blocking(int, sysarg_t, sysarg_t, sysarg_t); 263 264 264 265 /* … … 274 275 async_share_in_start((phoneid), (dst), (size), (arg), (flags)) 275 276 276 extern int async_share_in_start(int, void *, size_t, ipcarg_t, int *);277 extern int async_share_in_start(int, void *, size_t, sysarg_t, int *); 277 278 extern int async_share_in_receive(ipc_callid_t *, size_t *); 278 279 extern int async_share_in_finalize(ipc_callid_t, void *, int ); … … 314 315 extern int async_data_read_finalize(ipc_callid_t, const void *, size_t); 315 316 316 extern int async_data_read_forward_fast(int, ipcarg_t, ipcarg_t, ipcarg_t,317 ipcarg_t, ipcarg_t, ipc_call_t *);317 extern int async_data_read_forward_fast(int, sysarg_t, sysarg_t, sysarg_t, 318 sysarg_t, sysarg_t, ipc_call_t *); 318 319 319 320 /* … … 356 357 extern void async_data_write_void(const int); 357 358 358 extern int async_data_write_forward_fast(int, ipcarg_t, ipcarg_t, ipcarg_t,359 ipcarg_t, ipcarg_t, ipc_call_t *);359 extern int async_data_write_forward_fast(int, sysarg_t, sysarg_t, sysarg_t, 360 sysarg_t, sysarg_t, ipc_call_t *); 360 361 361 362 #endif -
uspace/lib/c/include/async_sess.h
rcead2aa r357b5f5 1 1 /* 2 * Copyright (c) 20 06Jakub Jermar2 * Copyright (c) 2010 Jakub Jermar 3 3 * All rights reserved. 4 4 * … … 27 27 */ 28 28 29 /** @addtogroup generic29 /** @addtogroup libc 30 30 * @{ 31 31 */ 32 33 /** 34 * @file 35 * @brief Wrapper for explicit 64-bit arguments passed to syscalls. 32 /** @file 36 33 */ 37 34 38 #ifndef KERN_SYSARG64_H_ 39 #define KERN_SYSARG64_H_ 35 #ifndef LIBC_ASYNC_SESS_H_ 36 #define LIBC_ASYNC_SESS_H_ 37 38 #include <adt/list.h> 40 39 41 40 typedef struct { 42 unsigned long long value; 43 } sysarg64_t; 41 int sess_phone; /**< Phone for cloning off the connections. */ 42 sysarg_t connect_arg1; /**< Argument for CONNECT_ME_TO. */ 43 link_t conn_head; /**< List of open data connections. */ 44 link_t sess_link; /**< Link in global list of open sessions. */ 45 } async_sess_t; 46 47 extern void _async_sess_init(void); 48 extern void async_session_create(async_sess_t *, int, sysarg_t); 49 extern void async_session_destroy(async_sess_t *); 50 extern int async_exchange_begin(async_sess_t *); 51 extern void async_exchange_end(async_sess_t *, int); 44 52 45 53 #endif -
uspace/lib/c/include/ddi.h
rcead2aa r357b5f5 42 42 extern int iospace_enable(task_id_t, void *, unsigned long); 43 43 extern int pio_enable(void *, size_t, void **); 44 extern int interrupt_enable(int);45 extern int interrupt_disable(int);46 44 47 45 #endif -
uspace/lib/c/include/device/char_dev.h
rcead2aa r357b5f5 27 27 */ 28 28 29 29 /** @addtogroup libc 30 30 * @{ 31 31 */ … … 33 33 */ 34 34 35 #ifndef LIBC_DEVICE_ HW_RES_H_36 #define LIBC_DEVICE_ HW_RES_H_35 #ifndef LIBC_DEVICE_CHAR_DEV_H_ 36 #define LIBC_DEVICE_CHAR_DEV_H_ 37 37 38 38 typedef enum { 39 CHAR_ READ_DEV= 0,40 CHAR_ WRITE_DEV41 } hw_res_funcs_t;39 CHAR_DEV_READ = 0, 40 CHAR_DEV_WRITE 41 } char_dev_method_t; 42 42 43 ssize_t read_dev(int dev_phone, void *buf, size_t len);44 ssize_t write_dev(int dev_phone, void *buf, size_t len);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 45 46 46 #endif -
uspace/lib/c/include/device/hw_res.h
rcead2aa r357b5f5 27 27 */ 28 28 29 29 /** @addtogroup libc 30 30 * @{ 31 31 */ … … 39 39 #include <bool.h> 40 40 41 // HW resource provider interface 41 /** HW resource provider interface */ 42 typedef enum { 43 HW_RES_GET_RESOURCE_LIST = 0, 44 HW_RES_ENABLE_INTERRUPT 45 } hw_res_method_t; 42 46 43 typedef enum { 44 GET_RESOURCE_LIST = 0, 45 ENABLE_INTERRUPT 46 } hw_res_funcs_t; 47 48 /** HW resource types. */ 47 /** HW resource types */ 49 48 typedef enum { 50 49 INTERRUPT, … … 58 57 } endianness_t; 59 58 60 61 /** HW resource (e.g. interrupt, memory register, i/o register etc.). */ 62 typedef struct hw_resource { 59 /** HW resource (e.g. interrupt, memory register, i/o register etc.) */ 60 typedef struct { 63 61 hw_res_type_t type; 64 62 union { 65 63 struct { 66 64 uint64_t address; 67 endianness_t endianness; 68 size_t size; 65 endianness_t endianness; 66 size_t size; 69 67 } mem_range; 68 70 69 struct { 71 70 uint64_t address; 72 endianness_t endianness; 73 size_t size; 71 endianness_t endianness; 72 size_t size; 74 73 } io_range; 74 75 75 struct { 76 int irq; 77 } interrupt; 78 } res; 76 int irq; 77 } interrupt; 78 } res; 79 79 } hw_resource_t; 80 80 81 typedef struct hw_resource_list{81 typedef struct { 82 82 size_t count; 83 hw_resource_t *resources; 83 hw_resource_t *resources; 84 84 } hw_resource_list_t; 85 85 86 static inline void clean_hw_resource_list(hw_resource_list_t *hw_res)86 static inline void hw_res_clean_resource_list(hw_resource_list_t *hw_res) 87 87 { 88 if (NULL != hw_res->resources) {88 if (hw_res->resources != NULL) { 89 89 free(hw_res->resources); 90 90 91 hw_res->resources = NULL; 91 92 } 92 hw_res->count = 0; 93 94 hw_res->count = 0; 93 95 } 94 96 95 96 97 bool get_hw_resources(int dev_phone, hw_resource_list_t *hw_resources); 98 99 bool enable_interrupt(int dev_phone); 100 97 extern int hw_res_get_resource_list(int, hw_resource_list_t *); 98 extern bool hw_res_enable_interrupt(int); 101 99 102 100 #endif -
uspace/lib/c/include/devmap.h
rcead2aa r357b5f5 45 45 extern int devmap_driver_register(const char *, async_client_conn_t); 46 46 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); 47 48 48 49 extern int devmap_device_get_handle(const char *, devmap_handle_t *, unsigned int); -
uspace/lib/c/include/errno.h
rcead2aa r357b5f5 83 83 #define ENOTCONN (-10057) 84 84 85 /** The requested operation was not performed. 86 * Try again later. 87 */ 88 #define TRY_AGAIN (-11002) 85 /** The requested operation was not performed. Try again later. */ 86 #define EAGAIN (-11002) 89 87 90 88 /** No data. -
uspace/lib/c/include/event.h
rcead2aa r357b5f5 39 39 #include <ipc/ipc.h> 40 40 41 extern int event_subscribe(event_type_t, ipcarg_t);41 extern int event_subscribe(event_type_t, sysarg_t); 42 42 43 43 #endif -
uspace/lib/c/include/fibril.h
rcead2aa r357b5f5 94 94 extern void fibril_inc_sercount(void); 95 95 extern void fibril_dec_sercount(void); 96 extern int fibril_get_sercount(void); 96 97 97 98 static inline int fibril_yield(void) -
uspace/lib/c/include/fibril_synch.h
rcead2aa r357b5f5 105 105 extern bool fibril_mutex_trylock(fibril_mutex_t *); 106 106 extern void fibril_mutex_unlock(fibril_mutex_t *); 107 extern bool fibril_mutex_is_locked(fibril_mutex_t *); 107 108 108 109 extern void fibril_rwlock_initialize(fibril_rwlock_t *); … … 111 112 extern void fibril_rwlock_read_unlock(fibril_rwlock_t *); 112 113 extern void fibril_rwlock_write_unlock(fibril_rwlock_t *); 114 extern bool fibril_rwlock_is_read_locked(fibril_rwlock_t *); 115 extern bool fibril_rwlock_is_write_locked(fibril_rwlock_t *); 116 extern bool fibril_rwlock_is_locked(fibril_rwlock_t *); 113 117 114 118 extern void fibril_condvar_initialize(fibril_condvar_t *); -
uspace/lib/c/include/io/console.h
rcead2aa r357b5f5 68 68 extern void console_clear(int phone); 69 69 70 extern int console_get_size(int phone, ipcarg_t *cols, ipcarg_t *rows);71 extern int console_get_pos(int phone, ipcarg_t *col, ipcarg_t *row);72 extern void console_set_pos(int phone, ipcarg_t col, ipcarg_t row);70 extern int console_get_size(int phone, sysarg_t *cols, sysarg_t *rows); 71 extern int console_get_pos(int phone, sysarg_t *col, sysarg_t *row); 72 extern void console_set_pos(int phone, sysarg_t col, sysarg_t row); 73 73 74 74 extern void console_set_style(int phone, uint8_t style); … … 78 78 79 79 extern void console_cursor_visibility(int phone, bool show); 80 extern int console_get_color_cap(int phone, ipcarg_t *ccap);80 extern int console_get_color_cap(int phone, sysarg_t *ccap); 81 81 extern void console_kcon_enable(int phone); 82 82 -
uspace/lib/c/include/io/screenbuffer.h
rcead2aa r357b5f5 84 84 keyfield_t *buffer; /**< Screen content - characters and 85 85 their attributes (used as a circular buffer) */ 86 ipcarg_t size_x; /**< Number of columns */87 ipcarg_t size_y; /**< Number of rows */86 sysarg_t size_x; /**< Number of columns */ 87 sysarg_t size_y; /**< Number of rows */ 88 88 89 89 /** Coordinates of last printed character for determining cursor position */ 90 ipcarg_t position_x;91 ipcarg_t position_y;90 sysarg_t position_x; 91 sysarg_t position_y; 92 92 93 93 attrs_t attrs; /**< Current attributes. */ … … 109 109 * 110 110 */ 111 static inline keyfield_t *get_field_at(screenbuffer_t *scr, ipcarg_t x, ipcarg_t y)111 static inline keyfield_t *get_field_at(screenbuffer_t *scr, sysarg_t x, sysarg_t y) 112 112 { 113 113 return scr->buffer + x + ((y + scr->top_line) % scr->size_y) * scr->size_x; … … 143 143 144 144 extern void screenbuffer_putchar(screenbuffer_t *, wchar_t); 145 extern screenbuffer_t *screenbuffer_init(screenbuffer_t *, ipcarg_t, ipcarg_t);145 extern screenbuffer_t *screenbuffer_init(screenbuffer_t *, sysarg_t, sysarg_t); 146 146 147 147 extern void screenbuffer_clear(screenbuffer_t *); 148 extern void screenbuffer_clear_line(screenbuffer_t *, ipcarg_t);148 extern void screenbuffer_clear_line(screenbuffer_t *, sysarg_t); 149 149 extern void screenbuffer_copy_buffer(screenbuffer_t *, keyfield_t *); 150 extern void screenbuffer_goto(screenbuffer_t *, ipcarg_t, ipcarg_t);150 extern void screenbuffer_goto(screenbuffer_t *, sysarg_t, sysarg_t); 151 151 extern void screenbuffer_set_style(screenbuffer_t *, uint8_t); 152 152 extern void screenbuffer_set_color(screenbuffer_t *, uint8_t, uint8_t, uint8_t); -
uspace/lib/c/include/ipc/arp.h
rcead2aa r357b5f5 69 69 /*@{*/ 70 70 71 /** Returns the protocol service message parameter. 72 * @param[in] call The message call structure. 71 /** Return the protocol service message parameter. 72 * 73 * @param[in] call Message call structure. 74 * 73 75 */ 74 #define ARP_GET_NETIF(call) \ 75 ({ \ 76 services_t service = (services_t) IPC_GET_ARG2(*call); \ 77 service; \ 78 }) 76 #define ARP_GET_NETIF(call) ((services_t) IPC_GET_ARG2(call)) 79 77 80 78 /*@}*/ -
uspace/lib/c/include/ipc/dev_iface.h
rcead2aa r357b5f5 35 35 #include <libarch/types.h> 36 36 37 typedef enum { 38 HW_RES_DEV_IFACE = 0, 37 typedef enum { 38 HW_RES_DEV_IFACE = 0, 39 39 CHAR_DEV_IFACE, 40 // TODO add more interfaces41 40 DEV_IFACE_MAX 42 41 } dev_inferface_idx_t; -
uspace/lib/c/include/ipc/devman.h
rcead2aa r357b5f5 42 42 #define DEVMAN_NAME_MAXLEN 256 43 43 44 typedef ipcarg_t devman_handle_t;44 typedef sysarg_t devman_handle_t; 45 45 46 46 /** Ids of device models used for device-to-driver matching. … … 123 123 DEVMAN_CLIENT, 124 124 DEVMAN_CONNECT_TO_DEVICE, 125 DEVMAN_CONNECT_FROM_DEVMAP, 125 126 DEVMAN_CONNECT_TO_PARENTS_DEVICE 126 127 } devman_interface_t; -
uspace/lib/c/include/ipc/devmap.h
rcead2aa r357b5f5 40 40 #define DEVMAP_NAME_MAXLEN 255 41 41 42 typedef ipcarg_t devmap_handle_t;42 typedef sysarg_t devmap_handle_t; 43 43 44 44 typedef enum { -
uspace/lib/c/include/ipc/icmp.h
rcead2aa r357b5f5 33 33 /** @file 34 34 * ICMP module messages. 35 * @see icmp_ interface.h35 * @see icmp_remote.h 36 36 */ 37 37 … … 48 48 /** ICMP module messages. */ 49 49 typedef enum { 50 /** Send secho request. @see icmp_echo() */50 /** Send echo request. @see icmp_echo() */ 51 51 NET_ICMP_ECHO = NET_ICMP_FIRST, 52 52 53 53 /** 54 * Send sdestination unreachable error message.54 * Send destination unreachable error message. 55 55 * @see icmp_destination_unreachable_msg() 56 56 */ … … 58 58 59 59 /** 60 * Send ssource quench error message.60 * Send source quench error message. 61 61 * @see icmp_source_quench_msg() 62 62 */ … … 64 64 65 65 /** 66 * Send stime exceeded error message.66 * Send time exceeded error message. 67 67 * @see icmp_time_exceeded_msg() 68 68 */ … … 70 70 71 71 /** 72 * Send sparameter problem error message.72 * Send parameter problem error message. 73 73 * @see icmp_parameter_problem_msg() 74 74 */ 75 NET_ICMP_PARAMETERPROB, 76 77 /** Initializes new connection. */ 78 NET_ICMP_INIT 79 } icmp_messages; 75 NET_ICMP_PARAMETERPROB 76 } icmp_messages_t; 80 77 81 78 /** @name ICMP specific message parameters definitions */ 82 79 /*@{*/ 83 80 84 /** Return sthe ICMP code message parameter.81 /** Return the ICMP code message parameter. 85 82 * 86 * @param[in] call The message call structure. 83 * @param[in] call Message call structure. 84 * 87 85 */ 88 #define ICMP_GET_CODE(call) \ 89 ({ \ 90 icmp_code_t code = (icmp_code_t) IPC_GET_ARG1(*call); \ 91 code; \ 92 }) 86 #define ICMP_GET_CODE(call) ((icmp_code_t) IPC_GET_ARG1(call)) 93 87 94 /** Return sthe ICMP link MTU message parameter.88 /** Return the ICMP link MTU message parameter. 95 89 * 96 * @param[in] call The message call structure. 90 * @param[in] call Message call structure. 91 * 97 92 */ 98 #define ICMP_GET_MTU(call) \ 99 ({ \ 100 icmp_param_t mtu = (icmp_param_t) IPC_GET_ARG3(*call); \ 101 mtu; \ 102 }) 93 #define ICMP_GET_MTU(call) ((icmp_param_t) IPC_GET_ARG3(call)) 103 94 104 /** Return sthe pointer message parameter.95 /** Return the pointer message parameter. 105 96 * 106 * @param[in] call The message call structure. 97 * @param[in] call Message call structure. 98 * 107 99 */ 108 #define ICMP_GET_POINTER(call) \ 109 ({ \ 110 icmp_param_t pointer = (icmp_param_t) IPC_GET_ARG3(*call); \ 111 pointer; \ 112 }) 100 #define ICMP_GET_POINTER(call) ((icmp_param_t) IPC_GET_ARG3(call)) 113 101 114 /** Return sthe size message parameter.102 /** Return the size message parameter. 115 103 * 116 * @param[in] call The message call structure. 104 * @param[in] call Message call structure. 105 * 117 106 */ 118 #define ICMP_GET_SIZE(call) \ 119 ({ \ 120 size_t size = (size_t) IPC_GET_ARG1(call); \ 121 size; \ 122 }) 107 #define ICMP_GET_SIZE(call) ((size_t) IPC_GET_ARG1(call)) 123 108 124 /** Return sthe timeout message parameter.109 /** Return the timeout message parameter. 125 110 * 126 * @param[in] call The message call structure. 111 * @param[in] call Message call structure. 112 * 127 113 */ 128 #define ICMP_GET_TIMEOUT(call) \ 129 ({ \ 130 suseconds_t timeout = (suseconds_t) IPC_GET_ARG2(call); \ 131 timeout; \ 132 }) 114 #define ICMP_GET_TIMEOUT(call) ((suseconds_t) IPC_GET_ARG2(call)) 133 115 134 /** Return sthe time to live message parameter.116 /** Return the time to live message parameter. 135 117 * 136 * @param[in] call The message call structure. 118 * @param[in] call Message call structure. 119 * 137 120 */ 138 #define ICMP_GET_TTL(call) \ 139 ({ \ 140 ip_ttl_t ttl = (ip_ttl_t) IPC_GET_ARG3(call); \ 141 ttl; \ 142 }) 121 #define ICMP_GET_TTL(call) ((ip_ttl_t) IPC_GET_ARG3(call)) 143 122 144 /** Return sthe type of service message parameter.123 /** Return the type of service message parameter. 145 124 * 146 * @param[in] call The message call structure. 125 * @param[in] call Message call structure. 126 * 147 127 */ 148 #define ICMP_GET_TOS(call) \ 149 ({ \ 150 ip_tos_t tos = (ip_tos_t) IPC_GET_ARG4(call); \ 151 tos; \ 152 }) 128 #define ICMP_GET_TOS(call) ((ip_tos_t) IPC_GET_ARG4(call)) 153 129 154 /** Return sthe dont fragment message parameter.130 /** Return the dont fragment message parameter. 155 131 * 156 * @param[in] call The message call structure.132 * @param[in] call Message call structure. 157 133 */ 158 #define ICMP_GET_DONT_FRAGMENT(call) \ 159 ({ \ 160 int dont_fragment = (int) IPC_GET_ARG5(call); \ 161 dont_fragment; \ 162 }) 134 #define ICMP_GET_DONT_FRAGMENT(call) ((int) IPC_GET_ARG5(call)) 163 135 164 136 /*@}*/ -
uspace/lib/c/include/ipc/il.h
rcead2aa r357b5f5 33 33 /** @file 34 34 * Internetwork layer modules messages. 35 * @see il_ interface.h35 * @see il_remote.h 36 36 * @see ip_interface.h 37 37 */ … … 45 45 /** Internet layer modules messages. */ 46 46 typedef enum { 47 /** New device message.48 * @see ip_device_req()49 */50 NET_IL_DEVICE = NET_IL_FIRST,51 47 /** Device state changed message. 52 48 * @see il_device_state_msg() 53 49 */ 54 NET_IL_DEVICE_STATE, 50 NET_IL_DEVICE_STATE = NET_IL_FIRST, 51 55 52 /** Device MTU changed message. 56 53 * @see il_mtu_changed_msg() 57 54 */ 58 55 NET_IL_MTU_CHANGED, 59 /** Packet size message. 60 * @see il_packet_size_req() 61 */ 62 NET_IL_PACKET_SPACE, 56 63 57 /** Packet received message. 64 58 * @see il_received_msg() 65 59 */ 66 NET_IL_RECEIVED, 67 /** Packet send message. 68 * @see il_send_msg() 69 */ 70 NET_IL_SEND 60 NET_IL_RECEIVED 71 61 } il_messages; 72 62 … … 75 65 76 66 /** Return the protocol number message parameter. 77 * @param[in] call The message call structure. 67 * 68 * @param[in] call Message call structure. 69 * 78 70 */ 79 #define IL_GET_PROTO(call) (int) IPC_GET_ARG1(*call)71 #define IL_GET_PROTO(call) ((int) IPC_GET_ARG1(call)) 80 72 81 73 /** Return the registering service message parameter. 82 * @param[in] call The message call structure. 74 * 75 * @param[in] call Message call structure. 76 * 83 77 */ 84 #define IL_GET_SERVICE(call) (services_t) IPC_GET_ARG2(*call)78 #define IL_GET_SERVICE(call) ((services_t) IPC_GET_ARG2(call)) 85 79 86 80 /*@}*/ -
uspace/lib/c/include/ipc/ip.h
rcead2aa r357b5f5 47 47 /** IP module messages. */ 48 48 typedef enum { 49 /** New device message. 50 * @see ip_device_req() 51 */ 52 NET_IP_DEVICE = NET_IP_FIRST, 53 49 54 /** Adds the routing entry. 50 55 * @see ip_add_route() 51 56 */ 52 NET_IP_ADD_ROUTE = NET_IP_FIRST, 57 NET_IP_ADD_ROUTE, 58 53 59 /** Gets the actual route information. 54 60 * @see ip_get_route() 55 61 */ 56 62 NET_IP_GET_ROUTE, 63 57 64 /** Processes the received error notification. 58 65 * @see ip_received_error_msg() 59 66 */ 60 67 NET_IP_RECEIVED_ERROR, 68 61 69 /** Sets the default gateway. 62 70 * @see ip_set_default_gateway() 63 71 */ 64 NET_IP_SET_GATEWAY 72 NET_IP_SET_GATEWAY, 73 74 /** Packet size message. 75 * @see ip_packet_size_req() 76 */ 77 NET_IP_PACKET_SPACE, 78 79 /** Packet send message. 80 * @see ip_send_msg() 81 */ 82 NET_IP_SEND 65 83 } ip_messages; 66 84 … … 68 86 /*@{*/ 69 87 70 /** Returns the address message parameter. 71 * @param[in] call The message call structure. 88 /** Return the address message parameter. 89 * 90 * @param[in] call Message call structure. 91 * 72 92 */ 73 93 #define IP_GET_ADDRESS(call) \ 74 94 ({ \ 75 95 in_addr_t addr; \ 76 addr.s_addr = IPC_GET_ARG3( *call); \96 addr.s_addr = IPC_GET_ARG3(call); \ 77 97 addr; \ 78 98 }) 79 99 80 /** Returns the gateway message parameter. 81 * @param[in] call The message call structure. 100 /** Return the gateway message parameter. 101 * 102 * @param[in] call Message call structure. 103 * 82 104 */ 83 105 #define IP_GET_GATEWAY(call) \ 84 106 ({ \ 85 107 in_addr_t addr; \ 86 addr.s_addr = IPC_GET_ARG2( *call); \108 addr.s_addr = IPC_GET_ARG2(call); \ 87 109 addr; \ 88 110 }) 89 111 90 /** Sets the header length in the message answer. 91 * @param[out] answer The message answer structure. 112 /** Set the header length in the message answer. 113 * 114 * @param[out] answer Message answer structure. 115 * 92 116 */ 93 #define IP_SET_HEADERLEN(answer, value) \ 94 do { \ 95 ipcarg_t argument = (ipcarg_t) (value); \ 96 IPC_SET_ARG2(*answer, argument); \ 97 } while (0) 117 #define IP_SET_HEADERLEN(answer, value) IPC_SET_ARG2(answer, (sysarg_t) (value)) 98 118 99 /** Returns the network mask message parameter. 100 * @param[in] call The message call structure. 119 /** Return the network mask message parameter. 120 * 121 * @param[in] call Message call structure. 122 * 101 123 */ 102 124 #define IP_GET_NETMASK(call) \ 103 125 ({ \ 104 126 in_addr_t addr; \ 105 addr.s_addr = IPC_GET_ARG4( *call); \127 addr.s_addr = IPC_GET_ARG4(call); \ 106 128 addr; \ 107 129 }) 108 130 109 /** Returns the protocol message parameter. 110 * @param[in] call The message call structure. 131 /** Return the protocol message parameter. 132 * 133 * @param[in] call Message call structure. 134 * 111 135 */ 112 #define IP_GET_PROTOCOL(call) \ 113 ({ \ 114 ip_protocol_t protocol = (ip_protocol_t) IPC_GET_ARG1(*call); \ 115 protocol; \ 116 }) 136 #define IP_GET_PROTOCOL(call) ((ip_protocol_t) IPC_GET_ARG1(call)) 117 137 118 138 /*@}*/ -
uspace/lib/c/include/ipc/ipc.h
rcead2aa r357b5f5 44 44 #define IPC_FLAG_BLOCKING 0x01 45 45 46 typedef sysarg_t ipcarg_t;47 48 46 typedef struct { 49 ipcarg_t args[IPC_CALL_LEN];50 ipcarg_t in_phone_hash;47 sysarg_t args[IPC_CALL_LEN]; 48 sysarg_t in_phone_hash; 51 49 } ipc_call_t; 52 50 … … 183 181 (arg4), (arg5), (res1), (res2), (res3), (res4), (res5)) 184 182 185 extern int ipc_call_sync_fast(int, ipcarg_t, ipcarg_t, ipcarg_t, ipcarg_t,186 ipcarg_t *, ipcarg_t *, ipcarg_t *, ipcarg_t *, ipcarg_t *);187 188 extern int ipc_call_sync_slow(int, ipcarg_t, ipcarg_t, ipcarg_t, ipcarg_t,189 ipcarg_t, ipcarg_t, ipcarg_t *, ipcarg_t *, ipcarg_t *, ipcarg_t *,190 ipcarg_t *);183 extern int ipc_call_sync_fast(int, sysarg_t, sysarg_t, sysarg_t, sysarg_t, 184 sysarg_t *, sysarg_t *, sysarg_t *, sysarg_t *, sysarg_t *); 185 186 extern int ipc_call_sync_slow(int, sysarg_t, sysarg_t, sysarg_t, sysarg_t, 187 sysarg_t, sysarg_t, sysarg_t *, sysarg_t *, sysarg_t *, sysarg_t *, 188 sysarg_t *); 191 189 192 190 extern ipc_callid_t ipc_wait_cycle(ipc_call_t *, uint32_t, int); … … 220 218 ipc_answer_slow((callid), (retval), (arg1), (arg2), (arg3), (arg4), (arg5)) 221 219 222 extern ipcarg_t ipc_answer_fast(ipc_callid_t, ipcarg_t, ipcarg_t, ipcarg_t,223 ipcarg_t, ipcarg_t);224 extern ipcarg_t ipc_answer_slow(ipc_callid_t, ipcarg_t, ipcarg_t, ipcarg_t,225 ipcarg_t, ipcarg_t, ipcarg_t);220 extern sysarg_t ipc_answer_fast(ipc_callid_t, sysarg_t, sysarg_t, sysarg_t, 221 sysarg_t, sysarg_t); 222 extern sysarg_t ipc_answer_slow(ipc_callid_t, sysarg_t, sysarg_t, sysarg_t, 223 sysarg_t, sysarg_t, sysarg_t); 226 224 227 225 /* … … 255 253 (arg4), (arg5), (private), (callback), (can_preempt)) 256 254 257 extern void ipc_call_async_fast(int, ipcarg_t, ipcarg_t, ipcarg_t, ipcarg_t,258 ipcarg_t, void *, ipc_async_callback_t, int);259 extern void ipc_call_async_slow(int, ipcarg_t, ipcarg_t, ipcarg_t, ipcarg_t,260 ipcarg_t, ipcarg_t, void *, ipc_async_callback_t, int);261 262 extern int ipc_connect_to_me(int, int, int, int, ipcarg_t *);255 extern void ipc_call_async_fast(int, sysarg_t, sysarg_t, sysarg_t, sysarg_t, 256 sysarg_t, void *, ipc_async_callback_t, int); 257 extern void ipc_call_async_slow(int, sysarg_t, sysarg_t, sysarg_t, sysarg_t, 258 sysarg_t, sysarg_t, void *, ipc_async_callback_t, int); 259 260 extern int ipc_connect_to_me(int, int, int, int, sysarg_t *); 263 261 extern int ipc_connect_me_to(int, int, int, int); 264 262 extern int ipc_connect_me_to_blocking(int, int, int, int); … … 266 264 extern int ipc_register_irq(int, int, int, irq_code_t *); 267 265 extern int ipc_unregister_irq(int, int); 268 extern int ipc_forward_fast(ipc_callid_t, int, int, ipcarg_t, ipcarg_t, int);269 extern int ipc_forward_slow(ipc_callid_t, int, int, ipcarg_t, ipcarg_t,270 ipcarg_t, ipcarg_t, ipcarg_t, int);266 extern int ipc_forward_fast(ipc_callid_t, int, int, sysarg_t, sysarg_t, int); 267 extern int ipc_forward_slow(ipc_callid_t, int, int, sysarg_t, sysarg_t, 268 sysarg_t, sysarg_t, sysarg_t, int); 271 269 272 270 /* … … 282 280 ipc_share_in_start((phoneid), (dst), (size), (arg), (flags)) 283 281 284 extern int ipc_share_in_start(int, void *, size_t, ipcarg_t, int *);282 extern int ipc_share_in_start(int, void *, size_t, sysarg_t, int *); 285 283 extern int ipc_share_in_finalize(ipc_callid_t, void *, int ); 286 284 extern int ipc_share_out_start(int, void *, int); -
uspace/lib/c/include/ipc/irc.h
rcead2aa r357b5f5 31 31 */ 32 32 /** @file 33 */ 33 */ 34 34 35 #ifndef LIBC_ BUS_H_36 #define LIBC_ BUS_H_35 #ifndef LIBC_IRC_H_ 36 #define LIBC_IRC_H_ 37 37 38 38 #include <ipc/ipc.h> 39 39 40 40 typedef enum { 41 BUS_CLEAR_INTERRUPT = IPC_FIRST_USER_METHOD 42 } bus_request_t; 41 IRC_ENABLE_INTERRUPT = IPC_FIRST_USER_METHOD, 42 IRC_CLEAR_INTERRUPT 43 } irc_request_t; 43 44 44 45 #endif -
uspace/lib/c/include/ipc/net.h
rcead2aa r357b5f5 44 44 #include <net/packet.h> 45 45 46 /** Returns a value indicating whether the value is in the interval. 47 * @param[in] item The value to be checked. 48 * @param[in] first_inclusive The first value in the interval inclusive. 49 * @param[in] last_exclusive The first value after the interval. 46 /** Return a value indicating whether the value is in the interval. 47 * 48 * @param[in] item Value to be checked. 49 * @param[in] first_inclusive First value in the interval inclusive. 50 * @param[in] last_exclusive First value after the interval. 51 * 50 52 */ 51 53 #define IS_IN_INTERVAL(item, first_inclusive, last_exclusive) \ … … 55 57 /*@{*/ 56 58 57 /** The number of ARP messages. */ 58 #define NET_ARP_COUNT 5 59 60 /** The number of Ethernet messages. */ 61 #define NET_ETH_COUNT 0 62 63 /** The number of ICMP messages. */ 64 #define NET_ICMP_COUNT 6 65 66 /** The number of inter-network messages. */ 67 #define NET_IL_COUNT 6 68 69 /** The number of IP messages. */ 70 #define NET_IP_COUNT 4 71 72 /** The number of general networking messages. */ 73 #define NET_NET_COUNT 3 74 75 /** The number of network interface driver messages. */ 76 #define NET_NETIF_COUNT 6 77 78 /** The number of network interface layer messages. */ 79 #define NET_NIL_COUNT 7 80 81 /** The number of packet management system messages. */ 82 #define NET_PACKET_COUNT 5 83 84 /** The number of socket messages. */ 85 #define NET_SOCKET_COUNT 14 86 87 /** The number of TCP messages. */ 88 #define NET_TCP_COUNT 0 89 90 /** The number of transport layer messages. */ 91 #define NET_TL_COUNT 1 92 93 /** The number of UDP messages. */ 94 #define NET_UDP_COUNT 0 59 #define NET_ARP_COUNT 5 /**< Number of ARP messages. */ 60 #define NET_ETH_COUNT 0 /**< Number of Ethernet messages. */ 61 #define NET_ICMP_COUNT 6 /**< Number of ICMP messages. */ 62 #define NET_IL_COUNT 6 /**< Number of inter-network messages. */ 63 #define NET_IP_COUNT 4 /**< Number of IP messages. */ 64 #define NET_NET_COUNT 3 /**< Number of general networking messages. */ 65 #define NET_NETIF_COUNT 6 /**< Number of network interface driver messages. */ 66 #define NET_NIL_COUNT 7 /**< Number of network interface layer messages. */ 67 #define NET_PACKET_COUNT 5 /**< Number of packet management system messages. */ 68 #define NET_SOCKET_COUNT 14 /**< Number of socket messages. */ 69 #define NET_TCP_COUNT 0 /**< Number of TCP messages. */ 70 #define NET_TL_COUNT 1 /**< Number of transport layer messages. */ 71 #define NET_UDP_COUNT 0 /**< Number of UDP messages. */ 95 72 96 73 /*@}*/ … … 100 77 /*@{*/ 101 78 102 /** The first networking message. */ 103 #define NET_FIRST 2000 104 105 /** The first network interface layer message. */ 106 #define NET_NETIF_FIRST NET_FIRST 107 108 /** The last network interface layer message. */ 109 #define NET_NETIF_LAST (NET_NETIF_FIRST + NET_NETIF_COUNT) 110 111 /** The first general networking message. */ 112 #define NET_NET_FIRST (NET_NETIF_LAST + 0) 113 114 /** The last general networking message. */ 115 #define NET_NET_LAST (NET_NET_FIRST + NET_NET_COUNT) 116 117 /** The first network interface layer message. */ 118 #define NET_NIL_FIRST (NET_NET_LAST + 0) 119 120 /** The last network interface layer message. */ 121 #define NET_NIL_LAST (NET_NIL_FIRST + NET_NIL_COUNT) 122 123 /** The first Ethernet message. */ 124 #define NET_ETH_FIRST (NET_NIL_LAST + 0) 125 126 /** The last Ethernet message. */ 127 #define NET_ETH_LAST (NET_ETH_FIRST + NET_ETH_COUNT) 128 129 /** The first inter-network message. */ 130 #define NET_IL_FIRST (NET_ETH_LAST + 0) 131 132 /** The last inter-network message. */ 133 #define NET_IL_LAST (NET_IL_FIRST + NET_IL_COUNT) 134 135 /** The first IP message. */ 136 #define NET_IP_FIRST (NET_IL_LAST + 0) 137 138 /** The last IP message. */ 139 #define NET_IP_LAST (NET_IP_FIRST + NET_IP_COUNT) 140 141 /** The first ARP message. */ 142 #define NET_ARP_FIRST (NET_IP_LAST + 0) 143 144 /** The last ARP message. */ 145 #define NET_ARP_LAST (NET_ARP_FIRST + NET_ARP_COUNT) 146 147 /** The first ICMP message. */ 148 #define NET_ICMP_FIRST (NET_ARP_LAST + 0) 149 150 /** The last ICMP message. */ 151 #define NET_ICMP_LAST (NET_ICMP_FIRST + NET_ICMP_COUNT) 152 153 /** The first ICMP message. */ 154 #define NET_TL_FIRST (NET_ICMP_LAST + 0) 155 156 /** The last ICMP message. */ 157 #define NET_TL_LAST (NET_TL_FIRST + NET_TL_COUNT) 158 159 /** The first UDP message. */ 160 #define NET_UDP_FIRST (NET_TL_LAST + 0) 161 162 /** The last UDP message. */ 163 #define NET_UDP_LAST (NET_UDP_FIRST + NET_UDP_COUNT) 164 165 /** The first TCP message. */ 166 #define NET_TCP_FIRST (NET_UDP_LAST + 0) 167 168 /** The last TCP message. */ 169 #define NET_TCP_LAST (NET_TCP_FIRST + NET_TCP_COUNT) 170 171 /** The first socket message. */ 172 #define NET_SOCKET_FIRST (NET_TCP_LAST + 0) 173 174 /** The last socket message. */ 175 #define NET_SOCKET_LAST (NET_SOCKET_FIRST + NET_SOCKET_COUNT) 176 177 /** The first packet management system message. */ 178 #define NET_PACKET_FIRST (NET_SOCKET_LAST + 0) 179 180 /** The last packet management system message. */ 181 #define NET_PACKET_LAST (NET_PACKET_FIRST + NET_PACKET_COUNT) 182 183 /** The last networking message. */ 184 #define NET_LAST NET_PACKET_LAST 185 186 /** The number of networking messages. */ 187 #define NET_COUNT (NET_LAST - NET_FIRST) 188 189 /** Returns a value indicating whether the IPC call is a generic networking 190 * message. 191 * @param[in] call The IPC call to be checked. 79 80 /** First networking message. */ 81 #define NET_FIRST 2000 82 83 /** First network interface layer message. */ 84 #define NET_NETIF_FIRST NET_FIRST 85 86 /** Last network interface layer message. */ 87 #define NET_NETIF_LAST (NET_NETIF_FIRST + NET_NETIF_COUNT) 88 89 /** First general networking message. */ 90 #define NET_NET_FIRST (NET_NETIF_LAST + 0) 91 92 /** Last general networking message. */ 93 #define NET_NET_LAST (NET_NET_FIRST + NET_NET_COUNT) 94 95 /** First network interface layer message. */ 96 #define NET_NIL_FIRST (NET_NET_LAST + 0) 97 98 /** Last network interface layer message. */ 99 #define NET_NIL_LAST (NET_NIL_FIRST + NET_NIL_COUNT) 100 101 /** First Ethernet message. */ 102 #define NET_ETH_FIRST (NET_NIL_LAST + 0) 103 104 /** Last Ethernet message. */ 105 #define NET_ETH_LAST (NET_ETH_FIRST + NET_ETH_COUNT) 106 107 /** First inter-network message. */ 108 #define NET_IL_FIRST (NET_ETH_LAST + 0) 109 110 /** Last inter-network message. */ 111 #define NET_IL_LAST (NET_IL_FIRST + NET_IL_COUNT) 112 113 /** First IP message. */ 114 #define NET_IP_FIRST (NET_IL_LAST + 0) 115 116 /** Last IP message. */ 117 #define NET_IP_LAST (NET_IP_FIRST + NET_IP_COUNT) 118 119 /** First ARP message. */ 120 #define NET_ARP_FIRST (NET_IP_LAST + 0) 121 122 /** Last ARP message. */ 123 #define NET_ARP_LAST (NET_ARP_FIRST + NET_ARP_COUNT) 124 125 /** First ICMP message. */ 126 #define NET_ICMP_FIRST (NET_ARP_LAST + 0) 127 128 /** Last ICMP message. */ 129 #define NET_ICMP_LAST (NET_ICMP_FIRST + NET_ICMP_COUNT) 130 131 /** First ICMP message. */ 132 #define NET_TL_FIRST (NET_ICMP_LAST + 0) 133 134 /** Last ICMP message. */ 135 #define NET_TL_LAST (NET_TL_FIRST + NET_TL_COUNT) 136 137 /** First UDP message. */ 138 #define NET_UDP_FIRST (NET_TL_LAST + 0) 139 140 /** Last UDP message. */ 141 #define NET_UDP_LAST (NET_UDP_FIRST + NET_UDP_COUNT) 142 143 /** First TCP message. */ 144 #define NET_TCP_FIRST (NET_UDP_LAST + 0) 145 146 /** Last TCP message. */ 147 #define NET_TCP_LAST (NET_TCP_FIRST + NET_TCP_COUNT) 148 149 /** First socket message. */ 150 #define NET_SOCKET_FIRST (NET_TCP_LAST + 0) 151 152 /** Last socket message. */ 153 #define NET_SOCKET_LAST (NET_SOCKET_FIRST + NET_SOCKET_COUNT) 154 155 /** First packet management system message. */ 156 #define NET_PACKET_FIRST (NET_SOCKET_LAST + 0) 157 158 /** Last packet management system message. */ 159 #define NET_PACKET_LAST (NET_PACKET_FIRST + NET_PACKET_COUNT) 160 161 /** Last networking message. */ 162 #define NET_LAST NET_PACKET_LAST 163 164 /** Number of networking messages. */ 165 #define NET_COUNT (NET_LAST - NET_FIRST) 166 167 /** Check if the IPC call is a generic networking message. 168 * 169 * @param[in] call IPC call to be checked. 170 * 192 171 */ 193 172 #define IS_NET_MESSAGE(call) \ 194 IS_IN_INTERVAL(IPC_GET_METHOD(*call), NET_FIRST, NET_LAST) 195 196 /** Returns a value indicating whether the IPC call is an ARP message. 197 * @param[in] call The IPC call to be checked. 173 IS_IN_INTERVAL(IPC_GET_IMETHOD(call), NET_FIRST, NET_LAST) 174 175 /** Check if the IPC call is an ARP message. 176 * 177 * @param[in] call IPC call to be checked. 178 * 198 179 */ 199 180 #define IS_NET_ARP_MESSAGE(call) \ 200 IS_IN_INTERVAL(IPC_GET_METHOD(*call), NET_ARP_FIRST, NET_ARP_LAST) 201 202 /** Returns a value indicating whether the IPC call is an Ethernet message. 203 * @param[in] call The IPC call to be checked. 181 IS_IN_INTERVAL(IPC_GET_IMETHOD(call), NET_ARP_FIRST, NET_ARP_LAST) 182 183 /** Check if the IPC call is an Ethernet message. 184 * 185 * @param[in] call IPC call to be checked. 186 * 204 187 */ 205 188 #define IS_NET_ETH_MESSAGE(call) \ 206 IS_IN_INTERVAL(IPC_GET_METHOD(*call), NET_ETH_FIRST, NET_ETH_LAST) 207 208 /** Returns a value indicating whether the IPC call is an ICMP message. 209 * @param[in] call The IPC call to be checked. 189 IS_IN_INTERVAL(IPC_GET_IMETHOD(call), NET_ETH_FIRST, NET_ETH_LAST) 190 191 /** Check if the IPC call is an ICMP message. 192 * 193 * @param[in] call IPC call to be checked. 194 * 210 195 */ 211 196 #define IS_NET_ICMP_MESSAGE(call) \ 212 IS_IN_INTERVAL(IPC_GET_METHOD(*call), NET_ICMP_FIRST, NET_ICMP_LAST) 213 214 /** Returns a value indicating whether the IPC call is an inter-network layer 215 * message. 216 * @param[in] call The IPC call to be checked. 197 IS_IN_INTERVAL(IPC_GET_IMETHOD(call), NET_ICMP_FIRST, NET_ICMP_LAST) 198 199 /** Check if the IPC call is an inter-network layer message. 200 * 201 * @param[in] call IPC call to be checked. 202 * 217 203 */ 218 204 #define IS_NET_IL_MESSAGE(call) \ 219 IS_IN_INTERVAL(IPC_GET_METHOD(*call), NET_IL_FIRST, NET_IL_LAST) 220 221 /** Returns a value indicating whether the IPC call is an IP message. 222 * @param[in] call The IPC call to be checked. 205 IS_IN_INTERVAL(IPC_GET_IMETHOD(call), NET_IL_FIRST, NET_IL_LAST) 206 207 /** Check if the IPC call is an IP message. 208 * 209 * @param[in] call IPC call to be checked. 210 * 223 211 */ 224 212 #define IS_NET_IP_MESSAGE(call) \ 225 IS_IN_INTERVAL(IPC_GET_METHOD(*call), NET_IP_FIRST, NET_IP_LAST) 226 227 /** Returns a value indicating whether the IPC call is a generic networking 228 * message. 229 * @param[in] call The IPC call to be checked. 213 IS_IN_INTERVAL(IPC_GET_IMETHOD(call), NET_IP_FIRST, NET_IP_LAST) 214 215 /** Check if the IPC call is a generic networking message. 216 * 217 * @param[in] call IPC call to be checked. 218 * 230 219 */ 231 220 #define IS_NET_NET_MESSAGE(call) \ 232 IS_IN_INTERVAL(IPC_GET_METHOD(*call), NET_NET_FIRST, NET_NET_LAST) 233 234 /** Returns a value indicating whether the IPC call is a network interface layer 235 * message. 236 * @param[in] call The IPC call to be checked. 221 IS_IN_INTERVAL(IPC_GET_IMETHOD(call), NET_NET_FIRST, NET_NET_LAST) 222 223 /** Check if the IPC call is a network interface layer message. 224 * 225 * @param[in] call IPC call to be checked. 226 * 237 227 */ 238 228 #define IS_NET_NIL_MESSAGE(call) \ 239 IS_IN_INTERVAL(IPC_GET_METHOD(*call), NET_NIL_FIRST, NET_NIL_LAST) 240 241 /** Returns a value indicating whether the IPC call is a packet manaagement 242 * system message. 243 * @param[in] call The IPC call to be checked. 229 IS_IN_INTERVAL(IPC_GET_IMETHOD(call), NET_NIL_FIRST, NET_NIL_LAST) 230 231 /** Check if the IPC call is a packet manaagement system message. 232 * 233 * @param[in] call IPC call to be checked. 234 * 244 235 */ 245 236 #define IS_NET_PACKET_MESSAGE(call) \ 246 IS_IN_INTERVAL(IPC_GET_METHOD(*call), NET_PACKET_FIRST, NET_PACKET_LAST) 247 248 /** Returns a value indicating whether the IPC call is a socket message. 249 * @param[in] call The IPC call to be checked. 237 IS_IN_INTERVAL(IPC_GET_IMETHOD(call), NET_PACKET_FIRST, NET_PACKET_LAST) 238 239 /** Check if the IPC call is a socket message. 240 * 241 * @param[in] call IPC call to be checked. 242 * 250 243 */ 251 244 #define IS_NET_SOCKET_MESSAGE(call) \ 252 IS_IN_INTERVAL(IPC_GET_METHOD(*call), NET_SOCKET_FIRST, NET_SOCKET_LAST) 253 254 /** Returns a value indicating whether the IPC call is a TCP message. 255 * @param[in] call The IPC call to be checked. 245 IS_IN_INTERVAL(IPC_GET_IMETHOD(call), NET_SOCKET_FIRST, NET_SOCKET_LAST) 246 247 /** Check if the IPC call is a TCP message. 248 * 249 * @param[in] call IPC call to be checked. 250 * 256 251 */ 257 252 #define IS_NET_TCP_MESSAGE(call) \ 258 IS_IN_INTERVAL(IPC_GET_METHOD(*call), NET_TCP_FIRST, NET_TCP_LAST) 259 260 /** Returns a value indicating whether the IPC call is a transport layer message. 261 * @param[in] call The IPC call to be checked. 253 IS_IN_INTERVAL(IPC_GET_IMETHOD(call), NET_TCP_FIRST, NET_TCP_LAST) 254 255 /** Check if the IPC call is a transport layer message. 256 * 257 * @param[in] call IPC call to be checked. 258 * 262 259 */ 263 260 #define IS_NET_TL_MESSAGE(call) \ 264 IS_IN_INTERVAL(IPC_GET_METHOD(*call), NET_TL_FIRST, NET_TL_LAST) 265 266 /** Returns a value indicating whether the IPC call is a UDP message. 267 * @param[in] call The IPC call to be checked. 261 IS_IN_INTERVAL(IPC_GET_IMETHOD(call), NET_TL_FIRST, NET_TL_LAST) 262 263 /** Check if the IPC call is a UDP message. 264 * 265 * @param[in] call IPC call to be checked. 266 * 268 267 */ 269 268 #define IS_NET_UDP_MESSAGE(call) \ 270 IS_IN_INTERVAL(IPC_GET_ METHOD(*call), NET_UDP_FIRST, NET_UDP_LAST)269 IS_IN_INTERVAL(IPC_GET_IMETHOD(call), NET_UDP_FIRST, NET_UDP_LAST) 271 270 272 271 /*@}*/ … … 275 274 /*@{*/ 276 275 277 /** Returns the device identifier message argument. 278 * @param[in] call The message call structure. 279 */ 280 #define IPC_GET_DEVICE(call) \ 281 ({ \ 282 device_id_t device_id = (device_id_t) IPC_GET_ARG1(*call); \ 283 device_id; \ 284 }) 285 286 /** Returns the packet identifier message argument. 287 * @param[in] call The message call structure. 288 */ 289 #define IPC_GET_PACKET(call) \ 290 ({ \ 291 packet_id_t packet_id = (packet_id_t) IPC_GET_ARG2(*call); \ 292 packet_id; \ 293 }) 294 295 /** Returns the count message argument. 296 * @param[in] call The message call structure. 297 */ 298 #define IPC_GET_COUNT(call) \ 299 ({ \ 300 size_t size = (size_t) IPC_GET_ARG2(*call); \ 301 size; \ 302 }) 303 304 /** Returns the device state message argument. 305 * @param[in] call The message call structure. 306 */ 307 #define IPC_GET_STATE(call) \ 308 ({ \ 309 device_state_t state = (device_state_t) IPC_GET_ARG2(*call); \ 310 state; \ 311 }) 312 313 /** Returns the maximum transmission unit message argument. 314 * @param[in] call The message call structure. 315 */ 316 #define IPC_GET_MTU(call) \ 317 ({ \ 318 size_t size = (size_t) IPC_GET_ARG2(*call); \ 319 size; \ 320 }) 321 322 /** Returns the device driver service message argument. 323 * @param[in] call The message call structure. 324 */ 325 #define IPC_GET_SERVICE(call) \ 326 ({ \ 327 services_t service = (services_t) IPC_GET_ARG3(*call); \ 328 service; \ 329 }) 330 331 /** Returns the target service message argument. 332 * @param[in] call The message call structure. 333 */ 334 #define IPC_GET_TARGET(call) \ 335 ({ \ 336 services_t service = (services_t) IPC_GET_ARG3(*call); \ 337 service; \ 338 }) 339 340 /** Returns the sender service message argument. 341 * @param[in] call The message call structure. 342 */ 343 #define IPC_GET_SENDER(call) \ 344 ({ \ 345 services_t service = (services_t) IPC_GET_ARG3(*call); \ 346 service; \ 347 }) 348 349 /** Returns the error service message argument. 350 * @param[in] call The message call structure. 351 */ 352 #define IPC_GET_ERROR(call) \ 353 ({ \ 354 services_t service = (services_t) IPC_GET_ARG4(*call); \ 355 service; \ 356 }) 357 358 /** Returns the phone message argument. 359 * @param[in] call The message call structure. 360 */ 361 #define IPC_GET_PHONE(call) \ 362 ({ \ 363 int phone = (int) IPC_GET_ARG5(*call); \ 364 phone; \ 365 }) 366 367 /** Sets the device identifier in the message answer. 368 * @param[out] answer The message answer structure. 369 */ 370 #define IPC_SET_DEVICE(answer, value) \ 371 do { \ 372 ipcarg_t argument = (ipcarg_t) (value); \ 373 IPC_SET_ARG1(*answer, argument); \ 374 } while (0) 375 376 /** Sets the minimum address length in the message answer. 377 * @param[out] answer The message answer structure. 378 */ 379 #define IPC_SET_ADDR(answer, value) \ 380 do { \ 381 ipcarg_t argument = (ipcarg_t) (value); \ 382 IPC_SET_ARG1(*answer, argument); \ 383 } while (0) 384 385 /** Sets the minimum prefix size in the message answer. 386 * @param[out] answer The message answer structure. 387 */ 388 #define IPC_SET_PREFIX(answer, value) \ 389 do { \ 390 ipcarg_t argument = (ipcarg_t) (value); \ 391 IPC_SET_ARG2(*answer, argument); \ 392 } while (0) 393 394 /** Sets the maximum content size in the message answer. 395 * @param[out] answer The message answer structure. 396 */ 397 #define IPC_SET_CONTENT(answer, value) \ 398 do { \ 399 ipcarg_t argument = (ipcarg_t) (value); \ 400 IPC_SET_ARG3(*answer, argument); \ 401 } while (0) 402 403 /** Sets the minimum suffix size in the message answer. 404 * @param[out] answer The message answer structure. 405 */ 406 #define IPC_SET_SUFFIX(answer, value) \ 407 do { \ 408 ipcarg_t argument = (ipcarg_t) (value); \ 409 IPC_SET_ARG4(*answer, argument); \ 410 } while (0) 276 /** Return the device identifier message argument. 277 * 278 * @param[in] call Message call structure. 279 * 280 */ 281 #define IPC_GET_DEVICE(call) ((device_id_t) IPC_GET_ARG1(call)) 282 283 /** Return the packet identifier message argument. 284 * 285 * @param[in] call Message call structure. 286 * 287 */ 288 #define IPC_GET_PACKET(call) ((packet_id_t) IPC_GET_ARG2(call)) 289 290 /** Return the count message argument. 291 * 292 * @param[in] call Message call structure. 293 * 294 */ 295 #define IPC_GET_COUNT(call) ((size_t) IPC_GET_ARG2(call)) 296 297 /** Return the device state message argument. 298 * 299 * @param[in] call Message call structure. 300 * 301 */ 302 #define IPC_GET_STATE(call) ((device_state_t) IPC_GET_ARG2(call)) 303 304 /** Return the maximum transmission unit message argument. 305 * 306 * @param[in] call Message call structure. 307 * 308 */ 309 #define IPC_GET_MTU(call) ((size_t) IPC_GET_ARG2(call)) 310 311 /** Return the device driver service message argument. 312 * 313 * @param[in] call Message call structure. 314 * 315 */ 316 #define IPC_GET_SERVICE(call) ((services_t) IPC_GET_ARG3(call)) 317 318 /** Return the target service message argument. 319 * 320 * @param[in] call Message call structure. 321 * 322 */ 323 #define IPC_GET_TARGET(call) ((services_t) IPC_GET_ARG3(call)) 324 325 /** Return the sender service message argument. 326 * 327 * @param[in] call Message call structure. 328 * 329 */ 330 #define IPC_GET_SENDER(call) ((services_t) IPC_GET_ARG3(call)) 331 332 /** Return the error service message argument. 333 & 334 * @param[in] call Message call structure. 335 * 336 */ 337 #define IPC_GET_ERROR(call) ((services_t) IPC_GET_ARG4(call)) 338 339 /** Return the phone message argument. 340 * 341 * @param[in] call Message call structure. 342 * 343 */ 344 #define IPC_GET_PHONE(call) ((int) IPC_GET_ARG5(call)) 345 346 /** Set the device identifier in the message answer. 347 * 348 * @param[out] answer Message answer structure. 349 * @param[in] value Value to set. 350 * 351 */ 352 #define IPC_SET_DEVICE(answer, value) IPC_SET_ARG1(answer, (sysarg_t) (value)) 353 354 /** Set the minimum address length in the message answer. 355 * 356 * @param[out] answer Message answer structure. 357 * @param[in] value Value to set. 358 * 359 */ 360 #define IPC_SET_ADDR(answer, value) IPC_SET_ARG1(answer, (sysarg_t) (value)) 361 362 /** Set the minimum prefix size in the message answer. 363 * 364 * @param[out] answer Message answer structure. 365 * @param[in] value Value to set. 366 * 367 */ 368 #define IPC_SET_PREFIX(answer, value) IPC_SET_ARG2(answer, (sysarg_t) (value)) 369 370 /** Set the maximum content size in the message answer. 371 * 372 * @param[out] answer Message answer structure. 373 * @param[in] value Value to set. 374 * 375 */ 376 #define IPC_SET_CONTENT(answer, value) IPC_SET_ARG3(answer, (sysarg_t) (value)) 377 378 /** Set the minimum suffix size in the message answer. 379 * 380 * @param[out] answer Message answer structure. 381 * @param[in] value Value to set. 382 * 383 */ 384 #define IPC_SET_SUFFIX(answer, value) IPC_SET_ARG4(answer, (sysarg_t) (value)) 411 385 412 386 /*@}*/ -
uspace/lib/c/include/ipc/netif.h
rcead2aa r357b5f5 47 47 */ 48 48 NET_NETIF_PROBE = NET_NETIF_FIRST, 49 49 50 /** Send packet message. 50 51 * @see netif_send_msg() 51 52 */ 52 53 NET_NETIF_SEND, 54 53 55 /** Start device message. 54 56 * @see netif_start_req() 55 57 */ 56 58 NET_NETIF_START, 59 57 60 /** Get device usage statistics message. 58 61 * @see netif_stats_req() 59 62 */ 60 63 NET_NETIF_STATS, 64 61 65 /** Stop device message. 62 66 * @see netif_stop_req() 63 67 */ 64 68 NET_NETIF_STOP, 69 65 70 /** Get device address message. 66 71 * @see netif_get_addr_req() … … 73 78 74 79 /** Return the interrupt number message parameter. 75 * @param[in] call The message call structure. 80 * 81 * @param[in] call Mmessage call structure. 82 * 76 83 */ 77 #define NETIF_GET_IRQ(call) \ 78 ({ \ 79 int irq = (int) IPC_GET_ARG2(*call); \ 80 irq; \ 81 }) 84 #define NETIF_GET_IRQ(call) ((int) IPC_GET_ARG2(call)) 82 85 83 86 /** Return the input/output address message parameter. 84 * @param[in] call The message call structure. 87 * 88 * @param[in] call Message call structure. 89 * 85 90 */ 86 #define NETIF_GET_IO(call) \ 87 ({ \ 88 int io = (int) IPC_GET_ARG3(*call); \ 89 io; \ 90 }) 91 #define NETIF_GET_IO(call) ((void *) IPC_GET_ARG3(call)) 91 92 92 93 /*@}*/ -
uspace/lib/c/include/ipc/nil.h
rcead2aa r357b5f5 77 77 78 78 /** Return the protocol service message parameter. */ 79 #define NIL_GET_PROTO(call) \ 80 ({ \ 81 services_t service = (services_t) IPC_GET_ARG2(*call); \ 82 service; \ 83 }) 79 #define NIL_GET_PROTO(call) ((services_t) IPC_GET_ARG2(call)) 84 80 85 81 /*@}*/ -
uspace/lib/c/include/ipc/packet.h
rcead2aa r357b5f5 70 70 } packet_messages; 71 71 72 /** Return sthe protocol service message parameter. */73 #define ARP_GET_PROTO(call) (services_t) IPC_GET_ARG2(*call)72 /** Return the protocol service message parameter. */ 73 #define ARP_GET_PROTO(call) ((services_t) IPC_GET_ARG2(call)) 74 74 75 /** Return sthe packet identifier message parameter. */76 #define IPC_GET_ID(call) (packet_id_t) IPC_GET_ARG1(*call)75 /** Return the packet identifier message parameter. */ 76 #define IPC_GET_ID(call) ((packet_id_t) IPC_GET_ARG1(call)) 77 77 78 /** Return sthe maximal content length message parameter. */79 #define IPC_GET_CONTENT(call) (size_t) IPC_GET_ARG1(*call)78 /** Return the maximal content length message parameter. */ 79 #define IPC_GET_CONTENT(call) ((size_t) IPC_GET_ARG1(call)) 80 80 81 /** Return sthe maximal address length message parameter. */82 #define IPC_GET_ADDR_LEN(call) (size_t) IPC_GET_ARG2(*call)81 /** Return the maximal address length message parameter. */ 82 #define IPC_GET_ADDR_LEN(call) ((size_t) IPC_GET_ARG2(call)) 83 83 84 /** Return sthe maximal prefix length message parameter. */85 #define IPC_GET_PREFIX(call) (size_t) IPC_GET_ARG3(*call)84 /** Return the maximal prefix length message parameter. */ 85 #define IPC_GET_PREFIX(call) ((size_t) IPC_GET_ARG3(call)) 86 86 87 /** Return sthe maximal suffix length message parameter. */88 #define IPC_GET_SUFFIX(call) (size_t) IPC_GET_ARG4(*call)87 /** Return the maximal suffix length message parameter. */ 88 #define IPC_GET_SUFFIX(call) ((size_t) IPC_GET_ARG4(call)) 89 89 90 90 #endif -
uspace/lib/c/include/ipc/services.h
rcead2aa r357b5f5 49 49 SERVICE_FHC, 50 50 SERVICE_OBIO, 51 SERVICE_APIC, 52 SERVICE_I8259, 51 53 SERVICE_CLIPBOARD, 52 54 SERVICE_NETWORKING, 53 55 SERVICE_LO, 54 SERVICE_ DP8390,56 SERVICE_NE2000, 55 57 SERVICE_ETHERNET, 56 58 SERVICE_NILDUMMY, -
uspace/lib/c/include/ipc/socket.h
rcead2aa r357b5f5 84 84 #define SOCKET_SET_SOCKET_ID(answer, value) \ 85 85 do { \ 86 ipcarg_t argument = (ipcarg_t) (value); \86 sysarg_t argument = (sysarg_t) (value); \ 87 87 IPC_SET_ARG1(answer, argument); \ 88 88 } while (0) … … 102 102 #define SOCKET_SET_READ_DATA_LENGTH(answer, value) \ 103 103 do { \ 104 ipcarg_t argument = (ipcarg_t) (value); \104 sysarg_t argument = (sysarg_t) (value); \ 105 105 IPC_SET_ARG1(answer, argument); \ 106 106 } while (0) … … 147 147 #define SOCKET_SET_DATA_FRAGMENT_SIZE(answer, value) \ 148 148 do { \ 149 ipcarg_t argument = (ipcarg_t) (value); \149 sysarg_t argument = (sysarg_t) (value); \ 150 150 IPC_SET_ARG2(answer, argument); \ 151 151 } while (0) … … 156 156 #define SOCKET_SET_ADDRESS_LENGTH(answer, value) \ 157 157 do { \ 158 ipcarg_t argument = (ipcarg_t) (value); \158 sysarg_t argument = (sysarg_t) (value); \ 159 159 IPC_SET_ARG3(answer, argument);\ 160 160 } while (0) … … 174 174 #define SOCKET_SET_HEADER_SIZE(answer, value) \ 175 175 do { \ 176 ipcarg_t argument = (ipcarg_t) (value); \176 sysarg_t argument = (sysarg_t) (value); \ 177 177 IPC_SET_ARG3(answer, argument); \ 178 178 } while (0) -
uspace/lib/c/include/libc.h
rcead2aa r357b5f5 40 40 #include <libarch/syscall.h> 41 41 42 #ifdef __32_BITS__ 43 44 /** Explicit 64-bit arguments passed to syscalls. */ 45 typedef uint64_t sysarg64_t; 46 47 #endif /* __32_BITS__ */ 48 42 49 #define __SYSCALL0(id) \ 43 50 __syscall0(0, 0, 0, 0, 0, 0, id) … … 53 60 __syscall5(p1, p2, p3, p4, p5, 0, id) 54 61 #define __SYSCALL6(id, p1, p2, p3, p4, p5, p6) \ 55 62 __syscall6(p1, p2, p3, p4, p5, p6, id) 56 63 57 64 extern void __main(void *pcb_ptr); -
uspace/lib/c/include/mem.h
rcead2aa r357b5f5 44 44 extern void *memmove(void *, const void *, size_t); 45 45 46 extern int bcmp(const char *, const char*, size_t);46 extern int bcmp(const void *, const void *, size_t); 47 47 48 48 #endif -
uspace/lib/c/include/net/icmp_common.h
rcead2aa r357b5f5 41 41 #include <sys/time.h> 42 42 43 /** Default timeout for incoming connections in microseconds . */44 #define ICMP_CONNECT_TIMEOUT (1 * 1000 * 1000)43 /** Default timeout for incoming connections in microseconds (1 sec). */ 44 #define ICMP_CONNECT_TIMEOUT 1000000 45 45 46 extern int icmp_connect_module(s ervices_t, suseconds_t);46 extern int icmp_connect_module(suseconds_t); 47 47 48 48 #endif -
uspace/lib/c/include/net/in.h
rcead2aa r357b5f5 43 43 44 44 /** INET string address maximum length. */ 45 #define INET_ADDRSTRLEN 45 #define INET_ADDRSTRLEN (4 * 3 + 3 + 1) 46 46 47 47 /** Type definition of the INET address. 48 48 * @see in_addr 49 49 */ 50 typedef struct in_addr 50 typedef struct in_addr in_addr_t; 51 51 52 52 /** Type definition of the INET socket address. -
uspace/lib/c/include/net/modules.h
rcead2aa r357b5f5 49 49 #include <sys/time.h> 50 50 51 /** Converts the data length between different types.52 *53 * @param[in] type_from The source type.54 * @param[in] type_to The destination type.55 * @param[in] count The number units of the source type size.56 */57 #define CONVERT_SIZE(type_from, type_to, count) \58 ((sizeof(type_from) / sizeof(type_to)) * (count))59 60 /** Registers the module service at the name server.61 *62 * @param[in] me The module service.63 * @param[out] phonehash The created phone hash.64 */65 #define REGISTER_ME(me, phonehash) \66 ipc_connect_to_me(PHONE_NS, (me), 0, 0, (phonehash))67 68 51 /** Connect to the needed module function type definition. 69 52 * 70 * @param[in] need The needed module service. 71 * @return The phone of the needed service. 53 * @param[in] need The needed module service. 54 * 55 * @return The phone of the needed service. 56 * 72 57 */ 73 58 typedef int connect_module_t(services_t need); 74 59 75 extern void answer_call(ipc_callid_t, int, ipc_call_t *, int);76 extern int bind_service(services_t, ipcarg_t, ipcarg_t, ipcarg_t,60 extern void answer_call(ipc_callid_t, int, ipc_call_t *, size_t); 61 extern int bind_service(services_t, sysarg_t, sysarg_t, sysarg_t, 77 62 async_client_conn_t); 78 extern int bind_service_timeout(services_t, ipcarg_t, ipcarg_t, ipcarg_t,63 extern int bind_service_timeout(services_t, sysarg_t, sysarg_t, sysarg_t, 79 64 async_client_conn_t, suseconds_t); 80 65 extern int connect_to_service(services_t); 81 66 extern int connect_to_service_timeout(services_t, suseconds_t); 82 extern int data_receive(void **, size_t *);83 67 extern int data_reply(void *, size_t); 84 extern void refresh_answer(ipc_call_t *, int *);68 extern void refresh_answer(ipc_call_t *, size_t *); 85 69 86 70 #endif -
uspace/lib/c/include/net/socket.h
rcead2aa r357b5f5 60 60 extern int sendto(int, const void *, size_t, int, const struct sockaddr *, 61 61 socklen_t); 62 extern int recv(int, void *, size_t, int);63 extern int recvfrom(int, void *, size_t, int, struct sockaddr *, socklen_t *);62 extern ssize_t recv(int, void *, size_t, int); 63 extern ssize_t recvfrom(int, void *, size_t, int, struct sockaddr *, socklen_t *); 64 64 extern int getsockopt(int, int, int, void *, size_t *); 65 65 extern int setsockopt(int, int, int, const void *, size_t); -
uspace/lib/c/include/stdlib.h
rcead2aa r357b5f5 46 46 } while (0) 47 47 48 #define core() \ 49 *((int *) 0) = 0xbadbad; 50 48 51 #define exit(status) _exit((status)) 49 52 -
uspace/lib/c/include/task.h
rcead2aa r357b5f5 47 47 extern task_id_t task_get_id(void); 48 48 extern int task_set_name(const char *); 49 extern int task_kill(task_id_t); 50 49 51 extern task_id_t task_spawn(const char *, const char *const[], int *); 50 52 extern int task_spawnv(task_id_t *, const char *path, const char *const []);
Note:
See TracChangeset
for help on using the changeset viewer.