void *khrn_hw_unaddr(uint32_t addr) { ghw_error_e result; #ifdef FILE_DUMP fprintf(fp_dump, "khrn_hw_unaddr %x\n", addr); #endif void* virt; unsigned int phys = (unsigned int) addr; HeaderNode* head = mem_list.getHead(); while (head != NULL) { MemHeader* header = head->get(); unsigned int pa = (unsigned int)header->getPhys(); if ( (pa <= phys) && (phys <= pa + header->getSize()) ) { return ((unsigned char*)header->getVirt()) + (phys-pa); } head = head->getNext(); } result = mem_allocator->phys2virt(phys, (void*&)virt); if (result != GHW_ERROR_NONE) { mem_allocator1->phys2virt(phys, (void*&)virt); } return virt; }
unsigned int khrn_hw_addr(const void *addr) { ghw_error_e result; #ifdef FILE_DUMP fprintf(fp_dump, "khrn_hwaddr %x\n", addr); #endif u32 phys; unsigned int virt = (unsigned int) addr; HeaderNode* head = mem_list.getHead(); while (head != NULL) { MemHeader* header = head->get(); unsigned int va = (unsigned int)header->getVirt(); if ( (va <= virt) && (virt <= va + header->getSize()) ) { unsigned int out = header->getPhys() + (virt-va); if (out == 0) printf("input of %p out of ZERO!\n", addr); return out; } head = head->getNext(); } result = mem_allocator->virt2phys(phys, (void*)virt); if (result != GHW_ERROR_NONE) { result = mem_allocator1->virt2phys(phys, (void*)virt); } if (phys == 0) printf("input of %p out of ZERO!\n", addr); return phys; }
void mem_free_legacy(void *ptr) { #ifdef FILE_DUMP fprintf(fp_dump, "mem_free_legacy %x\n", ptr); #endif u32 phys; unsigned int virt = (unsigned int) ptr; HeaderNode* head = mem_list.getHead(); while (head != NULL) { MemHeader* header = head->get(); unsigned int va = (unsigned int)header->getVirt(); if ( (va <= virt) && (virt <= va + header->getSize()) ) { header->release(); break; } head = head->getNext(); } }