1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23 #if defined(CONFIG_DEBUG_FS) && !defined(CONFIG_SCSI_LPFC_DEBUG_FS)
24 #define CONFIG_SCSI_LPFC_DEBUG_FS
25 #endif
26
27
28 struct lpfc_hba;
29 struct lpfc_vport;
30
31
32 typedef enum _lpfc_ctx_cmd {
33 LPFC_CTX_LUN,
34 LPFC_CTX_TGT,
35 LPFC_CTX_HOST
36 } lpfc_ctx_cmd;
37
38 struct lpfc_cq_event {
39 struct list_head list;
40 uint16_t hdwq;
41 union {
42 struct lpfc_mcqe mcqe_cmpl;
43 struct lpfc_acqe_link acqe_link;
44 struct lpfc_acqe_fip acqe_fip;
45 struct lpfc_acqe_dcbx acqe_dcbx;
46 struct lpfc_acqe_grp5 acqe_grp5;
47 struct lpfc_acqe_fc_la acqe_fc;
48 struct lpfc_acqe_sli acqe_sli;
49 struct lpfc_rcqe rcqe_cmpl;
50 struct sli4_wcqe_xri_aborted wcqe_axri;
51 struct lpfc_wcqe_complete wcqe_cmpl;
52 } cqe;
53 };
54
55
56 struct lpfc_iocbq {
57
58 struct list_head list;
59 struct list_head clist;
60 struct list_head dlist;
61 uint16_t iotag;
62 uint16_t sli4_lxritag;
63 uint16_t sli4_xritag;
64 uint16_t hba_wqidx;
65 struct lpfc_cq_event cq_event;
66 struct lpfc_wcqe_complete wcqe_cmpl;
67 uint64_t isr_timestamp;
68
69 union lpfc_wqe128 wqe;
70 IOCB_t iocb;
71
72 uint8_t rsvd2;
73 uint8_t priority;
74 uint8_t retry;
75 uint32_t iocb_flag;
76 #define LPFC_IO_LIBDFC 1
77 #define LPFC_IO_WAKE 2
78 #define LPFC_IO_WAKE_TMO LPFC_IO_WAKE
79 #define LPFC_IO_FCP 4
80 #define LPFC_DRIVER_ABORTED 8
81 #define LPFC_IO_FABRIC 0x10
82 #define LPFC_DELAY_MEM_FREE 0x20
83 #define LPFC_EXCHANGE_BUSY 0x40
84 #define LPFC_USE_FCPWQIDX 0x80
85 #define DSS_SECURITY_OP 0x100
86 #define LPFC_IO_ON_TXCMPLQ 0x200
87 #define LPFC_IO_DIF_PASS 0x400
88 #define LPFC_IO_DIF_STRIP 0x800
89 #define LPFC_IO_DIF_INSERT 0x1000
90 #define LPFC_IO_CMD_OUTSTANDING 0x2000
91
92 #define LPFC_FIP_ELS_ID_MASK 0xc000
93 #define LPFC_FIP_ELS_ID_SHIFT 14
94
95 #define LPFC_IO_OAS 0x10000
96 #define LPFC_IO_FOF 0x20000
97 #define LPFC_IO_LOOPBACK 0x40000
98 #define LPFC_PRLI_NVME_REQ 0x80000
99 #define LPFC_PRLI_FCP_REQ 0x100000
100 #define LPFC_IO_NVME 0x200000
101 #define LPFC_IO_NVME_LS 0x400000
102 #define LPFC_IO_NVMET 0x800000
103
104 uint32_t drvrTimeout;
105 struct lpfc_vport *vport;
106 void *context1;
107 void *context2;
108 void *context3;
109 union {
110 wait_queue_head_t *wait_queue;
111 struct lpfc_iocbq *rsp_iocb;
112 struct lpfcMboxq *mbox;
113 struct lpfc_nodelist *ndlp;
114 struct lpfc_node_rrq *rrq;
115 } context_un;
116
117 void (*fabric_iocb_cmpl)(struct lpfc_hba *, struct lpfc_iocbq *,
118 struct lpfc_iocbq *);
119 void (*wait_iocb_cmpl)(struct lpfc_hba *, struct lpfc_iocbq *,
120 struct lpfc_iocbq *);
121 void (*iocb_cmpl)(struct lpfc_hba *, struct lpfc_iocbq *,
122 struct lpfc_iocbq *);
123 void (*wqe_cmpl)(struct lpfc_hba *, struct lpfc_iocbq *,
124 struct lpfc_wcqe_complete *);
125 };
126
127 #define SLI_IOCB_RET_IOCB 1
128
129 #define IOCB_SUCCESS 0
130 #define IOCB_BUSY 1
131 #define IOCB_ERROR 2
132 #define IOCB_TIMEDOUT 3
133
134 #define SLI_WQE_RET_WQE 1
135
136 #define WQE_SUCCESS 0
137 #define WQE_BUSY 1
138 #define WQE_ERROR 2
139 #define WQE_TIMEDOUT 3
140 #define WQE_ABORTED 4
141
142 #define LPFC_MBX_WAKE 1
143 #define LPFC_MBX_IMED_UNREG 2
144
145 typedef struct lpfcMboxq {
146
147 struct list_head list;
148 union {
149 MAILBOX_t mb;
150 struct lpfc_mqe mqe;
151 } u;
152 struct lpfc_vport *vport;
153 void *ctx_ndlp;
154 void *ctx_buf;
155 void *context3;
156
157 void (*mbox_cmpl) (struct lpfc_hba *, struct lpfcMboxq *);
158 uint8_t mbox_flag;
159 uint16_t in_ext_byte_len;
160 uint16_t out_ext_byte_len;
161 uint8_t mbox_offset_word;
162 struct lpfc_mcqe mcqe;
163 struct lpfc_mbx_nembed_sge_virt *sge_array;
164 } LPFC_MBOXQ_t;
165
166 #define MBX_POLL 1
167
168 #define MBX_NOWAIT 2
169
170 #define LPFC_MAX_RING_MASK 5
171
172 #define LPFC_SLI3_MAX_RING 4
173
174
175
176 struct lpfc_sli_ring;
177
178 struct lpfc_sli_ring_mask {
179 uint8_t profile;
180 uint8_t rctl;
181 uint8_t type;
182 uint8_t rsvd;
183
184 void (*lpfc_sli_rcv_unsol_event) (struct lpfc_hba *,
185 struct lpfc_sli_ring *,
186 struct lpfc_iocbq *);
187 };
188
189
190
191 struct lpfc_sli_ring_stat {
192 uint64_t iocb_event;
193 uint64_t iocb_cmd;
194 uint64_t iocb_rsp;
195 uint64_t iocb_cmd_delay;
196 uint64_t iocb_cmd_full;
197 uint64_t iocb_cmd_empty;
198 uint64_t iocb_rsp_full;
199 };
200
201 struct lpfc_sli3_ring {
202 uint32_t local_getidx;
203 uint32_t next_cmdidx;
204 uint32_t rspidx;
205 uint32_t cmdidx;
206 uint16_t numCiocb;
207 uint16_t numRiocb;
208 uint16_t sizeCiocb;
209 uint16_t sizeRiocb;
210 uint32_t *cmdringaddr;
211 uint32_t *rspringaddr;
212 };
213
214 struct lpfc_sli4_ring {
215 struct lpfc_queue *wqp;
216 };
217
218
219
220 struct lpfc_sli_ring {
221 uint16_t flag;
222 #define LPFC_DEFERRED_RING_EVENT 0x001
223 #define LPFC_CALL_RING_AVAILABLE 0x002
224 #define LPFC_STOP_IOCB_EVENT 0x020
225 uint16_t abtsiotag;
226
227 uint8_t rsvd;
228 uint8_t ringno;
229
230 spinlock_t ring_lock;
231
232 uint32_t fast_iotag;
233 uint32_t iotag_ctr;
234 uint32_t iotag_max;
235 struct list_head txq;
236 uint16_t txq_cnt;
237 uint16_t txq_max;
238 struct list_head txcmplq;
239 uint16_t txcmplq_cnt;
240 uint16_t txcmplq_max;
241 uint32_t missbufcnt;
242 struct list_head postbufq;
243 uint16_t postbufq_cnt;
244 uint16_t postbufq_max;
245 struct list_head iocb_continueq;
246 uint16_t iocb_continueq_cnt;
247 uint16_t iocb_continueq_max;
248 struct list_head iocb_continue_saveq;
249
250 struct lpfc_sli_ring_mask prt[LPFC_MAX_RING_MASK];
251 uint32_t num_mask;
252 void (*lpfc_sli_rcv_async_status) (struct lpfc_hba *,
253 struct lpfc_sli_ring *, struct lpfc_iocbq *);
254
255 struct lpfc_sli_ring_stat stats;
256
257
258 void (*lpfc_sli_cmd_available) (struct lpfc_hba *,
259 struct lpfc_sli_ring *);
260 union {
261 struct lpfc_sli3_ring sli3;
262 struct lpfc_sli4_ring sli4;
263 } sli;
264 };
265
266
267 struct lpfc_hbq_init {
268 uint32_t rn;
269 uint32_t entry_count;
270 uint32_t headerLen;
271 uint32_t logEntry;
272 uint32_t profile;
273 uint32_t ring_mask;
274
275 uint32_t hbq_index;
276
277 uint32_t seqlenoff;
278 uint32_t maxlen;
279 uint32_t seqlenbcnt;
280 uint32_t cmdcodeoff;
281 uint32_t cmdmatch[8];
282 uint32_t mask_count;
283 struct hbq_mask hbqMasks[6];
284
285
286 uint32_t buffer_count;
287 uint32_t init_count;
288 uint32_t add_count;
289 } ;
290
291
292 struct lpfc_sli_stat {
293 uint64_t mbox_stat_err;
294 uint64_t mbox_cmd;
295 uint64_t sli_intr;
296 uint64_t sli_prev_intr;
297 uint64_t sli_ips;
298 uint32_t err_attn_event;
299 uint32_t link_event;
300 uint32_t mbox_event;
301 uint32_t mbox_busy;
302 };
303
304
305 struct lpfc_lnk_stat {
306 uint32_t link_failure_count;
307 uint32_t loss_of_sync_count;
308 uint32_t loss_of_signal_count;
309 uint32_t prim_seq_protocol_err_count;
310 uint32_t invalid_tx_word_count;
311 uint32_t invalid_crc_count;
312 uint32_t error_frames;
313 uint32_t link_events;
314 };
315
316
317 struct lpfc_sli {
318 uint32_t num_rings;
319 uint32_t sli_flag;
320
321
322 #define LPFC_SLI_MBOX_ACTIVE 0x100
323 #define LPFC_SLI_ACTIVE 0x200
324 #define LPFC_PROCESS_LA 0x400
325 #define LPFC_BLOCK_MGMT_IO 0x800
326 #define LPFC_MENLO_MAINT 0x1000
327 #define LPFC_SLI_ASYNC_MBX_BLK 0x2000
328 #define LPFC_SLI_SUPPRESS_RSP 0x4000
329 #define LPFC_SLI_USE_EQDR 0x8000
330 #define LPFC_QUEUE_FREE_INIT 0x10000
331 #define LPFC_QUEUE_FREE_WAIT 0x20000
332
333
334
335 struct lpfc_sli_ring *sli3_ring;
336
337 struct lpfc_sli_stat slistat;
338 struct list_head mboxq;
339 uint16_t mboxq_cnt;
340 uint16_t mboxq_max;
341 LPFC_MBOXQ_t *mbox_active;
342 struct list_head mboxq_cmpl;
343
344 struct timer_list mbox_tmo;
345
346
347 #define LPFC_IOCBQ_LOOKUP_INCREMENT 1024
348 struct lpfc_iocbq ** iocbq_lookup;
349 size_t iocbq_lookup_len;
350 uint16_t last_iotag;
351 time64_t stats_start;
352 struct lpfc_lnk_stat lnk_stat_offsets;
353 };
354
355
356 #define LPFC_MBOX_TMO 30
357
358 #define LPFC_MBOX_SLI4_CONFIG_TMO 60
359
360 #define LPFC_MBOX_SLI4_CONFIG_EXTENDED_TMO 300
361
362 #define LPFC_MBOX_TMO_FLASH_CMD 300
363
364 struct lpfc_io_buf {
365
366 struct list_head list;
367 void *data;
368
369 dma_addr_t dma_handle;
370 dma_addr_t dma_phys_sgl;
371
372 struct sli4_sge *dma_sgl;
373
374
375 struct list_head dma_sgl_xtra_list;
376
377
378 struct list_head dma_cmd_rsp_list;
379
380 struct lpfc_iocbq cur_iocbq;
381 struct lpfc_sli4_hdw_queue *hdwq;
382 uint16_t hdwq_no;
383 uint16_t cpu;
384
385 struct lpfc_nodelist *ndlp;
386 uint32_t timeout;
387 uint16_t flags;
388 #define LPFC_SBUF_XBUSY 0x1
389 #define LPFC_SBUF_BUMP_QDEPTH 0x2
390
391 #define LPFC_SBUF_NORMAL_DIF 0x4
392 #define LPFC_SBUF_PASS_DIF 0x8
393 #define LPFC_SBUF_NOT_POSTED 0x10
394 uint16_t status;
395 uint32_t result;
396
397 uint32_t seg_cnt;
398
399
400
401 unsigned long start_time;
402 spinlock_t buf_lock;
403 bool expedite;
404
405 union {
406
407 struct {
408 struct scsi_cmnd *pCmd;
409 struct lpfc_rport_data *rdata;
410 uint32_t prot_seg_cnt;
411
412
413
414
415
416
417
418
419
420 struct fcp_cmnd *fcp_cmnd;
421 struct fcp_rsp *fcp_rsp;
422
423 wait_queue_head_t *waitq;
424
425 #ifdef CONFIG_SCSI_LPFC_DEBUG_FS
426
427
428
429 void *prot_data_segment;
430 uint32_t prot_data;
431 uint32_t prot_data_type;
432 #define LPFC_INJERR_REFTAG 1
433 #define LPFC_INJERR_APPTAG 2
434 #define LPFC_INJERR_GUARD 3
435 #endif
436 };
437
438
439 struct {
440 struct nvmefc_fcp_req *nvmeCmd;
441 uint16_t qidx;
442 };
443 };
444 #ifdef CONFIG_SCSI_LPFC_DEBUG_FS
445 uint64_t ts_cmd_start;
446 uint64_t ts_last_cmd;
447 uint64_t ts_cmd_wqput;
448 uint64_t ts_isr_cmpl;
449 uint64_t ts_data_nvme;
450 #endif
451 };