diff options
Diffstat (limited to 'drivers/net/ns83820.c')
-rw-r--r-- | drivers/net/ns83820.c | 35 |
1 files changed, 20 insertions, 15 deletions
diff --git a/drivers/net/ns83820.c b/drivers/net/ns83820.c index b0127c71a5b6..568daeb3e9d8 100644 --- a/drivers/net/ns83820.c +++ b/drivers/net/ns83820.c | |||
@@ -414,10 +414,10 @@ struct rx_info { | |||
414 | 414 | ||
415 | struct sk_buff *skbs[NR_RX_DESC]; | 415 | struct sk_buff *skbs[NR_RX_DESC]; |
416 | 416 | ||
417 | u32 *next_rx_desc; | 417 | __le32 *next_rx_desc; |
418 | u16 next_rx, next_empty; | 418 | u16 next_rx, next_empty; |
419 | 419 | ||
420 | u32 *descs; | 420 | __le32 *descs; |
421 | dma_addr_t phy_descs; | 421 | dma_addr_t phy_descs; |
422 | }; | 422 | }; |
423 | 423 | ||
@@ -427,6 +427,7 @@ struct ns83820 { | |||
427 | u8 __iomem *base; | 427 | u8 __iomem *base; |
428 | 428 | ||
429 | struct pci_dev *pci_dev; | 429 | struct pci_dev *pci_dev; |
430 | struct net_device *ndev; | ||
430 | 431 | ||
431 | #ifdef NS83820_VLAN_ACCEL_SUPPORT | 432 | #ifdef NS83820_VLAN_ACCEL_SUPPORT |
432 | struct vlan_group *vlgrp; | 433 | struct vlan_group *vlgrp; |
@@ -459,7 +460,7 @@ struct ns83820 { | |||
459 | struct sk_buff *tx_skbs[NR_TX_DESC]; | 460 | struct sk_buff *tx_skbs[NR_TX_DESC]; |
460 | 461 | ||
461 | char pad[16] __attribute__((aligned(16))); | 462 | char pad[16] __attribute__((aligned(16))); |
462 | u32 *tx_descs; | 463 | __le32 *tx_descs; |
463 | dma_addr_t tx_phy_descs; | 464 | dma_addr_t tx_phy_descs; |
464 | 465 | ||
465 | struct timer_list tx_watchdog; | 466 | struct timer_list tx_watchdog; |
@@ -533,7 +534,7 @@ static void ns83820_vlan_rx_kill_vid(struct net_device *ndev, unsigned short vid | |||
533 | * conditions, still route realtime traffic with as low jitter as | 534 | * conditions, still route realtime traffic with as low jitter as |
534 | * possible. | 535 | * possible. |
535 | */ | 536 | */ |
536 | static inline void build_rx_desc(struct ns83820 *dev, u32 *desc, dma_addr_t link, dma_addr_t buf, u32 cmdsts, u32 extsts) | 537 | static inline void build_rx_desc(struct ns83820 *dev, __le32 *desc, dma_addr_t link, dma_addr_t buf, u32 cmdsts, u32 extsts) |
537 | { | 538 | { |
538 | desc_addr_set(desc + DESC_LINK, link); | 539 | desc_addr_set(desc + DESC_LINK, link); |
539 | desc_addr_set(desc + DESC_BUFPTR, buf); | 540 | desc_addr_set(desc + DESC_BUFPTR, buf); |
@@ -547,7 +548,7 @@ static inline int ns83820_add_rx_skb(struct ns83820 *dev, struct sk_buff *skb) | |||
547 | { | 548 | { |
548 | unsigned next_empty; | 549 | unsigned next_empty; |
549 | u32 cmdsts; | 550 | u32 cmdsts; |
550 | u32 *sg; | 551 | __le32 *sg; |
551 | dma_addr_t buf; | 552 | dma_addr_t buf; |
552 | 553 | ||
553 | next_empty = dev->rx_info.next_empty; | 554 | next_empty = dev->rx_info.next_empty; |
@@ -631,10 +632,10 @@ static void fastcall rx_refill_atomic(struct net_device *ndev) | |||
631 | } | 632 | } |
632 | 633 | ||
633 | /* REFILL */ | 634 | /* REFILL */ |
634 | static inline void queue_refill(void *_dev) | 635 | static inline void queue_refill(struct work_struct *work) |
635 | { | 636 | { |
636 | struct net_device *ndev = _dev; | 637 | struct ns83820 *dev = container_of(work, struct ns83820, tq_refill); |
637 | struct ns83820 *dev = PRIV(ndev); | 638 | struct net_device *ndev = dev->ndev; |
638 | 639 | ||
639 | rx_refill(ndev, GFP_KERNEL); | 640 | rx_refill(ndev, GFP_KERNEL); |
640 | if (dev->rx_info.up) | 641 | if (dev->rx_info.up) |
@@ -874,7 +875,8 @@ static void fastcall rx_irq(struct net_device *ndev) | |||
874 | struct rx_info *info = &dev->rx_info; | 875 | struct rx_info *info = &dev->rx_info; |
875 | unsigned next_rx; | 876 | unsigned next_rx; |
876 | int rx_rc, len; | 877 | int rx_rc, len; |
877 | u32 cmdsts, *desc; | 878 | u32 cmdsts; |
879 | __le32 *desc; | ||
878 | unsigned long flags; | 880 | unsigned long flags; |
879 | int nr = 0; | 881 | int nr = 0; |
880 | 882 | ||
@@ -1010,7 +1012,8 @@ static inline void kick_tx(struct ns83820 *dev) | |||
1010 | static void do_tx_done(struct net_device *ndev) | 1012 | static void do_tx_done(struct net_device *ndev) |
1011 | { | 1013 | { |
1012 | struct ns83820 *dev = PRIV(ndev); | 1014 | struct ns83820 *dev = PRIV(ndev); |
1013 | u32 cmdsts, tx_done_idx, *desc; | 1015 | u32 cmdsts, tx_done_idx; |
1016 | __le32 *desc; | ||
1014 | 1017 | ||
1015 | dprintk("do_tx_done(%p)\n", ndev); | 1018 | dprintk("do_tx_done(%p)\n", ndev); |
1016 | tx_done_idx = dev->tx_done_idx; | 1019 | tx_done_idx = dev->tx_done_idx; |
@@ -1077,7 +1080,7 @@ static void ns83820_cleanup_tx(struct ns83820 *dev) | |||
1077 | struct sk_buff *skb = dev->tx_skbs[i]; | 1080 | struct sk_buff *skb = dev->tx_skbs[i]; |
1078 | dev->tx_skbs[i] = NULL; | 1081 | dev->tx_skbs[i] = NULL; |
1079 | if (skb) { | 1082 | if (skb) { |
1080 | u32 *desc = dev->tx_descs + (i * DESC_SIZE); | 1083 | __le32 *desc = dev->tx_descs + (i * DESC_SIZE); |
1081 | pci_unmap_single(dev->pci_dev, | 1084 | pci_unmap_single(dev->pci_dev, |
1082 | desc_addr_get(desc + DESC_BUFPTR), | 1085 | desc_addr_get(desc + DESC_BUFPTR), |
1083 | le32_to_cpu(desc[DESC_CMDSTS]) & CMDSTS_LEN_MASK, | 1086 | le32_to_cpu(desc[DESC_CMDSTS]) & CMDSTS_LEN_MASK, |
@@ -1107,7 +1110,7 @@ static int ns83820_hard_start_xmit(struct sk_buff *skb, struct net_device *ndev) | |||
1107 | skb_frag_t *frag; | 1110 | skb_frag_t *frag; |
1108 | int stopped = 0; | 1111 | int stopped = 0; |
1109 | int do_intr = 0; | 1112 | int do_intr = 0; |
1110 | volatile u32 *first_desc; | 1113 | volatile __le32 *first_desc; |
1111 | 1114 | ||
1112 | dprintk("ns83820_hard_start_xmit\n"); | 1115 | dprintk("ns83820_hard_start_xmit\n"); |
1113 | 1116 | ||
@@ -1180,7 +1183,7 @@ again: | |||
1180 | first_desc = dev->tx_descs + (free_idx * DESC_SIZE); | 1183 | first_desc = dev->tx_descs + (free_idx * DESC_SIZE); |
1181 | 1184 | ||
1182 | for (;;) { | 1185 | for (;;) { |
1183 | volatile u32 *desc = dev->tx_descs + (free_idx * DESC_SIZE); | 1186 | volatile __le32 *desc = dev->tx_descs + (free_idx * DESC_SIZE); |
1184 | 1187 | ||
1185 | dprintk("frag[%3u]: %4u @ 0x%08Lx\n", free_idx, len, | 1188 | dprintk("frag[%3u]: %4u @ 0x%08Lx\n", free_idx, len, |
1186 | (unsigned long long)buf); | 1189 | (unsigned long long)buf); |
@@ -1455,7 +1458,8 @@ static int ns83820_stop(struct net_device *ndev) | |||
1455 | static void ns83820_tx_timeout(struct net_device *ndev) | 1458 | static void ns83820_tx_timeout(struct net_device *ndev) |
1456 | { | 1459 | { |
1457 | struct ns83820 *dev = PRIV(ndev); | 1460 | struct ns83820 *dev = PRIV(ndev); |
1458 | u32 tx_done_idx, *desc; | 1461 | u32 tx_done_idx; |
1462 | __le32 *desc; | ||
1459 | unsigned long flags; | 1463 | unsigned long flags; |
1460 | 1464 | ||
1461 | spin_lock_irqsave(&dev->tx_lock, flags); | 1465 | spin_lock_irqsave(&dev->tx_lock, flags); |
@@ -1841,6 +1845,7 @@ static int __devinit ns83820_init_one(struct pci_dev *pci_dev, const struct pci_ | |||
1841 | 1845 | ||
1842 | ndev = alloc_etherdev(sizeof(struct ns83820)); | 1846 | ndev = alloc_etherdev(sizeof(struct ns83820)); |
1843 | dev = PRIV(ndev); | 1847 | dev = PRIV(ndev); |
1848 | dev->ndev = ndev; | ||
1844 | err = -ENOMEM; | 1849 | err = -ENOMEM; |
1845 | if (!dev) | 1850 | if (!dev) |
1846 | goto out; | 1851 | goto out; |
@@ -1853,7 +1858,7 @@ static int __devinit ns83820_init_one(struct pci_dev *pci_dev, const struct pci_ | |||
1853 | SET_MODULE_OWNER(ndev); | 1858 | SET_MODULE_OWNER(ndev); |
1854 | SET_NETDEV_DEV(ndev, &pci_dev->dev); | 1859 | SET_NETDEV_DEV(ndev, &pci_dev->dev); |
1855 | 1860 | ||
1856 | INIT_WORK(&dev->tq_refill, queue_refill, ndev); | 1861 | INIT_WORK(&dev->tq_refill, queue_refill); |
1857 | tasklet_init(&dev->rx_tasklet, rx_action, (unsigned long)ndev); | 1862 | tasklet_init(&dev->rx_tasklet, rx_action, (unsigned long)ndev); |
1858 | 1863 | ||
1859 | err = pci_enable_device(pci_dev); | 1864 | err = pci_enable_device(pci_dev); |