24 #include <linux/module.h>
26 #define DRIVER_NAME "vlsi_ir"
27 #define DRIVER_VERSION "v0.5"
28 #define DRIVER_DESCRIPTION "IrDA SIR/MIR/FIR driver for VLSI 82C147"
37 #include <linux/kernel.h>
40 #include <linux/pci.h>
41 #include <linux/slab.h>
42 #include <linux/netdevice.h>
45 #include <linux/time.h>
49 #include <asm/uaccess.h>
50 #include <asm/byteorder.h>
86 static int clksrc = 0;
98 static int ringsize[] = {8,8};
111 static int sirpulse = 1;
122 static int qos_mtt_bits = 0x07;
124 MODULE_PARM_DESC(qos_mtt_bits,
"IrLAP bitfield representing min-turn-time");
128 static void vlsi_reg_debug(
unsigned iobase,
const char *
s)
133 for (i = 0; i < 0x20; i++)
134 printk(
"%02x", (
unsigned)
inb((iobase+i)));
138 static void vlsi_ring_debug(
struct vlsi_ring *
r)
143 printk(
KERN_DEBUG "%s - ring %p / size %u / mask 0x%04x / len %u / dir %d / hw %p\n",
147 for (i = 0; i < r->
size; i++) {
152 __func__, (
unsigned) rd_get_status(rd),
153 (
unsigned) rd_get_count(rd), (
unsigned) rd_get_addr(rd));
162 #ifdef CONFIG_PROC_FS
169 seq_printf(seq,
"\n%s (vid/did: [%04x:%04x])\n",
172 seq_printf(seq,
"resources: irq=%u / io=0x%04x / dma_mask=0x%016Lx\n",
175 for (i = 0; i < 0x20; i++)
185 unsigned delta1, delta2;
189 seq_printf(seq,
"\n%s link state: %s / %s / %s / %s\n", ndev->
name,
190 netif_device_present(ndev) ?
"attached" :
"detached",
191 netif_running(ndev) ?
"running" :
"not running",
192 netif_carrier_ok(ndev) ?
"carrier ok" :
"no carrier",
193 netif_queue_stopped(ndev) ?
"queue stopped" :
"queue running");
195 if (!netif_running(ndev))
207 (byte&2) ? ((byte&1) ?
"3e8" :
"2e8")
208 : ((byte&1) ?
"3f8" :
"2f8"));
211 seq_printf(seq,
"CLKCTL: PLL %s%s%s / clock %s / wakeup %s\n",
218 seq_printf(seq,
"MSTRPAGE: 0x%02x\n", (
unsigned)byte);
240 seq_printf(seq,
"IRCFG:%s%s%s%s%s%s%s%s%s%s%s%s%s\n",
255 seq_printf(seq,
"IRENABLE:%s%s%s%s%s%s%s%s\n",
265 seq_printf(seq,
"PHYCTL: baud-divisor=%u / pulsewidth=%u / preamble=%u\n",
270 seq_printf(seq,
"NPHYCTL: baud-divisor=%u / pulsewidth=%u / preamble=%u\n",
275 seq_printf(seq,
"MAXPKT: max. rx packet size = %u\n", word);
277 seq_printf(seq,
"RCVBCNT: rx-fifo filling level = %u\n", word);
280 seq_printf(seq,
"IrPHY setup: %d baud - %s encoding\n", idev->
baud,
283 if (now.tv_usec >= idev->
last_rx.tv_usec) {
284 delta2 = now.tv_usec - idev->
last_rx.tv_usec;
288 delta2 = 1000000 + now.tv_usec - idev->
last_rx.tv_usec;
292 now.tv_sec - idev->
last_rx.tv_sec - delta1, delta2);
294 seq_printf(seq,
"RX: packets=%lu / bytes=%lu / errors=%lu / dropped=%lu",
296 ndev->
stats.rx_dropped);
297 seq_printf(seq,
" / overrun=%lu / length=%lu / frame=%lu / crc=%lu\n",
298 ndev->
stats.rx_over_errors, ndev->
stats.rx_length_errors,
299 ndev->
stats.rx_frame_errors, ndev->
stats.rx_crc_errors);
300 seq_printf(seq,
"TX: packets=%lu / bytes=%lu / errors=%lu / dropped=%lu / fifo=%lu\n",
302 ndev->
stats.tx_dropped, ndev->
stats.tx_fifo_errors);
312 seq_printf(seq,
"size %u / mask 0x%04x / len %u / dir %d / hw %p\n",
316 seq_printf(seq,
"head = %d / tail = %d ", h, t);
320 if (((t+1)&r->
mask) == h)
325 j = (unsigned) rd_get_count(rd);
326 seq_printf(seq,
"current: rd = %d / status = %02x / len = %u\n",
327 h, (
unsigned)rd_get_status(rd), j);
332 for (i = 0; i <
j; i++)
333 seq_printf(seq,
" %02x", (
unsigned)((
unsigned char *)rd->
buf)[i]);
337 for (i = 0; i < r->
size; i++) {
341 seq_printf(seq,
" hw: status=%02x count=%u busaddr=0x%08x\n",
342 (
unsigned) rd_get_status(rd),
343 (
unsigned) rd_get_count(rd), (
unsigned) rd_get_addr(rd));
347 static int vlsi_seq_show(
struct seq_file *seq,
void *
v)
355 (clksrc>=2) ? ((clksrc==3)?
"40MHz XCLK":
"48MHz XCLK")
356 : ((clksrc==1)?
"48MHz PLL":
"autodetect"));
358 ringsize[0], ringsize[1]);
359 seq_printf(seq,
"sirpulse: %s\n", (sirpulse)?
"3/16 bittime":
"short");
360 seq_printf(seq,
"qos_mtt_bits: 0x%02x\n", (
unsigned)qos_mtt_bits);
364 vlsi_proc_pdev(seq, idev->
pdev);
366 if (idev->
pdev->current_state == 0)
367 vlsi_proc_ndev(seq, ndev);
369 seq_printf(seq,
"\nPCI controller down - resume_ok = %d\n",
372 seq_printf(seq,
"\n--------- RX ring -----------\n\n");
373 vlsi_proc_ring(seq, idev->
rx_ring);
374 seq_printf(seq,
"\n--------- TX ring -----------\n\n");
375 vlsi_proc_ring(seq, idev->
tx_ring);
379 spin_unlock_irqrestore(&idev->
lock, flags);
391 .open = vlsi_seq_open,
397 #define VLSI_PROC_FOPS (&vlsi_proc_fops)
400 #define VLSI_PROC_FOPS NULL
413 if (!size || ((size-1)&size)!=0)
430 for (i = 0; i <
size; i++) {
432 memset(rd, 0,
sizeof(*rd));
436 !(busaddr = pci_map_single(pdev, rd->
buf, len, dir))) {
438 IRDA_ERROR(
"%s: failed to create PCI-MAP for %p",
443 for (j = 0; j <
i; j++) {
445 busaddr = rd_get_addr(rd);
446 rd_set_addr_status(rd, 0, 0);
448 pci_unmap_single(pdev, busaddr, len, dir);
455 rd_set_addr_status(rd, busaddr, 0);
462 static int vlsi_free_ring(
struct vlsi_ring *r)
468 for (i = 0; i < r->
size; i++) {
472 busaddr = rd_get_addr(rd);
473 rd_set_addr_status(rd, 0, 0);
475 pci_unmap_single(r->
pdev, busaddr, r->
len, r->
dir);
492 IRDA_ERROR(
"%s: insufficient memory for descriptor rings\n",
499 idev->
rx_ring = vlsi_alloc_ring(idev->
pdev, hwmap, ringsize[1],
505 idev->
tx_ring = vlsi_alloc_ring(idev->
pdev, hwmap, ringsize[0],
549 pci_dma_sync_single_for_cpu(r->
pdev, rd_get_addr(rd), r->
len, r->
dir);
551 status = rd_get_status(rd);
564 len = rd_get_count(rd);
568 IRDA_DEBUG(0,
"%s: strange frame (len=%d)\n", __func__, len);
599 skb_reset_mac_header(skb);
606 rd_set_status(rd, 0);
610 return (ret) ? -ret : len;
613 static void vlsi_fill_rx(
struct vlsi_ring *r)
617 for (rd = ring_last(r); rd !=
NULL; rd = ring_put(r)) {
618 if (rd_is_active(rd)) {
627 skb_reserve(rd->
skb,1);
634 pci_dma_sync_single_for_device(r->
pdev, rd_get_addr(rd), r->
len, r->
dir);
639 static void vlsi_rx_interrupt(
struct net_device *ndev)
646 for (rd = ring_first(r); rd !=
NULL; rd = ring_get(r)) {
648 if (rd_is_active(rd))
651 ret = vlsi_process_rx(r, rd);
655 ndev->
stats.rx_errors++;
657 ndev->
stats.rx_dropped++;
659 ndev->
stats.rx_over_errors++;
661 ndev->
stats.rx_length_errors++;
663 ndev->
stats.rx_frame_errors++;
665 ndev->
stats.rx_crc_errors++;
668 ndev->
stats.rx_packets++;
677 if (ring_first(r) ==
NULL) {
679 IRDA_ERROR(
"%s: rx ring exhausted!\n", __func__);
695 for (rd = ring_first(r); rd !=
NULL; rd = ring_get(r)) {
698 if (rd_is_active(rd)) {
699 rd_set_status(rd, 0);
700 if (rd_get_count(rd)) {
701 IRDA_DEBUG(0,
"%s - dropping rx packet\n", __func__);
705 pci_dma_sync_single_for_cpu(r->
pdev, rd_get_addr(rd), r->
len, r->
dir);
712 ret = vlsi_process_rx(r, rd);
716 ndev->
stats.rx_errors++;
717 if (ret & VLSI_RX_DROP)
718 ndev->
stats.rx_dropped++;
719 if (ret & VLSI_RX_OVER)
720 ndev->
stats.rx_over_errors++;
721 if (ret & VLSI_RX_LENGTH)
722 ndev->
stats.rx_length_errors++;
723 if (ret & VLSI_RX_FRAME)
724 ndev->
stats.rx_frame_errors++;
726 ndev->
stats.rx_crc_errors++;
729 ndev->
stats.rx_packets++;
743 pci_dma_sync_single_for_cpu(r->
pdev, rd_get_addr(rd), r->
len, r->
dir);
745 status = rd_get_status(rd);
750 rd_set_status(rd, 0);
758 len = rd_get_count(rd);
763 return (ret) ? -ret : len;
777 if (baudrate == 4000000) {
782 else if (baudrate == 1152000) {
792 IRDA_WARNING(
"%s: undefined baudrate %d - fallback to 9600!\n",
802 nphyctl =
PHYCTL_SIR(baudrate,sirpulse,clksrc==3);
810 IRDA_DEBUG(0,
"%s: rx fifo not empty(%d)\n", __func__, fifocnt);
833 if (config != (IRENABLE_PHYANDCLOCK|IRENABLE_ENRXST)) {
853 vlsi_reg_debug(iobase,__func__);
873 speed = irda_get_next_speed(skb);
875 if (speed != -1 && speed != idev->
baud) {
876 netif_stop_queue(ndev);
886 msg =
"bogus zero-length packet";
909 vlsi_set_baud(idev, iobase);
910 netif_wake_queue(ndev);
918 spin_unlock_irqrestore(&idev->
lock, flags);
927 msg =
"ring full, but queue wasn't stopped";
931 if (rd_is_active(rd)) {
932 msg =
"entry still owned by hw";
937 msg =
"tx ring entry without pci buffer";
942 msg =
"ring entry with old skb still attached";
947 spin_unlock_irqrestore(&idev->
lock, flags);
949 if ((mtt = irda_get_mtt(skb)) > 0) {
953 if (
ready.tv_usec >= 1000000) {
954 ready.tv_usec -= 1000000;
959 if (now.tv_sec >
ready.tv_sec ||
960 (now.tv_sec==
ready.tv_sec && now.tv_usec>=
ready.tv_usec))
986 IRDA_WARNING(
"%s: possible buffer overflow with SIR wrapping!\n",
994 msg =
"frame exceeds tx buffer length";
998 skb_copy_from_linear_data(skb, rd->
buf, len);
1003 rd_set_count(rd, len);
1004 rd_set_status(rd, status);
1010 pci_dma_sync_single_for_device(r->
pdev, rd_get_addr(rd), r->
len, r->
dir);
1032 IRDA_DEBUG(0,
"%s: rx fifo not empty(%d)\n", __func__, fifocnt);
1042 if (ring_put(r) ==
NULL) {
1043 netif_stop_queue(ndev);
1044 IRDA_DEBUG(3,
"%s: tx ring full - queue stopped\n", __func__);
1046 spin_unlock_irqrestore(&idev->
lock, flags);
1051 spin_unlock_irqrestore(&idev->
lock, flags);
1053 IRDA_WARNING(
"%s: dropping packet - %s\n", __func__, msg);
1055 ndev->
stats.tx_errors++;
1056 ndev->
stats.tx_dropped++;
1065 static void vlsi_tx_interrupt(
struct net_device *ndev)
1074 for (rd = ring_first(r); rd !=
NULL; rd = ring_get(r)) {
1076 if (rd_is_active(rd))
1079 ret = vlsi_process_tx(r, rd);
1083 ndev->
stats.tx_errors++;
1085 ndev->
stats.tx_dropped++;
1087 ndev->
stats.tx_fifo_errors++;
1090 ndev->
stats.tx_packets++;
1098 vlsi_set_baud(idev, iobase);
1117 if (netif_queue_stopped(ndev) && !idev->
new_baud) {
1118 netif_wake_queue(ndev);
1119 IRDA_DEBUG(3,
"%s: queue awoken\n", __func__);
1132 for (rd = ring_first(r); rd !=
NULL; rd = ring_get(r)) {
1135 if (rd_is_active(rd)) {
1136 rd_set_status(rd, 0);
1137 rd_set_count(rd, 0);
1138 pci_dma_sync_single_for_cpu(r->
pdev, rd_get_addr(rd), r->
len, r->
dir);
1143 IRDA_DEBUG(0,
"%s - dropping tx packet\n", __func__);
1147 ret = vlsi_process_tx(r, rd);
1151 ndev->
stats.tx_errors++;
1152 if (ret & VLSI_TX_DROP)
1153 ndev->
stats.tx_dropped++;
1155 ndev->
stats.tx_fifo_errors++;
1158 ndev->
stats.tx_packets++;
1167 static int vlsi_start_clock(
struct pci_dev *pdev)
1182 for (i = 500; i <= 10000; i += 50) {
1184 if (lock&CLKCTL_LOCK) {
1192 IRDA_ERROR(
"%s: no PLL or failed to lock!\n",
1201 IRDA_DEBUG(0,
"%s: PLL not locked, fallback to clksrc=%d\n",
1224 clkctl &= ~CLKCTL_CLKSTP;
1230 static void vlsi_stop_clock(
struct pci_dev *pdev)
1255 static inline void vlsi_clear_regs(
unsigned iobase)
1258 const unsigned chip_io_extent = 32;
1260 for (i = 0; i < chip_io_extent; i +=
sizeof(
u16))
1261 outw(0, iobase + i);
1264 static int vlsi_init_chip(
struct pci_dev *pdev)
1266 struct net_device *ndev = pci_get_drvdata(pdev);
1273 if (vlsi_start_clock(pdev)) {
1274 IRDA_ERROR(
"%s: no valid clock source\n", __func__);
1278 vlsi_clear_regs(iobase);
1302 vlsi_set_baud(idev, iobase);
1320 struct net_device *ndev = pci_get_drvdata(pdev);
1335 if (vlsi_init_chip(pdev) < 0) {
1352 struct net_device *ndev = pci_get_drvdata(pdev);
1354 unsigned long flags;
1364 spin_unlock_irqrestore(&idev->
lock,flags);
1366 vlsi_unarm_tx(idev);
1367 vlsi_unarm_rx(idev);
1369 vlsi_clear_regs(iobase);
1370 vlsi_stop_clock(pdev);
1379 static void vlsi_tx_timeout(
struct net_device *ndev)
1384 vlsi_reg_debug(ndev->
base_addr, __func__);
1385 vlsi_ring_debug(idev->
tx_ring);
1387 if (netif_running(ndev))
1388 netif_stop_queue(ndev);
1397 if (vlsi_start_hw(idev))
1398 IRDA_ERROR(
"%s: failed to restart hw - %s(%s) unusable!\n",
1399 __func__, pci_name(idev->
pdev), ndev->
name);
1401 netif_start_queue(ndev);
1408 unsigned long flags;
1419 idev->
new_baud = irq->ifr_baudrate;
1425 spin_unlock_irqrestore(&idev->
lock, flags);
1440 irq->ifr_receiving = (fifocnt!=0) ? 1 : 0;
1453 static irqreturn_t vlsi_interrupt(
int irq,
void *dev_instance)
1460 unsigned long flags;
1475 if (
unlikely(!(irintr & ~IRINTR_ACTIVITY)))
1478 if (irintr&IRINTR_RPKTINT)
1479 vlsi_rx_interrupt(ndev);
1481 if (irintr&IRINTR_TPKTINT)
1482 vlsi_tx_interrupt(ndev);
1484 }
while (--boguscount > 0);
1485 spin_unlock_irqrestore(&idev->
lock,flags);
1487 if (boguscount <= 0)
1495 static int vlsi_open(
struct net_device *ndev)
1515 drivername, ndev)) {
1517 __func__, ndev->
irq);
1521 if ((err = vlsi_create_hwif(idev)) != 0)
1527 goto errout_free_ring;
1533 if ((err = vlsi_start_hw(idev)) != 0)
1534 goto errout_close_irlap;
1536 netif_start_queue(ndev);
1545 vlsi_destroy_hwif(idev);
1554 static int vlsi_close(
struct net_device *ndev)
1558 netif_stop_queue(ndev);
1566 vlsi_destroy_hwif(idev);
1578 .ndo_open = vlsi_open,
1579 .ndo_stop = vlsi_close,
1580 .ndo_start_xmit = vlsi_hard_start_xmit,
1581 .ndo_do_ioctl = vlsi_ioctl,
1582 .ndo_tx_timeout = vlsi_tx_timeout,
1585 static int vlsi_irda_init(
struct net_device *ndev)
1599 IRDA_ERROR(
"%s: aborting due to PCI BM-DMA address limitations\n", __func__);
1611 idev->
qos.min_turn_time.bits = qos_mtt_bits;
1642 drivername, pci_name(pdev));
1652 IRDA_ERROR(
"%s: Unable to allocate device memory.\n",
1657 idev = netdev_priv(ndev);
1664 if (vlsi_irda_init(ndev) < 0)
1668 IRDA_ERROR(
"%s: register_netdev failed\n", __func__);
1672 if (vlsi_proc_root !=
NULL) {
1687 pci_set_drvdata(pdev, ndev);
1698 pci_set_drvdata(pdev,
NULL);
1704 struct net_device *ndev = pci_get_drvdata(pdev);
1708 IRDA_ERROR(
"%s: lost netdevice?\n", drivername);
1714 idev = netdev_priv(ndev);
1724 pci_set_drvdata(pdev,
NULL);
1726 IRDA_MESSAGE(
"%s: %s removed\n", drivername, pci_name(pdev));
1741 struct net_device *ndev = pci_get_drvdata(pdev);
1746 __func__, pci_name(pdev));
1749 idev = netdev_priv(ndev);
1762 if (netif_running(ndev)) {
1778 static int vlsi_irda_resume(
struct pci_dev *pdev)
1780 struct net_device *ndev = pci_get_drvdata(pdev);
1785 __func__, pci_name(pdev));
1788 idev = netdev_priv(ndev);
1793 __func__, pci_name(pdev));
1812 IRDA_WARNING(
"%s - hm, nothing to resume?\n", __func__);
1817 if (netif_running(ndev)) {
1819 vlsi_start_hw(idev);
1831 static struct pci_driver vlsi_irda_driver = {
1833 .id_table = vlsi_irda_table,
1834 .probe = vlsi_irda_probe,
1837 .suspend = vlsi_irda_suspend,
1838 .resume = vlsi_irda_resume,
1842 #define PROC_DIR ("driver/" DRIVER_NAME)
1844 static int __init vlsi_mod_init(
void)
1848 if (clksrc < 0 || clksrc > 3) {
1849 IRDA_ERROR(
"%s: invalid clksrc=%d\n", drivername, clksrc);
1853 for (i = 0; i < 2; i++) {
1854 switch(ringsize[i]) {
1862 IRDA_WARNING(
"%s: invalid %s ringsize %d, using default=8", drivername, (i)?
"rx":
"tx", ringsize[i]);
1868 sirpulse = !!sirpulse;
1876 ret = pci_register_driver(&vlsi_irda_driver);
1878 if (ret && vlsi_proc_root)
1884 static void __exit vlsi_mod_exit(
void)