ixgbe: add function pointer for semaphore function
authorDon Skidmore <donald.c.skidmore@intel.com>
Fri, 25 Feb 2011 01:58:04 +0000 (01:58 +0000)
committerJeff Kirsher <jeffrey.t.kirsher@intel.com>
Thu, 3 Mar 2011 12:39:37 +0000 (04:39 -0800)
The X540 devices grabs semaphores differently than 82599 and 82598
devices do.  They do however also grab them in allot of the same
functions.  So I'm adding a new MAC operation function pointer to
allow us to use the correct function based on our MAC type.  I'm also
changing all the semaphore calls to use this new function pointer.

Signed-off-by: Don Skidmore <donald.c.skidmore@intel.com>
Tested-by: Stephen Ko <stephen.s.ko@intel.com>
Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
drivers/net/ixgbe/ixgbe_82598.c
drivers/net/ixgbe/ixgbe_82599.c
drivers/net/ixgbe/ixgbe_common.c
drivers/net/ixgbe/ixgbe_phy.c
drivers/net/ixgbe/ixgbe_type.h
drivers/net/ixgbe/ixgbe_x540.c

index 8f6205ef4a97a69f4c6ba9029b0fc9d264c06a4d..2da629a30531be7802d4b0075143fce5b750fa6e 100644 (file)
@@ -1201,6 +1201,8 @@ static struct ixgbe_mac_operations mac_ops_82598 = {
        .clear_vfta             = &ixgbe_clear_vfta_82598,
        .set_vfta               = &ixgbe_set_vfta_82598,
        .fc_enable              = &ixgbe_fc_enable_82598,
+       .acquire_swfw_sync      = &ixgbe_acquire_swfw_sync,
+       .release_swfw_sync      = &ixgbe_release_swfw_sync,
 };
 
 static struct ixgbe_eeprom_operations eeprom_ops_82598 = {
index 3d40e68b1b892964eada928bc14b63f482b6d9a8..8f7c6bd341f6158f8cb8769df55b0188e120946d 100644 (file)
@@ -112,7 +112,8 @@ static s32 ixgbe_setup_sfp_modules_82599(struct ixgbe_hw *hw)
                        goto setup_sfp_out;
 
                /* PHY config will finish before releasing the semaphore */
-               ret_val = ixgbe_acquire_swfw_sync(hw, IXGBE_GSSR_MAC_CSR_SM);
+               ret_val = hw->mac.ops.acquire_swfw_sync(hw,
+                                                       IXGBE_GSSR_MAC_CSR_SM);
                if (ret_val != 0) {
                        ret_val = IXGBE_ERR_SWFW_SYNC;
                        goto setup_sfp_out;
@@ -2044,6 +2045,9 @@ static struct ixgbe_mac_operations mac_ops_82599 = {
        .setup_sfp              = &ixgbe_setup_sfp_modules_82599,
        .set_mac_anti_spoofing  = &ixgbe_set_mac_anti_spoofing,
        .set_vlan_anti_spoofing = &ixgbe_set_vlan_anti_spoofing,
+       .acquire_swfw_sync      = &ixgbe_acquire_swfw_sync,
+       .release_swfw_sync      = &ixgbe_release_swfw_sync,
+
 };
 
 static struct ixgbe_eeprom_operations eeprom_ops_82599 = {
index 33f568cff06031cbfc2dd18bb31fb0c8e9862223..bd14ea4d95705b3a80ef6118dbc3968ad7c122f7 100644 (file)
@@ -745,7 +745,7 @@ static s32 ixgbe_acquire_eeprom(struct ixgbe_hw *hw)
        u32 eec;
        u32 i;
 
-       if (ixgbe_acquire_swfw_sync(hw, IXGBE_GSSR_EEP_SM) != 0)
+       if (hw->mac.ops.acquire_swfw_sync(hw, IXGBE_GSSR_EEP_SM) != 0)
                status = IXGBE_ERR_SWFW_SYNC;
 
        if (status == 0) {
@@ -768,7 +768,7 @@ static s32 ixgbe_acquire_eeprom(struct ixgbe_hw *hw)
                        IXGBE_WRITE_REG(hw, IXGBE_EEC, eec);
                        hw_dbg(hw, "Could not acquire EEPROM grant\n");
 
-                       ixgbe_release_swfw_sync(hw, IXGBE_GSSR_EEP_SM);
+                       hw->mac.ops.release_swfw_sync(hw, IXGBE_GSSR_EEP_SM);
                        status = IXGBE_ERR_EEPROM;
                }
 
index 16b5f499b6b84f0c5adfb912fbbf4fd82f7e9929..f4569e8f375db2f493917d859c3046b06f26b42d 100644 (file)
@@ -205,7 +205,7 @@ s32 ixgbe_read_phy_reg_generic(struct ixgbe_hw *hw, u32 reg_addr,
        else
                gssr = IXGBE_GSSR_PHY0_SM;
 
-       if (ixgbe_acquire_swfw_sync(hw, gssr) != 0)
+       if (hw->mac.ops.acquire_swfw_sync(hw, gssr) != 0)
                status = IXGBE_ERR_SWFW_SYNC;
 
        if (status == 0) {
@@ -277,7 +277,7 @@ s32 ixgbe_read_phy_reg_generic(struct ixgbe_hw *hw, u32 reg_addr,
                        }
                }
 
-               ixgbe_release_swfw_sync(hw, gssr);
+               hw->mac.ops.release_swfw_sync(hw, gssr);
        }
 
        return status;
@@ -303,7 +303,7 @@ s32 ixgbe_write_phy_reg_generic(struct ixgbe_hw *hw, u32 reg_addr,
        else
                gssr = IXGBE_GSSR_PHY0_SM;
 
-       if (ixgbe_acquire_swfw_sync(hw, gssr) != 0)
+       if (hw->mac.ops.acquire_swfw_sync(hw, gssr) != 0)
                status = IXGBE_ERR_SWFW_SYNC;
 
        if (status == 0) {
@@ -370,7 +370,7 @@ s32 ixgbe_write_phy_reg_generic(struct ixgbe_hw *hw, u32 reg_addr,
                        }
                }
 
-               ixgbe_release_swfw_sync(hw, gssr);
+               hw->mac.ops.release_swfw_sync(hw, gssr);
        }
 
        return status;
index 8e0a2130f42d2b3fff6d1812bd171aa91f2d1d4c..e940f23a6441fc85f6856adcf717d32917be47cd 100644 (file)
@@ -2495,6 +2495,8 @@ struct ixgbe_mac_operations {
        s32 (*write_analog_reg8)(struct ixgbe_hw*, u32, u8);
        s32 (*setup_sfp)(struct ixgbe_hw *);
        s32 (*enable_rx_dma)(struct ixgbe_hw *, u32);
+       s32 (*acquire_swfw_sync)(struct ixgbe_hw *, u16);
+       void (*release_swfw_sync)(struct ixgbe_hw *, u16);
 
        /* Link */
        void (*disable_tx_laser)(struct ixgbe_hw *);
index 11cb136c0150de127b4b28b56a009024cdc169b8..eb047736c4cb5ee13fb44682840740d4b4f820f2 100644 (file)
@@ -287,7 +287,7 @@ static s32 ixgbe_read_eerd_X540(struct ixgbe_hw *hw, u16 offset, u16 *data)
 {
        s32 status;
 
-       if (ixgbe_acquire_swfw_sync_X540(hw, IXGBE_GSSR_EEP_SM) == 0)
+       if (hw->mac.ops.acquire_swfw_sync(hw, IXGBE_GSSR_EEP_SM) == 0)
                status = ixgbe_read_eerd_generic(hw, offset, data);
        else
                status = IXGBE_ERR_SWFW_SYNC;
@@ -320,7 +320,7 @@ static s32 ixgbe_write_eewr_X540(struct ixgbe_hw *hw, u16 offset, u16 data)
               (data << IXGBE_EEPROM_RW_REG_DATA) |
               IXGBE_EEPROM_RW_REG_START;
 
-       if (ixgbe_acquire_swfw_sync_X540(hw, IXGBE_GSSR_EEP_SM) == 0) {
+       if (hw->mac.ops.acquire_swfw_sync(hw, IXGBE_GSSR_EEP_SM) == 0) {
                status = ixgbe_poll_eerd_eewr_done(hw, IXGBE_NVM_POLL_WRITE);
                if (status != 0) {
                        hw_dbg(hw, "Eeprom write EEWR timed out\n");
@@ -695,6 +695,8 @@ static struct ixgbe_mac_operations mac_ops_X540 = {
        .setup_sfp              = NULL,
        .set_mac_anti_spoofing  = &ixgbe_set_mac_anti_spoofing,
        .set_vlan_anti_spoofing = &ixgbe_set_vlan_anti_spoofing,
+       .acquire_swfw_sync      = &ixgbe_acquire_swfw_sync_X540,
+       .release_swfw_sync      = &ixgbe_release_swfw_sync_X540,
 };
 
 static struct ixgbe_eeprom_operations eeprom_ops_X540 = {