Print this page
4431 igb support for I354
4616 igb has uninitialized kstats

@@ -750,5 +750,78 @@
                 }
         }
 out:
         return ret_val;
 }
+
+/**
+ *  __e1000_access_xmdio_reg - Read/write XMDIO register
+ *  @hw: pointer to the HW structure
+ *  @address: XMDIO address to program
+ *  @dev_addr: device address to program
+ *  @data: pointer to value to read/write from/to the XMDIO address
+ *  @read: boolean flag to indicate read or write
+ **/
+static s32 __e1000_access_xmdio_reg(struct e1000_hw *hw, u16 address,
+                                    u8 dev_addr, u16 *data, bool read)
+{
+        s32 ret_val = E1000_SUCCESS;
+
+        DEBUGFUNC("__e1000_access_xmdio_reg");
+
+        ret_val = hw->phy.ops.write_reg(hw, E1000_MMDAC, dev_addr);
+        if (ret_val)
+                return ret_val;
+
+        ret_val = hw->phy.ops.write_reg(hw, E1000_MMDAAD, address);
+        if (ret_val)
+                return ret_val;
+
+        ret_val = hw->phy.ops.write_reg(hw, E1000_MMDAC, E1000_MMDAC_FUNC_DATA |
+                                                         dev_addr);
+        if (ret_val)
+                return ret_val;
+
+        if (read)
+                ret_val = hw->phy.ops.read_reg(hw, E1000_MMDAAD, data);
+        else
+                ret_val = hw->phy.ops.write_reg(hw, E1000_MMDAAD, *data);
+        if (ret_val)
+                return ret_val;
+
+        /* Recalibrate the device back to 0 */
+        ret_val = hw->phy.ops.write_reg(hw, E1000_MMDAC, 0);
+        if (ret_val)
+                return ret_val;
+
+        return ret_val;
+}
+
+/**
+ *  e1000_read_xmdio_reg - Read XMDIO register
+ *  @hw: pointer to the HW structure
+ *  @addr: XMDIO address to program
+ *  @dev_addr: device address to program
+ *  @data: value to be read from the EMI address
+ **/
+s32 e1000_read_xmdio_reg(struct e1000_hw *hw, u16 addr, u8 dev_addr, u16 *data)
+{
+        DEBUGFUNC("e1000_read_xmdio_reg");
+
+        return __e1000_access_xmdio_reg(hw, addr, dev_addr, data, TRUE);
+}
+
+/**
+ *  e1000_write_xmdio_reg - Write XMDIO register
+ *  @hw: pointer to the HW structure
+ *  @addr: XMDIO address to program
+ *  @dev_addr: device address to program
+ *  @data: value to be written to the XMDIO address
+ **/
+s32 e1000_write_xmdio_reg(struct e1000_hw *hw, u16 addr, u8 dev_addr, u16 data)
+{
+        DEBUGFUNC("e1000_read_xmdio_reg");
+
+        return __e1000_access_xmdio_reg(hw, addr, dev_addr, &data, FALSE);
+}
+
+