• Home
  • Raw
  • Download

Lines Matching refs:self

188 static void smsc_ircc_setup_io(struct smsc_ircc_cb *self, unsigned int fir_base, unsigned int sir_b…
189 static void smsc_ircc_setup_qos(struct smsc_ircc_cb *self);
190 static void smsc_ircc_init_chip(struct smsc_ircc_cb *self);
191 static int __exit smsc_ircc_close(struct smsc_ircc_cb *self);
192 static int smsc_ircc_dma_receive(struct smsc_ircc_cb *self);
193 static void smsc_ircc_dma_receive_complete(struct smsc_ircc_cb *self);
194 static void smsc_ircc_sir_receive(struct smsc_ircc_cb *self);
199 static void smsc_ircc_dma_xmit(struct smsc_ircc_cb *self, int bofs);
200 static void smsc_ircc_dma_xmit_complete(struct smsc_ircc_cb *self);
201 static void smsc_ircc_change_speed(struct smsc_ircc_cb *self, u32 speed);
202 static void smsc_ircc_set_sir_speed(struct smsc_ircc_cb *self, u32 speed);
205 static void smsc_ircc_sir_start(struct smsc_ircc_cb *self);
207 static void smsc_ircc_sir_stop(struct smsc_ircc_cb *self);
209 static void smsc_ircc_sir_write_wakeup(struct smsc_ircc_cb *self);
217 static int smsc_ircc_is_receiving(struct smsc_ircc_cb *self);
218 static void smsc_ircc_probe_transceiver(struct smsc_ircc_cb *self);
219 static void smsc_ircc_set_transceiver_for_speed(struct smsc_ircc_cb *self, u32 speed);
220 static void smsc_ircc_sir_wait_hw_transmitter_finish(struct smsc_ircc_cb *self);
492 struct smsc_ircc_cb *self = netdev_priv(dev); in smsc_ircc_net_xmit() local
494 if (self->io.speed > 115200) in smsc_ircc_net_xmit()
518 struct smsc_ircc_cb *self; in smsc_ircc_open() local
548 self = netdev_priv(dev); in smsc_ircc_open()
549 self->netdev = dev; in smsc_ircc_open()
552 dev->base_addr = self->io.fir_base = fir_base; in smsc_ircc_open()
553 dev->irq = self->io.irq = irq; in smsc_ircc_open()
556 dev_self[dev_count] = self; in smsc_ircc_open()
557 spin_lock_init(&self->lock); in smsc_ircc_open()
559 self->rx_buff.truesize = SMSC_IRCC2_RX_BUFF_TRUESIZE; in smsc_ircc_open()
560 self->tx_buff.truesize = SMSC_IRCC2_TX_BUFF_TRUESIZE; in smsc_ircc_open()
562 self->rx_buff.head = in smsc_ircc_open()
563 dma_zalloc_coherent(NULL, self->rx_buff.truesize, in smsc_ircc_open()
564 &self->rx_buff_dma, GFP_KERNEL); in smsc_ircc_open()
565 if (self->rx_buff.head == NULL) in smsc_ircc_open()
568 self->tx_buff.head = in smsc_ircc_open()
569 dma_zalloc_coherent(NULL, self->tx_buff.truesize, in smsc_ircc_open()
570 &self->tx_buff_dma, GFP_KERNEL); in smsc_ircc_open()
571 if (self->tx_buff.head == NULL) in smsc_ircc_open()
574 self->rx_buff.in_frame = FALSE; in smsc_ircc_open()
575 self->rx_buff.state = OUTSIDE_FRAME; in smsc_ircc_open()
576 self->tx_buff.data = self->tx_buff.head; in smsc_ircc_open()
577 self->rx_buff.data = self->rx_buff.head; in smsc_ircc_open()
579 smsc_ircc_setup_io(self, fir_base, sir_base, dma, irq); in smsc_ircc_open()
580 smsc_ircc_setup_qos(self); in smsc_ircc_open()
581 smsc_ircc_init_chip(self); in smsc_ircc_open()
585 self->transceiver = ircc_transceiver; in smsc_ircc_open()
587 smsc_ircc_probe_transceiver(self); in smsc_ircc_open()
589 err = register_netdev(self->netdev); in smsc_ircc_open()
596 self->pldev = platform_device_register_simple(SMSC_IRCC2_DRIVER_NAME, in smsc_ircc_open()
598 if (IS_ERR(self->pldev)) { in smsc_ircc_open()
599 err = PTR_ERR(self->pldev); in smsc_ircc_open()
602 platform_set_drvdata(self->pldev, self); in smsc_ircc_open()
610 unregister_netdev(self->netdev); in smsc_ircc_open()
613 dma_free_coherent(NULL, self->tx_buff.truesize, in smsc_ircc_open()
614 self->tx_buff.head, self->tx_buff_dma); in smsc_ircc_open()
616 dma_free_coherent(NULL, self->rx_buff.truesize, in smsc_ircc_open()
617 self->rx_buff.head, self->rx_buff_dma); in smsc_ircc_open()
619 free_netdev(self->netdev); in smsc_ircc_open()
687 static void smsc_ircc_setup_io(struct smsc_ircc_cb *self, in smsc_ircc_setup_io() argument
698 self->io.fir_base = fir_base; in smsc_ircc_setup_io()
699 self->io.sir_base = sir_base; in smsc_ircc_setup_io()
700 self->io.fir_ext = SMSC_IRCC2_FIR_CHIP_IO_EXTENT; in smsc_ircc_setup_io()
701 self->io.sir_ext = SMSC_IRCC2_SIR_CHIP_IO_EXTENT; in smsc_ircc_setup_io()
702 self->io.fifo_size = SMSC_IRCC2_FIFO_SIZE; in smsc_ircc_setup_io()
703 self->io.speed = SMSC_IRCC2_C_IRDA_FALLBACK_SPEED; in smsc_ircc_setup_io()
709 self->io.irq = irq; in smsc_ircc_setup_io()
711 self->io.irq = chip_irq; in smsc_ircc_setup_io()
717 self->io.dma = dma; in smsc_ircc_setup_io()
719 self->io.dma = chip_dma; in smsc_ircc_setup_io()
729 static void smsc_ircc_setup_qos(struct smsc_ircc_cb *self) in smsc_ircc_setup_qos() argument
732 irda_init_max_qos_capabilies(&self->qos); in smsc_ircc_setup_qos()
734 self->qos.baud_rate.bits = IR_9600|IR_19200|IR_38400|IR_57600| in smsc_ircc_setup_qos()
737 self->qos.min_turn_time.bits = SMSC_IRCC2_MIN_TURN_TIME; in smsc_ircc_setup_qos()
738 self->qos.window_size.bits = SMSC_IRCC2_WINDOW_SIZE; in smsc_ircc_setup_qos()
739 irda_qos_bits_to_value(&self->qos); in smsc_ircc_setup_qos()
748 static void smsc_ircc_init_chip(struct smsc_ircc_cb *self) in smsc_ircc_init_chip() argument
750 int iobase = self->io.fir_base; in smsc_ircc_init_chip()
776 smsc_ircc_set_sir_speed(self, SMSC_IRCC2_C_IRDA_FALLBACK_SPEED); in smsc_ircc_init_chip()
791 struct smsc_ircc_cb *self; in smsc_ircc_net_ioctl() local
797 self = netdev_priv(dev); in smsc_ircc_net_ioctl()
799 IRDA_ASSERT(self != NULL, return -1;); in smsc_ircc_net_ioctl()
810 spin_lock_irqsave(&self->lock, flags); in smsc_ircc_net_ioctl()
811 smsc_ircc_change_speed(self, irq->ifr_baudrate); in smsc_ircc_net_ioctl()
812 spin_unlock_irqrestore(&self->lock, flags); in smsc_ircc_net_ioctl()
821 irda_device_set_media_busy(self->netdev, TRUE); in smsc_ircc_net_ioctl()
824 irq->ifr_receiving = smsc_ircc_is_receiving(self); in smsc_ircc_net_ioctl()
852 struct smsc_ircc_cb *self = netdev_priv(dev); in smsc_ircc_timeout() local
856 dev->name, self->io.speed); in smsc_ircc_timeout()
857 spin_lock_irqsave(&self->lock, flags); in smsc_ircc_timeout()
858 smsc_ircc_sir_start(self); in smsc_ircc_timeout()
859 smsc_ircc_change_speed(self, self->io.speed); in smsc_ircc_timeout()
862 spin_unlock_irqrestore(&self->lock, flags); in smsc_ircc_timeout()
876 struct smsc_ircc_cb *self; in smsc_ircc_hard_xmit_sir() local
884 self = netdev_priv(dev); in smsc_ircc_hard_xmit_sir()
885 IRDA_ASSERT(self != NULL, return NETDEV_TX_OK;); in smsc_ircc_hard_xmit_sir()
890 spin_lock_irqsave(&self->lock, flags); in smsc_ircc_hard_xmit_sir()
894 if (speed != self->io.speed && speed != -1) { in smsc_ircc_hard_xmit_sir()
906 smsc_ircc_sir_wait_hw_transmitter_finish(self); in smsc_ircc_hard_xmit_sir()
907 smsc_ircc_change_speed(self, speed); in smsc_ircc_hard_xmit_sir()
908 spin_unlock_irqrestore(&self->lock, flags); in smsc_ircc_hard_xmit_sir()
912 self->new_speed = speed; in smsc_ircc_hard_xmit_sir()
916 self->tx_buff.data = self->tx_buff.head; in smsc_ircc_hard_xmit_sir()
919 self->tx_buff.len = async_wrap_skb(skb, self->tx_buff.data, in smsc_ircc_hard_xmit_sir()
920 self->tx_buff.truesize); in smsc_ircc_hard_xmit_sir()
922 dev->stats.tx_bytes += self->tx_buff.len; in smsc_ircc_hard_xmit_sir()
925 outb(UART_IER_THRI, self->io.sir_base + UART_IER); in smsc_ircc_hard_xmit_sir()
927 spin_unlock_irqrestore(&self->lock, flags); in smsc_ircc_hard_xmit_sir()
940 static void smsc_ircc_set_fir_speed(struct smsc_ircc_cb *self, u32 speed) in smsc_ircc_set_fir_speed() argument
944 IRDA_ASSERT(self != NULL, return;); in smsc_ircc_set_fir_speed()
945 fir_base = self->io.fir_base; in smsc_ircc_set_fir_speed()
947 self->io.speed = speed; in smsc_ircc_set_fir_speed()
992 static void smsc_ircc_fir_start(struct smsc_ircc_cb *self) in smsc_ircc_fir_start() argument
999 IRDA_ASSERT(self != NULL, return;); in smsc_ircc_fir_start()
1000 dev = self->netdev; in smsc_ircc_fir_start()
1003 fir_base = self->io.fir_base; in smsc_ircc_fir_start()
1038 static void smsc_ircc_fir_stop(struct smsc_ircc_cb *self) in smsc_ircc_fir_stop() argument
1044 IRDA_ASSERT(self != NULL, return;); in smsc_ircc_fir_stop()
1046 fir_base = self->io.fir_base; in smsc_ircc_fir_stop()
1061 static void smsc_ircc_change_speed(struct smsc_ircc_cb *self, u32 speed) in smsc_ircc_change_speed() argument
1068 IRDA_ASSERT(self != NULL, return;); in smsc_ircc_change_speed()
1069 dev = self->netdev; in smsc_ircc_change_speed()
1071 last_speed_was_sir = self->io.speed <= SMSC_IRCC2_MAX_SIR_SPEED; in smsc_ircc_change_speed()
1076 self->io.speed = speed; in smsc_ircc_change_speed()
1078 smsc_ircc_fir_start(self); in smsc_ircc_change_speed()
1081 if (self->io.speed == 0) in smsc_ircc_change_speed()
1082 smsc_ircc_sir_start(self); in smsc_ircc_change_speed()
1085 if (!last_speed_was_sir) speed = self->io.speed; in smsc_ircc_change_speed()
1088 if (self->io.speed != speed) in smsc_ircc_change_speed()
1089 smsc_ircc_set_transceiver_for_speed(self, speed); in smsc_ircc_change_speed()
1091 self->io.speed = speed; in smsc_ircc_change_speed()
1095 smsc_ircc_fir_stop(self); in smsc_ircc_change_speed()
1096 smsc_ircc_sir_start(self); in smsc_ircc_change_speed()
1098 smsc_ircc_set_sir_speed(self, speed); in smsc_ircc_change_speed()
1102 smsc_ircc_sir_stop(self); in smsc_ircc_change_speed()
1104 smsc_ircc_fir_start(self); in smsc_ircc_change_speed()
1106 smsc_ircc_set_fir_speed(self, speed); in smsc_ircc_change_speed()
1109 self->tx_buff.len = 10; in smsc_ircc_change_speed()
1110 self->tx_buff.data = self->tx_buff.head; in smsc_ircc_change_speed()
1112 smsc_ircc_dma_xmit(self, 4000); in smsc_ircc_change_speed()
1115 smsc_ircc_dma_receive(self); in smsc_ircc_change_speed()
1127 static void smsc_ircc_set_sir_speed(struct smsc_ircc_cb *self, __u32 speed) in smsc_ircc_set_sir_speed() argument
1136 IRDA_ASSERT(self != NULL, return;); in smsc_ircc_set_sir_speed()
1137 iobase = self->io.sir_base; in smsc_ircc_set_sir_speed()
1140 self->io.speed = speed; in smsc_ircc_set_sir_speed()
1154 fcr |= self->io.speed < 38400 ? in smsc_ircc_set_sir_speed()
1182 struct smsc_ircc_cb *self; in smsc_ircc_hard_xmit_fir() local
1188 self = netdev_priv(dev); in smsc_ircc_hard_xmit_fir()
1189 IRDA_ASSERT(self != NULL, return NETDEV_TX_OK;); in smsc_ircc_hard_xmit_fir()
1194 spin_lock_irqsave(&self->lock, flags); in smsc_ircc_hard_xmit_fir()
1198 if (speed != self->io.speed && speed != -1) { in smsc_ircc_hard_xmit_fir()
1204 smsc_ircc_change_speed(self, speed); in smsc_ircc_hard_xmit_fir()
1205 spin_unlock_irqrestore(&self->lock, flags); in smsc_ircc_hard_xmit_fir()
1210 self->new_speed = speed; in smsc_ircc_hard_xmit_fir()
1213 skb_copy_from_linear_data(skb, self->tx_buff.head, skb->len); in smsc_ircc_hard_xmit_fir()
1215 self->tx_buff.len = skb->len; in smsc_ircc_hard_xmit_fir()
1216 self->tx_buff.data = self->tx_buff.head; in smsc_ircc_hard_xmit_fir()
1226 bofs = mtt * (self->io.speed / 1000) / 8000; in smsc_ircc_hard_xmit_fir()
1230 smsc_ircc_dma_xmit(self, bofs); in smsc_ircc_hard_xmit_fir()
1233 smsc_ircc_dma_xmit(self, 0); in smsc_ircc_hard_xmit_fir()
1236 spin_unlock_irqrestore(&self->lock, flags); in smsc_ircc_hard_xmit_fir()
1248 static void smsc_ircc_dma_xmit(struct smsc_ircc_cb *self, int bofs) in smsc_ircc_dma_xmit() argument
1250 int iobase = self->io.fir_base; in smsc_ircc_dma_xmit()
1263 self->io.direction = IO_XMIT; in smsc_ircc_dma_xmit()
1272 outb(self->tx_buff.len >> 8, iobase + IRCC_TX_SIZE_HI); in smsc_ircc_dma_xmit()
1273 outb(self->tx_buff.len & 0xff, iobase + IRCC_TX_SIZE_LO); in smsc_ircc_dma_xmit()
1283 irda_setup_dma(self->io.dma, self->tx_buff_dma, self->tx_buff.len, in smsc_ircc_dma_xmit()
1303 static void smsc_ircc_dma_xmit_complete(struct smsc_ircc_cb *self) in smsc_ircc_dma_xmit_complete() argument
1305 int iobase = self->io.fir_base; in smsc_ircc_dma_xmit_complete()
1320 self->netdev->stats.tx_errors++; in smsc_ircc_dma_xmit_complete()
1321 self->netdev->stats.tx_fifo_errors++; in smsc_ircc_dma_xmit_complete()
1328 self->netdev->stats.tx_packets++; in smsc_ircc_dma_xmit_complete()
1329 self->netdev->stats.tx_bytes += self->tx_buff.len; in smsc_ircc_dma_xmit_complete()
1333 if (self->new_speed) { in smsc_ircc_dma_xmit_complete()
1334 smsc_ircc_change_speed(self, self->new_speed); in smsc_ircc_dma_xmit_complete()
1335 self->new_speed = 0; in smsc_ircc_dma_xmit_complete()
1338 netif_wake_queue(self->netdev); in smsc_ircc_dma_xmit_complete()
1348 static int smsc_ircc_dma_receive(struct smsc_ircc_cb *self) in smsc_ircc_dma_receive() argument
1350 int iobase = self->io.fir_base; in smsc_ircc_dma_receive()
1367 self->io.direction = IO_RECV; in smsc_ircc_dma_receive()
1368 self->rx_buff.data = self->rx_buff.head; in smsc_ircc_dma_receive()
1376 irda_setup_dma(self->io.dma, self->rx_buff_dma, self->rx_buff.truesize, in smsc_ircc_dma_receive()
1403 static void smsc_ircc_dma_receive_complete(struct smsc_ircc_cb *self) in smsc_ircc_dma_receive_complete() argument
1407 int iobase = self->io.fir_base; in smsc_ircc_dma_receive_complete()
1423 get_dma_residue(self->io.dma)); in smsc_ircc_dma_receive_complete()
1425 len = self->rx_buff.truesize - get_dma_residue(self->io.dma); in smsc_ircc_dma_receive_complete()
1429 self->netdev->stats.rx_errors++; in smsc_ircc_dma_receive_complete()
1431 self->netdev->stats.rx_frame_errors++; in smsc_ircc_dma_receive_complete()
1433 self->netdev->stats.rx_crc_errors++; in smsc_ircc_dma_receive_complete()
1435 self->netdev->stats.rx_length_errors++; in smsc_ircc_dma_receive_complete()
1437 self->netdev->stats.rx_length_errors++; in smsc_ircc_dma_receive_complete()
1442 len -= self->io.speed < 4000000 ? 2 : 4; in smsc_ircc_dma_receive_complete()
1459 memcpy(skb_put(skb, len), self->rx_buff.data, len); in smsc_ircc_dma_receive_complete()
1460 self->netdev->stats.rx_packets++; in smsc_ircc_dma_receive_complete()
1461 self->netdev->stats.rx_bytes += len; in smsc_ircc_dma_receive_complete()
1463 skb->dev = self->netdev; in smsc_ircc_dma_receive_complete()
1475 static void smsc_ircc_sir_receive(struct smsc_ircc_cb *self) in smsc_ircc_sir_receive() argument
1480 IRDA_ASSERT(self != NULL, return;); in smsc_ircc_sir_receive()
1482 iobase = self->io.sir_base; in smsc_ircc_sir_receive()
1489 async_unwrap_char(self->netdev, &self->netdev->stats, &self->rx_buff, in smsc_ircc_sir_receive()
1510 struct smsc_ircc_cb *self = netdev_priv(dev); in smsc_ircc_interrupt() local
1515 spin_lock(&self->lock); in smsc_ircc_interrupt()
1518 if (self->io.speed <= SMSC_IRCC2_MAX_SIR_SPEED) { in smsc_ircc_interrupt()
1523 iobase = self->io.fir_base; in smsc_ircc_interrupt()
1539 if (self->io.direction == IO_RECV) in smsc_ircc_interrupt()
1540 smsc_ircc_dma_receive_complete(self); in smsc_ircc_interrupt()
1542 smsc_ircc_dma_xmit_complete(self); in smsc_ircc_interrupt()
1544 smsc_ircc_dma_receive(self); in smsc_ircc_interrupt()
1557 spin_unlock(&self->lock); in smsc_ircc_interrupt()
1569 struct smsc_ircc_cb *self = netdev_priv(dev); in smsc_ircc_interrupt_sir() local
1577 iobase = self->io.sir_base; in smsc_ircc_interrupt_sir()
1595 smsc_ircc_sir_receive(self); in smsc_ircc_interrupt_sir()
1600 smsc_ircc_sir_write_wakeup(self); in smsc_ircc_interrupt_sir()
1626 static int ircc_is_receiving(struct smsc_ircc_cb *self)
1633 IRDA_ASSERT(self != NULL, return FALSE;);
1636 get_dma_residue(self->io.dma));
1638 status = (self->rx_buff.state != OUTSIDE_FRAME);
1644 static int smsc_ircc_request_irq(struct smsc_ircc_cb *self) in smsc_ircc_request_irq() argument
1648 error = request_irq(self->io.irq, smsc_ircc_interrupt, 0, in smsc_ircc_request_irq()
1649 self->netdev->name, self->netdev); in smsc_ircc_request_irq()
1652 __func__, self->io.irq, error); in smsc_ircc_request_irq()
1657 static void smsc_ircc_start_interrupts(struct smsc_ircc_cb *self) in smsc_ircc_start_interrupts() argument
1661 spin_lock_irqsave(&self->lock, flags); in smsc_ircc_start_interrupts()
1663 self->io.speed = 0; in smsc_ircc_start_interrupts()
1664 smsc_ircc_change_speed(self, SMSC_IRCC2_C_IRDA_FALLBACK_SPEED); in smsc_ircc_start_interrupts()
1666 spin_unlock_irqrestore(&self->lock, flags); in smsc_ircc_start_interrupts()
1669 static void smsc_ircc_stop_interrupts(struct smsc_ircc_cb *self) in smsc_ircc_stop_interrupts() argument
1671 int iobase = self->io.fir_base; in smsc_ircc_stop_interrupts()
1674 spin_lock_irqsave(&self->lock, flags); in smsc_ircc_stop_interrupts()
1681 spin_unlock_irqrestore(&self->lock, flags); in smsc_ircc_stop_interrupts()
1693 struct smsc_ircc_cb *self; in smsc_ircc_net_open() local
1699 self = netdev_priv(dev); in smsc_ircc_net_open()
1700 IRDA_ASSERT(self != NULL, return 0;); in smsc_ircc_net_open()
1702 if (self->io.suspended) { in smsc_ircc_net_open()
1707 if (request_irq(self->io.irq, smsc_ircc_interrupt, 0, dev->name, in smsc_ircc_net_open()
1710 __func__, self->io.irq); in smsc_ircc_net_open()
1714 smsc_ircc_start_interrupts(self); in smsc_ircc_net_open()
1718 sprintf(hwname, "SMSC @ 0x%03x", self->io.fir_base); in smsc_ircc_net_open()
1724 self->irlap = irlap_open(dev, &self->qos, hwname); in smsc_ircc_net_open()
1730 if (request_dma(self->io.dma, dev->name)) { in smsc_ircc_net_open()
1734 __func__, self->io.dma); in smsc_ircc_net_open()
1751 struct smsc_ircc_cb *self; in smsc_ircc_net_close() local
1756 self = netdev_priv(dev); in smsc_ircc_net_close()
1757 IRDA_ASSERT(self != NULL, return 0;); in smsc_ircc_net_close()
1763 if (self->irlap) in smsc_ircc_net_close()
1764 irlap_close(self->irlap); in smsc_ircc_net_close()
1765 self->irlap = NULL; in smsc_ircc_net_close()
1767 smsc_ircc_stop_interrupts(self); in smsc_ircc_net_close()
1770 if (!self->io.suspended) in smsc_ircc_net_close()
1771 free_irq(self->io.irq, dev); in smsc_ircc_net_close()
1773 disable_dma(self->io.dma); in smsc_ircc_net_close()
1774 free_dma(self->io.dma); in smsc_ircc_net_close()
1781 struct smsc_ircc_cb *self = platform_get_drvdata(dev); in smsc_ircc_suspend() local
1783 if (!self->io.suspended) { in smsc_ircc_suspend()
1787 if (netif_running(self->netdev)) { in smsc_ircc_suspend()
1788 netif_device_detach(self->netdev); in smsc_ircc_suspend()
1789 smsc_ircc_stop_interrupts(self); in smsc_ircc_suspend()
1790 free_irq(self->io.irq, self->netdev); in smsc_ircc_suspend()
1791 disable_dma(self->io.dma); in smsc_ircc_suspend()
1793 self->io.suspended = 1; in smsc_ircc_suspend()
1802 struct smsc_ircc_cb *self = platform_get_drvdata(dev); in smsc_ircc_resume() local
1804 if (self->io.suspended) { in smsc_ircc_resume()
1808 smsc_ircc_init_chip(self); in smsc_ircc_resume()
1809 if (netif_running(self->netdev)) { in smsc_ircc_resume()
1810 if (smsc_ircc_request_irq(self)) { in smsc_ircc_resume()
1815 unregister_netdevice(self->netdev); in smsc_ircc_resume()
1817 enable_dma(self->io.dma); in smsc_ircc_resume()
1818 smsc_ircc_start_interrupts(self); in smsc_ircc_resume()
1819 netif_device_attach(self->netdev); in smsc_ircc_resume()
1822 self->io.suspended = 0; in smsc_ircc_resume()
1834 static int __exit smsc_ircc_close(struct smsc_ircc_cb *self) in smsc_ircc_close() argument
1838 IRDA_ASSERT(self != NULL, return -1;); in smsc_ircc_close()
1840 platform_device_unregister(self->pldev); in smsc_ircc_close()
1843 unregister_netdev(self->netdev); in smsc_ircc_close()
1845 smsc_ircc_stop_interrupts(self); in smsc_ircc_close()
1849 self->io.fir_base); in smsc_ircc_close()
1851 release_region(self->io.fir_base, self->io.fir_ext); in smsc_ircc_close()
1854 self->io.sir_base); in smsc_ircc_close()
1856 release_region(self->io.sir_base, self->io.sir_ext); in smsc_ircc_close()
1858 if (self->tx_buff.head) in smsc_ircc_close()
1859 dma_free_coherent(NULL, self->tx_buff.truesize, in smsc_ircc_close()
1860 self->tx_buff.head, self->tx_buff_dma); in smsc_ircc_close()
1862 if (self->rx_buff.head) in smsc_ircc_close()
1863 dma_free_coherent(NULL, self->rx_buff.truesize, in smsc_ircc_close()
1864 self->rx_buff.head, self->rx_buff_dma); in smsc_ircc_close()
1866 free_netdev(self->netdev); in smsc_ircc_close()
1894 static void smsc_ircc_sir_start(struct smsc_ircc_cb *self) in smsc_ircc_sir_start() argument
1901 IRDA_ASSERT(self != NULL, return;); in smsc_ircc_sir_start()
1902 dev = self->netdev; in smsc_ircc_sir_start()
1905 fir_base = self->io.fir_base; in smsc_ircc_sir_start()
1906 sir_base = self->io.sir_base; in smsc_ircc_sir_start()
1931 void smsc_ircc_sir_stop(struct smsc_ircc_cb *self) in smsc_ircc_sir_stop() argument
1936 iobase = self->io.sir_base; in smsc_ircc_sir_stop()
1953 static void smsc_ircc_sir_write_wakeup(struct smsc_ircc_cb *self) in smsc_ircc_sir_write_wakeup() argument
1959 IRDA_ASSERT(self != NULL, return;); in smsc_ircc_sir_write_wakeup()
1963 iobase = self->io.sir_base; in smsc_ircc_sir_write_wakeup()
1966 if (self->tx_buff.len > 0) { in smsc_ircc_sir_write_wakeup()
1968 actual = smsc_ircc_sir_write(iobase, self->io.fifo_size, in smsc_ircc_sir_write_wakeup()
1969 self->tx_buff.data, self->tx_buff.len); in smsc_ircc_sir_write_wakeup()
1970 self->tx_buff.data += actual; in smsc_ircc_sir_write_wakeup()
1971 self->tx_buff.len -= actual; in smsc_ircc_sir_write_wakeup()
1981 if (self->new_speed) { in smsc_ircc_sir_write_wakeup()
1983 __func__, self->new_speed); in smsc_ircc_sir_write_wakeup()
1984 smsc_ircc_sir_wait_hw_transmitter_finish(self); in smsc_ircc_sir_write_wakeup()
1985 smsc_ircc_change_speed(self, self->new_speed); in smsc_ircc_sir_write_wakeup()
1986 self->new_speed = 0; in smsc_ircc_sir_write_wakeup()
1989 netif_wake_queue(self->netdev); in smsc_ircc_sir_write_wakeup()
1991 self->netdev->stats.tx_packets++; in smsc_ircc_sir_write_wakeup()
1993 if (self->io.speed <= 115200) { in smsc_ircc_sir_write_wakeup()
1999 fcr |= self->io.speed < 38400 ? in smsc_ircc_sir_write_wakeup()
2041 static int smsc_ircc_is_receiving(struct smsc_ircc_cb *self) in smsc_ircc_is_receiving() argument
2043 return self->rx_buff.state != OUTSIDE_FRAME; in smsc_ircc_is_receiving()
2053 static void smsc_ircc_probe_transceiver(struct smsc_ircc_cb *self) in smsc_ircc_probe_transceiver() argument
2057 IRDA_ASSERT(self != NULL, return;); in smsc_ircc_probe_transceiver()
2060 if (smsc_transceivers[i].probe(self->io.fir_base)) { in smsc_ircc_probe_transceiver()
2063 self->transceiver= i + 1; in smsc_ircc_probe_transceiver()
2070 self->transceiver = SMSC_IRCC2_C_DEFAULT_TRANSCEIVER; in smsc_ircc_probe_transceiver()
2080 static void smsc_ircc_set_transceiver_for_speed(struct smsc_ircc_cb *self, u32 speed) in smsc_ircc_set_transceiver_for_speed() argument
2084 trx = self->transceiver; in smsc_ircc_set_transceiver_for_speed()
2086 smsc_transceivers[trx - 1].set_for_speed(self->io.fir_base, speed); in smsc_ircc_set_transceiver_for_speed()
2112 static void smsc_ircc_sir_wait_hw_transmitter_finish(struct smsc_ircc_cb *self) in smsc_ircc_sir_wait_hw_transmitter_finish() argument
2114 int iobase = self->io.sir_base; in smsc_ircc_sir_wait_hw_transmitter_finish()