]> git.karo-electronics.de Git - mv-sheeva.git/blobdiff - drivers/scsi/bfa/bfad_drv.h
Merge tag 'v2.6.37' of git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6
[mv-sheeva.git] / drivers / scsi / bfa / bfad_drv.h
index 465b8b86ec9ce7b7dfb3ec1245fe87599d08f55e..d5ce2349ac59fa5c13c6d3b89d3ec2927561b84c 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2005-2009 Brocade Communications Systems, Inc.
+ * Copyright (c) 2005-2010 Brocade Communications Systems, Inc.
  * All rights reserved
  * www.brocade.com
  *
  * General Public License for more details.
  */
 
-/**
+/*
  * Contains base driver definitions.
  */
 
-/**
+/*
  *  bfa_drv.h Linux driver data structures.
  */
 
 
 #include "bfa_os_inc.h"
 
-#include <bfa.h>
-#include <bfa_svc.h>
-#include <fcs/bfa_fcs.h>
-#include <defs/bfa_defs_pci.h>
-#include <defs/bfa_defs_port.h>
-#include <defs/bfa_defs_rport.h>
-#include <fcs/bfa_fcs_rport.h>
-#include <defs/bfa_defs_vport.h>
-#include <fcs/bfa_fcs_vport.h>
-
-#include <cs/bfa_plog.h>
-#include "aen/bfa_aen.h"
-#include <log/bfa_log_linux.h>
-
-#define BFAD_DRIVER_NAME        "bfa"
+#include "bfa_modules.h"
+#include "bfa_fcs.h"
+#include "bfa_defs_fcs.h"
+
+#include "bfa_plog.h"
+#include "bfa_cs.h"
+
+#define BFAD_DRIVER_NAME       "bfa"
 #ifdef BFA_DRIVER_VERSION
 #define BFAD_DRIVER_VERSION    BFA_DRIVER_VERSION
 #else
-#define BFAD_DRIVER_VERSION    "2.2.2.1"
+#define BFAD_DRIVER_VERSION    "2.3.2.0"
 #endif
 
-
+#define BFAD_PROTO_NAME FCPI_NAME
 #define BFAD_IRQ_FLAGS IRQF_SHARED
 
+#ifndef FC_PORTSPEED_8GBIT
+#define FC_PORTSPEED_8GBIT 0x10
+#endif
+
 /*
  * BFAD flags
  */
@@ -62,9 +59,9 @@
 #define BFAD_HAL_START_DONE                    0x00000010
 #define BFAD_PORT_ONLINE                       0x00000020
 #define BFAD_RPORT_ONLINE                      0x00000040
-#define BFAD_FCS_INIT_DONE                      0x00000080
-#define BFAD_HAL_INIT_FAIL                      0x00000100
-#define BFAD_FC4_PROBE_DONE                     0x00000200
+#define BFAD_FCS_INIT_DONE                     0x00000080
+#define BFAD_HAL_INIT_FAIL                     0x00000100
+#define BFAD_FC4_PROBE_DONE                    0x00000200
 #define BFAD_PORT_DELETE                       0x00000001
 
 /*
@@ -77,8 +74,8 @@
 /*
  * BFAD configuration parameter default values
  */
-#define BFAD_LUN_QUEUE_DEPTH           32
-#define BFAD_IO_MAX_SGE                SG_ALL
+#define BFAD_LUN_QUEUE_DEPTH   32
+#define BFAD_IO_MAX_SGE                SG_ALL
 
 #define bfad_isr_t irq_handler_t
 
 struct bfad_msix_s {
        struct bfad_s *bfad;
        struct msix_entry msix;
+       char name[32];
+};
+
+/*
+ * Only append to the enums defined here to avoid any versioning
+ * needed between trace utility and driver version
+ */
+enum {
+       BFA_TRC_LDRV_BFAD               = 1,
+       BFA_TRC_LDRV_IM                 = 2,
 };
 
 enum bfad_port_pvb_type {
@@ -101,17 +108,13 @@ enum bfad_port_pvb_type {
  */
 struct bfad_port_s {
        struct list_head list_entry;
-       struct bfad_s         *bfad;
-       struct bfa_fcs_port_s *fcs_port;
-       u32        roles;
-       s32         flags;
-       u32        supported_fc4s;
-       u8              ipfc_flags;
+       struct bfad_s   *bfad;
+       struct bfa_fcs_lport_s *fcs_port;
+       u32     roles;
+       s32             flags;
+       u32     supported_fc4s;
        enum bfad_port_pvb_type pvb_type;
        struct bfad_im_port_s *im_port; /* IM specific data */
-       struct bfad_tm_port_s *tm_port; /* TM specific data */
-       struct bfad_ipfc_port_s *ipfc_port;     /* IPFC specific data */
-
        /* port debugfs specific data */
        struct dentry *port_debugfs_root;
 };
@@ -124,7 +127,6 @@ struct bfad_vport_s {
        struct bfa_fcs_vport_s fcs_vport;
        struct completion *comp_del;
        struct list_head list_entry;
-       struct bfa_port_cfg_s port_cfg;
 };
 
 /*
@@ -137,20 +139,35 @@ struct bfad_vf_s {
 };
 
 struct bfad_cfg_param_s {
-       u32        rport_del_timeout;
-       u32        ioc_queue_depth;
-       u32        lun_queue_depth;
-       u32        io_max_sge;
-       u32        binding_method;
+       u32     rport_del_timeout;
+       u32     ioc_queue_depth;
+       u32     lun_queue_depth;
+       u32     io_max_sge;
+       u32     binding_method;
+};
+
+union bfad_tmp_buf {
+       /* From struct bfa_adapter_attr_s */
+       char            manufacturer[BFA_ADAPTER_MFG_NAME_LEN];
+       char            serial_num[BFA_ADAPTER_SERIAL_NUM_LEN];
+       char            model[BFA_ADAPTER_MODEL_NAME_LEN];
+       char            fw_ver[BFA_VERSION_LEN];
+       char            optrom_ver[BFA_VERSION_LEN];
+
+       /* From struct bfa_ioc_pci_attr_s */
+       u8              chip_rev[BFA_IOC_CHIP_REV_LEN];  /*  chip revision */
+
+       wwn_t           wwn[BFA_FCS_MAX_LPORTS];
 };
 
 /*
  * BFAD (PCI function) data structure
  */
 struct bfad_s {
+       bfa_sm_t        sm;     /* state machine */
        struct list_head list_entry;
-       struct bfa_s       bfa;
-       struct bfa_fcs_s       bfa_fcs;
+       struct bfa_s    bfa;
+       struct bfa_fcs_s bfa_fcs;
        struct pci_dev *pcidev;
        const char *pci_name;
        struct bfa_pcidev_s hal_pcidev;
@@ -163,41 +180,41 @@ struct bfad_s {
        struct bfad_port_s     pport;   /* physical port of the BFAD */
        struct bfa_meminfo_s meminfo;
        struct bfa_iocfc_cfg_s   ioc_cfg;
-       u32        inst_no;     /* BFAD instance number */
-       u32        bfad_flags;
+       u32     inst_no;        /* BFAD instance number */
+       u32     bfad_flags;
        spinlock_t      bfad_lock;
        struct task_struct *bfad_tsk;
        struct bfad_cfg_param_s cfg_data;
        struct bfad_msix_s msix_tab[MAX_MSIX_ENTRY];
-       int             nvec;
-       char            adapter_name[BFA_ADAPTER_SYM_NAME_LEN];
-       char            port_name[BFA_ADAPTER_SYM_NAME_LEN];
+       int             nvec;
+       char    adapter_name[BFA_ADAPTER_SYM_NAME_LEN];
+       char    port_name[BFA_ADAPTER_SYM_NAME_LEN];
        struct timer_list hal_tmo;
        unsigned long   hs_start;
        struct bfad_im_s *im;           /* IM specific data */
-       struct bfad_tm_s *tm;           /* TM specific data */
-       struct bfad_ipfc_s *ipfc;       /* IPFC specific data */
-       struct bfa_log_mod_s   log_data;
        struct bfa_trc_mod_s  *trcmod;
-       struct bfa_log_mod_s  *logmod;
-       struct bfa_aen_s      *aen;
-       struct bfa_aen_s       aen_buf;
-       void            *file_map[BFA_AEN_MAX_APP];
        struct bfa_plog_s      plog_buf;
-       int             ref_count;
-       bfa_boolean_t   ipfc_enabled;
+       int             ref_count;
+       union bfad_tmp_buf tmp_buf;
        struct fc_host_statistics link_stats;
-       struct list_head pbc_pcfg_list;
-       atomic_t wq_reqcnt;
+       struct list_head pbc_vport_list;
        /* debugfs specific data */
        char *regdata;
        u32 reglen;
        struct dentry *bfad_dentry_files[5];
 };
 
-struct bfad_pcfg_s {
-       struct list_head list_entry;
-       struct bfa_port_cfg_s port_cfg;
+/* BFAD state machine events */
+enum bfad_sm_event {
+       BFAD_E_CREATE                   = 1,
+       BFAD_E_KTHREAD_CREATE_FAILED    = 2,
+       BFAD_E_INIT                     = 3,
+       BFAD_E_INIT_SUCCESS             = 4,
+       BFAD_E_INIT_FAILED              = 5,
+       BFAD_E_INTR_INIT_FAILED         = 6,
+       BFAD_E_FCS_EXIT_COMP            = 7,
+       BFAD_E_EXIT_COMP                = 8,
+       BFAD_E_STOP                     = 9
 };
 
 /*
@@ -208,30 +225,30 @@ struct bfad_rport_s {
 };
 
 struct bfad_buf_info {
-       void           *virt;
+       void            *virt;
        dma_addr_t      phys;
-       u32        size;
+       u32     size;
 };
 
 struct bfad_fcxp {
        struct bfad_port_s    *port;
        struct bfa_rport_s *bfa_rport;
        bfa_status_t    req_status;
-       u16        tag;
-       u16        rsp_len;
-       u16        rsp_maxlen;
-       u8         use_ireqbuf;
-       u8         use_irspbuf;
-       u32        num_req_sgles;
-       u32        num_rsp_sgles;
-       struct fchs_s          fchs;
-       void           *reqbuf_info;
-       void           *rspbuf_info;
+       u16     tag;
+       u16     rsp_len;
+       u16     rsp_maxlen;
+       u8              use_ireqbuf;
+       u8              use_irspbuf;
+       u32     num_req_sgles;
+       u32     num_rsp_sgles;
+       struct fchs_s   fchs;
+       void            *reqbuf_info;
+       void            *rspbuf_info;
        struct bfa_sge_s  *req_sge;
        struct bfa_sge_s  *rsp_sge;
        fcxp_send_cb_t  send_cbfn;
-       void           *send_cbarg;
-       void           *bfa_fcxp;
+       void            *send_cbarg;
+       void            *bfa_fcxp;
        struct completion comp;
 };
 
@@ -244,45 +261,55 @@ struct bfad_hal_comp {
  * Macro to obtain the immediate lower power
  * of two for the integer.
  */
-#define nextLowerInt(x)                                \
-do {                                                   \
-       int j;                                          \
-       (*x)--;                                         \
-       for (j = 1; j < (sizeof(int) * 8); j <<= 1)     \
-               (*x) = (*x) | (*x) >> j;                \
-       (*x)++;                                         \
-       (*x) = (*x) >> 1;                               \
+#define nextLowerInt(x)                         \
+do {                                            \
+       int i;                                  \
+       (*x)--;                                 \
+       for (i = 1; i < (sizeof(int)*8); i <<= 1) \
+               (*x) = (*x) | (*x) >> i;        \
+       (*x)++;                                 \
+       (*x) = (*x) >> 1;                       \
 } while (0)
 
 
-bfa_status_t    bfad_vport_create(struct bfad_s *bfad, u16 vf_id,
-                         struct bfa_port_cfg_s *port_cfg, struct device *dev);
-bfa_status_t    bfad_vf_create(struct bfad_s *bfad, u16 vf_id,
-                              struct bfa_port_cfg_s *port_cfg);
-bfa_status_t    bfad_cfg_pport(struct bfad_s *bfad, enum bfa_port_role role);
-bfa_status_t    bfad_drv_init(struct bfad_s *bfad);
-bfa_status_t   bfad_start_ops(struct bfad_s *bfad);
-void            bfad_drv_start(struct bfad_s *bfad);
-void            bfad_uncfg_pport(struct bfad_s *bfad);
-void            bfad_drv_stop(struct bfad_s *bfad);
-void            bfad_remove_intr(struct bfad_s *bfad);
-void            bfad_hal_mem_release(struct bfad_s *bfad);
-void            bfad_hcb_comp(void *arg, bfa_status_t status);
-
-int             bfad_setup_intr(struct bfad_s *bfad);
-void            bfad_remove_intr(struct bfad_s *bfad);
+#define list_remove_head(list, entry, type, member)            \
+do {                                                           \
+       entry = NULL;                                           \
+       if (!list_empty(list)) {                                \
+               entry = list_entry((list)->next, type, member); \
+               list_del_init(&entry->member);                  \
+       }                                                       \
+} while (0)
 
+#define list_get_first(list, type, member)                             \
+((list_empty(list)) ? NULL :                                           \
+       list_entry((list)->next, type, member))
+
+bfa_status_t   bfad_vport_create(struct bfad_s *bfad, u16 vf_id,
+                                 struct bfa_lport_cfg_s *port_cfg,
+                                 struct device *dev);
+bfa_status_t   bfad_vf_create(struct bfad_s *bfad, u16 vf_id,
+                              struct bfa_lport_cfg_s *port_cfg);
+bfa_status_t   bfad_cfg_pport(struct bfad_s *bfad, enum bfa_lport_role role);
+bfa_status_t   bfad_drv_init(struct bfad_s *bfad);
+bfa_status_t   bfad_start_ops(struct bfad_s *bfad);
+void           bfad_drv_start(struct bfad_s *bfad);
+void           bfad_uncfg_pport(struct bfad_s *bfad);
+void           bfad_stop(struct bfad_s *bfad);
+void           bfad_fcs_stop(struct bfad_s *bfad);
+void           bfad_remove_intr(struct bfad_s *bfad);
+void           bfad_hal_mem_release(struct bfad_s *bfad);
+void           bfad_hcb_comp(void *arg, bfa_status_t status);
+
+int            bfad_setup_intr(struct bfad_s *bfad);
+void           bfad_remove_intr(struct bfad_s *bfad);
 void           bfad_update_hal_cfg(struct bfa_iocfc_cfg_s *bfa_cfg);
 bfa_status_t   bfad_hal_mem_alloc(struct bfad_s *bfad);
 void           bfad_bfa_tmo(unsigned long data);
 void           bfad_init_timer(struct bfad_s *bfad);
 int            bfad_pci_init(struct pci_dev *pdev, struct bfad_s *bfad);
 void           bfad_pci_uninit(struct pci_dev *pdev, struct bfad_s *bfad);
-void           bfad_fcs_port_cfg(struct bfad_s *bfad);
 void           bfad_drv_uninit(struct bfad_s *bfad);
-void           bfad_drv_log_level_set(struct bfad_s *bfad);
-bfa_status_t   bfad_fc4_module_init(void);
-void           bfad_fc4_module_exit(void);
 int            bfad_worker(void *ptr);
 void           bfad_debugfs_init(struct bfad_port_s *port);
 void           bfad_debugfs_exit(struct bfad_port_s *port);
@@ -294,10 +321,30 @@ int bfad_os_get_linkup_delay(struct bfad_s *bfad);
 int bfad_install_msix_handler(struct bfad_s *bfad);
 
 extern struct idr bfad_im_port_index;
+extern struct pci_device_id bfad_id_table[];
 extern struct list_head bfad_list;
-extern int bfa_lun_queue_depth;
-extern int bfad_supported_fc4s;
-extern int bfa_linkup_delay;
+extern char    *os_name;
+extern char    *os_patch;
+extern char    *host_name;
+extern int     num_rports;
+extern int     num_ios;
+extern int     num_tms;
+extern int     num_fcxps;
+extern int     num_ufbufs;
+extern int     reqq_size;
+extern int     rspq_size;
+extern int     num_sgpgs;
+extern int      rport_del_timeout;
+extern int      bfa_lun_queue_depth;
+extern int      bfa_io_max_sge;
+extern int      bfa_log_level;
+extern int      ioc_auto_recover;
+extern int      bfa_linkup_delay;
+extern int      msix_disable_cb;
+extern int      msix_disable_ct;
+extern int      fdmi_enable;
+extern int      supported_fc4s;
+extern int     pcie_max_read_reqsz;
 extern int bfa_debugfs_enable;
 extern struct mutex bfad_mutex;