Lines Matching refs:si
80 #define IS_FIR(si) ((si)->speed >= 4000000) argument
163 static int sa1100_irda_rx_alloc(struct sa1100_irda *si) in sa1100_irda_rx_alloc() argument
165 if (si->dma_rx.skb) in sa1100_irda_rx_alloc()
168 si->dma_rx.skb = alloc_skb(HPSIR_MAX_RXLEN + 1, GFP_ATOMIC); in sa1100_irda_rx_alloc()
169 if (!si->dma_rx.skb) { in sa1100_irda_rx_alloc()
178 skb_reserve(si->dma_rx.skb, 1); in sa1100_irda_rx_alloc()
180 sg_set_buf(&si->dma_rx.sg, si->dma_rx.skb->data, HPSIR_MAX_RXLEN); in sa1100_irda_rx_alloc()
181 if (dma_map_sg(si->dma_rx.dev, &si->dma_rx.sg, 1, DMA_FROM_DEVICE) == 0) { in sa1100_irda_rx_alloc()
182 dev_kfree_skb_any(si->dma_rx.skb); in sa1100_irda_rx_alloc()
193 static void sa1100_irda_rx_dma_start(struct sa1100_irda *si) in sa1100_irda_rx_dma_start() argument
195 if (!si->dma_rx.skb) { in sa1100_irda_rx_dma_start()
208 dmaengine_terminate_all(si->dma_rx.chan); in sa1100_irda_rx_dma_start()
209 sa1100_irda_dma_start(&si->dma_rx, DMA_DEV_TO_MEM, NULL, NULL); in sa1100_irda_rx_dma_start()
214 static void sa1100_irda_check_speed(struct sa1100_irda *si) in sa1100_irda_check_speed() argument
216 if (si->newspeed) { in sa1100_irda_check_speed()
217 sa1100_irda_set_speed(si, si->newspeed); in sa1100_irda_check_speed()
218 si->newspeed = 0; in sa1100_irda_check_speed()
228 struct sa1100_irda *si = netdev_priv(dev); in sa1100_irda_sirtxdma_irq() local
230 dma_unmap_sg(si->dma_tx.dev, &si->dma_tx.sg, 1, DMA_TO_DEVICE); in sa1100_irda_sirtxdma_irq()
231 dev_kfree_skb(si->dma_tx.skb); in sa1100_irda_sirtxdma_irq()
232 si->dma_tx.skb = NULL; in sa1100_irda_sirtxdma_irq()
235 dev->stats.tx_bytes += sg_dma_len(&si->dma_tx.sg); in sa1100_irda_sirtxdma_irq()
249 sa1100_irda_check_speed(si); in sa1100_irda_sirtxdma_irq()
256 struct sa1100_irda *si) in sa1100_irda_sir_tx_start() argument
258 si->tx_buff.data = si->tx_buff.head; in sa1100_irda_sir_tx_start()
259 si->tx_buff.len = async_wrap_skb(skb, si->tx_buff.data, in sa1100_irda_sir_tx_start()
260 si->tx_buff.truesize); in sa1100_irda_sir_tx_start()
262 si->dma_tx.skb = skb; in sa1100_irda_sir_tx_start()
263 sg_set_buf(&si->dma_tx.sg, si->tx_buff.data, si->tx_buff.len); in sa1100_irda_sir_tx_start()
264 if (dma_map_sg(si->dma_tx.dev, &si->dma_tx.sg, 1, DMA_TO_DEVICE) == 0) { in sa1100_irda_sir_tx_start()
265 si->dma_tx.skb = NULL; in sa1100_irda_sir_tx_start()
271 sa1100_irda_dma_start(&si->dma_tx, DMA_MEM_TO_DEV, sa1100_irda_sirtxdma_irq, dev); in sa1100_irda_sir_tx_start()
282 static irqreturn_t sa1100_irda_sir_irq(struct net_device *dev, struct sa1100_irda *si) in sa1100_irda_sir_irq() argument
305 async_unwrap_char(dev, &dev->stats, &si->rx_buff, data); in sa1100_irda_sir_irq()
320 async_unwrap_char(dev, &dev->stats, &si->rx_buff, Ser2UTDR); in sa1100_irda_sir_irq()
321 async_unwrap_char(dev, &dev->stats, &si->rx_buff, Ser2UTDR); in sa1100_irda_sir_irq()
322 async_unwrap_char(dev, &dev->stats, &si->rx_buff, Ser2UTDR); in sa1100_irda_sir_irq()
330 async_unwrap_char(dev, &dev->stats, &si->rx_buff, in sa1100_irda_sir_irq()
345 struct sa1100_irda *si = netdev_priv(dev); in sa1100_irda_firtxdma_irq() local
367 sa1100_irda_check_speed(si); in sa1100_irda_firtxdma_irq()
373 sa1100_irda_rx_dma_start(si); in sa1100_irda_firtxdma_irq()
376 skb = si->dma_tx.skb; in sa1100_irda_firtxdma_irq()
378 dma_unmap_sg(si->dma_tx.dev, &si->dma_tx.sg, 1, in sa1100_irda_firtxdma_irq()
383 si->dma_tx.skb = NULL; in sa1100_irda_firtxdma_irq()
394 struct sa1100_irda *si) in sa1100_irda_fir_tx_start() argument
398 si->dma_tx.skb = skb; in sa1100_irda_fir_tx_start()
399 sg_set_buf(&si->dma_tx.sg, skb->data, skb->len); in sa1100_irda_fir_tx_start()
400 if (dma_map_sg(si->dma_tx.dev, &si->dma_tx.sg, 1, DMA_TO_DEVICE) == 0) { in sa1100_irda_fir_tx_start()
401 si->dma_tx.skb = NULL; in sa1100_irda_fir_tx_start()
408 sa1100_irda_dma_start(&si->dma_tx, DMA_MEM_TO_DEV, sa1100_irda_firtxdma_irq, dev); in sa1100_irda_fir_tx_start()
423 static void sa1100_irda_fir_error(struct sa1100_irda *si, struct net_device *dev) in sa1100_irda_fir_error() argument
425 struct sk_buff *skb = si->dma_rx.skb; in sa1100_irda_fir_error()
436 len = sa1100_irda_dma_xferred(&si->dma_rx); in sa1100_irda_fir_error()
439 dma_unmap_sg(si->dma_rx.dev, &si->dma_rx.sg, 1, DMA_FROM_DEVICE); in sa1100_irda_fir_error()
467 si->dma_rx.skb = NULL; in sa1100_irda_fir_error()
479 sa1100_irda_rx_alloc(si); in sa1100_irda_fir_error()
487 dma_map_sg(si->dma_rx.dev, &si->dma_rx.sg, 1, DMA_FROM_DEVICE); in sa1100_irda_fir_error()
495 static irqreturn_t sa1100_irda_fir_irq(struct net_device *dev, struct sa1100_irda *si) in sa1100_irda_fir_irq() argument
500 dmaengine_pause(si->dma_rx.chan); in sa1100_irda_fir_irq()
532 sa1100_irda_fir_error(si, dev); in sa1100_irda_fir_irq()
537 sa1100_irda_rx_dma_start(si); in sa1100_irda_fir_irq()
545 static int sa1100_irda_set_speed(struct sa1100_irda *si, int speed) in sa1100_irda_set_speed() argument
556 if (IS_FIR(si)) { in sa1100_irda_set_speed()
557 dmaengine_terminate_all(si->dma_rx.chan); in sa1100_irda_set_speed()
558 dmaengine_slave_config(si->dma_tx.chan, in sa1100_irda_set_speed()
576 if (si->pdata->set_speed) in sa1100_irda_set_speed()
577 si->pdata->set_speed(si->dev, speed); in sa1100_irda_set_speed()
579 si->speed = speed; in sa1100_irda_set_speed()
580 si->tx_start = sa1100_irda_sir_tx_start; in sa1100_irda_set_speed()
581 si->irq = sa1100_irda_sir_irq; in sa1100_irda_set_speed()
588 if (!IS_FIR(si)) in sa1100_irda_set_speed()
589 dmaengine_slave_config(si->dma_tx.chan, in sa1100_irda_set_speed()
598 si->speed = speed; in sa1100_irda_set_speed()
599 si->tx_start = sa1100_irda_fir_tx_start; in sa1100_irda_set_speed()
600 si->irq = sa1100_irda_fir_irq; in sa1100_irda_set_speed()
602 if (si->pdata->set_speed) in sa1100_irda_set_speed()
603 si->pdata->set_speed(si->dev, speed); in sa1100_irda_set_speed()
605 sa1100_irda_rx_alloc(si); in sa1100_irda_set_speed()
606 sa1100_irda_rx_dma_start(si); in sa1100_irda_set_speed()
630 __sa1100_irda_set_power(struct sa1100_irda *si, unsigned int state) in __sa1100_irda_set_power() argument
633 if (si->pdata->set_power) in __sa1100_irda_set_power()
634 ret = si->pdata->set_power(si->dev, state); in __sa1100_irda_set_power()
639 sa1100_set_power(struct sa1100_irda *si, unsigned int state) in sa1100_set_power() argument
643 ret = __sa1100_irda_set_power(si, state); in sa1100_set_power()
645 si->power = state; in sa1100_set_power()
653 struct sa1100_irda *si = netdev_priv(dev); in sa1100_irda_irq() local
655 return si->irq(dev, si); in sa1100_irda_irq()
660 struct sa1100_irda *si = netdev_priv(dev); in sa1100_irda_hard_xmit() local
668 if (speed != si->speed && speed != -1) in sa1100_irda_hard_xmit()
669 si->newspeed = speed; in sa1100_irda_hard_xmit()
673 sa1100_irda_check_speed(si); in sa1100_irda_hard_xmit()
681 BUG_ON(si->dma_tx.skb); in sa1100_irda_hard_xmit()
683 return si->tx_start(skb, dev, si); in sa1100_irda_hard_xmit()
690 struct sa1100_irda *si = netdev_priv(dev); in sa1100_irda_ioctl() local
700 if (si->open) { in sa1100_irda_ioctl()
701 ret = sa1100_irda_set_speed(si, in sa1100_irda_ioctl()
719 rq->ifr_receiving = IS_FIR(si) ? 0 in sa1100_irda_ioctl()
720 : si->rx_buff.state != OUTSIDE_FRAME; in sa1100_irda_ioctl()
730 static int sa1100_irda_startup(struct sa1100_irda *si) in sa1100_irda_startup() argument
737 if (si->pdata->startup) { in sa1100_irda_startup()
738 ret = si->pdata->startup(si->dev); in sa1100_irda_startup()
756 Ser2UTCR4 = si->utcr4; in sa1100_irda_startup()
765 ret = sa1100_irda_set_speed(si, si->speed = 9600); in sa1100_irda_startup()
770 if (si->pdata->shutdown) in sa1100_irda_startup()
771 si->pdata->shutdown(si->dev); in sa1100_irda_startup()
777 static void sa1100_irda_shutdown(struct sa1100_irda *si) in sa1100_irda_shutdown() argument
782 dmaengine_terminate_all(si->dma_rx.chan); in sa1100_irda_shutdown()
783 dmaengine_terminate_all(si->dma_tx.chan); in sa1100_irda_shutdown()
789 if (si->pdata->shutdown) in sa1100_irda_shutdown()
790 si->pdata->shutdown(si->dev); in sa1100_irda_shutdown()
795 struct sa1100_irda *si = netdev_priv(dev); in sa1100_irda_start() local
798 si->speed = 9600; in sa1100_irda_start()
800 err = sa1100_irda_dma_request(si->dev, &si->dma_rx, "Ser2ICPRc", in sa1100_irda_start()
805 err = sa1100_irda_dma_request(si->dev, &si->dma_tx, "Ser2ICPTr", in sa1100_irda_start()
813 err = sa1100_irda_startup(si); in sa1100_irda_start()
820 si->irlap = irlap_open(dev, &si->qos, "sa1100"); in sa1100_irda_start()
822 if (!si->irlap) in sa1100_irda_start()
832 si->open = 1; in sa1100_irda_start()
833 sa1100_set_power(si, power_level); /* low power mode */ in sa1100_irda_start()
839 irlap_close(si->irlap); in sa1100_irda_start()
841 si->open = 0; in sa1100_irda_start()
842 sa1100_irda_shutdown(si); in sa1100_irda_start()
844 dma_release_channel(si->dma_tx.chan); in sa1100_irda_start()
846 dma_release_channel(si->dma_rx.chan); in sa1100_irda_start()
853 struct sa1100_irda *si = netdev_priv(dev); in sa1100_irda_stop() local
858 si->open = 0; in sa1100_irda_stop()
859 sa1100_irda_shutdown(si); in sa1100_irda_stop()
865 skb = si->dma_rx.skb; in sa1100_irda_stop()
867 dma_unmap_sg(si->dma_rx.dev, &si->dma_rx.sg, 1, in sa1100_irda_stop()
870 si->dma_rx.skb = NULL; in sa1100_irda_stop()
873 skb = si->dma_tx.skb; in sa1100_irda_stop()
875 dma_unmap_sg(si->dma_tx.dev, &si->dma_tx.sg, 1, in sa1100_irda_stop()
878 si->dma_tx.skb = NULL; in sa1100_irda_stop()
882 if (si->irlap) { in sa1100_irda_stop()
883 irlap_close(si->irlap); in sa1100_irda_stop()
884 si->irlap = NULL; in sa1100_irda_stop()
890 dma_release_channel(si->dma_tx.chan); in sa1100_irda_stop()
891 dma_release_channel(si->dma_rx.chan); in sa1100_irda_stop()
894 sa1100_set_power(si, 0); in sa1100_irda_stop()
921 struct sa1100_irda *si; in sa1100_irda_probe() local
950 si = netdev_priv(dev); in sa1100_irda_probe()
951 si->dev = &pdev->dev; in sa1100_irda_probe()
952 si->pdata = pdev->dev.platform_data; in sa1100_irda_probe()
954 sg_init_table(&si->dma_rx.sg, 1); in sa1100_irda_probe()
955 sg_init_table(&si->dma_tx.sg, 1); in sa1100_irda_probe()
960 err = sa1100_irda_init_iobuf(&si->rx_buff, 14384); in sa1100_irda_probe()
963 err = sa1100_irda_init_iobuf(&si->tx_buff, IRDA_SIR_MAX_FRAME); in sa1100_irda_probe()
970 irda_init_max_qos_capabilies(&si->qos); in sa1100_irda_probe()
986 si->qos.baud_rate.bits &= baudrate_mask; in sa1100_irda_probe()
987 si->qos.min_turn_time.bits = 7; in sa1100_irda_probe()
989 irda_qos_bits_to_value(&si->qos); in sa1100_irda_probe()
991 si->utcr4 = UTCR4_HPSIR; in sa1100_irda_probe()
993 si->utcr4 |= UTCR4_Z1_6us; in sa1100_irda_probe()
1000 Ser2UTCR4 = si->utcr4; in sa1100_irda_probe()
1009 kfree(si->tx_buff.head); in sa1100_irda_probe()
1010 kfree(si->rx_buff.head); in sa1100_irda_probe()
1028 struct sa1100_irda *si = netdev_priv(dev); in sa1100_irda_remove() local
1030 kfree(si->tx_buff.head); in sa1100_irda_remove()
1031 kfree(si->rx_buff.head); in sa1100_irda_remove()
1049 struct sa1100_irda *si; in sa1100_irda_suspend() local
1054 si = netdev_priv(dev); in sa1100_irda_suspend()
1055 if (si->open) { in sa1100_irda_suspend()
1061 sa1100_irda_shutdown(si); in sa1100_irda_suspend()
1062 __sa1100_irda_set_power(si, 0); in sa1100_irda_suspend()
1074 struct sa1100_irda *si; in sa1100_irda_resume() local
1079 si = netdev_priv(dev); in sa1100_irda_resume()
1080 if (si->open) { in sa1100_irda_resume()
1088 if (si->newspeed) { in sa1100_irda_resume()
1089 si->speed = si->newspeed; in sa1100_irda_resume()
1090 si->newspeed = 0; in sa1100_irda_resume()
1093 sa1100_irda_startup(si); in sa1100_irda_resume()
1094 __sa1100_irda_set_power(si, si->power); in sa1100_irda_resume()