Пример #1
0
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;
}
Пример #2
0
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;
}
Пример #3
0
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();
	}
}