aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/usb
diff options
context:
space:
mode:
authorhayeswang <hayeswang@realtek.com>2014-02-18 08:48:59 -0500
committerDavid S. Miller <davem@davemloft.net>2014-02-18 16:40:00 -0500
commit00a5e360c54ada2fbd58bacbb1c1fd79d2fde80d (patch)
tree8289abbe226289d5a6af84da6349f9bc38592dd5 /drivers/net/usb
parent4349968ad29a9023005e31eca5d971143d127ba8 (diff)
r8152: add three functions
Replace some codes with the following three functions. - rtl_drop_queued_tx - rxdy_gated_en - r8152_power_cut_en Signed-off-by: Hayes Wang <hayeswang@realtek.com> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/net/usb')
-rw-r--r--drivers/net/usb/r8152.c99
1 files changed, 51 insertions, 48 deletions
diff --git a/drivers/net/usb/r8152.c b/drivers/net/usb/r8152.c
index f042a85b84e9..2d5e76159ca7 100644
--- a/drivers/net/usb/r8152.c
+++ b/drivers/net/usb/r8152.c
@@ -1478,6 +1478,17 @@ int r8152_submit_rx(struct r8152 *tp, struct rx_agg *agg, gfp_t mem_flags)
1478 return usb_submit_urb(agg->urb, mem_flags); 1478 return usb_submit_urb(agg->urb, mem_flags);
1479} 1479}
1480 1480
1481static void rtl_drop_queued_tx(struct r8152 *tp)
1482{
1483 struct net_device_stats *stats = &tp->netdev->stats;
1484 struct sk_buff *skb;
1485
1486 while ((skb = skb_dequeue(&tp->tx_queue))) {
1487 dev_kfree_skb(skb);
1488 stats->tx_dropped++;
1489 }
1490}
1491
1481static void rtl8152_tx_timeout(struct net_device *netdev) 1492static void rtl8152_tx_timeout(struct net_device *netdev)
1482{ 1493{
1483 struct r8152 *tp = netdev_priv(netdev); 1494 struct r8152 *tp = netdev_priv(netdev);
@@ -1613,6 +1624,18 @@ static void rtl_set_eee_plus(struct r8152 *tp)
1613 } 1624 }
1614} 1625}
1615 1626
1627static void rxdy_gated_en(struct r8152 *tp, bool enable)
1628{
1629 u32 ocp_data;
1630
1631 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_MISC_1);
1632 if (enable)
1633 ocp_data |= RXDY_GATED_EN;
1634 else
1635 ocp_data &= ~RXDY_GATED_EN;
1636 ocp_write_word(tp, MCU_TYPE_PLA, PLA_MISC_1, ocp_data);
1637}
1638
1616static int rtl_enable(struct r8152 *tp) 1639static int rtl_enable(struct r8152 *tp)
1617{ 1640{
1618 u32 ocp_data; 1641 u32 ocp_data;
@@ -1624,9 +1647,7 @@ static int rtl_enable(struct r8152 *tp)
1624 ocp_data |= CR_RE | CR_TE; 1647 ocp_data |= CR_RE | CR_TE;
1625 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_CR, ocp_data); 1648 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_CR, ocp_data);
1626 1649
1627 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_MISC_1); 1650 rxdy_gated_en(tp, false);
1628 ocp_data &= ~RXDY_GATED_EN;
1629 ocp_write_word(tp, MCU_TYPE_PLA, PLA_MISC_1, ocp_data);
1630 1651
1631 INIT_LIST_HEAD(&tp->rx_done); 1652 INIT_LIST_HEAD(&tp->rx_done);
1632 ret = 0; 1653 ret = 0;
@@ -1681,8 +1702,6 @@ static int rtl8153_enable(struct r8152 *tp)
1681 1702
1682static void rtl8152_disable(struct r8152 *tp) 1703static void rtl8152_disable(struct r8152 *tp)
1683{ 1704{
1684 struct net_device_stats *stats = rtl8152_get_stats(tp->netdev);
1685 struct sk_buff *skb;
1686 u32 ocp_data; 1705 u32 ocp_data;
1687 int i; 1706 int i;
1688 1707
@@ -1690,17 +1709,12 @@ static void rtl8152_disable(struct r8152 *tp)
1690 ocp_data &= ~RCR_ACPT_ALL; 1709 ocp_data &= ~RCR_ACPT_ALL;
1691 ocp_write_dword(tp, MCU_TYPE_PLA, PLA_RCR, ocp_data); 1710 ocp_write_dword(tp, MCU_TYPE_PLA, PLA_RCR, ocp_data);
1692 1711
1693 while ((skb = skb_dequeue(&tp->tx_queue))) { 1712 rtl_drop_queued_tx(tp);
1694 dev_kfree_skb(skb);
1695 stats->tx_dropped++;
1696 }
1697 1713
1698 for (i = 0; i < RTL8152_MAX_TX; i++) 1714 for (i = 0; i < RTL8152_MAX_TX; i++)
1699 usb_kill_urb(tp->tx_info[i].urb); 1715 usb_kill_urb(tp->tx_info[i].urb);
1700 1716
1701 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_MISC_1); 1717 rxdy_gated_en(tp, true);
1702 ocp_data |= RXDY_GATED_EN;
1703 ocp_write_word(tp, MCU_TYPE_PLA, PLA_MISC_1, ocp_data);
1704 1718
1705 for (i = 0; i < 1000; i++) { 1719 for (i = 0; i < 1000; i++) {
1706 ocp_data = ocp_read_byte(tp, MCU_TYPE_PLA, PLA_OOB_CTRL); 1720 ocp_data = ocp_read_byte(tp, MCU_TYPE_PLA, PLA_OOB_CTRL);
@@ -1721,6 +1735,23 @@ static void rtl8152_disable(struct r8152 *tp)
1721 rtl8152_nic_reset(tp); 1735 rtl8152_nic_reset(tp);
1722} 1736}
1723 1737
1738static void r8152_power_cut_en(struct r8152 *tp, bool enable)
1739{
1740 u32 ocp_data;
1741
1742 ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_UPS_CTRL);
1743 if (enable)
1744 ocp_data |= POWER_CUT;
1745 else
1746 ocp_data &= ~POWER_CUT;
1747 ocp_write_word(tp, MCU_TYPE_USB, USB_UPS_CTRL, ocp_data);
1748
1749 ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_PM_CTRL_STATUS);
1750 ocp_data &= ~RESUME_INDICATE;
1751 ocp_write_word(tp, MCU_TYPE_USB, USB_PM_CTRL_STATUS, ocp_data);
1752
1753}
1754
1724static void rtl_clear_bp(struct r8152 *tp) 1755static void rtl_clear_bp(struct r8152 *tp)
1725{ 1756{
1726 ocp_write_dword(tp, MCU_TYPE_PLA, PLA_BP_0, 0); 1757 ocp_write_dword(tp, MCU_TYPE_PLA, PLA_BP_0, 0);
@@ -1783,9 +1814,7 @@ static void r8152b_exit_oob(struct r8152 *tp)
1783 ocp_data &= ~RCR_ACPT_ALL; 1814 ocp_data &= ~RCR_ACPT_ALL;
1784 ocp_write_dword(tp, MCU_TYPE_PLA, PLA_RCR, ocp_data); 1815 ocp_write_dword(tp, MCU_TYPE_PLA, PLA_RCR, ocp_data);
1785 1816
1786 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_MISC_1); 1817 rxdy_gated_en(tp, true);
1787 ocp_data |= RXDY_GATED_EN;
1788 ocp_write_word(tp, MCU_TYPE_PLA, PLA_MISC_1, ocp_data);
1789 1818
1790 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_CRWECR, CRWECR_NORAML); 1819 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_CRWECR, CRWECR_NORAML);
1791 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_CR, 0x00); 1820 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_CR, 0x00);
@@ -1909,9 +1938,7 @@ static void r8152b_enter_oob(struct r8152 *tp)
1909 1938
1910 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_CONFIG5, LAN_WAKE_EN); 1939 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_CONFIG5, LAN_WAKE_EN);
1911 1940
1912 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_MISC_1); 1941 rxdy_gated_en(tp, false);
1913 ocp_data &= ~RXDY_GATED_EN;
1914 ocp_write_word(tp, MCU_TYPE_PLA, PLA_MISC_1, ocp_data);
1915 1942
1916 ocp_data = ocp_read_dword(tp, MCU_TYPE_PLA, PLA_RCR); 1943 ocp_data = ocp_read_dword(tp, MCU_TYPE_PLA, PLA_RCR);
1917 ocp_data |= RCR_APM | RCR_AM | RCR_AB; 1944 ocp_data |= RCR_APM | RCR_AM | RCR_AB;
@@ -2007,10 +2034,7 @@ static void r8153_first_init(struct r8152 *tp)
2007 u32 ocp_data; 2034 u32 ocp_data;
2008 int i; 2035 int i;
2009 2036
2010 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_MISC_1); 2037 rxdy_gated_en(tp, true);
2011 ocp_data |= RXDY_GATED_EN;
2012 ocp_write_word(tp, MCU_TYPE_PLA, PLA_MISC_1, ocp_data);
2013
2014 r8153_teredo_off(tp); 2038 r8153_teredo_off(tp);
2015 2039
2016 ocp_data = ocp_read_dword(tp, MCU_TYPE_PLA, PLA_RCR); 2040 ocp_data = ocp_read_dword(tp, MCU_TYPE_PLA, PLA_RCR);
@@ -2125,9 +2149,7 @@ static void r8153_enter_oob(struct r8152 *tp)
2125 2149
2126 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_CONFIG5, LAN_WAKE_EN); 2150 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_CONFIG5, LAN_WAKE_EN);
2127 2151
2128 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_MISC_1); 2152 rxdy_gated_en(tp, false);
2129 ocp_data &= ~RXDY_GATED_EN;
2130 ocp_write_word(tp, MCU_TYPE_PLA, PLA_MISC_1, ocp_data);
2131 2153
2132 ocp_data = ocp_read_dword(tp, MCU_TYPE_PLA, PLA_RCR); 2154 ocp_data = ocp_read_dword(tp, MCU_TYPE_PLA, PLA_RCR);
2133 ocp_data |= RCR_APM | RCR_AM | RCR_AB; 2155 ocp_data |= RCR_APM | RCR_AM | RCR_AB;
@@ -2231,12 +2253,7 @@ out:
2231 2253
2232static void rtl8152_down(struct r8152 *tp) 2254static void rtl8152_down(struct r8152 *tp)
2233{ 2255{
2234 u32 ocp_data; 2256 r8152_power_cut_en(tp, false);
2235
2236 ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_UPS_CTRL);
2237 ocp_data &= ~POWER_CUT;
2238 ocp_write_word(tp, MCU_TYPE_USB, USB_UPS_CTRL, ocp_data);
2239
2240 r8152b_disable_aldps(tp); 2257 r8152b_disable_aldps(tp);
2241 r8152b_enter_oob(tp); 2258 r8152b_enter_oob(tp);
2242 r8152b_enable_aldps(tp); 2259 r8152b_enable_aldps(tp);
@@ -2399,13 +2416,8 @@ static void r8152b_init(struct r8152 *tp)
2399 2416
2400 r8152b_hw_phy_cfg(tp); 2417 r8152b_hw_phy_cfg(tp);
2401 2418
2402 ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_UPS_CTRL); 2419 r8152_power_cut_en(tp, false);
2403 ocp_data &= ~POWER_CUT;
2404 ocp_write_word(tp, MCU_TYPE_USB, USB_UPS_CTRL, ocp_data);
2405 2420
2406 ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_PM_CTRL_STATUS);
2407 ocp_data &= ~RESUME_INDICATE;
2408 ocp_write_word(tp, MCU_TYPE_USB, USB_PM_CTRL_STATUS, ocp_data);
2409 2421
2410 r8152b_exit_oob(tp); 2422 r8152b_exit_oob(tp);
2411 2423
@@ -2659,17 +2671,8 @@ static void r8152b_get_version(struct r8152 *tp)
2659 2671
2660static void rtl8152_unload(struct r8152 *tp) 2672static void rtl8152_unload(struct r8152 *tp)
2661{ 2673{
2662 u32 ocp_data; 2674 if (tp->version != RTL_VER_01)
2663 2675 r8152_power_cut_en(tp, true);
2664 if (tp->version != RTL_VER_01) {
2665 ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_UPS_CTRL);
2666 ocp_data |= POWER_CUT;
2667 ocp_write_word(tp, MCU_TYPE_USB, USB_UPS_CTRL, ocp_data);
2668 }
2669
2670 ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_PM_CTRL_STATUS);
2671 ocp_data &= ~RESUME_INDICATE;
2672 ocp_write_word(tp, MCU_TYPE_USB, USB_PM_CTRL_STATUS, ocp_data);
2673} 2676}
2674 2677
2675static void rtl8153_unload(struct r8152 *tp) 2678static void rtl8153_unload(struct r8152 *tp)