linux/drivers/scsi/bfa/bfa_modules.h
<<
>>
Prefs
   1/*
   2 * Copyright (c) 2005-2014 Brocade Communications Systems, Inc.
   3 * Copyright (c) 2014- QLogic Corporation.
   4 * All rights reserved
   5 * www.qlogic.com
   6 *
   7 * Linux driver for QLogic BR-series Fibre Channel Host Bus Adapter.
   8 *
   9 * This program is free software; you can redistribute it and/or modify it
  10 * under the terms of the GNU General Public License (GPL) Version 2 as
  11 * published by the Free Software Foundation
  12 *
  13 * This program is distributed in the hope that it will be useful, but
  14 * WITHOUT ANY WARRANTY; without even the implied warranty of
  15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  16 * General Public License for more details.
  17 */
  18
  19/*
  20 *  bfa_modules.h BFA modules
  21 */
  22
  23#ifndef __BFA_MODULES_H__
  24#define __BFA_MODULES_H__
  25
  26#include "bfa_cs.h"
  27#include "bfa.h"
  28#include "bfa_svc.h"
  29#include "bfa_fcpim.h"
  30#include "bfa_port.h"
  31
  32struct bfa_modules_s {
  33        struct bfa_fcdiag_s     fcdiag;         /* fcdiag module */
  34        struct bfa_fcport_s     fcport;         /*  fc port module            */
  35        struct bfa_fcxp_mod_s   fcxp_mod;       /*  fcxp module       */
  36        struct bfa_lps_mod_s    lps_mod;        /*  fcxp module       */
  37        struct bfa_uf_mod_s     uf_mod;         /*  unsolicited frame module */
  38        struct bfa_rport_mod_s  rport_mod;      /*  remote port module        */
  39        struct bfa_fcp_mod_s    fcp_mod;        /*  FCP initiator module     */
  40        struct bfa_sgpg_mod_s   sgpg_mod;       /*  SG page module            */
  41        struct bfa_port_s       port;           /*  Physical port module     */
  42        struct bfa_ablk_s       ablk;           /*  ASIC block config module */
  43        struct bfa_cee_s        cee;            /*  CEE Module  */
  44        struct bfa_sfp_s        sfp;            /*  SFP module  */
  45        struct bfa_flash_s      flash;          /*  flash module */
  46        struct bfa_diag_s       diag_mod;       /*  diagnostics module  */
  47        struct bfa_phy_s        phy;            /*  phy module          */
  48        struct bfa_dconf_mod_s  dconf_mod;      /*  DCONF common module */
  49        struct bfa_fru_s        fru;            /*  fru module          */
  50};
  51
  52/*
  53 * !!! Only append to the enums defined here to avoid any versioning
  54 * !!! needed between trace utility and driver version
  55 */
  56enum {
  57        BFA_TRC_HAL_CORE        = 1,
  58        BFA_TRC_HAL_FCXP        = 2,
  59        BFA_TRC_HAL_FCPIM       = 3,
  60        BFA_TRC_HAL_IOCFC_CT    = 4,
  61        BFA_TRC_HAL_IOCFC_CB    = 5,
  62};
  63
  64/*
  65 * Macro to define a new BFA module
  66 */
  67#define BFA_MODULE(__mod)                                               \
  68        static void bfa_ ## __mod ## _meminfo(                          \
  69                        struct bfa_iocfc_cfg_s *cfg,                    \
  70                        struct bfa_meminfo_s *meminfo,                  \
  71                        struct bfa_s *bfa);                             \
  72        static void bfa_ ## __mod ## _attach(struct bfa_s *bfa,         \
  73                        void *bfad, struct bfa_iocfc_cfg_s *cfg,        \
  74                        struct bfa_pcidev_s *pcidev);      \
  75        static void bfa_ ## __mod ## _detach(struct bfa_s *bfa);      \
  76        static void bfa_ ## __mod ## _start(struct bfa_s *bfa);      \
  77        static void bfa_ ## __mod ## _stop(struct bfa_s *bfa);      \
  78        static void bfa_ ## __mod ## _iocdisable(struct bfa_s *bfa);      \
  79                                                                        \
  80        extern struct bfa_module_s hal_mod_ ## __mod;                   \
  81        struct bfa_module_s hal_mod_ ## __mod = {                       \
  82                bfa_ ## __mod ## _meminfo,                              \
  83                bfa_ ## __mod ## _attach,                               \
  84                bfa_ ## __mod ## _detach,                               \
  85                bfa_ ## __mod ## _start,                                \
  86                bfa_ ## __mod ## _stop,                                 \
  87                bfa_ ## __mod ## _iocdisable,                           \
  88        }
  89
  90#define BFA_CACHELINE_SZ        (256)
  91
  92/*
  93 * Structure used to interact between different BFA sub modules
  94 *
  95 * Each sub module needs to implement only the entry points relevant to it (and
  96 * can leave entry points as NULL)
  97 */
  98struct bfa_module_s {
  99        void (*meminfo) (struct bfa_iocfc_cfg_s *cfg,
 100                         struct bfa_meminfo_s *meminfo,
 101                         struct bfa_s *bfa);
 102        void (*attach) (struct bfa_s *bfa, void *bfad,
 103                        struct bfa_iocfc_cfg_s *cfg,
 104                        struct bfa_pcidev_s *pcidev);
 105        void (*detach) (struct bfa_s *bfa);
 106        void (*start) (struct bfa_s *bfa);
 107        void (*stop) (struct bfa_s *bfa);
 108        void (*iocdisable) (struct bfa_s *bfa);
 109};
 110
 111
 112struct bfa_s {
 113        void                    *bfad;          /*  BFA driver instance    */
 114        struct bfa_plog_s       *plog;          /*  portlog buffer          */
 115        struct bfa_trc_mod_s    *trcmod;        /*  driver tracing          */
 116        struct bfa_ioc_s        ioc;            /*  IOC module              */
 117        struct bfa_iocfc_s      iocfc;          /*  IOCFC module            */
 118        struct bfa_timer_mod_s  timer_mod;      /*  timer module            */
 119        struct bfa_modules_s    modules;        /*  BFA modules     */
 120        struct list_head        comp_q;         /*  pending completions     */
 121        bfa_boolean_t           queue_process;  /*  queue processing enabled */
 122        struct list_head        reqq_waitq[BFI_IOC_MAX_CQS];
 123        bfa_boolean_t           fcs;            /*  FCS is attached to BFA */
 124        struct bfa_msix_s       msix;
 125        int                     bfa_aen_seq;
 126        bfa_boolean_t           intr_enabled;   /*  Status of interrupts */
 127};
 128
 129extern bfa_boolean_t bfa_auto_recover;
 130extern struct bfa_module_s hal_mod_fcdiag;
 131extern struct bfa_module_s hal_mod_sgpg;
 132extern struct bfa_module_s hal_mod_fcport;
 133extern struct bfa_module_s hal_mod_fcxp;
 134extern struct bfa_module_s hal_mod_lps;
 135extern struct bfa_module_s hal_mod_uf;
 136extern struct bfa_module_s hal_mod_rport;
 137extern struct bfa_module_s hal_mod_fcp;
 138extern struct bfa_module_s hal_mod_dconf;
 139
 140#endif /* __BFA_MODULES_H__ */
 141