diff options
Diffstat (limited to 'drivers/scsi/bfa/bfa_hw_ct.c')
-rw-r--r-- | drivers/scsi/bfa/bfa_hw_ct.c | 25 |
1 files changed, 24 insertions, 1 deletions
diff --git a/drivers/scsi/bfa/bfa_hw_ct.c b/drivers/scsi/bfa/bfa_hw_ct.c index 989bbce9b29..637527f48b4 100644 --- a/drivers/scsi/bfa/bfa_hw_ct.c +++ b/drivers/scsi/bfa/bfa_hw_ct.c | |||
@@ -64,13 +64,36 @@ bfa_hwct_reqq_ack(struct bfa_s *bfa, int reqq) | |||
64 | writel(r32, bfa->iocfc.bfa_regs.cpe_q_ctrl[reqq]); | 64 | writel(r32, bfa->iocfc.bfa_regs.cpe_q_ctrl[reqq]); |
65 | } | 65 | } |
66 | 66 | ||
67 | /* | ||
68 | * Actions to respond RME Interrupt for Catapult ASIC: | ||
69 | * - Write 1 to Interrupt Status register (INTx only - done in bfa_intx()) | ||
70 | * - Acknowledge by writing to RME Queue Control register | ||
71 | * - Update CI | ||
72 | */ | ||
67 | void | 73 | void |
68 | bfa_hwct_rspq_ack(struct bfa_s *bfa, int rspq) | 74 | bfa_hwct_rspq_ack(struct bfa_s *bfa, int rspq, u32 ci) |
69 | { | 75 | { |
70 | u32 r32; | 76 | u32 r32; |
71 | 77 | ||
72 | r32 = readl(bfa->iocfc.bfa_regs.rme_q_ctrl[rspq]); | 78 | r32 = readl(bfa->iocfc.bfa_regs.rme_q_ctrl[rspq]); |
73 | writel(r32, bfa->iocfc.bfa_regs.rme_q_ctrl[rspq]); | 79 | writel(r32, bfa->iocfc.bfa_regs.rme_q_ctrl[rspq]); |
80 | |||
81 | bfa_rspq_ci(bfa, rspq) = ci; | ||
82 | writel(ci, bfa->iocfc.bfa_regs.rme_q_ci[rspq]); | ||
83 | mmiowb(); | ||
84 | } | ||
85 | |||
86 | /* | ||
87 | * Actions to respond RME Interrupt for Catapult2 ASIC: | ||
88 | * - Write 1 to Interrupt Status register (INTx only - done in bfa_intx()) | ||
89 | * - Update CI | ||
90 | */ | ||
91 | void | ||
92 | bfa_hwct2_rspq_ack(struct bfa_s *bfa, int rspq, u32 ci) | ||
93 | { | ||
94 | bfa_rspq_ci(bfa, rspq) = ci; | ||
95 | writel(ci, bfa->iocfc.bfa_regs.rme_q_ci[rspq]); | ||
96 | mmiowb(); | ||
74 | } | 97 | } |
75 | 98 | ||
76 | void | 99 | void |