bna: Brocade 1860 HW Enablement
authorRasesh Mody <rmody@brocade.com>
Tue, 27 Sep 2011 10:39:08 +0000 (10:39 +0000)
committerDavid S. Miller <davem@davemloft.net>
Thu, 29 Sep 2011 23:36:35 +0000 (19:36 -0400)
This patch enables new HW Brocade 1860. Add BFA_CM_NIC capability mask to
bfa_ioc_attr, Sub-System Device ID Info and support for Brocade 1860 device
ID to bfa_ioc.c and bnad.c.

Signed-off-by: Gurunatha Karaje <gkaraje@brocade.com>
Signed-off-by: Rasesh Mody <rmody@brocade.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/brocade/bna/bfa_defs.h
drivers/net/ethernet/brocade/bna/bfa_ioc.c
drivers/net/ethernet/brocade/bna/bfa_ioc.h
drivers/net/ethernet/brocade/bna/bna_hw_defs.h
drivers/net/ethernet/brocade/bna/bnad.c

index f9d4100f919d8be7e94deda837ff68628c598f14..2f12d68021d57d4ee7924cb45746bca5acf6be30 100644 (file)
@@ -193,6 +193,7 @@ struct bfa_ioc_attr {
 enum {
        BFA_CM_HBA      =       0x01,
        BFA_CM_CNA      =       0x02,
+       BFA_CM_NIC      =       0x04,
 };
 
 /**
@@ -271,7 +272,20 @@ enum {
 #define bfa_asic_id_ct(device)                 \
        ((device) == PCI_DEVICE_ID_BROCADE_CT ||        \
         (device) == PCI_DEVICE_ID_BROCADE_CT_FC)
-#define bfa_asic_id_ctc(device) (bfa_asic_id_ct(device))
+#define bfa_asic_id_ct2(device)                        \
+       ((device) == BFA_PCI_DEVICE_ID_CT2)
+#define bfa_asic_id_ctc(device)                        \
+       (bfa_asic_id_ct(device) || bfa_asic_id_ct2(device))
+
+/**
+ * PCI sub-system device and vendor ID information
+ */
+enum {
+       BFA_PCI_FCOE_SSDEVICE_ID        = 0x14,
+       BFA_PCI_CT2_SSID_FCoE           = 0x22,
+       BFA_PCI_CT2_SSID_ETH            = 0x23,
+       BFA_PCI_CT2_SSID_FC             = 0x24,
+};
 
 enum bfa_mode {
        BFA_MODE_HBA            = 1,
index 1e60aa7c6c58bde25e1e7841e2b2549bebc8d270..f89ac7a6569d8a672dd35ebcff9f20fc126fe850 100644 (file)
@@ -1977,6 +1977,29 @@ bfa_nw_ioc_pci_init(struct bfa_ioc *ioc, struct bfa_pcidev *pcidev,
                ioc->ad_cap_bm = BFA_CM_CNA;
                break;
 
+       case BFA_PCI_DEVICE_ID_CT2:
+               ioc->asic_gen = BFI_ASIC_GEN_CT2;
+               if (clscode == BFI_PCIFN_CLASS_FC &&
+                       pcidev->ssid == BFA_PCI_CT2_SSID_FC) {
+                       ioc->asic_mode  = BFI_ASIC_MODE_FC16;
+                       ioc->fcmode = true;
+                       ioc->port_mode = ioc->port_mode_cfg = BFA_MODE_HBA;
+                       ioc->ad_cap_bm = BFA_CM_HBA;
+               } else {
+                       ioc->port0_mode = ioc->port1_mode = BFI_PORT_MODE_ETH;
+                       ioc->asic_mode  = BFI_ASIC_MODE_ETH;
+                       if (pcidev->ssid == BFA_PCI_CT2_SSID_FCoE) {
+                               ioc->port_mode =
+                               ioc->port_mode_cfg = BFA_MODE_CNA;
+                               ioc->ad_cap_bm = BFA_CM_CNA;
+                       } else {
+                               ioc->port_mode =
+                               ioc->port_mode_cfg = BFA_MODE_NIC;
+                               ioc->ad_cap_bm = BFA_CM_NIC;
+                       }
+               }
+               break;
+
        default:
                BUG_ON(1);
        }
index 5899a564839334eed6746fb67befb146363f196f..c3981700488ae716bf6f0ee967064208af633aca 100644 (file)
@@ -35,6 +35,7 @@ struct bfa_pcidev {
        int     pci_slot;
        u8      pci_func;
        u16     device_id;
+       u16     ssid;
        void    __iomem *pci_bar_kva;
 };
 
index dde8a463b8d9828859e1f00ff699de70e05beb41..4c6aab2a953444c568fe56a85772181706206704 100644 (file)
                ct_reg_addr_init((_bna), (_pcidev));                    \
                ct_bit_defn_init((_bna), (_pcidev));                    \
                break;                                                  \
+       case BFA_PCI_DEVICE_ID_CT2:                                     \
+               ct2_reg_addr_init((_bna), (_pcidev));                   \
+               ct2_bit_defn_init((_bna), (_pcidev));                   \
+               break;                                                  \
        }                                                               \
 }
 
index 320f11c76e149e66244b04b940032a21eea75897..d76d7cb0dd0e082a0f25d532f2a9f180cedc60b4 100644 (file)
@@ -3428,7 +3428,14 @@ static DEFINE_PCI_DEVICE_TABLE(bnad_pci_id_table) = {
                        PCI_DEVICE_ID_BROCADE_CT),
                .class = PCI_CLASS_NETWORK_ETHERNET << 8,
                .class_mask =  0xffff00
-       }, {0,  }
+       },
+       {
+               PCI_DEVICE(PCI_VENDOR_ID_BROCADE,
+                       BFA_PCI_DEVICE_ID_CT2),
+               .class = PCI_CLASS_NETWORK_ETHERNET << 8,
+               .class_mask =  0xffff00
+       },
+       {0,  },
 };
 
 MODULE_DEVICE_TABLE(pci, bnad_pci_id_table);