summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorOliver McFadden <z3ro.geek@gmail.com>2007-10-09 04:19:06 +0000
committerOliver McFadden <z3ro.geek@gmail.com>2007-10-09 04:19:06 +0000
commita80145235dab41e2d9cc865c0f5c547061ade7ef (patch)
tree3609df8832b656c9e940cfbaa986c47c9dc477f9
parent707965840288b69a536c3f0ee42cbe7ddb1550c6 (diff)
Cleaned up the PCI-E memory read function.
-rw-r--r--src/revenge_memory.c41
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 *