Changeset c6ae4c2 in mainline for uspace/lib/c
- Timestamp:
- 2011-12-16T21:12:52Z (14 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- c8751452
- Parents:
- e2718e1
- Location:
- uspace/lib/c
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/lib/c/generic/as.c
re2718e1 rc6ae4c2 117 117 /** Find mapping to physical address. 118 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. 119 * @param virt Virtual address to find mapping for. 120 * @param[out] phys Physical adress. 121 * 122 * @return EOK on no error. 123 * @retval ENOENT if no mapping was found. 124 * 124 125 */ 125 int as_get_physical_mapping(const void * address, uintptr_t *frame)126 int as_get_physical_mapping(const void *virt, uintptr_t *phys) 126 127 { 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; 128 return (int) __SYSCALL2(SYS_PAGE_FIND_MAPPING, (sysarg_t) virt, 129 (sysarg_t) phys); 141 130 } 142 131 -
uspace/lib/c/generic/ddi.c
re2718e1 rc6ae4c2 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> … … 57 60 * Caller of this function must have the CAP_MEM_MANAGER capability. 58 61 * 59 * @param p fPhysical address of the starting frame.60 * @param v pVirtual address of the starting page.62 * @param phys Physical address of the starting frame. 63 * @param virt Virtual address of the starting page. 61 64 * @param pages Number of pages to map. 62 65 * @param flags Flags for the new address space area. … … 69 72 * 70 73 */ 71 int physmem_map(void *p f, void *vp, size_t pages, unsigned int flags)74 int physmem_map(void *phys, void *virt, size_t pages, unsigned int flags) 72 75 { 73 return __SYSCALL4(SYS_PHYSMEM_MAP, (sysarg_t) p f, (sysarg_t) vp,74 pages, flags);76 return __SYSCALL4(SYS_PHYSMEM_MAP, (sysarg_t) phys, 77 (sysarg_t) virt, pages, flags); 75 78 } 76 79 77 int dmamem_map( dmamem_t *dmamem, size_t pages, unsigned int map_flags,78 unsigned int dma_flags)80 int dmamem_map(void *virt, size_t size, unsigned int map_flags, 81 unsigned int flags, void **phys) 79 82 { 80 // FIXME TODO 81 return -1; 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); 82 86 } 83 87 84 int dmamem_unmap(dmamem_t *dmamem) 88 int dmamem_map_anonymous(size_t size, unsigned int map_flags, 89 unsigned int flags, void **phys, void **virt) 85 90 { 86 // FIXME TODO 87 return -1; 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); 88 97 } 89 98 90 int dmamem_ lock(void *virt, void **phys, size_t pages)99 int dmamem_unmap(void *virt, size_t size, unsigned int flags) 91 100 { 92 // FIXME TODO93 return -1;101 return __SYSCALL3(SYS_DMAMEM_UNMAP, (sysarg_t) virt, (sysarg_t) size, 102 (sysarg_t) flags); 94 103 } 95 104 96 int dmamem_un lock(void *virt, size_t pages)105 int dmamem_unmap_anonymous(void *virt) 97 106 { 98 // FIXME TODO99 return -1;107 return __SYSCALL3(SYS_DMAMEM_UNMAP, (sysarg_t) virt, 0, 108 DMAMEM_FLAGS_ANONYMOUS); 100 109 } 101 110 -
uspace/lib/c/include/ddi.h
re2718e1 rc6ae4c2 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 44 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); 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, unsigned int); 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 **); 54 64 55 extern int register_irq(int, int, int, irq_code_t *); 65 56 extern int unregister_irq(int, int);
Note:
See TracChangeset
for help on using the changeset viewer.