Changes in / [c5ebb59:1adbf90] in mainline
- Location:
- uspace
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/lib/c/generic/ddi.c
rc5ebb59 r1adbf90 53 53 } 54 54 55 /** Map apiece of physical memory to task.55 /** Map piece of physical memory to task. 56 56 * 57 57 * Caller of this function must have the CAP_MEM_MANAGER capability. 58 58 * 59 * @param pf 60 * @param vp 61 * @param pages 62 * @param flags 59 * @param pf Physical address of the starting frame. 60 * @param vp Virtual address of the starting page. 61 * @param pages Number of pages to map. 62 * @param flags Flags for the new address space area. 63 63 * 64 * @return EOK on success 65 * @return EPERM if the caller lacks the CAP_MEM_MANAGER capability 66 * @return ENOENT if there is no task with specified ID 67 * @return ENOMEM if there was some problem in creating 68 * the address space area. 69 * 64 * @return 0 on success, EPERM if the caller lacks the 65 * CAP_MEM_MANAGER capability, ENOENT if there is no task 66 * with specified ID and ENOMEM if there was some problem 67 * in creating address space area. 70 68 */ 71 int physmem_map(void *pf, void *vp, size_t pages, unsignedint flags)69 int physmem_map(void *pf, void *vp, unsigned long pages, int flags) 72 70 { 73 return __SYSCALL4(SYS_PHYSMEM_MAP, (sysarg_t) pf, (sysarg_t) vp, 74 pages,flags);71 return __SYSCALL4(SYS_PHYSMEM_MAP, (sysarg_t) pf, (sysarg_t) vp, pages, 72 flags); 75 73 } 76 74 -
uspace/lib/c/include/ddi.h
rc5ebb59 r1adbf90 41 41 42 42 extern int device_assign_devno(void); 43 extern int physmem_map(void *, void *, size_t, unsignedint);43 extern int physmem_map(void *, void *, unsigned long, int); 44 44 extern int iospace_enable(task_id_t, void *, unsigned long); 45 45 extern int pio_enable(void *, size_t, void **); -
uspace/srv/bd/rd/rd.c
rc5ebb59 r1adbf90 55 55 #include <ipc/bd.h> 56 56 #include <macros.h> 57 #include <inttypes.h> 58 59 #define NAME "rd" 57 58 #define NAME "rd" 60 59 61 60 /** Pointer to the ramdisk's image */ … … 209 208 static bool rd_init(void) 210 209 { 211 sysarg_t size; 212 int ret = sysinfo_get_value("rd.size", &size); 213 if ((ret != EOK) || (size == 0)) { 210 int ret = sysinfo_get_value("rd.size", &rd_size); 211 if ((ret != EOK) || (rd_size == 0)) { 214 212 printf("%s: No RAM disk found\n", NAME); 215 213 return false; 216 214 } 217 215 218 sysarg_t addr_phys;219 ret = sysinfo_get_value("rd.address.physical", & addr_phys);220 if ((ret != EOK) || ( addr_phys== 0)) {216 sysarg_t rd_ph_addr; 217 ret = sysinfo_get_value("rd.address.physical", &rd_ph_addr); 218 if ((ret != EOK) || (rd_ph_addr == 0)) { 221 219 printf("%s: Invalid RAM disk physical address\n", NAME); 222 220 return false; 223 221 } 224 222 225 rd_size = ALIGN_UP(size, block_size);226 223 rd_addr = as_get_mappable_page(rd_size); 227 224 228 unsigned int flags = 229 AS_AREA_READ | AS_AREA_WRITE | AS_AREA_CACHEABLE; 230 ret = physmem_map((void *) addr_phys, rd_addr, 225 int flags = AS_AREA_READ | AS_AREA_WRITE | AS_AREA_CACHEABLE; 226 int retval = physmem_map((void *) rd_ph_addr, rd_addr, 231 227 ALIGN_UP(rd_size, PAGE_SIZE) >> PAGE_WIDTH, flags); 232 if (ret < 0) { 228 229 if (retval < 0) { 233 230 printf("%s: Error mapping RAM disk\n", NAME); 234 231 return false; 235 232 } 236 233 237 printf("%s: Found RAM disk at %p, % " PRIun "bytes\n", NAME,238 (void *) addr_phys,size);239 240 ret= loc_server_register(NAME, rd_connection);241 if (r et< 0) {242 printf("%s: Unable to register driver (%d)\n", NAME, r et);234 printf("%s: Found RAM disk at %p, %zu bytes\n", NAME, 235 (void *) rd_ph_addr, rd_size); 236 237 int rc = loc_server_register(NAME, rd_connection); 238 if (rc < 0) { 239 printf("%s: Unable to register driver (%d)\n", NAME, rc); 243 240 return false; 244 241 } 245 242 246 243 service_id_t service_id; 247 ret = loc_service_register("bd/initrd", &service_id); 248 if (ret != EOK) { 244 if (loc_service_register("bd/initrd", &service_id) != EOK) { 249 245 printf("%s: Unable to register device service\n", NAME); 250 246 return false;
Note:
See TracChangeset
for help on using the changeset viewer.