From 2e67ed108763894e78221d99ed2e8e8b5b570199 Mon Sep 17 00:00:00 2001 From: Russell King Date: Thu, 25 Oct 2012 12:01:33 +0100 Subject: Make physical addresses 'unsigned long' Rather than having physical addresses be a void * pointer, make them integer like; they're really just numbers because we can't ever dereference them and they certainly aren't pointer-like. --- bmm_lib.c | 24 ++++++++++++------------ bmm_lib.h | 8 ++++---- bmm_test.c | 14 +++++++------- 3 files changed, 23 insertions(+), 23 deletions(-) diff --git a/bmm_lib.c b/bmm_lib.c index c4d56f6..e39524d 100644 --- a/bmm_lib.c +++ b/bmm_lib.c @@ -104,7 +104,7 @@ void bmm_free(void *vaddr) ioctl(bmm_fd, BMM_FREE, &io); } -void *bmm_attach(void *paddr, unsigned long len) +void *bmm_attach(unsigned long paddr, unsigned long len) { void *vaddr; @@ -114,7 +114,7 @@ void *bmm_attach(void *paddr, unsigned long len) if(bmm_init() < 0) return NULL; - vaddr = mmap(0, len, PROT_READ | PROT_WRITE, MAP_SHARED, bmm_fd, (unsigned long)paddr); + vaddr = mmap(0, len, PROT_READ | PROT_WRITE, MAP_SHARED, bmm_fd, paddr); return ((int)vaddr == -1) ? NULL : vaddr; } @@ -127,7 +127,7 @@ void bmm_detach(void *vaddr, unsigned long len) munmap(vaddr, len); } -void *bmm_get_vaddr(void *paddr) +void *bmm_get_vaddr(unsigned long paddr) { int ret; ioctl_arg_t io; @@ -135,7 +135,7 @@ void *bmm_get_vaddr(void *paddr) if(bmm_init() < 0) return NULL; - io.input = (unsigned long)paddr; + io.input = paddr; io.output = 0; io.arg = 0; ret = ioctl(bmm_fd, BMM_GET_VIRT_ADDR, &io); @@ -145,13 +145,13 @@ void *bmm_get_vaddr(void *paddr) return (void *)io.output; } -void *bmm_get_kern_paddr(void *vaddr, unsigned long size) +unsigned long bmm_get_kern_paddr(void *vaddr, unsigned long size) { int ret; ioctl_arg_t io; if(bmm_init() < 0) - return NULL; + return 0; io.input = (unsigned long)vaddr; io.length = (unsigned long)size; @@ -159,27 +159,27 @@ void *bmm_get_kern_paddr(void *vaddr, unsigned long size) io.arg = 0; ret = ioctl(bmm_fd, BMM_GET_KERN_PHYS_ADDR, &io); if(ret < 0) - return NULL; + return 0; - return (void *)io.output; + return io.output; } -void *bmm_get_paddr(void *vaddr) +unsigned long bmm_get_paddr(void *vaddr) { int ret; ioctl_arg_t io; if(bmm_init() < 0) - return NULL; + return 0; io.input = (unsigned long)vaddr; io.output = 0; io.arg = 0; ret = ioctl(bmm_fd,BMM_GET_PHYS_ADDR, &io); if(ret < 0) - return NULL; + return 0; - return (void *)io.output; + return io.output; } unsigned long bmm_get_mem_size(void *vaddr) diff --git a/bmm_lib.h b/bmm_lib.h index 6190088..37dfe67 100644 --- a/bmm_lib.h +++ b/bmm_lib.h @@ -42,11 +42,11 @@ int bmm_init(); void bmm_exit(); void *bmm_malloc(unsigned long size, int attr); void bmm_free(void *vaddr); -void *bmm_attach(void *paddr, unsigned long len); +void *bmm_attach(unsigned long paddr, unsigned long len); void bmm_detach(void *vaddr, unsigned long len); -void *bmm_get_vaddr(void *paddr); -void *bmm_get_paddr(void *vaddr); -void *bmm_get_kern_paddr(void *vaddr, unsigned long size); +void *bmm_get_vaddr(unsigned long paddr); +unsigned long bmm_get_paddr(void *vaddr); +unsigned long bmm_get_kern_paddr(void *vaddr, unsigned long size); int bmm_get_mem_attr(void *vaddr); int bmm_set_mem_attr(void *vaddr, int attr); /* Not supported yet */ unsigned long bmm_get_mem_size(void *vaddr); diff --git a/bmm_test.c b/bmm_test.c index 34e4559..d897aaa 100644 --- a/bmm_test.c +++ b/bmm_test.c @@ -82,10 +82,10 @@ int test_bmm_malloc(unsigned long size, int attr) return -1; } for(off = 0; off < size; off += 1024*1024){ - void *get_paddr = bmm_get_paddr(vaddr+off); + unsigned long get_paddr = bmm_get_paddr(vaddr+off); void *get_vaddr = bmm_get_vaddr(get_paddr); int get_attr = bmm_get_mem_attr(get_vaddr); - printf("\toff = 0x%x, vaddr=0x%p, get_vaddr=0x%p, get_paddr=0x%p\n", off, vaddr+off, get_vaddr, get_paddr); + printf("\toff = 0x%x, vaddr=0x%p, get_vaddr=0x%p, get_paddr=0x%08lx\n", off, vaddr+off, get_vaddr, get_paddr); printf("\tset_attr=0x%x, get_attr=0x%x\n", attr, get_attr); if(vaddr+off != get_vaddr) return -1; @@ -103,7 +103,7 @@ int test_bmm_malloc(unsigned long size, int attr) printf("\tbmm_get_free_space() return %ldKB %ldKB %ldKB\n", free_size1/1024, free_size2/1024, free_size3/1024); - return ((int)vaddr <= 0 || + return ( allocated_size2 - allocated_size1 != size || allocated_size1 != allocated_size3 || free_size1 - free_size2 != size || @@ -157,8 +157,8 @@ int test_bmm_share(unsigned long size) { char *src; char *dst; - char *psrc; - char *pdst; + unsigned long psrc; + unsigned long pdst; unsigned long i; unsigned long off, len; unsigned long free_size1; @@ -228,9 +228,9 @@ int test_bmm_share(unsigned long size) pdst = bmm_get_paddr(dst); if(pdst == psrc + off) - printf("\t[%d] pdst(%p) == psrc(%p) + off(%lx)\n", pid, pdst, psrc, off); + printf("\t[%d] pdst(0x%08lx) == psrc(0x%08lx) + off(%lx)\n", pid, pdst, psrc, off); else - printf("\t[%d] Error: pdst(%p) != psrc(%p) + off(%lx)\n", pid, pdst, psrc, off); + printf("\t[%d] Error: pdst(0x%08lx) != psrc(0x%08lx) + off(%lx)\n", pid, pdst, psrc, off); bmm_flush_cache(dst, BMM_DMA_FROM_DEVICE); for(i=0; i