Lines Matching defs:rdev
38 static int c4iw_init_qid_table(struct c4iw_rdev *rdev)
42 if (c4iw_id_table_alloc(&rdev->resource.qid_table,
43 rdev->lldi.vr->qp.start,
44 rdev->lldi.vr->qp.size,
45 rdev->lldi.vr->qp.size, 0))
48 for (i = rdev->lldi.vr->qp.start;
49 i < rdev->lldi.vr->qp.start + rdev->lldi.vr->qp.size; i++)
50 if (!(i & rdev->qpmask))
51 c4iw_id_free(&rdev->resource.qid_table, i);
56 int c4iw_init_resource(struct c4iw_rdev *rdev, u32 nr_tpt,
60 err = c4iw_id_table_alloc(&rdev->resource.tpt_table, 0, nr_tpt, 1,
64 err = c4iw_init_qid_table(rdev);
67 err = c4iw_id_table_alloc(&rdev->resource.pdid_table, 0,
72 err = c4iw_id_table_alloc(&rdev->resource.srq_table, 0,
75 err = c4iw_id_table_alloc(&rdev->resource.srq_table, 0,
81 c4iw_id_table_free(&rdev->resource.pdid_table);
83 c4iw_id_table_free(&rdev->resource.qid_table);
85 c4iw_id_table_free(&rdev->resource.tpt_table);
108 u32 c4iw_get_cqid(struct c4iw_rdev *rdev, struct c4iw_dev_ucontext *uctx)
122 qid = c4iw_get_resource(&rdev->resource.qid_table);
125 mutex_lock(&rdev->stats.lock);
126 rdev->stats.qid.cur += rdev->qpmask + 1;
127 mutex_unlock(&rdev->stats.lock);
128 for (i = qid+1; i & rdev->qpmask; i++) {
145 for (i = qid+1; i & rdev->qpmask; i++) {
156 mutex_lock(&rdev->stats.lock);
157 if (rdev->stats.qid.cur > rdev->stats.qid.max)
158 rdev->stats.qid.max = rdev->stats.qid.cur;
159 mutex_unlock(&rdev->stats.lock);
163 void c4iw_put_cqid(struct c4iw_rdev *rdev, u32 qid,
178 u32 c4iw_get_qpid(struct c4iw_rdev *rdev, struct c4iw_dev_ucontext *uctx)
192 qid = c4iw_get_resource(&rdev->resource.qid_table);
194 mutex_lock(&rdev->stats.lock);
195 rdev->stats.qid.fail++;
196 mutex_unlock(&rdev->stats.lock);
199 mutex_lock(&rdev->stats.lock);
200 rdev->stats.qid.cur += rdev->qpmask + 1;
201 mutex_unlock(&rdev->stats.lock);
202 for (i = qid+1; i & rdev->qpmask; i++) {
219 for (i = qid + 1; i & rdev->qpmask; i++) {
230 mutex_lock(&rdev->stats.lock);
231 if (rdev->stats.qid.cur > rdev->stats.qid.max)
232 rdev->stats.qid.max = rdev->stats.qid.cur;
233 mutex_unlock(&rdev->stats.lock);
237 void c4iw_put_qpid(struct c4iw_rdev *rdev, u32 qid,
265 u32 c4iw_pblpool_alloc(struct c4iw_rdev *rdev, int size)
267 unsigned long addr = gen_pool_alloc(rdev->pbl_pool, size);
269 mutex_lock(&rdev->stats.lock);
271 rdev->stats.pbl.cur += roundup(size, 1 << MIN_PBL_SHIFT);
272 if (rdev->stats.pbl.cur > rdev->stats.pbl.max)
273 rdev->stats.pbl.max = rdev->stats.pbl.cur;
274 kref_get(&rdev->pbl_kref);
276 rdev->stats.pbl.fail++;
277 mutex_unlock(&rdev->stats.lock);
283 struct c4iw_rdev *rdev;
285 rdev = container_of(kref, struct c4iw_rdev, pbl_kref);
286 gen_pool_destroy(rdev->pbl_pool);
287 complete(&rdev->pbl_compl);
290 void c4iw_pblpool_free(struct c4iw_rdev *rdev, u32 addr, int size)
293 mutex_lock(&rdev->stats.lock);
294 rdev->stats.pbl.cur -= roundup(size, 1 << MIN_PBL_SHIFT);
295 mutex_unlock(&rdev->stats.lock);
296 gen_pool_free(rdev->pbl_pool, (unsigned long)addr, size);
297 kref_put(&rdev->pbl_kref, destroy_pblpool);
300 int c4iw_pblpool_create(struct c4iw_rdev *rdev)
304 rdev->pbl_pool = gen_pool_create(MIN_PBL_SHIFT, -1);
305 if (!rdev->pbl_pool)
308 pbl_start = rdev->lldi.vr->pbl.start;
309 pbl_chunk = rdev->lldi.vr->pbl.size;
314 if (gen_pool_add(rdev->pbl_pool, pbl_start, pbl_chunk, -1)) {
333 void c4iw_pblpool_destroy(struct c4iw_rdev *rdev)
335 kref_put(&rdev->pbl_kref, destroy_pblpool);
344 u32 c4iw_rqtpool_alloc(struct c4iw_rdev *rdev, int size)
346 unsigned long addr = gen_pool_alloc(rdev->rqt_pool, size << 6);
350 pci_name(rdev->lldi.pdev));
351 mutex_lock(&rdev->stats.lock);
353 rdev->stats.rqt.cur += roundup(size << 6, 1 << MIN_RQT_SHIFT);
354 if (rdev->stats.rqt.cur > rdev->stats.rqt.max)
355 rdev->stats.rqt.max = rdev->stats.rqt.cur;
356 kref_get(&rdev->rqt_kref);
358 rdev->stats.rqt.fail++;
359 mutex_unlock(&rdev->stats.lock);
365 struct c4iw_rdev *rdev;
367 rdev = container_of(kref, struct c4iw_rdev, rqt_kref);
368 gen_pool_destroy(rdev->rqt_pool);
369 complete(&rdev->rqt_compl);
372 void c4iw_rqtpool_free(struct c4iw_rdev *rdev, u32 addr, int size)
375 mutex_lock(&rdev->stats.lock);
376 rdev->stats.rqt.cur -= roundup(size << 6, 1 << MIN_RQT_SHIFT);
377 mutex_unlock(&rdev->stats.lock);
378 gen_pool_free(rdev->rqt_pool, (unsigned long)addr, size << 6);
379 kref_put(&rdev->rqt_kref, destroy_rqtpool);
382 int c4iw_rqtpool_create(struct c4iw_rdev *rdev)
387 rdev->rqt_pool = gen_pool_create(MIN_RQT_SHIFT, -1);
388 if (!rdev->rqt_pool)
395 if (rdev->lldi.vr->srq.size)
398 rqt_start = rdev->lldi.vr->rq.start + skip;
399 rqt_chunk = rdev->lldi.vr->rq.size - skip;
404 if (gen_pool_add(rdev->rqt_pool, rqt_start, rqt_chunk, -1)) {
422 void c4iw_rqtpool_destroy(struct c4iw_rdev *rdev)
424 kref_put(&rdev->rqt_kref, destroy_rqtpool);
427 int c4iw_alloc_srq_idx(struct c4iw_rdev *rdev)
431 idx = c4iw_id_alloc(&rdev->resource.srq_table);
432 mutex_lock(&rdev->stats.lock);
434 rdev->stats.srqt.fail++;
435 mutex_unlock(&rdev->stats.lock);
438 rdev->stats.srqt.cur++;
439 if (rdev->stats.srqt.cur > rdev->stats.srqt.max)
440 rdev->stats.srqt.max = rdev->stats.srqt.cur;
441 mutex_unlock(&rdev->stats.lock);
445 void c4iw_free_srq_idx(struct c4iw_rdev *rdev, int idx)
447 c4iw_id_free(&rdev->resource.srq_table, idx);
448 mutex_lock(&rdev->stats.lock);
449 rdev->stats.srqt.cur--;
450 mutex_unlock(&rdev->stats.lock);
458 u32 c4iw_ocqp_pool_alloc(struct c4iw_rdev *rdev, int size)
460 unsigned long addr = gen_pool_alloc(rdev->ocqp_pool, size);
463 mutex_lock(&rdev->stats.lock);
464 rdev->stats.ocqp.cur += roundup(size, 1 << MIN_OCQP_SHIFT);
465 if (rdev->stats.ocqp.cur > rdev->stats.ocqp.max)
466 rdev->stats.ocqp.max = rdev->stats.ocqp.cur;
467 mutex_unlock(&rdev->stats.lock);
472 void c4iw_ocqp_pool_free(struct c4iw_rdev *rdev, u32 addr, int size)
475 mutex_lock(&rdev->stats.lock);
476 rdev->stats.ocqp.cur -= roundup(size, 1 << MIN_OCQP_SHIFT);
477 mutex_unlock(&rdev->stats.lock);
478 gen_pool_free(rdev->ocqp_pool, (unsigned long)addr, size);
481 int c4iw_ocqp_pool_create(struct c4iw_rdev *rdev)
485 rdev->ocqp_pool = gen_pool_create(MIN_OCQP_SHIFT, -1);
486 if (!rdev->ocqp_pool)
489 start = rdev->lldi.vr->ocq.start;
490 chunk = rdev->lldi.vr->ocq.size;
495 if (gen_pool_add(rdev->ocqp_pool, start, chunk, -1)) {
513 void c4iw_ocqp_pool_destroy(struct c4iw_rdev *rdev)
515 gen_pool_destroy(rdev->ocqp_pool);