Changes in kernel/generic/src/ddi/ddi.c [3772af6:ba2be23] in mainline
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
kernel/generic/src/ddi/ddi.c
r3772af6 rba2be23 314 314 315 315 NO_TRACE static int dmamem_map(uintptr_t virt, size_t size, unsigned int map_flags, 316 unsigned int flags, void **phys)316 unsigned int flags, uintptr_t *phys) 317 317 { 318 318 ASSERT(TASK); … … 323 323 324 324 NO_TRACE static int dmamem_map_anonymous(size_t size, unsigned int map_flags, 325 unsigned int flags, void **phys, uintptr_t *virt, uintptr_t bound)325 unsigned int flags, uintptr_t *phys, uintptr_t *virt, uintptr_t bound) 326 326 { 327 327 ASSERT(TASK); 328 328 329 size_t pages = SIZE2FRAMES(size);329 size_t frames = SIZE2FRAMES(size); 330 330 uint8_t order; 331 331 332 /* We need the 2^order >= pages */333 if ( pages == 1)332 /* We need the 2^order >= frames */ 333 if (frames == 1) 334 334 order = 0; 335 335 else 336 order = fnzb( pages - 1) + 1;337 338 *phys = frame_alloc_noreserve(order, 0 );339 if (*phys == NULL)336 order = fnzb(frames - 1) + 1; 337 338 *phys = frame_alloc_noreserve(order, 0, 0); 339 if (*phys == 0) 340 340 return ENOMEM; 341 341 342 342 mem_backend_data_t backend_data; 343 backend_data.base = (uintptr_t)*phys;344 backend_data.frames = pages;343 backend_data.base = *phys; 344 backend_data.frames = frames; 345 345 346 346 if (!as_area_create(TASK->as, map_flags, size, 347 347 AS_AREA_ATTR_NONE, &phys_backend, &backend_data, virt, bound)) { 348 frame_free_noreserve( (uintptr_t)*phys);348 frame_free_noreserve(*phys); 349 349 return ENOMEM; 350 350 } … … 361 361 NO_TRACE static int dmamem_unmap_anonymous(uintptr_t virt) 362 362 { 363 // TODO: This is an ugly hack 364 as_t *as = TASK->as; 365 366 mutex_lock(&as->lock); 367 as_area_t *area = find_locked_area(as, virt); 368 if (!area) { 369 mutex_unlock(&as->lock); 370 return ENOENT; 371 } 372 frame_free_noreserve(area->backend_data.base); 373 area->backend_data.base = 0; 374 area->backend_data.frames = 0; 375 mutex_unlock(&area->lock); 376 mutex_unlock(&as->lock); 377 378 return as_area_destroy(as, virt); 363 // TODO: implement unlocking & unmap 364 return EOK; 379 365 } 380 366 … … 387 373 */ 388 374 389 void *phys;375 uintptr_t phys; 390 376 int rc = dmamem_map((uintptr_t) virt_ptr, size, map_flags, 391 377 flags, &phys); … … 404 390 */ 405 391 406 void *phys;392 uintptr_t phys; 407 393 uintptr_t virt = (uintptr_t) -1; 408 394 int rc = dmamem_map_anonymous(size, map_flags, flags,
Note:
See TracChangeset
for help on using the changeset viewer.