static dma_addr_t __hal_ring_item_dma_addr(xge_hal_mempool_h mempoolh, void *item, pci_dma_h *dma_handle) { int memblock_idx; void *memblock; xge_hal_mempool_dma_t *memblock_dma_object; ptrdiff_t dma_item_offset; /* get owner memblock index */ memblock_idx = __hal_ring_block_memblock_idx(item); /* get owner memblock by memblock index */ memblock = __hal_mempool_memblock(mempoolh, memblock_idx); /* get memblock DMA object by memblock index */ memblock_dma_object = __hal_mempool_memblock_dma(mempoolh, memblock_idx); /* calculate offset in the memblock of this item */ dma_item_offset = (char*)item - (char*)memblock; *dma_handle = memblock_dma_object->handle; return memblock_dma_object->addr + dma_item_offset; }
/* * __hal_ring_first_block_address_get - Returns the dma address of the * first block * @ringh: Handle to the ring * * Returns the dma address of the first RxD block */ u64 __hal_ring_first_block_address_get( vxge_hal_ring_h ringh) { __hal_ring_t *ring = (__hal_ring_t *) ringh; vxge_hal_mempool_dma_t *dma_object; dma_object = __hal_mempool_memblock_dma(ring->mempool, 0); vxge_assert(dma_object != NULL); return (dma_object->addr); }
/* * __hal_ring_item_dma_addr - Return the dma address of an item * @mempoolh: Handle to the memory pool of the ring * @item: Item for which to get the dma offset * @dma_handle: dma handle * * This function returns the dma address of a given item */ static dma_addr_t __hal_ring_item_dma_addr( vxge_hal_mempool_h mempoolh, void *item, pci_dma_h *dma_handle) { u32 memblock_idx; void *memblock; vxge_hal_mempool_dma_t *memblock_dma_object; vxge_hal_mempool_t *mempool = (vxge_hal_mempool_t *) mempoolh; __hal_device_t *hldev; ptrdiff_t dma_item_offset; vxge_assert((mempoolh != NULL) && (item != NULL) && (dma_handle != NULL)); hldev = (__hal_device_t *) mempool->devh; vxge_hal_trace_log_ring("==> %s:%s:%d", __FILE__, __func__, __LINE__); vxge_hal_trace_log_ring( "mempoolh = 0x"VXGE_OS_STXFMT", item = 0x"VXGE_OS_STXFMT", " "dma_handle = 0x"VXGE_OS_STXFMT, (ptr_t) mempoolh, (ptr_t) item, (ptr_t) dma_handle); /* get owner memblock index */ memblock_idx = __hal_ring_block_memblock_idx((u8 *) item); /* get owner memblock by memblock index */ memblock = __hal_mempool_memblock( (vxge_hal_mempool_t *) mempoolh, memblock_idx); /* get memblock DMA object by memblock index */ memblock_dma_object = __hal_mempool_memblock_dma( (vxge_hal_mempool_t *) mempoolh, memblock_idx); /* calculate offset in the memblock of this item */ /* LINTED */ dma_item_offset = (u8 *) item - (u8 *) memblock; *dma_handle = memblock_dma_object->handle; vxge_hal_trace_log_ring("<== %s:%s:%d Result: 0", __FILE__, __func__, __LINE__); return (memblock_dma_object->addr + dma_item_offset); }