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);
496 struct smsc_ircc_cb *self = netdev_priv(dev); in smsc_ircc_net_xmit() local
498 if (self->io.speed > 115200) in smsc_ircc_net_xmit()
522 struct smsc_ircc_cb *self; in smsc_ircc_open() local
553 self = netdev_priv(dev); in smsc_ircc_open()
554 self->netdev = dev; in smsc_ircc_open()
557 dev->base_addr = self->io.fir_base = fir_base; in smsc_ircc_open()
558 dev->irq = self->io.irq = irq; in smsc_ircc_open()
561 dev_self[dev_count] = self; in smsc_ircc_open()
562 spin_lock_init(&self->lock); in smsc_ircc_open()
564 self->rx_buff.truesize = SMSC_IRCC2_RX_BUFF_TRUESIZE; in smsc_ircc_open()
565 self->tx_buff.truesize = SMSC_IRCC2_TX_BUFF_TRUESIZE; in smsc_ircc_open()
567 self->rx_buff.head = in smsc_ircc_open()
568 dma_zalloc_coherent(NULL, self->rx_buff.truesize, in smsc_ircc_open()
569 &self->rx_buff_dma, GFP_KERNEL); in smsc_ircc_open()
570 if (self->rx_buff.head == NULL) in smsc_ircc_open()
573 self->tx_buff.head = in smsc_ircc_open()
574 dma_zalloc_coherent(NULL, self->tx_buff.truesize, in smsc_ircc_open()
575 &self->tx_buff_dma, GFP_KERNEL); in smsc_ircc_open()
576 if (self->tx_buff.head == NULL) in smsc_ircc_open()
579 self->rx_buff.in_frame = FALSE; in smsc_ircc_open()
580 self->rx_buff.state = OUTSIDE_FRAME; in smsc_ircc_open()
581 self->tx_buff.data = self->tx_buff.head; in smsc_ircc_open()
582 self->rx_buff.data = self->rx_buff.head; in smsc_ircc_open()
584 smsc_ircc_setup_io(self, fir_base, sir_base, dma, irq); in smsc_ircc_open()
585 smsc_ircc_setup_qos(self); in smsc_ircc_open()
586 smsc_ircc_init_chip(self); in smsc_ircc_open()
590 self->transceiver = ircc_transceiver; in smsc_ircc_open()
592 smsc_ircc_probe_transceiver(self); in smsc_ircc_open()
594 err = register_netdev(self->netdev); in smsc_ircc_open()
601 self->pldev = platform_device_register_simple(SMSC_IRCC2_DRIVER_NAME, in smsc_ircc_open()
603 if (IS_ERR(self->pldev)) { in smsc_ircc_open()
604 err = PTR_ERR(self->pldev); in smsc_ircc_open()
607 platform_set_drvdata(self->pldev, self); in smsc_ircc_open()
615 unregister_netdev(self->netdev); in smsc_ircc_open()
618 dma_free_coherent(NULL, self->tx_buff.truesize, in smsc_ircc_open()
619 self->tx_buff.head, self->tx_buff_dma); in smsc_ircc_open()
621 dma_free_coherent(NULL, self->rx_buff.truesize, in smsc_ircc_open()
622 self->rx_buff.head, self->rx_buff_dma); in smsc_ircc_open()
624 free_netdev(self->netdev); in smsc_ircc_open()
692 static void smsc_ircc_setup_io(struct smsc_ircc_cb *self, in smsc_ircc_setup_io() argument
703 self->io.fir_base = fir_base; in smsc_ircc_setup_io()
704 self->io.sir_base = sir_base; in smsc_ircc_setup_io()
705 self->io.fir_ext = SMSC_IRCC2_FIR_CHIP_IO_EXTENT; in smsc_ircc_setup_io()
706 self->io.sir_ext = SMSC_IRCC2_SIR_CHIP_IO_EXTENT; in smsc_ircc_setup_io()
707 self->io.fifo_size = SMSC_IRCC2_FIFO_SIZE; in smsc_ircc_setup_io()
708 self->io.speed = SMSC_IRCC2_C_IRDA_FALLBACK_SPEED; in smsc_ircc_setup_io()
714 self->io.irq = irq; in smsc_ircc_setup_io()
716 self->io.irq = chip_irq; in smsc_ircc_setup_io()
722 self->io.dma = dma; in smsc_ircc_setup_io()
724 self->io.dma = chip_dma; in smsc_ircc_setup_io()
734 static void smsc_ircc_setup_qos(struct smsc_ircc_cb *self) in smsc_ircc_setup_qos() argument
737 irda_init_max_qos_capabilies(&self->qos); in smsc_ircc_setup_qos()
739 self->qos.baud_rate.bits = IR_9600|IR_19200|IR_38400|IR_57600| in smsc_ircc_setup_qos()
742 self->qos.min_turn_time.bits = SMSC_IRCC2_MIN_TURN_TIME; in smsc_ircc_setup_qos()
743 self->qos.window_size.bits = SMSC_IRCC2_WINDOW_SIZE; in smsc_ircc_setup_qos()
744 irda_qos_bits_to_value(&self->qos); in smsc_ircc_setup_qos()
753 static void smsc_ircc_init_chip(struct smsc_ircc_cb *self) in smsc_ircc_init_chip() argument
755 int iobase = self->io.fir_base; in smsc_ircc_init_chip()
781 smsc_ircc_set_sir_speed(self, SMSC_IRCC2_C_IRDA_FALLBACK_SPEED); in smsc_ircc_init_chip()
796 struct smsc_ircc_cb *self; in smsc_ircc_net_ioctl() local
802 self = netdev_priv(dev); in smsc_ircc_net_ioctl()
804 IRDA_ASSERT(self != NULL, return -1;); in smsc_ircc_net_ioctl()
815 spin_lock_irqsave(&self->lock, flags); in smsc_ircc_net_ioctl()
816 smsc_ircc_change_speed(self, irq->ifr_baudrate); in smsc_ircc_net_ioctl()
817 spin_unlock_irqrestore(&self->lock, flags); in smsc_ircc_net_ioctl()
826 irda_device_set_media_busy(self->netdev, TRUE); in smsc_ircc_net_ioctl()
829 irq->ifr_receiving = smsc_ircc_is_receiving(self); in smsc_ircc_net_ioctl()
857 struct smsc_ircc_cb *self = netdev_priv(dev); in smsc_ircc_timeout() local
861 dev->name, self->io.speed); in smsc_ircc_timeout()
862 spin_lock_irqsave(&self->lock, flags); in smsc_ircc_timeout()
863 smsc_ircc_sir_start(self); in smsc_ircc_timeout()
864 smsc_ircc_change_speed(self, self->io.speed); in smsc_ircc_timeout()
867 spin_unlock_irqrestore(&self->lock, flags); in smsc_ircc_timeout()
881 struct smsc_ircc_cb *self; in smsc_ircc_hard_xmit_sir() local
889 self = netdev_priv(dev); in smsc_ircc_hard_xmit_sir()
890 IRDA_ASSERT(self != NULL, return NETDEV_TX_OK;); in smsc_ircc_hard_xmit_sir()
895 spin_lock_irqsave(&self->lock, flags); in smsc_ircc_hard_xmit_sir()
899 if (speed != self->io.speed && speed != -1) { in smsc_ircc_hard_xmit_sir()
911 smsc_ircc_sir_wait_hw_transmitter_finish(self); in smsc_ircc_hard_xmit_sir()
912 smsc_ircc_change_speed(self, speed); in smsc_ircc_hard_xmit_sir()
913 spin_unlock_irqrestore(&self->lock, flags); in smsc_ircc_hard_xmit_sir()
917 self->new_speed = speed; in smsc_ircc_hard_xmit_sir()
921 self->tx_buff.data = self->tx_buff.head; in smsc_ircc_hard_xmit_sir()
924 self->tx_buff.len = async_wrap_skb(skb, self->tx_buff.data, in smsc_ircc_hard_xmit_sir()
925 self->tx_buff.truesize); in smsc_ircc_hard_xmit_sir()
927 dev->stats.tx_bytes += self->tx_buff.len; in smsc_ircc_hard_xmit_sir()
930 outb(UART_IER_THRI, self->io.sir_base + UART_IER); in smsc_ircc_hard_xmit_sir()
932 spin_unlock_irqrestore(&self->lock, flags); in smsc_ircc_hard_xmit_sir()
945 static void smsc_ircc_set_fir_speed(struct smsc_ircc_cb *self, u32 speed) in smsc_ircc_set_fir_speed() argument
949 IRDA_ASSERT(self != NULL, return;); in smsc_ircc_set_fir_speed()
950 fir_base = self->io.fir_base; in smsc_ircc_set_fir_speed()
952 self->io.speed = speed; in smsc_ircc_set_fir_speed()
997 static void smsc_ircc_fir_start(struct smsc_ircc_cb *self) in smsc_ircc_fir_start() argument
1004 IRDA_ASSERT(self != NULL, return;); in smsc_ircc_fir_start()
1005 dev = self->netdev; in smsc_ircc_fir_start()
1008 fir_base = self->io.fir_base; in smsc_ircc_fir_start()
1043 static void smsc_ircc_fir_stop(struct smsc_ircc_cb *self) in smsc_ircc_fir_stop() argument
1049 IRDA_ASSERT(self != NULL, return;); in smsc_ircc_fir_stop()
1051 fir_base = self->io.fir_base; in smsc_ircc_fir_stop()
1066 static void smsc_ircc_change_speed(struct smsc_ircc_cb *self, u32 speed) in smsc_ircc_change_speed() argument
1073 IRDA_ASSERT(self != NULL, return;); in smsc_ircc_change_speed()
1074 dev = self->netdev; in smsc_ircc_change_speed()
1076 last_speed_was_sir = self->io.speed <= SMSC_IRCC2_MAX_SIR_SPEED; in smsc_ircc_change_speed()
1081 self->io.speed = speed; in smsc_ircc_change_speed()
1083 smsc_ircc_fir_start(self); in smsc_ircc_change_speed()
1086 if (self->io.speed == 0) in smsc_ircc_change_speed()
1087 smsc_ircc_sir_start(self); in smsc_ircc_change_speed()
1090 if (!last_speed_was_sir) speed = self->io.speed; in smsc_ircc_change_speed()
1093 if (self->io.speed != speed) in smsc_ircc_change_speed()
1094 smsc_ircc_set_transceiver_for_speed(self, speed); in smsc_ircc_change_speed()
1096 self->io.speed = speed; in smsc_ircc_change_speed()
1100 smsc_ircc_fir_stop(self); in smsc_ircc_change_speed()
1101 smsc_ircc_sir_start(self); in smsc_ircc_change_speed()
1103 smsc_ircc_set_sir_speed(self, speed); in smsc_ircc_change_speed()
1107 smsc_ircc_sir_stop(self); in smsc_ircc_change_speed()
1109 smsc_ircc_fir_start(self); in smsc_ircc_change_speed()
1111 smsc_ircc_set_fir_speed(self, speed); in smsc_ircc_change_speed()
1114 self->tx_buff.len = 10; in smsc_ircc_change_speed()
1115 self->tx_buff.data = self->tx_buff.head; in smsc_ircc_change_speed()
1117 smsc_ircc_dma_xmit(self, 4000); in smsc_ircc_change_speed()
1120 smsc_ircc_dma_receive(self); in smsc_ircc_change_speed()
1132 static void smsc_ircc_set_sir_speed(struct smsc_ircc_cb *self, __u32 speed) in smsc_ircc_set_sir_speed() argument
1141 IRDA_ASSERT(self != NULL, return;); in smsc_ircc_set_sir_speed()
1142 iobase = self->io.sir_base; in smsc_ircc_set_sir_speed()
1145 self->io.speed = speed; in smsc_ircc_set_sir_speed()
1159 fcr |= self->io.speed < 38400 ? in smsc_ircc_set_sir_speed()
1187 struct smsc_ircc_cb *self; in smsc_ircc_hard_xmit_fir() local
1193 self = netdev_priv(dev); in smsc_ircc_hard_xmit_fir()
1194 IRDA_ASSERT(self != NULL, return NETDEV_TX_OK;); in smsc_ircc_hard_xmit_fir()
1199 spin_lock_irqsave(&self->lock, flags); in smsc_ircc_hard_xmit_fir()
1203 if (speed != self->io.speed && speed != -1) { in smsc_ircc_hard_xmit_fir()
1209 smsc_ircc_change_speed(self, speed); in smsc_ircc_hard_xmit_fir()
1210 spin_unlock_irqrestore(&self->lock, flags); in smsc_ircc_hard_xmit_fir()
1215 self->new_speed = speed; in smsc_ircc_hard_xmit_fir()
1218 skb_copy_from_linear_data(skb, self->tx_buff.head, skb->len); in smsc_ircc_hard_xmit_fir()
1220 self->tx_buff.len = skb->len; in smsc_ircc_hard_xmit_fir()
1221 self->tx_buff.data = self->tx_buff.head; in smsc_ircc_hard_xmit_fir()
1231 bofs = mtt * (self->io.speed / 1000) / 8000; in smsc_ircc_hard_xmit_fir()
1235 smsc_ircc_dma_xmit(self, bofs); in smsc_ircc_hard_xmit_fir()
1238 smsc_ircc_dma_xmit(self, 0); in smsc_ircc_hard_xmit_fir()
1241 spin_unlock_irqrestore(&self->lock, flags); in smsc_ircc_hard_xmit_fir()
1253 static void smsc_ircc_dma_xmit(struct smsc_ircc_cb *self, int bofs) in smsc_ircc_dma_xmit() argument
1255 int iobase = self->io.fir_base; in smsc_ircc_dma_xmit()
1268 self->io.direction = IO_XMIT; in smsc_ircc_dma_xmit()
1277 outb(self->tx_buff.len >> 8, iobase + IRCC_TX_SIZE_HI); in smsc_ircc_dma_xmit()
1278 outb(self->tx_buff.len & 0xff, iobase + IRCC_TX_SIZE_LO); in smsc_ircc_dma_xmit()
1288 irda_setup_dma(self->io.dma, self->tx_buff_dma, self->tx_buff.len, in smsc_ircc_dma_xmit()
1308 static void smsc_ircc_dma_xmit_complete(struct smsc_ircc_cb *self) in smsc_ircc_dma_xmit_complete() argument
1310 int iobase = self->io.fir_base; in smsc_ircc_dma_xmit_complete()
1325 self->netdev->stats.tx_errors++; in smsc_ircc_dma_xmit_complete()
1326 self->netdev->stats.tx_fifo_errors++; in smsc_ircc_dma_xmit_complete()
1333 self->netdev->stats.tx_packets++; in smsc_ircc_dma_xmit_complete()
1334 self->netdev->stats.tx_bytes += self->tx_buff.len; in smsc_ircc_dma_xmit_complete()
1338 if (self->new_speed) { in smsc_ircc_dma_xmit_complete()
1339 smsc_ircc_change_speed(self, self->new_speed); in smsc_ircc_dma_xmit_complete()
1340 self->new_speed = 0; in smsc_ircc_dma_xmit_complete()
1343 netif_wake_queue(self->netdev); in smsc_ircc_dma_xmit_complete()
1353 static int smsc_ircc_dma_receive(struct smsc_ircc_cb *self) in smsc_ircc_dma_receive() argument
1355 int iobase = self->io.fir_base; in smsc_ircc_dma_receive()
1372 self->io.direction = IO_RECV; in smsc_ircc_dma_receive()
1373 self->rx_buff.data = self->rx_buff.head; in smsc_ircc_dma_receive()
1381 irda_setup_dma(self->io.dma, self->rx_buff_dma, self->rx_buff.truesize, in smsc_ircc_dma_receive()
1408 static void smsc_ircc_dma_receive_complete(struct smsc_ircc_cb *self) in smsc_ircc_dma_receive_complete() argument
1412 int iobase = self->io.fir_base; in smsc_ircc_dma_receive_complete()
1428 get_dma_residue(self->io.dma)); in smsc_ircc_dma_receive_complete()
1430 len = self->rx_buff.truesize - get_dma_residue(self->io.dma); in smsc_ircc_dma_receive_complete()
1434 self->netdev->stats.rx_errors++; in smsc_ircc_dma_receive_complete()
1436 self->netdev->stats.rx_frame_errors++; in smsc_ircc_dma_receive_complete()
1438 self->netdev->stats.rx_crc_errors++; in smsc_ircc_dma_receive_complete()
1440 self->netdev->stats.rx_length_errors++; in smsc_ircc_dma_receive_complete()
1442 self->netdev->stats.rx_length_errors++; in smsc_ircc_dma_receive_complete()
1447 len -= self->io.speed < 4000000 ? 2 : 4; in smsc_ircc_dma_receive_complete()
1462 memcpy(skb_put(skb, len), self->rx_buff.data, len); in smsc_ircc_dma_receive_complete()
1463 self->netdev->stats.rx_packets++; in smsc_ircc_dma_receive_complete()
1464 self->netdev->stats.rx_bytes += len; in smsc_ircc_dma_receive_complete()
1466 skb->dev = self->netdev; in smsc_ircc_dma_receive_complete()
1478 static void smsc_ircc_sir_receive(struct smsc_ircc_cb *self) in smsc_ircc_sir_receive() argument
1483 IRDA_ASSERT(self != NULL, return;); in smsc_ircc_sir_receive()
1485 iobase = self->io.sir_base; in smsc_ircc_sir_receive()
1492 async_unwrap_char(self->netdev, &self->netdev->stats, &self->rx_buff, in smsc_ircc_sir_receive()
1513 struct smsc_ircc_cb *self = netdev_priv(dev); in smsc_ircc_interrupt() local
1518 spin_lock(&self->lock); in smsc_ircc_interrupt()
1521 if (self->io.speed <= SMSC_IRCC2_MAX_SIR_SPEED) { in smsc_ircc_interrupt()
1526 iobase = self->io.fir_base; in smsc_ircc_interrupt()
1542 if (self->io.direction == IO_RECV) in smsc_ircc_interrupt()
1543 smsc_ircc_dma_receive_complete(self); in smsc_ircc_interrupt()
1545 smsc_ircc_dma_xmit_complete(self); in smsc_ircc_interrupt()
1547 smsc_ircc_dma_receive(self); in smsc_ircc_interrupt()
1560 spin_unlock(&self->lock); in smsc_ircc_interrupt()
1572 struct smsc_ircc_cb *self = netdev_priv(dev); in smsc_ircc_interrupt_sir() local
1580 iobase = self->io.sir_base; in smsc_ircc_interrupt_sir()
1598 smsc_ircc_sir_receive(self); in smsc_ircc_interrupt_sir()
1603 smsc_ircc_sir_write_wakeup(self); in smsc_ircc_interrupt_sir()
1629 static int ircc_is_receiving(struct smsc_ircc_cb *self)
1636 IRDA_ASSERT(self != NULL, return FALSE;);
1639 get_dma_residue(self->io.dma));
1641 status = (self->rx_buff.state != OUTSIDE_FRAME);
1647 static int smsc_ircc_request_irq(struct smsc_ircc_cb *self) in smsc_ircc_request_irq() argument
1651 error = request_irq(self->io.irq, smsc_ircc_interrupt, 0, in smsc_ircc_request_irq()
1652 self->netdev->name, self->netdev); in smsc_ircc_request_irq()
1655 __func__, self->io.irq, error); in smsc_ircc_request_irq()
1660 static void smsc_ircc_start_interrupts(struct smsc_ircc_cb *self) in smsc_ircc_start_interrupts() argument
1664 spin_lock_irqsave(&self->lock, flags); in smsc_ircc_start_interrupts()
1666 self->io.speed = 0; in smsc_ircc_start_interrupts()
1667 smsc_ircc_change_speed(self, SMSC_IRCC2_C_IRDA_FALLBACK_SPEED); in smsc_ircc_start_interrupts()
1669 spin_unlock_irqrestore(&self->lock, flags); in smsc_ircc_start_interrupts()
1672 static void smsc_ircc_stop_interrupts(struct smsc_ircc_cb *self) in smsc_ircc_stop_interrupts() argument
1674 int iobase = self->io.fir_base; in smsc_ircc_stop_interrupts()
1677 spin_lock_irqsave(&self->lock, flags); in smsc_ircc_stop_interrupts()
1684 spin_unlock_irqrestore(&self->lock, flags); in smsc_ircc_stop_interrupts()
1696 struct smsc_ircc_cb *self; in smsc_ircc_net_open() local
1702 self = netdev_priv(dev); in smsc_ircc_net_open()
1703 IRDA_ASSERT(self != NULL, return 0;); in smsc_ircc_net_open()
1705 if (self->io.suspended) { in smsc_ircc_net_open()
1710 if (request_irq(self->io.irq, smsc_ircc_interrupt, 0, dev->name, in smsc_ircc_net_open()
1713 __func__, self->io.irq); in smsc_ircc_net_open()
1717 smsc_ircc_start_interrupts(self); in smsc_ircc_net_open()
1721 sprintf(hwname, "SMSC @ 0x%03x", self->io.fir_base); in smsc_ircc_net_open()
1727 self->irlap = irlap_open(dev, &self->qos, hwname); in smsc_ircc_net_open()
1733 if (request_dma(self->io.dma, dev->name)) { in smsc_ircc_net_open()
1737 __func__, self->io.dma); in smsc_ircc_net_open()
1754 struct smsc_ircc_cb *self; in smsc_ircc_net_close() local
1759 self = netdev_priv(dev); in smsc_ircc_net_close()
1760 IRDA_ASSERT(self != NULL, return 0;); in smsc_ircc_net_close()
1766 if (self->irlap) in smsc_ircc_net_close()
1767 irlap_close(self->irlap); in smsc_ircc_net_close()
1768 self->irlap = NULL; in smsc_ircc_net_close()
1770 smsc_ircc_stop_interrupts(self); in smsc_ircc_net_close()
1773 if (!self->io.suspended) in smsc_ircc_net_close()
1774 free_irq(self->io.irq, dev); in smsc_ircc_net_close()
1776 disable_dma(self->io.dma); in smsc_ircc_net_close()
1777 free_dma(self->io.dma); in smsc_ircc_net_close()
1784 struct smsc_ircc_cb *self = platform_get_drvdata(dev); in smsc_ircc_suspend() local
1786 if (!self->io.suspended) { in smsc_ircc_suspend()
1790 if (netif_running(self->netdev)) { in smsc_ircc_suspend()
1791 netif_device_detach(self->netdev); in smsc_ircc_suspend()
1792 smsc_ircc_stop_interrupts(self); in smsc_ircc_suspend()
1793 free_irq(self->io.irq, self->netdev); in smsc_ircc_suspend()
1794 disable_dma(self->io.dma); in smsc_ircc_suspend()
1796 self->io.suspended = 1; in smsc_ircc_suspend()
1805 struct smsc_ircc_cb *self = platform_get_drvdata(dev); in smsc_ircc_resume() local
1807 if (self->io.suspended) { in smsc_ircc_resume()
1811 smsc_ircc_init_chip(self); in smsc_ircc_resume()
1812 if (netif_running(self->netdev)) { in smsc_ircc_resume()
1813 if (smsc_ircc_request_irq(self)) { in smsc_ircc_resume()
1818 unregister_netdevice(self->netdev); in smsc_ircc_resume()
1820 enable_dma(self->io.dma); in smsc_ircc_resume()
1821 smsc_ircc_start_interrupts(self); in smsc_ircc_resume()
1822 netif_device_attach(self->netdev); in smsc_ircc_resume()
1825 self->io.suspended = 0; in smsc_ircc_resume()
1837 static int __exit smsc_ircc_close(struct smsc_ircc_cb *self) in smsc_ircc_close() argument
1841 IRDA_ASSERT(self != NULL, return -1;); in smsc_ircc_close()
1843 platform_device_unregister(self->pldev); in smsc_ircc_close()
1846 unregister_netdev(self->netdev); in smsc_ircc_close()
1848 smsc_ircc_stop_interrupts(self); in smsc_ircc_close()
1852 self->io.fir_base); in smsc_ircc_close()
1854 release_region(self->io.fir_base, self->io.fir_ext); in smsc_ircc_close()
1857 self->io.sir_base); in smsc_ircc_close()
1859 release_region(self->io.sir_base, self->io.sir_ext); in smsc_ircc_close()
1861 if (self->tx_buff.head) in smsc_ircc_close()
1862 dma_free_coherent(NULL, self->tx_buff.truesize, in smsc_ircc_close()
1863 self->tx_buff.head, self->tx_buff_dma); in smsc_ircc_close()
1865 if (self->rx_buff.head) in smsc_ircc_close()
1866 dma_free_coherent(NULL, self->rx_buff.truesize, in smsc_ircc_close()
1867 self->rx_buff.head, self->rx_buff_dma); in smsc_ircc_close()
1869 free_netdev(self->netdev); in smsc_ircc_close()
1897 static void smsc_ircc_sir_start(struct smsc_ircc_cb *self) in smsc_ircc_sir_start() argument
1904 IRDA_ASSERT(self != NULL, return;); in smsc_ircc_sir_start()
1905 dev = self->netdev; in smsc_ircc_sir_start()
1908 fir_base = self->io.fir_base; in smsc_ircc_sir_start()
1909 sir_base = self->io.sir_base; in smsc_ircc_sir_start()
1934 void smsc_ircc_sir_stop(struct smsc_ircc_cb *self) in smsc_ircc_sir_stop() argument
1939 iobase = self->io.sir_base; in smsc_ircc_sir_stop()
1956 static void smsc_ircc_sir_write_wakeup(struct smsc_ircc_cb *self) in smsc_ircc_sir_write_wakeup() argument
1962 IRDA_ASSERT(self != NULL, return;); in smsc_ircc_sir_write_wakeup()
1966 iobase = self->io.sir_base; in smsc_ircc_sir_write_wakeup()
1969 if (self->tx_buff.len > 0) { in smsc_ircc_sir_write_wakeup()
1971 actual = smsc_ircc_sir_write(iobase, self->io.fifo_size, in smsc_ircc_sir_write_wakeup()
1972 self->tx_buff.data, self->tx_buff.len); in smsc_ircc_sir_write_wakeup()
1973 self->tx_buff.data += actual; in smsc_ircc_sir_write_wakeup()
1974 self->tx_buff.len -= actual; in smsc_ircc_sir_write_wakeup()
1984 if (self->new_speed) { in smsc_ircc_sir_write_wakeup()
1986 __func__, self->new_speed); in smsc_ircc_sir_write_wakeup()
1987 smsc_ircc_sir_wait_hw_transmitter_finish(self); in smsc_ircc_sir_write_wakeup()
1988 smsc_ircc_change_speed(self, self->new_speed); in smsc_ircc_sir_write_wakeup()
1989 self->new_speed = 0; in smsc_ircc_sir_write_wakeup()
1992 netif_wake_queue(self->netdev); in smsc_ircc_sir_write_wakeup()
1994 self->netdev->stats.tx_packets++; in smsc_ircc_sir_write_wakeup()
1996 if (self->io.speed <= 115200) { in smsc_ircc_sir_write_wakeup()
2002 fcr |= self->io.speed < 38400 ? in smsc_ircc_sir_write_wakeup()
2045 static int smsc_ircc_is_receiving(struct smsc_ircc_cb *self) in smsc_ircc_is_receiving() argument
2047 return self->rx_buff.state != OUTSIDE_FRAME; in smsc_ircc_is_receiving()
2057 static void smsc_ircc_probe_transceiver(struct smsc_ircc_cb *self) in smsc_ircc_probe_transceiver() argument
2061 IRDA_ASSERT(self != NULL, return;); in smsc_ircc_probe_transceiver()
2064 if (smsc_transceivers[i].probe(self->io.fir_base)) { in smsc_ircc_probe_transceiver()
2067 self->transceiver= i + 1; in smsc_ircc_probe_transceiver()
2074 self->transceiver = SMSC_IRCC2_C_DEFAULT_TRANSCEIVER; in smsc_ircc_probe_transceiver()
2084 static void smsc_ircc_set_transceiver_for_speed(struct smsc_ircc_cb *self, u32 speed) in smsc_ircc_set_transceiver_for_speed() argument
2088 trx = self->transceiver; in smsc_ircc_set_transceiver_for_speed()
2090 smsc_transceivers[trx - 1].set_for_speed(self->io.fir_base, speed); in smsc_ircc_set_transceiver_for_speed()
2116 static void smsc_ircc_sir_wait_hw_transmitter_finish(struct smsc_ircc_cb *self) in smsc_ircc_sir_wait_hw_transmitter_finish() argument
2118 int iobase = self->io.sir_base; in smsc_ircc_sir_wait_hw_transmitter_finish()