diff options
author | hayeswang <hayeswang@realtek.com> | 2014-02-18 08:48:59 -0500 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2014-02-18 16:40:00 -0500 |
commit | 00a5e360c54ada2fbd58bacbb1c1fd79d2fde80d (patch) | |
tree | 8289abbe226289d5a6af84da6349f9bc38592dd5 /drivers/net/usb | |
parent | 4349968ad29a9023005e31eca5d971143d127ba8 (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.c | 99 |
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 | ||
1481 | static 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 | |||
1481 | static void rtl8152_tx_timeout(struct net_device *netdev) | 1492 | static 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 | ||
1627 | static 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 | |||
1616 | static int rtl_enable(struct r8152 *tp) | 1639 | static 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 | ||
1682 | static void rtl8152_disable(struct r8152 *tp) | 1703 | static 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 | ||
1738 | static 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 | |||
1724 | static void rtl_clear_bp(struct r8152 *tp) | 1755 | static 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 | ||
2232 | static void rtl8152_down(struct r8152 *tp) | 2254 | static 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 | ||
2660 | static void rtl8152_unload(struct r8152 *tp) | 2672 | static 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 | ||
2675 | static void rtl8153_unload(struct r8152 *tp) | 2678 | static void rtl8153_unload(struct r8152 *tp) |