1 // SPDX-License-Identifier: GPL-2.0-or-later
2 /* sb1000.c: A General Instruments SB1000 driver for linux. */
4 Written 1998 by Franco Venturi.
6 Copyright 1998 by Franco Venturi.
7 Copyright 1994,1995 by Donald Becker.
8 Copyright 1993 United States Government as represented by the
9 Director, National Security Agency.
11 This driver is for the General Instruments SB1000 (internal SURFboard)
20 Linus changed the timer interface. Should work on all recent
25 Small changes to make it work with 2.1.x kernels. Hopefully,
26 nothing major will change before official release of Linux 2.2.
28 Merged with 2.2 - Alan Cox
33 #include <linux/module.h>
34 #include <linux/kernel.h>
35 #include <linux/sched.h>
36 #include <linux/string.h>
37 #include <linux/interrupt.h>
38 #include <linux/errno.h>
39 #include <linux/if_cablemodem.h> /* for SIOGCM/SIOSCM stuff */
41 #include <linux/ioport.h>
42 #include <linux/netdevice.h>
43 #include <linux/if_arp.h>
44 #include <linux/skbuff.h>
45 #include <linux/delay.h> /* for udelay() */
46 #include <linux/etherdevice.h>
47 #include <linux/pnp.h>
48 #include <linux/init.h>
49 #include <linux/bitops.h>
50 #include <linux/gfp.h>
53 #include <asm/processor.h>
54 #include <linux/uaccess.h>
57 static int sb1000_debug = SB1000_DEBUG;
59 static const int sb1000_debug = 1;
62 static const int SB1000_IO_EXTENT = 8;
63 /* SB1000 Maximum Receive Unit */
64 static const int SB1000_MRU = 1500; /* octects */
67 struct sb1000_private {
68 struct sk_buff *rx_skb[NPIDS];
70 unsigned int rx_frames;
72 short rx_error_dpc_count;
73 unsigned char rx_session_id[NPIDS];
74 unsigned char rx_frame_id[NPIDS];
75 unsigned char rx_pkt_type[NPIDS];
78 /* prototypes for Linux interface */
79 extern int sb1000_probe(struct net_device *dev);
80 static int sb1000_open(struct net_device *dev);
81 static int sb1000_dev_ioctl (struct net_device *dev, struct ifreq *ifr, int cmd);
82 static netdev_tx_t sb1000_start_xmit(struct sk_buff *skb,
83 struct net_device *dev);
84 static irqreturn_t sb1000_interrupt(int irq, void *dev_id);
85 static int sb1000_close(struct net_device *dev);
88 /* SB1000 hardware routines to be used during open/configuration phases */
89 static int card_wait_for_busy_clear(const int ioaddr[],
91 static int card_wait_for_ready(const int ioaddr[], const char* name,
93 static int card_send_command(const int ioaddr[], const char* name,
94 const unsigned char out[], unsigned char in[]);
96 /* SB1000 hardware routines to be used during frame rx interrupt */
97 static int sb1000_wait_for_ready(const int ioaddr[], const char* name);
98 static int sb1000_wait_for_ready_clear(const int ioaddr[],
100 static void sb1000_send_command(const int ioaddr[], const char* name,
101 const unsigned char out[]);
102 static void sb1000_read_status(const int ioaddr[], unsigned char in[]);
103 static void sb1000_issue_read_command(const int ioaddr[],
106 /* SB1000 commands for open/configuration */
107 static int sb1000_reset(const int ioaddr[], const char* name);
108 static int sb1000_check_CRC(const int ioaddr[], const char* name);
109 static inline int sb1000_start_get_set_command(const int ioaddr[],
111 static int sb1000_end_get_set_command(const int ioaddr[],
113 static int sb1000_activate(const int ioaddr[], const char* name);
114 static int sb1000_get_firmware_version(const int ioaddr[],
115 const char* name, unsigned char version[], int do_end);
116 static int sb1000_get_frequency(const int ioaddr[], const char* name,
118 static int sb1000_set_frequency(const int ioaddr[], const char* name,
120 static int sb1000_get_PIDs(const int ioaddr[], const char* name,
122 static int sb1000_set_PIDs(const int ioaddr[], const char* name,
125 /* SB1000 commands for frame rx interrupt */
126 static int sb1000_rx(struct net_device *dev);
127 static void sb1000_error_dpc(struct net_device *dev);
129 static const struct pnp_device_id sb1000_pnp_ids[] = {
133 MODULE_DEVICE_TABLE(pnp, sb1000_pnp_ids);
135 static const struct net_device_ops sb1000_netdev_ops = {
136 .ndo_open = sb1000_open,
137 .ndo_start_xmit = sb1000_start_xmit,
138 .ndo_do_ioctl = sb1000_dev_ioctl,
139 .ndo_stop = sb1000_close,
140 .ndo_set_mac_address = eth_mac_addr,
141 .ndo_validate_addr = eth_validate_addr,
145 sb1000_probe_one(struct pnp_dev *pdev, const struct pnp_device_id *id)
147 struct net_device *dev;
148 unsigned short ioaddr[2], irq;
149 unsigned int serial_number;
152 if (pnp_device_attach(pdev) < 0)
154 if (pnp_activate_dev(pdev) < 0)
157 if (!pnp_port_valid(pdev, 0) || !pnp_port_valid(pdev, 1))
159 if (!pnp_irq_valid(pdev, 0))
162 serial_number = pdev->card->serial;
164 ioaddr[0] = pnp_port_start(pdev, 0);
165 ioaddr[1] = pnp_port_start(pdev, 0);
167 irq = pnp_irq(pdev, 0);
169 if (!request_region(ioaddr[0], 16, "sb1000"))
171 if (!request_region(ioaddr[1], 16, "sb1000"))
172 goto out_release_region0;
174 dev = alloc_etherdev(sizeof(struct sb1000_private));
177 goto out_release_regions;
181 dev->base_addr = ioaddr[0];
182 /* mem_start holds the second I/O address */
183 dev->mem_start = ioaddr[1];
186 if (sb1000_debug > 0)
187 printk(KERN_NOTICE "%s: sb1000 at (%#3.3lx,%#3.3lx), "
188 "S/N %#8.8x, IRQ %d.\n", dev->name, dev->base_addr,
189 dev->mem_start, serial_number, dev->irq);
192 * The SB1000 is an rx-only cable modem device. The uplink is a modem
193 * and we do not want to arp on it.
195 dev->flags = IFF_POINTOPOINT|IFF_NOARP;
197 SET_NETDEV_DEV(dev, &pdev->dev);
199 if (sb1000_debug > 0)
200 printk(KERN_NOTICE "%s", version);
202 dev->netdev_ops = &sb1000_netdev_ops;
204 /* hardware address is 0:0:serial_number */
205 dev->dev_addr[2] = serial_number >> 24 & 0xff;
206 dev->dev_addr[3] = serial_number >> 16 & 0xff;
207 dev->dev_addr[4] = serial_number >> 8 & 0xff;
208 dev->dev_addr[5] = serial_number >> 0 & 0xff;
210 pnp_set_drvdata(pdev, dev);
212 error = register_netdev(dev);
214 goto out_free_netdev;
220 release_region(ioaddr[1], 16);
222 release_region(ioaddr[0], 16);
224 pnp_disable_dev(pdev);
226 pnp_device_detach(pdev);
231 sb1000_remove_one(struct pnp_dev *pdev)
233 struct net_device *dev = pnp_get_drvdata(pdev);
235 unregister_netdev(dev);
236 release_region(dev->base_addr, 16);
237 release_region(dev->mem_start, 16);
241 static struct pnp_driver sb1000_driver = {
243 .id_table = sb1000_pnp_ids,
244 .probe = sb1000_probe_one,
245 .remove = sb1000_remove_one,
250 * SB1000 hardware routines to be used during open/configuration phases
253 static const int TimeOutJiffies = (875 * HZ) / 100;
255 /* Card Wait For Busy Clear (cannot be used during an interrupt) */
257 card_wait_for_busy_clear(const int ioaddr[], const char* name)
260 unsigned long timeout;
262 a = inb(ioaddr[0] + 7);
263 timeout = jiffies + TimeOutJiffies;
264 while (a & 0x80 || a & 0x40) {
268 a = inb(ioaddr[0] + 7);
269 if (time_after_eq(jiffies, timeout)) {
270 printk(KERN_WARNING "%s: card_wait_for_busy_clear timeout\n",
279 /* Card Wait For Ready (cannot be used during an interrupt) */
281 card_wait_for_ready(const int ioaddr[], const char* name, unsigned char in[])
284 unsigned long timeout;
286 a = inb(ioaddr[1] + 6);
287 timeout = jiffies + TimeOutJiffies;
288 while (a & 0x80 || !(a & 0x40)) {
292 a = inb(ioaddr[1] + 6);
293 if (time_after_eq(jiffies, timeout)) {
294 printk(KERN_WARNING "%s: card_wait_for_ready timeout\n",
300 in[1] = inb(ioaddr[0] + 1);
301 in[2] = inb(ioaddr[0] + 2);
302 in[3] = inb(ioaddr[0] + 3);
303 in[4] = inb(ioaddr[0] + 4);
304 in[0] = inb(ioaddr[0] + 5);
305 in[6] = inb(ioaddr[0] + 6);
306 in[5] = inb(ioaddr[1] + 6);
310 /* Card Send Command (cannot be used during an interrupt) */
312 card_send_command(const int ioaddr[], const char* name,
313 const unsigned char out[], unsigned char in[])
317 if ((status = card_wait_for_busy_clear(ioaddr, name)))
319 outb(0xa0, ioaddr[0] + 6);
320 outb(out[2], ioaddr[0] + 1);
321 outb(out[3], ioaddr[0] + 2);
322 outb(out[4], ioaddr[0] + 3);
323 outb(out[5], ioaddr[0] + 4);
324 outb(out[1], ioaddr[0] + 5);
325 outb(0xa0, ioaddr[0] + 6);
326 outb(out[0], ioaddr[0] + 7);
327 if (out[0] != 0x20 && out[0] != 0x30) {
328 if ((status = card_wait_for_ready(ioaddr, name, in)))
331 if (sb1000_debug > 3)
332 printk(KERN_DEBUG "%s: card_send_command "
333 "out: %02x%02x%02x%02x%02x%02x "
334 "in: %02x%02x%02x%02x%02x%02x%02x\n", name,
335 out[0], out[1], out[2], out[3], out[4], out[5],
336 in[0], in[1], in[2], in[3], in[4], in[5], in[6]);
338 if (sb1000_debug > 3)
339 printk(KERN_DEBUG "%s: card_send_command "
340 "out: %02x%02x%02x%02x%02x%02x\n", name,
341 out[0], out[1], out[2], out[3], out[4], out[5]);
344 if (out[1] != 0x1b) {
345 if (out[0] >= 0x80 && in[0] != (out[1] | 0x80))
353 * SB1000 hardware routines to be used during frame rx interrupt
355 static const int Sb1000TimeOutJiffies = 7 * HZ;
357 /* Card Wait For Ready (to be used during frame rx) */
359 sb1000_wait_for_ready(const int ioaddr[], const char* name)
361 unsigned long timeout;
363 timeout = jiffies + Sb1000TimeOutJiffies;
364 while (inb(ioaddr[1] + 6) & 0x80) {
365 if (time_after_eq(jiffies, timeout)) {
366 printk(KERN_WARNING "%s: sb1000_wait_for_ready timeout\n",
371 timeout = jiffies + Sb1000TimeOutJiffies;
372 while (!(inb(ioaddr[1] + 6) & 0x40)) {
373 if (time_after_eq(jiffies, timeout)) {
374 printk(KERN_WARNING "%s: sb1000_wait_for_ready timeout\n",
383 /* Card Wait For Ready Clear (to be used during frame rx) */
385 sb1000_wait_for_ready_clear(const int ioaddr[], const char* name)
387 unsigned long timeout;
389 timeout = jiffies + Sb1000TimeOutJiffies;
390 while (inb(ioaddr[1] + 6) & 0x80) {
391 if (time_after_eq(jiffies, timeout)) {
392 printk(KERN_WARNING "%s: sb1000_wait_for_ready_clear timeout\n",
397 timeout = jiffies + Sb1000TimeOutJiffies;
398 while (inb(ioaddr[1] + 6) & 0x40) {
399 if (time_after_eq(jiffies, timeout)) {
400 printk(KERN_WARNING "%s: sb1000_wait_for_ready_clear timeout\n",
408 /* Card Send Command (to be used during frame rx) */
410 sb1000_send_command(const int ioaddr[], const char* name,
411 const unsigned char out[])
413 outb(out[2], ioaddr[0] + 1);
414 outb(out[3], ioaddr[0] + 2);
415 outb(out[4], ioaddr[0] + 3);
416 outb(out[5], ioaddr[0] + 4);
417 outb(out[1], ioaddr[0] + 5);
418 outb(out[0], ioaddr[0] + 7);
419 if (sb1000_debug > 3)
420 printk(KERN_DEBUG "%s: sb1000_send_command out: %02x%02x%02x%02x"
421 "%02x%02x\n", name, out[0], out[1], out[2], out[3], out[4], out[5]);
424 /* Card Read Status (to be used during frame rx) */
426 sb1000_read_status(const int ioaddr[], unsigned char in[])
428 in[1] = inb(ioaddr[0] + 1);
429 in[2] = inb(ioaddr[0] + 2);
430 in[3] = inb(ioaddr[0] + 3);
431 in[4] = inb(ioaddr[0] + 4);
432 in[0] = inb(ioaddr[0] + 5);
435 /* Issue Read Command (to be used during frame rx) */
437 sb1000_issue_read_command(const int ioaddr[], const char* name)
439 static const unsigned char Command0[6] = {0x20, 0x00, 0x00, 0x01, 0x00, 0x00};
441 sb1000_wait_for_ready_clear(ioaddr, name);
442 outb(0xa0, ioaddr[0] + 6);
443 sb1000_send_command(ioaddr, name, Command0);
448 * SB1000 commands for open/configuration
450 /* reset SB1000 card */
452 sb1000_reset(const int ioaddr[], const char* name)
454 static const unsigned char Command0[6] = {0x80, 0x16, 0x00, 0x00, 0x00, 0x00};
459 port = ioaddr[1] + 6;
473 if ((status = card_send_command(ioaddr, name, Command0, st)))
480 /* check SB1000 firmware CRC */
482 sb1000_check_CRC(const int ioaddr[], const char* name)
484 static const unsigned char Command0[6] = {0x80, 0x1f, 0x00, 0x00, 0x00, 0x00};
490 if ((status = card_send_command(ioaddr, name, Command0, st)))
492 if (st[1] != st[3] || st[2] != st[4])
498 sb1000_start_get_set_command(const int ioaddr[], const char* name)
500 static const unsigned char Command0[6] = {0x80, 0x1b, 0x00, 0x00, 0x00, 0x00};
504 return card_send_command(ioaddr, name, Command0, st);
508 sb1000_end_get_set_command(const int ioaddr[], const char* name)
510 static const unsigned char Command0[6] = {0x80, 0x1b, 0x02, 0x00, 0x00, 0x00};
511 static const unsigned char Command1[6] = {0x20, 0x00, 0x00, 0x00, 0x00, 0x00};
516 if ((status = card_send_command(ioaddr, name, Command0, st)))
518 return card_send_command(ioaddr, name, Command1, st);
522 sb1000_activate(const int ioaddr[], const char* name)
524 static const unsigned char Command0[6] = {0x80, 0x11, 0x00, 0x00, 0x00, 0x00};
525 static const unsigned char Command1[6] = {0x80, 0x16, 0x00, 0x00, 0x00, 0x00};
531 status = card_send_command(ioaddr, name, Command0, st);
534 status = card_send_command(ioaddr, name, Command1, st);
538 status = sb1000_start_get_set_command(ioaddr, name);
544 return sb1000_start_get_set_command(ioaddr, name);
547 /* get SB1000 firmware version */
549 sb1000_get_firmware_version(const int ioaddr[], const char* name,
550 unsigned char version[], int do_end)
552 static const unsigned char Command0[6] = {0x80, 0x23, 0x00, 0x00, 0x00, 0x00};
557 if ((status = sb1000_start_get_set_command(ioaddr, name)))
559 if ((status = card_send_command(ioaddr, name, Command0, st)))
566 return sb1000_end_get_set_command(ioaddr, name);
571 /* get SB1000 frequency */
573 sb1000_get_frequency(const int ioaddr[], const char* name, int* frequency)
575 static const unsigned char Command0[6] = {0x80, 0x44, 0x00, 0x00, 0x00, 0x00};
581 if ((status = sb1000_start_get_set_command(ioaddr, name)))
583 if ((status = card_send_command(ioaddr, name, Command0, st)))
585 *frequency = ((st[1] << 8 | st[2]) << 8 | st[3]) << 8 | st[4];
586 return sb1000_end_get_set_command(ioaddr, name);
589 /* set SB1000 frequency */
591 sb1000_set_frequency(const int ioaddr[], const char* name, int frequency)
595 unsigned char Command0[6] = {0x80, 0x29, 0x00, 0x00, 0x00, 0x00};
597 const int FrequencyLowerLimit = 57000;
598 const int FrequencyUpperLimit = 804000;
600 if (frequency < FrequencyLowerLimit || frequency > FrequencyUpperLimit) {
601 printk(KERN_ERR "%s: frequency chosen (%d kHz) is not in the range "
602 "[%d,%d] kHz\n", name, frequency, FrequencyLowerLimit,
603 FrequencyUpperLimit);
607 if ((status = sb1000_start_get_set_command(ioaddr, name)))
609 Command0[5] = frequency & 0xff;
611 Command0[4] = frequency & 0xff;
613 Command0[3] = frequency & 0xff;
615 Command0[2] = frequency & 0xff;
616 return card_send_command(ioaddr, name, Command0, st);
619 /* get SB1000 PIDs */
621 sb1000_get_PIDs(const int ioaddr[], const char* name, short PID[])
623 static const unsigned char Command0[6] = {0x80, 0x40, 0x00, 0x00, 0x00, 0x00};
624 static const unsigned char Command1[6] = {0x80, 0x41, 0x00, 0x00, 0x00, 0x00};
625 static const unsigned char Command2[6] = {0x80, 0x42, 0x00, 0x00, 0x00, 0x00};
626 static const unsigned char Command3[6] = {0x80, 0x43, 0x00, 0x00, 0x00, 0x00};
632 if ((status = sb1000_start_get_set_command(ioaddr, name)))
635 if ((status = card_send_command(ioaddr, name, Command0, st)))
637 PID[0] = st[1] << 8 | st[2];
639 if ((status = card_send_command(ioaddr, name, Command1, st)))
641 PID[1] = st[1] << 8 | st[2];
643 if ((status = card_send_command(ioaddr, name, Command2, st)))
645 PID[2] = st[1] << 8 | st[2];
647 if ((status = card_send_command(ioaddr, name, Command3, st)))
649 PID[3] = st[1] << 8 | st[2];
651 return sb1000_end_get_set_command(ioaddr, name);
654 /* set SB1000 PIDs */
656 sb1000_set_PIDs(const int ioaddr[], const char* name, const short PID[])
658 static const unsigned char Command4[6] = {0x80, 0x2e, 0x00, 0x00, 0x00, 0x00};
663 unsigned char Command0[6] = {0x80, 0x31, 0x00, 0x00, 0x00, 0x00};
664 unsigned char Command1[6] = {0x80, 0x32, 0x00, 0x00, 0x00, 0x00};
665 unsigned char Command2[6] = {0x80, 0x33, 0x00, 0x00, 0x00, 0x00};
666 unsigned char Command3[6] = {0x80, 0x34, 0x00, 0x00, 0x00, 0x00};
669 if ((status = sb1000_start_get_set_command(ioaddr, name)))
673 Command0[3] = p & 0xff;
675 Command0[2] = p & 0xff;
676 if ((status = card_send_command(ioaddr, name, Command0, st)))
680 Command1[3] = p & 0xff;
682 Command1[2] = p & 0xff;
683 if ((status = card_send_command(ioaddr, name, Command1, st)))
687 Command2[3] = p & 0xff;
689 Command2[2] = p & 0xff;
690 if ((status = card_send_command(ioaddr, name, Command2, st)))
694 Command3[3] = p & 0xff;
696 Command3[2] = p & 0xff;
697 if ((status = card_send_command(ioaddr, name, Command3, st)))
700 if ((status = card_send_command(ioaddr, name, Command4, st)))
702 return sb1000_end_get_set_command(ioaddr, name);
707 sb1000_print_status_buffer(const char* name, unsigned char st[],
708 unsigned char buffer[], int size)
712 printk(KERN_DEBUG "%s: status: %02x %02x\n", name, st[0], st[1]);
713 if (buffer[24] == 0x08 && buffer[25] == 0x00 && buffer[26] == 0x45) {
714 printk(KERN_DEBUG "%s: length: %d protocol: %d from: %d.%d.%d.%d:%d "
715 "to %d.%d.%d.%d:%d\n", name, buffer[28] << 8 | buffer[29],
716 buffer[35], buffer[38], buffer[39], buffer[40], buffer[41],
717 buffer[46] << 8 | buffer[47],
718 buffer[42], buffer[43], buffer[44], buffer[45],
719 buffer[48] << 8 | buffer[49]);
721 for (i = 0, k = 0; i < (size + 7) / 8; i++) {
722 printk(KERN_DEBUG "%s: %s", name, i ? " " : "buffer:");
723 for (j = 0; j < 8 && k < size; j++, k++)
724 printk(" %02x", buffer[k]);
731 * SB1000 commands for frame rx interrupt
733 /* receive a single frame and assemble datagram
734 * (this is the heart of the interrupt routine)
737 sb1000_rx(struct net_device *dev)
740 #define FRAMESIZE 184
741 unsigned char st[2], buffer[FRAMESIZE], session_id, frame_id;
744 unsigned int skbsize;
746 struct sb1000_private *lp = netdev_priv(dev);
747 struct net_device_stats *stats = &dev->stats;
749 /* SB1000 frame constants */
750 const int FrameSize = FRAMESIZE;
751 const int NewDatagramHeaderSkip = 8;
752 const int NewDatagramHeaderSize = NewDatagramHeaderSkip + 18;
753 const int NewDatagramDataSize = FrameSize - NewDatagramHeaderSize;
754 const int ContDatagramHeaderSkip = 7;
755 const int ContDatagramHeaderSize = ContDatagramHeaderSkip + 1;
756 const int ContDatagramDataSize = FrameSize - ContDatagramHeaderSize;
757 const int TrailerSize = 4;
759 ioaddr = dev->base_addr;
761 insw(ioaddr, (unsigned short*) st, 1);
763 printk("cm0: received: %02x %02x\n", st[0], st[1]);
764 #endif /* XXXDEBUG */
767 /* decide if it is a good or bad frame */
768 for (ns = 0; ns < NPIDS; ns++) {
769 session_id = lp->rx_session_id[ns];
770 frame_id = lp->rx_frame_id[ns];
771 if (st[0] == session_id) {
772 if (st[1] == frame_id || (!frame_id && (st[1] & 0xf0) == 0x30)) {
774 } else if ((st[1] & 0xf0) == 0x30 && (st[0] & 0x40)) {
779 } else if (st[0] == (session_id | 0x40)) {
780 if ((st[1] & 0xf0) == 0x30) {
790 stats->rx_frame_errors++;
791 skb = lp->rx_skb[ns];
792 if (sb1000_debug > 1)
793 printk(KERN_WARNING "%s: missing frame(s): got %02x %02x "
794 "expecting %02x %02x\n", dev->name, st[0], st[1],
795 skb ? session_id : session_id | 0x40, frame_id);
802 lp->rx_frame_id[ns] = 0x30 | ((st[1] + 1) & 0x0f);
805 /* get data length */
806 insw(ioaddr, buffer, NewDatagramHeaderSize / 2);
808 printk("cm0: IP identification: %02x%02x fragment offset: %02x%02x\n", buffer[30], buffer[31], buffer[32], buffer[33]);
809 #endif /* XXXDEBUG */
810 if (buffer[0] != NewDatagramHeaderSkip) {
811 if (sb1000_debug > 1)
812 printk(KERN_WARNING "%s: new datagram header skip error: "
813 "got %02x expecting %02x\n", dev->name, buffer[0],
814 NewDatagramHeaderSkip);
815 stats->rx_length_errors++;
816 insw(ioaddr, buffer, NewDatagramDataSize / 2);
819 dlen = ((buffer[NewDatagramHeaderSkip + 3] & 0x0f) << 8 |
820 buffer[NewDatagramHeaderSkip + 4]) - 17;
821 if (dlen > SB1000_MRU) {
822 if (sb1000_debug > 1)
823 printk(KERN_WARNING "%s: datagram length (%d) greater "
824 "than MRU (%d)\n", dev->name, dlen, SB1000_MRU);
825 stats->rx_length_errors++;
826 insw(ioaddr, buffer, NewDatagramDataSize / 2);
829 lp->rx_dlen[ns] = dlen;
830 /* compute size to allocate for datagram */
831 skbsize = dlen + FrameSize;
832 if ((skb = alloc_skb(skbsize, GFP_ATOMIC)) == NULL) {
833 if (sb1000_debug > 1)
834 printk(KERN_WARNING "%s: can't allocate %d bytes long "
835 "skbuff\n", dev->name, skbsize);
837 insw(ioaddr, buffer, NewDatagramDataSize / 2);
841 skb_reset_mac_header(skb);
842 skb->protocol = (unsigned short) buffer[NewDatagramHeaderSkip + 16];
843 insw(ioaddr, skb_put(skb, NewDatagramDataSize),
844 NewDatagramDataSize / 2);
845 lp->rx_skb[ns] = skb;
847 /* continuation of previous datagram */
848 insw(ioaddr, buffer, ContDatagramHeaderSize / 2);
849 if (buffer[0] != ContDatagramHeaderSkip) {
850 if (sb1000_debug > 1)
851 printk(KERN_WARNING "%s: cont datagram header skip error: "
852 "got %02x expecting %02x\n", dev->name, buffer[0],
853 ContDatagramHeaderSkip);
854 stats->rx_length_errors++;
855 insw(ioaddr, buffer, ContDatagramDataSize / 2);
858 skb = lp->rx_skb[ns];
859 insw(ioaddr, skb_put(skb, ContDatagramDataSize),
860 ContDatagramDataSize / 2);
861 dlen = lp->rx_dlen[ns];
863 if (skb->len < dlen + TrailerSize) {
864 lp->rx_session_id[ns] &= ~0x40;
868 /* datagram completed: send to upper level */
871 stats->rx_bytes+=dlen;
873 lp->rx_skb[ns] = NULL;
874 lp->rx_session_id[ns] |= 0x40;
878 insw(ioaddr, buffer, FrameSize / 2);
879 if (sb1000_debug > 1)
880 printk(KERN_WARNING "%s: frame error: got %02x %02x\n",
881 dev->name, st[0], st[1]);
882 stats->rx_frame_errors++;
884 if (sb1000_debug > 2)
885 sb1000_print_status_buffer(dev->name, st, buffer, FrameSize);
889 if ((skb = lp->rx_skb[ns])) {
891 lp->rx_skb[ns] = NULL;
893 lp->rx_session_id[ns] |= 0x40;
899 sb1000_error_dpc(struct net_device *dev)
901 static const unsigned char Command0[6] = {0x80, 0x26, 0x00, 0x00, 0x00, 0x00};
906 struct sb1000_private *lp = netdev_priv(dev);
907 const int ErrorDpcCounterInitialize = 200;
909 ioaddr[0] = dev->base_addr;
910 /* mem_start holds the second I/O address */
911 ioaddr[1] = dev->mem_start;
914 sb1000_wait_for_ready_clear(ioaddr, name);
915 sb1000_send_command(ioaddr, name, Command0);
916 sb1000_wait_for_ready(ioaddr, name);
917 sb1000_read_status(ioaddr, st);
919 lp->rx_error_dpc_count = ErrorDpcCounterInitialize;
924 * Linux interface functions
927 sb1000_open(struct net_device *dev)
930 int ioaddr[2], status;
931 struct sb1000_private *lp = netdev_priv(dev);
932 const unsigned short FirmwareVersion[] = {0x01, 0x01};
934 ioaddr[0] = dev->base_addr;
935 /* mem_start holds the second I/O address */
936 ioaddr[1] = dev->mem_start;
939 /* initialize sb1000 */
940 if ((status = sb1000_reset(ioaddr, name)))
943 if ((status = sb1000_check_CRC(ioaddr, name)))
946 /* initialize private data before board can catch interrupts */
947 lp->rx_skb[0] = NULL;
948 lp->rx_skb[1] = NULL;
949 lp->rx_skb[2] = NULL;
950 lp->rx_skb[3] = NULL;
956 lp->rx_error_count = 0;
957 lp->rx_error_dpc_count = 0;
958 lp->rx_session_id[0] = 0x50;
959 lp->rx_session_id[1] = 0x48;
960 lp->rx_session_id[2] = 0x44;
961 lp->rx_session_id[3] = 0x42;
962 lp->rx_frame_id[0] = 0;
963 lp->rx_frame_id[1] = 0;
964 lp->rx_frame_id[2] = 0;
965 lp->rx_frame_id[3] = 0;
966 if (request_irq(dev->irq, sb1000_interrupt, 0, "sb1000", dev)) {
970 if (sb1000_debug > 2)
971 printk(KERN_DEBUG "%s: Opening, IRQ %d\n", name, dev->irq);
973 /* Activate board and check firmware version */
975 if ((status = sb1000_activate(ioaddr, name)))
978 if ((status = sb1000_get_firmware_version(ioaddr, name, version, 0)))
980 if (version[0] != FirmwareVersion[0] || version[1] != FirmwareVersion[1])
981 printk(KERN_WARNING "%s: found firmware version %x.%02x "
982 "(should be %x.%02x)\n", name, version[0], version[1],
983 FirmwareVersion[0], FirmwareVersion[1]);
986 netif_start_queue(dev);
987 return 0; /* Always succeed */
990 static int sb1000_dev_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd)
993 unsigned char version[2];
995 int ioaddr[2], status, frequency;
996 unsigned int stats[5];
997 struct sb1000_private *lp = netdev_priv(dev);
999 if (!(dev && dev->flags & IFF_UP))
1002 ioaddr[0] = dev->base_addr;
1003 /* mem_start holds the second I/O address */
1004 ioaddr[1] = dev->mem_start;
1008 case SIOCGCMSTATS: /* get statistics */
1009 stats[0] = dev->stats.rx_bytes;
1010 stats[1] = lp->rx_frames;
1011 stats[2] = dev->stats.rx_packets;
1012 stats[3] = dev->stats.rx_errors;
1013 stats[4] = dev->stats.rx_dropped;
1014 if(copy_to_user(ifr->ifr_data, stats, sizeof(stats)))
1019 case SIOCGCMFIRMWARE: /* get firmware version */
1020 if ((status = sb1000_get_firmware_version(ioaddr, name, version, 1)))
1022 if(copy_to_user(ifr->ifr_data, version, sizeof(version)))
1026 case SIOCGCMFREQUENCY: /* get frequency */
1027 if ((status = sb1000_get_frequency(ioaddr, name, &frequency)))
1029 if(put_user(frequency, (int __user *) ifr->ifr_data))
1033 case SIOCSCMFREQUENCY: /* set frequency */
1034 if (!capable(CAP_NET_ADMIN))
1036 if(get_user(frequency, (int __user *) ifr->ifr_data))
1038 if ((status = sb1000_set_frequency(ioaddr, name, frequency)))
1042 case SIOCGCMPIDS: /* get PIDs */
1043 if ((status = sb1000_get_PIDs(ioaddr, name, PID)))
1045 if(copy_to_user(ifr->ifr_data, PID, sizeof(PID)))
1049 case SIOCSCMPIDS: /* set PIDs */
1050 if (!capable(CAP_NET_ADMIN))
1052 if(copy_from_user(PID, ifr->ifr_data, sizeof(PID)))
1054 if ((status = sb1000_set_PIDs(ioaddr, name, PID)))
1056 /* set session_id, frame_id and pkt_type too */
1057 lp->rx_session_id[0] = 0x50 | (PID[0] & 0x0f);
1058 lp->rx_session_id[1] = 0x48;
1059 lp->rx_session_id[2] = 0x44;
1060 lp->rx_session_id[3] = 0x42;
1061 lp->rx_frame_id[0] = 0;
1062 lp->rx_frame_id[1] = 0;
1063 lp->rx_frame_id[2] = 0;
1064 lp->rx_frame_id[3] = 0;
1074 /* transmit function: do nothing since SB1000 can't send anything out */
1076 sb1000_start_xmit(struct sk_buff *skb, struct net_device *dev)
1078 printk(KERN_WARNING "%s: trying to transmit!!!\n", dev->name);
1079 /* sb1000 can't xmit datagrams */
1081 return NETDEV_TX_OK;
1084 /* SB1000 interrupt handler. */
1085 static irqreturn_t sb1000_interrupt(int irq, void *dev_id)
1087 static const unsigned char Command0[6] = {0x80, 0x2c, 0x00, 0x00, 0x00, 0x00};
1088 static const unsigned char Command1[6] = {0x80, 0x2e, 0x00, 0x00, 0x00, 0x00};
1093 struct net_device *dev = dev_id;
1094 struct sb1000_private *lp = netdev_priv(dev);
1096 const int MaxRxErrorCount = 6;
1098 ioaddr[0] = dev->base_addr;
1099 /* mem_start holds the second I/O address */
1100 ioaddr[1] = dev->mem_start;
1103 /* is it a good interrupt? */
1104 st = inb(ioaddr[1] + 6);
1105 if (!(st & 0x08 && st & 0x20)) {
1109 if (sb1000_debug > 3)
1110 printk(KERN_DEBUG "%s: entering interrupt\n", dev->name);
1112 st = inb(ioaddr[0] + 7);
1114 lp->rx_error_count++;
1116 udelay(SB1000_DELAY);
1117 #endif /* SB1000_DELAY */
1118 sb1000_issue_read_command(ioaddr, name);
1120 sb1000_error_dpc(dev);
1121 sb1000_issue_read_command(ioaddr, name);
1123 if (lp->rx_error_dpc_count && !(--lp->rx_error_dpc_count)) {
1124 sb1000_wait_for_ready_clear(ioaddr, name);
1125 sb1000_send_command(ioaddr, name, Command0);
1126 sb1000_wait_for_ready(ioaddr, name);
1127 sb1000_issue_read_command(ioaddr, name);
1129 if (lp->rx_error_count >= MaxRxErrorCount) {
1130 sb1000_wait_for_ready_clear(ioaddr, name);
1131 sb1000_send_command(ioaddr, name, Command1);
1132 sb1000_wait_for_ready(ioaddr, name);
1133 sb1000_issue_read_command(ioaddr, name);
1134 lp->rx_error_count = 0;
1140 static int sb1000_close(struct net_device *dev)
1144 struct sb1000_private *lp = netdev_priv(dev);
1146 if (sb1000_debug > 2)
1147 printk(KERN_DEBUG "%s: Shutting down sb1000.\n", dev->name);
1149 netif_stop_queue(dev);
1151 ioaddr[0] = dev->base_addr;
1152 /* mem_start holds the second I/O address */
1153 ioaddr[1] = dev->mem_start;
1155 free_irq(dev->irq, dev);
1156 /* If we don't do this, we can't re-insmod it later. */
1157 release_region(ioaddr[1], SB1000_IO_EXTENT);
1158 release_region(ioaddr[0], SB1000_IO_EXTENT);
1160 /* free rx_skb's if needed */
1161 for (i=0; i<4; i++) {
1162 if (lp->rx_skb[i]) {
1163 dev_kfree_skb(lp->rx_skb[i]);
1170 MODULE_DESCRIPTION("General Instruments SB1000 driver");
1171 MODULE_LICENSE("GPL");
1173 module_pnp_driver(sb1000_driver);