Lines Matching defs:Q

92 static inline uint32_t t1_sge_rx(pesge *sge, freelQ_t *Q,
95 static void t1_sge_check_pause(pesge *sge, struct freelQ *Q);
97 static void alloc_freelQ_buffers(pesge *sge, struct freelQ *Q);
99 static void free_cmdQ_buffers(pesge *sge, cmdQ_t *Q, uint32_t credits_pend);
105 static void free_freelQ_buffers(pesge *sge, struct freelQ *Q);
223 * has occured. If the command Q is full then we shouldn't put out
306 struct cmdQ *Q = &sge->cmdQ[qid];
308 spinlock_t *qlock = &Q->cq_qlock;
310 cmdQ_e *q = Q->cq_entries;
314 uint32_t entries_n = Q->cq_entries_n;
316 cmdQ_ce_t *cq = Q->cq_centries;
380 reclaim_cnt = Q->cq_complete;
383 free_cmdQ_buffers(sge, Q, reclaim_cnt);
384 Q->cq_complete = 0;
387 genbit = Q->cq_genbit;
388 pidx = Q->cq_pidx;
389 credits = Q->cq_credits;
397 atomic_sub(count, &Q->cq_credits);
398 Q->cq_pidx += count;
399 if (Q->cq_pidx >= entries_n) {
400 Q->cq_pidx -= entries_n;
401 Q->cq_genbit ^= 1;
480 * the doorbell if the Q is asleep. There is a natural race, where
488 if (atomic_read(Q->cq_asleep)) {
489 atomic_set(&Q->cq_asleep, 0);
491 atomic_set(&Q->cq_pio_pidx, Q->cq_pidx);
589 struct respQ *Q = &sge->respQ;
591 respQ_e *q = Q->rq_entries; /* base response queue */
592 uint32_t cidx = Q->rq_cidx;
593 uint32_t genbit = Q->rq_genbit;
594 uint32_t entries_n = Q->rq_entries_n;
595 uint32_t credits = Q->rq_credits;
596 uint32_t credits_thresh = Q->rq_credits_thresh;
603 ddi_dma_handle_t dh = (ddi_dma_handle_t)Q->rq_dh;
734 Q->rq_genbit = genbit;
735 Q->rq_cidx = cidx;
736 Q->rq_credits = credits;
803 t1_sge_rx(pesge *sge, struct freelQ *Q, unsigned int len, unsigned int offload)
807 struct freelQ_ce *cq = Q->fq_centries;
808 struct freelQ_ce *ce = &cq[Q->fq_cidx];
810 uint32_t cidx = Q->fq_cidx;
811 uint32_t entries_n = Q->fq_entries_n;
812 uint32_t sz = Q->fq_rx_buffer_size;
819 if (Q->fq_id)
846 e = &Q->fq_entries[cidx];
885 e = &Q->fq_entries[cidx];
1007 Q->fq_cidx = cidx;
1009 if (unlikely(--Q->fq_credits < (entries_n>>2)))
1011 alloc_freelQ_buffers(sge, Q);
1017 t1_sge_check_pause(pesge *sge, struct freelQ *Q)
1029 if (Q->fq_credits < Q->fq_pause_on_thresh) {
1040 alloc_freelQ_buffers(sge, Q);
1042 (Q->fq_credits > Q->fq_pause_off_thresh)) {
1055 sge->intr_cnt.rx_fl_credits = Q->fq_credits;
1060 alloc_freelQ_buffers(pesge *sge, struct freelQ *Q)
1062 uint32_t pidx = Q->fq_pidx;
1063 struct freelQ_ce *ce = &Q->fq_centries[pidx];
1064 freelQ_e *fq = Q->fq_entries; /* base of freelist Q */
1065 freelQ_e *e = &Q->fq_entries[pidx];
1066 uint32_t sz = Q->fq_rx_buffer_size;
1068 uint32_t credits = Q->fq_credits;
1069 uint32_t entries_n = Q->fq_entries_n;
1070 uint32_t genbit = Q->fq_genbit;
1071 ddi_dma_handle_t th = (ddi_dma_handle_t)Q->fq_dh;
1121 ce = Q->fq_centries;
1122 e = Q->fq_entries;
1130 Q->fq_genbit = genbit;
1131 Q->fq_pidx = pidx;
1132 Q->fq_credits = credits;
1161 * Frees 'credits_pend' TX buffers and returns the credits to Q->credits.
1165 free_cmdQ_buffers(pesge *sge, struct cmdQ *Q, unsigned int credits_pend)
1169 struct cmdQ_ce *cq = Q->cq_centries;
1170 uint32_t entries_n = Q->cq_entries_n;
1171 uint32_t cidx = Q->cq_cidx;
1240 Q->cq_cidx = cidx;
1241 atomic_add(credits_pend, &Q->cq_credits);
1285 * response Q.
1293 struct freelQ *Q = &sge->freelQ[i];
1295 Q->fq_id = i;
1296 Q->fq_genbit = 1;
1297 Q->fq_entries_n = p->freelQ_size[i];
1299 Q->fq_pause_on_thresh = flq_pause_window;
1300 Q->fq_pause_off_thresh = Q->fq_entries_n >> 1;
1302 size = sizeof (freelQ_e) * Q->fq_entries_n;
1304 Q->fq_entries = pe_os_malloc_contig_wait_zero(sge->obj,
1305 size, &Q->fq_pa, &Q->fq_dh, &Q->fq_ah, DMA_OUT);
1308 if (!Q->fq_entries)
1310 memset(Q->fq_entries, 0, size);
1311 size = sizeof (struct freelQ_ce) * Q->fq_entries_n;
1312 Q->fq_centries = t1_os_malloc_wait_zero(size);
1313 if (!Q->fq_centries)
1315 memset(Q->fq_centries, 0, size);
1376 struct cmdQ *Q = &sge->cmdQ[i];
1378 Q->cq_genbit = 1;
1379 Q->cq_entries_n = p->cmdQ_size[i];
1380 atomic_set(&Q->cq_credits, Q->cq_entries_n);
1381 atomic_set(&Q->cq_asleep, 1);
1383 mutex_init(&Q->cq_qlock, NULL, MUTEX_DRIVER,
1386 size = sizeof (cmdQ_e) * Q->cq_entries_n;
1387 Q->cq_entries = pe_os_malloc_contig_wait_zero(sge->obj,
1388 size, &Q->cq_pa, &Q->cq_dh, &Q->cq_ah, DMA_OUT);
1390 if (!Q->cq_entries)
1392 memset(Q->cq_entries, 0, size);
1393 size = sizeof (struct cmdQ_ce) * Q->cq_entries_n;
1394 Q->cq_centries = t1_os_malloc_wait_zero(size);
1395 if (!Q->cq_centries)
1397 memset(Q->cq_centries, 0, size);
1400 pe_dma_handle_init(sge->obj, Q->cq_entries_n);
1464 * interrupt everytime command Q 0 goes empty. Since we're
1529 struct freelQ *Q = &sge->freelQ[i];
1531 if (Q->fq_centries) {
1532 free_freelQ_buffers(sge, Q);
1534 t1_os_free(Q->fq_centries,
1535 Q->fq_entries_n * sizeof (freelQ_ce_t));
1537 if (Q->fq_entries) {
1538 size = sizeof (freelQ_e) * Q->fq_entries_n;
1541 pe_os_free_contig(sge->obj, size, Q->fq_entries,
1542 Q->fq_pa, Q->fq_dh, Q->fq_ah);
1549 * Frees all RX buffers on the freelist Q. The caller must make sure that
1553 free_freelQ_buffers(pesge *sge, struct freelQ *Q)
1556 struct freelQ_ce *cq = Q->fq_centries;
1557 uint32_t credits = Q->fq_credits;
1558 uint32_t entries_n = Q->fq_entries_n;
1559 uint32_t cidx = Q->fq_cidx;
1560 uint32_t i = Q->fq_id;
1592 Q->fq_cidx = cidx;
1593 Q->fq_credits = credits;
1608 struct cmdQ *Q = &sge->cmdQ[i];
1610 if (Q->cq_centries) {
1611 unsigned int pending = Q->cq_entries_n -
1612 atomic_read(Q->cq_credits);
1614 mutex_destroy(&Q->cq_qlock);
1617 free_cmdQ_buffers(sge, Q, pending);
1619 size = sizeof (struct cmdQ_ce) * Q->cq_entries_n;
1620 t1_os_free(Q->cq_centries, size);
1623 if (Q->cq_entries) {
1624 size = sizeof (cmdQ_e) * Q->cq_entries_n;
1625 pe_os_free_contig(sge->obj, size, Q->cq_entries,
1626 Q->cq_pa, Q->cq_dh, Q->cq_ah);