fedora core 6 1.2949 + vserver 2.2.0
[linux-2.6.git] / drivers / scsi / lpfc / lpfc.h
index 38ffa8d..a7de0bc 100644 (file)
@@ -1,7 +1,7 @@
 /*******************************************************************
  * This file is part of the Emulex Linux Device Driver for         *
  * Fibre Channel Host Bus Adapters.                                *
- * Copyright (C) 2004-2005 Emulex.  All rights reserved.           *
+ * Copyright (C) 2004-2006 Emulex.  All rights reserved.           *
  * EMULEX and SLI are trademarks of Emulex.                        *
  * www.emulex.com                                                  *
  * Portions Copyright (C) 2004-2005 Christoph Hellwig              *
 
 struct lpfc_sli2_slim;
 
-#define LPFC_MAX_TARGET         256    /* max targets supported */
-#define LPFC_MAX_DISC_THREADS  64      /* max outstanding discovery els req */
-#define LPFC_MAX_NS_RETRY       3      /* max NameServer retries */
 
+#define LPFC_MAX_TARGET                256     /* max number of targets supported */
+#define LPFC_MAX_DISC_THREADS  64      /* max outstanding discovery els
+                                          requests */
+#define LPFC_MAX_NS_RETRY      3       /* Number of retry attempts to contact
+                                          the NameServer  before giving up. */
 #define LPFC_DFT_HBA_Q_DEPTH   2048    /* max cmds per hba */
 #define LPFC_LC_HBA_Q_DEPTH    1024    /* max cmds per low cost hba */
 #define LPFC_LP101_HBA_Q_DEPTH 128     /* max cmds per low cost hba */
@@ -41,7 +43,6 @@ struct lpfc_sli2_slim;
                             (( (u64)(high)<<16 ) << 16)|( (u64)(low))))
 /* Provide maximum configuration definitions. */
 #define LPFC_DRVR_TIMEOUT      16      /* driver iocb timeout value in sec */
-#define MAX_FCP_TARGET         256     /* max num of FCP targets supported */
 #define FC_MAX_ADPTMSG         64
 
 #define MAX_HBAEVT     32
@@ -121,7 +122,9 @@ struct lpfc_stats {
        uint32_t elsRcvLOGO;
        uint32_t elsRcvPRLO;
        uint32_t elsRcvPRLI;
-       uint32_t elsRcvRRQ;
+       uint32_t elsRcvLIRR;
+       uint32_t elsRcvRPS;
+       uint32_t elsRcvRPL;
        uint32_t elsXmitFLOGI;
        uint32_t elsXmitPLOGI;
        uint32_t elsXmitPRLI;
@@ -167,33 +170,34 @@ struct lpfc_sysfs_mbox {
 };
 
 struct lpfc_hba {
-       struct list_head hba_list;      /* List of hbas/ports */
        struct lpfc_sli sli;
        struct lpfc_sli2_slim *slim2p;
        dma_addr_t slim2p_mapping;
        uint16_t pci_cfg_value;
 
-       struct semaphore hba_can_block;
-       uint32_t hba_state;
-
-#define LPFC_INIT_START           1    /* Initial state after board reset */
-#define LPFC_INIT_MBX_CMDS        2    /* Initialize HBA with mbox commands */
-#define LPFC_LINK_DOWN            3    /* HBA initialized, link is down */
-#define LPFC_LINK_UP              4    /* Link is up  - issue READ_LA */
-#define LPFC_LOCAL_CFG_LINK       5    /* local NPORT Id configured */
-#define LPFC_FLOGI                6    /* FLOGI sent to Fabric */
-#define LPFC_FABRIC_CFG_LINK      7    /* Fabric assigned NPORT Id
+       int32_t hba_state;
+
+#define LPFC_STATE_UNKNOWN        0    /* HBA state is unknown */
+#define LPFC_WARM_START           1    /* HBA state after selective reset */
+#define LPFC_INIT_START           2    /* Initial state after board reset */
+#define LPFC_INIT_MBX_CMDS        3    /* Initialize HBA with mbox commands */
+#define LPFC_LINK_DOWN            4    /* HBA initialized, link is down */
+#define LPFC_LINK_UP              5    /* Link is up  - issue READ_LA */
+#define LPFC_LOCAL_CFG_LINK       6    /* local NPORT Id configured */
+#define LPFC_FLOGI                7    /* FLOGI sent to Fabric */
+#define LPFC_FABRIC_CFG_LINK      8    /* Fabric assigned NPORT Id
                                           configured */
-#define LPFC_NS_REG               8    /* Register with NameServer */
-#define LPFC_NS_QRY                  /* Query NameServer for NPort ID list */
-#define LPFC_BUILD_DISC_LIST      10   /* Build ADISC and PLOGI lists for
+#define LPFC_NS_REG               9    /* Register with NameServer */
+#define LPFC_NS_QRY               10   /* Query NameServer for NPort ID list */
+#define LPFC_BUILD_DISC_LIST      11   /* Build ADISC and PLOGI lists for
                                         * device authentication / discovery */
-#define LPFC_DISC_AUTH            11   /* Processing ADISC list */
-#define LPFC_CLEAR_LA             12   /* authentication cmplt - issue
+#define LPFC_DISC_AUTH            12   /* Processing ADISC list */
+#define LPFC_CLEAR_LA             13   /* authentication cmplt - issue
                                           CLEAR_LA */
 #define LPFC_HBA_READY            32
-#define LPFC_HBA_ERROR            0xff
+#define LPFC_HBA_ERROR            -1
 
+       int32_t stopped;   /* HBA has not been restarted since last ERATT */
        uint8_t fc_linkspeed;   /* Link speed after last READ_LA */
 
        uint32_t fc_eventTag;   /* event tag for link attention */
@@ -245,6 +249,7 @@ struct lpfc_hba {
 #define FC_SCSI_SCAN_TMO        0x4000 /* scsi scan timer running */
 #define FC_ABORT_DISCOVERY      0x8000 /* we want to abort discovery */
 #define FC_NDISC_ACTIVE         0x10000        /* NPort discovery active */
+#define FC_BYPASSED_MODE        0x20000        /* NPort is in bypassed mode */
 
        uint32_t fc_topology;   /* link topology, from LINK INIT */
 
@@ -280,6 +285,7 @@ struct lpfc_hba {
        uint32_t cfg_log_verbose;
        uint32_t cfg_lun_queue_depth;
        uint32_t cfg_nodev_tmo;
+       uint32_t cfg_devloss_tmo;
        uint32_t cfg_hba_queue_depth;
        uint32_t cfg_fcp_class;
        uint32_t cfg_use_adisc;
@@ -289,14 +295,21 @@ struct lpfc_hba {
        uint32_t cfg_link_speed;
        uint32_t cfg_cr_delay;
        uint32_t cfg_cr_count;
+       uint32_t cfg_multi_ring_support;
+       uint32_t cfg_multi_ring_rctl;
+       uint32_t cfg_multi_ring_type;
        uint32_t cfg_fdmi_on;
-       uint32_t cfg_fcp_bind_method;
        uint32_t cfg_discovery_threads;
        uint32_t cfg_max_luns;
        uint32_t cfg_poll;
        uint32_t cfg_poll_tmo;
+       uint32_t cfg_use_msi;
        uint32_t cfg_sg_seg_cnt;
        uint32_t cfg_sg_dma_buf_size;
+       uint64_t cfg_soft_wwnn;
+       uint64_t cfg_soft_wwpn;
+
+       uint32_t dev_loss_tmo_changed;
 
        lpfc_vpd_t vpd;         /* vital product data */
 
@@ -346,6 +359,8 @@ struct lpfc_hba {
 #define VPD_PORT            0x8         /* valid vpd port data */
 #define VPD_MASK            0xf         /* mask for any vpd data */
 
+       uint8_t soft_wwn_enable;
+
        struct timer_list fcp_poll_timer;
        struct timer_list els_tmofunc;
 
@@ -386,3 +401,5 @@ struct rnidrsp {
        struct list_head list;
        uint32_t data;
 };
+
+#define FC_REG_DUMP_EVENT      0x10    /* Register for Dump events */