diff options
Diffstat (limited to 'net/atm/lec.c')
-rw-r--r-- | net/atm/lec.c | 44 |
1 files changed, 17 insertions, 27 deletions
diff --git a/net/atm/lec.c b/net/atm/lec.c index e5e301550e8..63ff8b9a85b 100644 --- a/net/atm/lec.c +++ b/net/atm/lec.c | |||
@@ -62,7 +62,6 @@ static unsigned char bridge_ula_lec[] = { 0x01, 0x80, 0xc2, 0x00, 0x00 }; | |||
62 | static int lec_open(struct net_device *dev); | 62 | static int lec_open(struct net_device *dev); |
63 | static int lec_start_xmit(struct sk_buff *skb, struct net_device *dev); | 63 | static int lec_start_xmit(struct sk_buff *skb, struct net_device *dev); |
64 | static int lec_close(struct net_device *dev); | 64 | static int lec_close(struct net_device *dev); |
65 | static struct net_device_stats *lec_get_stats(struct net_device *dev); | ||
66 | static void lec_init(struct net_device *dev); | 65 | static void lec_init(struct net_device *dev); |
67 | static struct lec_arp_table *lec_arp_find(struct lec_priv *priv, | 66 | static struct lec_arp_table *lec_arp_find(struct lec_priv *priv, |
68 | const unsigned char *mac_addr); | 67 | const unsigned char *mac_addr); |
@@ -218,28 +217,28 @@ static unsigned char *get_tr_dst(unsigned char *packet, unsigned char *rdesc) | |||
218 | 217 | ||
219 | static int lec_open(struct net_device *dev) | 218 | static int lec_open(struct net_device *dev) |
220 | { | 219 | { |
221 | struct lec_priv *priv = netdev_priv(dev); | ||
222 | |||
223 | netif_start_queue(dev); | 220 | netif_start_queue(dev); |
224 | memset(&priv->stats, 0, sizeof(struct net_device_stats)); | 221 | memset(&dev->stats, 0, sizeof(struct net_device_stats)); |
225 | 222 | ||
226 | return 0; | 223 | return 0; |
227 | } | 224 | } |
228 | 225 | ||
229 | static __inline__ void | 226 | static void |
230 | lec_send(struct atm_vcc *vcc, struct sk_buff *skb, struct lec_priv *priv) | 227 | lec_send(struct atm_vcc *vcc, struct sk_buff *skb) |
231 | { | 228 | { |
229 | struct net_device *dev = skb->dev; | ||
230 | |||
232 | ATM_SKB(skb)->vcc = vcc; | 231 | ATM_SKB(skb)->vcc = vcc; |
233 | ATM_SKB(skb)->atm_options = vcc->atm_options; | 232 | ATM_SKB(skb)->atm_options = vcc->atm_options; |
234 | 233 | ||
235 | atomic_add(skb->truesize, &sk_atm(vcc)->sk_wmem_alloc); | 234 | atomic_add(skb->truesize, &sk_atm(vcc)->sk_wmem_alloc); |
236 | if (vcc->send(vcc, skb) < 0) { | 235 | if (vcc->send(vcc, skb) < 0) { |
237 | priv->stats.tx_dropped++; | 236 | dev->stats.tx_dropped++; |
238 | return; | 237 | return; |
239 | } | 238 | } |
240 | 239 | ||
241 | priv->stats.tx_packets++; | 240 | dev->stats.tx_packets++; |
242 | priv->stats.tx_bytes += skb->len; | 241 | dev->stats.tx_bytes += skb->len; |
243 | } | 242 | } |
244 | 243 | ||
245 | static void lec_tx_timeout(struct net_device *dev) | 244 | static void lec_tx_timeout(struct net_device *dev) |
@@ -270,7 +269,7 @@ static int lec_start_xmit(struct sk_buff *skb, struct net_device *dev) | |||
270 | pr_debug("lec_start_xmit called\n"); | 269 | pr_debug("lec_start_xmit called\n"); |
271 | if (!priv->lecd) { | 270 | if (!priv->lecd) { |
272 | printk("%s:No lecd attached\n", dev->name); | 271 | printk("%s:No lecd attached\n", dev->name); |
273 | priv->stats.tx_errors++; | 272 | dev->stats.tx_errors++; |
274 | netif_stop_queue(dev); | 273 | netif_stop_queue(dev); |
275 | return -EUNATCH; | 274 | return -EUNATCH; |
276 | } | 275 | } |
@@ -345,7 +344,7 @@ static int lec_start_xmit(struct sk_buff *skb, struct net_device *dev) | |||
345 | GFP_ATOMIC); | 344 | GFP_ATOMIC); |
346 | dev_kfree_skb(skb); | 345 | dev_kfree_skb(skb); |
347 | if (skb2 == NULL) { | 346 | if (skb2 == NULL) { |
348 | priv->stats.tx_dropped++; | 347 | dev->stats.tx_dropped++; |
349 | return 0; | 348 | return 0; |
350 | } | 349 | } |
351 | skb = skb2; | 350 | skb = skb2; |
@@ -380,7 +379,7 @@ static int lec_start_xmit(struct sk_buff *skb, struct net_device *dev) | |||
380 | ("%s:lec_start_xmit: tx queue full or no arp entry, dropping, ", | 379 | ("%s:lec_start_xmit: tx queue full or no arp entry, dropping, ", |
381 | dev->name); | 380 | dev->name); |
382 | pr_debug("MAC address %pM\n", lec_h->h_dest); | 381 | pr_debug("MAC address %pM\n", lec_h->h_dest); |
383 | priv->stats.tx_dropped++; | 382 | dev->stats.tx_dropped++; |
384 | dev_kfree_skb(skb); | 383 | dev_kfree_skb(skb); |
385 | } | 384 | } |
386 | goto out; | 385 | goto out; |
@@ -392,10 +391,10 @@ static int lec_start_xmit(struct sk_buff *skb, struct net_device *dev) | |||
392 | while (entry && (skb2 = skb_dequeue(&entry->tx_wait))) { | 391 | while (entry && (skb2 = skb_dequeue(&entry->tx_wait))) { |
393 | pr_debug("lec.c: emptying tx queue, "); | 392 | pr_debug("lec.c: emptying tx queue, "); |
394 | pr_debug("MAC address %pM\n", lec_h->h_dest); | 393 | pr_debug("MAC address %pM\n", lec_h->h_dest); |
395 | lec_send(vcc, skb2, priv); | 394 | lec_send(vcc, skb2); |
396 | } | 395 | } |
397 | 396 | ||
398 | lec_send(vcc, skb, priv); | 397 | lec_send(vcc, skb); |
399 | 398 | ||
400 | if (!atm_may_send(vcc, 0)) { | 399 | if (!atm_may_send(vcc, 0)) { |
401 | struct lec_vcc_priv *vpriv = LEC_VCC_PRIV(vcc); | 400 | struct lec_vcc_priv *vpriv = LEC_VCC_PRIV(vcc); |
@@ -427,15 +426,6 @@ static int lec_close(struct net_device *dev) | |||
427 | return 0; | 426 | return 0; |
428 | } | 427 | } |
429 | 428 | ||
430 | /* | ||
431 | * Get the current statistics. | ||
432 | * This may be called with the card open or closed. | ||
433 | */ | ||
434 | static struct net_device_stats *lec_get_stats(struct net_device *dev) | ||
435 | { | ||
436 | return &((struct lec_priv *)netdev_priv(dev))->stats; | ||
437 | } | ||
438 | |||
439 | static int lec_atm_send(struct atm_vcc *vcc, struct sk_buff *skb) | 429 | static int lec_atm_send(struct atm_vcc *vcc, struct sk_buff *skb) |
440 | { | 430 | { |
441 | unsigned long flags; | 431 | unsigned long flags; |
@@ -810,8 +800,8 @@ static void lec_push(struct atm_vcc *vcc, struct sk_buff *skb) | |||
810 | else | 800 | else |
811 | #endif | 801 | #endif |
812 | skb->protocol = eth_type_trans(skb, dev); | 802 | skb->protocol = eth_type_trans(skb, dev); |
813 | priv->stats.rx_packets++; | 803 | dev->stats.rx_packets++; |
814 | priv->stats.rx_bytes += skb->len; | 804 | dev->stats.rx_bytes += skb->len; |
815 | memset(ATM_SKB(skb), 0, sizeof(struct atm_skb_data)); | 805 | memset(ATM_SKB(skb), 0, sizeof(struct atm_skb_data)); |
816 | netif_rx(skb); | 806 | netif_rx(skb); |
817 | } | 807 | } |
@@ -1887,7 +1877,7 @@ restart: | |||
1887 | lec_arp_hold(entry); | 1877 | lec_arp_hold(entry); |
1888 | spin_unlock_irqrestore(&priv->lec_arp_lock, flags); | 1878 | spin_unlock_irqrestore(&priv->lec_arp_lock, flags); |
1889 | while ((skb = skb_dequeue(&entry->tx_wait)) != NULL) | 1879 | while ((skb = skb_dequeue(&entry->tx_wait)) != NULL) |
1890 | lec_send(vcc, skb, entry->priv); | 1880 | lec_send(vcc, skb); |
1891 | entry->last_used = jiffies; | 1881 | entry->last_used = jiffies; |
1892 | entry->status = ESI_FORWARD_DIRECT; | 1882 | entry->status = ESI_FORWARD_DIRECT; |
1893 | lec_arp_put(entry); | 1883 | lec_arp_put(entry); |
@@ -2305,7 +2295,7 @@ restart: | |||
2305 | lec_arp_hold(entry); | 2295 | lec_arp_hold(entry); |
2306 | spin_unlock_irqrestore(&priv->lec_arp_lock, flags); | 2296 | spin_unlock_irqrestore(&priv->lec_arp_lock, flags); |
2307 | while ((skb = skb_dequeue(&entry->tx_wait)) != NULL) | 2297 | while ((skb = skb_dequeue(&entry->tx_wait)) != NULL) |
2308 | lec_send(vcc, skb, entry->priv); | 2298 | lec_send(vcc, skb); |
2309 | entry->last_used = jiffies; | 2299 | entry->last_used = jiffies; |
2310 | entry->status = ESI_FORWARD_DIRECT; | 2300 | entry->status = ESI_FORWARD_DIRECT; |
2311 | lec_arp_put(entry); | 2301 | lec_arp_put(entry); |