|
@@ -53,11 +53,9 @@ MODULE_LICENSE("GPL");
|
|
|
MODULE_VERSION(ATL1C_DRV_VERSION);
|
|
|
|
|
|
static int atl1c_stop_mac(struct atl1c_hw *hw);
|
|
|
-static void atl1c_enable_rx_ctrl(struct atl1c_hw *hw);
|
|
|
-static void atl1c_enable_tx_ctrl(struct atl1c_hw *hw);
|
|
|
static void atl1c_disable_l0s_l1(struct atl1c_hw *hw);
|
|
|
static void atl1c_set_aspm(struct atl1c_hw *hw, u16 link_speed);
|
|
|
-static void atl1c_setup_mac_ctrl(struct atl1c_adapter *adapter);
|
|
|
+static void atl1c_start_mac(struct atl1c_adapter *adapter);
|
|
|
static void atl1c_clean_rx_irq(struct atl1c_adapter *adapter,
|
|
|
int *work_done, int work_to_do);
|
|
|
static int atl1c_up(struct atl1c_adapter *adapter);
|
|
@@ -276,9 +274,7 @@ static void atl1c_check_link_status(struct atl1c_adapter *adapter)
|
|
|
adapter->link_speed = speed;
|
|
|
adapter->link_duplex = duplex;
|
|
|
atl1c_set_aspm(hw, speed);
|
|
|
- atl1c_enable_tx_ctrl(hw);
|
|
|
- atl1c_enable_rx_ctrl(hw);
|
|
|
- atl1c_setup_mac_ctrl(adapter);
|
|
|
+ atl1c_start_mac(adapter);
|
|
|
if (netif_msg_link(adapter))
|
|
|
dev_info(&pdev->dev,
|
|
|
"%s: %s NIC Link is Up<%d Mbps %s>\n",
|
|
@@ -1132,22 +1128,36 @@ static int atl1c_stop_mac(struct atl1c_hw *hw)
|
|
|
IDLE_STATUS_TXMAC_BUSY | IDLE_STATUS_RXMAC_BUSY);
|
|
|
}
|
|
|
|
|
|
-static void atl1c_enable_rx_ctrl(struct atl1c_hw *hw)
|
|
|
+static void atl1c_start_mac(struct atl1c_adapter *adapter)
|
|
|
{
|
|
|
- u32 data;
|
|
|
-
|
|
|
- AT_READ_REG(hw, REG_RXQ_CTRL, &data);
|
|
|
- data |= RXQ_CTRL_EN;
|
|
|
- AT_WRITE_REG(hw, REG_RXQ_CTRL, data);
|
|
|
-}
|
|
|
-
|
|
|
-static void atl1c_enable_tx_ctrl(struct atl1c_hw *hw)
|
|
|
-{
|
|
|
- u32 data;
|
|
|
+ struct atl1c_hw *hw = &adapter->hw;
|
|
|
+ u32 mac, txq, rxq;
|
|
|
+
|
|
|
+ hw->mac_duplex = adapter->link_duplex == FULL_DUPLEX ? true : false;
|
|
|
+ hw->mac_speed = adapter->link_speed == SPEED_1000 ?
|
|
|
+ atl1c_mac_speed_1000 : atl1c_mac_speed_10_100;
|
|
|
+
|
|
|
+ AT_READ_REG(hw, REG_TXQ_CTRL, &txq);
|
|
|
+ AT_READ_REG(hw, REG_RXQ_CTRL, &rxq);
|
|
|
+ AT_READ_REG(hw, REG_MAC_CTRL, &mac);
|
|
|
+
|
|
|
+ txq |= TXQ_CTRL_EN;
|
|
|
+ rxq |= RXQ_CTRL_EN;
|
|
|
+ mac |= MAC_CTRL_TX_EN | MAC_CTRL_TX_FLOW |
|
|
|
+ MAC_CTRL_RX_EN | MAC_CTRL_RX_FLOW |
|
|
|
+ MAC_CTRL_ADD_CRC | MAC_CTRL_PAD |
|
|
|
+ MAC_CTRL_BC_EN | MAC_CTRL_SINGLE_PAUSE_EN |
|
|
|
+ MAC_CTRL_HASH_ALG_CRC32;
|
|
|
+ if (hw->mac_duplex)
|
|
|
+ mac |= MAC_CTRL_DUPLX;
|
|
|
+ else
|
|
|
+ mac &= ~MAC_CTRL_DUPLX;
|
|
|
+ mac = FIELD_SETX(mac, MAC_CTRL_SPEED, hw->mac_speed);
|
|
|
+ mac = FIELD_SETX(mac, MAC_CTRL_PRMLEN, hw->preamble_len);
|
|
|
|
|
|
- AT_READ_REG(hw, REG_TXQ_CTRL, &data);
|
|
|
- data |= TXQ_CTRL_EN;
|
|
|
- AT_WRITE_REG(hw, REG_TXQ_CTRL, data);
|
|
|
+ AT_WRITE_REG(hw, REG_TXQ_CTRL, txq);
|
|
|
+ AT_WRITE_REG(hw, REG_RXQ_CTRL, rxq);
|
|
|
+ AT_WRITE_REG(hw, REG_MAC_CTRL, mac);
|
|
|
}
|
|
|
|
|
|
/*
|
|
@@ -1296,49 +1306,6 @@ static void atl1c_set_aspm(struct atl1c_hw *hw, u16 link_speed)
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
-static void atl1c_setup_mac_ctrl(struct atl1c_adapter *adapter)
|
|
|
-{
|
|
|
- struct atl1c_hw *hw = &adapter->hw;
|
|
|
- struct net_device *netdev = adapter->netdev;
|
|
|
- u32 mac_ctrl_data;
|
|
|
-
|
|
|
- mac_ctrl_data = MAC_CTRL_TX_EN | MAC_CTRL_RX_EN;
|
|
|
- mac_ctrl_data |= (MAC_CTRL_TX_FLOW | MAC_CTRL_RX_FLOW);
|
|
|
-
|
|
|
- if (adapter->link_duplex == FULL_DUPLEX) {
|
|
|
- hw->mac_duplex = true;
|
|
|
- mac_ctrl_data |= MAC_CTRL_DUPLX;
|
|
|
- }
|
|
|
-
|
|
|
- if (adapter->link_speed == SPEED_1000)
|
|
|
- hw->mac_speed = atl1c_mac_speed_1000;
|
|
|
- else
|
|
|
- hw->mac_speed = atl1c_mac_speed_10_100;
|
|
|
-
|
|
|
- mac_ctrl_data |= (hw->mac_speed & MAC_CTRL_SPEED_MASK) <<
|
|
|
- MAC_CTRL_SPEED_SHIFT;
|
|
|
-
|
|
|
- mac_ctrl_data |= (MAC_CTRL_ADD_CRC | MAC_CTRL_PAD);
|
|
|
- mac_ctrl_data |= ((hw->preamble_len & MAC_CTRL_PRMLEN_MASK) <<
|
|
|
- MAC_CTRL_PRMLEN_SHIFT);
|
|
|
-
|
|
|
- __atl1c_vlan_mode(netdev->features, &mac_ctrl_data);
|
|
|
-
|
|
|
- mac_ctrl_data |= MAC_CTRL_BC_EN;
|
|
|
- if (netdev->flags & IFF_PROMISC)
|
|
|
- mac_ctrl_data |= MAC_CTRL_PROMIS_EN;
|
|
|
- if (netdev->flags & IFF_ALLMULTI)
|
|
|
- mac_ctrl_data |= MAC_CTRL_MC_ALL_EN;
|
|
|
-
|
|
|
- mac_ctrl_data |= MAC_CTRL_SINGLE_PAUSE_EN;
|
|
|
- if (hw->nic_type == athr_l1d || hw->nic_type == athr_l2c_b2 ||
|
|
|
- hw->nic_type == athr_l1d_2) {
|
|
|
- mac_ctrl_data |= MAC_CTRL_SPEED_MODE_SW;
|
|
|
- mac_ctrl_data |= MAC_CTRL_HASH_ALG_CRC32;
|
|
|
- }
|
|
|
- AT_WRITE_REG(hw, REG_MAC_CTRL, mac_ctrl_data);
|
|
|
-}
|
|
|
-
|
|
|
/*
|
|
|
* atl1c_configure - Configure Transmit&Receive Unit after Reset
|
|
|
* @adapter: board private structure
|