1 /* sb1000.c: A General Instruments SB1000 driver for linux. */
3 Written 1998 by Franco Venturi.
5 Copyright 1998 by Franco Venturi.
6 Copyright 1994,1995 by Donald Becker.
7 Copyright 1993 United States Government as represented by the
8 Director, National Security Agency.
10 This driver is for the General Instruments SB1000 (internal SURFboard)
14 This program is free software; you can redistribute it
15 and/or modify it under the terms of the GNU General
16 Public License as published by the Free Software
17 Foundation; either version 2 of the License, or (at
18 your option) any later version.
24 Linus changed the timer interface. Should work on all recent
29 Small changes to make it work with 2.1.x kernels. Hopefully,
30 nothing major will change before official release of Linux 2.2.
32 Merged with 2.2 - Alan Cox
37 #include <linux/module.h>
38 #include <linux/kernel.h>
39 #include <linux/sched.h>
40 #include <linux/string.h>
41 #include <linux/interrupt.h>
42 #include <linux/errno.h>
43 #include <linux/if_cablemodem.h> /* for SIOGCM/SIOSCM stuff */
45 #include <linux/ioport.h>
46 #include <linux/netdevice.h>
47 #include <linux/if_arp.h>
48 #include <linux/skbuff.h>
49 #include <linux/delay.h> /* for udelay() */
50 #include <linux/etherdevice.h>
51 #include <linux/pnp.h>
52 #include <linux/init.h>
53 #include <linux/bitops.h>
54 #include <linux/gfp.h>
57 #include <asm/processor.h>
58 #include <linux/uaccess.h>
61 static int sb1000_debug = SB1000_DEBUG;
63 static const int sb1000_debug = 1;
66 static const int SB1000_IO_EXTENT = 8;
67 /* SB1000 Maximum Receive Unit */
68 static const int SB1000_MRU = 1500; /* octects */
71 struct sb1000_private {
72 struct sk_buff *rx_skb[NPIDS];
74 unsigned int rx_frames;
76 short rx_error_dpc_count;
77 unsigned char rx_session_id[NPIDS];
78 unsigned char rx_frame_id[NPIDS];
79 unsigned char rx_pkt_type[NPIDS];
82 /* prototypes for Linux interface */
83 extern int sb1000_probe(struct net_device *dev);
84 static int sb1000_open(struct net_device *dev);
85 static int sb1000_dev_ioctl (struct net_device *dev, struct ifreq *ifr, int cmd);
86 static netdev_tx_t sb1000_start_xmit(struct sk_buff *skb,
87 struct net_device *dev);
88 static irqreturn_t sb1000_interrupt(int irq, void *dev_id);
89 static int sb1000_close(struct net_device *dev);
92 /* SB1000 hardware routines to be used during open/configuration phases */
93 static int card_wait_for_busy_clear(const int ioaddr[],
95 static int card_wait_for_ready(const int ioaddr[], const char* name,
97 static int card_send_command(const int ioaddr[], const char* name,
98 const unsigned char out[], unsigned char in[]);
100 /* SB1000 hardware routines to be used during frame rx interrupt */
101 static int sb1000_wait_for_ready(const int ioaddr[], const char* name);
102 static int sb1000_wait_for_ready_clear(const int ioaddr[],
104 static void sb1000_send_command(const int ioaddr[], const char* name,
105 const unsigned char out[]);
106 static void sb1000_read_status(const int ioaddr[], unsigned char in[]);
107 static void sb1000_issue_read_command(const int ioaddr[],
110 /* SB1000 commands for open/configuration */
111 static int sb1000_reset(const int ioaddr[], const char* name);
112 static int sb1000_check_CRC(const int ioaddr[], const char* name);
113 static inline int sb1000_start_get_set_command(const int ioaddr[],
115 static int sb1000_end_get_set_command(const int ioaddr[],
117 static int sb1000_activate(const int ioaddr[], const char* name);
118 static int sb1000_get_firmware_version(const int ioaddr[],
119 const char* name, unsigned char version[], int do_end);
120 static int sb1000_get_frequency(const int ioaddr[], const char* name,
122 static int sb1000_set_frequency(const int ioaddr[], const char* name,
124 static int sb1000_get_PIDs(const int ioaddr[], const char* name,
126 static int sb1000_set_PIDs(const int ioaddr[], const char* name,
129 /* SB1000 commands for frame rx interrupt */
130 static int sb1000_rx(struct net_device *dev);
131 static void sb1000_error_dpc(struct net_device *dev);
133 static const struct pnp_device_id sb1000_pnp_ids[] = {
137 MODULE_DEVICE_TABLE(pnp, sb1000_pnp_ids);
139 static const struct net_device_ops sb1000_netdev_ops = {
140 .ndo_open = sb1000_open,
141 .ndo_start_xmit = sb1000_start_xmit,
142 .ndo_do_ioctl = sb1000_dev_ioctl,
143 .ndo_stop = sb1000_close,
144 .ndo_set_mac_address = eth_mac_addr,
145 .ndo_validate_addr = eth_validate_addr,
149 sb1000_probe_one(struct pnp_dev *pdev, const struct pnp_device_id *id)
151 struct net_device *dev;
152 unsigned short ioaddr[2], irq;
153 unsigned int serial_number;
156 if (pnp_device_attach(pdev) < 0)
158 if (pnp_activate_dev(pdev) < 0)
161 if (!pnp_port_valid(pdev, 0) || !pnp_port_valid(pdev, 1))
163 if (!pnp_irq_valid(pdev, 0))
166 serial_number = pdev->card->serial;
168 ioaddr[0] = pnp_port_start(pdev, 0);
169 ioaddr[1] = pnp_port_start(pdev, 0);
171 irq = pnp_irq(pdev, 0);
173 if (!request_region(ioaddr[0], 16, "sb1000"))
175 if (!request_region(ioaddr[1], 16, "sb1000"))
176 goto out_release_region0;
178 dev = alloc_etherdev(sizeof(struct sb1000_private));
181 goto out_release_regions;
185 dev->base_addr = ioaddr[0];
186 /* mem_start holds the second I/O address */
187 dev->mem_start = ioaddr[1];
190 if (sb1000_debug > 0)
191 printk(KERN_NOTICE "%s: sb1000 at (%#3.3lx,%#3.3lx), "
192 "S/N %#8.8x, IRQ %d.\n", dev->name, dev->base_addr,
193 dev->mem_start, serial_number, dev->irq);
196 * The SB1000 is an rx-only cable modem device. The uplink is a modem
197 * and we do not want to arp on it.
199 dev->flags = IFF_POINTOPOINT|IFF_NOARP;
201 SET_NETDEV_DEV(dev, &pdev->dev);
203 if (sb1000_debug > 0)
204 printk(KERN_NOTICE "%s", version);
206 dev->netdev_ops = &sb1000_netdev_ops;
208 /* hardware address is 0:0:serial_number */
209 dev->dev_addr[2] = serial_number >> 24 & 0xff;
210 dev->dev_addr[3] = serial_number >> 16 & 0xff;
211 dev->dev_addr[4] = serial_number >> 8 & 0xff;
212 dev->dev_addr[5] = serial_number >> 0 & 0xff;
214 pnp_set_drvdata(pdev, dev);
216 error = register_netdev(dev);
218 goto out_free_netdev;
224 release_region(ioaddr[1], 16);
226 release_region(ioaddr[0], 16);
228 pnp_disable_dev(pdev);
230 pnp_device_detach(pdev);
235 sb1000_remove_one(struct pnp_dev *pdev)
237 struct net_device *dev = pnp_get_drvdata(pdev);
239 unregister_netdev(dev);
240 release_region(dev->base_addr, 16);
241 release_region(dev->mem_start, 16);
245 static struct pnp_driver sb1000_driver = {
247 .id_table = sb1000_pnp_ids,
248 .probe = sb1000_probe_one,
249 .remove = sb1000_remove_one,
254 * SB1000 hardware routines to be used during open/configuration phases
257 static const int TimeOutJiffies = (875 * HZ) / 100;
259 /* Card Wait For Busy Clear (cannot be used during an interrupt) */
261 card_wait_for_busy_clear(const int ioaddr[], const char* name)
264 unsigned long timeout;
266 a = inb(ioaddr[0] + 7);
267 timeout = jiffies + TimeOutJiffies;
268 while (a & 0x80 || a & 0x40) {
272 a = inb(ioaddr[0] + 7);
273 if (time_after_eq(jiffies, timeout)) {
274 printk(KERN_WARNING "%s: card_wait_for_busy_clear timeout\n",
283 /* Card Wait For Ready (cannot be used during an interrupt) */
285 card_wait_for_ready(const int ioaddr[], const char* name, unsigned char in[])
288 unsigned long timeout;
290 a = inb(ioaddr[1] + 6);
291 timeout = jiffies + TimeOutJiffies;
292 while (a & 0x80 || !(a & 0x40)) {
296 a = inb(ioaddr[1] + 6);
297 if (time_after_eq(jiffies, timeout)) {
298 printk(KERN_WARNING "%s: card_wait_for_ready timeout\n",
304 in[1] = inb(ioaddr[0] + 1);
305 in[2] = inb(ioaddr[0] + 2);
306 in[3] = inb(ioaddr[0] + 3);
307 in[4] = inb(ioaddr[0] + 4);
308 in[0] = inb(ioaddr[0] + 5);
309 in[6] = inb(ioaddr[0] + 6);
310 in[5] = inb(ioaddr[1] + 6);
314 /* Card Send Command (cannot be used during an interrupt) */
316 card_send_command(const int ioaddr[], const char* name,
317 const unsigned char out[], unsigned char in[])
321 if ((status = card_wait_for_busy_clear(ioaddr, name)))
323 outb(0xa0, ioaddr[0] + 6);
324 outb(out[2], ioaddr[0] + 1);
325 outb(out[3], ioaddr[0] + 2);
326 outb(out[4], ioaddr[0] + 3);
327 outb(out[5], ioaddr[0] + 4);
328 outb(out[1], ioaddr[0] + 5);
329 outb(0xa0, ioaddr[0] + 6);
330 outb(out[0], ioaddr[0] + 7);
331 if (out[0] != 0x20 && out[0] != 0x30) {
332 if ((status = card_wait_for_ready(ioaddr, name, in)))
335 if (sb1000_debug > 3)
336 printk(KERN_DEBUG "%s: card_send_command "
337 "out: %02x%02x%02x%02x%02x%02x "
338 "in: %02x%02x%02x%02x%02x%02x%02x\n", name,
339 out[0], out[1], out[2], out[3], out[4], out[5],
340 in[0], in[1], in[2], in[3], in[4], in[5], in[6]);
342 if (sb1000_debug > 3)
343 printk(KERN_DEBUG "%s: card_send_command "
344 "out: %02x%02x%02x%02x%02x%02x\n", name,
345 out[0], out[1], out[2], out[3], out[4], out[5]);
348 if (out[1] == 0x1b) {
349 x = (out[2] == 0x02);
351 if (out[0] >= 0x80 && in[0] != (out[1] | 0x80))
359 * SB1000 hardware routines to be used during frame rx interrupt
361 static const int Sb1000TimeOutJiffies = 7 * HZ;
363 /* Card Wait For Ready (to be used during frame rx) */
365 sb1000_wait_for_ready(const int ioaddr[], const char* name)
367 unsigned long timeout;
369 timeout = jiffies + Sb1000TimeOutJiffies;
370 while (inb(ioaddr[1] + 6) & 0x80) {
371 if (time_after_eq(jiffies, timeout)) {
372 printk(KERN_WARNING "%s: sb1000_wait_for_ready timeout\n",
377 timeout = jiffies + Sb1000TimeOutJiffies;
378 while (!(inb(ioaddr[1] + 6) & 0x40)) {
379 if (time_after_eq(jiffies, timeout)) {
380 printk(KERN_WARNING "%s: sb1000_wait_for_ready timeout\n",
389 /* Card Wait For Ready Clear (to be used during frame rx) */
391 sb1000_wait_for_ready_clear(const int ioaddr[], const char* name)
393 unsigned long timeout;
395 timeout = jiffies + Sb1000TimeOutJiffies;
396 while (inb(ioaddr[1] + 6) & 0x80) {
397 if (time_after_eq(jiffies, timeout)) {
398 printk(KERN_WARNING "%s: sb1000_wait_for_ready_clear timeout\n",
403 timeout = jiffies + Sb1000TimeOutJiffies;
404 while (inb(ioaddr[1] + 6) & 0x40) {
405 if (time_after_eq(jiffies, timeout)) {
406 printk(KERN_WARNING "%s: sb1000_wait_for_ready_clear timeout\n",
414 /* Card Send Command (to be used during frame rx) */
416 sb1000_send_command(const int ioaddr[], const char* name,
417 const unsigned char out[])
419 outb(out[2], ioaddr[0] + 1);
420 outb(out[3], ioaddr[0] + 2);
421 outb(out[4], ioaddr[0] + 3);
422 outb(out[5], ioaddr[0] + 4);
423 outb(out[1], ioaddr[0] + 5);
424 outb(out[0], ioaddr[0] + 7);
425 if (sb1000_debug > 3)
426 printk(KERN_DEBUG "%s: sb1000_send_command out: %02x%02x%02x%02x"
427 "%02x%02x\n", name, out[0], out[1], out[2], out[3], out[4], out[5]);
430 /* Card Read Status (to be used during frame rx) */
432 sb1000_read_status(const int ioaddr[], unsigned char in[])
434 in[1] = inb(ioaddr[0] + 1);
435 in[2] = inb(ioaddr[0] + 2);
436 in[3] = inb(ioaddr[0] + 3);
437 in[4] = inb(ioaddr[0] + 4);
438 in[0] = inb(ioaddr[0] + 5);
441 /* Issue Read Command (to be used during frame rx) */
443 sb1000_issue_read_command(const int ioaddr[], const char* name)
445 static const unsigned char Command0[6] = {0x20, 0x00, 0x00, 0x01, 0x00, 0x00};
447 sb1000_wait_for_ready_clear(ioaddr, name);
448 outb(0xa0, ioaddr[0] + 6);
449 sb1000_send_command(ioaddr, name, Command0);
454 * SB1000 commands for open/configuration
456 /* reset SB1000 card */
458 sb1000_reset(const int ioaddr[], const char* name)
460 static const unsigned char Command0[6] = {0x80, 0x16, 0x00, 0x00, 0x00, 0x00};
465 port = ioaddr[1] + 6;
479 if ((status = card_send_command(ioaddr, name, Command0, st)))
486 /* check SB1000 firmware CRC */
488 sb1000_check_CRC(const int ioaddr[], const char* name)
490 static const unsigned char Command0[6] = {0x80, 0x1f, 0x00, 0x00, 0x00, 0x00};
496 if ((status = card_send_command(ioaddr, name, Command0, st)))
498 if (st[1] != st[3] || st[2] != st[4])
500 crc = st[1] << 8 | st[2];
505 sb1000_start_get_set_command(const int ioaddr[], const char* name)
507 static const unsigned char Command0[6] = {0x80, 0x1b, 0x00, 0x00, 0x00, 0x00};
511 return card_send_command(ioaddr, name, Command0, st);
515 sb1000_end_get_set_command(const int ioaddr[], const char* name)
517 static const unsigned char Command0[6] = {0x80, 0x1b, 0x02, 0x00, 0x00, 0x00};
518 static const unsigned char Command1[6] = {0x20, 0x00, 0x00, 0x00, 0x00, 0x00};
523 if ((status = card_send_command(ioaddr, name, Command0, st)))
525 return card_send_command(ioaddr, name, Command1, st);
529 sb1000_activate(const int ioaddr[], const char* name)
531 static const unsigned char Command0[6] = {0x80, 0x11, 0x00, 0x00, 0x00, 0x00};
532 static const unsigned char Command1[6] = {0x80, 0x16, 0x00, 0x00, 0x00, 0x00};
538 if ((status = card_send_command(ioaddr, name, Command0, st)))
540 if ((status = card_send_command(ioaddr, name, Command1, st)))
543 if ((status = sb1000_start_get_set_command(ioaddr, name)))
548 return sb1000_start_get_set_command(ioaddr, name);
551 /* get SB1000 firmware version */
553 sb1000_get_firmware_version(const int ioaddr[], const char* name,
554 unsigned char version[], int do_end)
556 static const unsigned char Command0[6] = {0x80, 0x23, 0x00, 0x00, 0x00, 0x00};
561 if ((status = sb1000_start_get_set_command(ioaddr, name)))
563 if ((status = card_send_command(ioaddr, name, Command0, st)))
570 return sb1000_end_get_set_command(ioaddr, name);
575 /* get SB1000 frequency */
577 sb1000_get_frequency(const int ioaddr[], const char* name, int* frequency)
579 static const unsigned char Command0[6] = {0x80, 0x44, 0x00, 0x00, 0x00, 0x00};
585 if ((status = sb1000_start_get_set_command(ioaddr, name)))
587 if ((status = card_send_command(ioaddr, name, Command0, st)))
589 *frequency = ((st[1] << 8 | st[2]) << 8 | st[3]) << 8 | st[4];
590 return sb1000_end_get_set_command(ioaddr, name);
593 /* set SB1000 frequency */
595 sb1000_set_frequency(const int ioaddr[], const char* name, int frequency)
599 unsigned char Command0[6] = {0x80, 0x29, 0x00, 0x00, 0x00, 0x00};
601 const int FrequencyLowerLimit = 57000;
602 const int FrequencyUpperLimit = 804000;
604 if (frequency < FrequencyLowerLimit || frequency > FrequencyUpperLimit) {
605 printk(KERN_ERR "%s: frequency chosen (%d kHz) is not in the range "
606 "[%d,%d] kHz\n", name, frequency, FrequencyLowerLimit,
607 FrequencyUpperLimit);
611 if ((status = sb1000_start_get_set_command(ioaddr, name)))
613 Command0[5] = frequency & 0xff;
615 Command0[4] = frequency & 0xff;
617 Command0[3] = frequency & 0xff;
619 Command0[2] = frequency & 0xff;
620 return card_send_command(ioaddr, name, Command0, st);
623 /* get SB1000 PIDs */
625 sb1000_get_PIDs(const int ioaddr[], const char* name, short PID[])
627 static const unsigned char Command0[6] = {0x80, 0x40, 0x00, 0x00, 0x00, 0x00};
628 static const unsigned char Command1[6] = {0x80, 0x41, 0x00, 0x00, 0x00, 0x00};
629 static const unsigned char Command2[6] = {0x80, 0x42, 0x00, 0x00, 0x00, 0x00};
630 static const unsigned char Command3[6] = {0x80, 0x43, 0x00, 0x00, 0x00, 0x00};
636 if ((status = sb1000_start_get_set_command(ioaddr, name)))
639 if ((status = card_send_command(ioaddr, name, Command0, st)))
641 PID[0] = st[1] << 8 | st[2];
643 if ((status = card_send_command(ioaddr, name, Command1, st)))
645 PID[1] = st[1] << 8 | st[2];
647 if ((status = card_send_command(ioaddr, name, Command2, st)))
649 PID[2] = st[1] << 8 | st[2];
651 if ((status = card_send_command(ioaddr, name, Command3, st)))
653 PID[3] = st[1] << 8 | st[2];
655 return sb1000_end_get_set_command(ioaddr, name);
658 /* set SB1000 PIDs */
660 sb1000_set_PIDs(const int ioaddr[], const char* name, const short PID[])
662 static const unsigned char Command4[6] = {0x80, 0x2e, 0x00, 0x00, 0x00, 0x00};
667 unsigned char Command0[6] = {0x80, 0x31, 0x00, 0x00, 0x00, 0x00};
668 unsigned char Command1[6] = {0x80, 0x32, 0x00, 0x00, 0x00, 0x00};
669 unsigned char Command2[6] = {0x80, 0x33, 0x00, 0x00, 0x00, 0x00};
670 unsigned char Command3[6] = {0x80, 0x34, 0x00, 0x00, 0x00, 0x00};
673 if ((status = sb1000_start_get_set_command(ioaddr, name)))
677 Command0[3] = p & 0xff;
679 Command0[2] = p & 0xff;
680 if ((status = card_send_command(ioaddr, name, Command0, st)))
684 Command1[3] = p & 0xff;
686 Command1[2] = p & 0xff;
687 if ((status = card_send_command(ioaddr, name, Command1, st)))
691 Command2[3] = p & 0xff;
693 Command2[2] = p & 0xff;
694 if ((status = card_send_command(ioaddr, name, Command2, st)))
698 Command3[3] = p & 0xff;
700 Command3[2] = p & 0xff;
701 if ((status = card_send_command(ioaddr, name, Command3, st)))
704 if ((status = card_send_command(ioaddr, name, Command4, st)))
706 return sb1000_end_get_set_command(ioaddr, name);
711 sb1000_print_status_buffer(const char* name, unsigned char st[],
712 unsigned char buffer[], int size)
716 printk(KERN_DEBUG "%s: status: %02x %02x\n", name, st[0], st[1]);
717 if (buffer[24] == 0x08 && buffer[25] == 0x00 && buffer[26] == 0x45) {
718 printk(KERN_DEBUG "%s: length: %d protocol: %d from: %d.%d.%d.%d:%d "
719 "to %d.%d.%d.%d:%d\n", name, buffer[28] << 8 | buffer[29],
720 buffer[35], buffer[38], buffer[39], buffer[40], buffer[41],
721 buffer[46] << 8 | buffer[47],
722 buffer[42], buffer[43], buffer[44], buffer[45],
723 buffer[48] << 8 | buffer[49]);
725 for (i = 0, k = 0; i < (size + 7) / 8; i++) {
726 printk(KERN_DEBUG "%s: %s", name, i ? " " : "buffer:");
727 for (j = 0; j < 8 && k < size; j++, k++)
728 printk(" %02x", buffer[k]);
735 * SB1000 commands for frame rx interrupt
737 /* receive a single frame and assemble datagram
738 * (this is the heart of the interrupt routine)
741 sb1000_rx(struct net_device *dev)
744 #define FRAMESIZE 184
745 unsigned char st[2], buffer[FRAMESIZE], session_id, frame_id;
748 unsigned int skbsize;
750 struct sb1000_private *lp = netdev_priv(dev);
751 struct net_device_stats *stats = &dev->stats;
753 /* SB1000 frame constants */
754 const int FrameSize = FRAMESIZE;
755 const int NewDatagramHeaderSkip = 8;
756 const int NewDatagramHeaderSize = NewDatagramHeaderSkip + 18;
757 const int NewDatagramDataSize = FrameSize - NewDatagramHeaderSize;
758 const int ContDatagramHeaderSkip = 7;
759 const int ContDatagramHeaderSize = ContDatagramHeaderSkip + 1;
760 const int ContDatagramDataSize = FrameSize - ContDatagramHeaderSize;
761 const int TrailerSize = 4;
763 ioaddr = dev->base_addr;
765 insw(ioaddr, (unsigned short*) st, 1);
767 printk("cm0: received: %02x %02x\n", st[0], st[1]);
768 #endif /* XXXDEBUG */
771 /* decide if it is a good or bad frame */
772 for (ns = 0; ns < NPIDS; ns++) {
773 session_id = lp->rx_session_id[ns];
774 frame_id = lp->rx_frame_id[ns];
775 if (st[0] == session_id) {
776 if (st[1] == frame_id || (!frame_id && (st[1] & 0xf0) == 0x30)) {
778 } else if ((st[1] & 0xf0) == 0x30 && (st[0] & 0x40)) {
783 } else if (st[0] == (session_id | 0x40)) {
784 if ((st[1] & 0xf0) == 0x30) {
794 stats->rx_frame_errors++;
795 skb = lp->rx_skb[ns];
796 if (sb1000_debug > 1)
797 printk(KERN_WARNING "%s: missing frame(s): got %02x %02x "
798 "expecting %02x %02x\n", dev->name, st[0], st[1],
799 skb ? session_id : session_id | 0x40, frame_id);
806 lp->rx_frame_id[ns] = 0x30 | ((st[1] + 1) & 0x0f);
809 /* get data length */
810 insw(ioaddr, buffer, NewDatagramHeaderSize / 2);
812 printk("cm0: IP identification: %02x%02x fragment offset: %02x%02x\n", buffer[30], buffer[31], buffer[32], buffer[33]);
813 #endif /* XXXDEBUG */
814 if (buffer[0] != NewDatagramHeaderSkip) {
815 if (sb1000_debug > 1)
816 printk(KERN_WARNING "%s: new datagram header skip error: "
817 "got %02x expecting %02x\n", dev->name, buffer[0],
818 NewDatagramHeaderSkip);
819 stats->rx_length_errors++;
820 insw(ioaddr, buffer, NewDatagramDataSize / 2);
823 dlen = ((buffer[NewDatagramHeaderSkip + 3] & 0x0f) << 8 |
824 buffer[NewDatagramHeaderSkip + 4]) - 17;
825 if (dlen > SB1000_MRU) {
826 if (sb1000_debug > 1)
827 printk(KERN_WARNING "%s: datagram length (%d) greater "
828 "than MRU (%d)\n", dev->name, dlen, SB1000_MRU);
829 stats->rx_length_errors++;
830 insw(ioaddr, buffer, NewDatagramDataSize / 2);
833 lp->rx_dlen[ns] = dlen;
834 /* compute size to allocate for datagram */
835 skbsize = dlen + FrameSize;
836 if ((skb = alloc_skb(skbsize, GFP_ATOMIC)) == NULL) {
837 if (sb1000_debug > 1)
838 printk(KERN_WARNING "%s: can't allocate %d bytes long "
839 "skbuff\n", dev->name, skbsize);
841 insw(ioaddr, buffer, NewDatagramDataSize / 2);
845 skb_reset_mac_header(skb);
846 skb->protocol = (unsigned short) buffer[NewDatagramHeaderSkip + 16];
847 insw(ioaddr, skb_put(skb, NewDatagramDataSize),
848 NewDatagramDataSize / 2);
849 lp->rx_skb[ns] = skb;
851 /* continuation of previous datagram */
852 insw(ioaddr, buffer, ContDatagramHeaderSize / 2);
853 if (buffer[0] != ContDatagramHeaderSkip) {
854 if (sb1000_debug > 1)
855 printk(KERN_WARNING "%s: cont datagram header skip error: "
856 "got %02x expecting %02x\n", dev->name, buffer[0],
857 ContDatagramHeaderSkip);
858 stats->rx_length_errors++;
859 insw(ioaddr, buffer, ContDatagramDataSize / 2);
862 skb = lp->rx_skb[ns];
863 insw(ioaddr, skb_put(skb, ContDatagramDataSize),
864 ContDatagramDataSize / 2);
865 dlen = lp->rx_dlen[ns];
867 if (skb->len < dlen + TrailerSize) {
868 lp->rx_session_id[ns] &= ~0x40;
872 /* datagram completed: send to upper level */
875 stats->rx_bytes+=dlen;
877 lp->rx_skb[ns] = NULL;
878 lp->rx_session_id[ns] |= 0x40;
882 insw(ioaddr, buffer, FrameSize / 2);
883 if (sb1000_debug > 1)
884 printk(KERN_WARNING "%s: frame error: got %02x %02x\n",
885 dev->name, st[0], st[1]);
886 stats->rx_frame_errors++;
888 if (sb1000_debug > 2)
889 sb1000_print_status_buffer(dev->name, st, buffer, FrameSize);
893 if ((skb = lp->rx_skb[ns])) {
895 lp->rx_skb[ns] = NULL;
897 lp->rx_session_id[ns] |= 0x40;
903 sb1000_error_dpc(struct net_device *dev)
905 static const unsigned char Command0[6] = {0x80, 0x26, 0x00, 0x00, 0x00, 0x00};
910 struct sb1000_private *lp = netdev_priv(dev);
911 const int ErrorDpcCounterInitialize = 200;
913 ioaddr[0] = dev->base_addr;
914 /* mem_start holds the second I/O address */
915 ioaddr[1] = dev->mem_start;
918 sb1000_wait_for_ready_clear(ioaddr, name);
919 sb1000_send_command(ioaddr, name, Command0);
920 sb1000_wait_for_ready(ioaddr, name);
921 sb1000_read_status(ioaddr, st);
923 lp->rx_error_dpc_count = ErrorDpcCounterInitialize;
928 * Linux interface functions
931 sb1000_open(struct net_device *dev)
934 int ioaddr[2], status;
935 struct sb1000_private *lp = netdev_priv(dev);
936 const unsigned short FirmwareVersion[] = {0x01, 0x01};
938 ioaddr[0] = dev->base_addr;
939 /* mem_start holds the second I/O address */
940 ioaddr[1] = dev->mem_start;
943 /* initialize sb1000 */
944 if ((status = sb1000_reset(ioaddr, name)))
947 if ((status = sb1000_check_CRC(ioaddr, name)))
950 /* initialize private data before board can catch interrupts */
951 lp->rx_skb[0] = NULL;
952 lp->rx_skb[1] = NULL;
953 lp->rx_skb[2] = NULL;
954 lp->rx_skb[3] = NULL;
960 lp->rx_error_count = 0;
961 lp->rx_error_dpc_count = 0;
962 lp->rx_session_id[0] = 0x50;
963 lp->rx_session_id[1] = 0x48;
964 lp->rx_session_id[2] = 0x44;
965 lp->rx_session_id[3] = 0x42;
966 lp->rx_frame_id[0] = 0;
967 lp->rx_frame_id[1] = 0;
968 lp->rx_frame_id[2] = 0;
969 lp->rx_frame_id[3] = 0;
970 if (request_irq(dev->irq, sb1000_interrupt, 0, "sb1000", dev)) {
974 if (sb1000_debug > 2)
975 printk(KERN_DEBUG "%s: Opening, IRQ %d\n", name, dev->irq);
977 /* Activate board and check firmware version */
979 if ((status = sb1000_activate(ioaddr, name)))
982 if ((status = sb1000_get_firmware_version(ioaddr, name, version, 0)))
984 if (version[0] != FirmwareVersion[0] || version[1] != FirmwareVersion[1])
985 printk(KERN_WARNING "%s: found firmware version %x.%02x "
986 "(should be %x.%02x)\n", name, version[0], version[1],
987 FirmwareVersion[0], FirmwareVersion[1]);
990 netif_start_queue(dev);
991 return 0; /* Always succeed */
994 static int sb1000_dev_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd)
997 unsigned char version[2];
999 int ioaddr[2], status, frequency;
1000 unsigned int stats[5];
1001 struct sb1000_private *lp = netdev_priv(dev);
1003 if (!(dev && dev->flags & IFF_UP))
1006 ioaddr[0] = dev->base_addr;
1007 /* mem_start holds the second I/O address */
1008 ioaddr[1] = dev->mem_start;
1012 case SIOCGCMSTATS: /* get statistics */
1013 stats[0] = dev->stats.rx_bytes;
1014 stats[1] = lp->rx_frames;
1015 stats[2] = dev->stats.rx_packets;
1016 stats[3] = dev->stats.rx_errors;
1017 stats[4] = dev->stats.rx_dropped;
1018 if(copy_to_user(ifr->ifr_data, stats, sizeof(stats)))
1023 case SIOCGCMFIRMWARE: /* get firmware version */
1024 if ((status = sb1000_get_firmware_version(ioaddr, name, version, 1)))
1026 if(copy_to_user(ifr->ifr_data, version, sizeof(version)))
1030 case SIOCGCMFREQUENCY: /* get frequency */
1031 if ((status = sb1000_get_frequency(ioaddr, name, &frequency)))
1033 if(put_user(frequency, (int __user *) ifr->ifr_data))
1037 case SIOCSCMFREQUENCY: /* set frequency */
1038 if (!capable(CAP_NET_ADMIN))
1040 if(get_user(frequency, (int __user *) ifr->ifr_data))
1042 if ((status = sb1000_set_frequency(ioaddr, name, frequency)))
1046 case SIOCGCMPIDS: /* get PIDs */
1047 if ((status = sb1000_get_PIDs(ioaddr, name, PID)))
1049 if(copy_to_user(ifr->ifr_data, PID, sizeof(PID)))
1053 case SIOCSCMPIDS: /* set PIDs */
1054 if (!capable(CAP_NET_ADMIN))
1056 if(copy_from_user(PID, ifr->ifr_data, sizeof(PID)))
1058 if ((status = sb1000_set_PIDs(ioaddr, name, PID)))
1060 /* set session_id, frame_id and pkt_type too */
1061 lp->rx_session_id[0] = 0x50 | (PID[0] & 0x0f);
1062 lp->rx_session_id[1] = 0x48;
1063 lp->rx_session_id[2] = 0x44;
1064 lp->rx_session_id[3] = 0x42;
1065 lp->rx_frame_id[0] = 0;
1066 lp->rx_frame_id[1] = 0;
1067 lp->rx_frame_id[2] = 0;
1068 lp->rx_frame_id[3] = 0;
1078 /* transmit function: do nothing since SB1000 can't send anything out */
1080 sb1000_start_xmit(struct sk_buff *skb, struct net_device *dev)
1082 printk(KERN_WARNING "%s: trying to transmit!!!\n", dev->name);
1083 /* sb1000 can't xmit datagrams */
1085 return NETDEV_TX_OK;
1088 /* SB1000 interrupt handler. */
1089 static irqreturn_t sb1000_interrupt(int irq, void *dev_id)
1091 static const unsigned char Command0[6] = {0x80, 0x2c, 0x00, 0x00, 0x00, 0x00};
1092 static const unsigned char Command1[6] = {0x80, 0x2e, 0x00, 0x00, 0x00, 0x00};
1097 struct net_device *dev = dev_id;
1098 struct sb1000_private *lp = netdev_priv(dev);
1100 const int MaxRxErrorCount = 6;
1102 ioaddr[0] = dev->base_addr;
1103 /* mem_start holds the second I/O address */
1104 ioaddr[1] = dev->mem_start;
1107 /* is it a good interrupt? */
1108 st = inb(ioaddr[1] + 6);
1109 if (!(st & 0x08 && st & 0x20)) {
1113 if (sb1000_debug > 3)
1114 printk(KERN_DEBUG "%s: entering interrupt\n", dev->name);
1116 st = inb(ioaddr[0] + 7);
1118 lp->rx_error_count++;
1120 udelay(SB1000_DELAY);
1121 #endif /* SB1000_DELAY */
1122 sb1000_issue_read_command(ioaddr, name);
1124 sb1000_error_dpc(dev);
1125 sb1000_issue_read_command(ioaddr, name);
1127 if (lp->rx_error_dpc_count && !(--lp->rx_error_dpc_count)) {
1128 sb1000_wait_for_ready_clear(ioaddr, name);
1129 sb1000_send_command(ioaddr, name, Command0);
1130 sb1000_wait_for_ready(ioaddr, name);
1131 sb1000_issue_read_command(ioaddr, name);
1133 if (lp->rx_error_count >= MaxRxErrorCount) {
1134 sb1000_wait_for_ready_clear(ioaddr, name);
1135 sb1000_send_command(ioaddr, name, Command1);
1136 sb1000_wait_for_ready(ioaddr, name);
1137 sb1000_issue_read_command(ioaddr, name);
1138 lp->rx_error_count = 0;
1144 static int sb1000_close(struct net_device *dev)
1148 struct sb1000_private *lp = netdev_priv(dev);
1150 if (sb1000_debug > 2)
1151 printk(KERN_DEBUG "%s: Shutting down sb1000.\n", dev->name);
1153 netif_stop_queue(dev);
1155 ioaddr[0] = dev->base_addr;
1156 /* mem_start holds the second I/O address */
1157 ioaddr[1] = dev->mem_start;
1159 free_irq(dev->irq, dev);
1160 /* If we don't do this, we can't re-insmod it later. */
1161 release_region(ioaddr[1], SB1000_IO_EXTENT);
1162 release_region(ioaddr[0], SB1000_IO_EXTENT);
1164 /* free rx_skb's if needed */
1165 for (i=0; i<4; i++) {
1166 if (lp->rx_skb[i]) {
1167 dev_kfree_skb(lp->rx_skb[i]);
1174 MODULE_DESCRIPTION("General Instruments SB1000 driver");
1175 MODULE_LICENSE("GPL");
1177 module_pnp_driver(sb1000_driver);