Lines Matching defs:si

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