| 1326 | } |
| 1327 | |
| 1328 | int rt_varea_map_page(rt_varea_t varea, void *vaddr, void *page) |
| 1329 | { |
| 1330 | int err = RT_EOK; |
| 1331 | void *page_pa = rt_kmem_v2p(page); |
| 1332 | |
| 1333 | if (!varea || !vaddr || !page) |
| 1334 | { |
| 1335 | LOG_W("%s(%p,%p,%p): invalid input", __func__, varea, vaddr, page); |
| 1336 | err = -RT_EINVAL; |
| 1337 | } |
| 1338 | else if (page_pa == ARCH_MAP_FAILED) |
| 1339 | { |
| 1340 | LOG_W("%s: page is not in kernel space", __func__); |
| 1341 | err = -RT_ERROR; |
| 1342 | } |
| 1343 | else if (_not_in_range(MMF_MAP_FIXED, vaddr, ARCH_PAGE_SIZE, |
| 1344 | varea->start, varea->size)) |
| 1345 | { |
| 1346 | LOG_W("%s(%p,%lx): not in range of varea(%p,%lx)", __func__, |
| 1347 | vaddr, ARCH_PAGE_SIZE, varea->start, varea->size); |
| 1348 | err = -RT_EINVAL; |
| 1349 | } |
| 1350 | else |
| 1351 | { |
| 1352 | err = _do_named_map( |
| 1353 | varea->aspace, |
| 1354 | varea, |
| 1355 | vaddr, |
| 1356 | ARCH_PAGE_SIZE, |
| 1357 | MM_PA_TO_OFF(page_pa), |
| 1358 | varea->attr |
| 1359 | ); |
| 1360 | } |
| 1361 | |
| 1362 | return err; |
| 1363 | } |
| 1364 | |
| 1365 | int rt_varea_unmap_page(rt_varea_t varea, void *vaddr) |
| 1366 | { |