Lines Matching defs:qpt
265 static void get_map_page(struct rvt_qpn_table *qpt,
274 spin_lock(&qpt->lock);
279 spin_unlock(&qpt->lock);
285 * @qpt: the QPN table
287 static int init_qpn_table(struct rvt_dev_info *rdi, struct rvt_qpn_table *qpt)
296 spin_lock_init(&qpt->lock);
298 qpt->last = rdi->dparms.qpn_start;
299 qpt->incr = rdi->dparms.qpn_inc << rdi->dparms.qos_shift;
309 qpt->nmaps = rdi->dparms.qpn_res_start / RVT_BITS_PER_PAGE;
315 map = &qpt->map[qpt->nmaps];
321 get_map_page(qpt, map);
331 qpt->nmaps++;
341 * @qpt: the QPN table
343 static void free_qpn_table(struct rvt_qpn_table *qpt)
347 for (i = 0; i < ARRAY_SIZE(qpt->map); i++)
348 free_page((unsigned long)qpt->map[i].page);
473 static inline unsigned mk_qpn(struct rvt_qpn_table *qpt,
476 return (map - qpt->map) * RVT_BITS_PER_PAGE + off;
483 * @qpt: queue pair number table pointer
490 static int alloc_qpn(struct rvt_dev_info *rdi, struct rvt_qpn_table *qpt,
500 return rdi->driver_f.alloc_qpn(rdi, qpt, type, port_num);
507 spin_lock(&qpt->lock);
508 if (qpt->flags & n)
511 qpt->flags |= n;
512 spin_unlock(&qpt->lock);
516 qpn = qpt->last + qpt->incr;
518 qpn = qpt->incr | ((qpt->last & 1) ^ 1);
521 map = &qpt->map[qpn / RVT_BITS_PER_PAGE];
522 max_scan = qpt->nmaps - !offset;
525 get_map_page(qpt, map);
531 qpt->last = qpn;
535 offset += qpt->incr;
540 qpn = mk_qpn(qpt, map, offset);
548 if (qpt->nmaps == RVT_QPNMAP_ENTRIES)
550 map = &qpt->map[qpt->nmaps++];
552 offset = qpt->incr | (offset & 1);
553 } else if (map < &qpt->map[qpt->nmaps]) {
556 offset = qpt->incr | (offset & 1);
558 map = &qpt->map[0];
560 offset = qpt->incr | ((offset & 1) ^ 1);
565 qpn = mk_qpn(qpt, map, offset);
945 * @qpt: QP table
948 static void rvt_free_qpn(struct rvt_qpn_table *qpt, u32 qpn)
955 map = qpt->map + (qpn & RVT_QPN_MASK) / RVT_BITS_PER_PAGE;