MCPcopy Create free account
hub / github.com/RT-Thread/rt-thread / _rt_hw_mmu_map

Function _rt_hw_mmu_map

libcpu/mips/gs264/mmu.c:484–527  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

482
483#ifdef RT_USING_SMART
484void *_rt_hw_mmu_map(rt_mmu_info *mmu_info, void *v_addr, void* p_addr, size_t size, size_t attr)
485{
486 size_t pa_s, pa_e;
487 size_t vaddr;
488 int pages;
489 int ret;
490
491 if (!size)
492 {
493 return 0;
494 }
495 pa_s = (size_t)p_addr;
496 pa_e = (size_t)p_addr + size - 1;
497 pa_s >>= ARCH_PAGE_SHIFT;
498 pa_e >>= ARCH_PAGE_SHIFT;
499 pages = pa_e - pa_s + 1;
500 if (v_addr)
501 {
502 vaddr = (size_t)v_addr;
503 pa_s = (size_t)p_addr;
504 if ((vaddr & ARCH_PAGE_MASK) != (pa_s & ARCH_PAGE_MASK))
505 {
506 return 0;
507 }
508 vaddr &= ~ARCH_PAGE_MASK;
509 if (check_vaddr(mmu_info, (void*)vaddr, pages) != 0)
510 {
511 return 0;
512 }
513 }
514 else
515 {
516 vaddr = find_vaddr(mmu_info, pages);
517 }
518 if (vaddr) {
519 ret = __rt_hw_mmu_map(mmu_info, (void*)vaddr, p_addr, pages, attr);
520 if (ret == 0)
521 {
522 rt_hw_cpu_tlb_invalidate();
523 return (void*)(vaddr + ((size_t)p_addr & ARCH_PAGE_MASK));
524 }
525 }
526 return 0;
527}
528#else
529void *_rt_hw_mmu_map(rt_mmu_info *mmu_info, void* p_addr, size_t size, size_t attr)
530{

Callers 1

rt_hw_mmu_mapFunction · 0.85

Calls 4

check_vaddrFunction · 0.85
find_vaddrFunction · 0.85
__rt_hw_mmu_mapFunction · 0.85
rt_hw_cpu_tlb_invalidateFunction · 0.85

Tested by

no test coverage detected