PageRenderTime 68ms CodeModel.GetById 33ms app.highlight 32ms RepoModel.GetById 0ms app.codeStats 1ms

/drivers/scsi/lpfc/lpfc_sli4.h

https://bitbucket.org/slukk/jb-tsm-kernel-4.2
C Header | 619 lines | 500 code | 54 blank | 65 comment | 0 complexity | fc462a9f0133c8170150ef0c9f0262bb MD5 | raw file
Possible License(s): GPL-2.0, LGPL-2.0, AGPL-1.0
  1/*******************************************************************
  2 * This file is part of the Emulex Linux Device Driver for         *
  3 * Fibre Channel Host Bus Adapters.                                *
  4 * Copyright (C) 2009-2011 Emulex.  All rights reserved.           *
  5 * EMULEX and SLI are trademarks of Emulex.                        *
  6 * www.emulex.com                                                  *
  7 *                                                                 *
  8 * This program is free software; you can redistribute it and/or   *
  9 * modify it under the terms of version 2 of the GNU General       *
 10 * Public License as published by the Free Software Foundation.    *
 11 * This program is distributed in the hope that it will be useful. *
 12 * ALL EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND          *
 13 * WARRANTIES, INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY,  *
 14 * FITNESS FOR A PARTICULAR PURPOSE, OR NON-INFRINGEMENT, ARE      *
 15 * DISCLAIMED, EXCEPT TO THE EXTENT THAT SUCH DISCLAIMERS ARE HELD *
 16 * TO BE LEGALLY INVALID.  See the GNU General Public License for  *
 17 * more details, a copy of which can be found in the file COPYING  *
 18 * included with this package.                                     *
 19 *******************************************************************/
 20
 21#define LPFC_ACTIVE_MBOX_WAIT_CNT               100
 22#define LPFC_XRI_EXCH_BUSY_WAIT_TMO		10000
 23#define LPFC_XRI_EXCH_BUSY_WAIT_T1   		10
 24#define LPFC_XRI_EXCH_BUSY_WAIT_T2              30000
 25#define LPFC_RELEASE_NOTIFICATION_INTERVAL	32
 26#define LPFC_GET_QE_REL_INT			32
 27#define LPFC_RPI_LOW_WATER_MARK			10
 28
 29#define LPFC_UNREG_FCF                          1
 30#define LPFC_SKIP_UNREG_FCF                     0
 31
 32/* Amount of time in seconds for waiting FCF rediscovery to complete */
 33#define LPFC_FCF_REDISCOVER_WAIT_TMO		2000 /* msec */
 34
 35/* Number of SGL entries can be posted in a 4KB nonembedded mbox command */
 36#define LPFC_NEMBED_MBOX_SGL_CNT		254
 37
 38/* Multi-queue arrangement for fast-path FCP work queues */
 39#define LPFC_FN_EQN_MAX       8
 40#define LPFC_SP_EQN_DEF       1
 41#define LPFC_FP_EQN_DEF       4
 42#define LPFC_FP_EQN_MIN       1
 43#define LPFC_FP_EQN_MAX       (LPFC_FN_EQN_MAX - LPFC_SP_EQN_DEF)
 44
 45#define LPFC_FN_WQN_MAX       32
 46#define LPFC_SP_WQN_DEF       1
 47#define LPFC_FP_WQN_DEF       4
 48#define LPFC_FP_WQN_MIN       1
 49#define LPFC_FP_WQN_MAX       (LPFC_FN_WQN_MAX - LPFC_SP_WQN_DEF)
 50
 51/*
 52 * Provide the default FCF Record attributes used by the driver
 53 * when nonFIP mode is configured and there is no other default
 54 * FCF Record attributes.
 55 */
 56#define LPFC_FCOE_FCF_DEF_INDEX	0
 57#define LPFC_FCOE_FCF_GET_FIRST	0xFFFF
 58#define LPFC_FCOE_FCF_NEXT_NONE	0xFFFF
 59
 60#define LPFC_FCOE_NULL_VID	0xFFF
 61#define LPFC_FCOE_IGNORE_VID	0xFFFF
 62
 63/* First 3 bytes of default FCF MAC is specified by FC_MAP */
 64#define LPFC_FCOE_FCF_MAC3	0xFF
 65#define LPFC_FCOE_FCF_MAC4	0xFF
 66#define LPFC_FCOE_FCF_MAC5	0xFE
 67#define LPFC_FCOE_FCF_MAP0	0x0E
 68#define LPFC_FCOE_FCF_MAP1	0xFC
 69#define LPFC_FCOE_FCF_MAP2	0x00
 70#define LPFC_FCOE_MAX_RCV_SIZE	0x800
 71#define LPFC_FCOE_FKA_ADV_PER	0
 72#define LPFC_FCOE_FIP_PRIORITY	0x80
 73
 74#define sli4_sid_from_fc_hdr(fc_hdr)  \
 75	((fc_hdr)->fh_s_id[0] << 16 | \
 76	 (fc_hdr)->fh_s_id[1] <<  8 | \
 77	 (fc_hdr)->fh_s_id[2])
 78
 79#define sli4_fctl_from_fc_hdr(fc_hdr)  \
 80	((fc_hdr)->fh_f_ctl[0] << 16 | \
 81	 (fc_hdr)->fh_f_ctl[1] <<  8 | \
 82	 (fc_hdr)->fh_f_ctl[2])
 83
 84#define LPFC_FW_RESET_MAXIMUM_WAIT_10MS_CNT 12000
 85
 86enum lpfc_sli4_queue_type {
 87	LPFC_EQ,
 88	LPFC_GCQ,
 89	LPFC_MCQ,
 90	LPFC_WCQ,
 91	LPFC_RCQ,
 92	LPFC_MQ,
 93	LPFC_WQ,
 94	LPFC_HRQ,
 95	LPFC_DRQ
 96};
 97
 98/* The queue sub-type defines the functional purpose of the queue */
 99enum lpfc_sli4_queue_subtype {
100	LPFC_NONE,
101	LPFC_MBOX,
102	LPFC_FCP,
103	LPFC_ELS,
104	LPFC_USOL
105};
106
107union sli4_qe {
108	void *address;
109	struct lpfc_eqe *eqe;
110	struct lpfc_cqe *cqe;
111	struct lpfc_mcqe *mcqe;
112	struct lpfc_wcqe_complete *wcqe_complete;
113	struct lpfc_wcqe_release *wcqe_release;
114	struct sli4_wcqe_xri_aborted *wcqe_xri_aborted;
115	struct lpfc_rcqe_complete *rcqe_complete;
116	struct lpfc_mqe *mqe;
117	union  lpfc_wqe *wqe;
118	struct lpfc_rqe *rqe;
119};
120
121struct lpfc_queue {
122	struct list_head list;
123	enum lpfc_sli4_queue_type type;
124	enum lpfc_sli4_queue_subtype subtype;
125	struct lpfc_hba *phba;
126	struct list_head child_list;
127	uint32_t entry_count;	/* Number of entries to support on the queue */
128	uint32_t entry_size;	/* Size of each queue entry. */
129	uint32_t queue_id;	/* Queue ID assigned by the hardware */
130	uint32_t assoc_qid;     /* Queue ID associated with, for CQ/WQ/MQ */
131	struct list_head page_list;
132	uint32_t page_count;	/* Number of pages allocated for this queue */
133	uint32_t host_index;	/* The host's index for putting or getting */
134	uint32_t hba_index;	/* The last known hba index for get or put */
135	union sli4_qe qe[1];	/* array to index entries (must be last) */
136};
137
138struct lpfc_sli4_link {
139	uint8_t speed;
140	uint8_t duplex;
141	uint8_t status;
142	uint8_t type;
143	uint8_t number;
144	uint8_t fault;
145	uint16_t logical_speed;
146	uint16_t topology;
147};
148
149struct lpfc_fcf_rec {
150	uint8_t  fabric_name[8];
151	uint8_t  switch_name[8];
152	uint8_t  mac_addr[6];
153	uint16_t fcf_indx;
154	uint32_t priority;
155	uint16_t vlan_id;
156	uint32_t addr_mode;
157	uint32_t flag;
158#define BOOT_ENABLE	0x01
159#define RECORD_VALID	0x02
160};
161
162struct lpfc_fcf {
163	uint16_t fcfi;
164	uint32_t fcf_flag;
165#define FCF_AVAILABLE	0x01 /* FCF available for discovery */
166#define FCF_REGISTERED	0x02 /* FCF registered with FW */
167#define FCF_SCAN_DONE	0x04 /* FCF table scan done */
168#define FCF_IN_USE	0x08 /* Atleast one discovery completed */
169#define FCF_INIT_DISC	0x10 /* Initial FCF discovery */
170#define FCF_DEAD_DISC	0x20 /* FCF DEAD fast FCF failover discovery */
171#define FCF_ACVL_DISC	0x40 /* All CVL fast FCF failover discovery */
172#define FCF_DISCOVERY	(FCF_INIT_DISC | FCF_DEAD_DISC | FCF_ACVL_DISC)
173#define FCF_REDISC_PEND	0x80 /* FCF rediscovery pending */
174#define FCF_REDISC_EVT	0x100 /* FCF rediscovery event to worker thread */
175#define FCF_REDISC_FOV	0x200 /* Post FCF rediscovery fast failover */
176#define FCF_REDISC_PROG (FCF_REDISC_PEND | FCF_REDISC_EVT)
177	uint32_t addr_mode;
178	uint32_t eligible_fcf_cnt;
179	struct lpfc_fcf_rec current_rec;
180	struct lpfc_fcf_rec failover_rec;
181	struct timer_list redisc_wait;
182	unsigned long *fcf_rr_bmask; /* Eligible FCF indexes for RR failover */
183};
184
185/*
186 * Maximum FCF table index, it is for driver internal book keeping, it
187 * just needs to be no less than the supported HBA's FCF table size.
188 */
189#define LPFC_SLI4_FCF_TBL_INDX_MAX	32
190
191#define LPFC_REGION23_SIGNATURE "RG23"
192#define LPFC_REGION23_VERSION	1
193#define LPFC_REGION23_LAST_REC  0xff
194#define DRIVER_SPECIFIC_TYPE	0xA2
195#define LINUX_DRIVER_ID		0x20
196#define PORT_STE_TYPE		0x1
197
198struct lpfc_fip_param_hdr {
199	uint8_t type;
200#define FCOE_PARAM_TYPE		0xA0
201	uint8_t length;
202#define FCOE_PARAM_LENGTH	2
203	uint8_t parm_version;
204#define FIPP_VERSION		0x01
205	uint8_t parm_flags;
206#define	lpfc_fip_param_hdr_fipp_mode_SHIFT	6
207#define	lpfc_fip_param_hdr_fipp_mode_MASK	0x3
208#define lpfc_fip_param_hdr_fipp_mode_WORD	parm_flags
209#define	FIPP_MODE_ON				0x1
210#define	FIPP_MODE_OFF				0x0
211#define FIPP_VLAN_VALID				0x1
212};
213
214struct lpfc_fcoe_params {
215	uint8_t fc_map[3];
216	uint8_t reserved1;
217	uint16_t vlan_tag;
218	uint8_t reserved[2];
219};
220
221struct lpfc_fcf_conn_hdr {
222	uint8_t type;
223#define FCOE_CONN_TBL_TYPE		0xA1
224	uint8_t length;   /* words */
225	uint8_t reserved[2];
226};
227
228struct lpfc_fcf_conn_rec {
229	uint16_t flags;
230#define	FCFCNCT_VALID		0x0001
231#define	FCFCNCT_BOOT		0x0002
232#define	FCFCNCT_PRIMARY		0x0004   /* if not set, Secondary */
233#define	FCFCNCT_FBNM_VALID	0x0008
234#define	FCFCNCT_SWNM_VALID	0x0010
235#define	FCFCNCT_VLAN_VALID	0x0020
236#define	FCFCNCT_AM_VALID	0x0040
237#define	FCFCNCT_AM_PREFERRED	0x0080   /* if not set, AM Required */
238#define	FCFCNCT_AM_SPMA		0x0100	 /* if not set, FPMA */
239
240	uint16_t vlan_tag;
241	uint8_t fabric_name[8];
242	uint8_t switch_name[8];
243};
244
245struct lpfc_fcf_conn_entry {
246	struct list_head list;
247	struct lpfc_fcf_conn_rec conn_rec;
248};
249
250/*
251 * Define the host's bootstrap mailbox.  This structure contains
252 * the member attributes needed to create, use, and destroy the
253 * bootstrap mailbox region.
254 *
255 * The macro definitions for the bmbx data structure are defined
256 * in lpfc_hw4.h with the register definition.
257 */
258struct lpfc_bmbx {
259	struct lpfc_dmabuf *dmabuf;
260	struct dma_address dma_address;
261	void *avirt;
262	dma_addr_t aphys;
263	uint32_t bmbx_size;
264};
265
266#define LPFC_EQE_SIZE LPFC_EQE_SIZE_4
267
268#define LPFC_EQE_SIZE_4B 	4
269#define LPFC_EQE_SIZE_16B	16
270#define LPFC_CQE_SIZE		16
271#define LPFC_WQE_SIZE		64
272#define LPFC_MQE_SIZE		256
273#define LPFC_RQE_SIZE		8
274
275#define LPFC_EQE_DEF_COUNT	1024
276#define LPFC_CQE_DEF_COUNT      256
277#define LPFC_WQE_DEF_COUNT      256
278#define LPFC_MQE_DEF_COUNT      16
279#define LPFC_RQE_DEF_COUNT	512
280
281#define LPFC_QUEUE_NOARM	false
282#define LPFC_QUEUE_REARM	true
283
284
285/*
286 * SLI4 CT field defines
287 */
288#define SLI4_CT_RPI 0
289#define SLI4_CT_VPI 1
290#define SLI4_CT_VFI 2
291#define SLI4_CT_FCFI 3
292
293#define LPFC_SLI4_FL1_MAX_SEGMENT_SIZE	0x10000
294#define LPFC_SLI4_FL1_MAX_BUF_SIZE	0X2000
295#define LPFC_SLI4_MIN_BUF_SIZE		0x400
296#define LPFC_SLI4_MAX_BUF_SIZE		0x20000
297
298/*
299 * SLI4 specific data structures
300 */
301struct lpfc_max_cfg_param {
302	uint16_t max_xri;
303	uint16_t xri_base;
304	uint16_t xri_used;
305	uint16_t max_rpi;
306	uint16_t rpi_base;
307	uint16_t rpi_used;
308	uint16_t max_vpi;
309	uint16_t vpi_base;
310	uint16_t vpi_used;
311	uint16_t max_vfi;
312	uint16_t vfi_base;
313	uint16_t vfi_used;
314	uint16_t max_fcfi;
315	uint16_t fcfi_used;
316	uint16_t max_eq;
317	uint16_t max_rq;
318	uint16_t max_cq;
319	uint16_t max_wq;
320};
321
322struct lpfc_hba;
323/* SLI4 HBA multi-fcp queue handler struct */
324struct lpfc_fcp_eq_hdl {
325	uint32_t idx;
326	struct lpfc_hba *phba;
327};
328
329/* Port Capabilities for SLI4 Parameters */
330struct lpfc_pc_sli4_params {
331	uint32_t supported;
332	uint32_t if_type;
333	uint32_t sli_rev;
334	uint32_t sli_family;
335	uint32_t featurelevel_1;
336	uint32_t featurelevel_2;
337	uint32_t proto_types;
338#define LPFC_SLI4_PROTO_FCOE	0x0000001
339#define LPFC_SLI4_PROTO_FC	0x0000002
340#define LPFC_SLI4_PROTO_NIC	0x0000004
341#define LPFC_SLI4_PROTO_ISCSI	0x0000008
342#define LPFC_SLI4_PROTO_RDMA	0x0000010
343	uint32_t sge_supp_len;
344	uint32_t if_page_sz;
345	uint32_t rq_db_window;
346	uint32_t loopbk_scope;
347	uint32_t eq_pages_max;
348	uint32_t eqe_size;
349	uint32_t cq_pages_max;
350	uint32_t cqe_size;
351	uint32_t mq_pages_max;
352	uint32_t mqe_size;
353	uint32_t mq_elem_cnt;
354	uint32_t wq_pages_max;
355	uint32_t wqe_size;
356	uint32_t rq_pages_max;
357	uint32_t rqe_size;
358	uint32_t hdr_pages_max;
359	uint32_t hdr_size;
360	uint32_t hdr_pp_align;
361	uint32_t sgl_pages_max;
362	uint32_t sgl_pp_align;
363	uint8_t cqv;
364	uint8_t mqv;
365	uint8_t wqv;
366	uint8_t rqv;
367};
368
369struct lpfc_iov {
370	uint32_t pf_number;
371	uint32_t vf_number;
372};
373
374/* SLI4 HBA data structure entries */
375struct lpfc_sli4_hba {
376	void __iomem *conf_regs_memmap_p; /* Kernel memory mapped address for
377					     PCI BAR0, config space registers */
378	void __iomem *ctrl_regs_memmap_p; /* Kernel memory mapped address for
379					     PCI BAR1, control registers */
380	void __iomem *drbl_regs_memmap_p; /* Kernel memory mapped address for
381					     PCI BAR2, doorbell registers */
382	union {
383		struct {
384			/* IF Type 0, BAR 0 PCI cfg space reg mem map */
385			void __iomem *UERRLOregaddr;
386			void __iomem *UERRHIregaddr;
387			void __iomem *UEMASKLOregaddr;
388			void __iomem *UEMASKHIregaddr;
389		} if_type0;
390		struct {
391			/* IF Type 2, BAR 0 PCI cfg space reg mem map. */
392			void __iomem *STATUSregaddr;
393			void __iomem *CTRLregaddr;
394			void __iomem *ERR1regaddr;
395			void __iomem *ERR2regaddr;
396		} if_type2;
397	} u;
398
399	/* IF type 0, BAR1 and if type 2, Bar 0 CSR register memory map */
400	void __iomem *PSMPHRregaddr;
401
402	/* Well-known SLI INTF register memory map. */
403	void __iomem *SLIINTFregaddr;
404
405	/* IF type 0, BAR 1 function CSR register memory map */
406	void __iomem *ISRregaddr;	/* HST_ISR register */
407	void __iomem *IMRregaddr;	/* HST_IMR register */
408	void __iomem *ISCRregaddr;	/* HST_ISCR register */
409	/* IF type 0, BAR 0 and if type 2, BAR 0 doorbell register memory map */
410	void __iomem *RQDBregaddr;	/* RQ_DOORBELL register */
411	void __iomem *WQDBregaddr;	/* WQ_DOORBELL register */
412	void __iomem *EQCQDBregaddr;	/* EQCQ_DOORBELL register */
413	void __iomem *MQDBregaddr;	/* MQ_DOORBELL register */
414	void __iomem *BMBXregaddr;	/* BootStrap MBX register */
415
416	uint32_t ue_mask_lo;
417	uint32_t ue_mask_hi;
418	struct lpfc_register sli_intf;
419	struct lpfc_pc_sli4_params pc_sli4_params;
420	struct msix_entry *msix_entries;
421	uint32_t cfg_eqn;
422	uint32_t msix_vec_nr;
423	struct lpfc_fcp_eq_hdl *fcp_eq_hdl; /* FCP per-WQ handle */
424	/* Pointers to the constructed SLI4 queues */
425	struct lpfc_queue **fp_eq; /* Fast-path event queue */
426	struct lpfc_queue *sp_eq;  /* Slow-path event queue */
427	struct lpfc_queue **fcp_wq;/* Fast-path FCP work queue */
428	struct lpfc_queue *mbx_wq; /* Slow-path MBOX work queue */
429	struct lpfc_queue *els_wq; /* Slow-path ELS work queue */
430	struct lpfc_queue *hdr_rq; /* Slow-path Header Receive queue */
431	struct lpfc_queue *dat_rq; /* Slow-path Data Receive queue */
432	struct lpfc_queue **fcp_cq;/* Fast-path FCP compl queue */
433	struct lpfc_queue *mbx_cq; /* Slow-path mailbox complete queue */
434	struct lpfc_queue *els_cq; /* Slow-path ELS response complete queue */
435
436	/* Setup information for various queue parameters */
437	int eq_esize;
438	int eq_ecount;
439	int cq_esize;
440	int cq_ecount;
441	int wq_esize;
442	int wq_ecount;
443	int mq_esize;
444	int mq_ecount;
445	int rq_esize;
446	int rq_ecount;
447#define LPFC_SP_EQ_MAX_INTR_SEC         10000
448#define LPFC_FP_EQ_MAX_INTR_SEC         10000
449
450	uint32_t intr_enable;
451	struct lpfc_bmbx bmbx;
452	struct lpfc_max_cfg_param max_cfg_param;
453	uint16_t extents_in_use; /* must allocate resource extents. */
454	uint16_t rpi_hdrs_in_use; /* must post rpi hdrs if set. */
455	uint16_t next_xri; /* last_xri - max_cfg_param.xri_base = used */
456	uint16_t next_rpi;
457	uint16_t scsi_xri_max;
458	uint16_t scsi_xri_cnt;
459	uint16_t scsi_xri_start;
460	struct list_head lpfc_free_sgl_list;
461	struct list_head lpfc_sgl_list;
462	struct lpfc_sglq **lpfc_els_sgl_array;
463	struct list_head lpfc_abts_els_sgl_list;
464	struct lpfc_scsi_buf **lpfc_scsi_psb_array;
465	struct list_head lpfc_abts_scsi_buf_list;
466	uint32_t total_sglq_bufs;
467	struct lpfc_sglq **lpfc_sglq_active_list;
468	struct list_head lpfc_rpi_hdr_list;
469	unsigned long *rpi_bmask;
470	uint16_t *rpi_ids;
471	uint16_t rpi_count;
472	struct list_head lpfc_rpi_blk_list;
473	unsigned long *xri_bmask;
474	uint16_t *xri_ids;
475	uint16_t xri_count;
476	struct list_head lpfc_xri_blk_list;
477	unsigned long *vfi_bmask;
478	uint16_t *vfi_ids;
479	uint16_t vfi_count;
480	struct list_head lpfc_vfi_blk_list;
481	struct lpfc_sli4_flags sli4_flags;
482	struct list_head sp_queue_event;
483	struct list_head sp_cqe_event_pool;
484	struct list_head sp_asynce_work_queue;
485	struct list_head sp_fcp_xri_aborted_work_queue;
486	struct list_head sp_els_xri_aborted_work_queue;
487	struct list_head sp_unsol_work_queue;
488	struct lpfc_sli4_link link_state;
489	struct lpfc_iov iov;
490	spinlock_t abts_scsi_buf_list_lock; /* list of aborted SCSI IOs */
491	spinlock_t abts_sgl_list_lock; /* list of aborted els IOs */
492};
493
494enum lpfc_sge_type {
495	GEN_BUFF_TYPE,
496	SCSI_BUFF_TYPE
497};
498
499enum lpfc_sgl_state {
500	SGL_FREED,
501	SGL_ALLOCATED,
502	SGL_XRI_ABORTED
503};
504
505struct lpfc_sglq {
506	/* lpfc_sglqs are used in double linked lists */
507	struct list_head list;
508	struct list_head clist;
509	enum lpfc_sge_type buff_type; /* is this a scsi sgl */
510	enum lpfc_sgl_state state;
511	struct lpfc_nodelist *ndlp; /* ndlp associated with IO */
512	uint16_t iotag;         /* pre-assigned IO tag */
513	uint16_t sli4_lxritag;  /* logical pre-assigned xri. */
514	uint16_t sli4_xritag;   /* pre-assigned XRI, (OXID) tag. */
515	struct sli4_sge *sgl;	/* pre-assigned SGL */
516	void *virt;		/* virtual address. */
517	dma_addr_t phys;	/* physical address */
518};
519
520struct lpfc_rpi_hdr {
521	struct list_head list;
522	uint32_t len;
523	struct lpfc_dmabuf *dmabuf;
524	uint32_t page_count;
525	uint32_t start_rpi;
526};
527
528struct lpfc_rsrc_blks {
529	struct list_head list;
530	uint16_t rsrc_start;
531	uint16_t rsrc_size;
532	uint16_t rsrc_used;
533};
534
535/*
536 * SLI4 specific function prototypes
537 */
538int lpfc_pci_function_reset(struct lpfc_hba *);
539int lpfc_sli4_hba_setup(struct lpfc_hba *);
540int lpfc_sli4_config(struct lpfc_hba *, struct lpfcMboxq *, uint8_t,
541		     uint8_t, uint32_t, bool);
542void lpfc_sli4_mbox_cmd_free(struct lpfc_hba *, struct lpfcMboxq *);
543void lpfc_sli4_mbx_sge_set(struct lpfcMboxq *, uint32_t, dma_addr_t, uint32_t);
544void lpfc_sli4_mbx_sge_get(struct lpfcMboxq *, uint32_t,
545			   struct lpfc_mbx_sge *);
546int lpfc_sli4_mbx_read_fcf_rec(struct lpfc_hba *, struct lpfcMboxq *,
547			       uint16_t);
548
549void lpfc_sli4_hba_reset(struct lpfc_hba *);
550struct lpfc_queue *lpfc_sli4_queue_alloc(struct lpfc_hba *, uint32_t,
551			uint32_t);
552void lpfc_sli4_queue_free(struct lpfc_queue *);
553uint32_t lpfc_eq_create(struct lpfc_hba *, struct lpfc_queue *, uint16_t);
554uint32_t lpfc_cq_create(struct lpfc_hba *, struct lpfc_queue *,
555			struct lpfc_queue *, uint32_t, uint32_t);
556int32_t lpfc_mq_create(struct lpfc_hba *, struct lpfc_queue *,
557		       struct lpfc_queue *, uint32_t);
558uint32_t lpfc_wq_create(struct lpfc_hba *, struct lpfc_queue *,
559			struct lpfc_queue *, uint32_t);
560uint32_t lpfc_rq_create(struct lpfc_hba *, struct lpfc_queue *,
561			struct lpfc_queue *, struct lpfc_queue *, uint32_t);
562uint32_t lpfc_eq_destroy(struct lpfc_hba *, struct lpfc_queue *);
563uint32_t lpfc_cq_destroy(struct lpfc_hba *, struct lpfc_queue *);
564uint32_t lpfc_mq_destroy(struct lpfc_hba *, struct lpfc_queue *);
565uint32_t lpfc_wq_destroy(struct lpfc_hba *, struct lpfc_queue *);
566uint32_t lpfc_rq_destroy(struct lpfc_hba *, struct lpfc_queue *,
567			 struct lpfc_queue *);
568int lpfc_sli4_queue_setup(struct lpfc_hba *);
569void lpfc_sli4_queue_unset(struct lpfc_hba *);
570int lpfc_sli4_post_sgl(struct lpfc_hba *, dma_addr_t, dma_addr_t, uint16_t);
571int lpfc_sli4_repost_scsi_sgl_list(struct lpfc_hba *);
572uint16_t lpfc_sli4_next_xritag(struct lpfc_hba *);
573int lpfc_sli4_post_async_mbox(struct lpfc_hba *);
574int lpfc_sli4_post_els_sgl_list(struct lpfc_hba *phba);
575int lpfc_sli4_post_els_sgl_list_ext(struct lpfc_hba *phba);
576int lpfc_sli4_post_scsi_sgl_block(struct lpfc_hba *, struct list_head *, int);
577int lpfc_sli4_post_scsi_sgl_blk_ext(struct lpfc_hba *, struct list_head *,
578				    int);
579struct lpfc_cq_event *__lpfc_sli4_cq_event_alloc(struct lpfc_hba *);
580struct lpfc_cq_event *lpfc_sli4_cq_event_alloc(struct lpfc_hba *);
581void __lpfc_sli4_cq_event_release(struct lpfc_hba *, struct lpfc_cq_event *);
582void lpfc_sli4_cq_event_release(struct lpfc_hba *, struct lpfc_cq_event *);
583int lpfc_sli4_init_rpi_hdrs(struct lpfc_hba *);
584int lpfc_sli4_post_rpi_hdr(struct lpfc_hba *, struct lpfc_rpi_hdr *);
585int lpfc_sli4_post_all_rpi_hdrs(struct lpfc_hba *);
586struct lpfc_rpi_hdr *lpfc_sli4_create_rpi_hdr(struct lpfc_hba *);
587void lpfc_sli4_remove_rpi_hdrs(struct lpfc_hba *);
588int lpfc_sli4_alloc_rpi(struct lpfc_hba *);
589void lpfc_sli4_free_rpi(struct lpfc_hba *, int);
590void lpfc_sli4_remove_rpis(struct lpfc_hba *);
591void lpfc_sli4_async_event_proc(struct lpfc_hba *);
592void lpfc_sli4_fcf_redisc_event_proc(struct lpfc_hba *);
593int lpfc_sli4_resume_rpi(struct lpfc_nodelist *);
594void lpfc_sli4_fcp_xri_abort_event_proc(struct lpfc_hba *);
595void lpfc_sli4_els_xri_abort_event_proc(struct lpfc_hba *);
596void lpfc_sli4_fcp_xri_aborted(struct lpfc_hba *,
597			       struct sli4_wcqe_xri_aborted *);
598void lpfc_sli4_els_xri_aborted(struct lpfc_hba *,
599			       struct sli4_wcqe_xri_aborted *);
600void lpfc_sli4_vport_delete_els_xri_aborted(struct lpfc_vport *);
601void lpfc_sli4_vport_delete_fcp_xri_aborted(struct lpfc_vport *);
602int lpfc_sli4_brdreset(struct lpfc_hba *);
603int lpfc_sli4_add_fcf_record(struct lpfc_hba *, struct fcf_record *);
604void lpfc_sli_remove_dflt_fcf(struct lpfc_hba *);
605int lpfc_sli4_get_els_iocb_cnt(struct lpfc_hba *);
606int lpfc_sli4_init_vpi(struct lpfc_vport *);
607uint32_t lpfc_sli4_cq_release(struct lpfc_queue *, bool);
608uint32_t lpfc_sli4_eq_release(struct lpfc_queue *, bool);
609void lpfc_sli4_fcfi_unreg(struct lpfc_hba *, uint16_t);
610int lpfc_sli4_fcf_scan_read_fcf_rec(struct lpfc_hba *, uint16_t);
611int lpfc_sli4_fcf_rr_read_fcf_rec(struct lpfc_hba *, uint16_t);
612int lpfc_sli4_read_fcf_rec(struct lpfc_hba *, uint16_t);
613void lpfc_mbx_cmpl_fcf_scan_read_fcf_rec(struct lpfc_hba *, LPFC_MBOXQ_t *);
614void lpfc_mbx_cmpl_fcf_rr_read_fcf_rec(struct lpfc_hba *, LPFC_MBOXQ_t *);
615void lpfc_mbx_cmpl_read_fcf_rec(struct lpfc_hba *, LPFC_MBOXQ_t *);
616int lpfc_sli4_unregister_fcf(struct lpfc_hba *);
617int lpfc_sli4_post_status_check(struct lpfc_hba *);
618uint8_t lpfc_sli4_mbox_opcode_get(struct lpfc_hba *, struct lpfcMboxq *);
619