sa1100_ir.c
上传用户:jlfgdled
上传日期:2013-04-10
资源大小:33168k
文件大小:24k
源码类别:

Linux/Unix编程

开发平台:

Unix_Linux

  1. /*
  2.  *  linux/drivers/net/irda/sa1100_ir.c
  3.  *
  4.  *  Copyright (C) 2000-2001 Russell King
  5.  *
  6.  * This program is free software; you can redistribute it and/or modify
  7.  * it under the terms of the GNU General Public License version 2 as
  8.  * published by the Free Software Foundation.
  9.  *
  10.  *  Infra-red driver for the StrongARM SA1100 embedded microprocessor
  11.  *
  12.  *  Note that we don't have to worry about the SA1111's DMA bugs in here,
  13.  *  so we use the straight forward pci_map_* functions with a null pointer.
  14.  *  IMHO we should really be using our own machine specific set.
  15.  */
  16. #include <linux/config.h>
  17. #include <linux/module.h>
  18. #include <linux/types.h>
  19. #include <linux/init.h>
  20. #include <linux/errno.h>
  21. #include <linux/netdevice.h>
  22. #include <linux/slab.h>
  23. #include <linux/rtnetlink.h>
  24. #include <linux/interrupt.h>
  25. #include <linux/delay.h>
  26. #include <linux/pci.h>
  27. #include <linux/pm.h>
  28. #include <net/irda/irda.h>
  29. #include <net/irda/irmod.h>
  30. #include <net/irda/wrapper.h>
  31. #include <net/irda/irda_device.h>
  32. #include <asm/irq.h>
  33. #include <asm/dma.h>
  34. #include <asm/hardware.h>
  35. #include <asm/mach-types.h>
  36. #include <asm/arch/assabet.h>
  37. #ifndef CONFIG_SA1100_H3600
  38. #define clr_h3600_egpio(x) do { } while (0)
  39. #define set_h3600_egpio(x) do { } while (0)
  40. #endif
  41. #ifndef GPIO_IRDA_FIR
  42. #define GPIO_IRDA_FIR (0)
  43. #endif
  44. #ifndef GPIO_IRDA_POWER
  45. #define GPIO_IRDA_POWER (0)
  46. #endif
  47. static int power_level = 3;
  48. static int tx_lpm = 0;
  49. /*
  50.  * Our netdevice.  There is only ever one of these.
  51.  */
  52. static struct net_device *netdev;
  53. struct sa1100_irda {
  54. unsigned char hscr0;
  55. unsigned char utcr4;
  56. unsigned char power;
  57. unsigned char open;
  58. int speed;
  59. int newspeed;
  60. struct sk_buff *txskb;
  61. struct sk_buff *rxskb;
  62. dma_addr_t txbuf_dma;
  63. dma_addr_t rxbuf_dma;
  64. int txdma;
  65. int rxdma;
  66. struct net_device_stats stats;
  67. struct irlap_cb *irlap;
  68. struct pm_dev *pmdev;
  69. struct qos_info qos;
  70. iobuff_t tx_buff;
  71. iobuff_t rx_buff;
  72. };
  73. #define IS_FIR(si) ((si)->speed >= 4000000)
  74. #define HPSIR_MAX_RXLEN 2047
  75. /*
  76.  * Allocate and map the receive buffer, unless it is already allocated.
  77.  */
  78. static int sa1100_irda_rx_alloc(struct sa1100_irda *si)
  79. {
  80. if (si->rxskb)
  81. return 0;
  82. si->rxskb = alloc_skb(HPSIR_MAX_RXLEN + 1, GFP_ATOMIC);
  83. if (!si->rxskb) {
  84. printk(KERN_ERR "sa1100_ir: out of memory for RX SKBn");
  85. return -ENOMEM;
  86. }
  87. /*
  88.  * Align any IP headers that may be contained
  89.  * within the frame.
  90.  */
  91. skb_reserve(si->rxskb, 1);
  92. si->rxbuf_dma = pci_map_single(NULL, si->rxskb->data,
  93. HPSIR_MAX_RXLEN,
  94. PCI_DMA_FROMDEVICE);
  95. return 0;
  96. }
  97. /*
  98.  * We want to get here as soon as possible, and get the receiver setup.
  99.  * We use the existing buffer.
  100.  */
  101. static void sa1100_irda_rx_dma_start(struct sa1100_irda *si)
  102. {
  103. if (!si->rxskb) {
  104. printk(KERN_ERR "sa1100_ir: rx buffer went missingn");
  105. return;
  106. }
  107. /*
  108.  * First empty receive FIFO
  109.  */
  110. Ser2HSCR0 = si->hscr0 | HSCR0_HSSP;
  111. /*
  112.  * Enable the DMA, receiver and receive interrupt.
  113.  */
  114. sa1100_dma_flush_all(si->rxdma);
  115. sa1100_dma_queue_buffer(si->rxdma, NULL, si->rxbuf_dma, HPSIR_MAX_RXLEN);
  116. Ser2HSCR0 = si->hscr0 | HSCR0_HSSP | HSCR0_RXE;
  117. }
  118. /*
  119.  * Set the IrDA communications speed.
  120.  */
  121. static int sa1100_irda_set_speed(struct sa1100_irda *si, int speed)
  122. {
  123. unsigned long flags;
  124. int brd, ret = -EINVAL;
  125. switch (speed) {
  126. case 9600: case 19200: case 38400:
  127. case 57600: case 115200:
  128. brd = 3686400 / (16 * speed) - 1;
  129. /*
  130.  * Stop the receive DMA.
  131.  */
  132. if (IS_FIR(si))
  133. sa1100_dma_stop(si->rxdma);
  134. local_irq_save(flags);
  135. Ser2UTCR3 = 0;
  136. Ser2HSCR0 = HSCR0_UART;
  137. Ser2UTCR1 = brd >> 8;
  138. Ser2UTCR2 = brd;
  139. /*
  140.  * Clear status register
  141.  */
  142. Ser2UTSR0 = UTSR0_REB | UTSR0_RBB | UTSR0_RID;
  143. Ser2UTCR3 = UTCR3_RIE | UTCR3_RXE | UTCR3_TXE;
  144. if (machine_is_assabet())
  145. ASSABET_BCR_clear(ASSABET_BCR_IRDA_FSEL);
  146. if (machine_is_h3600())
  147. clr_h3600_egpio(EGPIO_H3600_IR_FSEL);
  148. if (machine_is_yopy())
  149. PPSR &= ~GPIO_IRDA_FIR;
  150. si->speed = speed;
  151. local_irq_restore(flags);
  152. ret = 0;
  153. break;
  154. case 4000000:
  155. save_flags(flags);
  156. cli();
  157. si->hscr0 = 0;
  158. Ser2HSSR0 = 0xff;
  159. Ser2HSCR0 = si->hscr0 | HSCR0_HSSP;
  160. Ser2UTCR3 = 0;
  161. si->speed = speed;
  162. if (machine_is_assabet())
  163. ASSABET_BCR_set(ASSABET_BCR_IRDA_FSEL);
  164. if (machine_is_h3600())
  165. set_h3600_egpio(EGPIO_H3600_IR_FSEL);
  166. if (machine_is_yopy())
  167. PPSR |= GPIO_IRDA_FIR;
  168. sa1100_irda_rx_alloc(si);
  169. sa1100_irda_rx_dma_start(si);
  170. restore_flags(flags);
  171. break;
  172. default:
  173. break;
  174. }
  175. return ret;
  176. }
  177. /*
  178.  * This sets the IRDA power level on the Assabet.
  179.  */
  180. static inline int
  181. sa1100_irda_set_power_assabet(struct sa1100_irda *si, unsigned int state)
  182. {
  183. static unsigned int bcr_state[4] = {
  184. ASSABET_BCR_IRDA_MD0,
  185. ASSABET_BCR_IRDA_MD1|ASSABET_BCR_IRDA_MD0,
  186. ASSABET_BCR_IRDA_MD1,
  187. 0
  188. };
  189. if (state < 4) {
  190. state = bcr_state[state];
  191. ASSABET_BCR_clear(state ^ (ASSABET_BCR_IRDA_MD1|
  192.    ASSABET_BCR_IRDA_MD0));
  193. ASSABET_BCR_set(state);
  194. }
  195. return 0;
  196. }
  197. /*
  198.  * This turns the IRDA power on or off on the Compaq H3600
  199.  */
  200. static inline int
  201. sa1100_irda_set_power_h3600(struct sa1100_irda *si, unsigned int state)
  202. {
  203. if (state)
  204. set_h3600_egpio(EGPIO_H3600_IR_ON);
  205. else
  206. clr_h3600_egpio(EGPIO_H3600_IR_ON);
  207. return 0;
  208. }
  209. /*
  210.  * This turns the IRDA power on or off on the Yopy
  211.  */
  212. static inline int
  213. sa1100_irda_set_power_yopy(struct sa1100_irda *si, unsigned int state)
  214. {
  215. if (state)
  216. PPSR &= ~GPIO_IRDA_POWER;
  217. else
  218. PPSR |= GPIO_IRDA_POWER;
  219. return 0;
  220. }
  221. /*
  222.  * Control the power state of the IrDA transmitter.
  223.  * State:
  224.  *  0 - off
  225.  *  1 - short range, lowest power
  226.  *  2 - medium range, medium power
  227.  *  3 - maximum range, high power
  228.  *
  229.  * Currently, only assabet is known to support this.
  230.  */
  231. static int
  232. __sa1100_irda_set_power(struct sa1100_irda *si, unsigned int state)
  233. {
  234. int ret = 0;
  235. if (machine_is_assabet())
  236. ret = sa1100_irda_set_power_assabet(si, state);
  237. if (machine_is_h3600())
  238. ret = sa1100_irda_set_power_h3600(si, state);
  239. if (machine_is_yopy())
  240. ret = sa1100_irda_set_power_yopy(si, state);
  241. return ret;
  242. }
  243. static inline int
  244. sa1100_set_power(struct sa1100_irda *si, unsigned int state)
  245. {
  246. int ret;
  247. ret = __sa1100_irda_set_power(si, state);
  248. if (ret == 0)
  249. si->power = state;
  250. return ret;
  251. }
  252. static int sa1100_irda_startup(struct sa1100_irda *si)
  253. {
  254. int ret;
  255. /*
  256.  * Ensure that the ports for this device are setup correctly.
  257.  */
  258. if (machine_is_yopy()) {
  259. PPDR |= GPIO_IRDA_POWER | GPIO_IRDA_FIR;
  260. PPSR |= GPIO_IRDA_POWER | GPIO_IRDA_FIR;
  261. PSDR |= GPIO_IRDA_POWER | GPIO_IRDA_FIR;
  262. }
  263. /*
  264.  * Configure PPC for IRDA - we want to drive TXD2 low.
  265.  * We also want to drive this pin low during sleep.
  266.  */
  267. PPSR &= ~PPC_TXD2;
  268. PSDR &= ~PPC_TXD2;
  269. PPDR |= PPC_TXD2;
  270. /*
  271.  * Enable HP-SIR modulation, and ensure that the port is disabled.
  272.  */
  273. Ser2UTCR3 = 0;
  274. Ser2HSCR0 = HSCR0_UART;
  275. Ser2UTCR4 = si->utcr4;
  276. Ser2UTCR0 = UTCR0_8BitData;
  277. Ser2HSCR2 = HSCR2_TrDataH | HSCR2_RcDataL;
  278. /*
  279.  * Clear status register
  280.  */
  281. Ser2UTSR0 = UTSR0_REB | UTSR0_RBB | UTSR0_RID;
  282. ret = sa1100_irda_set_speed(si, si->speed = 9600);
  283. if (ret)
  284. return ret;
  285. return 0;
  286. }
  287. static void sa1100_irda_shutdown(struct sa1100_irda *si)
  288. {
  289. /*
  290.  * Stop all DMA activity.
  291.  */
  292. sa1100_dma_stop(si->rxdma);
  293. sa1100_dma_stop(si->txdma);
  294. /* Disable the port. */
  295. Ser2UTCR3 = 0;
  296. Ser2HSCR0 = 0;
  297. }
  298. #ifdef CONFIG_PM
  299. /*
  300.  * Suspend the IrDA interface.
  301.  */
  302. static int sa1100_irda_suspend(struct net_device *dev, int state)
  303. {
  304. struct sa1100_irda *si = dev->priv;
  305. if (si && si->open) {
  306. /*
  307.  * Stop the transmit queue
  308.  */
  309. netif_device_detach(dev);
  310. disable_irq(dev->irq);
  311. sa1100_irda_shutdown(si);
  312. __sa1100_irda_set_power(si, 0);
  313. }
  314. return 0;
  315. }
  316. /*
  317.  * Resume the IrDA interface.
  318.  */
  319. static int sa1100_irda_resume(struct net_device *dev)
  320. {
  321. struct sa1100_irda *si = dev->priv;
  322. if (si && si->open) {
  323. /*
  324.  * If we missed a speed change, initialise at the new speed
  325.  * directly.  It is debatable whether this is actually
  326.  * required, but in the interests of continuing from where
  327.  * we left off it is desireable.  The converse argument is
  328.  * that we should re-negotiate at 9600 baud again.
  329.  */
  330. if (si->newspeed) {
  331. si->speed = si->newspeed;
  332. si->newspeed = 0;
  333. }
  334. sa1100_irda_startup(si);
  335. __sa1100_irda_set_power(si, si->power);
  336. enable_irq(dev->irq);
  337. /*
  338.  * This automatically wakes up the queue
  339.  */
  340. netif_device_attach(dev);
  341. }
  342. return 0;
  343. }
  344. static int sa1100_irda_pmproc(struct pm_dev *dev, pm_request_t rqst, void *data)
  345. {
  346. int ret;
  347. if (!dev->data)
  348. return -EINVAL;
  349. switch (rqst) {
  350. case PM_SUSPEND:
  351. ret = sa1100_irda_suspend((struct net_device *)dev->data,
  352.   (int)data);
  353. break;
  354. case PM_RESUME:
  355. ret = sa1100_irda_resume((struct net_device *)dev->data);
  356. break;
  357. default:
  358. ret = -EINVAL;
  359. break;
  360. }
  361. return ret;
  362. }
  363. #endif
  364. /*
  365.  * HP-SIR format interrupt service routines.
  366.  */
  367. static void sa1100_irda_hpsir_irq(struct net_device *dev)
  368. {
  369. struct sa1100_irda *si = dev->priv;
  370. int status;
  371. status = Ser2UTSR0;
  372. /*
  373.  * Deal with any receive errors first.  The bytes in error may be
  374.  * the only bytes in the receive FIFO, so we do this first.
  375.  */
  376. while (status & UTSR0_EIF) {
  377. int stat, data;
  378. stat = Ser2UTSR1;
  379. data = Ser2UTDR;
  380. if (stat & (UTSR1_FRE | UTSR1_ROR)) {
  381. si->stats.rx_errors++;
  382. if (stat & UTSR1_FRE)
  383. si->stats.rx_frame_errors++;
  384. if (stat & UTSR1_ROR)
  385. si->stats.rx_fifo_errors++;
  386. } else
  387. async_unwrap_char(dev, &si->stats, &si->rx_buff, data);
  388. status = Ser2UTSR0;
  389. }
  390. /*
  391.  * We must clear certain bits.
  392.  */
  393. Ser2UTSR0 = status & (UTSR0_RID | UTSR0_RBB | UTSR0_REB);
  394. if (status & UTSR0_RFS) {
  395. /*
  396.  * There are at least 4 bytes in the FIFO.  Read 3 bytes
  397.  * and leave the rest to the block below.
  398.  */
  399. async_unwrap_char(dev, &si->stats, &si->rx_buff, Ser2UTDR);
  400. async_unwrap_char(dev, &si->stats, &si->rx_buff, Ser2UTDR);
  401. async_unwrap_char(dev, &si->stats, &si->rx_buff, Ser2UTDR);
  402. }
  403. if (status & (UTSR0_RFS | UTSR0_RID)) {
  404. /*
  405.  * Fifo contains more than 1 character.
  406.  */
  407. do {
  408. async_unwrap_char(dev, &si->stats, &si->rx_buff,
  409.   Ser2UTDR);
  410. } while (Ser2UTSR1 & UTSR1_RNE);
  411. dev->last_rx = jiffies;
  412. }
  413. if (status & UTSR0_TFS && si->tx_buff.len) {
  414. /*
  415.  * Transmitter FIFO is not full
  416.  */
  417. do {
  418. Ser2UTDR = *si->tx_buff.data++;
  419. si->tx_buff.len -= 1;
  420. } while (Ser2UTSR1 & UTSR1_TNF && si->tx_buff.len);
  421. if (si->tx_buff.len == 0) {
  422. si->stats.tx_packets++;
  423. si->stats.tx_bytes += si->tx_buff.data -
  424.       si->tx_buff.head;
  425. /*
  426.  * We need to ensure that the transmitter has
  427.  * finished.
  428.  */
  429. do
  430. rmb();
  431. while (Ser2UTSR1 & UTSR1_TBY);
  432. /*
  433.  * Ok, we've finished transmitting.  Now enable
  434.  * the receiver.  Sometimes we get a receive IRQ
  435.  * immediately after a transmit...
  436.  */
  437. Ser2UTSR0 = UTSR0_REB | UTSR0_RBB | UTSR0_RID;
  438. Ser2UTCR3 = UTCR3_RIE | UTCR3_RXE | UTCR3_TXE;
  439. if (si->newspeed) {
  440. sa1100_irda_set_speed(si, si->newspeed);
  441. si->newspeed = 0;
  442. }
  443. /* I'm hungry! */
  444. netif_wake_queue(dev);
  445. }
  446. }
  447. }
  448. static void sa1100_irda_fir_error(struct sa1100_irda *si, struct net_device *dev)
  449. {
  450. struct sk_buff *skb = si->rxskb;
  451. dma_addr_t dma_addr;
  452. unsigned int len, stat, data;
  453. if (!skb) {
  454. printk(KERN_ERR "sa1100_ir: SKB is NULL!n");
  455. return;
  456. }
  457. /*
  458.  * Get the current data position.
  459.  */
  460. sa1100_dma_get_current(si->rxdma, NULL, &dma_addr);
  461. len = dma_addr - si->rxbuf_dma;
  462. pci_unmap_single(NULL, si->rxbuf_dma, len, PCI_DMA_FROMDEVICE);
  463. do {
  464. /*
  465.  * Read Status, and then Data.
  466.  */
  467. stat = Ser2HSSR1;
  468. rmb();
  469. data = Ser2HSDR;
  470. if (stat & (HSSR1_CRE | HSSR1_ROR)) {
  471. si->stats.rx_errors++;
  472. if (stat & HSSR1_CRE)
  473. si->stats.rx_crc_errors++;
  474. if (stat & HSSR1_ROR)
  475. si->stats.rx_frame_errors++;
  476. } else
  477. skb->data[len++] = data;
  478. /*
  479.  * If we hit the end of frame, there's
  480.  * no point in continuing.
  481.  */
  482. if (stat & HSSR1_EOF)
  483. break;
  484. } while (Ser2HSSR0 & HSSR0_EIF);
  485. if (stat & HSSR1_EOF) {
  486. si->rxskb = NULL;
  487. skb_put(skb, len);
  488. skb->dev = dev;
  489. skb->mac.raw = skb->data;
  490. skb->protocol = htons(ETH_P_IRDA);
  491. si->stats.rx_packets++;
  492. si->stats.rx_bytes += len;
  493. /*
  494.  * Before we pass the buffer up, allocate a new one.
  495.  */
  496. sa1100_irda_rx_alloc(si);
  497. netif_rx(skb);
  498. } else {
  499. /*
  500.  * Remap the buffer.
  501.  */
  502. si->rxbuf_dma = pci_map_single(NULL, si->rxskb->data,
  503. HPSIR_MAX_RXLEN,
  504. PCI_DMA_FROMDEVICE);
  505. }
  506. }
  507. /*
  508.  * FIR format interrupt service routine.  We only have to
  509.  * handle RX events; transmit events go via the TX DMA handler.
  510.  *
  511.  * No matter what, we disable RX, process, and the restart RX.
  512.  */
  513. static void sa1100_irda_fir_irq(struct net_device *dev)
  514. {
  515. struct sa1100_irda *si = dev->priv;
  516. /*
  517.  * Stop RX DMA
  518.  */
  519. sa1100_dma_stop(si->rxdma);
  520. /*
  521.  * Framing error - we throw away the packet completely.
  522.  * Clearing RXE flushes the error conditions and data
  523.  * from the fifo.
  524.  */
  525. if (Ser2HSSR0 & (HSSR0_FRE | HSSR0_RAB)) {
  526. si->stats.rx_errors++;
  527. if (Ser2HSSR0 & HSSR0_FRE)
  528. si->stats.rx_frame_errors++;
  529. /*
  530.  * Clear out the DMA...
  531.  */
  532. Ser2HSCR0 = si->hscr0 | HSCR0_HSSP;
  533. /*
  534.  * Clear selected status bits now, so we
  535.  * don't miss them next time around.
  536.  */
  537. Ser2HSSR0 = HSSR0_FRE | HSSR0_RAB;
  538. }
  539. /*
  540.  * Deal with any receive errors.  The any of the lowest
  541.  * 8 bytes in the FIFO may contain an error.  We must read
  542.  * them one by one.  The "error" could even be the end of
  543.  * packet!
  544.  */
  545. if (Ser2HSSR0 & HSSR0_EIF)
  546. sa1100_irda_fir_error(si, dev);
  547. /*
  548.  * No matter what happens, we must restart reception.
  549.  */
  550. sa1100_irda_rx_dma_start(si);
  551. }
  552. static void sa1100_irda_irq(int irq, void *dev_id, struct pt_regs *regs)
  553. {
  554. struct net_device *dev = dev_id;
  555. if (IS_FIR(((struct sa1100_irda *)dev->priv)))
  556. sa1100_irda_fir_irq(dev);
  557. else
  558. sa1100_irda_hpsir_irq(dev);
  559. }
  560. /*
  561.  * TX DMA completion handler.
  562.  */
  563. static void sa1100_irda_txdma_irq(void *id, int len)
  564. {
  565. struct net_device *dev = id;
  566. struct sa1100_irda *si = dev->priv;
  567. struct sk_buff *skb = si->txskb;
  568. si->txskb = NULL;
  569. /*
  570.  * Wait for the transmission to complete.  Unfortunately,
  571.  * the hardware doesn't give us an interrupt to indicate
  572.  * "end of frame".
  573.  */
  574. do
  575. rmb();
  576. while (!(Ser2HSSR0 & HSSR0_TUR) || Ser2HSSR1 & HSSR1_TBY);
  577. /*
  578.  * Clear the transmit underrun bit.
  579.  */
  580. Ser2HSSR0 = HSSR0_TUR;
  581. /*
  582.  * Do we need to change speed?  Note that we're lazy
  583.  * here - we don't free the old rxskb.  We don't need
  584.  * to allocate a buffer either.
  585.  */
  586. if (si->newspeed) {
  587. sa1100_irda_set_speed(si, si->newspeed);
  588. si->newspeed = 0;
  589. }
  590. /*
  591.  * Start reception.  This disables the transmitter for
  592.  * us.  This will be using the existing RX buffer.
  593.  */
  594. sa1100_irda_rx_dma_start(si);
  595. /*
  596.  * Account and free the packet.
  597.  */
  598. if (skb) {
  599. pci_unmap_single(NULL, si->txbuf_dma, len, PCI_DMA_TODEVICE);
  600. si->stats.tx_packets ++;
  601. si->stats.tx_bytes += len;
  602. dev_kfree_skb_irq(skb);
  603. }
  604. /*
  605.  * Make sure that the TX queue is available for sending
  606.  * (for retries).  TX has priority over RX at all times.
  607.  */
  608. netif_wake_queue(dev);
  609. }
  610. /*
  611.  * Note that we will never build up a backlog of frames; the protocol is a
  612.  * half duplex protocol which basically means we transmit a frame, we
  613.  * receive a frame, we transmit the next frame etc.
  614.  */
  615. static int sa1100_irda_hard_xmit(struct sk_buff *skb, struct net_device *dev)
  616. {
  617. struct sa1100_irda *si = dev->priv;
  618. int speed = irda_get_next_speed(skb);
  619. /*
  620.  * Does this packet contain a request to change the interface
  621.  * speed?  If so, remember it until we complete the transmission
  622.  * of this frame.
  623.  */
  624. if (speed != si->speed && speed != -1)
  625. si->newspeed = speed;
  626. /*
  627.  * If this is an empty frame, we can bypass a lot.
  628.  */
  629. if (skb->len == 0) {
  630. if (si->newspeed) {
  631. si->newspeed = 0;
  632. sa1100_irda_set_speed(si, speed);
  633. }
  634. dev_kfree_skb(skb);
  635. return 0;
  636. }
  637. if (!IS_FIR(si)) {
  638. si->tx_buff.data = si->tx_buff.head;
  639. si->tx_buff.len  = async_wrap_skb(skb, si->tx_buff.data,
  640.   si->tx_buff.truesize);
  641. /*
  642.  * Set the transmit interrupt enable.  This will fire
  643.  * off an interrupt immediately.  Note that we disable
  644.  * the receiver so we won't get spurious characteres
  645.  * received.
  646.  */
  647. Ser2UTCR3 = UTCR3_TIE | UTCR3_TXE;
  648. dev_kfree_skb(skb);
  649. } else {
  650. int mtt = irda_get_mtt(skb);
  651. /*
  652.  * We must not be transmitting...
  653.  */
  654. if (si->txskb)
  655. BUG();
  656. netif_stop_queue(dev);
  657. si->txskb = skb;
  658. si->txbuf_dma = pci_map_single(NULL, skb->data,
  659.  skb->len, PCI_DMA_TODEVICE);
  660. sa1100_dma_queue_buffer(si->txdma, dev, si->txbuf_dma,
  661. skb->len);
  662. /*
  663.  * If we have a mean turn-around time, impose the specified
  664.  * specified delay.  We could shorten this by timing from
  665.  * the point we received the packet.
  666.  */
  667. if (mtt)
  668. udelay(mtt);
  669. Ser2HSCR0 = si->hscr0 | HSCR0_HSSP | HSCR0_TXE;
  670. }
  671. dev->trans_start = jiffies;
  672. return 0;
  673. }
  674. static int
  675. sa1100_irda_ioctl(struct net_device *dev, struct ifreq *ifreq, int cmd)
  676. {
  677. struct if_irda_req *rq = (struct if_irda_req *)ifreq;
  678. struct sa1100_irda *si = dev->priv;
  679. int ret = -EOPNOTSUPP;
  680. switch (cmd) {
  681. case SIOCSBANDWIDTH:
  682. if (capable(CAP_NET_ADMIN)) {
  683. /*
  684.  * We are unable to set the speed if the
  685.  * device is not running.
  686.  */
  687. if (si->open) {
  688. ret = sa1100_irda_set_speed(si,
  689. rq->ifr_baudrate);
  690. } else {
  691. printk("sa1100_irda_ioctl: SIOCSBANDWIDTH: !netif_runningn");
  692. ret = 0;
  693. }
  694. }
  695. break;
  696. case SIOCSMEDIABUSY:
  697. ret = -EPERM;
  698. if (capable(CAP_NET_ADMIN)) {
  699. irda_device_set_media_busy(dev, TRUE);
  700. ret = 0;
  701. }
  702. break;
  703. case SIOCGRECEIVING:
  704. rq->ifr_receiving = IS_FIR(si) ? 0
  705. : si->rx_buff.state != OUTSIDE_FRAME;
  706. break;
  707. default:
  708. break;
  709. }
  710. return ret;
  711. }
  712. static struct net_device_stats *sa1100_irda_stats(struct net_device *dev)
  713. {
  714. struct sa1100_irda *si = dev->priv;
  715. return &si->stats;
  716. }
  717. static int sa1100_irda_start(struct net_device *dev)
  718. {
  719. struct sa1100_irda *si = dev->priv;
  720. int err;
  721. MOD_INC_USE_COUNT;
  722. si->speed = 9600;
  723. err = request_irq(dev->irq, sa1100_irda_irq, 0, dev->name, dev);
  724. if (err)
  725. goto err_irq;
  726. err = sa1100_request_dma(&si->rxdma, "IrDA receive", DMA_Ser2HSSPRd);
  727. if (err)
  728. goto err_rx_dma;
  729. err = sa1100_request_dma(&si->txdma, "IrDA transmit", DMA_Ser2HSSPWr);
  730. if (err)
  731. goto err_tx_dma;
  732. /*
  733.  * The interrupt must remain disabled for now.
  734.  */
  735. disable_irq(dev->irq);
  736. /*
  737.  * Setup the serial port for the specified speed.
  738.  */
  739. err = sa1100_irda_startup(si);
  740. if (err)
  741. goto err_startup;
  742. /*
  743.  * Open a new IrLAP layer instance.
  744.  */
  745. si->irlap = irlap_open(dev, &si->qos, "sa1100");
  746. err = -ENOMEM;
  747. if (!si->irlap)
  748. goto err_irlap;
  749. sa1100_dma_set_callback(si->txdma, sa1100_irda_txdma_irq);
  750. /*
  751.  * Now enable the interrupt and start the queue
  752.  */
  753. si->open = 1;
  754. sa1100_set_power(si, power_level); /* low power mode */
  755. enable_irq(dev->irq);
  756. netif_start_queue(dev);
  757. return 0;
  758. err_irlap:
  759. si->open = 0;
  760. sa1100_irda_shutdown(si);
  761. err_startup:
  762. sa1100_free_dma(si->txdma);
  763. err_tx_dma:
  764. sa1100_free_dma(si->rxdma);
  765. err_rx_dma:
  766. free_irq(dev->irq, dev);
  767. err_irq:
  768. MOD_DEC_USE_COUNT;
  769. return err;
  770. }
  771. static int sa1100_irda_stop(struct net_device *dev)
  772. {
  773. struct sa1100_irda *si = dev->priv;
  774. disable_irq(dev->irq);
  775. sa1100_irda_shutdown(si);
  776. /*
  777.  * If we have been doing DMA receive, make sure we
  778.  * tidy that up cleanly.
  779.  */
  780. if (si->rxskb) {
  781. pci_unmap_single(NULL, si->rxbuf_dma, HPSIR_MAX_RXLEN,
  782.  PCI_DMA_FROMDEVICE);
  783. dev_kfree_skb(si->rxskb);
  784. si->rxskb = NULL;
  785. }
  786. /* Stop IrLAP */
  787. if (si->irlap) {
  788. irlap_close(si->irlap);
  789. si->irlap = NULL;
  790. }
  791. netif_stop_queue(dev);
  792. si->open = 0;
  793. /*
  794.  * Free resources
  795.  */
  796. sa1100_free_dma(si->txdma);
  797. sa1100_free_dma(si->rxdma);
  798. free_irq(dev->irq, dev);
  799. sa1100_set_power(si, 0);
  800. MOD_DEC_USE_COUNT;
  801. return 0;
  802. }
  803. static int sa1100_irda_init_iobuf(iobuff_t *io, int size)
  804. {
  805. io->head = kmalloc(size, GFP_KERNEL | GFP_DMA);
  806. if (io->head != NULL) {
  807. io->truesize = size;
  808. io->in_frame = FALSE;
  809. io->state    = OUTSIDE_FRAME;
  810. io->data     = io->head;
  811. }
  812. return io->head ? 0 : -ENOMEM;
  813. }
  814. static int sa1100_irda_net_init(struct net_device *dev)
  815. {
  816. struct sa1100_irda *si = dev->priv;
  817. unsigned int baudrate_mask;
  818. int err = -ENOMEM;
  819. si = kmalloc(sizeof(struct sa1100_irda), GFP_KERNEL);
  820. if (!si)
  821. goto out;
  822. memset(si, 0, sizeof(*si));
  823. /*
  824.  * Initialise the HP-SIR buffers
  825.  */
  826. err = sa1100_irda_init_iobuf(&si->rx_buff, 14384);
  827. if (err)
  828. goto out;
  829. err = sa1100_irda_init_iobuf(&si->tx_buff, 4000);
  830. if (err)
  831. goto out_free_rx;
  832. dev->priv = si;
  833. dev->hard_start_xmit = sa1100_irda_hard_xmit;
  834. dev->open = sa1100_irda_start;
  835. dev->stop = sa1100_irda_stop;
  836. dev->do_ioctl = sa1100_irda_ioctl;
  837. dev->get_stats = sa1100_irda_stats;
  838. irda_device_setup(dev);
  839. irda_init_max_qos_capabilies(&si->qos);
  840. /*
  841.  * We support original IRDA up to 115k2. (we don't currently
  842.  * support 4Mbps).  Min Turn Time set to 1ms or greater.
  843.  */
  844. baudrate_mask = IR_9600|IR_19200|IR_38400|IR_57600|IR_115200;
  845. baudrate_mask |= IR_4000000 << 8;
  846. si->qos.baud_rate.bits &= baudrate_mask;
  847. si->qos.min_turn_time.bits = 7;
  848. irda_qos_bits_to_value(&si->qos);
  849. si->utcr4 = UTCR4_HPSIR;
  850. if (tx_lpm)
  851. si->utcr4 |= UTCR4_Z1_6us;
  852. /*
  853.  * Initially enable HP-SIR modulation, and ensure that the port
  854.  * is disabled.
  855.  */
  856. Ser2UTCR3 = 0;
  857. Ser2UTCR4 = si->utcr4;
  858. Ser2HSCR0 = HSCR0_UART;
  859. #ifdef CONFIG_PM
  860. /*
  861.  * Power-Management is optional.
  862.  */
  863. si->pmdev = pm_register(PM_SYS_DEV, PM_SYS_IRDA, sa1100_irda_pmproc);
  864. if (si->pmdev)
  865. si->pmdev->data = dev;
  866. #endif
  867. return 0;
  868. kfree(si->tx_buff.head);
  869. out_free_rx:
  870. kfree(si->rx_buff.head);
  871. out:
  872. kfree(si);
  873. return err;
  874. }
  875. /*
  876.  * Remove all traces of this driver module from the kernel, so we can't be
  877.  * called.  Note that the device has already been stopped, so we don't have
  878.  * to worry about interrupts or dma.
  879.  */
  880. static void sa1100_irda_net_uninit(struct net_device *dev)
  881. {
  882. struct sa1100_irda *si = dev->priv;
  883. dev->hard_start_xmit = NULL;
  884. dev->open = NULL;
  885. dev->stop = NULL;
  886. dev->do_ioctl = NULL;
  887. dev->get_stats = NULL;
  888. dev->priv = NULL;
  889. pm_unregister(si->pmdev);
  890. kfree(si->tx_buff.head);
  891. kfree(si->rx_buff.head);
  892. kfree(si);
  893. }
  894. #ifdef MODULE
  895. static
  896. #endif
  897. int __init sa1100_irda_init(void)
  898. {
  899. struct net_device *dev;
  900. int err;
  901. /*
  902.  * Limit power level a sensible range.
  903.  */
  904. if (power_level < 1)
  905. power_level = 1;
  906. if (power_level > 3)
  907. power_level = 3;
  908. err = request_mem_region(__PREG(Ser2UTCR0), 0x24, "IrDA") ? 0 : -EBUSY;
  909. if (err)
  910. goto err_mem_1;
  911. err = request_mem_region(__PREG(Ser2HSCR0), 0x1c, "IrDA") ? 0 : -EBUSY;
  912. if (err)
  913. goto err_mem_2;
  914. err = request_mem_region(__PREG(Ser2HSCR2), 0x04, "IrDA") ? 0 : -EBUSY;
  915. if (err)
  916. goto err_mem_3;
  917. rtnl_lock();
  918. dev = dev_alloc("irda%d", &err);
  919. if (dev) {
  920. dev->irq    = IRQ_Ser2ICP;
  921. dev->init   = sa1100_irda_net_init;
  922. dev->uninit = sa1100_irda_net_uninit;
  923. err = register_netdevice(dev);
  924. if (err)
  925. kfree(dev);
  926. else
  927. netdev = dev;
  928. }
  929. rtnl_unlock();
  930. if (err) {
  931. release_mem_region(__PREG(Ser2HSCR2), 0x04);
  932. err_mem_3:
  933. release_mem_region(__PREG(Ser2HSCR0), 0x1c);
  934. err_mem_2:
  935. release_mem_region(__PREG(Ser2UTCR0), 0x24);
  936. }
  937. err_mem_1:
  938. return err;
  939. }
  940. static void __exit sa1100_irda_exit(void)
  941. {
  942. struct net_device *dev = netdev;
  943. netdev = NULL;
  944. if (dev) {
  945. rtnl_lock();
  946. unregister_netdevice(dev);
  947. rtnl_unlock();
  948. }
  949. release_mem_region(__PREG(Ser2HSCR2), 0x04);
  950. release_mem_region(__PREG(Ser2HSCR0), 0x1c);
  951. release_mem_region(__PREG(Ser2UTCR0), 0x24);
  952. /*
  953.  * We now know that the netdevice is no longer in use, and all
  954.  * references to our driver have been removed.  The only structure
  955.  * which may still be present is the netdevice, which will get
  956.  * cleaned up by net/core/dev.c
  957.  */
  958. }
  959. #ifdef MODULE
  960. module_init(sa1100_irda_init);
  961. module_exit(sa1100_irda_exit);
  962. #endif
  963. MODULE_AUTHOR("Russell King <rmk@arm.linux.org.uk>");
  964. MODULE_DESCRIPTION("StrongARM SA1100 IrDA driver");
  965. MODULE_LICENSE("GPL");
  966. MODULE_PARM(power_level, "i");
  967. MODULE_PARM_DESC(power_level, "IrDA power level, 1 (low) to 3 (high)");
  968. MODULE_PARM(tx_lpm, "i");
  969. MODULE_PARM_DESC(tx_lpm, "Enable transmitter low power (1.6us) mode");
  970. EXPORT_NO_SYMBOLS;