diff options
Diffstat (limited to 'drivers/infiniband/hw/cxgb4/t4.h')
-rw-r--r-- | drivers/infiniband/hw/cxgb4/t4.h | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/drivers/infiniband/hw/cxgb4/t4.h b/drivers/infiniband/hw/cxgb4/t4.h index df5edfa31a8f..c04e5134b30c 100644 --- a/drivers/infiniband/hw/cxgb4/t4.h +++ b/drivers/infiniband/hw/cxgb4/t4.h | |||
@@ -524,6 +524,10 @@ static inline int t4_wq_db_enabled(struct t4_wq *wq) | |||
524 | return !wq->rq.queue[wq->rq.size].status.db_off; | 524 | return !wq->rq.queue[wq->rq.size].status.db_off; |
525 | } | 525 | } |
526 | 526 | ||
527 | enum t4_cq_flags { | ||
528 | CQ_ARMED = 1, | ||
529 | }; | ||
530 | |||
527 | struct t4_cq { | 531 | struct t4_cq { |
528 | struct t4_cqe *queue; | 532 | struct t4_cqe *queue; |
529 | dma_addr_t dma_addr; | 533 | dma_addr_t dma_addr; |
@@ -544,12 +548,19 @@ struct t4_cq { | |||
544 | u16 cidx_inc; | 548 | u16 cidx_inc; |
545 | u8 gen; | 549 | u8 gen; |
546 | u8 error; | 550 | u8 error; |
551 | unsigned long flags; | ||
547 | }; | 552 | }; |
548 | 553 | ||
554 | static inline int t4_clear_cq_armed(struct t4_cq *cq) | ||
555 | { | ||
556 | return test_and_clear_bit(CQ_ARMED, &cq->flags); | ||
557 | } | ||
558 | |||
549 | static inline int t4_arm_cq(struct t4_cq *cq, int se) | 559 | static inline int t4_arm_cq(struct t4_cq *cq, int se) |
550 | { | 560 | { |
551 | u32 val; | 561 | u32 val; |
552 | 562 | ||
563 | set_bit(CQ_ARMED, &cq->flags); | ||
553 | while (cq->cidx_inc > CIDXINC_MASK) { | 564 | while (cq->cidx_inc > CIDXINC_MASK) { |
554 | val = SEINTARM(0) | CIDXINC(CIDXINC_MASK) | TIMERREG(7) | | 565 | val = SEINTARM(0) | CIDXINC(CIDXINC_MASK) | TIMERREG(7) | |
555 | INGRESSQID(cq->cqid); | 566 | INGRESSQID(cq->cqid); |