ixgbe: Make return values more direct
[cascardo/linux.git] / drivers / net / ethernet / intel / ixgbe / ixgbe_x540.c
index 188a597..e88305d 100644 (file)
@@ -1,7 +1,7 @@
 /*******************************************************************************
 
   Intel 10 Gigabit PCI Express Linux driver
-  Copyright(c) 1999 - 2013 Intel Corporation.
+  Copyright(c) 1999 - 2014 Intel Corporation.
 
   This program is free software; you can redistribute it and/or modify it
   under the terms and conditions of the GNU General Public License,
@@ -81,7 +81,7 @@ static s32 ixgbe_setup_mac_link_X540(struct ixgbe_hw *hw,
                                     bool autoneg_wait_to_complete)
 {
        return hw->phy.ops.setup_link_speed(hw, speed,
-                                           autoneg_wait_to_complete);
+                                           autoneg_wait_to_complete);
 }
 
 /**
@@ -99,8 +99,8 @@ static s32 ixgbe_reset_hw_X540(struct ixgbe_hw *hw)
 
        /* Call adapter stop to disable tx/rx and clear interrupts */
        status = hw->mac.ops.stop_adapter(hw);
-       if (status != 0)
-               goto reset_hw_out;
+       if (status)
+               return status;
 
        /* flush pending Tx transactions */
        ixgbe_clear_tx_pending(hw);
@@ -155,7 +155,7 @@ mac_reset_top:
        /* Add the SAN MAC address to the RAR only if it's a valid address */
        if (is_valid_ether_addr(hw->mac.san_addr)) {
                hw->mac.ops.set_rar(hw, hw->mac.num_rar_entries - 1,
-                                   hw->mac.san_addr, 0, IXGBE_RAH_AV);
+                                   hw->mac.san_addr, 0, IXGBE_RAH_AV);
 
                /* Save the SAN MAC RAR index */
                hw->mac.san_mac_rar_index = hw->mac.num_rar_entries - 1;
@@ -166,9 +166,8 @@ mac_reset_top:
 
        /* Store the alternative WWNN/WWPN prefix */
        hw->mac.ops.get_wwn_prefix(hw, &hw->mac.wwnn_prefix,
-                                  &hw->mac.wwpn_prefix);
+                                  &hw->mac.wwpn_prefix);
 
-reset_hw_out:
        return status;
 }
 
@@ -182,40 +181,13 @@ reset_hw_out:
  **/
 static s32 ixgbe_start_hw_X540(struct ixgbe_hw *hw)
 {
-       s32 ret_val = 0;
+       s32 ret_val;
 
        ret_val = ixgbe_start_hw_generic(hw);
-       if (ret_val != 0)
-               goto out;
+       if (ret_val)
+               return ret_val;
 
-       ret_val = ixgbe_start_hw_gen2(hw);
-out:
-       return ret_val;
-}
-
-/**
- *  ixgbe_get_supported_physical_layer_X540 - Returns physical layer type
- *  @hw: pointer to hardware structure
- *
- *  Determines physical layer capabilities of the current configuration.
- **/
-static u32 ixgbe_get_supported_physical_layer_X540(struct ixgbe_hw *hw)
-{
-       u32 physical_layer = IXGBE_PHYSICAL_LAYER_UNKNOWN;
-       u16 ext_ability = 0;
-
-       hw->phy.ops.identify(hw);
-
-       hw->phy.ops.read_reg(hw, MDIO_PMA_EXTABLE, MDIO_MMD_PMAPMD,
-                            &ext_ability);
-       if (ext_ability & MDIO_PMA_EXTABLE_10GBT)
-               physical_layer |= IXGBE_PHYSICAL_LAYER_10GBASE_T;
-       if (ext_ability & MDIO_PMA_EXTABLE_1000BT)
-               physical_layer |= IXGBE_PHYSICAL_LAYER_1000BASE_T;
-       if (ext_ability & MDIO_PMA_EXTABLE_100BTX)
-               physical_layer |= IXGBE_PHYSICAL_LAYER_100BASE_TX;
-
-       return physical_layer;
+       return ixgbe_start_hw_gen2(hw);
 }
 
 /**
@@ -237,9 +209,9 @@ static s32 ixgbe_init_eeprom_params_X540(struct ixgbe_hw *hw)
 
                eec = IXGBE_READ_REG(hw, IXGBE_EEC);
                eeprom_size = (u16)((eec & IXGBE_EEC_SIZE) >>
-                                   IXGBE_EEC_SIZE_SHIFT);
+                                   IXGBE_EEC_SIZE_SHIFT);
                eeprom->word_size = 1 << (eeprom_size +
-                                         IXGBE_EEPROM_WORD_SIZE_SHIFT);
+                                         IXGBE_EEPROM_WORD_SIZE_SHIFT);
 
                hw_dbg(hw, "Eeprom params: type = %d, size = %d\n",
                       eeprom->type, eeprom->word_size);
@@ -258,13 +230,12 @@ static s32 ixgbe_init_eeprom_params_X540(struct ixgbe_hw *hw)
  **/
 static s32 ixgbe_read_eerd_X540(struct ixgbe_hw *hw, u16 offset, u16 *data)
 {
-       s32 status = 0;
+       s32 status;
 
-       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;
+       if (hw->mac.ops.acquire_swfw_sync(hw, IXGBE_GSSR_EEP_SM))
+               return IXGBE_ERR_SWFW_SYNC;
+
+       status = ixgbe_read_eerd_generic(hw, offset, data);
 
        hw->mac.ops.release_swfw_sync(hw, IXGBE_GSSR_EEP_SM);
        return status;
@@ -282,14 +253,12 @@ static s32 ixgbe_read_eerd_X540(struct ixgbe_hw *hw, u16 offset, u16 *data)
 static s32 ixgbe_read_eerd_buffer_X540(struct ixgbe_hw *hw,
                                       u16 offset, u16 words, u16 *data)
 {
-       s32 status = 0;
+       s32 status;
 
-       if (hw->mac.ops.acquire_swfw_sync(hw, IXGBE_GSSR_EEP_SM) ==
-           0)
-               status = ixgbe_read_eerd_buffer_generic(hw, offset,
-                                                       words, data);
-       else
-               status = IXGBE_ERR_SWFW_SYNC;
+       if (hw->mac.ops.acquire_swfw_sync(hw, IXGBE_GSSR_EEP_SM))
+               return IXGBE_ERR_SWFW_SYNC;
+
+       status = ixgbe_read_eerd_buffer_generic(hw, offset, words, data);
 
        hw->mac.ops.release_swfw_sync(hw, IXGBE_GSSR_EEP_SM);
        return status;
@@ -305,12 +274,12 @@ static s32 ixgbe_read_eerd_buffer_X540(struct ixgbe_hw *hw,
  **/
 static s32 ixgbe_write_eewr_X540(struct ixgbe_hw *hw, u16 offset, u16 data)
 {
-       s32 status = 0;
+       s32 status;
 
-       if (hw->mac.ops.acquire_swfw_sync(hw, IXGBE_GSSR_EEP_SM) == 0)
-               status = ixgbe_write_eewr_generic(hw, offset, data);
-       else
-               status = IXGBE_ERR_SWFW_SYNC;
+       if (hw->mac.ops.acquire_swfw_sync(hw, IXGBE_GSSR_EEP_SM))
+               return IXGBE_ERR_SWFW_SYNC;
+
+       status = ixgbe_write_eewr_generic(hw, offset, data);
 
        hw->mac.ops.release_swfw_sync(hw, IXGBE_GSSR_EEP_SM);
        return status;
@@ -328,14 +297,12 @@ static s32 ixgbe_write_eewr_X540(struct ixgbe_hw *hw, u16 offset, u16 data)
 static s32 ixgbe_write_eewr_buffer_X540(struct ixgbe_hw *hw,
                                        u16 offset, u16 words, u16 *data)
 {
-       s32 status = 0;
+       s32 status;
 
-       if (hw->mac.ops.acquire_swfw_sync(hw, IXGBE_GSSR_EEP_SM) ==
-           0)
-               status = ixgbe_write_eewr_buffer_generic(hw, offset,
-                                                        words, data);
-       else
-               status = IXGBE_ERR_SWFW_SYNC;
+       if (hw->mac.ops.acquire_swfw_sync(hw, IXGBE_GSSR_EEP_SM))
+               return IXGBE_ERR_SWFW_SYNC;
+
+       status = ixgbe_write_eewr_buffer_generic(hw, offset, words, data);
 
        hw->mac.ops.release_swfw_sync(hw, IXGBE_GSSR_EEP_SM);
        return status;
@@ -430,44 +397,37 @@ static s32 ixgbe_validate_eeprom_checksum_X540(struct ixgbe_hw *hw,
        u16 checksum;
        u16 read_checksum = 0;
 
-       /*
-        * Read the first word from the EEPROM. If this times out or fails, do
+       /* Read the first word from the EEPROM. If this times out or fails, do
         * not continue or we could be in for a very long wait while every
         * EEPROM read fails
         */
        status = hw->eeprom.ops.read(hw, 0, &checksum);
-
-       if (status != 0) {
+       if (status) {
                hw_dbg(hw, "EEPROM read failed\n");
-               goto out;
+               return status;
        }
 
-       if (hw->mac.ops.acquire_swfw_sync(hw, IXGBE_GSSR_EEP_SM) == 0) {
-               checksum = hw->eeprom.ops.calc_checksum(hw);
+       if (hw->mac.ops.acquire_swfw_sync(hw, IXGBE_GSSR_EEP_SM))
+               return IXGBE_ERR_SWFW_SYNC;
 
-               /*
-                * Do not use hw->eeprom.ops.read because we do not want to take
-                * the synchronization semaphores twice here.
-                */
-               ixgbe_read_eerd_generic(hw, IXGBE_EEPROM_CHECKSUM,
-                                       &read_checksum);
+       checksum = hw->eeprom.ops.calc_checksum(hw);
 
-               /*
-                * Verify read checksum from EEPROM is the same as
-                * calculated checksum
-                */
-               if (read_checksum != checksum)
-                       status = IXGBE_ERR_EEPROM_CHECKSUM;
-
-               /* If the user cares, return the calculated checksum */
-               if (checksum_val)
-                       *checksum_val = checksum;
-       } else {
-               status = IXGBE_ERR_SWFW_SYNC;
-       }
+       /* Do not use hw->eeprom.ops.read because we do not want to take
+        * the synchronization semaphores twice here.
+        */
+       status = ixgbe_read_eerd_generic(hw, IXGBE_EEPROM_CHECKSUM,
+                                        &read_checksum);
 
        hw->mac.ops.release_swfw_sync(hw, IXGBE_GSSR_EEP_SM);
-out:
+
+       /* If the user cares, return the calculated checksum */
+       if (checksum_val)
+               *checksum_val = checksum;
+
+       /* Verify read and calculated checksums are the same */
+       if (read_checksum != checksum)
+               return IXGBE_ERR_EEPROM_CHECKSUM;
+
        return status;
 }
 
@@ -484,34 +444,29 @@ static s32 ixgbe_update_eeprom_checksum_X540(struct ixgbe_hw *hw)
        s32 status;
        u16 checksum;
 
-       /*
-        * Read the first word from the EEPROM. If this times out or fails, do
+       /* Read the first word from the EEPROM. If this times out or fails, do
         * not continue or we could be in for a very long wait while every
         * EEPROM read fails
         */
        status = hw->eeprom.ops.read(hw, 0, &checksum);
-
-       if (status != 0)
+       if (status) {
                hw_dbg(hw, "EEPROM read failed\n");
+               return status;
+       }
 
-       if (hw->mac.ops.acquire_swfw_sync(hw, IXGBE_GSSR_EEP_SM) == 0) {
-               checksum = hw->eeprom.ops.calc_checksum(hw);
+       if (hw->mac.ops.acquire_swfw_sync(hw, IXGBE_GSSR_EEP_SM))
+               return  IXGBE_ERR_SWFW_SYNC;
 
-               /*
-                * Do not use hw->eeprom.ops.write because we do not want to
-                * take the synchronization semaphores twice here.
-                */
-               status = ixgbe_write_eewr_generic(hw, IXGBE_EEPROM_CHECKSUM,
-                                                 checksum);
+       checksum = hw->eeprom.ops.calc_checksum(hw);
 
-       if (status == 0)
+       /* Do not use hw->eeprom.ops.write because we do not want to
+        * take the synchronization semaphores twice here.
+        */
+       status = ixgbe_write_eewr_generic(hw, IXGBE_EEPROM_CHECKSUM, checksum);
+       if (!status)
                status = ixgbe_update_flash_X540(hw);
-       else
-               status = IXGBE_ERR_SWFW_SYNC;
-       }
 
        hw->mac.ops.release_swfw_sync(hw, IXGBE_GSSR_EEP_SM);
-
        return status;
 }
 
@@ -525,12 +480,12 @@ static s32 ixgbe_update_eeprom_checksum_X540(struct ixgbe_hw *hw)
 static s32 ixgbe_update_flash_X540(struct ixgbe_hw *hw)
 {
        u32 flup;
-       s32 status = IXGBE_ERR_EEPROM;
+       s32 status;
 
        status = ixgbe_poll_flash_update_done_X540(hw);
        if (status == IXGBE_ERR_EEPROM) {
                hw_dbg(hw, "Flash update time out\n");
-               goto out;
+               return status;
        }
 
        flup = IXGBE_READ_REG(hw, IXGBE_EEC) | IXGBE_EEC_FLUP;
@@ -556,7 +511,7 @@ static s32 ixgbe_update_flash_X540(struct ixgbe_hw *hw)
                else
                        hw_dbg(hw, "Flash update time out\n");
        }
-out:
+
        return status;
 }
 
@@ -571,17 +526,14 @@ static s32 ixgbe_poll_flash_update_done_X540(struct ixgbe_hw *hw)
 {
        u32 i;
        u32 reg;
-       s32 status = IXGBE_ERR_EEPROM;
 
        for (i = 0; i < IXGBE_FLUDONE_ATTEMPTS; i++) {
                reg = IXGBE_READ_REG(hw, IXGBE_EEC);
-               if (reg & IXGBE_EEC_FLUDONE) {
-                       status = 0;
-                       break;
-               }
+               if (reg & IXGBE_EEC_FLUDONE)
+                       return 0;
                udelay(5);
        }
-       return status;
+       return IXGBE_ERR_EEPROM;
 }
 
 /**
@@ -676,47 +628,44 @@ static void ixgbe_release_swfw_sync_X540(struct ixgbe_hw *hw, u16 mask)
 }
 
 /**
- * ixgbe_get_nvm_semaphore - Get hardware semaphore
+ * ixgbe_get_swfw_sync_semaphore - Get hardware semaphore
  * @hw: pointer to hardware structure
  *
  * Sets the hardware semaphores so SW/FW can gain control of shared resources
- **/
+ */
 static s32 ixgbe_get_swfw_sync_semaphore(struct ixgbe_hw *hw)
 {
-       s32 status = IXGBE_ERR_EEPROM;
        u32 timeout = 2000;
        u32 i;
        u32 swsm;
 
        /* Get SMBI software semaphore between device drivers first */
        for (i = 0; i < timeout; i++) {
-               /*
-                * If the SMBI bit is 0 when we read it, then the bit will be
+               /* If the SMBI bit is 0 when we read it, then the bit will be
                 * set and we have the semaphore
                 */
                swsm = IXGBE_READ_REG(hw, IXGBE_SWSM);
-               if (!(swsm & IXGBE_SWSM_SMBI)) {
-                       status = 0;
+               if (!(swsm & IXGBE_SWSM_SMBI))
                        break;
-               }
-               udelay(50);
+               usleep_range(50, 100);
+       }
+
+       if (i == timeout) {
+               hw_dbg(hw,
+                      "Software semaphore SMBI between device drivers not granted.\n");
+               return IXGBE_ERR_EEPROM;
        }
 
        /* Now get the semaphore between SW/FW through the REGSMP bit */
-       if (status) {
-               for (i = 0; i < timeout; i++) {
-                       swsm = IXGBE_READ_REG(hw, IXGBE_SWFW_SYNC);
-                       if (!(swsm & IXGBE_SWFW_REGSMP))
-                               break;
+       for (i = 0; i < timeout; i++) {
+               swsm = IXGBE_READ_REG(hw, IXGBE_SWFW_SYNC);
+               if (!(swsm & IXGBE_SWFW_REGSMP))
+                       return 0;
 
-                       udelay(50);
-               }
-       } else {
-               hw_dbg(hw, "Software semaphore SMBI between device drivers "
-                          "not granted.\n");
+               usleep_range(50, 100);
        }
 
-       return status;
+       return IXGBE_ERR_EEPROM;
 }
 
 /**
@@ -812,8 +761,6 @@ static struct ixgbe_mac_operations mac_ops_X540 = {
        .start_hw               = &ixgbe_start_hw_X540,
        .clear_hw_cntrs         = &ixgbe_clear_hw_cntrs_generic,
        .get_media_type         = &ixgbe_get_media_type_X540,
-       .get_supported_physical_layer =
-                                  &ixgbe_get_supported_physical_layer_X540,
        .enable_rx_dma          = &ixgbe_enable_rx_dma_generic,
        .get_mac_addr           = &ixgbe_get_mac_addr_generic,
        .get_san_mac_addr       = &ixgbe_get_san_mac_addr_generic,