diff options
Diffstat (limited to 'bmm_lib.c')
-rw-r--r-- | bmm_lib.c | 6 |
1 files changed, 5 insertions, 1 deletions
@@ -61,6 +61,7 @@ struct bmm_phys_buffer { struct bmm_virt_buffer { void *vaddr; size_t size; + unsigned phys_offset; struct bmm_phys_buffer *phys; }; @@ -312,6 +313,7 @@ void *bmm_malloc_aligned_phys(unsigned long size, int attr, unsigned align, vbuf->vaddr = vaddr; vbuf->size = size; + vbuf->phys_offset = 0; vbuf->phys = pbuf; pthread_mutex_lock(&bmm_mutex); @@ -463,6 +465,7 @@ void *bmm_attach(unsigned long paddr, unsigned long len) if (!pbuf->virt) pbuf->virt = vbuf; + vbuf->phys_offset = paddr - pbuf->paddr; vbuf->phys = pbuf; bmm_rb_virt_insert(vbuf); @@ -538,7 +541,8 @@ unsigned long bmm_get_paddr(void *vaddr) pthread_mutex_lock(&bmm_mutex); vbuf = bmm_buf_find_virt(vaddr); if (vbuf) - pa = vbuf->phys->paddr + (vaddr - vbuf->vaddr); + pa = vbuf->phys->paddr + vbuf->phys_offset + + (vaddr - vbuf->vaddr); pthread_mutex_unlock(&bmm_mutex); return pa; |