1a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati/*
2a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati * Copyright (c) 2005-2010 Brocade Communications Systems, Inc.
3a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati * All rights reserved
4a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati * www.brocade.com
5a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati *
6a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati * Linux driver for Brocade Fibre Channel Host Bus Adapter.
7a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati *
8a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati * This program is free software; you can redistribute it and/or modify it
9a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati * under the terms of the GNU General Public License (GPL) Version 2 as
10a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati * published by the Free Software Foundation
11a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati *
12a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati * This program is distributed in the hope that it will be useful, but
13a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati * WITHOUT ANY WARRANTY; without even the implied warranty of
14a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
15a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati * General Public License for more details.
16a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati */
17a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati#ifndef __BFA_H__
18a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati#define __BFA_H__
19a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati
20f16a17507b09e10e0cccc4d675ccbfe030d51ef1Maggie Zhang#include "bfad_drv.h"
21a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati#include "bfa_cs.h"
22a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati#include "bfa_plog.h"
23a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati#include "bfa_defs_svc.h"
24a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati#include "bfi.h"
25a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati#include "bfa_ioc.h"
26a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati
27a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipatistruct bfa_s;
28a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati
29a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipatitypedef void (*bfa_isr_func_t) (struct bfa_s *bfa, struct bfi_msg_s *m);
3037ea0558b87abb151245bc750070a4dcda490acaKrishna Gudipatitypedef void (*bfa_cb_cbfn_status_t) (void *cbarg, bfa_status_t status);
31a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati
32acdc79a60cb3cbbc9f07bb5032d890e9cf94f0ffJing Huang/*
33a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati * Interrupt message handlers
34a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati */
35a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipativoid bfa_isr_unhandled(struct bfa_s *bfa, struct bfi_msg_s *m);
36a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati
37acdc79a60cb3cbbc9f07bb5032d890e9cf94f0ffJing Huang/*
38a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati * Request and response queue related defines
39a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati */
40a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati#define BFA_REQQ_NELEMS_MIN	(4)
41a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati#define BFA_RSPQ_NELEMS_MIN	(4)
42a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati
43a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati#define bfa_reqq_pi(__bfa, __reqq)	((__bfa)->iocfc.req_cq_pi[__reqq])
44a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati#define bfa_reqq_ci(__bfa, __reqq)					\
45a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati	(*(u32 *)((__bfa)->iocfc.req_cq_shadow_ci[__reqq].kva))
46a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati
47a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati#define bfa_reqq_full(__bfa, __reqq)				\
48a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati	(((bfa_reqq_pi(__bfa, __reqq) + 1) &			\
49a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati	  ((__bfa)->iocfc.cfg.drvcfg.num_reqq_elems - 1)) ==	\
50a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati	 bfa_reqq_ci(__bfa, __reqq))
51a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati
52a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati#define bfa_reqq_next(__bfa, __reqq)					\
53a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati	(bfa_reqq_full(__bfa, __reqq) ? NULL :				\
54a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati	 ((void *)((struct bfi_msg_s *)((__bfa)->iocfc.req_cq_ba[__reqq].kva) \
55a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati		   + bfa_reqq_pi((__bfa), (__reqq)))))
56a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati
573fd459804ff8e002db2671900debd0fc6dc6c443Krishna Gudipati#define bfa_reqq_produce(__bfa, __reqq, __mh)  do {			\
583fd459804ff8e002db2671900debd0fc6dc6c443Krishna Gudipati		(__mh).mtag.h2i.qid     = (__bfa)->iocfc.hw_qid[__reqq];\
59a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati		(__bfa)->iocfc.req_cq_pi[__reqq]++;			\
60a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati		(__bfa)->iocfc.req_cq_pi[__reqq] &=			\
61acdc79a60cb3cbbc9f07bb5032d890e9cf94f0ffJing Huang			((__bfa)->iocfc.cfg.drvcfg.num_reqq_elems - 1); \
62acdc79a60cb3cbbc9f07bb5032d890e9cf94f0ffJing Huang		writel((__bfa)->iocfc.req_cq_pi[__reqq],		\
635344026065f79b102fcc44bc6332f856a111962aJing Huang			(__bfa)->iocfc.bfa_regs.cpe_q_pi[__reqq]);	\
64a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati		mmiowb();      \
65a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati	} while (0)
66a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati
67a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati#define bfa_rspq_pi(__bfa, __rspq)					\
68a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati	(*(u32 *)((__bfa)->iocfc.rsp_cq_shadow_pi[__rspq].kva))
69a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati
70a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati#define bfa_rspq_ci(__bfa, __rspq)	((__bfa)->iocfc.rsp_cq_ci[__rspq])
71a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati#define bfa_rspq_elem(__bfa, __rspq, __ci)				\
72a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati	(&((struct bfi_msg_s *)((__bfa)->iocfc.rsp_cq_ba[__rspq].kva))[__ci])
73a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati
74a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati#define CQ_INCR(__index, __size) do {			\
75a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati	(__index)++;					\
76a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati	(__index) &= ((__size) - 1);			\
77a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati} while (0)
78a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati
79acdc79a60cb3cbbc9f07bb5032d890e9cf94f0ffJing Huang/*
80a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati * Circular queue usage assignments
81a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati */
82a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipatienum {
83a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati	BFA_REQQ_IOC	= 0,	/*  all low-priority IOC msgs	*/
84a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati	BFA_REQQ_FCXP	= 0,	/*  all FCXP messages		*/
85a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati	BFA_REQQ_LPS	= 0,	/*  all lport service msgs	*/
86a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati	BFA_REQQ_PORT	= 0,	/*  all port messages		*/
87a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati	BFA_REQQ_FLASH	= 0,	/*  for flash module		*/
88a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati	BFA_REQQ_DIAG	= 0,	/*  for diag module		*/
89a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati	BFA_REQQ_RPORT	= 0,	/*  all port messages		*/
90a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati	BFA_REQQ_SBOOT	= 0,	/*  all san boot messages	*/
91a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati	BFA_REQQ_QOS_LO	= 1,	/*  all low priority IO	*/
92a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati	BFA_REQQ_QOS_MD	= 2,	/*  all medium priority IO	*/
93a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati	BFA_REQQ_QOS_HI	= 3,	/*  all high priority IO	*/
94a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati};
95a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati
96a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipatistatic inline void
97a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipatibfa_reqq_winit(struct bfa_reqq_wait_s *wqe, void (*qresume) (void *cbarg),
98a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati	       void *cbarg)
99a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati{
100a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati	wqe->qresume = qresume;
101a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati	wqe->cbarg = cbarg;
102a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati}
103a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati
104a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati#define bfa_reqq(__bfa, __reqq)	(&(__bfa)->reqq_waitq[__reqq])
105a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati
106acdc79a60cb3cbbc9f07bb5032d890e9cf94f0ffJing Huang/*
107a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati * static inline void
108a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati * bfa_reqq_wait(struct bfa_s *bfa, int reqq, struct bfa_reqq_wait_s *wqe)
109a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati */
110a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati#define bfa_reqq_wait(__bfa, __reqq, __wqe) do {			\
111a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati									\
112a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati		struct list_head *waitq = bfa_reqq(__bfa, __reqq);      \
113a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati									\
114d4b671c58ebeb56dfc8fe8bcca25e0a06bc9359aJing Huang		WARN_ON(((__reqq) >= BFI_IOC_MAX_CQS));			\
115d4b671c58ebeb56dfc8fe8bcca25e0a06bc9359aJing Huang		WARN_ON(!((__wqe)->qresume && (__wqe)->cbarg));		\
116a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati									\
117a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati		list_add_tail(&(__wqe)->qe, waitq);      \
118a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati	} while (0)
119a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati
120a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati#define bfa_reqq_wcancel(__wqe)	list_del(&(__wqe)->qe)
121a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati
122a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati#define bfa_cb_queue(__bfa, __hcb_qe, __cbfn, __cbarg) do {	\
123a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati		(__hcb_qe)->cbfn  = (__cbfn);      \
124a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati		(__hcb_qe)->cbarg = (__cbarg);      \
12537ea0558b87abb151245bc750070a4dcda490acaKrishna Gudipati		(__hcb_qe)->pre_rmv = BFA_FALSE;		\
126a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati		list_add_tail(&(__hcb_qe)->qe, &(__bfa)->comp_q);      \
127a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati	} while (0)
128a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati
129a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati#define bfa_cb_dequeue(__hcb_qe)	list_del(&(__hcb_qe)->qe)
130a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati
131a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati#define bfa_cb_queue_once(__bfa, __hcb_qe, __cbfn, __cbarg) do {	\
132a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati		(__hcb_qe)->cbfn  = (__cbfn);      \
133a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati		(__hcb_qe)->cbarg = (__cbarg);      \
134a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati		if (!(__hcb_qe)->once) {      \
135a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati			list_add_tail(&(__hcb_qe)->qe, &(__bfa)->comp_q);      \
136a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati			(__hcb_qe)->once = BFA_TRUE;			\
137a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati		}							\
138a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati	} while (0)
139a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati
14037ea0558b87abb151245bc750070a4dcda490acaKrishna Gudipati#define bfa_cb_queue_status(__bfa, __hcb_qe, __status) do {		\
14137ea0558b87abb151245bc750070a4dcda490acaKrishna Gudipati		(__hcb_qe)->fw_status = (__status);			\
14237ea0558b87abb151245bc750070a4dcda490acaKrishna Gudipati		list_add_tail(&(__hcb_qe)->qe, &(__bfa)->comp_q);	\
14337ea0558b87abb151245bc750070a4dcda490acaKrishna Gudipati} while (0)
14437ea0558b87abb151245bc750070a4dcda490acaKrishna Gudipati
145a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati#define bfa_cb_queue_done(__hcb_qe) do {	\
146a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati		(__hcb_qe)->once = BFA_FALSE;	\
147a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati	} while (0)
148a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati
149a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati
150acdc79a60cb3cbbc9f07bb5032d890e9cf94f0ffJing Huang/*
151a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati * PCI devices supported by the current BFA
152a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati */
153a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipatistruct bfa_pciid_s {
154a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati	u16	device_id;
155a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati	u16	vendor_id;
156a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati};
157a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati
158a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipatiextern char     bfa_version[];
159a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati
160a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipatistruct bfa_iocfc_regs_s {
1615344026065f79b102fcc44bc6332f856a111962aJing Huang	void __iomem	*intr_status;
162acdc79a60cb3cbbc9f07bb5032d890e9cf94f0ffJing Huang	void __iomem	*intr_mask;
1635344026065f79b102fcc44bc6332f856a111962aJing Huang	void __iomem	*cpe_q_pi[BFI_IOC_MAX_CQS];
1645344026065f79b102fcc44bc6332f856a111962aJing Huang	void __iomem	*cpe_q_ci[BFI_IOC_MAX_CQS];
1655344026065f79b102fcc44bc6332f856a111962aJing Huang	void __iomem	*cpe_q_ctrl[BFI_IOC_MAX_CQS];
1665344026065f79b102fcc44bc6332f856a111962aJing Huang	void __iomem	*rme_q_ci[BFI_IOC_MAX_CQS];
1675344026065f79b102fcc44bc6332f856a111962aJing Huang	void __iomem	*rme_q_pi[BFI_IOC_MAX_CQS];
1685344026065f79b102fcc44bc6332f856a111962aJing Huang	void __iomem	*rme_q_ctrl[BFI_IOC_MAX_CQS];
169a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati};
170a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati
171acdc79a60cb3cbbc9f07bb5032d890e9cf94f0ffJing Huang/*
172a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati * MSIX vector handlers
173a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati */
174a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati#define BFA_MSIX_MAX_VECTORS	22
175a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipatitypedef void (*bfa_msix_handler_t)(struct bfa_s *bfa, int vec);
176a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipatistruct bfa_msix_s {
177a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati	int	nvecs;
178a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati	bfa_msix_handler_t handler[BFA_MSIX_MAX_VECTORS];
179a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati};
180a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati
181acdc79a60cb3cbbc9f07bb5032d890e9cf94f0ffJing Huang/*
182a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati * Chip specific interfaces
183a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati */
184a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipatistruct bfa_hwif_s {
185a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati	void (*hw_reginit)(struct bfa_s *bfa);
186a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati	void (*hw_reqq_ack)(struct bfa_s *bfa, int reqq);
187ca6e0ea71cd0f442875b05357dd51774bd84b418Krishna Gudipati	void (*hw_rspq_ack)(struct bfa_s *bfa, int rspq, u32 ci);
188a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati	void (*hw_msix_init)(struct bfa_s *bfa, int nvecs);
189775c7742adfd7726f05914198bf33eaa3b9f64bbKrishna Gudipati	void (*hw_msix_ctrl_install)(struct bfa_s *bfa);
190775c7742adfd7726f05914198bf33eaa3b9f64bbKrishna Gudipati	void (*hw_msix_queue_install)(struct bfa_s *bfa);
191a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati	void (*hw_msix_uninstall)(struct bfa_s *bfa);
192a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati	void (*hw_isr_mode_set)(struct bfa_s *bfa, bfa_boolean_t msix);
193a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati	void (*hw_msix_getvecs)(struct bfa_s *bfa, u32 *vecmap,
194a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati				u32 *nvecs, u32 *maxvec);
195a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati	void (*hw_msix_get_rme_range) (struct bfa_s *bfa, u32 *start,
196a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati				       u32 *end);
197111892082ed7a3214bc7a7ec6b8b20e8f847501aKrishna Gudipati	int	cpe_vec_q0;
198111892082ed7a3214bc7a7ec6b8b20e8f847501aKrishna Gudipati	int	rme_vec_q0;
199a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati};
200a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipatitypedef void (*bfa_cb_iocfc_t) (void *cbarg, enum bfa_status status);
201a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati
202a714134a857d3984250ee52fda7850b61bf8a94eKrishna Gudipatistruct bfa_faa_cbfn_s {
203a714134a857d3984250ee52fda7850b61bf8a94eKrishna Gudipati	bfa_cb_iocfc_t	faa_cbfn;
204a714134a857d3984250ee52fda7850b61bf8a94eKrishna Gudipati	void		*faa_cbarg;
205a714134a857d3984250ee52fda7850b61bf8a94eKrishna Gudipati};
206a714134a857d3984250ee52fda7850b61bf8a94eKrishna Gudipati
207a714134a857d3984250ee52fda7850b61bf8a94eKrishna Gudipati#define BFA_FAA_ENABLED		1
208a714134a857d3984250ee52fda7850b61bf8a94eKrishna Gudipati#define BFA_FAA_DISABLED	2
209a714134a857d3984250ee52fda7850b61bf8a94eKrishna Gudipati
210a714134a857d3984250ee52fda7850b61bf8a94eKrishna Gudipati/*
211a714134a857d3984250ee52fda7850b61bf8a94eKrishna Gudipati *	FAA attributes
212a714134a857d3984250ee52fda7850b61bf8a94eKrishna Gudipati */
213a714134a857d3984250ee52fda7850b61bf8a94eKrishna Gudipatistruct bfa_faa_attr_s {
214a714134a857d3984250ee52fda7850b61bf8a94eKrishna Gudipati	wwn_t	faa;
215a714134a857d3984250ee52fda7850b61bf8a94eKrishna Gudipati	u8	faa_state;
216a714134a857d3984250ee52fda7850b61bf8a94eKrishna Gudipati	u8	pwwn_source;
217a714134a857d3984250ee52fda7850b61bf8a94eKrishna Gudipati	u8	rsvd[6];
218a714134a857d3984250ee52fda7850b61bf8a94eKrishna Gudipati};
219a714134a857d3984250ee52fda7850b61bf8a94eKrishna Gudipati
220a714134a857d3984250ee52fda7850b61bf8a94eKrishna Gudipatistruct bfa_faa_args_s {
221a714134a857d3984250ee52fda7850b61bf8a94eKrishna Gudipati	struct bfa_faa_attr_s	*faa_attr;
222a714134a857d3984250ee52fda7850b61bf8a94eKrishna Gudipati	struct bfa_faa_cbfn_s	faa_cb;
223a714134a857d3984250ee52fda7850b61bf8a94eKrishna Gudipati	u8			faa_state;
224a714134a857d3984250ee52fda7850b61bf8a94eKrishna Gudipati	bfa_boolean_t		busy;
225a714134a857d3984250ee52fda7850b61bf8a94eKrishna Gudipati};
226a714134a857d3984250ee52fda7850b61bf8a94eKrishna Gudipati
227a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipatistruct bfa_iocfc_s {
228db9d8a75afd9dbd32c80d12d6033eca3336ef4f2Krishna Gudipati	bfa_fsm_t		fsm;
229a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati	struct bfa_s		*bfa;
230a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati	struct bfa_iocfc_cfg_s	cfg;
231a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati	u32		req_cq_pi[BFI_IOC_MAX_CQS];
232a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati	u32		rsp_cq_ci[BFI_IOC_MAX_CQS];
2333fd459804ff8e002db2671900debd0fc6dc6c443Krishna Gudipati	u8		hw_qid[BFI_IOC_MAX_CQS];
234a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati	struct bfa_cb_qe_s	init_hcb_qe;
235a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati	struct bfa_cb_qe_s	stop_hcb_qe;
236a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati	struct bfa_cb_qe_s	dis_hcb_qe;
237601380669baa2ba6427b821a14e5c91afb580dfcKrishna Gudipati	struct bfa_cb_qe_s	en_hcb_qe;
238a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati	struct bfa_cb_qe_s	stats_hcb_qe;
239db9d8a75afd9dbd32c80d12d6033eca3336ef4f2Krishna Gudipati	bfa_boolean_t		submod_enabled;
240db9d8a75afd9dbd32c80d12d6033eca3336ef4f2Krishna Gudipati	bfa_boolean_t		cb_reqd;	/* Driver call back reqd */
241db9d8a75afd9dbd32c80d12d6033eca3336ef4f2Krishna Gudipati	bfa_status_t		op_status;	/* Status of bfa iocfc op */
242a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati
243a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati	struct bfa_dma_s	cfg_info;
244a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati	struct bfi_iocfc_cfg_s *cfginfo;
245a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati	struct bfa_dma_s	cfgrsp_dma;
246a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati	struct bfi_iocfc_cfgrsp_s *cfgrsp;
247a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati	struct bfa_dma_s	req_cq_ba[BFI_IOC_MAX_CQS];
248a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati	struct bfa_dma_s	req_cq_shadow_ci[BFI_IOC_MAX_CQS];
249a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati	struct bfa_dma_s	rsp_cq_ba[BFI_IOC_MAX_CQS];
250a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati	struct bfa_dma_s	rsp_cq_shadow_pi[BFI_IOC_MAX_CQS];
251a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati	struct bfa_iocfc_regs_s	bfa_regs;	/*  BFA device registers */
252a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati	struct bfa_hwif_s	hwif;
253a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati	bfa_cb_iocfc_t		updateq_cbfn; /*  bios callback function */
254a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati	void			*updateq_cbarg;	/*  bios callback arg */
255a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati	u32	intr_mask;
256a714134a857d3984250ee52fda7850b61bf8a94eKrishna Gudipati	struct bfa_faa_args_s	faa_args;
2574507025d01149aea8705e43508d0ef11e7010cfdKrishna Gudipati	struct bfa_mem_dma_s	ioc_dma;
2584507025d01149aea8705e43508d0ef11e7010cfdKrishna Gudipati	struct bfa_mem_dma_s	iocfc_dma;
2594507025d01149aea8705e43508d0ef11e7010cfdKrishna Gudipati	struct bfa_mem_dma_s	reqq_dma[BFI_IOC_MAX_CQS];
2604507025d01149aea8705e43508d0ef11e7010cfdKrishna Gudipati	struct bfa_mem_dma_s	rspq_dma[BFI_IOC_MAX_CQS];
2614507025d01149aea8705e43508d0ef11e7010cfdKrishna Gudipati	struct bfa_mem_kva_s	kva_seg;
262a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati};
263a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati
2644507025d01149aea8705e43508d0ef11e7010cfdKrishna Gudipati#define BFA_MEM_IOC_DMA(_bfa)		(&((_bfa)->iocfc.ioc_dma))
2654507025d01149aea8705e43508d0ef11e7010cfdKrishna Gudipati#define BFA_MEM_IOCFC_DMA(_bfa)		(&((_bfa)->iocfc.iocfc_dma))
2664507025d01149aea8705e43508d0ef11e7010cfdKrishna Gudipati#define BFA_MEM_REQQ_DMA(_bfa, _qno)	(&((_bfa)->iocfc.reqq_dma[(_qno)]))
2674507025d01149aea8705e43508d0ef11e7010cfdKrishna Gudipati#define BFA_MEM_RSPQ_DMA(_bfa, _qno)	(&((_bfa)->iocfc.rspq_dma[(_qno)]))
2684507025d01149aea8705e43508d0ef11e7010cfdKrishna Gudipati#define BFA_MEM_IOCFC_KVA(_bfa)		(&((_bfa)->iocfc.kva_seg))
2694507025d01149aea8705e43508d0ef11e7010cfdKrishna Gudipati
2703fd459804ff8e002db2671900debd0fc6dc6c443Krishna Gudipati#define bfa_fn_lpu(__bfa)	\
2713fd459804ff8e002db2671900debd0fc6dc6c443Krishna Gudipati	bfi_fn_lpu(bfa_ioc_pcifn(&(__bfa)->ioc), bfa_ioc_portid(&(__bfa)->ioc))
272a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati#define bfa_msix_init(__bfa, __nvecs)					\
273a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati	((__bfa)->iocfc.hwif.hw_msix_init(__bfa, __nvecs))
274775c7742adfd7726f05914198bf33eaa3b9f64bbKrishna Gudipati#define bfa_msix_ctrl_install(__bfa)					\
275775c7742adfd7726f05914198bf33eaa3b9f64bbKrishna Gudipati	((__bfa)->iocfc.hwif.hw_msix_ctrl_install(__bfa))
276775c7742adfd7726f05914198bf33eaa3b9f64bbKrishna Gudipati#define bfa_msix_queue_install(__bfa)					\
277775c7742adfd7726f05914198bf33eaa3b9f64bbKrishna Gudipati	((__bfa)->iocfc.hwif.hw_msix_queue_install(__bfa))
278a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati#define bfa_msix_uninstall(__bfa)					\
279a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati	((__bfa)->iocfc.hwif.hw_msix_uninstall(__bfa))
280ca6e0ea71cd0f442875b05357dd51774bd84b418Krishna Gudipati#define bfa_isr_rspq_ack(__bfa, __queue, __ci)				\
281ca6e0ea71cd0f442875b05357dd51774bd84b418Krishna Gudipati	((__bfa)->iocfc.hwif.hw_rspq_ack(__bfa, __queue, __ci))
2823fd459804ff8e002db2671900debd0fc6dc6c443Krishna Gudipati#define bfa_isr_reqq_ack(__bfa, __queue) do {				\
2833fd459804ff8e002db2671900debd0fc6dc6c443Krishna Gudipati	if ((__bfa)->iocfc.hwif.hw_reqq_ack)				\
2843fd459804ff8e002db2671900debd0fc6dc6c443Krishna Gudipati		(__bfa)->iocfc.hwif.hw_reqq_ack(__bfa, __queue);	\
2853fd459804ff8e002db2671900debd0fc6dc6c443Krishna Gudipati} while (0)
286111892082ed7a3214bc7a7ec6b8b20e8f847501aKrishna Gudipati#define bfa_isr_mode_set(__bfa, __msix) do {				\
287111892082ed7a3214bc7a7ec6b8b20e8f847501aKrishna Gudipati	if ((__bfa)->iocfc.hwif.hw_isr_mode_set)			\
288111892082ed7a3214bc7a7ec6b8b20e8f847501aKrishna Gudipati		(__bfa)->iocfc.hwif.hw_isr_mode_set(__bfa, __msix);	\
289111892082ed7a3214bc7a7ec6b8b20e8f847501aKrishna Gudipati} while (0)
290a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati#define bfa_msix_getvecs(__bfa, __vecmap, __nvecs, __maxvec)		\
291a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati	((__bfa)->iocfc.hwif.hw_msix_getvecs(__bfa, __vecmap,		\
292a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati					__nvecs, __maxvec))
293a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati#define bfa_msix_get_rme_range(__bfa, __start, __end)			\
294a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati	((__bfa)->iocfc.hwif.hw_msix_get_rme_range(__bfa, __start, __end))
295a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati#define bfa_msix(__bfa, __vec)						\
296a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati	((__bfa)->msix.handler[__vec](__bfa, __vec))
297a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati
298a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati/*
299a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati * FC specific IOC functions.
300a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati */
3014507025d01149aea8705e43508d0ef11e7010cfdKrishna Gudipativoid bfa_iocfc_meminfo(struct bfa_iocfc_cfg_s *cfg,
3024507025d01149aea8705e43508d0ef11e7010cfdKrishna Gudipati			struct bfa_meminfo_s *meminfo,
3034507025d01149aea8705e43508d0ef11e7010cfdKrishna Gudipati			struct bfa_s *bfa);
304a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipativoid bfa_iocfc_attach(struct bfa_s *bfa, void *bfad,
305a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati		      struct bfa_iocfc_cfg_s *cfg,
306a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati		      struct bfa_pcidev_s *pcidev);
307a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipativoid bfa_iocfc_init(struct bfa_s *bfa);
308a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipativoid bfa_iocfc_start(struct bfa_s *bfa);
309a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipativoid bfa_iocfc_stop(struct bfa_s *bfa);
310a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipativoid bfa_iocfc_isr(void *bfa, struct bfi_mbmsg_s *msg);
3114507025d01149aea8705e43508d0ef11e7010cfdKrishna Gudipativoid bfa_iocfc_set_snsbase(struct bfa_s *bfa, int seg_no, u64 snsbase_pa);
312a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipatibfa_boolean_t bfa_iocfc_is_operational(struct bfa_s *bfa);
313a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipativoid bfa_iocfc_reset_queues(struct bfa_s *bfa);
314a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati
315a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipativoid bfa_msix_all(struct bfa_s *bfa, int vec);
316a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipativoid bfa_msix_reqq(struct bfa_s *bfa, int vec);
317a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipativoid bfa_msix_rspq(struct bfa_s *bfa, int vec);
318a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipativoid bfa_msix_lpu_err(struct bfa_s *bfa, int vec);
319a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati
320a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipativoid bfa_hwcb_reginit(struct bfa_s *bfa);
321ca6e0ea71cd0f442875b05357dd51774bd84b418Krishna Gudipativoid bfa_hwcb_rspq_ack(struct bfa_s *bfa, int rspq, u32 ci);
322a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipativoid bfa_hwcb_msix_init(struct bfa_s *bfa, int nvecs);
323775c7742adfd7726f05914198bf33eaa3b9f64bbKrishna Gudipativoid bfa_hwcb_msix_ctrl_install(struct bfa_s *bfa);
324775c7742adfd7726f05914198bf33eaa3b9f64bbKrishna Gudipativoid bfa_hwcb_msix_queue_install(struct bfa_s *bfa);
325a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipativoid bfa_hwcb_msix_uninstall(struct bfa_s *bfa);
326a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipativoid bfa_hwcb_isr_mode_set(struct bfa_s *bfa, bfa_boolean_t msix);
327a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipativoid bfa_hwcb_msix_getvecs(struct bfa_s *bfa, u32 *vecmap, u32 *nvecs,
328a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati			   u32 *maxvec);
329a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipativoid bfa_hwcb_msix_get_rme_range(struct bfa_s *bfa, u32 *start,
330a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati				 u32 *end);
331a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipativoid bfa_hwct_reginit(struct bfa_s *bfa);
332111892082ed7a3214bc7a7ec6b8b20e8f847501aKrishna Gudipativoid bfa_hwct2_reginit(struct bfa_s *bfa);
333a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipativoid bfa_hwct_reqq_ack(struct bfa_s *bfa, int rspq);
334ca6e0ea71cd0f442875b05357dd51774bd84b418Krishna Gudipativoid bfa_hwct_rspq_ack(struct bfa_s *bfa, int rspq, u32 ci);
335ca6e0ea71cd0f442875b05357dd51774bd84b418Krishna Gudipativoid bfa_hwct2_rspq_ack(struct bfa_s *bfa, int rspq, u32 ci);
336a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipativoid bfa_hwct_msix_init(struct bfa_s *bfa, int nvecs);
337775c7742adfd7726f05914198bf33eaa3b9f64bbKrishna Gudipativoid bfa_hwct_msix_ctrl_install(struct bfa_s *bfa);
338775c7742adfd7726f05914198bf33eaa3b9f64bbKrishna Gudipativoid bfa_hwct_msix_queue_install(struct bfa_s *bfa);
339a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipativoid bfa_hwct_msix_uninstall(struct bfa_s *bfa);
340a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipativoid bfa_hwct_isr_mode_set(struct bfa_s *bfa, bfa_boolean_t msix);
341a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipativoid bfa_hwct_msix_getvecs(struct bfa_s *bfa, u32 *vecmap, u32 *nvecs,
342a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati			   u32 *maxvec);
343a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipativoid bfa_hwct_msix_get_rme_range(struct bfa_s *bfa, u32 *start,
344a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati				 u32 *end);
345a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipativoid bfa_iocfc_get_bootwwns(struct bfa_s *bfa, u8 *nwwns, wwn_t *wwns);
346a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipatiint bfa_iocfc_get_pbc_vports(struct bfa_s *bfa,
347a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati				struct bfi_pbc_vport_s *pbc_vport);
348a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati
349a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati
350acdc79a60cb3cbbc9f07bb5032d890e9cf94f0ffJing Huang/*
351a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati *----------------------------------------------------------------------
352a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati *		BFA public interfaces
353a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati *----------------------------------------------------------------------
354a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati */
355a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati#define bfa_stats(_mod, _stats)	((_mod)->stats._stats++)
356a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati#define bfa_ioc_get_stats(__bfa, __ioc_stats)		\
357a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati	bfa_ioc_fetch_stats(&(__bfa)->ioc, __ioc_stats)
358a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati#define bfa_ioc_clear_stats(__bfa)		\
359a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati	bfa_ioc_clr_stats(&(__bfa)->ioc)
360a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati#define bfa_get_nports(__bfa)			\
361a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati	bfa_ioc_get_nports(&(__bfa)->ioc)
362a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati#define bfa_get_adapter_manufacturer(__bfa, __manufacturer)		\
363a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati	bfa_ioc_get_adapter_manufacturer(&(__bfa)->ioc, __manufacturer)
364a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati#define bfa_get_adapter_model(__bfa, __model)			\
365a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati	bfa_ioc_get_adapter_model(&(__bfa)->ioc, __model)
366a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati#define bfa_get_adapter_serial_num(__bfa, __serial_num)			\
367a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati	bfa_ioc_get_adapter_serial_num(&(__bfa)->ioc, __serial_num)
368a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati#define bfa_get_adapter_fw_ver(__bfa, __fw_ver)			\
369a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati	bfa_ioc_get_adapter_fw_ver(&(__bfa)->ioc, __fw_ver)
370a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati#define bfa_get_adapter_optrom_ver(__bfa, __optrom_ver)			\
371a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati	bfa_ioc_get_adapter_optrom_ver(&(__bfa)->ioc, __optrom_ver)
372a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati#define bfa_get_pci_chip_rev(__bfa, __chip_rev)			\
373a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati	bfa_ioc_get_pci_chip_rev(&(__bfa)->ioc, __chip_rev)
374a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati#define bfa_get_ioc_state(__bfa)		\
375a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati	bfa_ioc_get_state(&(__bfa)->ioc)
376a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati#define bfa_get_type(__bfa)			\
377a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati	bfa_ioc_get_type(&(__bfa)->ioc)
378a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati#define bfa_get_mac(__bfa)			\
379a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati	bfa_ioc_get_mac(&(__bfa)->ioc)
380a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati#define bfa_get_mfg_mac(__bfa)			\
381a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati	bfa_ioc_get_mfg_mac(&(__bfa)->ioc)
382a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati#define bfa_get_fw_clock_res(__bfa)		\
383a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati	((__bfa)->iocfc.cfgrsp->fwcfg.fw_tick_res)
384a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati
38583763d591b343b07331cebe86715205230c568b1Krishna Gudipati/*
38683763d591b343b07331cebe86715205230c568b1Krishna Gudipati * lun mask macros return NULL when min cfg is enabled and there is
38783763d591b343b07331cebe86715205230c568b1Krishna Gudipati * no memory allocated for lunmask.
38883763d591b343b07331cebe86715205230c568b1Krishna Gudipati */
38983763d591b343b07331cebe86715205230c568b1Krishna Gudipati#define bfa_get_lun_mask(__bfa)					\
39083763d591b343b07331cebe86715205230c568b1Krishna Gudipati	((&(__bfa)->modules.dconf_mod)->min_cfg) ? NULL :	\
39183763d591b343b07331cebe86715205230c568b1Krishna Gudipati	 (&(BFA_DCONF_MOD(__bfa)->dconf->lun_mask))
39283763d591b343b07331cebe86715205230c568b1Krishna Gudipati
39383763d591b343b07331cebe86715205230c568b1Krishna Gudipati#define bfa_get_lun_mask_list(_bfa)				\
39483763d591b343b07331cebe86715205230c568b1Krishna Gudipati	((&(_bfa)->modules.dconf_mod)->min_cfg) ? NULL :	\
39583763d591b343b07331cebe86715205230c568b1Krishna Gudipati	 (bfa_get_lun_mask(_bfa)->lun_list)
39683763d591b343b07331cebe86715205230c568b1Krishna Gudipati
39783763d591b343b07331cebe86715205230c568b1Krishna Gudipati#define bfa_get_lun_mask_status(_bfa)				\
39883763d591b343b07331cebe86715205230c568b1Krishna Gudipati	(((&(_bfa)->modules.dconf_mod)->min_cfg)		\
39983763d591b343b07331cebe86715205230c568b1Krishna Gudipati	 ? BFA_LUNMASK_MINCFG : ((bfa_get_lun_mask(_bfa))->status))
40083763d591b343b07331cebe86715205230c568b1Krishna Gudipati
401a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipativoid bfa_get_pciids(struct bfa_pciid_s **pciids, int *npciids);
402a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipativoid bfa_cfg_get_default(struct bfa_iocfc_cfg_s *cfg);
403a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipativoid bfa_cfg_get_min(struct bfa_iocfc_cfg_s *cfg);
404a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipativoid bfa_cfg_get_meminfo(struct bfa_iocfc_cfg_s *cfg,
4054507025d01149aea8705e43508d0ef11e7010cfdKrishna Gudipati			struct bfa_meminfo_s *meminfo,
4064507025d01149aea8705e43508d0ef11e7010cfdKrishna Gudipati			struct bfa_s *bfa);
407a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipativoid bfa_attach(struct bfa_s *bfa, void *bfad, struct bfa_iocfc_cfg_s *cfg,
408a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati		struct bfa_meminfo_s *meminfo,
409a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati		struct bfa_pcidev_s *pcidev);
410a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipativoid bfa_detach(struct bfa_s *bfa);
411a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipativoid bfa_cb_init(void *bfad, bfa_status_t status);
412a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipativoid bfa_cb_updateq(void *bfad, bfa_status_t status);
413a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati
414a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipatibfa_boolean_t bfa_intx(struct bfa_s *bfa);
415a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipativoid bfa_isr_enable(struct bfa_s *bfa);
416a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipativoid bfa_isr_disable(struct bfa_s *bfa);
417a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati
418a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipativoid bfa_comp_deq(struct bfa_s *bfa, struct list_head *comp_q);
419a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipativoid bfa_comp_process(struct bfa_s *bfa, struct list_head *comp_q);
420a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipativoid bfa_comp_free(struct bfa_s *bfa, struct list_head *comp_q);
421a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati
422a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipatitypedef void (*bfa_cb_ioc_t) (void *cbarg, enum bfa_status status);
423a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipativoid bfa_iocfc_get_attr(struct bfa_s *bfa, struct bfa_iocfc_attr_s *attr);
424a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati
425a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati
426a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipatibfa_status_t bfa_iocfc_israttr_set(struct bfa_s *bfa,
427a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati				   struct bfa_iocfc_intr_attr_s *attr);
428a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati
429a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipativoid bfa_iocfc_enable(struct bfa_s *bfa);
430a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipativoid bfa_iocfc_disable(struct bfa_s *bfa);
431a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati#define bfa_timer_start(_bfa, _timer, _timercb, _arg, _timeout)		\
432a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati	bfa_timer_begin(&(_bfa)->timer_mod, _timer, _timercb, _arg, _timeout)
433a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati
43437ea0558b87abb151245bc750070a4dcda490acaKrishna Gudipatistruct bfa_cb_pending_q_s {
43537ea0558b87abb151245bc750070a4dcda490acaKrishna Gudipati	struct bfa_cb_qe_s	hcb_qe;
43637ea0558b87abb151245bc750070a4dcda490acaKrishna Gudipati	void			*data;  /* Driver buffer */
43737ea0558b87abb151245bc750070a4dcda490acaKrishna Gudipati};
43837ea0558b87abb151245bc750070a4dcda490acaKrishna Gudipati
43937ea0558b87abb151245bc750070a4dcda490acaKrishna Gudipati/* Common macros to operate on pending stats/attr apis */
44037ea0558b87abb151245bc750070a4dcda490acaKrishna Gudipati#define bfa_pending_q_init(__qe, __cbfn, __cbarg, __data) do {	\
44137ea0558b87abb151245bc750070a4dcda490acaKrishna Gudipati	bfa_q_qe_init(&((__qe)->hcb_qe.qe));			\
44237ea0558b87abb151245bc750070a4dcda490acaKrishna Gudipati	(__qe)->hcb_qe.cbfn = (__cbfn);				\
44337ea0558b87abb151245bc750070a4dcda490acaKrishna Gudipati	(__qe)->hcb_qe.cbarg = (__cbarg);			\
44437ea0558b87abb151245bc750070a4dcda490acaKrishna Gudipati	(__qe)->hcb_qe.pre_rmv = BFA_TRUE;			\
44537ea0558b87abb151245bc750070a4dcda490acaKrishna Gudipati	(__qe)->data = (__data);				\
44637ea0558b87abb151245bc750070a4dcda490acaKrishna Gudipati} while (0)
44737ea0558b87abb151245bc750070a4dcda490acaKrishna Gudipati
448a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati#endif /* __BFA_H__ */
449