cxgb3: detect mac link faults.
[linux-2.6.git] / drivers / net / cxgb3 / common.h
index 75b5ee6..9ee021e 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2005-2007 Chelsio, Inc. All rights reserved.
+ * Copyright (c) 2005-2008 Chelsio, Inc. All rights reserved.
  *
  * This software is available to you under a choice of one of two
  * licenses.  You may choose to be licensed under the terms of the GNU
@@ -280,6 +280,7 @@ struct mac_stats {
        unsigned long num_toggled; /* # times toggled TxEn due to stuck TX */
        unsigned long num_resets;  /* # times reset due to stuck TX */
 
+       unsigned long link_faults;  /* # detected link faults */
 };
 
 struct tp_mib_stats {
@@ -522,7 +523,20 @@ enum {
        MDIO_DEV_PMA_PMD = 1,
        MDIO_DEV_WIS = 2,
        MDIO_DEV_PCS = 3,
-       MDIO_DEV_XGXS = 4
+       MDIO_DEV_XGXS = 4,
+       MDIO_DEV_ANEG = 7,
+       MDIO_DEV_VEND1 = 30,
+       MDIO_DEV_VEND2 = 31
+};
+
+/* LASI control and status registers */
+enum {
+       RX_ALARM_CTRL = 0x9000,
+       TX_ALARM_CTRL = 0x9001,
+       LASI_CTRL = 0x9002,
+       RX_ALARM_STAT = 0x9003,
+       TX_ALARM_STAT = 0x9004,
+       LASI_STAT = 0x9005
 };
 
 /* PHY loopback direction */
@@ -534,7 +548,19 @@ enum {
 /* PHY interrupt types */
 enum {
        cphy_cause_link_change = 1,
-       cphy_cause_fifo_error = 2
+       cphy_cause_fifo_error = 2,
+       cphy_cause_module_change = 4,
+};
+
+/* PHY module types */
+enum {
+       phy_modtype_none,
+       phy_modtype_sr,
+       phy_modtype_lr,
+       phy_modtype_lrm,
+       phy_modtype_twinax,
+       phy_modtype_twinax_long,
+       phy_modtype_unknown
 };
 
 /* PHY operations */
@@ -559,7 +585,9 @@ struct cphy_ops {
 
 /* A PHY instance */
 struct cphy {
-       int addr;                       /* PHY address */
+       u8 addr;                        /* PHY address */
+       u8 modtype;                     /* PHY module type */
+       short priv;                     /* scratch pad */
        unsigned int caps;              /* PHY capabilities */
        struct adapter *adapter;        /* associated adapter */
        const char *desc;               /* PHY description */
@@ -664,11 +692,18 @@ int t3_mdio_change_bits(struct cphy *phy, int mmd, int reg, unsigned int clear,
                        unsigned int set);
 int t3_phy_reset(struct cphy *phy, int mmd, int wait);
 int t3_phy_advertise(struct cphy *phy, unsigned int advert);
+int t3_phy_advertise_fiber(struct cphy *phy, unsigned int advert);
 int t3_set_phy_speed_duplex(struct cphy *phy, int speed, int duplex);
+int t3_phy_lasi_intr_enable(struct cphy *phy);
+int t3_phy_lasi_intr_disable(struct cphy *phy);
+int t3_phy_lasi_intr_clear(struct cphy *phy);
+int t3_phy_lasi_intr_handler(struct cphy *phy);
 
 void t3_intr_enable(struct adapter *adapter);
 void t3_intr_disable(struct adapter *adapter);
 void t3_intr_clear(struct adapter *adapter);
+void t3_xgm_intr_enable(struct adapter *adapter, int idx);
+void t3_xgm_intr_disable(struct adapter *adapter, int idx);
 void t3_port_intr_enable(struct adapter *adapter, int idx);
 void t3_port_intr_disable(struct adapter *adapter, int idx);
 void t3_port_intr_clear(struct adapter *adapter, int idx);
@@ -676,13 +711,14 @@ int t3_slow_intr_handler(struct adapter *adapter);
 int t3_phy_intr_handler(struct adapter *adapter);
 
 void t3_link_changed(struct adapter *adapter, int port_id);
+void t3_link_fault(struct adapter *adapter, int port_id);
 int t3_link_start(struct cphy *phy, struct cmac *mac, struct link_config *lc);
 const struct adapter_info *t3_get_adapter_info(unsigned int board_id);
 int t3_seeprom_read(struct adapter *adapter, u32 addr, __le32 *data);
 int t3_seeprom_write(struct adapter *adapter, u32 addr, __le32 data);
 int t3_seeprom_wp(struct adapter *adapter, int enable);
 int t3_get_tp_version(struct adapter *adapter, u32 *vers);
-int t3_check_tpsram_version(struct adapter *adapter, int *must_load);
+int t3_check_tpsram_version(struct adapter *adapter);
 int t3_check_tpsram(struct adapter *adapter, const u8 *tp_ram,
                    unsigned int size);
 int t3_set_proto_sram(struct adapter *adap, const u8 *data);
@@ -690,7 +726,7 @@ int t3_read_flash(struct adapter *adapter, unsigned int addr,
                  unsigned int nwords, u32 *data, int byte_oriented);
 int t3_load_fw(struct adapter *adapter, const u8 * fw_data, unsigned int size);
 int t3_get_fw_version(struct adapter *adapter, u32 *vers);
-int t3_check_fw_version(struct adapter *adapter, int *must_load);
+int t3_check_fw_version(struct adapter *adapter);
 int t3_init_hw(struct adapter *adapter, u32 fw_params);
 void mac_prep(struct cmac *mac, struct adapter *adapter, int index);
 void early_hw_init(struct adapter *adapter, const struct adapter_info *ai);
@@ -712,6 +748,8 @@ int t3_mc7_bd_read(struct mc7 *mc7, unsigned int start, unsigned int n,
 
 int t3_mac_reset(struct cmac *mac);
 void t3b_pcs_reset(struct cmac *mac);
+void t3_mac_disable_exact_filters(struct cmac *mac);
+void t3_mac_enable_exact_filters(struct cmac *mac);
 int t3_mac_enable(struct cmac *mac, int which);
 int t3_mac_disable(struct cmac *mac, int which);
 int t3_mac_set_mtu(struct cmac *mac, unsigned int mtu);
@@ -777,6 +815,8 @@ int t3_ael1002_phy_prep(struct cphy *phy, struct adapter *adapter,
                        int phy_addr, const struct mdio_ops *mdio_ops);
 int t3_ael1006_phy_prep(struct cphy *phy, struct adapter *adapter,
                        int phy_addr, const struct mdio_ops *mdio_ops);
+int t3_ael2005_phy_prep(struct cphy *phy, struct adapter *adapter,
+                       int phy_addr, const struct mdio_ops *mdio_ops);
 int t3_qt2045_phy_prep(struct cphy *phy, struct adapter *adapter, int phy_addr,
                       const struct mdio_ops *mdio_ops);
 int t3_xaui_direct_phy_prep(struct cphy *phy, struct adapter *adapter,