aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/ethernet/realtek
diff options
context:
space:
mode:
authorFrancois Romieu <romieu@fr.zoreil.com>2012-03-08 03:48:40 -0500
committerFrancois Romieu <romieu@fr.zoreil.com>2012-03-10 16:39:17 -0500
commitdf43ac7831a0e321b6b183b7eb48ae4577207453 (patch)
tree42db9dc6ecd514b8be4ba7e1f33c4706f76a9a79 /drivers/net/ethernet/realtek
parente6b763ea0527f1038752a591e4b45cffacc4bba2 (diff)
r8169: move rtl8169_open after rtl_task it depends on.
Signed-off-by: Francois Romieu <romieu@fr.zoreil.com> Cc: Hayes Wang <hayeswang@realtek.com>
Diffstat (limited to 'drivers/net/ethernet/realtek')
-rw-r--r--drivers/net/ethernet/realtek/r8169.c168
1 files changed, 81 insertions, 87 deletions
diff --git a/drivers/net/ethernet/realtek/r8169.c b/drivers/net/ethernet/realtek/r8169.c
index abb6dead24d9..8d4515ed7946 100644
--- a/drivers/net/ethernet/realtek/r8169.c
+++ b/drivers/net/ethernet/realtek/r8169.c
@@ -775,10 +775,6 @@ MODULE_FIRMWARE(FIRMWARE_8168F_1);
775MODULE_FIRMWARE(FIRMWARE_8168F_2); 775MODULE_FIRMWARE(FIRMWARE_8168F_2);
776 776
777static irqreturn_t rtl8169_interrupt(int irq, void *dev_instance); 777static irqreturn_t rtl8169_interrupt(int irq, void *dev_instance);
778static int rtl8169_init_ring(struct net_device *dev);
779static void rtl_hw_start(struct net_device *dev);
780static void rtl8169_rx_clear(struct rtl8169_private *tp);
781static int rtl8169_poll(struct napi_struct *napi, int budget);
782 778
783static void rtl_lock_work(struct rtl8169_private *tp) 779static void rtl_lock_work(struct rtl8169_private *tp)
784{ 780{
@@ -4033,88 +4029,6 @@ static void rtl_request_firmware(struct rtl8169_private *tp)
4033 rtl_request_uncached_firmware(tp); 4029 rtl_request_uncached_firmware(tp);
4034} 4030}
4035 4031
4036static void rtl_task(struct work_struct *);
4037
4038static int rtl8169_open(struct net_device *dev)
4039{
4040 struct rtl8169_private *tp = netdev_priv(dev);
4041 void __iomem *ioaddr = tp->mmio_addr;
4042 struct pci_dev *pdev = tp->pci_dev;
4043 int retval = -ENOMEM;
4044
4045 pm_runtime_get_sync(&pdev->dev);
4046
4047 /*
4048 * Rx and Tx desscriptors needs 256 bytes alignment.
4049 * dma_alloc_coherent provides more.
4050 */
4051 tp->TxDescArray = dma_alloc_coherent(&pdev->dev, R8169_TX_RING_BYTES,
4052 &tp->TxPhyAddr, GFP_KERNEL);
4053 if (!tp->TxDescArray)
4054 goto err_pm_runtime_put;
4055
4056 tp->RxDescArray = dma_alloc_coherent(&pdev->dev, R8169_RX_RING_BYTES,
4057 &tp->RxPhyAddr, GFP_KERNEL);
4058 if (!tp->RxDescArray)
4059 goto err_free_tx_0;
4060
4061 retval = rtl8169_init_ring(dev);
4062 if (retval < 0)
4063 goto err_free_rx_1;
4064
4065 INIT_WORK(&tp->wk.work, rtl_task);
4066
4067 smp_mb();
4068
4069 rtl_request_firmware(tp);
4070
4071 retval = request_irq(dev->irq, rtl8169_interrupt,
4072 (tp->features & RTL_FEATURE_MSI) ? 0 : IRQF_SHARED,
4073 dev->name, dev);
4074 if (retval < 0)
4075 goto err_release_fw_2;
4076
4077 rtl_lock_work(tp);
4078
4079 set_bit(RTL_FLAG_TASK_ENABLED, tp->wk.flags);
4080
4081 napi_enable(&tp->napi);
4082
4083 rtl8169_init_phy(dev, tp);
4084
4085 __rtl8169_set_features(dev, dev->features);
4086
4087 rtl_pll_power_up(tp);
4088
4089 rtl_hw_start(dev);
4090
4091 netif_start_queue(dev);
4092
4093 rtl_unlock_work(tp);
4094
4095 tp->saved_wolopts = 0;
4096 pm_runtime_put_noidle(&pdev->dev);
4097
4098 rtl8169_check_link_status(dev, tp, ioaddr);
4099out:
4100 return retval;
4101
4102err_release_fw_2:
4103 rtl_release_firmware(tp);
4104 rtl8169_rx_clear(tp);
4105err_free_rx_1:
4106 dma_free_coherent(&pdev->dev, R8169_RX_RING_BYTES, tp->RxDescArray,
4107 tp->RxPhyAddr);
4108 tp->RxDescArray = NULL;
4109err_free_tx_0:
4110 dma_free_coherent(&pdev->dev, R8169_TX_RING_BYTES, tp->TxDescArray,
4111 tp->TxPhyAddr);
4112 tp->TxDescArray = NULL;
4113err_pm_runtime_put:
4114 pm_runtime_put_noidle(&pdev->dev);
4115 goto out;
4116}
4117
4118static void rtl_rx_close(struct rtl8169_private *tp) 4032static void rtl_rx_close(struct rtl8169_private *tp)
4119{ 4033{
4120 void __iomem *ioaddr = tp->mmio_addr; 4034 void __iomem *ioaddr = tp->mmio_addr;
@@ -5806,6 +5720,86 @@ static int rtl8169_close(struct net_device *dev)
5806 return 0; 5720 return 0;
5807} 5721}
5808 5722
5723static int rtl_open(struct net_device *dev)
5724{
5725 struct rtl8169_private *tp = netdev_priv(dev);
5726 void __iomem *ioaddr = tp->mmio_addr;
5727 struct pci_dev *pdev = tp->pci_dev;
5728 int retval = -ENOMEM;
5729
5730 pm_runtime_get_sync(&pdev->dev);
5731
5732 /*
5733 * Rx and Tx desscriptors needs 256 bytes alignment.
5734 * dma_alloc_coherent provides more.
5735 */
5736 tp->TxDescArray = dma_alloc_coherent(&pdev->dev, R8169_TX_RING_BYTES,
5737 &tp->TxPhyAddr, GFP_KERNEL);
5738 if (!tp->TxDescArray)
5739 goto err_pm_runtime_put;
5740
5741 tp->RxDescArray = dma_alloc_coherent(&pdev->dev, R8169_RX_RING_BYTES,
5742 &tp->RxPhyAddr, GFP_KERNEL);
5743 if (!tp->RxDescArray)
5744 goto err_free_tx_0;
5745
5746 retval = rtl8169_init_ring(dev);
5747 if (retval < 0)
5748 goto err_free_rx_1;
5749
5750 INIT_WORK(&tp->wk.work, rtl_task);
5751
5752 smp_mb();
5753
5754 rtl_request_firmware(tp);
5755
5756 retval = request_irq(dev->irq, rtl8169_interrupt,
5757 (tp->features & RTL_FEATURE_MSI) ? 0 : IRQF_SHARED,
5758 dev->name, dev);
5759 if (retval < 0)
5760 goto err_release_fw_2;
5761
5762 rtl_lock_work(tp);
5763
5764 set_bit(RTL_FLAG_TASK_ENABLED, tp->wk.flags);
5765
5766 napi_enable(&tp->napi);
5767
5768 rtl8169_init_phy(dev, tp);
5769
5770 __rtl8169_set_features(dev, dev->features);
5771
5772 rtl_pll_power_up(tp);
5773
5774 rtl_hw_start(dev);
5775
5776 netif_start_queue(dev);
5777
5778 rtl_unlock_work(tp);
5779
5780 tp->saved_wolopts = 0;
5781 pm_runtime_put_noidle(&pdev->dev);
5782
5783 rtl8169_check_link_status(dev, tp, ioaddr);
5784out:
5785 return retval;
5786
5787err_release_fw_2:
5788 rtl_release_firmware(tp);
5789 rtl8169_rx_clear(tp);
5790err_free_rx_1:
5791 dma_free_coherent(&pdev->dev, R8169_RX_RING_BYTES, tp->RxDescArray,
5792 tp->RxPhyAddr);
5793 tp->RxDescArray = NULL;
5794err_free_tx_0:
5795 dma_free_coherent(&pdev->dev, R8169_TX_RING_BYTES, tp->TxDescArray,
5796 tp->TxPhyAddr);
5797 tp->TxDescArray = NULL;
5798err_pm_runtime_put:
5799 pm_runtime_put_noidle(&pdev->dev);
5800 goto out;
5801}
5802
5809static struct rtnl_link_stats64 * 5803static struct rtnl_link_stats64 *
5810rtl8169_get_stats64(struct net_device *dev, struct rtnl_link_stats64 *stats) 5804rtl8169_get_stats64(struct net_device *dev, struct rtnl_link_stats64 *stats)
5811{ 5805{
@@ -6043,7 +6037,7 @@ static void __devexit rtl_remove_one(struct pci_dev *pdev)
6043} 6037}
6044 6038
6045static const struct net_device_ops rtl_netdev_ops = { 6039static const struct net_device_ops rtl_netdev_ops = {
6046 .ndo_open = rtl8169_open, 6040 .ndo_open = rtl_open,
6047 .ndo_stop = rtl8169_close, 6041 .ndo_stop = rtl8169_close,
6048 .ndo_get_stats64 = rtl8169_get_stats64, 6042 .ndo_get_stats64 = rtl8169_get_stats64,
6049 .ndo_start_xmit = rtl8169_start_xmit, 6043 .ndo_start_xmit = rtl8169_start_xmit,