Changeset 0773396 in mainline for uspace/lib/c
- Timestamp:
- 2013-12-25T13:05:25Z (12 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- bc54126c
- Parents:
- f4a47e52 (diff), 6946f23 (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:
-
- 12 added
- 2 deleted
- 50 edited
- 2 moved
Legend:
- Unmodified
- Added
- Removed
-
uspace/lib/c/Makefile
rf4a47e52 r0773396 61 61 generic/bd.c \ 62 62 generic/bd_srv.c \ 63 generic/bitops.c \64 63 generic/cap.c \ 65 64 generic/cfg.c \ 66 65 generic/checksum.c \ 67 66 generic/clipboard.c \ 67 generic/corecfg.c \ 68 68 generic/devman.c \ 69 69 generic/device/hw_res.c \ 70 70 generic/device/hw_res_parsed.c \ 71 generic/device/pio_window.c \ 71 72 generic/device/char_dev.c \ 72 73 generic/device/clock_dev.c \ … … 76 77 generic/device/pci.c \ 77 78 generic/device/ahci.c \ 79 generic/dhcp.c \ 78 80 generic/dnsr.c \ 79 81 generic/dlfcn.c \ … … 98 100 generic/inetcfg.c \ 99 101 generic/inetping.c \ 100 generic/inetping6.c \101 102 generic/io/asprintf.c \ 102 103 generic/io/input.c \ … … 142 143 generic/net/socket_client.c \ 143 144 generic/net/socket_parse.c \ 145 generic/setjmp.c \ 144 146 generic/stack.c \ 145 147 generic/stacktrace.c \ -
uspace/lib/c/arch/amd64/_link.ld.in
rf4a47e52 r0773396 39 39 .data : { 40 40 *(.data); 41 *(.data.rel*); 41 42 } :data 42 43 -
uspace/lib/c/arch/ia32/Makefile.inc
rf4a47e52 r0773396 34 34 arch/$(UARCH)/src/fibril.S \ 35 35 arch/$(UARCH)/src/tls.c \ 36 arch/$(UARCH)/src/setjmp.S \37 36 arch/$(UARCH)/src/stacktrace.c \ 38 37 arch/$(UARCH)/src/stacktrace_asm.S \ -
uspace/lib/c/arch/sparc64/Makefile.common
rf4a47e52 r0773396 27 27 # 28 28 29 GCC_CFLAGS += -mcpu=ultrasparc -m64 -mcmodel=medlow 29 ifeq ($(PROCESSOR),sun4v) 30 GCC_CFLAGS += -mcpu=niagara -mno-vis 31 else 32 GCC_CFLAGS += -mcpu=ultrasparc 33 endif 34 35 GCC_CFLAGS += -m64 -mcmodel=medlow 36 30 37 LFLAGS = -no-check-sections 31 38 -
uspace/lib/c/generic/adt/hash_table.c
rf4a47e52 r0773396 227 227 228 228 /* Check for duplicates. */ 229 list_foreach(h->bucket[idx], cur) {229 list_foreach(h->bucket[idx], link, ht_link_t, cur_link) { 230 230 /* 231 231 * We could filter out items using their hashes first, but 232 232 * calling equal() might very well be just as fast. 233 233 */ 234 ht_link_t *cur_link = member_to_inst(cur, ht_link_t, link);235 234 if (h->op->equal(cur_link, item)) 236 235 return false; … … 258 257 size_t idx = h->op->key_hash(key) % h->bucket_cnt; 259 258 260 list_foreach(h->bucket[idx], cur) { 261 ht_link_t *cur_link = member_to_inst(cur, ht_link_t, link); 259 list_foreach(h->bucket[idx], link, ht_link_t, cur_link) { 262 260 /* 263 261 * Is this is the item we are looking for? We could have first -
uspace/lib/c/generic/adt/list.c
rf4a47e52 r0773396 102 102 unsigned int count = 0; 103 103 104 list_foreach(*list, link) { 104 link_t *link = list_first(list); 105 while (link != NULL) { 105 106 count++; 107 link = list_next(link, list); 106 108 } 107 109 -
uspace/lib/c/generic/cfg.c
rf4a47e52 r0773396 83 83 return true; 84 84 85 list_foreach(data->sections, link) { 86 const cfg_section_t *section = cfg_section_instance(link); 87 85 cfg_file_foreach(data, section) { 88 86 if (!list_empty(§ion->entries)) 89 87 return false; … … 413 411 const cfg_section_t *cfg_find_section(const cfg_file_t *data, const char *title) 414 412 { 415 list_foreach(data->sections, link) { 416 const cfg_section_t *section = cfg_section_instance(link); 417 413 cfg_file_foreach(data, section) { 418 414 if (str_cmp(section->title, title) == 0) 419 415 return section; … … 434 430 const char *cfg_find_value(const cfg_section_t *section, const char *key) 435 431 { 436 list_foreach(section->entries, link) { 437 const cfg_entry_t *entry = cfg_entry_instance(link); 438 432 cfg_section_foreach(section, entry) { 439 433 if (str_cmp(entry->key, key) == 0) 440 434 return entry->value; -
uspace/lib/c/generic/ddi.c
rf4a47e52 r0773396 42 42 #include <ddi.h> 43 43 #include <libarch/ddi.h> 44 #include <device/hw_res.h> 45 #include <device/hw_res_parsed.h> 46 #include <device/pio_window.h> 44 47 #include <libc.h> 45 48 #include <task.h> … … 76 79 * 77 80 */ 78 int physmem_map( void *phys, size_t pages, unsigned int flags, void **virt)81 int physmem_map(uintptr_t phys, size_t pages, unsigned int flags, void **virt) 79 82 { 80 83 return __SYSCALL5(SYS_PHYSMEM_MAP, (sysarg_t) phys, … … 83 86 84 87 int dmamem_map(void *virt, size_t size, unsigned int map_flags, 85 unsigned int flags, void **phys)88 unsigned int flags, uintptr_t *phys) 86 89 { 87 90 return (int) __SYSCALL6(SYS_DMAMEM_MAP, (sysarg_t) size, … … 90 93 } 91 94 92 int dmamem_map_anonymous(size_t size, unsigned int map_flags, 93 unsigned int flags, void **phys, void **virt) 94 { 95 int dmamem_map_anonymous(size_t size, uintptr_t constraint, 96 unsigned int map_flags, unsigned int flags, uintptr_t *phys, void **virt) 97 { 98 *phys = constraint; 99 95 100 return (int) __SYSCALL6(SYS_DMAMEM_MAP, (sysarg_t) size, 96 101 (sysarg_t) map_flags, (sysarg_t) flags | DMAMEM_FLAGS_ANONYMOUS, … … 132 137 133 138 return __SYSCALL1(SYS_IOSPACE_ENABLE, (sysarg_t) &arg); 139 } 140 141 /** Enable PIO for specified address range. 142 * 143 * @param range I/O range to be enable. 144 * @param virt Virtual address for application's PIO operations. 145 */ 146 int pio_enable_range(addr_range_t *range, void **virt) 147 { 148 return pio_enable(RNGABSPTR(*range), RNGSZ(*range), virt); 149 } 150 151 /** Enable PIO for specified HW resource wrt. to the PIO window. 152 * 153 * @param win PIO window. May be NULL if the resources are known to be 154 * absolute. 155 * @param res Resources specifying the I/O range wrt. to the PIO window. 156 * @param virt Virtual address for application's PIO operations. 157 * 158 * @return EOK on success. 159 * @return Negative error code on failure. 160 * 161 */ 162 int pio_enable_resource(pio_window_t *win, hw_resource_t *res, void **virt) 163 { 164 uintptr_t addr; 165 size_t size; 166 167 switch (res->type) { 168 case IO_RANGE: 169 addr = res->res.io_range.address; 170 if (res->res.io_range.relative) { 171 if (!win) 172 return EINVAL; 173 addr += win->io.base; 174 } 175 size = res->res.io_range.size; 176 break; 177 case MEM_RANGE: 178 addr = res->res.mem_range.address; 179 if (res->res.mem_range.relative) { 180 if (!win) 181 return EINVAL; 182 addr += win->mem.base; 183 } 184 size = res->res.mem_range.size; 185 break; 186 default: 187 return EINVAL; 188 } 189 190 return pio_enable((void *) addr, size, virt); 134 191 } 135 192 … … 158 215 if (!virt) 159 216 return EINVAL; 160 161 void *phys_frame =162 (void *)ALIGN_DOWN((uintptr_t) pio_addr, PAGE_SIZE);163 size_t offset = pio_addr - phys_frame;217 218 uintptr_t phys_frame = 219 ALIGN_DOWN((uintptr_t) pio_addr, PAGE_SIZE); 220 size_t offset = (uintptr_t) pio_addr - phys_frame; 164 221 size_t pages = SIZE2PAGES(offset + size); 165 222 -
uspace/lib/c/generic/device/hw_res.c
rf4a47e52 r0773396 44 44 45 45 async_exch_t *exch = async_exchange_begin(sess); 46 if (exch == NULL) 47 return ENOMEM; 46 48 47 int rc = async_req_1_1(exch, DEV_IFACE_ID(HW_RES_DEV_IFACE), 49 48 HW_RES_GET_RESOURCE_LIST, &count); … … 79 78 { 80 79 async_exch_t *exch = async_exchange_begin(sess); 81 if (exch == NULL) 82 return false; 80 83 81 int rc = async_req_1_0(exch, DEV_IFACE_ID(HW_RES_DEV_IFACE), 84 82 HW_RES_ENABLE_INTERRUPT); … … 88 86 } 89 87 90 /** 91 * Setup DMA channel to specified place and mode.92 * @param channel DMA Channel 1,2,3 for 8 bit transfers, 5,6,7 for 16 bit.93 * @param pa Physical address of the buffer. Must be < 16MB for 16 bit and < 1MB94 * for 8 bit transfers.95 * @param size DMA buffer size, limited to 64K.96 * @param mode Mode of the DMA channel:97 * - Read or Write98 * - Allow automatic reset99 * - Use address decrement instead of increment100 * - Use SINGLE/BLOCK/ON DEMAND transfer mode88 /** Setup DMA channel to specified place and mode. 89 * 90 * @param channel DMA channel. 91 * @param pa Physical address of the buffer. 92 * @param size DMA buffer size. 93 * @param mode Mode of the DMA channel: 94 * - Read or Write 95 * - Allow automatic reset 96 * - Use address decrement instead of increment 97 * - Use SINGLE/BLOCK/ON DEMAND transfer mode 98 * 101 99 * @return Error code. 100 * 102 101 */ 103 102 int hw_res_dma_channel_setup(async_sess_t *sess, … … 105 104 { 106 105 async_exch_t *exch = async_exchange_begin(sess); 107 if (exch == NULL) 108 return ENOMEM; 106 109 107 const uint32_t packed = (channel & 0xffff) | (mode << 16); 110 108 const int ret = async_req_4_0(exch, DEV_IFACE_ID(HW_RES_DEV_IFACE), 111 109 HW_RES_DMA_CHANNEL_SETUP, packed, pa, size); 110 112 111 async_exchange_end(exch); 113 112 114 113 return ret; 115 114 } 116 115 117 /** 118 * Query remaining bytes in the buffer. 119 * @param channel DMA Channel 1,2,3 for 8 bit transfers, 5,6,7 for 16 bit. 120 * @return Number of bytes remaining in the buffer(>=0) or error code(<0). 116 /** Query remaining bytes in the buffer. 117 * 118 * @param channel DMA channel. 119 * 120 * @return Number of bytes remaining in the buffer if positive. 121 * @return Error code if negative. 122 * 121 123 */ 122 124 int hw_res_dma_channel_remain(async_sess_t *sess, unsigned channel) 123 125 { 124 126 async_exch_t *exch = async_exchange_begin(sess); 125 if (exch == NULL) 126 return ENOMEM; 127 127 128 sysarg_t remain; 128 129 const int ret = async_req_2_1(exch, DEV_IFACE_ID(HW_RES_DEV_IFACE), 129 130 HW_RES_DMA_CHANNEL_REMAIN, channel, &remain); 131 130 132 async_exchange_end(exch); 133 131 134 if (ret == EOK) 132 135 return remain; 136 133 137 return ret; 134 138 } -
uspace/lib/c/generic/device/hw_res_parsed.c
rf4a47e52 r0773396 80 80 } 81 81 82 static uint64_t absolutize(uint64_t addr, bool relative, uint64_t base) 83 { 84 if (!relative) 85 return addr; 86 else 87 return addr + base; 88 } 89 90 static uint64_t relativize(uint64_t addr, bool relative, uint64_t base) 91 { 92 if (relative) 93 return addr; 94 else 95 return addr - base; 96 } 97 82 98 static void hw_res_parse_add_io_range(hw_res_list_parsed_t *out, 83 const hw_resource_t *res, int flags) 84 { 99 const pio_window_t *win, const hw_resource_t *res, int flags) 100 { 101 endianness_t endianness; 102 uint64_t absolute; 103 uint64_t relative; 104 size_t size; 105 85 106 assert(res && (res->type == IO_RANGE)); 86 107 87 uint64_t address = res->res.io_range.address; 88 endianness_t endianness = res->res.io_range.endianness; 89 size_t size = res->res.io_range.size; 108 absolute = absolutize(res->res.io_range.address, 109 res->res.io_range.relative, win->io.base); 110 relative = relativize(res->res.io_range.address, 111 res->res.io_range.relative, win->io.base); 112 size = res->res.io_range.size; 113 endianness = res->res.io_range.endianness; 90 114 91 115 if ((size == 0) && (!(flags & HW_RES_KEEP_ZERO_AREA))) … … 97 121 if (!keep_duplicit) { 98 122 for (size_t i = 0; i < count; i++) { 99 uint64_t s_address = out->io_ranges.ranges[i].address; 100 size_t s_size = out->io_ranges.ranges[i].size; 123 uint64_t s_address; 124 size_t s_size; 125 126 s_address = RNGABS(out->io_ranges.ranges[i]); 127 s_size = RNGSZ(out->io_ranges.ranges[i]); 101 128 102 if ((address == s_address) && (size == s_size)) 103 return; 104 } 105 } 106 107 out->io_ranges.ranges[count].address = address; 129 if ((absolute == s_address) && (size == s_size)) 130 return; 131 } 132 } 133 134 RNGABS(out->io_ranges.ranges[count]) = absolute; 135 RNGREL(out->io_ranges.ranges[count]) = relative; 136 RNGSZ(out->io_ranges.ranges[count]) = size; 108 137 out->io_ranges.ranges[count].endianness = endianness; 109 out->io_ranges.ranges[count].size = size;110 138 out->io_ranges.count++; 111 139 } 112 140 113 141 static void hw_res_parse_add_mem_range(hw_res_list_parsed_t *out, 114 const hw_resource_t *res, int flags) 115 { 142 const pio_window_t *win, const hw_resource_t *res, int flags) 143 { 144 endianness_t endianness; 145 uint64_t absolute; 146 uint64_t relative; 147 size_t size; 148 116 149 assert(res && (res->type == MEM_RANGE)); 117 150 118 uint64_t address = res->res.mem_range.address; 119 endianness_t endianness = res->res.mem_range.endianness; 120 size_t size = res->res.mem_range.size; 151 absolute = absolutize(res->res.mem_range.address, 152 res->res.mem_range.relative, win->mem.base); 153 relative = relativize(res->res.mem_range.address, 154 res->res.mem_range.relative, win->mem.base); 155 size = res->res.mem_range.size; 156 endianness = res->res.mem_range.endianness; 121 157 122 158 if ((size == 0) && (!(flags & HW_RES_KEEP_ZERO_AREA))) … … 128 164 if (!keep_duplicit) { 129 165 for (size_t i = 0; i < count; ++i) { 130 uint64_t s_address = out->mem_ranges.ranges[i].address; 131 size_t s_size = out->mem_ranges.ranges[i].size; 166 uint64_t s_address; 167 size_t s_size; 168 169 s_address = RNGABS(out->mem_ranges.ranges[i]);; 170 s_size = RNGSZ(out->mem_ranges.ranges[i]); 132 171 133 if ((address == s_address) && (size == s_size)) 134 return; 135 } 136 } 137 138 out->mem_ranges.ranges[count].address = address; 172 if ((absolute == s_address) && (size == s_size)) 173 return; 174 } 175 } 176 177 RNGABS(out->mem_ranges.ranges[count]) = absolute; 178 RNGREL(out->mem_ranges.ranges[count]) = relative; 179 RNGSZ(out->mem_ranges.ranges[count]) = size; 139 180 out->mem_ranges.ranges[count].endianness = endianness; 140 out->mem_ranges.ranges[count].size = size;141 181 out->mem_ranges.count++; 142 182 } … … 144 184 /** Parse list of hardware resources 145 185 * 146 * @param hw_resources Original structure resource147 * @param [out] out Output parsed resources148 * @param flags Flags of the parsing.149 * HW_RES_KEEP_ZERO_AREA for keeping150 * zero-size areas, HW_RES_KEEP_DUPLICITIES151 * for keep duplicit areas186 * @param win PIO window. 187 * @param res Original structure resource. 188 * @param[out] out Output parsed resources. 189 * @param flags Flags of the parsing: 190 * HW_RES_KEEP_ZERO_AREA for keeping zero-size areas, 191 * HW_RES_KEEP_DUPLICITIES to keep duplicit areas. 152 192 * 153 193 * @return EOK if succeed, error code otherwise. 154 194 * 155 195 */ 156 int hw_res_list_parse(const hw_resource_list_t *hw_resources,157 hw_res_list_parsed_t *out, int flags)158 { 159 if ( (!hw_resources) || (!out))196 int hw_res_list_parse(const pio_window_t *win, 197 const hw_resource_list_t *res, hw_res_list_parsed_t *out, int flags) 198 { 199 if (!res || !out) 160 200 return EINVAL; 161 201 162 size_t res_count = hw_resources->count;202 size_t res_count = res->count; 163 203 hw_res_list_parsed_clean(out); 164 204 … … 174 214 175 215 for (size_t i = 0; i < res_count; ++i) { 176 const hw_resource_t *resource = & (hw_resources->resources[i]);216 const hw_resource_t *resource = &res->resources[i]; 177 217 178 218 switch (resource->type) { … … 181 221 break; 182 222 case IO_RANGE: 183 hw_res_parse_add_io_range(out, resource, flags);223 hw_res_parse_add_io_range(out, win, resource, flags); 184 224 break; 185 225 case MEM_RANGE: 186 hw_res_parse_add_mem_range(out, resource, flags);226 hw_res_parse_add_mem_range(out, win, resource, flags); 187 227 break; 188 228 case DMA_CHANNEL_8: … … 216 256 hw_res_list_parsed_t *hw_res_parsed, int flags) 217 257 { 258 pio_window_t pio_window; 259 int rc; 260 218 261 if (!hw_res_parsed) 219 262 return EBADMEM; … … 222 265 hw_res_list_parsed_clean(hw_res_parsed); 223 266 memset(&hw_resources, 0, sizeof(hw_resource_list_t)); 224 225 int rc = hw_res_get_resource_list(sess, &hw_resources); 267 268 rc = pio_window_get(sess, &pio_window); 269 if (rc != EOK) 270 return rc; 271 272 rc = hw_res_get_resource_list(sess, &hw_resources); 226 273 if (rc != EOK) 227 274 return rc; 228 229 rc = hw_res_list_parse(&hw_resources, hw_res_parsed, flags); 275 276 rc = hw_res_list_parse(&pio_window, &hw_resources, hw_res_parsed, 277 flags); 230 278 hw_res_clean_resource_list(&hw_resources); 231 279 -
uspace/lib/c/generic/devman.c
rf4a47e52 r0773396 1 1 /* 2 2 * Copyright (c) 2007 Josef Cejka 3 * Copyright (c) 201 1Jiri Svoboda3 * Copyright (c) 2013 Jiri Svoboda 4 4 * Copyright (c) 2010 Lenka Trochtova 5 5 * All rights reserved. … … 230 230 } 231 231 232 match_id_t *match_id = NULL; 233 234 list_foreach(match_ids->ids, link) { 235 match_id = list_get_instance(link, match_id_t, link); 236 232 list_foreach(match_ids->ids, link, match_id_t, match_id) { 237 233 ipc_call_t answer2; 238 234 aid_t req2 = async_send_1(exch, DEVMAN_ADD_MATCH_ID, … … 405 401 } 406 402 407 static int devman_get_str_internal(sysarg_t method, sysarg_t arg1, char *buf,408 s ize_t buf_size)403 static int devman_get_str_internal(sysarg_t method, sysarg_t arg1, 404 sysarg_t arg2, sysarg_t *r1, char *buf, size_t buf_size) 409 405 { 410 406 async_exch_t *exch; … … 416 412 417 413 ipc_call_t answer; 418 aid_t req = async_send_ 1(exch, method, arg1, &answer);414 aid_t req = async_send_2(exch, method, arg1, arg2, &answer); 419 415 aid_t dreq = async_data_read(exch, buf, buf_size - 1, &dreply); 420 416 async_wait_for(dreq, &dretval); … … 434 430 } 435 431 432 if (r1 != NULL) 433 *r1 = IPC_GET_ARG1(answer); 436 434 act_size = IPC_GET_ARG2(dreply); 437 435 assert(act_size <= buf_size - 1); … … 443 441 int devman_fun_get_path(devman_handle_t handle, char *buf, size_t buf_size) 444 442 { 445 return devman_get_str_internal(DEVMAN_FUN_GET_PATH, handle, buf, 446 buf_size); 443 return devman_get_str_internal(DEVMAN_FUN_GET_PATH, handle, 0, NULL, 444 buf, buf_size); 445 } 446 447 int devman_fun_get_match_id(devman_handle_t handle, size_t index, char *buf, 448 size_t buf_size, unsigned int *rscore) 449 { 450 int rc; 451 sysarg_t score = 0; 452 453 rc = devman_get_str_internal(DEVMAN_FUN_GET_MATCH_ID, handle, index, 454 &score, buf, buf_size); 455 if (rc != EOK) 456 return rc; 457 458 *rscore = score; 459 return rc; 447 460 } 448 461 449 462 int devman_fun_get_name(devman_handle_t handle, char *buf, size_t buf_size) 450 463 { 451 return devman_get_str_internal(DEVMAN_FUN_GET_NAME, handle, buf,452 buf _size);464 return devman_get_str_internal(DEVMAN_FUN_GET_NAME, handle, 0, NULL, 465 buf, buf_size); 453 466 } 454 467 455 468 int devman_fun_get_driver_name(devman_handle_t handle, char *buf, size_t buf_size) 456 469 { 457 return devman_get_str_internal(DEVMAN_FUN_GET_DRIVER_NAME, handle, buf,458 buf_size);470 return devman_get_str_internal(DEVMAN_FUN_GET_DRIVER_NAME, handle, 0, 471 NULL, buf, buf_size); 459 472 } 460 473 … … 583 596 } 584 597 598 int devman_dev_get_parent(devman_handle_t devh, devman_handle_t *funh) 599 { 600 async_exch_t *exch = devman_exchange_begin(DEVMAN_CLIENT); 601 if (exch == NULL) 602 return ENOMEM; 603 604 sysarg_t retval = async_req_1_1(exch, DEVMAN_DEV_GET_PARENT, 605 devh, funh); 606 607 devman_exchange_end(exch); 608 return (int) retval; 609 } 610 585 611 int devman_fun_sid_to_handle(service_id_t sid, devman_handle_t *handle) 586 612 { … … 596 622 } 597 623 624 int devman_get_drivers(devman_handle_t **drvs, 625 size_t *count) 626 { 627 return devman_get_handles_internal(DEVMAN_GET_DRIVERS, 0, drvs, count); 628 } 629 630 int devman_driver_get_devices(devman_handle_t drvh, devman_handle_t **devs, 631 size_t *count) 632 { 633 return devman_get_handles_internal(DEVMAN_DRIVER_GET_DEVICES, 634 drvh, devs, count); 635 } 636 637 int devman_driver_get_handle(const char *drvname, devman_handle_t *handle) 638 { 639 async_exch_t *exch; 640 641 exch = devman_exchange_begin(DEVMAN_CLIENT); 642 if (exch == NULL) 643 return ENOMEM; 644 645 ipc_call_t answer; 646 aid_t req = async_send_0(exch, DEVMAN_DRIVER_GET_HANDLE, &answer); 647 sysarg_t retval = async_data_write_start(exch, drvname, 648 str_size(drvname)); 649 650 devman_exchange_end(exch); 651 652 if (retval != EOK) { 653 async_forget(req); 654 return retval; 655 } 656 657 async_wait_for(req, &retval); 658 659 if (retval != EOK) { 660 if (handle != NULL) 661 *handle = (devman_handle_t) -1; 662 663 return retval; 664 } 665 666 if (handle != NULL) 667 *handle = (devman_handle_t) IPC_GET_ARG1(answer); 668 669 return retval; 670 } 671 672 int devman_driver_get_match_id(devman_handle_t handle, size_t index, char *buf, 673 size_t buf_size, unsigned int *rscore) 674 { 675 int rc; 676 sysarg_t score = 0; 677 678 rc = devman_get_str_internal(DEVMAN_DRIVER_GET_MATCH_ID, handle, index, 679 &score, buf, buf_size); 680 if (rc != EOK) 681 return rc; 682 683 *rscore = score; 684 return rc; 685 } 686 687 int devman_driver_get_name(devman_handle_t handle, char *buf, size_t buf_size) 688 { 689 return devman_get_str_internal(DEVMAN_DRIVER_GET_NAME, handle, 0, NULL, 690 buf, buf_size); 691 } 692 693 int devman_driver_get_state(devman_handle_t drvh, driver_state_t *rstate) 694 { 695 sysarg_t state; 696 async_exch_t *exch = devman_exchange_begin(DEVMAN_CLIENT); 697 if (exch == NULL) 698 return ENOMEM; 699 700 int rc = async_req_1_1(exch, DEVMAN_DRIVER_GET_STATE, drvh, 701 &state); 702 703 devman_exchange_end(exch); 704 if (rc != EOK) 705 return rc; 706 707 *rstate = state; 708 return rc; 709 } 710 711 int devman_driver_load(devman_handle_t drvh) 712 { 713 async_exch_t *exch = devman_exchange_begin(DEVMAN_CLIENT); 714 if (exch == NULL) 715 return ENOMEM; 716 717 int rc = async_req_1_0(exch, DEVMAN_DRIVER_LOAD, drvh); 718 719 devman_exchange_end(exch); 720 return rc; 721 } 722 598 723 /** @} 599 724 */ -
uspace/lib/c/generic/dnsr.c
rf4a47e52 r0773396 67 67 } 68 68 69 int dnsr_name2host(const char *name, dnsr_hostinfo_t **rinfo, uint16_t af)69 int dnsr_name2host(const char *name, dnsr_hostinfo_t **rinfo, ip_ver_t ver) 70 70 { 71 71 dnsr_hostinfo_t *info = calloc(1, sizeof(dnsr_hostinfo_t)); … … 76 76 77 77 ipc_call_t answer; 78 aid_t req = async_send_1(exch, DNSR_NAME2HOST, (sysarg_t) af,78 aid_t req = async_send_1(exch, DNSR_NAME2HOST, (sysarg_t) ver, 79 79 &answer); 80 80 -
uspace/lib/c/generic/futex.c
rf4a47e52 r0773396 35 35 #include <futex.h> 36 36 #include <atomic.h> 37 #include <libarch/barrier.h> 37 38 #include <libc.h> 38 39 #include <sys/types.h> … … 59 60 int futex_trydown(futex_t *futex) 60 61 { 61 return cas(futex, 1, 0); 62 int rc; 63 64 rc = cas(futex, 1, 0); 65 CS_ENTER_BARRIER(); 66 67 return rc; 62 68 } 63 69 … … 73 79 int futex_down(futex_t *futex) 74 80 { 75 if ((atomic_signed_t) atomic_predec(futex) < 0) 81 atomic_signed_t nv; 82 83 nv = (atomic_signed_t) atomic_predec(futex); 84 CS_ENTER_BARRIER(); 85 if (nv < 0) 76 86 return __SYSCALL1(SYS_FUTEX_SLEEP, (sysarg_t) &futex->count); 77 87 … … 89 99 int futex_up(futex_t *futex) 90 100 { 101 CS_LEAVE_BARRIER(); 102 91 103 if ((atomic_signed_t) atomic_postinc(futex) < 0) 92 104 return __SYSCALL1(SYS_FUTEX_WAKEUP, (sysarg_t) &futex->count); -
uspace/lib/c/generic/inet.c
rf4a47e52 r0773396 30 30 #include <assert.h> 31 31 #include <errno.h> 32 #include <net/socket_codes.h>33 32 #include <inet/inet.h> 34 33 #include <ipc/inet.h> … … 111 110 112 111 ipc_call_t answer; 113 aid_t req = async_send_ 3(exch, INET_SEND, dgram->tos, ttl, df,114 &answer);112 aid_t req = async_send_4(exch, INET_SEND, dgram->iplink, dgram->tos, 113 ttl, df, &answer); 115 114 116 115 int rc = async_data_write_start(exch, &dgram->src, sizeof(inet_addr_t)); -
uspace/lib/c/generic/inet/addr.c
rf4a47e52 r0773396 33 33 */ 34 34 35 #include <assert.h> 35 36 #include <errno.h> 36 37 #include <unistd.h> … … 48 49 #endif 49 50 51 const addr32_t addr32_broadcast_all_hosts = 0xffffffff; 52 50 53 const addr48_t addr48_broadcast = { 51 54 0xff, 0xff, 0xff, 0xff, 0xff, 0xff … … 57 60 58 61 static const inet_addr_t inet_addr_any_addr = { 59 . family = AF_INET,62 .version = ip_v4, 60 63 .addr = 0 61 64 }; 62 65 63 66 static const inet_addr_t inet_addr_any_addr6 = { 64 . family = AF_INET6,67 .version = ip_v6, 65 68 .addr6 = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} 66 69 }; … … 76 79 } 77 80 81 /** Compare addr48. 82 * 83 * @return Non-zero if equal, zero if not equal. 84 */ 78 85 int addr48_compare(const addr48_t a, const addr48_t b) 79 86 { 80 return memcmp(a, b, 6); 81 } 82 87 return memcmp(a, b, 6) == 0; 88 } 89 90 /** Compare addr128. 91 * 92 * @return Non-zero if equal, zero if not equal. 93 */ 83 94 int addr128_compare(const addr128_t a, const addr128_t b) 84 95 { 85 return memcmp(a, b, 16) ;96 return memcmp(a, b, 16) == 0; 86 97 } 87 98 … … 100 111 void host2addr128_t_be(const addr128_t host, addr128_t be) 101 112 { 102 #ifdef __BE__103 113 memcpy(be, host, 16); 104 #else105 be[0] = host[15];106 be[1] = host[14];107 be[2] = host[13];108 be[3] = host[12];109 be[4] = host[11];110 be[5] = host[10];111 be[6] = host[9];112 be[7] = host[8];113 be[8] = host[7];114 be[9] = host[6];115 be[10] = host[5];116 be[11] = host[4];117 be[12] = host[3];118 be[13] = host[2];119 be[14] = host[1];120 be[15] = host[0];121 #endif122 114 } 123 115 124 116 void addr128_t_be2host(const addr128_t be, addr128_t host) 125 117 { 126 #ifdef __BE__127 118 memcpy(host, be, 16); 128 #else129 host[0] = be[15];130 host[1] = be[14];131 host[2] = be[13];132 host[3] = be[12];133 host[4] = be[11];134 host[5] = be[10];135 host[6] = be[9];136 host[7] = be[8];137 host[8] = be[7];138 host[9] = be[6];139 host[10] = be[5];140 host[11] = be[4];141 host[12] = be[3];142 host[13] = be[2];143 host[14] = be[1];144 host[15] = be[0];145 #endif146 119 } 147 120 148 121 void inet_addr(inet_addr_t *addr, uint8_t a, uint8_t b, uint8_t c, uint8_t d) 149 122 { 150 addr-> family = AF_INET;123 addr->version = ip_v4; 151 124 addr->addr = ((addr32_t) a << 24) | ((addr32_t) b << 16) | 152 125 ((addr32_t) c << 8) | ((addr32_t) d); … … 156 129 uint8_t prefix) 157 130 { 158 naddr-> family = AF_INET;131 naddr->version = ip_v4; 159 132 naddr->addr = ((addr32_t) a << 24) | ((addr32_t) b << 16) | 160 133 ((addr32_t) c << 8) | ((addr32_t) d); … … 165 138 uint16_t d, uint16_t e, uint16_t f, uint16_t g, uint16_t h) 166 139 { 167 addr-> family = AF_INET6;140 addr->version = ip_v6; 168 141 addr->addr6[0] = (a >> 8) & 0xff; 169 142 addr->addr6[1] = a & 0xff; … … 187 160 uint16_t d, uint16_t e, uint16_t f, uint16_t g, uint16_t h, uint8_t prefix) 188 161 { 189 naddr-> family = AF_INET6;162 naddr->version = ip_v6; 190 163 naddr->addr6[0] = (a >> 8) & 0xff; 191 164 naddr->addr6[1] = a & 0xff; … … 207 180 } 208 181 209 /** Parse network address family.210 * 211 * @param text Network address in common notation.212 * @param af Place to store network address family.182 /** Determine address version. 183 * 184 * @param text Address in common notation. 185 * @param af Place to store address version. 213 186 * 214 187 * @return EOK on success, EINVAL if input is not in valid format. 215 188 * 216 189 */ 217 int inet_addr_family(const char *text, uint16_t *af)190 static int inet_addr_version(const char *text, ip_ver_t *ver) 218 191 { 219 192 char *dot = str_chr(text, '.'); 220 193 if (dot != NULL) { 221 * af = AF_INET;194 *ver = ip_v4; 222 195 return EOK; 223 196 } 224 197 225 198 char *collon = str_chr(text, ':'); 226 199 if (collon != NULL) { 227 * af = AF_INET6;200 *ver = ip_v6; 228 201 return EOK; 229 202 } 230 203 231 204 return EINVAL; 232 205 } 233 206 207 static int ipver_af(ip_ver_t ver) 208 { 209 switch (ver) { 210 case ip_any: 211 return AF_NONE; 212 case ip_v4: 213 return AF_INET; 214 case ip_v6: 215 return AF_INET6; 216 default: 217 assert(false); 218 return EINVAL; 219 } 220 } 221 222 ip_ver_t ipver_from_af(int af) 223 { 224 switch (af) { 225 case AF_NONE: 226 return ip_any; 227 case AF_INET: 228 return ip_v4; 229 case AF_INET6: 230 return ip_v6; 231 default: 232 assert(false); 233 return EINVAL; 234 } 235 } 236 234 237 void inet_naddr_addr(const inet_naddr_t *naddr, inet_addr_t *addr) 235 238 { 236 addr-> family = naddr->family;239 addr->version = naddr->version; 237 240 memcpy(addr->addr6, naddr->addr6, 16); 238 241 } … … 241 244 inet_naddr_t *naddr) 242 245 { 243 naddr-> family = addr->family;246 naddr->version = addr->version; 244 247 memcpy(naddr->addr6, addr->addr6, 16); 245 248 naddr->prefix = prefix; … … 248 251 void inet_addr_any(inet_addr_t *addr) 249 252 { 250 addr-> family = AF_NONE;253 addr->version = ip_any; 251 254 memset(addr->addr6, 0, 16); 252 255 } … … 254 257 void inet_naddr_any(inet_naddr_t *naddr) 255 258 { 256 naddr-> family = AF_NONE;259 naddr->version = ip_any; 257 260 memset(naddr->addr6, 0, 16); 258 261 naddr->prefix = 0; … … 261 264 int inet_addr_compare(const inet_addr_t *a, const inet_addr_t *b) 262 265 { 263 if (a-> family != b->family)266 if (a->version != b->version) 264 267 return 0; 265 266 switch (a-> family) {267 case AF_INET:268 269 switch (a->version) { 270 case ip_v4: 268 271 return (a->addr == b->addr); 269 case AF_INET6:272 case ip_v6: 270 273 return addr128_compare(a->addr6, b->addr6); 271 274 default: … … 276 279 int inet_addr_is_any(const inet_addr_t *addr) 277 280 { 278 return ((addr-> family == 0) ||281 return ((addr->version == ip_any) || 279 282 (inet_addr_compare(addr, &inet_addr_any_addr)) || 280 283 (inet_addr_compare(addr, &inet_addr_any_addr6))); … … 283 286 int inet_naddr_compare(const inet_naddr_t *naddr, const inet_addr_t *addr) 284 287 { 285 if (naddr-> family != addr->family)288 if (naddr->version != addr->version) 286 289 return 0; 287 290 288 switch (naddr-> family) {289 case AF_INET:291 switch (naddr->version) { 292 case ip_v4: 290 293 return (naddr->addr == addr->addr); 291 case AF_INET6:294 case ip_v6: 292 295 return addr128_compare(naddr->addr6, addr->addr6); 293 296 default: … … 298 301 int inet_naddr_compare_mask(const inet_naddr_t *naddr, const inet_addr_t *addr) 299 302 { 300 if (naddr-> family != addr->family)303 if (naddr->version != addr->version) 301 304 return 0; 302 303 switch (naddr-> family) {304 case AF_INET:305 306 switch (naddr->version) { 307 case ip_v4: 305 308 if (naddr->prefix > 32) 306 309 return 0; 307 310 308 311 addr32_t mask = 309 312 BIT_RANGE(addr32_t, 31, 31 - (naddr->prefix - 1)); 310 313 return ((naddr->addr & mask) == (addr->addr & mask)); 311 case AF_INET6:314 case ip_v6: 312 315 if (naddr->prefix > 128) 313 316 return 0; … … 350 353 int inet_addr_parse(const char *text, inet_addr_t *addr) 351 354 { 352 int rc = inet_addr_ family(text, &addr->family);355 int rc = inet_addr_version(text, &addr->version); 353 356 if (rc != EOK) 354 357 return rc; 355 358 356 359 uint8_t buf[16]; 357 rc = inet_pton( addr->family, text, buf);360 rc = inet_pton(ipver_af(addr->version), text, buf); 358 361 if (rc != EOK) 359 362 return rc; 360 363 361 switch (addr-> family) {362 case AF_INET:364 switch (addr->version) { 365 case ip_v4: 363 366 addr->addr = (buf[0] << 24) | (buf[1] << 16) | (buf[2] << 8) | 364 367 buf[3]; 365 368 break; 366 case AF_INET6:369 case ip_v6: 367 370 memcpy(addr->addr6, buf, 16); 368 371 break; … … 390 393 *slash = 0; 391 394 392 int rc = inet_addr_ family(text, &naddr->family);395 int rc = inet_addr_version(text, &naddr->version); 393 396 if (rc != EOK) 394 397 return rc; 395 398 396 399 uint8_t buf[16]; 397 rc = inet_pton( naddr->family, text, buf);400 rc = inet_pton(ipver_af(naddr->version), text, buf); 398 401 *slash = '/'; 399 402 … … 404 407 uint8_t prefix; 405 408 406 switch (naddr-> family) {407 case AF_INET:409 switch (naddr->version) { 410 case ip_v4: 408 411 prefix = strtoul(slash, &slash, 10); 409 412 if (prefix > 32) … … 415 418 416 419 break; 417 case AF_INET6:420 case ip_v6: 418 421 prefix = strtoul(slash, &slash, 10); 419 422 if (prefix > 128) … … 445 448 int rc = 0; 446 449 447 switch (addr-> family) {448 case AF_NONE:450 switch (addr->version) { 451 case ip_any: 449 452 rc = asprintf(bufp, "none"); 450 453 break; 451 case AF_INET:454 case ip_v4: 452 455 rc = asprintf(bufp, "%u.%u.%u.%u", (addr->addr >> 24) & 0xff, 453 456 (addr->addr >> 16) & 0xff, (addr->addr >> 8) & 0xff, 454 457 addr->addr & 0xff); 455 458 break; 456 case AF_INET6:459 case ip_v6: 457 460 *bufp = (char *) malloc(INET6_ADDRSTRLEN); 458 461 if (*bufp == NULL) … … 485 488 char prefix[INET_PREFIXSTRSIZE]; 486 489 487 switch (naddr-> family) {488 case AF_NONE:490 switch (naddr->version) { 491 case ip_any: 489 492 rc = asprintf(bufp, "none"); 490 493 break; 491 case AF_INET:494 case ip_v4: 492 495 rc = asprintf(bufp, "%" PRIu8 ".%" PRIu8 ".%" PRIu8 ".%" PRIu8 493 496 "/%" PRIu8, (naddr->addr >> 24) & 0xff, … … 495 498 naddr->addr & 0xff, naddr->prefix); 496 499 break; 497 case AF_INET6:500 case ip_v6: 498 501 *bufp = (char *) malloc(INET6_ADDRSTRLEN + INET_PREFIXSTRSIZE); 499 502 if (*bufp == NULL) … … 527 530 } 528 531 529 uint16_t inet_addr_get(const inet_addr_t *addr, addr32_t *v4, addr128_t *v6)530 { 531 switch (addr-> family) {532 case AF_INET:532 ip_ver_t inet_addr_get(const inet_addr_t *addr, addr32_t *v4, addr128_t *v6) 533 { 534 switch (addr->version) { 535 case ip_v4: 533 536 if (v4 != NULL) 534 537 *v4 = addr->addr; 535 536 break; 537 case AF_INET6: 538 break; 539 case ip_v6: 538 540 if (v6 != NULL) 539 541 memcpy(*v6, addr->addr6, 16); 540 541 break; 542 } 543 544 return addr->family; 545 } 546 547 uint16_t inet_naddr_get(const inet_naddr_t *naddr, addr32_t *v4, addr128_t *v6, 542 break; 543 default: 544 assert(false); 545 break; 546 } 547 548 return addr->version; 549 } 550 551 ip_ver_t inet_naddr_get(const inet_naddr_t *naddr, addr32_t *v4, addr128_t *v6, 548 552 uint8_t *prefix) 549 553 { 550 switch (naddr-> family) {551 case AF_INET:554 switch (naddr->version) { 555 case ip_v4: 552 556 if (v4 != NULL) 553 557 *v4 = naddr->addr; 554 555 558 if (prefix != NULL) 556 559 *prefix = naddr->prefix; 557 558 break; 559 case AF_INET6: 560 break; 561 case ip_v6: 560 562 if (v6 != NULL) 561 563 memcpy(*v6, naddr->addr6, 16); 562 563 564 if (prefix != NULL) 564 565 *prefix = naddr->prefix; 565 566 break; 567 } 568 569 return naddr->family; 566 break; 567 default: 568 assert(false); 569 break; 570 } 571 572 return naddr->version; 570 573 } 571 574 572 575 void inet_addr_set(addr32_t v4, inet_addr_t *addr) 573 576 { 574 addr-> family = AF_INET;577 addr->version = ip_v4; 575 578 addr->addr = v4; 576 579 } … … 578 581 void inet_naddr_set(addr32_t v4, uint8_t prefix, inet_naddr_t *naddr) 579 582 { 580 naddr-> family = AF_INET;583 naddr->version = ip_v4; 581 584 naddr->addr = v4; 582 585 naddr->prefix = prefix; … … 585 588 void inet_sockaddr_in_addr(const sockaddr_in_t *sockaddr_in, inet_addr_t *addr) 586 589 { 587 addr-> family = AF_INET;590 addr->version = ip_v4; 588 591 addr->addr = uint32_t_be2host(sockaddr_in->sin_addr.s_addr); 589 592 } … … 591 594 void inet_addr_set6(addr128_t v6, inet_addr_t *addr) 592 595 { 593 addr-> family = AF_INET6;596 addr->version = ip_v6; 594 597 memcpy(addr->addr6, v6, 16); 595 598 } … … 597 600 void inet_naddr_set6(addr128_t v6, uint8_t prefix, inet_naddr_t *naddr) 598 601 { 599 naddr-> family = AF_INET6;602 naddr->version = ip_v6; 600 603 memcpy(naddr->addr6, v6, 16); 601 604 naddr->prefix = prefix; … … 605 608 inet_addr_t *addr) 606 609 { 607 addr-> family = AF_INET6;610 addr->version = ip_v6; 608 611 addr128_t_be2host(sockaddr_in6->sin6_addr.s6_addr, addr->addr6); 609 612 } … … 612 615 sockaddr_in_t *sockaddr_in, sockaddr_in6_t *sockaddr_in6) 613 616 { 614 switch (addr-> family) {615 case AF_INET:617 switch (addr->version) { 618 case ip_v4: 616 619 if (sockaddr_in != NULL) { 617 620 sockaddr_in->sin_family = AF_INET; 618 621 sockaddr_in->sin_addr.s_addr = host2uint32_t_be(addr->addr); 619 622 } 620 621 break; 622 case AF_INET6: 623 break; 624 case ip_v6: 623 625 if (sockaddr_in6 != NULL) { 624 626 sockaddr_in6->sin6_family = AF_INET6; 625 627 host2addr128_t_be(addr->addr6, sockaddr_in6->sin6_addr.s6_addr); 626 628 } 627 628 break; 629 } 630 631 return addr->family; 629 break; 630 default: 631 assert(false); 632 break; 633 } 634 635 return ipver_af(addr->version); 636 } 637 638 int inet_addr_sockaddr(const inet_addr_t *addr, uint16_t port, 639 sockaddr_t **nsockaddr, socklen_t *naddrlen) 640 { 641 sockaddr_in_t *sa4; 642 sockaddr_in6_t *sa6; 643 644 switch (addr->version) { 645 case ip_v4: 646 sa4 = calloc(1, sizeof(sockaddr_in_t)); 647 if (sa4 == NULL) 648 return ENOMEM; 649 650 sa4->sin_family = AF_INET; 651 sa4->sin_port = host2uint16_t_be(port); 652 sa4->sin_addr.s_addr = host2uint32_t_be(addr->addr); 653 if (nsockaddr != NULL) 654 *nsockaddr = (sockaddr_t *)sa4; 655 if (naddrlen != NULL) 656 *naddrlen = sizeof(*sa4); 657 break; 658 case ip_v6: 659 sa6 = calloc(1, sizeof(sockaddr_in6_t)); 660 if (sa6 == NULL) 661 return ENOMEM; 662 663 sa6->sin6_family = AF_INET6; 664 sa6->sin6_port = host2uint16_t_be(port); 665 host2addr128_t_be(addr->addr6, sa6->sin6_addr.s6_addr); 666 if (nsockaddr != NULL) 667 *nsockaddr = (sockaddr_t *)sa6; 668 if (naddrlen != NULL) 669 *naddrlen = sizeof(*sa6); 670 break; 671 default: 672 assert(false); 673 break; 674 } 675 676 return EOK; 632 677 } 633 678 -
uspace/lib/c/generic/inetcfg.c
rf4a47e52 r0773396 267 267 } 268 268 269 int inetcfg_link_add(sysarg_t link_id) 270 { 271 async_exch_t *exch = async_exchange_begin(inetcfg_sess); 272 273 int rc = async_req_1_0(exch, INETCFG_LINK_ADD, link_id); 274 async_exchange_end(exch); 275 276 return rc; 277 } 278 269 279 int inetcfg_link_get(sysarg_t link_id, inet_link_info_t *linfo) 270 280 { … … 279 289 aid_t req = async_send_1(exch, INETCFG_LINK_GET, link_id, &answer); 280 290 aid_t dreq = async_data_read(exch, name_buf, LOC_NAME_MAXLEN, &dreply); 291 int rc = async_data_read_start(exch, &linfo->mac_addr, sizeof(addr48_t)); 281 292 async_wait_for(dreq, &dretval); 282 293 283 294 async_exchange_end(exch); 284 295 285 if (dretval != EOK ) {296 if (dretval != EOK || rc != EOK) { 286 297 async_forget(req); 287 298 return dretval; … … 302 313 303 314 return EOK; 315 } 316 317 int inetcfg_link_remove(sysarg_t link_id) 318 { 319 async_exch_t *exch = async_exchange_begin(inetcfg_sess); 320 321 int rc = async_req_1_0(exch, INETCFG_LINK_REMOVE, link_id); 322 async_exchange_end(exch); 323 324 return rc; 304 325 } 305 326 -
uspace/lib/c/generic/inetping.c
rf4a47e52 r0773396 1 1 /* 2 * Copyright (c) 2012 Jiri Svoboda 2 * Copyright (c) 2013 Jiri Svoboda 3 * Copyright (c) 2013 Martin Decky 3 4 * All rights reserved. 4 5 * … … 49 50 50 51 assert(inetping_sess == NULL); 51 52 52 53 inetping_ev_ops = ev_ops; 53 54 54 55 rc = loc_service_get_id(SERVICE_NAME_INETPING, &inetping_svc, 55 56 IPC_FLAG_BLOCKING); 56 57 if (rc != EOK) 57 58 return ENOENT; 58 59 59 60 inetping_sess = loc_service_connect(EXCHANGE_SERIALIZE, inetping_svc, 60 61 IPC_FLAG_BLOCKING); 61 62 if (inetping_sess == NULL) 62 63 return ENOENT; 63 64 64 65 async_exch_t *exch = async_exchange_begin(inetping_sess); 65 66 66 67 rc = async_connect_to_me(exch, 0, 0, 0, inetping_cb_conn, NULL); 67 68 async_exchange_end(exch); 68 69 69 70 if (rc != EOK) { 70 71 async_hangup(inetping_sess); … … 72 73 return rc; 73 74 } 74 75 75 76 return EOK; 76 77 } … … 79 80 { 80 81 async_exch_t *exch = async_exchange_begin(inetping_sess); 81 82 82 83 ipc_call_t answer; 83 aid_t req = async_send_3(exch, INETPING_SEND, (sysarg_t) sdu->src, 84 (sysarg_t) sdu->dest, sdu->seq_no, &answer); 85 sysarg_t retval = async_data_write_start(exch, sdu->data, sdu->size); 86 84 aid_t req = async_send_1(exch, INETPING_SEND, sdu->seq_no, &answer); 85 86 int rc = async_data_write_start(exch, &sdu->src, sizeof(sdu->src)); 87 if (rc != EOK) { 88 async_exchange_end(exch); 89 async_forget(req); 90 return rc; 91 } 92 93 rc = async_data_write_start(exch, &sdu->dest, sizeof(sdu->dest)); 94 if (rc != EOK) { 95 async_exchange_end(exch); 96 async_forget(req); 97 return rc; 98 } 99 100 rc = async_data_write_start(exch, sdu->data, sdu->size); 101 87 102 async_exchange_end(exch); 88 89 if (retval != EOK) { 90 async_forget(req); 91 return retval; 92 } 93 103 104 if (rc != EOK) { 105 async_forget(req); 106 return rc; 107 } 108 109 sysarg_t retval; 94 110 async_wait_for(req, &retval); 95 return retval; 96 } 97 98 int inetping_get_srcaddr(uint32_t remote, uint32_t *local) 111 112 return (int) retval; 113 } 114 115 int inetping_get_srcaddr(const inet_addr_t *remote, inet_addr_t *local) 99 116 { 100 117 async_exch_t *exch = async_exchange_begin(inetping_sess); 101 102 sysarg_t local_addr; 103 int rc = async_req_1_1(exch, INETPING_GET_SRCADDR, (sysarg_t) remote, 104 &local_addr); 105 118 119 ipc_call_t answer; 120 aid_t req = async_send_0(exch, INETPING_GET_SRCADDR, &answer); 121 122 int rc = async_data_write_start(exch, remote, sizeof(*remote)); 123 if (rc != EOK) { 124 async_exchange_end(exch); 125 async_forget(req); 126 return rc; 127 } 128 129 ipc_call_t answer_local; 130 aid_t req_local = async_data_read(exch, local, sizeof(*local), 131 &answer_local); 132 106 133 async_exchange_end(exch); 107 108 if (rc != EOK) 109 return rc; 110 111 *local = (uint32_t) local_addr; 112 return EOK; 113 } 114 115 static void inetping_ev_recv(ipc_callid_t callid, ipc_call_t *call) 134 135 sysarg_t retval_local; 136 async_wait_for(req_local, &retval_local); 137 138 if (retval_local != EOK) { 139 async_forget(req); 140 return (int) retval_local; 141 } 142 143 sysarg_t retval; 144 async_wait_for(req, &retval); 145 146 return (int) retval; 147 } 148 149 static void inetping_ev_recv(ipc_callid_t iid, ipc_call_t *icall) 116 150 { 117 151 inetping_sdu_t sdu; 118 119 sdu.src = IPC_GET_ARG1(*call); 120 sdu.dest = IPC_GET_ARG2(*call); 121 sdu.seq_no = IPC_GET_ARG3(*call); 122 123 int rc = async_data_write_accept(&sdu.data, false, 0, 0, 0, &sdu.size); 152 153 sdu.seq_no = IPC_GET_ARG1(*icall); 154 155 ipc_callid_t callid; 156 size_t size; 157 if (!async_data_write_receive(&callid, &size)) { 158 async_answer_0(callid, EREFUSED); 159 async_answer_0(iid, EREFUSED); 160 return; 161 } 162 163 if (size != sizeof(sdu.src)) { 164 async_answer_0(callid, EINVAL); 165 async_answer_0(iid, EINVAL); 166 return; 167 } 168 169 int rc = async_data_write_finalize(callid, &sdu.src, size); 124 170 if (rc != EOK) { 125 171 async_answer_0(callid, rc); 126 return; 127 } 128 172 async_answer_0(iid, rc); 173 return; 174 } 175 176 if (!async_data_write_receive(&callid, &size)) { 177 async_answer_0(callid, EREFUSED); 178 async_answer_0(iid, EREFUSED); 179 return; 180 } 181 182 if (size != sizeof(sdu.dest)) { 183 async_answer_0(callid, EINVAL); 184 async_answer_0(iid, EINVAL); 185 return; 186 } 187 188 rc = async_data_write_finalize(callid, &sdu.dest, size); 189 if (rc != EOK) { 190 async_answer_0(callid, rc); 191 async_answer_0(iid, rc); 192 return; 193 } 194 195 rc = async_data_write_accept(&sdu.data, false, 0, 0, 0, &sdu.size); 196 if (rc != EOK) { 197 async_answer_0(iid, rc); 198 return; 199 } 200 129 201 rc = inetping_ev_ops->recv(&sdu); 130 202 free(sdu.data); 131 async_answer_0( callid, rc);203 async_answer_0(iid, rc); 132 204 } 133 205 -
uspace/lib/c/generic/io/asprintf.c
rf4a47e52 r0773396 50 50 } 51 51 52 int vprintf_size(const char *fmt, va_list args) 53 { 54 printf_spec_t ps = { 55 asprintf_str_write, 56 asprintf_wstr_write, 57 NULL 58 }; 59 60 return printf_core(fmt, &ps, args); 61 } 62 63 int printf_size(const char *fmt, ...) 64 { 65 va_list args; 66 va_start(args, fmt); 67 int ret = vprintf_size(fmt, args); 68 va_end(args); 69 70 return ret; 71 } 72 52 73 /** Allocate and print to string. 53 74 * … … 61 82 int asprintf(char **strp, const char *fmt, ...) 62 83 { 63 printf_spec_t ps = {64 asprintf_str_write,65 asprintf_wstr_write,66 NULL67 };68 69 84 va_list args; 70 85 va_start(args, fmt); 71 72 int ret = printf_core(fmt, &ps, args); 86 int ret = vprintf_size(fmt, args); 73 87 va_end(args); 74 88 -
uspace/lib/c/generic/iplink.c
rf4a47e52 r0773396 218 218 iplink_recv_sdu_t sdu; 219 219 220 uint16_t af= IPC_GET_ARG1(*icall);220 ip_ver_t ver = IPC_GET_ARG1(*icall); 221 221 222 222 int rc = async_data_write_accept(&sdu.data, false, 0, 0, 0, … … 227 227 } 228 228 229 rc = iplink->ev_ops->recv(iplink, &sdu, af);229 rc = iplink->ev_ops->recv(iplink, &sdu, ver); 230 230 free(sdu.data); 231 231 async_answer_0(iid, rc); -
uspace/lib/c/generic/iplink_srv.c
rf4a47e52 r0773396 272 272 } 273 273 274 int iplink_ev_recv(iplink_srv_t *srv, iplink_recv_sdu_t *sdu, uint16_t af) 274 /* XXX Version should be part of @a sdu */ 275 int iplink_ev_recv(iplink_srv_t *srv, iplink_recv_sdu_t *sdu, ip_ver_t ver) 275 276 { 276 277 if (srv->client_sess == NULL) … … 280 281 281 282 ipc_call_t answer; 282 aid_t req = async_send_1(exch, IPLINK_EV_RECV, (sysarg_t) af,283 aid_t req = async_send_1(exch, IPLINK_EV_RECV, (sysarg_t)ver, 283 284 &answer); 284 285 -
uspace/lib/c/generic/net/socket_client.c
rf4a47e52 r0773396 923 923 * message. 924 924 */ 925 int send(int socket_id, void *data, size_t datalength, int flags)925 int send(int socket_id, const void *data, size_t datalength, int flags) 926 926 { 927 927 /* Without the address */ -
uspace/lib/c/generic/pio_trace.c
rf4a47e52 r0773396 95 95 pio_regions_t *regions = get_regions(); 96 96 fibril_rwlock_read_lock(®ions->guard); 97 list_foreach(regions->list, it) { 98 assert(it); 99 region_t *reg = region_instance(it); 100 assert(reg); 97 list_foreach(regions->list, link, region_t, reg) { 101 98 if ((r >= reg->base) && (r < reg->base + reg->size)) { 102 99 if (reg->log) … … 131 128 fibril_rwlock_write_lock(®ions->guard); 132 129 list_foreach_safe(regions->list, it, next) { 133 assert(it);134 130 region_t *reg = region_instance(it); 135 assert(reg);136 131 if (r >= reg->base && (r < reg->base + reg->size)) { 137 138 132 list_remove(®->link); 133 region_destroy(reg); 139 134 } 140 135 } -
uspace/lib/c/generic/rtld/module.c
rf4a47e52 r0773396 93 93 module_t *module_find(const char *name) 94 94 { 95 module_t *m;96 95 const char *p, *soname; 97 96 … … 107 106 108 107 /* Traverse list of all modules. Not extremely fast, but simple */ 109 list_foreach(runtime_env->modules, cur) { 110 DPRINTF("cur = %p\n", cur); 111 m = list_get_instance(cur, module_t, modules_link); 108 list_foreach(runtime_env->modules, modules_link, module_t, m) { 109 DPRINTF("m = %p\n", m); 112 110 if (str_cmp(m->dyn.soname, soname) == 0) { 113 111 return m; /* Found */ … … 245 243 void modules_process_relocs(module_t *start) 246 244 { 247 module_t *m; 248 249 list_foreach(runtime_env->modules, cur) { 250 m = list_get_instance(cur, module_t, modules_link); 251 245 list_foreach(runtime_env->modules, modules_link, module_t, m) { 252 246 /* Skip rtld, since it has already been processed */ 253 247 if (m != &runtime_env->rtld) { … … 261 255 void modules_untag(void) 262 256 { 263 module_t *m; 264 265 list_foreach(runtime_env->modules, cur) { 266 m = list_get_instance(cur, module_t, modules_link); 257 list_foreach(runtime_env->modules, modules_link, module_t, m) { 267 258 m->bfs_tag = false; 268 259 } -
uspace/lib/c/generic/time.c
rf4a47e52 r0773396 556 556 557 557 void *addr; 558 rc = physmem_map( (void *) faddr, 1,559 AS_AREA_READ | AS_AREA_CACHEABLE,&addr);558 rc = physmem_map(faddr, 1, AS_AREA_READ | AS_AREA_CACHEABLE, 559 &addr); 560 560 if (rc != EOK) { 561 561 as_area_destroy(addr); -
uspace/lib/c/generic/vfs/vfs.c
rf4a47e52 r0773396 43 43 #include <stdio.h> 44 44 #include <sys/stat.h> 45 #include <sys/statfs.h> 45 46 #include <sys/types.h> 46 47 #include <ipc/services.h> … … 341 342 } 342 343 343 ssize_t read(int fildes, void *buf, size_t nbyte) 344 ssize_t read(int fildes, void *buf, size_t nbyte) 344 345 { 345 346 sysarg_t rc; … … 347 348 aid_t req; 348 349 350 if (nbyte > DATA_XFER_LIMIT) 351 nbyte = DATA_XFER_LIMIT; 352 349 353 async_exch_t *exch = vfs_exchange_begin(); 350 354 351 355 req = async_send_1(exch, VFS_IN_READ, fildes, &answer); 352 rc = async_data_read_start(exch, (void *) buf, nbyte);356 rc = async_data_read_start(exch, (void *) buf, nbyte); 353 357 if (rc != EOK) { 354 358 vfs_exchange_end(exch); … … 376 380 aid_t req; 377 381 382 if (nbyte > DATA_XFER_LIMIT) 383 nbyte = DATA_XFER_LIMIT; 384 378 385 async_exch_t *exch = vfs_exchange_begin(); 379 386 380 387 req = async_send_1(exch, VFS_IN_WRITE, fildes, &answer); 381 rc = async_data_write_start(exch, (void *) buf, nbyte);388 rc = async_data_write_start(exch, (void *) buf, nbyte); 382 389 if (rc != EOK) { 383 390 vfs_exchange_end(exch); … … 735 742 } 736 743 744 int remove(const char *path) 745 { 746 return unlink(path); 747 } 748 737 749 int chdir(const char *path) 738 750 { … … 892 904 } 893 905 906 int statfs(const char *path, struct statfs *st) 907 { 908 sysarg_t rc, rc_orig; 909 aid_t req; 910 size_t pa_size; 911 912 char *pa = absolutize(path, &pa_size); 913 if (!pa) 914 return ENOMEM; 915 916 async_exch_t *exch = vfs_exchange_begin(); 917 918 req = async_send_0(exch, VFS_IN_STATFS, NULL); 919 rc = async_data_write_start(exch, pa, pa_size); 920 if (rc != EOK) 921 goto exit; 922 923 rc = async_data_read_start(exch, (void *) st, sizeof(*st)); 924 925 exit: 926 vfs_exchange_end(exch); 927 free(pa); 928 async_wait_for(req, &rc_orig); 929 return (int) (rc_orig != EOK ? rc_orig : rc); 930 } 931 894 932 /** @} 895 933 */ -
uspace/lib/c/include/adt/list.h
rf4a47e52 r0773396 1 1 /* 2 2 * Copyright (c) 2001-2004 Jakub Jermar 3 * Copyright (c) 201 1Jiri Svoboda3 * Copyright (c) 2013 Jiri Svoboda 4 4 * All rights reserved. 5 5 * … … 38 38 39 39 #include <assert.h> 40 #include <stdbool.h> 40 41 #include <unistd.h> 41 42 … … 65 66 66 67 #define list_get_instance(link, type, member) \ 67 ((type *) (((void *)(link)) - ((void *) &(((type *) NULL)->member)))) 68 69 #define list_foreach(list, iterator) \ 70 for (link_t *iterator = (list).head.next; \ 71 iterator != &(list).head; iterator = iterator->next) 68 ((type *) (((void *)(link)) - list_link_to_void(&(((type *) NULL)->member)))) 69 70 #define list_foreach(list, member, itype, iterator) \ 71 for (itype *iterator = NULL; iterator == NULL; iterator = (itype *) 1) \ 72 for (link_t *_link = (list).head.next; \ 73 iterator = list_get_instance(_link, itype, member), \ 74 _link != &(list).head; _link = _link->next) 75 76 #define list_foreach_rev(list, member, itype, iterator) \ 77 for (itype *iterator = NULL; iterator == NULL; iterator = (itype *) 1) \ 78 for (link_t *_link = (list).head.prev; \ 79 iterator = list_get_instance(_link, itype, member), \ 80 _link != &(list).head; _link = _link->prev) 72 81 73 82 /** Unlike list_foreach(), allows removing items while traversing a list. 74 * 83 * 75 84 * @code 76 85 * list_t mylist; … … 103 112 104 113 #define assert_link_not_used(link) \ 105 assert( ((link)->prev == NULL) && ((link)->next == NULL))114 assert(!link_used(link)) 106 115 107 116 /** Returns true if the link is definitely part of a list. False if not sure. */ … … 238 247 static inline link_t *list_last(list_t *list) 239 248 { 240 return ((list->head.prev == &list->head) ? NULL : list->head.prev); 249 return (list->head.prev == &list->head) ? NULL : list->head.prev; 250 } 251 252 /** Get next item in list. 253 * 254 * @param link Current item link 255 * @param list List containing @a link 256 * 257 * @return Next item or NULL if @a link is the last item. 258 * 259 */ 260 static inline link_t *list_next(link_t *link, const list_t *list) 261 { 262 return (link->next == &list->head) ? NULL : link->next; 263 } 264 265 /** Get previous item in list. 266 * 267 * @param link Current item link 268 * @param list List containing @a link 269 * 270 * @return Previous item or NULL if @a link is the first item. 271 * 272 */ 273 static inline link_t *list_prev(link_t *link, const list_t *list) 274 { 275 return (link->prev == &list->head) ? NULL : link->prev; 241 276 } 242 277 … … 308 343 unsigned int cnt = 0; 309 344 310 list_foreach(*list, link) { 345 link_t *link = list_first(list); 346 while (link != NULL) { 311 347 if (cnt == n) 312 348 return link; 313 349 314 350 cnt++; 351 link = list_next(link, list); 315 352 } 316 353 317 354 return NULL; 355 } 356 357 /** Verify that argument type is a pointer to link_t (at compile time). 358 * 359 * This can be used to check argument type in a macro. 360 */ 361 static inline const void *list_link_to_void(const link_t *link) 362 { 363 return link; 364 } 365 366 /** Determine if link is used. 367 * 368 * @param link Link 369 * @return @c true if link is used, @c false if not. 370 */ 371 static inline bool link_used(link_t *link) 372 { 373 if (link->prev == NULL && link->next == NULL) 374 return false; 375 376 assert(link->prev != NULL && link->next != NULL); 377 return true; 318 378 } 319 379 -
uspace/lib/c/include/bitops.h
rf4a47e52 r0773396 107 107 } 108 108 109 extern int __popcountsi2(int);110 111 109 #endif 112 110 -
uspace/lib/c/include/cfg.h
rf4a47e52 r0773396 80 80 81 81 #define cfg_file_foreach(file, cur) \ 82 list_foreach((file)->sections, (cur))82 list_foreach((file)->sections, link, const cfg_section_t, (cur)) 83 83 84 84 #define cfg_section_instance(cur) \ … … 86 86 87 87 #define cfg_section_foreach(section, cur) \ 88 list_foreach((section)->entries, (cur))88 list_foreach((section)->entries, link, const cfg_entry_t, (cur)) 89 89 90 90 #define cfg_entry_instance(cur) \ -
uspace/lib/c/include/ddi.h
rf4a47e52 r0773396 40 40 #include <sys/time.h> 41 41 #include <abi/ddi/irq.h> 42 #include <device/hw_res.h> 43 #include <device/hw_res_parsed.h> 44 #include <device/pio_window.h> 42 45 #include <task.h> 46 47 #define DMAMEM_16MiB ((uintptr_t) UINT64_C(0xffffffffff000000)) 48 #define DMAMEM_4GiB ((uintptr_t) UINT64_C(0xffffffff00000000)) 43 49 44 50 extern int device_assign_devno(void); 45 51 46 extern int physmem_map( void *, size_t, unsigned int, void **);52 extern int physmem_map(uintptr_t, size_t, unsigned int, void **); 47 53 48 extern int dmamem_map(void *, size_t, unsigned int, unsigned int, void **);49 extern int dmamem_map_anonymous(size_t, u nsigned int, unsigned int, void **,50 void **);54 extern int dmamem_map(void *, size_t, unsigned int, unsigned int, uintptr_t *); 55 extern int dmamem_map_anonymous(size_t, uintptr_t, unsigned int, unsigned int, 56 uintptr_t *, void **); 51 57 extern int dmamem_unmap(void *, size_t); 52 58 extern int dmamem_unmap_anonymous(void *); 53 59 60 extern int pio_enable_range(addr_range_t *, void **); 61 extern int pio_enable_resource(pio_window_t *, hw_resource_t *, void **); 54 62 extern int pio_enable(void *, size_t, void **); 55 63 … … 69 77 extern uint32_t pio_read_32(const ioport32_t *); 70 78 71 static inline uint8_t pio_change_8( 72 ioport8_t *reg, uint8_t val, uint8_t mask,useconds_t delay)79 static inline uint8_t pio_change_8(ioport8_t *reg, uint8_t val, uint8_t mask, 80 useconds_t delay) 73 81 { 74 82 uint8_t v = pio_read_8(reg); … … 78 86 } 79 87 80 static inline uint16_t pio_change_16( 81 ioport16_t *reg, uint16_t val,uint16_t mask, useconds_t delay)88 static inline uint16_t pio_change_16(ioport16_t *reg, uint16_t val, 89 uint16_t mask, useconds_t delay) 82 90 { 83 91 uint16_t v = pio_read_16(reg); … … 87 95 } 88 96 89 static inline uint32_t pio_change_32( 90 ioport32_t *reg, uint32_t val,uint32_t mask, useconds_t delay)97 static inline uint32_t pio_change_32(ioport32_t *reg, uint32_t val, 98 uint32_t mask, useconds_t delay) 91 99 { 92 100 uint32_t v = pio_read_32(reg); -
uspace/lib/c/include/device/hw_res.h
rf4a47e52 r0773396 76 76 struct { 77 77 uint64_t address; 78 size_t size; 79 bool relative; 78 80 endianness_t endianness; 79 size_t size;80 81 } mem_range; 81 82 82 83 struct { 83 84 uint64_t address; 85 size_t size; 86 bool relative; 84 87 endianness_t endianness; 85 size_t size;86 88 } io_range; 87 89 -
uspace/lib/c/include/device/hw_res_parsed.h
rf4a47e52 r0773396 37 37 38 38 #include <device/hw_res.h> 39 #include <device/pio_window.h> 39 40 #include <str.h> 40 41 … … 45 46 #define HW_RES_KEEP_DUPLICIT 0x2 46 47 48 49 #define RNGABS(rng) (rng).address.absolute 50 #define RNGREL(rng) (rng).address.relative 51 #define RNGSZ(rng) (rng).size 52 53 #define RNGABSPTR(rng) ((void *) ((uintptr_t) RNGABS((rng)))) 54 55 typedef struct address64 { 56 /** Aboslute address. */ 57 uint64_t absolute; 58 /** PIO window base relative address. */ 59 uint64_t relative; 60 } address64_t; 61 47 62 /** Address range structure */ 48 63 typedef struct addr_range { 49 64 /** Start address */ 50 uint64_t address; 51 52 /** Endianness */ 53 endianness_t endianness; 65 address64_t address; 54 66 55 67 /** Area size */ 56 68 size_t size; 69 70 /** Endianness */ 71 endianness_t endianness; 57 72 } addr_range_t; 58 73 … … 139 154 } 140 155 141 extern int hw_res_list_parse(const hw_resource_list_t *,156 extern int hw_res_list_parse(const pio_window_t *, const hw_resource_list_t *, 142 157 hw_res_list_parsed_t *, int); 143 158 extern int hw_res_get_list_parsed(async_sess_t *, hw_res_list_parsed_t *, int); -
uspace/lib/c/include/devman.h
rf4a47e52 r0773396 61 61 unsigned int); 62 62 extern int devman_fun_get_child(devman_handle_t, devman_handle_t *); 63 extern int devman_dev_get_parent(devman_handle_t, devman_handle_t *); 63 64 extern int devman_dev_get_functions(devman_handle_t, devman_handle_t **, 64 65 size_t *); 66 extern int devman_fun_get_match_id(devman_handle_t, size_t, char *, size_t, 67 unsigned int *); 65 68 extern int devman_fun_get_name(devman_handle_t, char *, size_t); 66 69 extern int devman_fun_get_driver_name(devman_handle_t, char *, size_t); … … 71 74 extern int devman_add_device_to_category(devman_handle_t, const char *); 72 75 extern int devman_fun_sid_to_handle(service_id_t, devman_handle_t *); 76 extern int devman_get_drivers(devman_handle_t **, size_t *); 77 extern int devman_driver_get_devices(devman_handle_t, devman_handle_t **, 78 size_t *); 79 extern int devman_driver_get_handle(const char *, devman_handle_t *); 80 extern int devman_driver_get_match_id(devman_handle_t, size_t, char *, size_t, 81 unsigned int *); 82 extern int devman_driver_get_name(devman_handle_t, char *, size_t); 83 extern int devman_driver_get_state(devman_handle_t, driver_state_t *); 84 extern int devman_driver_load(devman_handle_t); 73 85 74 86 #endif -
uspace/lib/c/include/inet/addr.h
rf4a47e52 r0773396 39 39 #include <net/in.h> 40 40 #include <net/in6.h> 41 #include <net/socket.h> 41 42 42 43 typedef uint32_t addr32_t; … … 44 45 typedef uint8_t addr128_t[16]; 45 46 47 typedef enum { 48 /** Any IP protocol version */ 49 ip_any, 50 /** IPv4 */ 51 ip_v4, 52 /** IPv6 */ 53 ip_v6 54 } ip_ver_t; 55 46 56 /** Node address */ 47 57 typedef struct { 48 uint16_t family; 58 /** IP version */ 59 ip_ver_t version; 49 60 union { 50 61 addr32_t addr; … … 55 66 /** Network address */ 56 67 typedef struct { 57 /** Address family*/58 uint16_t family;68 /** IP version */ 69 ip_ver_t version; 59 70 60 71 /** Address */ … … 68 79 } inet_naddr_t; 69 80 81 extern const addr32_t addr32_broadcast_all_hosts; 70 82 extern const addr48_t addr48_broadcast; 71 83 … … 90 102 uint16_t, uint16_t, uint16_t, uint16_t, uint8_t); 91 103 92 extern int inet_addr_family(const char *, uint16_t *);93 104 extern void inet_naddr_addr(const inet_naddr_t *, inet_addr_t *); 94 105 extern void inet_addr_naddr(const inet_addr_t *, uint8_t, inet_naddr_t *); … … 109 120 extern int inet_naddr_format(const inet_naddr_t *, char **); 110 121 111 extern uint16_t inet_addr_get(const inet_addr_t *, addr32_t *, addr128_t *);112 extern uint16_t inet_naddr_get(const inet_naddr_t *, addr32_t *, addr128_t *,122 extern ip_ver_t inet_addr_get(const inet_addr_t *, addr32_t *, addr128_t *); 123 extern ip_ver_t inet_naddr_get(const inet_naddr_t *, addr32_t *, addr128_t *, 113 124 uint8_t *); 114 125 … … 124 135 sockaddr_in6_t *); 125 136 137 extern ip_ver_t ipver_from_af(int af); 138 extern int inet_addr_sockaddr(const inet_addr_t *, uint16_t, sockaddr_t **, 139 socklen_t *); 140 126 141 #endif 127 142 -
uspace/lib/c/include/inet/dnsr.h
rf4a47e52 r0773396 51 51 52 52 extern int dnsr_init(void); 53 extern int dnsr_name2host(const char *, dnsr_hostinfo_t **, uint16_t);53 extern int dnsr_name2host(const char *, dnsr_hostinfo_t **, ip_ver_t); 54 54 extern void dnsr_hostinfo_destroy(dnsr_hostinfo_t *); 55 55 extern int dnsr_get_srvaddr(inet_addr_t *); -
uspace/lib/c/include/inet/inet.h
rf4a47e52 r0773396 37 37 38 38 #include <inet/addr.h> 39 #include <ipc/loc.h> 39 40 #include <sys/types.h> 40 41 #define INET_TTL_MAX 255 42 43 typedef struct { 44 inet_addr_t src; 45 inet_addr_t dest; 46 uint8_t tos; 47 void *data; 48 size_t size; 49 } inet_dgram_t; 50 51 typedef struct { 52 int (*recv)(inet_dgram_t *); 53 } inet_ev_ops_t; 54 55 typedef enum { 56 INET_DF = 1 57 } inet_df_t; 41 #include <types/inet.h> 58 42 59 43 extern int inet_init(uint8_t, inet_ev_ops_t *); -
uspace/lib/c/include/inet/inetcfg.h
rf4a47e52 r0773396 38 38 #include <inet/inet.h> 39 39 #include <sys/types.h> 40 41 /** Address object info */ 42 typedef struct { 43 /** Network address */ 44 inet_naddr_t naddr; 45 /** Link service ID */ 46 sysarg_t ilink; 47 /** Address object name */ 48 char *name; 49 } inet_addr_info_t; 50 51 /** IP link info */ 52 typedef struct { 53 /** Link service name */ 54 char *name; 55 /** Default MTU */ 56 size_t def_mtu; 57 } inet_link_info_t; 58 59 /** Static route info */ 60 typedef struct { 61 /** Destination network address */ 62 inet_naddr_t dest; 63 /** Router address */ 64 inet_addr_t router; 65 /** Static route name */ 66 char *name; 67 } inet_sroute_info_t; 40 #include <types/inetcfg.h> 68 41 69 42 extern int inetcfg_init(void); … … 75 48 extern int inetcfg_get_link_list(sysarg_t **, size_t *); 76 49 extern int inetcfg_get_sroute_list(sysarg_t **, size_t *); 50 extern int inetcfg_link_add(sysarg_t); 77 51 extern int inetcfg_link_get(sysarg_t, inet_link_info_t *); 52 extern int inetcfg_link_remove(sysarg_t); 78 53 extern int inetcfg_sroute_get(sysarg_t, inet_sroute_info_t *); 79 54 extern int inetcfg_sroute_get_id(const char *, sysarg_t *); -
uspace/lib/c/include/inet/inetping.h
rf4a47e52 r0773396 1 1 /* 2 * Copyright (c) 201 2Jiri Svoboda2 * Copyright (c) 2013 Jiri Svoboda 3 3 * All rights reserved. 4 4 * … … 38 38 #include <inet/inet.h> 39 39 #include <sys/types.h> 40 41 typedef struct { 42 uint32_t src; 43 uint32_t dest; 44 uint16_t seq_no; 45 void *data; 46 size_t size; 47 } inetping_sdu_t; 40 #include <types/inetping.h> 48 41 49 42 typedef struct inetping_ev_ops { … … 53 46 extern int inetping_init(inetping_ev_ops_t *); 54 47 extern int inetping_send(inetping_sdu_t *); 55 extern int inetping_get_srcaddr( uint32_t, uint32_t *);48 extern int inetping_get_srcaddr(const inet_addr_t *, inet_addr_t *); 56 49 57 50 #endif -
uspace/lib/c/include/inet/iplink.h
rf4a47e52 r0773396 37 37 38 38 #include <async.h> 39 #include <sys/types.h>40 39 #include <inet/addr.h> 41 40 … … 78 77 79 78 typedef struct iplink_ev_ops { 80 int (*recv)(iplink_t *, iplink_recv_sdu_t *, uint16_t);79 int (*recv)(iplink_t *, iplink_recv_sdu_t *, ip_ver_t); 81 80 } iplink_ev_ops_t; 82 81 -
uspace/lib/c/include/inet/iplink_srv.h
rf4a47e52 r0773396 39 39 #include <fibril_synch.h> 40 40 #include <stdbool.h> 41 #include <sys/types.h>42 41 #include <inet/addr.h> 43 42 #include <inet/iplink.h> … … 67 66 68 67 extern int iplink_conn(ipc_callid_t, ipc_call_t *, void *); 69 extern int iplink_ev_recv(iplink_srv_t *, iplink_recv_sdu_t *, uint16_t);68 extern int iplink_ev_recv(iplink_srv_t *, iplink_recv_sdu_t *, ip_ver_t); 70 69 71 70 #endif -
uspace/lib/c/include/ipc/dev_iface.h
rf4a47e52 r0773396 36 36 typedef enum { 37 37 HW_RES_DEV_IFACE = 0, 38 PIO_WINDOW_DEV_IFACE, 38 39 39 40 /** Character device interface */ -
uspace/lib/c/include/ipc/devman.h
rf4a47e52 r0773396 42 42 43 43 typedef sysarg_t devman_handle_t; 44 45 typedef enum { 46 /** Driver has not been started. */ 47 DRIVER_NOT_STARTED = 0, 48 49 /** 50 * Driver has been started, but has not registered as running and ready 51 * to receive requests. 52 */ 53 DRIVER_STARTING, 54 55 /** Driver is running and prepared to serve incomming requests. */ 56 DRIVER_RUNNING 57 } driver_state_t; 44 58 45 59 typedef enum { … … 155 169 DEVMAN_DEVICE_GET_HANDLE = IPC_FIRST_USER_METHOD, 156 170 DEVMAN_DEV_GET_FUNCTIONS, 171 DEVMAN_DEV_GET_PARENT, 157 172 DEVMAN_FUN_GET_CHILD, 173 DEVMAN_FUN_GET_MATCH_ID, 158 174 DEVMAN_FUN_GET_NAME, 159 175 DEVMAN_FUN_GET_DRIVER_NAME, … … 161 177 DEVMAN_FUN_OFFLINE, 162 178 DEVMAN_FUN_GET_PATH, 163 DEVMAN_FUN_SID_TO_HANDLE 179 DEVMAN_FUN_SID_TO_HANDLE, 180 DEVMAN_GET_DRIVERS, 181 DEVMAN_DRIVER_GET_DEVICES, 182 DEVMAN_DRIVER_GET_HANDLE, 183 DEVMAN_DRIVER_GET_MATCH_ID, 184 DEVMAN_DRIVER_GET_NAME, 185 DEVMAN_DRIVER_GET_STATE, 186 DEVMAN_DRIVER_LOAD 164 187 } client_to_devman_t; 165 188 -
uspace/lib/c/include/ipc/inet.h
rf4a47e52 r0773396 72 72 INETCFG_GET_LINK_LIST, 73 73 INETCFG_GET_SROUTE_LIST, 74 INETCFG_LINK_ADD, 74 75 INETCFG_LINK_GET, 76 INETCFG_LINK_REMOVE, 75 77 INETCFG_SROUTE_CREATE, 76 78 INETCFG_SROUTE_DELETE, … … 90 92 } inetping_request_t; 91 93 92 /** Events on Inet ping6 port */93 typedef enum {94 INETPING6_EV_RECV = IPC_FIRST_USER_METHOD95 } inetping6_event_t;96 97 /** Requests on Inet ping6 port */98 typedef enum {99 INETPING6_SEND = IPC_FIRST_USER_METHOD,100 INETPING6_GET_SRCADDR101 } inetping6_request_t;102 103 94 #endif 104 95 -
uspace/lib/c/include/ipc/services.h
rf4a47e52 r0773396 53 53 } services_t; 54 54 55 #define SERVICE_NAME_CORECFG "corecfg" 56 #define SERVICE_NAME_DHCP "net/dhcp" 55 57 #define SERVICE_NAME_DNSR "net/dnsr" 56 58 #define SERVICE_NAME_INET "net/inet" … … 58 60 #define SERVICE_NAME_INETPING "net/inetping" 59 61 #define SERVICE_NAME_INETPING6 "net/inetping6" 62 #define SERVICE_NAME_NETCONF "net/netconf" 60 63 61 64 #endif -
uspace/lib/c/include/ipc/socket.h
rf4a47e52 r0773396 198 198 #define SOCKET_GET_OPT_NAME(call) \ 199 199 ({ \ 200 int opt_name = (int) IPC_GET_ARG 4(call); \200 int opt_name = (int) IPC_GET_ARG2(call); \ 201 201 opt_name; \ 202 202 }) -
uspace/lib/c/include/ipc/vfs.h
rf4a47e52 r0773396 82 82 VFS_IN_WAIT_HANDLE, 83 83 VFS_IN_MTAB_GET, 84 VFS_IN_STATFS 84 85 } vfs_in_request_t; 85 86 … … 98 99 VFS_OUT_LOOKUP, 99 100 VFS_OUT_DESTROY, 101 VFS_OUT_STATFS, 100 102 VFS_OUT_LAST 101 103 } vfs_out_request_t; -
uspace/lib/c/include/net/socket.h
rf4a47e52 r0773396 57 57 extern int connect(int, const struct sockaddr *, socklen_t); 58 58 extern int closesocket(int); 59 extern int send(int, void *, size_t, int);59 extern int send(int, const void *, size_t, int); 60 60 extern int sendto(int, const void *, size_t, int, const struct sockaddr *, 61 61 socklen_t); -
uspace/lib/c/include/net/socket_codes.h
rf4a47e52 r0773396 75 75 typedef int32_t socklen_t; 76 76 77 /* Socket options */ 78 79 enum { 80 SOL_SOCKET = 1, 81 82 /* IP link to transmit on */ 83 SO_IPLINK 84 }; 85 77 86 #endif 78 87 -
uspace/lib/c/include/setjmp.h
rf4a47e52 r0773396 1 1 /* 2 2 * Copyright (c) 2008 Josef Cejka 3 * Copyright (c) 2013 Vojtech Horky 3 4 * All rights reserved. 4 5 * … … 30 31 * @{ 31 32 */ 32 /** @file 33 /** @file Long jump implementation. 34 * 35 * Implementation inspired by Jiri Zarevucky's code from 36 * http://bazaar.launchpad.net/~zarevucky-jiri/helenos/stdc/revision/1544/uspace/lib/posix/setjmp.h 33 37 */ 34 38 … … 38 42 #include <libarch/fibril.h> 39 43 40 typedef context_t jmp_buf[1]; 44 struct jmp_buf_interal { 45 context_t context; 46 int return_value; 47 }; 48 typedef struct jmp_buf_interal jmp_buf[1]; 41 49 42 extern int setjmp(jmp_buf env); 50 /* 51 * Specified as extern to minimize number of included headers 52 * because this file is used as is in libposix too. 53 */ 54 extern int context_save(context_t *ctx) __attribute__((returns_twice)); 55 56 /** 57 * Save current environment (registers). 58 * 59 * This function may return twice. 60 * 61 * @param env Variable where to save the environment (of type jmp_buf). 62 * @return Whether the call returned after longjmp. 63 * @retval 0 Environment was saved, normal execution. 64 * @retval other longjmp was executed and returned here. 65 */ 66 #define setjmp(env) \ 67 ((env)[0].return_value = 0, \ 68 context_save(&(env)[0].context), \ 69 (env)[0].return_value) 70 43 71 extern void longjmp(jmp_buf env, int val) __attribute__((noreturn)); 44 72 -
uspace/lib/c/include/stdio.h
rf4a47e52 r0773396 124 124 extern int vsnprintf(char *, size_t, const char *, va_list); 125 125 126 extern int printf_size(const char *, ...) 127 PRINTF_ATTRIBUTE(1, 2); 128 extern int vprintf_size(const char *, va_list); 129 126 130 /* File stream functions */ 127 131 extern FILE *fopen(const char *, const char *); … … 147 151 /* Misc file functions */ 148 152 extern int rename(const char *, const char *); 153 extern int remove(const char *); 149 154 150 155 #endif -
uspace/lib/c/include/types/inet.h
rf4a47e52 r0773396 1 1 /* 2 * Copyright (c) 20 09 Lukas Mejdrech2 * Copyright (c) 2012 Jiri Svoboda 3 3 * All rights reserved. 4 4 * … … 30 30 * @{ 31 31 */ 32 33 32 /** @file 34 * Network device.35 33 */ 36 34 37 #ifndef LIBC_ NET_DEVICE_H_38 #define LIBC_ NET_DEVICE_H_35 #ifndef LIBC_TYPES_INET_H_ 36 #define LIBC_TYPES_INET_H_ 39 37 40 #include <adt/int_map.h> 41 #include <nic/nic.h> 38 #include <inet/addr.h> 39 #include <ipc/loc.h> 40 #include <sys/types.h> 42 41 43 /** Device identifier to generic type map declaration. */ 44 #define DEVICE_MAP_DECLARE INT_MAP_DECLARE 42 #define INET_TTL_MAX 255 45 43 46 /** Device identifier to generic type map implementation. */ 47 #define DEVICE_MAP_IMPLEMENT INT_MAP_IMPLEMENT 44 typedef struct { 45 /** Local IP link service ID (optional) */ 46 service_id_t iplink; 47 inet_addr_t src; 48 inet_addr_t dest; 49 uint8_t tos; 50 void *data; 51 size_t size; 52 } inet_dgram_t; 48 53 49 /** Device identifier type. */ 50 typedef int nic_device_id_t; 54 typedef struct { 55 int (*recv)(inet_dgram_t *); 56 } inet_ev_ops_t; 51 57 52 /** Invalid device identifier. */ 53 #define NIC_DEVICE_INVALID_ID (-1) 58 typedef enum { 59 INET_DF = 1 60 } inet_df_t; 54 61 55 62 #endif -
uspace/lib/c/include/types/inetping.h
rf4a47e52 r0773396 1 1 /* 2 * Copyright (c) 2013 Martin Decky2 * Copyright (c) 2013 Jiri Svoboda 3 3 * All rights reserved. 4 4 * … … 30 30 * @{ 31 31 */ 32 /** @file 32 /** 33 * @file 34 * @brief 33 35 */ 34 36 35 #ifndef LIBC_ INET_INETPING6_H_36 #define LIBC_ INET_INETPING6_H_37 #ifndef LIBC_TYPES_INETPING_H_ 38 #define LIBC_TYPES_INETPING_H_ 37 39 38 #include <inet/ inet.h>40 #include <inet/addr.h> 39 41 #include <sys/types.h> 40 42 41 43 typedef struct { 42 addr128_t src;43 addr128_t dest;44 inet_addr_t src; 45 inet_addr_t dest; 44 46 uint16_t seq_no; 45 47 void *data; 46 48 size_t size; 47 } inetping6_sdu_t; 48 49 typedef struct inetping6_ev_ops { 50 int (*recv)(inetping6_sdu_t *); 51 } inetping6_ev_ops_t; 52 53 extern int inetping6_init(inetping6_ev_ops_t *); 54 extern int inetping6_send(inetping6_sdu_t *); 55 extern int inetping6_get_srcaddr(addr128_t, addr128_t); 49 } inetping_sdu_t; 56 50 57 51 #endif -
uspace/lib/c/include/vfs/vfs.h
rf4a47e52 r0773396 44 44 #include "vfs_mtab.h" 45 45 46 46 47 enum vfs_change_state_type { 47 48 VFS_PASS_HANDLE 48 49 }; 50 49 51 50 52 extern char *absolutize(const char *, size_t *); … … 61 63 extern async_exch_t *vfs_exchange_begin(void); 62 64 extern void vfs_exchange_end(async_exch_t *); 63 64 65 #endif 65 66
Note:
See TracChangeset
for help on using the changeset viewer.