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 | |
| 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>
| -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) |
