Changeset 153cc76a in mainline for uspace/lib/c
- Timestamp:
- 2011-12-23T16:42:22Z (14 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- 7e1b130
- Parents:
- 4291215 (diff), 2f0dd2a (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:
-
- 14 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/lib/c/generic/as.c
r4291215 r153cc76a 45 45 /** Create address space area. 46 46 * 47 * @param address Virtual address where to place new address space area. 48 * @param size Size of the area. 49 * @param flags Flags describing type of the area. 47 * @param base Starting virtual address of the area. 48 * If set to (void *) -1, the kernel finds 49 * a mappable area. 50 * @param size Size of the area. 51 * @param flags Flags describing type of the area. 50 52 * 51 * @return address on success, (void *) -1 otherwise. 53 * @return Starting virtual address of the created area on success. 54 * @return (void *) -1 otherwise. 52 55 * 53 56 */ 54 void *as_area_create(void * address, size_t size, unsigned int flags)57 void *as_area_create(void *base, size_t size, unsigned int flags) 55 58 { 56 return (void *) __SYSCALL 3(SYS_AS_AREA_CREATE, (sysarg_t) address,57 (sysarg_t) size, (sysarg_t) flags );59 return (void *) __SYSCALL4(SYS_AS_AREA_CREATE, (sysarg_t) base, 60 (sysarg_t) size, (sysarg_t) flags, (sysarg_t) __entry); 58 61 } 59 62 … … 102 105 } 103 106 104 /** Return pointer to unmapped address space area107 /** Find mapping to physical address. 105 108 * 106 * @param size Requested size of the allocation. 109 * @param virt Virtual address to find mapping for. 110 * @param[out] phys Physical adress. 107 111 * 108 * @return Pointer to the beginning of unmapped address space area. 112 * @return EOK on no error. 113 * @retval ENOENT if no mapping was found. 109 114 * 110 115 */ 111 void *as_get_mappable_page(size_t size)116 int as_get_physical_mapping(const void *virt, uintptr_t *phys) 112 117 { 113 return (void *) __SYSCALL2(SYS_AS_GET_UNMAPPED_AREA, 114 (sysarg_t) __entry, (sysarg_t) size); 115 } 116 117 /** Find mapping to physical address. 118 * 119 * @param address Virtual address in question (virtual). 120 * @param[out] frame Frame address (physical). 121 * @return Error code. 122 * @retval EOK No error, @p frame holds the translation. 123 * @retval ENOENT Mapping not found. 124 */ 125 int as_get_physical_mapping(const void *address, uintptr_t *frame) 126 { 127 uintptr_t tmp_frame; 128 uintptr_t virt = (uintptr_t) address; 129 130 int rc = (int) __SYSCALL2(SYS_PAGE_FIND_MAPPING, 131 (sysarg_t) virt, (sysarg_t) &tmp_frame); 132 if (rc != EOK) { 133 return rc; 134 } 135 136 if (frame != NULL) { 137 *frame = tmp_frame; 138 } 139 140 return EOK; 118 return (int) __SYSCALL2(SYS_PAGE_FIND_MAPPING, (sysarg_t) virt, 119 (sysarg_t) phys); 141 120 } 142 121 -
uspace/lib/c/generic/async.c
r4291215 r153cc76a 1998 1998 * 1999 1999 * @param exch Exchange for sending the message. 2000 * @param dst Destination address space area base.2001 2000 * @param size Size of the destination address space area. 2002 2001 * @param arg User defined argument. 2003 2002 * @param flags Storage for the received flags. Can be NULL. 2003 * @param dst Destination address space area base. Cannot be NULL. 2004 2004 * 2005 2005 * @return Zero on success or a negative error code from errno.h. 2006 2006 * 2007 2007 */ 2008 int async_share_in_start(async_exch_t *exch, void *dst, size_t size,2009 sysarg_t arg, unsigned int *flags)2008 int async_share_in_start(async_exch_t *exch, size_t size, sysarg_t arg, 2009 unsigned int *flags, void **dst) 2010 2010 { 2011 2011 if (exch == NULL) 2012 2012 return ENOENT; 2013 2013 2014 sysarg_t tmp_flags; 2015 int res = async_req_3_2(exch, IPC_M_SHARE_IN, (sysarg_t) dst, 2016 (sysarg_t) size, arg, NULL, &tmp_flags); 2014 sysarg_t _flags = 0; 2015 sysarg_t _dst = (sysarg_t) -1; 2016 int res = async_req_2_4(exch, IPC_M_SHARE_IN, (sysarg_t) size, 2017 arg, NULL, &_flags, NULL, &_dst); 2017 2018 2018 2019 if (flags) 2019 *flags = (unsigned int) tmp_flags; 2020 2020 *flags = (unsigned int) _flags; 2021 2022 *dst = (void *) _dst; 2021 2023 return res; 2022 2024 } … … 2047 2049 return false; 2048 2050 2049 *size = (size_t) IPC_GET_ARG 2(data);2051 *size = (size_t) IPC_GET_ARG1(data); 2050 2052 return true; 2051 2053 } … … 2053 2055 /** Wrapper for answering the IPC_M_SHARE_IN calls using the async framework. 2054 2056 * 2055 * This wrapper only makes it more comfortable to answer IPC_M_ DATA_READ2057 * This wrapper only makes it more comfortable to answer IPC_M_SHARE_IN 2056 2058 * calls so that the user doesn't have to remember the meaning of each IPC 2057 2059 * argument. … … 2131 2133 * 2132 2134 */ 2133 int async_share_out_finalize(ipc_callid_t callid, void * dst)2135 int async_share_out_finalize(ipc_callid_t callid, void **dst) 2134 2136 { 2135 2137 return ipc_share_out_finalize(callid, dst); -
uspace/lib/c/generic/ddi.c
r4291215 r153cc76a 33 33 */ 34 34 35 #include <assert.h> 36 #include <unistd.h> 37 #include <errno.h> 35 38 #include <sys/types.h> 36 39 #include <abi/ddi/arg.h> … … 42 45 #include <align.h> 43 46 #include <libarch/config.h> 47 #include "private/libc.h" 44 48 45 49 /** Return unique device number. … … 57 61 * Caller of this function must have the CAP_MEM_MANAGER capability. 58 62 * 59 * @param pf Physical address of the starting frame. 60 * @param vp Virtual address of the starting page. 63 * @param phys Physical address of the starting frame. 61 64 * @param pages Number of pages to map. 62 65 * @param flags Flags for the new address space area. 66 * @param virt Virtual address of the starting page. 63 67 * 64 68 * @return EOK on success … … 69 73 * 70 74 */ 71 int physmem_map(void *p f, void *vp, size_t pages, unsigned int flags)75 int physmem_map(void *phys, size_t pages, unsigned int flags, void **virt) 72 76 { 73 return __SYSCALL 4(SYS_PHYSMEM_MAP, (sysarg_t) pf, (sysarg_t) vp,74 pages, flags );77 return __SYSCALL5(SYS_PHYSMEM_MAP, (sysarg_t) phys, 78 pages, flags, (sysarg_t) virt, (sysarg_t) __entry); 75 79 } 76 80 77 int dmamem_map( dmamem_t *dmamem, size_t pages, unsigned int map_flags,78 unsigned int dma_flags)81 int dmamem_map(void *virt, size_t size, unsigned int map_flags, 82 unsigned int flags, void **phys) 79 83 { 80 // FIXME TODO 81 return -1; 84 return (int) __SYSCALL6(SYS_DMAMEM_MAP, (sysarg_t) size, 85 (sysarg_t) map_flags, (sysarg_t) flags & ~DMAMEM_FLAGS_ANONYMOUS, 86 (sysarg_t) phys, (sysarg_t) virt, 0); 82 87 } 83 88 84 int dmamem_unmap(dmamem_t *dmamem) 89 int dmamem_map_anonymous(size_t size, unsigned int map_flags, 90 unsigned int flags, void **phys, void **virt) 85 91 { 86 // FIXME TODO 87 return -1; 92 return (int) __SYSCALL6(SYS_DMAMEM_MAP, (sysarg_t) size, 93 (sysarg_t) map_flags, (sysarg_t) flags | DMAMEM_FLAGS_ANONYMOUS, 94 (sysarg_t) phys, (sysarg_t) virt, (sysarg_t) __entry); 88 95 } 89 96 90 int dmamem_ lock(void *virt, void **phys, size_t pages)97 int dmamem_unmap(void *virt, size_t size) 91 98 { 92 // FIXME TODO 93 return -1; 99 return __SYSCALL3(SYS_DMAMEM_UNMAP, (sysarg_t) virt, (sysarg_t) size, 0); 94 100 } 95 101 96 int dmamem_un lock(void *virt, size_t pages)102 int dmamem_unmap_anonymous(void *virt) 97 103 { 98 // FIXME TODO99 return -1;104 return __SYSCALL3(SYS_DMAMEM_UNMAP, (sysarg_t) virt, 0, 105 DMAMEM_FLAGS_ANONYMOUS); 100 106 } 101 107 … … 129 135 * @param pio_addr I/O start address. 130 136 * @param size Size of the I/O region. 131 * @param use_addr Address where the final address for132 * application's PIO will be stored.137 * @param virt Virtual address for application's 138 * PIO operations. 133 139 * 134 * @return Zero on success or negative error code. 140 * @return EOK on success. 141 * @return Negative error code on failure. 135 142 * 136 143 */ 137 int pio_enable(void *pio_addr, size_t size, void ** use_addr)144 int pio_enable(void *pio_addr, size_t size, void **virt) 138 145 { 139 void *phys;140 void *virt;141 size_t offset;142 unsigned int pages;143 144 146 #ifdef IO_SPACE_BOUNDARY 145 147 if (pio_addr < IO_SPACE_BOUNDARY) { 146 * use_addr= pio_addr;148 *virt = pio_addr; 147 149 return iospace_enable(task_get_id(), pio_addr, size); 148 150 } 149 151 #endif 150 152 151 phys = (void *) ALIGN_DOWN((uintptr_t) pio_addr, PAGE_SIZE); 152 offset = pio_addr - phys; 153 pages = ALIGN_UP(offset + size, PAGE_SIZE) >> PAGE_WIDTH; 154 virt = as_get_mappable_page(pages << PAGE_WIDTH); 155 *use_addr = virt + offset; 156 return physmem_map(phys, virt, pages, AS_AREA_READ | AS_AREA_WRITE); 153 void *phys_frame = 154 (void *) ALIGN_DOWN((uintptr_t) pio_addr, PAGE_SIZE); 155 size_t offset = pio_addr - phys_frame; 156 size_t pages = SIZE2PAGES(offset + size); 157 158 void *virt_page; 159 int rc = physmem_map(phys_frame, pages, 160 AS_AREA_READ | AS_AREA_WRITE, &virt_page); 161 if (rc != EOK) 162 return rc; 163 164 *virt = virt_page + offset; 165 return EOK; 157 166 } 158 167 … … 167 176 * 168 177 */ 169 int register_irq(int inr, int devno, int method, irq_code_t *ucode)178 int irq_register(int inr, int devno, int method, irq_code_t *ucode) 170 179 { 171 return __SYSCALL4(SYS_ REGISTER_IRQ, inr, devno, method,180 return __SYSCALL4(SYS_IRQ_REGISTER, inr, devno, method, 172 181 (sysarg_t) ucode); 173 182 } … … 181 190 * 182 191 */ 183 int unregister_irq(int inr, int devno)192 int irq_unregister(int inr, int devno) 184 193 { 185 return __SYSCALL2(SYS_ UNREGISTER_IRQ, inr, devno);194 return __SYSCALL2(SYS_IRQ_UNREGISTER, inr, devno); 186 195 } 187 196 -
uspace/lib/c/generic/elf/elf_load.c
r4291215 r153cc76a 364 364 * and writeable. 365 365 */ 366 a = as_area_create((uint8_t *) base + bias, mem_sz,366 a = as_area_create((uint8_t *) base + bias, mem_sz, 367 367 AS_AREA_READ | AS_AREA_WRITE | AS_AREA_CACHEABLE); 368 if (a == (void *) (-1)) {368 if (a == (void *) -1) { 369 369 DPRINTF("memory mapping failed (0x%x, %d)\n", 370 base+bias, mem_sz);370 base + bias, mem_sz); 371 371 return EE_MEMORY; 372 372 } -
uspace/lib/c/generic/ipc.c
r4291215 r153cc76a 48 48 #include <fibril.h> 49 49 #include <macros.h> 50 #include "private/libc.h" 50 51 51 52 /** … … 760 761 * 761 762 * @param phoneid Phone that will be used to contact the receiving side. 762 * @param dst Destination address space area base.763 763 * @param size Size of the destination address space area. 764 764 * @param arg User defined argument. 765 765 * @param flags Storage for received flags. Can be NULL. 766 * @param dst Destination address space area base. Cannot be NULL. 766 767 * 767 768 * @return Zero on success or a negative error code from errno.h. 768 769 * 769 770 */ 770 int ipc_share_in_start(int phoneid, void *dst, size_t size, sysarg_t arg, 771 unsigned int *flags) 772 { 773 sysarg_t tmp_flags = 0; 774 int res = ipc_call_sync_3_2(phoneid, IPC_M_SHARE_IN, (sysarg_t) dst, 775 (sysarg_t) size, arg, NULL, &tmp_flags); 771 int ipc_share_in_start(int phoneid, size_t size, sysarg_t arg, 772 unsigned int *flags, void **dst) 773 { 774 sysarg_t _flags = 0; 775 sysarg_t _dst = (sysarg_t) -1; 776 int res = ipc_call_sync_2_4(phoneid, IPC_M_SHARE_IN, (sysarg_t) size, 777 arg, NULL, &_flags, NULL, &_dst); 776 778 777 779 if (flags) 778 *flags = (unsigned int) tmp_flags; 779 780 *flags = (unsigned int) _flags; 781 782 *dst = (void *) _dst; 780 783 return res; 781 784 } … … 783 786 /** Wrapper for answering the IPC_M_SHARE_IN calls. 784 787 * 785 * This wrapper only makes it more comfortable to answer IPC_M_ DATA_READ788 * This wrapper only makes it more comfortable to answer IPC_M_SHARE_IN 786 789 * calls so that the user doesn't have to remember the meaning of each 787 790 * IPC argument. … … 796 799 int ipc_share_in_finalize(ipc_callid_t callid, void *src, unsigned int flags) 797 800 { 798 return ipc_answer_2(callid, EOK, (sysarg_t) src, (sysarg_t) flags); 801 return ipc_answer_3(callid, EOK, (sysarg_t) src, (sysarg_t) flags, 802 (sysarg_t) __entry); 799 803 } 800 804 … … 826 830 * 827 831 */ 828 int ipc_share_out_finalize(ipc_callid_t callid, void * dst)829 { 830 return ipc_answer_ 1(callid, EOK, (sysarg_t) dst);832 int ipc_share_out_finalize(ipc_callid_t callid, void **dst) 833 { 834 return ipc_answer_2(callid, EOK, (sysarg_t) __entry, (sysarg_t) dst); 831 835 } 832 836 -
uspace/lib/c/generic/malloc.c
r4291215 r153cc76a 283 283 static bool area_create(size_t size) 284 284 { 285 void *start = as_get_mappable_page(size); 286 if (start == NULL) 287 return false; 288 289 /* Align the heap area on page boundary */ 290 void *astart = (void *) ALIGN_UP((uintptr_t) start, PAGE_SIZE); 285 /* Align the heap area size on page boundary */ 291 286 size_t asize = ALIGN_UP(size, PAGE_SIZE); 292 293 astart = as_area_create(astart, asize,AS_AREA_WRITE | AS_AREA_READ);287 void *astart = as_area_create((void *) -1, asize, 288 AS_AREA_WRITE | AS_AREA_READ); 294 289 if (astart == (void *) -1) 295 290 return false; -
uspace/lib/c/generic/mman.c
r4291215 r153cc76a 42 42 { 43 43 if (!start) 44 start = as_get_mappable_page(length);44 start = (void *) -1; 45 45 46 46 // if (!((flags & MAP_SHARED) ^ (flags & MAP_PRIVATE))) -
uspace/lib/c/generic/time.c
r4291215 r153cc76a 147 147 } 148 148 149 void *addr = as_get_mappable_page(PAGE_SIZE); 150 if (addr == NULL) { 151 errno = ENOMEM; 152 return -1; 153 } 154 155 rc = physmem_map((void *) faddr, addr, 1, 156 AS_AREA_READ | AS_AREA_CACHEABLE); 149 void *addr; 150 rc = physmem_map((void *) faddr, 1, 151 AS_AREA_READ | AS_AREA_CACHEABLE, &addr); 157 152 if (rc != EOK) { 158 153 as_area_destroy(addr); -
uspace/lib/c/include/as.h
r4291215 r153cc76a 59 59 extern int as_area_destroy(void *); 60 60 extern void *set_maxheapsize(size_t); 61 extern void *as_get_mappable_page(size_t);62 61 extern int as_get_physical_mapping(const void *, uintptr_t *); 63 62 -
uspace/lib/c/include/async.h
r4291215 r153cc76a 346 346 */ 347 347 348 #define async_share_in_start_0_0(exch, dst, size) \349 async_share_in_start(exch, dst, size, 0, NULL)350 #define async_share_in_start_0_1(exch, dst, size, flags) \351 async_share_in_start(exch, dst, size, 0, flags)352 #define async_share_in_start_1_0(exch, dst, size, arg) \353 async_share_in_start(exch, dst, size, arg, NULL)354 #define async_share_in_start_1_1(exch, dst, size, arg, flags) \355 async_share_in_start(exch, dst, size, arg, flags)356 357 extern int async_share_in_start(async_exch_t *, void *,size_t, sysarg_t,358 unsigned int * );348 #define async_share_in_start_0_0(exch, size, dst) \ 349 async_share_in_start(exch, size, 0, NULL, dst) 350 #define async_share_in_start_0_1(exch, size, flags, dst) \ 351 async_share_in_start(exch, size, 0, flags, dst) 352 #define async_share_in_start_1_0(exch, size, arg, dst) \ 353 async_share_in_start(exch, size, arg, NULL, dst) 354 #define async_share_in_start_1_1(exch, size, arg, flags, dst) \ 355 async_share_in_start(exch, size, arg, flags, dst) 356 357 extern int async_share_in_start(async_exch_t *, size_t, sysarg_t, 358 unsigned int *, void **); 359 359 extern bool async_share_in_receive(ipc_callid_t *, size_t *); 360 360 extern int async_share_in_finalize(ipc_callid_t, void *, unsigned int); … … 362 362 extern int async_share_out_start(async_exch_t *, void *, unsigned int); 363 363 extern bool async_share_out_receive(ipc_callid_t *, size_t *, unsigned int *); 364 extern int async_share_out_finalize(ipc_callid_t, void * );364 extern int async_share_out_finalize(ipc_callid_t, void **); 365 365 366 366 /* -
uspace/lib/c/include/ddi.h
r4291215 r153cc76a 40 40 #include <task.h> 41 41 42 typedef struct { 43 /** Physical memory */ 44 void *phys; 45 46 /** Virtual memory */ 47 void *virt; 48 49 /** Size in pages */ 50 size_t size; 51 52 /** Mapping flags */ 53 unsigned int flags; 54 } dmamem_t; 42 extern int device_assign_devno(void); 55 43 56 extern int device_assign_devno(void); 57 extern int physmem_map(void *, void *, size_t, unsigned int); 58 extern int dmamem_map(dmamem_t *, size_t, unsigned int, unsigned int); 59 extern int dmamem_unmap(dmamem_t *); 60 extern int dmamem_lock(void *, void **, size_t); 61 extern int dmamem_unlock(void *, size_t); 44 extern int physmem_map(void *, size_t, unsigned int, void **); 45 46 extern int dmamem_map(void *, size_t, unsigned int, unsigned int, void **); 47 extern int dmamem_map_anonymous(size_t, unsigned int, unsigned int, void **, 48 void **); 49 extern int dmamem_unmap(void *, size_t); 50 extern int dmamem_unmap_anonymous(void *); 51 62 52 extern int iospace_enable(task_id_t, void *, unsigned long); 63 53 extern int pio_enable(void *, size_t, void **); 64 extern int register_irq(int, int, int, irq_code_t *); 65 extern int unregister_irq(int, int); 54 55 extern int irq_register(int, int, int, irq_code_t *); 56 extern int irq_unregister(int, int); 66 57 67 58 #endif -
uspace/lib/c/include/device/hw_res.h
r4291215 r153cc76a 40 40 #include <bool.h> 41 41 42 #define DMA_MODE_ON_DEMAND 0 43 #define DMA_MODE_WRITE (1 << 2) 44 #define DMA_MODE_READ (1 << 3) 45 #define DMA_MODE_AUTO (1 << 4) 46 #define DMA_MODE_DOWN (1 << 5) 47 #define DMA_MODE_SINGLE (1 << 6) 48 #define DMA_MODE_BLOCK (1 << 7) 49 42 50 /** HW resource provider interface */ 43 51 typedef enum { 44 52 HW_RES_GET_RESOURCE_LIST = 0, 45 HW_RES_ENABLE_INTERRUPT 53 HW_RES_ENABLE_INTERRUPT, 54 HW_RES_DMA_CHANNEL_SETUP, 46 55 } hw_res_method_t; 47 56 … … 50 59 INTERRUPT, 51 60 IO_RANGE, 52 MEM_RANGE 61 MEM_RANGE, 62 DMA_CHANNEL_8, 63 DMA_CHANNEL_16, 53 64 } hw_res_type_t; 54 65 … … 77 88 int irq; 78 89 } interrupt; 90 91 union { 92 unsigned int dma8; 93 unsigned int dma16; 94 } dma_channel; 79 95 } res; 80 96 } hw_resource_t; … … 98 114 extern bool hw_res_enable_interrupt(async_sess_t *); 99 115 116 extern int hw_res_dma_channel_setup(async_sess_t *, unsigned int, uint32_t, 117 uint16_t, uint8_t); 118 100 119 #endif 101 120 -
uspace/lib/c/include/device/hw_res_parsed.h
r4291215 r153cc76a 72 72 } irq_list_t; 73 73 74 /** List of ISA DMA channels */ 75 typedef struct dma_list { 76 /** Channel count */ 77 size_t count; 78 79 /** Array of channels */ 80 unsigned int *channels; 81 } dma_list_t; 82 74 83 /** List of memory areas */ 75 84 typedef struct addr_range_list { … … 91 100 /** List of IRQs */ 92 101 irq_list_t irqs; 102 103 /** List of DMA channels */ 104 dma_list_t dma_channels; 93 105 94 106 /** List of memory areas */ … … 113 125 free(list->io_ranges.ranges); 114 126 free(list->mem_ranges.ranges); 127 free(list->dma_channels.channels); 115 128 116 129 bzero(list, sizeof(hw_res_list_parsed_t)); -
uspace/lib/c/include/ipc/ipc.h
r4291215 r153cc76a 271 271 */ 272 272 273 #define ipc_share_in_start_0_0(phoneid, dst, size) \274 ipc_share_in_start((phoneid), ( dst), (size), 0, NULL)275 #define ipc_share_in_start_0_1(phoneid, dst, size, flags) \276 ipc_share_in_start((phoneid), ( dst), (size), 0, (flags))277 #define ipc_share_in_start_1_0(phoneid, dst, size, arg) \278 ipc_share_in_start((phoneid), ( dst), (size), (arg), NULL)279 #define ipc_share_in_start_1_1(phoneid, dst, size, arg, flags) \280 ipc_share_in_start((phoneid), ( dst), (size), (arg), (flags))281 282 extern int ipc_share_in_start(int, void *, size_t, sysarg_t, unsigned int*);273 #define ipc_share_in_start_0_0(phoneid, size, dst) \ 274 ipc_share_in_start((phoneid), (size), 0, NULL, (dst)) 275 #define ipc_share_in_start_0_1(phoneid, size, flags, dst) \ 276 ipc_share_in_start((phoneid), (size), 0, (flags), (dst)) 277 #define ipc_share_in_start_1_0(phoneid, size, arg, dst) \ 278 ipc_share_in_start((phoneid), (size), (arg), NULL, (dst)) 279 #define ipc_share_in_start_1_1(phoneid, size, arg, flags, dst) \ 280 ipc_share_in_start((phoneid), (size), (arg), (flags), (dst)) 281 282 extern int ipc_share_in_start(int, size_t, sysarg_t, unsigned int *, void **); 283 283 extern int ipc_share_in_finalize(ipc_callid_t, void *, unsigned int); 284 284 extern int ipc_share_out_start(int, void *, unsigned int); 285 extern int ipc_share_out_finalize(ipc_callid_t, void * );285 extern int ipc_share_out_finalize(ipc_callid_t, void **); 286 286 extern int ipc_data_read_start(int, void *, size_t); 287 287 extern int ipc_data_read_finalize(ipc_callid_t, const void *, size_t);
Note:
See TracChangeset
for help on using the changeset viewer.