aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/irda/pxaficp_ir.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/net/irda/pxaficp_ir.c')
-rw-r--r--drivers/net/irda/pxaficp_ir.c52
1 files changed, 22 insertions, 30 deletions
diff --git a/drivers/net/irda/pxaficp_ir.c b/drivers/net/irda/pxaficp_ir.c
index 004a9aab3a50..31794c2363ec 100644
--- a/drivers/net/irda/pxaficp_ir.c
+++ b/drivers/net/irda/pxaficp_ir.c
@@ -108,7 +108,6 @@ struct pxa_irda {
108 int txdma; 108 int txdma;
109 int rxdma; 109 int rxdma;
110 110
111 struct net_device_stats stats;
112 struct irlap_cb *irlap; 111 struct irlap_cb *irlap;
113 struct qos_info qos; 112 struct qos_info qos;
114 113
@@ -258,14 +257,15 @@ static irqreturn_t pxa_irda_sir_irq(int irq, void *dev_id)
258 data = STRBR; 257 data = STRBR;
259 if (lsr & (LSR_OE | LSR_PE | LSR_FE | LSR_BI)) { 258 if (lsr & (LSR_OE | LSR_PE | LSR_FE | LSR_BI)) {
260 printk(KERN_DEBUG "pxa_ir: sir receiving error\n"); 259 printk(KERN_DEBUG "pxa_ir: sir receiving error\n");
261 si->stats.rx_errors++; 260 dev->stats.rx_errors++;
262 if (lsr & LSR_FE) 261 if (lsr & LSR_FE)
263 si->stats.rx_frame_errors++; 262 dev->stats.rx_frame_errors++;
264 if (lsr & LSR_OE) 263 if (lsr & LSR_OE)
265 si->stats.rx_fifo_errors++; 264 dev->stats.rx_fifo_errors++;
266 } else { 265 } else {
267 si->stats.rx_bytes++; 266 dev->stats.rx_bytes++;
268 async_unwrap_char(dev, &si->stats, &si->rx_buff, data); 267 async_unwrap_char(dev, &dev->stats,
268 &si->rx_buff, data);
269 } 269 }
270 lsr = STLSR; 270 lsr = STLSR;
271 } 271 }
@@ -277,8 +277,8 @@ static irqreturn_t pxa_irda_sir_irq(int irq, void *dev_id)
277 277
278 case 0x0C: /* Character Timeout Indication */ 278 case 0x0C: /* Character Timeout Indication */
279 do { 279 do {
280 si->stats.rx_bytes++; 280 dev->stats.rx_bytes++;
281 async_unwrap_char(dev, &si->stats, &si->rx_buff, STRBR); 281 async_unwrap_char(dev, &dev->stats, &si->rx_buff, STRBR);
282 } while (STLSR & LSR_DR); 282 } while (STLSR & LSR_DR);
283 si->last_oscr = OSCR; 283 si->last_oscr = OSCR;
284 break; 284 break;
@@ -290,9 +290,8 @@ static irqreturn_t pxa_irda_sir_irq(int irq, void *dev_id)
290 } 290 }
291 291
292 if (si->tx_buff.len == 0) { 292 if (si->tx_buff.len == 0) {
293 si->stats.tx_packets++; 293 dev->stats.tx_packets++;
294 si->stats.tx_bytes += si->tx_buff.data - 294 dev->stats.tx_bytes += si->tx_buff.data - si->tx_buff.head;
295 si->tx_buff.head;
296 295
297 /* We need to ensure that the transmitter has finished. */ 296 /* We need to ensure that the transmitter has finished. */
298 while ((STLSR & LSR_TEMT) == 0) 297 while ((STLSR & LSR_TEMT) == 0)
@@ -343,10 +342,10 @@ static void pxa_irda_fir_dma_tx_irq(int channel, void *data)
343 DCSR(channel) = dcsr & ~DCSR_RUN; 342 DCSR(channel) = dcsr & ~DCSR_RUN;
344 343
345 if (dcsr & DCSR_ENDINTR) { 344 if (dcsr & DCSR_ENDINTR) {
346 si->stats.tx_packets++; 345 dev->stats.tx_packets++;
347 si->stats.tx_bytes += si->dma_tx_buff_len; 346 dev->stats.tx_bytes += si->dma_tx_buff_len;
348 } else { 347 } else {
349 si->stats.tx_errors++; 348 dev->stats.tx_errors++;
350 } 349 }
351 350
352 while (ICSR1 & ICSR1_TBY) 351 while (ICSR1 & ICSR1_TBY)
@@ -392,14 +391,14 @@ static void pxa_irda_fir_irq_eif(struct pxa_irda *si, struct net_device *dev, in
392 data = ICDR; 391 data = ICDR;
393 392
394 if (stat & (ICSR1_CRE | ICSR1_ROR)) { 393 if (stat & (ICSR1_CRE | ICSR1_ROR)) {
395 si->stats.rx_errors++; 394 dev->stats.rx_errors++;
396 if (stat & ICSR1_CRE) { 395 if (stat & ICSR1_CRE) {
397 printk(KERN_DEBUG "pxa_ir: fir receive CRC error\n"); 396 printk(KERN_DEBUG "pxa_ir: fir receive CRC error\n");
398 si->stats.rx_crc_errors++; 397 dev->stats.rx_crc_errors++;
399 } 398 }
400 if (stat & ICSR1_ROR) { 399 if (stat & ICSR1_ROR) {
401 printk(KERN_DEBUG "pxa_ir: fir receive overrun\n"); 400 printk(KERN_DEBUG "pxa_ir: fir receive overrun\n");
402 si->stats.rx_over_errors++; 401 dev->stats.rx_over_errors++;
403 } 402 }
404 } else { 403 } else {
405 si->dma_rx_buff[len++] = data; 404 si->dma_rx_buff[len++] = data;
@@ -415,14 +414,14 @@ static void pxa_irda_fir_irq_eif(struct pxa_irda *si, struct net_device *dev, in
415 414
416 if (icsr0 & ICSR0_FRE) { 415 if (icsr0 & ICSR0_FRE) {
417 printk(KERN_ERR "pxa_ir: dropping erroneous frame\n"); 416 printk(KERN_ERR "pxa_ir: dropping erroneous frame\n");
418 si->stats.rx_dropped++; 417 dev->stats.rx_dropped++;
419 return; 418 return;
420 } 419 }
421 420
422 skb = alloc_skb(len+1,GFP_ATOMIC); 421 skb = alloc_skb(len+1,GFP_ATOMIC);
423 if (!skb) { 422 if (!skb) {
424 printk(KERN_ERR "pxa_ir: fir out of memory for receive skb\n"); 423 printk(KERN_ERR "pxa_ir: fir out of memory for receive skb\n");
425 si->stats.rx_dropped++; 424 dev->stats.rx_dropped++;
426 return; 425 return;
427 } 426 }
428 427
@@ -437,8 +436,8 @@ static void pxa_irda_fir_irq_eif(struct pxa_irda *si, struct net_device *dev, in
437 skb->protocol = htons(ETH_P_IRDA); 436 skb->protocol = htons(ETH_P_IRDA);
438 netif_rx(skb); 437 netif_rx(skb);
439 438
440 si->stats.rx_packets++; 439 dev->stats.rx_packets++;
441 si->stats.rx_bytes += len; 440 dev->stats.rx_bytes += len;
442 } 441 }
443} 442}
444 443
@@ -457,10 +456,10 @@ static irqreturn_t pxa_irda_fir_irq(int irq, void *dev_id)
457 if (icsr0 & (ICSR0_FRE | ICSR0_RAB)) { 456 if (icsr0 & (ICSR0_FRE | ICSR0_RAB)) {
458 if (icsr0 & ICSR0_FRE) { 457 if (icsr0 & ICSR0_FRE) {
459 printk(KERN_DEBUG "pxa_ir: fir receive frame error\n"); 458 printk(KERN_DEBUG "pxa_ir: fir receive frame error\n");
460 si->stats.rx_frame_errors++; 459 dev->stats.rx_frame_errors++;
461 } else { 460 } else {
462 printk(KERN_DEBUG "pxa_ir: fir receive abort\n"); 461 printk(KERN_DEBUG "pxa_ir: fir receive abort\n");
463 si->stats.rx_errors++; 462 dev->stats.rx_errors++;
464 } 463 }
465 ICSR0 = icsr0 & (ICSR0_FRE | ICSR0_RAB); 464 ICSR0 = icsr0 & (ICSR0_FRE | ICSR0_RAB);
466 } 465 }
@@ -589,12 +588,6 @@ static int pxa_irda_ioctl(struct net_device *dev, struct ifreq *ifreq, int cmd)
589 return ret; 588 return ret;
590} 589}
591 590
592static struct net_device_stats *pxa_irda_stats(struct net_device *dev)
593{
594 struct pxa_irda *si = netdev_priv(dev);
595 return &si->stats;
596}
597
598static void pxa_irda_startup(struct pxa_irda *si) 591static void pxa_irda_startup(struct pxa_irda *si)
599{ 592{
600 /* Disable STUART interrupts */ 593 /* Disable STUART interrupts */
@@ -857,7 +850,6 @@ static int pxa_irda_probe(struct platform_device *pdev)
857 dev->open = pxa_irda_start; 850 dev->open = pxa_irda_start;
858 dev->stop = pxa_irda_stop; 851 dev->stop = pxa_irda_stop;
859 dev->do_ioctl = pxa_irda_ioctl; 852 dev->do_ioctl = pxa_irda_ioctl;
860 dev->get_stats = pxa_irda_stats;
861 853
862 irda_init_max_qos_capabilies(&si->qos); 854 irda_init_max_qos_capabilies(&si->qos);
863 855