^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1) /* SPDX-License-Identifier: GPL-2.0-only */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3) * Copyright (c) 2005-2014 Brocade Communications Systems, Inc.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4) * Copyright (c) 2014- QLogic Corporation.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5) * All rights reserved
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6) * www.qlogic.com
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 7) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 8) * Linux driver for QLogic BR-series Fibre Channel Host Bus Adapter.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 9) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 12) * bfa_modules.h BFA modules
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 13) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 14)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 15) #ifndef __BFA_MODULES_H__
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 16) #define __BFA_MODULES_H__
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 17)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 18) #include "bfa_cs.h"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 19) #include "bfa.h"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 20) #include "bfa_svc.h"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 21) #include "bfa_fcpim.h"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 22) #include "bfa_port.h"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 23)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 24) struct bfa_modules_s {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 25) struct bfa_fcdiag_s fcdiag; /* fcdiag module */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 26) struct bfa_fcport_s fcport; /* fc port module */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 27) struct bfa_fcxp_mod_s fcxp_mod; /* fcxp module */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 28) struct bfa_lps_mod_s lps_mod; /* fcxp module */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 29) struct bfa_uf_mod_s uf_mod; /* unsolicited frame module */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 30) struct bfa_rport_mod_s rport_mod; /* remote port module */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 31) struct bfa_fcp_mod_s fcp_mod; /* FCP initiator module */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 32) struct bfa_sgpg_mod_s sgpg_mod; /* SG page module */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 33) struct bfa_port_s port; /* Physical port module */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 34) struct bfa_ablk_s ablk; /* ASIC block config module */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 35) struct bfa_cee_s cee; /* CEE Module */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 36) struct bfa_sfp_s sfp; /* SFP module */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 37) struct bfa_flash_s flash; /* flash module */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 38) struct bfa_diag_s diag_mod; /* diagnostics module */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 39) struct bfa_phy_s phy; /* phy module */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 40) struct bfa_dconf_mod_s dconf_mod; /* DCONF common module */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 41) struct bfa_fru_s fru; /* fru module */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 42) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 43)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 44) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 45) * !!! Only append to the enums defined here to avoid any versioning
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 46) * !!! needed between trace utility and driver version
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 47) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 48) enum {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 49) BFA_TRC_HAL_CORE = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 50) BFA_TRC_HAL_FCXP = 2,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 51) BFA_TRC_HAL_FCPIM = 3,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 52) BFA_TRC_HAL_IOCFC_CT = 4,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 53) BFA_TRC_HAL_IOCFC_CB = 5,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 54) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 55)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 56) #define BFA_CACHELINE_SZ (256)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 57)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 58) struct bfa_s {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 59) void *bfad; /* BFA driver instance */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 60) struct bfa_plog_s *plog; /* portlog buffer */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 61) struct bfa_trc_mod_s *trcmod; /* driver tracing */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 62) struct bfa_ioc_s ioc; /* IOC module */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 63) struct bfa_iocfc_s iocfc; /* IOCFC module */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 64) struct bfa_timer_mod_s timer_mod; /* timer module */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 65) struct bfa_modules_s modules; /* BFA modules */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 66) struct list_head comp_q; /* pending completions */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 67) bfa_boolean_t queue_process; /* queue processing enabled */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 68) struct list_head reqq_waitq[BFI_IOC_MAX_CQS];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 69) bfa_boolean_t fcs; /* FCS is attached to BFA */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 70) struct bfa_msix_s msix;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 71) int bfa_aen_seq;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 72) bfa_boolean_t intr_enabled; /* Status of interrupts */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 73) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 74)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 75) extern bfa_boolean_t bfa_auto_recover;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 76)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 77) void bfa_dconf_attach(struct bfa_s *, void *, struct bfa_iocfc_cfg_s *);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 78) void bfa_dconf_meminfo(struct bfa_iocfc_cfg_s *, struct bfa_meminfo_s *,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 79) struct bfa_s *);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 80) void bfa_dconf_iocdisable(struct bfa_s *);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 81) void bfa_fcp_attach(struct bfa_s *, void *, struct bfa_iocfc_cfg_s *,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 82) struct bfa_pcidev_s *);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 83) void bfa_fcp_iocdisable(struct bfa_s *bfa);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 84) void bfa_fcp_meminfo(struct bfa_iocfc_cfg_s *, struct bfa_meminfo_s *,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 85) struct bfa_s *);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 86) void bfa_fcpim_iocdisable(struct bfa_fcp_mod_s *);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 87) void bfa_fcport_start(struct bfa_s *);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 88) void bfa_fcport_iocdisable(struct bfa_s *);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 89) void bfa_fcport_meminfo(struct bfa_iocfc_cfg_s *, struct bfa_meminfo_s *,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 90) struct bfa_s *);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 91) void bfa_fcport_attach(struct bfa_s *, void *, struct bfa_iocfc_cfg_s *,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 92) struct bfa_pcidev_s *);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 93) void bfa_fcxp_iocdisable(struct bfa_s *);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 94) void bfa_fcxp_meminfo(struct bfa_iocfc_cfg_s *, struct bfa_meminfo_s *,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 95) struct bfa_s *);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 96) void bfa_fcxp_attach(struct bfa_s *, void *, struct bfa_iocfc_cfg_s *,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 97) struct bfa_pcidev_s *);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 98) void bfa_fcdiag_iocdisable(struct bfa_s *);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 99) void bfa_fcdiag_attach(struct bfa_s *bfa, void *, struct bfa_iocfc_cfg_s *,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 100) struct bfa_pcidev_s *);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 101) void bfa_ioim_lm_init(struct bfa_s *);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 102) void bfa_lps_iocdisable(struct bfa_s *bfa);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 103) void bfa_lps_meminfo(struct bfa_iocfc_cfg_s *, struct bfa_meminfo_s *,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 104) struct bfa_s *);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 105) void bfa_lps_attach(struct bfa_s *, void *, struct bfa_iocfc_cfg_s *,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 106) struct bfa_pcidev_s *);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 107) void bfa_rport_iocdisable(struct bfa_s *bfa);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 108) void bfa_rport_meminfo(struct bfa_iocfc_cfg_s *, struct bfa_meminfo_s *,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 109) struct bfa_s *);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 110) void bfa_rport_attach(struct bfa_s *, void *, struct bfa_iocfc_cfg_s *,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 111) struct bfa_pcidev_s *);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 112) void bfa_sgpg_meminfo(struct bfa_iocfc_cfg_s *, struct bfa_meminfo_s *,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 113) struct bfa_s *);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 114) void bfa_sgpg_attach(struct bfa_s *, void *bfad, struct bfa_iocfc_cfg_s *,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 115) struct bfa_pcidev_s *);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 116) void bfa_uf_iocdisable(struct bfa_s *);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 117) void bfa_uf_meminfo(struct bfa_iocfc_cfg_s *, struct bfa_meminfo_s *,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 118) struct bfa_s *);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 119) void bfa_uf_attach(struct bfa_s *, void *, struct bfa_iocfc_cfg_s *,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 120) struct bfa_pcidev_s *);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 121) void bfa_uf_start(struct bfa_s *);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 122)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 123) #endif /* __BFA_MODULES_H__ */