X-Git-Url: https://git.ucc.asn.au/?a=blobdiff_plain;f=KernelLand%2FKernel%2Farch%2Farmv7%2Fmm_virt.c;h=b2f74548e94089816537b1673c8ca30528bfef99;hb=60088c0ff18ee5fe5050e65c6c1cb5eb539f6c04;hp=8003420464f237c3edfc20a327b92608f4c35b51;hpb=3be7e2aa30e9c6d6b73290f4881bfea8afce01fd;p=tpg%2Facess2.git diff --git a/KernelLand/Kernel/arch/armv7/mm_virt.c b/KernelLand/Kernel/arch/armv7/mm_virt.c index 80034204..b2f74548 100644 --- a/KernelLand/Kernel/arch/armv7/mm_virt.c +++ b/KernelLand/Kernel/arch/armv7/mm_virt.c @@ -328,7 +328,7 @@ int MM_int_GetPageInfo(tVAddr VAddr, tMM_PageInfo *pi) } // --- Exports --- -tPAddr MM_GetPhysAddr(const void *Ptr) +tPAddr MM_GetPhysAddr(volatile const void *Ptr) { tMM_PageInfo pi; if( MM_int_GetPageInfo((tVAddr)Ptr, &pi) ) @@ -803,7 +803,7 @@ void MM_FreeTemp(void *Ptr) MM_Deallocate(VAddr); } -tVAddr MM_MapHWPages(tPAddr PAddr, Uint NPages) +void *MM_MapHWPages(tPAddr PAddr, Uint NPages) { tVAddr ret; int i; @@ -833,17 +833,17 @@ tVAddr MM_MapHWPages(tPAddr PAddr, Uint NPages) MM_Map(ret+i*PAGE_SIZE, PAddr+i*PAGE_SIZE); // and return LEAVE('p', ret); - return ret; + return (void*)ret; } Log_Warning("MMVirt", "MM_MapHWPages: No space for a %i page block", NPages); LEAVE('p', 0); return 0; } -tVAddr MM_AllocDMA(int Pages, int MaxBits, tPAddr *PAddr) +void *MM_AllocDMA(int Pages, int MaxBits, tPAddr *PAddr) { tPAddr phys; - tVAddr ret; + void *ret; phys = MM_AllocPhysRange(Pages, MaxBits); if(!phys) { @@ -852,7 +852,12 @@ tVAddr MM_AllocDMA(int Pages, int MaxBits, tPAddr *PAddr) } ret = MM_MapHWPages(phys, Pages); - *PAddr = phys; + if( !ret ) { + MM_DerefPhys(phys); + return NULL; + } + if( PAddr ) + *PAddr = phys; return ret; }