Changes in uspace/lib/c/generic/ddi.c [fbcdeb8:c6ae4c2] in mainline
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/lib/c/generic/ddi.c
rfbcdeb8 rc6ae4c2 45 45 #include <align.h> 46 46 #include <libarch/config.h> 47 #include "private/libc.h"48 47 49 48 /** Return unique device number. … … 62 61 * 63 62 * @param phys Physical address of the starting frame. 63 * @param virt Virtual address of the starting page. 64 64 * @param pages Number of pages to map. 65 65 * @param flags Flags for the new address space area. 66 * @param virt Virtual address of the starting page.67 66 * 68 67 * @return EOK on success … … 73 72 * 74 73 */ 75 int physmem_map(void *phys, size_t pages, unsigned int flags, void **virt)74 int physmem_map(void *phys, void *virt, size_t pages, unsigned int flags) 76 75 { 77 return __SYSCALL 5(SYS_PHYSMEM_MAP, (sysarg_t) phys,78 pages, flags, (sysarg_t) virt, (sysarg_t) __entry);76 return __SYSCALL4(SYS_PHYSMEM_MAP, (sysarg_t) phys, 77 (sysarg_t) virt, pages, flags); 79 78 } 80 79 … … 82 81 unsigned int flags, void **phys) 83 82 { 84 return (int) __SYSCALL 6(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);83 return (int) __SYSCALL5(SYS_DMAMEM_MAP, (sysarg_t) virt, 84 (sysarg_t) size, (sysarg_t) map_flags, (sysarg_t) flags, 85 (sysarg_t) phys); 87 86 } 88 87 … … 90 89 unsigned int flags, void **phys, void **virt) 91 90 { 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); 91 *virt = as_get_mappable_page(size); 92 if (*virt == NULL) 93 return ENOMEM; 94 95 return dmamem_map(*virt, size, map_flags, 96 flags | DMAMEM_FLAGS_ANONYMOUS, phys); 95 97 } 96 98 97 int dmamem_unmap(void *virt, size_t size )99 int dmamem_unmap(void *virt, size_t size, unsigned int flags) 98 100 { 99 return __SYSCALL3(SYS_DMAMEM_UNMAP, (sysarg_t) virt, (sysarg_t) size, 0); 101 return __SYSCALL3(SYS_DMAMEM_UNMAP, (sysarg_t) virt, (sysarg_t) size, 102 (sysarg_t) flags); 100 103 } 101 104 … … 135 138 * @param pio_addr I/O start address. 136 139 * @param size Size of the I/O region. 137 * @param virt Virtual address for application's138 * PIO operations.140 * @param use_addr Address where the final address for 141 * application's PIO will be stored. 139 142 * 140 * @return EOK on success. 141 * @return Negative error code on failure. 143 * @return Zero on success or negative error code. 142 144 * 143 145 */ 144 int pio_enable(void *pio_addr, size_t size, void ** virt)146 int pio_enable(void *pio_addr, size_t size, void **use_addr) 145 147 { 148 void *phys; 149 void *virt; 150 size_t offset; 151 unsigned int pages; 152 146 153 #ifdef IO_SPACE_BOUNDARY 147 154 if (pio_addr < IO_SPACE_BOUNDARY) { 148 * virt= pio_addr;155 *use_addr = pio_addr; 149 156 return iospace_enable(task_get_id(), pio_addr, size); 150 157 } 151 158 #endif 152 159 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; 160 phys = (void *) ALIGN_DOWN((uintptr_t) pio_addr, PAGE_SIZE); 161 offset = pio_addr - phys; 162 pages = ALIGN_UP(offset + size, PAGE_SIZE) >> PAGE_WIDTH; 163 virt = as_get_mappable_page(pages << PAGE_WIDTH); 164 *use_addr = virt + offset; 165 return physmem_map(phys, virt, pages, AS_AREA_READ | AS_AREA_WRITE); 166 166 } 167 167 … … 176 176 * 177 177 */ 178 int irq_register(int inr, int devno, int method, irq_code_t *ucode)178 int register_irq(int inr, int devno, int method, irq_code_t *ucode) 179 179 { 180 return __SYSCALL4(SYS_ IRQ_REGISTER, inr, devno, method,180 return __SYSCALL4(SYS_REGISTER_IRQ, inr, devno, method, 181 181 (sysarg_t) ucode); 182 182 } … … 190 190 * 191 191 */ 192 int irq_unregister(int inr, int devno)192 int unregister_irq(int inr, int devno) 193 193 { 194 return __SYSCALL2(SYS_ IRQ_UNREGISTER, inr, devno);194 return __SYSCALL2(SYS_UNREGISTER_IRQ, inr, devno); 195 195 } 196 196
Note:
See TracChangeset
for help on using the changeset viewer.