17725ccfda59715ecf8f99e3b520a0b84cc2ea79eJing Huang/*
2a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati * Copyright (c) 2005-2010 Brocade Communications Systems, Inc.
37725ccfda59715ecf8f99e3b520a0b84cc2ea79eJing Huang * All rights reserved
47725ccfda59715ecf8f99e3b520a0b84cc2ea79eJing Huang * www.brocade.com
57725ccfda59715ecf8f99e3b520a0b84cc2ea79eJing Huang *
67725ccfda59715ecf8f99e3b520a0b84cc2ea79eJing Huang * Linux driver for Brocade Fibre Channel Host Bus Adapter.
77725ccfda59715ecf8f99e3b520a0b84cc2ea79eJing Huang *
87725ccfda59715ecf8f99e3b520a0b84cc2ea79eJing Huang * This program is free software; you can redistribute it and/or modify it
97725ccfda59715ecf8f99e3b520a0b84cc2ea79eJing Huang * under the terms of the GNU General Public License (GPL) Version 2 as
107725ccfda59715ecf8f99e3b520a0b84cc2ea79eJing Huang * published by the Free Software Foundation
117725ccfda59715ecf8f99e3b520a0b84cc2ea79eJing Huang *
127725ccfda59715ecf8f99e3b520a0b84cc2ea79eJing Huang * This program is distributed in the hope that it will be useful, but
137725ccfda59715ecf8f99e3b520a0b84cc2ea79eJing Huang * WITHOUT ANY WARRANTY; without even the implied warranty of
147725ccfda59715ecf8f99e3b520a0b84cc2ea79eJing Huang * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
157725ccfda59715ecf8f99e3b520a0b84cc2ea79eJing Huang * General Public License for more details.
167725ccfda59715ecf8f99e3b520a0b84cc2ea79eJing Huang */
177725ccfda59715ecf8f99e3b520a0b84cc2ea79eJing Huang
18acdc79a60cb3cbbc9f07bb5032d890e9cf94f0ffJing Huang/*
19a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati *  bfa_modules.h BFA modules
20a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati */
21a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati
22a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati#ifndef __BFA_MODULES_H__
23a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati#define __BFA_MODULES_H__
24a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati
25a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati#include "bfa_cs.h"
26a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati#include "bfa.h"
27a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati#include "bfa_svc.h"
28a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati#include "bfa_fcpim.h"
29a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati#include "bfa_port.h"
30a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati
31a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipatistruct bfa_modules_s {
323d7fc66dcd8d510aaa46ab9b914b632bc149b05cKrishna Gudipati	struct bfa_fcdiag_s	fcdiag;		/* fcdiag module */
33a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati	struct bfa_fcport_s	fcport;		/*  fc port module	      */
34a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati	struct bfa_fcxp_mod_s	fcxp_mod;	/*  fcxp module	      */
35a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati	struct bfa_lps_mod_s	lps_mod;	/*  fcxp module	      */
36a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati	struct bfa_uf_mod_s	uf_mod;		/*  unsolicited frame module */
37a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati	struct bfa_rport_mod_s	rport_mod;	/*  remote port module	      */
38e2187d7f38967aeaf4148cdbe3498f76f4f71bcaKrishna Gudipati	struct bfa_fcp_mod_s	fcp_mod;	/*  FCP initiator module     */
39a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati	struct bfa_sgpg_mod_s	sgpg_mod;	/*  SG page module	      */
40a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati	struct bfa_port_s	port;		/*  Physical port module     */
411a4d8e1bd81c018f7b8c7622066d5cfead59b38aKrishna Gudipati	struct bfa_ablk_s	ablk;		/*  ASIC block config module */
42148d61039c625f3f7e2d0a6ad1efe17f83153e65Krishna Gudipati	struct bfa_cee_s	cee;		/*  CEE Module	*/
4351e569aa1f0c10bd71af05e76e4ba0e42c51e4abKrishna Gudipati	struct bfa_sfp_s	sfp;		/*  SFP module	*/
445a54b1d576d1880eb249e906e0c8e2ffe64506d3Krishna Gudipati	struct bfa_flash_s	flash;		/*  flash module */
453d7fc66dcd8d510aaa46ab9b914b632bc149b05cKrishna Gudipati	struct bfa_diag_s	diag_mod;	/*  diagnostics module	*/
463350d98d6d072fc4ac3622e61dc3dc351ef01dc5Krishna Gudipati	struct bfa_phy_s	phy;		/*  phy module		*/
4745c5dc1d3f42d4f54a5ab5f45ee55f0ffe1099f1Krishna Gudipati	struct bfa_dconf_mod_s	dconf_mod;	/*  DCONF common module	*/
48a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati};
49a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati
50a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati/*
51a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati * !!! Only append to the enums defined here to avoid any versioning
52a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati * !!! needed between trace utility and driver version
53a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati */
54a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipatienum {
55a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati	BFA_TRC_HAL_CORE	= 1,
56a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati	BFA_TRC_HAL_FCXP	= 2,
57a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati	BFA_TRC_HAL_FCPIM	= 3,
58a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati	BFA_TRC_HAL_IOCFC_CT	= 4,
59a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati	BFA_TRC_HAL_IOCFC_CB	= 5,
60a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati};
617725ccfda59715ecf8f99e3b520a0b84cc2ea79eJing Huang
62acdc79a60cb3cbbc9f07bb5032d890e9cf94f0ffJing Huang/*
637725ccfda59715ecf8f99e3b520a0b84cc2ea79eJing Huang * Macro to define a new BFA module
647725ccfda59715ecf8f99e3b520a0b84cc2ea79eJing Huang */
65a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati#define BFA_MODULE(__mod)						\
667725ccfda59715ecf8f99e3b520a0b84cc2ea79eJing Huang	static void bfa_ ## __mod ## _meminfo(				\
674507025d01149aea8705e43508d0ef11e7010cfdKrishna Gudipati			struct bfa_iocfc_cfg_s *cfg,			\
684507025d01149aea8705e43508d0ef11e7010cfdKrishna Gudipati			struct bfa_meminfo_s *meminfo,			\
694507025d01149aea8705e43508d0ef11e7010cfdKrishna Gudipati			struct bfa_s *bfa);				\
707725ccfda59715ecf8f99e3b520a0b84cc2ea79eJing Huang	static void bfa_ ## __mod ## _attach(struct bfa_s *bfa,		\
71a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati			void *bfad, struct bfa_iocfc_cfg_s *cfg,	\
727725ccfda59715ecf8f99e3b520a0b84cc2ea79eJing Huang			struct bfa_pcidev_s *pcidev);      \
737725ccfda59715ecf8f99e3b520a0b84cc2ea79eJing Huang	static void bfa_ ## __mod ## _detach(struct bfa_s *bfa);      \
747725ccfda59715ecf8f99e3b520a0b84cc2ea79eJing Huang	static void bfa_ ## __mod ## _start(struct bfa_s *bfa);      \
757725ccfda59715ecf8f99e3b520a0b84cc2ea79eJing Huang	static void bfa_ ## __mod ## _stop(struct bfa_s *bfa);      \
767725ccfda59715ecf8f99e3b520a0b84cc2ea79eJing Huang	static void bfa_ ## __mod ## _iocdisable(struct bfa_s *bfa);      \
777725ccfda59715ecf8f99e3b520a0b84cc2ea79eJing Huang									\
787725ccfda59715ecf8f99e3b520a0b84cc2ea79eJing Huang	extern struct bfa_module_s hal_mod_ ## __mod;			\
797725ccfda59715ecf8f99e3b520a0b84cc2ea79eJing Huang	struct bfa_module_s hal_mod_ ## __mod = {			\
807725ccfda59715ecf8f99e3b520a0b84cc2ea79eJing Huang		bfa_ ## __mod ## _meminfo,				\
817725ccfda59715ecf8f99e3b520a0b84cc2ea79eJing Huang		bfa_ ## __mod ## _attach,				\
827725ccfda59715ecf8f99e3b520a0b84cc2ea79eJing Huang		bfa_ ## __mod ## _detach,				\
837725ccfda59715ecf8f99e3b520a0b84cc2ea79eJing Huang		bfa_ ## __mod ## _start,				\
847725ccfda59715ecf8f99e3b520a0b84cc2ea79eJing Huang		bfa_ ## __mod ## _stop,					\
857725ccfda59715ecf8f99e3b520a0b84cc2ea79eJing Huang		bfa_ ## __mod ## _iocdisable,				\
867725ccfda59715ecf8f99e3b520a0b84cc2ea79eJing Huang	}
877725ccfda59715ecf8f99e3b520a0b84cc2ea79eJing Huang
887725ccfda59715ecf8f99e3b520a0b84cc2ea79eJing Huang#define BFA_CACHELINE_SZ	(256)
897725ccfda59715ecf8f99e3b520a0b84cc2ea79eJing Huang
90acdc79a60cb3cbbc9f07bb5032d890e9cf94f0ffJing Huang/*
917725ccfda59715ecf8f99e3b520a0b84cc2ea79eJing Huang * Structure used to interact between different BFA sub modules
927725ccfda59715ecf8f99e3b520a0b84cc2ea79eJing Huang *
937725ccfda59715ecf8f99e3b520a0b84cc2ea79eJing Huang * Each sub module needs to implement only the entry points relevant to it (and
947725ccfda59715ecf8f99e3b520a0b84cc2ea79eJing Huang * can leave entry points as NULL)
957725ccfda59715ecf8f99e3b520a0b84cc2ea79eJing Huang */
967725ccfda59715ecf8f99e3b520a0b84cc2ea79eJing Huangstruct bfa_module_s {
974507025d01149aea8705e43508d0ef11e7010cfdKrishna Gudipati	void (*meminfo) (struct bfa_iocfc_cfg_s *cfg,
984507025d01149aea8705e43508d0ef11e7010cfdKrishna Gudipati			 struct bfa_meminfo_s *meminfo,
994507025d01149aea8705e43508d0ef11e7010cfdKrishna Gudipati			 struct bfa_s *bfa);
1007725ccfda59715ecf8f99e3b520a0b84cc2ea79eJing Huang	void (*attach) (struct bfa_s *bfa, void *bfad,
1017725ccfda59715ecf8f99e3b520a0b84cc2ea79eJing Huang			struct bfa_iocfc_cfg_s *cfg,
1027725ccfda59715ecf8f99e3b520a0b84cc2ea79eJing Huang			struct bfa_pcidev_s *pcidev);
1037725ccfda59715ecf8f99e3b520a0b84cc2ea79eJing Huang	void (*detach) (struct bfa_s *bfa);
1047725ccfda59715ecf8f99e3b520a0b84cc2ea79eJing Huang	void (*start) (struct bfa_s *bfa);
1057725ccfda59715ecf8f99e3b520a0b84cc2ea79eJing Huang	void (*stop) (struct bfa_s *bfa);
1067725ccfda59715ecf8f99e3b520a0b84cc2ea79eJing Huang	void (*iocdisable) (struct bfa_s *bfa);
1077725ccfda59715ecf8f99e3b520a0b84cc2ea79eJing Huang};
1087725ccfda59715ecf8f99e3b520a0b84cc2ea79eJing Huang
1097725ccfda59715ecf8f99e3b520a0b84cc2ea79eJing Huang
1107725ccfda59715ecf8f99e3b520a0b84cc2ea79eJing Huangstruct bfa_s {
1117725ccfda59715ecf8f99e3b520a0b84cc2ea79eJing Huang	void			*bfad;		/*  BFA driver instance    */
1127725ccfda59715ecf8f99e3b520a0b84cc2ea79eJing Huang	struct bfa_plog_s	*plog;		/*  portlog buffer	    */
1137725ccfda59715ecf8f99e3b520a0b84cc2ea79eJing Huang	struct bfa_trc_mod_s	*trcmod;	/*  driver tracing	    */
1147725ccfda59715ecf8f99e3b520a0b84cc2ea79eJing Huang	struct bfa_ioc_s	ioc;		/*  IOC module		    */
1157725ccfda59715ecf8f99e3b520a0b84cc2ea79eJing Huang	struct bfa_iocfc_s	iocfc;		/*  IOCFC module	    */
1167725ccfda59715ecf8f99e3b520a0b84cc2ea79eJing Huang	struct bfa_timer_mod_s	timer_mod;	/*  timer module	    */
1177725ccfda59715ecf8f99e3b520a0b84cc2ea79eJing Huang	struct bfa_modules_s	modules;	/*  BFA modules	    */
118a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati	struct list_head	comp_q;		/*  pending completions     */
119775c7742adfd7726f05914198bf33eaa3b9f64bbKrishna Gudipati	bfa_boolean_t		queue_process;	/*  queue processing enabled */
120a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati	struct list_head	reqq_waitq[BFI_IOC_MAX_CQS];
1217725ccfda59715ecf8f99e3b520a0b84cc2ea79eJing Huang	bfa_boolean_t		fcs;		/*  FCS is attached to BFA */
1227725ccfda59715ecf8f99e3b520a0b84cc2ea79eJing Huang	struct bfa_msix_s	msix;
1237826f304b1efa5ab839cf029742290f51c4fa009Krishna Gudipati	int			bfa_aen_seq;
1247725ccfda59715ecf8f99e3b520a0b84cc2ea79eJing Huang};
1257725ccfda59715ecf8f99e3b520a0b84cc2ea79eJing Huang
1267725ccfda59715ecf8f99e3b520a0b84cc2ea79eJing Huangextern bfa_boolean_t bfa_auto_recover;
1273d7fc66dcd8d510aaa46ab9b914b632bc149b05cKrishna Gudipatiextern struct bfa_module_s hal_mod_fcdiag;
1287725ccfda59715ecf8f99e3b520a0b84cc2ea79eJing Huangextern struct bfa_module_s hal_mod_sgpg;
1291c8a4c37494932acd59079b4fc8d8f69fb329c2aKrishna Gudipatiextern struct bfa_module_s hal_mod_fcport;
1307725ccfda59715ecf8f99e3b520a0b84cc2ea79eJing Huangextern struct bfa_module_s hal_mod_fcxp;
1317725ccfda59715ecf8f99e3b520a0b84cc2ea79eJing Huangextern struct bfa_module_s hal_mod_lps;
1327725ccfda59715ecf8f99e3b520a0b84cc2ea79eJing Huangextern struct bfa_module_s hal_mod_uf;
1337725ccfda59715ecf8f99e3b520a0b84cc2ea79eJing Huangextern struct bfa_module_s hal_mod_rport;
134e2187d7f38967aeaf4148cdbe3498f76f4f71bcaKrishna Gudipatiextern struct bfa_module_s hal_mod_fcp;
13545c5dc1d3f42d4f54a5ab5f45ee55f0ffe1099f1Krishna Gudipatiextern struct bfa_module_s hal_mod_dconf;
1367725ccfda59715ecf8f99e3b520a0b84cc2ea79eJing Huang
137a36c61f9025b8924f99f54d518763bee7aa84085Krishna Gudipati#endif /* __BFA_MODULES_H__ */
138