aboutsummaryrefslogtreecommitdiff
path: root/sys/dev/vxge/vxgehal/vxgehal-blockpool.h
diff options
context:
space:
mode:
Diffstat (limited to 'sys/dev/vxge/vxgehal/vxgehal-blockpool.h')
-rw-r--r--sys/dev/vxge/vxgehal/vxgehal-blockpool.h137
1 files changed, 137 insertions, 0 deletions
diff --git a/sys/dev/vxge/vxgehal/vxgehal-blockpool.h b/sys/dev/vxge/vxgehal/vxgehal-blockpool.h
new file mode 100644
index 000000000000..fb3a2aa1dbc3
--- /dev/null
+++ b/sys/dev/vxge/vxgehal/vxgehal-blockpool.h
@@ -0,0 +1,137 @@
+/*-
+ * Copyright(c) 2002-2011 Exar Corp.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification are permitted provided the following conditions are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright notice,
+ * this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * 3. Neither the name of the Exar Corporation nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+/*$FreeBSD$*/
+
+#ifndef VXGE_HAL_BLOCKPOOL_H
+#define VXGE_HAL_BLOCKPOOL_H
+
+__EXTERN_BEGIN_DECLS
+
+/*
+ * struct __hal_blockpool_entry_t - Block private data structure
+ * @item: List header used to link.
+ * @length: Length of the block
+ * @memblock: Virtual address block
+ * @dma_addr: DMA Address of the block.
+ * @dma_handle: DMA handle of the block.
+ * @acc_handle: DMA acc handle
+ *
+ * Block is allocated with a header to put the blocks into list.
+ *
+ */
+typedef struct __hal_blockpool_entry_t {
+ vxge_list_t item;
+ u32 length;
+ void *memblock;
+ dma_addr_t dma_addr;
+ pci_dma_h dma_handle;
+ pci_dma_acc_h acc_handle;
+} __hal_blockpool_entry_t;
+
+/*
+ * struct __hal_blockpool_t - Block Pool
+ * @hldev: HAL device
+ * @block_size: size of each block.
+ * @Pool_size: Number of blocks in the pool
+ * @pool_incr: Number of blocks to be requested/freed at a time from OS
+ * @pool_min: Minimum number of block below which to request additional blocks
+ * @pool_max: Maximum number of blocks above which to free additional blocks
+ * @req_out: Number of block requests with OS out standing
+ * @dma_flags: DMA flags
+ * @free_block_list: List of free blocks
+ * @pool_lock: Spin lock for the pool
+ *
+ * Block pool contains the DMA blocks preallocated.
+ *
+ */
+typedef struct __hal_blockpool_t {
+ vxge_hal_device_h hldev;
+ u32 block_size;
+ u32 pool_size;
+ u32 pool_incr;
+ u32 pool_min;
+ u32 pool_max;
+ u32 req_out;
+ u32 dma_flags;
+ vxge_list_t free_block_list;
+ vxge_list_t free_entry_list;
+
+#if defined(VXGE_HAL_BP_POST) || defined(VXGE_HAL_BP_POST_IRQ)
+ spinlock_t pool_lock;
+#endif
+
+} __hal_blockpool_t;
+
+vxge_hal_status_e
+__hal_blockpool_create(vxge_hal_device_h hldev,
+ __hal_blockpool_t *blockpool,
+ u32 pool_size,
+ u32 pool_incr,
+ u32 pool_min,
+ u32 pool_max);
+
+void
+__hal_blockpool_destroy(__hal_blockpool_t *blockpool);
+
+__hal_blockpool_entry_t *
+__hal_blockpool_block_allocate(vxge_hal_device_h hldev,
+ u32 size);
+
+void
+__hal_blockpool_block_free(vxge_hal_device_h hldev,
+ __hal_blockpool_entry_t *entry);
+
+void *
+__hal_blockpool_malloc(vxge_hal_device_h hldev,
+ u32 size,
+ dma_addr_t *dma_addr,
+ pci_dma_h *dma_handle,
+ pci_dma_acc_h *acc_handle);
+
+void
+__hal_blockpool_free(vxge_hal_device_h hldev,
+ void *memblock,
+ u32 size,
+ dma_addr_t *dma_addr,
+ pci_dma_h *dma_handle,
+ pci_dma_acc_h *acc_handle);
+
+vxge_hal_status_e
+__hal_blockpool_list_allocate(vxge_hal_device_h hldev,
+ vxge_list_t *blocklist, u32 count);
+
+void
+__hal_blockpool_list_free(vxge_hal_device_h hldev,
+ vxge_list_t *blocklist);
+
+__EXTERN_END_DECLS
+
+#endif /* VXGE_HAL_BLOCKPOOL_H */