41#include <linux/spinlock.h>
44static int c4iw_init_qid_table(
struct c4iw_rdev *rdev)
52 printf(
"%s: return ENOMEM\n", __func__);
71 err = c4iw_init_qid_table(rdev);
94 if (entry == (
u32)(-1)) {
112 mutex_lock(&uctx->
lock);
113 if (!list_empty(&uctx->
cqids)) {
116 list_del(&
entry->entry);
152 mutex_unlock(&uctx->
lock);
171 mutex_lock(&uctx->
lock);
173 mutex_unlock(&uctx->
lock);
182 mutex_lock(&uctx->
lock);
183 if (!list_empty(&uctx->
qpids)) {
186 list_del(&
entry->entry);
222 mutex_unlock(&uctx->
lock);
241 mutex_lock(&uctx->
lock);
243 mutex_unlock(&uctx->
lock);
255#define MIN_PBL_SHIFT 5
261 vmem_xalloc(rdev->
pbl_arena, roundup(size, (1 << MIN_PBL_SHIFT)),
262 4, 0, 0, VMEM_ADDR_MIN, VMEM_ADDR_MAX,
263 M_FIRSTFIT|M_NOWAIT, &addr);
267 rdev->
stats.
pbl.
cur += roundup(size, 1 << MIN_PBL_SHIFT);
278 CTR3(
KTR_IW_CXGBE,
"%s addr 0x%x size %d", __func__, addr, size);
280 rdev->
stats.
pbl.
cur -= roundup(size, 1 << MIN_PBL_SHIFT);
282 vmem_xfree(rdev->
pbl_arena, addr, roundup(size,(1 << MIN_PBL_SHIFT)));
287 rdev->
pbl_arena = vmem_create(
"PBL_MEM_POOL",
290 1, 0, M_FIRSTFIT| M_NOWAIT);
304#define MIN_RQT_SHIFT 10
311 roundup((size << 6),(1 << MIN_RQT_SHIFT)),
312 4, 0, 0, VMEM_ADDR_MIN, VMEM_ADDR_MAX,
313 M_FIRSTFIT|M_NOWAIT, &addr);
317 printf(
"%s: Out of RQT memory\n",
318 device_get_nameunit(rdev->
adap->
dev));
321 rdev->
stats.
rqt.
cur += roundup(size << 6, 1 << MIN_RQT_SHIFT);
332 CTR3(
KTR_IW_CXGBE,
"%s addr 0x%x size %d", __func__, addr, size << 6);
334 rdev->
stats.
rqt.
cur -= roundup(size << 6, 1 << MIN_RQT_SHIFT);
337 roundup((size << 6),(1 << MIN_RQT_SHIFT)));
342 rdev->
rqt_arena = vmem_create(
"RQT_MEM_POOL",
345 1, 0, M_FIRSTFIT| M_NOWAIT);
u32 c4iw_get_qpid(struct c4iw_rdev *rdev, struct c4iw_dev_ucontext *uctx)
void c4iw_destroy_resource(struct c4iw_resource *rscp)
int c4iw_rqtpool_create(struct c4iw_rdev *rdev)
int c4iw_init_resource(struct c4iw_rdev *rdev, u32 nr_tpt, u32 nr_pdid)
void c4iw_id_free(struct c4iw_id_table *alloc, u32 obj)
void c4iw_id_table_free(struct c4iw_id_table *alloc)
u32 c4iw_pblpool_alloc(struct c4iw_rdev *rdev, int size)
void c4iw_pblpool_destroy(struct c4iw_rdev *rdev)
u32 c4iw_rqtpool_alloc(struct c4iw_rdev *rdev, int size)
void c4iw_rqtpool_destroy(struct c4iw_rdev *rdev)
#define C4IW_ID_TABLE_F_RANDOM
u32 c4iw_get_resource(struct c4iw_id_table *id_table)
void c4iw_rqtpool_free(struct c4iw_rdev *rdev, u32 addr, int size)
void c4iw_put_qpid(struct c4iw_rdev *rdev, u32 qid, struct c4iw_dev_ucontext *uctx)
u32 c4iw_id_alloc(struct c4iw_id_table *alloc)
int c4iw_id_table_alloc(struct c4iw_id_table *alloc, u32 start, u32 num, u32 reserved, u32 flags)
void c4iw_pblpool_free(struct c4iw_rdev *rdev, u32 addr, int size)
void c4iw_put_cqid(struct c4iw_rdev *rdev, u32 qid, struct c4iw_dev_ucontext *uctx)
int c4iw_pblpool_create(struct c4iw_rdev *rdev)
u32 c4iw_get_cqid(struct c4iw_rdev *rdev, struct c4iw_dev_ucontext *uctx)
void c4iw_put_resource(struct c4iw_id_table *id_table, u32 entry)
struct c4iw_resource resource
struct c4iw_id_table tpt_table
struct c4iw_id_table qid_table
struct c4iw_id_table pdid_table