diff options
author | Oliver McFadden <z3ro.geek@gmail.com> | 2007-10-09 04:19:06 +0000 |
---|---|---|
committer | Oliver McFadden <z3ro.geek@gmail.com> | 2007-10-09 04:19:06 +0000 |
commit | a80145235dab41e2d9cc865c0f5c547061ade7ef (patch) | |
tree | 3609df8832b656c9e940cfbaa986c47c9dc477f9 | |
parent | 707965840288b69a536c3f0ee42cbe7ddb1550c6 (diff) |
Cleaned up the PCI-E memory read function.
-rw-r--r-- | src/revenge_memory.c | 41 |
1 files changed, 24 insertions, 17 deletions
diff --git a/src/revenge_memory.c b/src/revenge_memory.c index 37022a2..87930e7 100644 --- a/src/revenge_memory.c +++ b/src/revenge_memory.c @@ -69,35 +69,42 @@ gart_to_phys (unsigned int addr) static void * memory_read_pcigart (unsigned int addr, unsigned int size) { - unsigned int cpa; //current page address - unsigned int lpa; //last page address - - unsigned int addr_mod, buf_size; - void *dst, *tmp, *cbuf; + unsigned int addr_mod; + unsigned int buf_size; + unsigned int start_page_addr, end_page_addr; + void *dest; + void *mem_map, *mem_map_ptr; void *page_mem_map; addr_mod = addr % ATI_PCIGART_PAGE_SIZE; buf_size = round_up (addr_mod + size, ATI_PCIGART_PAGE_SIZE); - cbuf = tmp = (void *) malloc (buf_size); - cpa = round_down (addr, ATI_PCIGART_PAGE_SIZE); // first page - lpa = cpa + buf_size; // last page + start_page_addr = round_down (addr, ATI_PCIGART_PAGE_SIZE); + end_page_addr = start_page_addr + buf_size; + + mem_map = (void *) malloc (buf_size); - // printf ("addr = 0x%08x, size = 0x%08x, first page = 0x%08x, last page = 0x%08x\n", addr, size, cpa, lpa); +#if 0 + printf + ("%s: addr = 0x%08x size = 0x%08x start_page_addr = 0x%08x end_page_addr = 0x%08x\n", + __func__, addr, size, start_page_addr, end_page_addr); +#endif - for (; cpa < lpa; - cpa += ATI_PCIGART_PAGE_SIZE, tmp += ATI_PCIGART_PAGE_SIZE) + for (mem_map_ptr = mem_map; start_page_addr < end_page_addr; + start_page_addr += ATI_PCIGART_PAGE_SIZE, mem_map_ptr += + ATI_PCIGART_PAGE_SIZE) { if ((page_mem_map = mmap (NULL, ATI_PCIGART_PAGE_SIZE, PROT_READ | PROT_WRITE, - MAP_SHARED, mem_fd, gart_to_phys (cpa))) == MAP_FAILED) + MAP_SHARED, mem_fd, + gart_to_phys (start_page_addr))) == MAP_FAILED) { fprintf (stderr, "%s: %s\n", program_invocation_short_name, strerror (errno)); exit (EXIT_FAILURE); } - memcpy (tmp, page_mem_map, ATI_PCIGART_PAGE_SIZE); + memcpy (mem_map_ptr, page_mem_map, ATI_PCIGART_PAGE_SIZE); if (munmap (page_mem_map, ATI_PCIGART_PAGE_SIZE) < 0) { @@ -107,11 +114,11 @@ memory_read_pcigart (unsigned int addr, unsigned int size) } } - dst = (void *) malloc (size); - memcpy (dst, cbuf + addr_mod, size); - free (cbuf); + dest = (void *) malloc (size); + memcpy (dest, mem_map + addr_mod, size); + free (mem_map); - return dst; + return dest; } void * |