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_siocdevprivate(struct net_device *dev, struct ifreq *ifr,
82 void __user *data, int cmd);
83 static netdev_tx_t sb1000_start_xmit(struct sk_buff *skb,
84 struct net_device *dev);
85 static irqreturn_t sb1000_interrupt(int irq, void *dev_id);
86 static int sb1000_close(struct net_device *dev);
89 /* SB1000 hardware routines to be used during open/configuration phases */
90 static int card_wait_for_busy_clear(const int ioaddr[],
92 static int card_wait_for_ready(const int ioaddr[], const char* name,
94 static int card_send_command(const int ioaddr[], const char* name,
95 const unsigned char out[], unsigned char in[]);
97 /* SB1000 hardware routines to be used during frame rx interrupt */
98 static int sb1000_wait_for_ready(const int ioaddr[], const char* name);
99 static int sb1000_wait_for_ready_clear(const int ioaddr[],
101 static void sb1000_send_command(const int ioaddr[], const char* name,
102 const unsigned char out[]);
103 static void sb1000_read_status(const int ioaddr[], unsigned char in[]);
104 static void sb1000_issue_read_command(const int ioaddr[],
107 /* SB1000 commands for open/configuration */
108 static int sb1000_reset(const int ioaddr[], const char* name);
109 static int sb1000_check_CRC(const int ioaddr[], const char* name);
110 static inline int sb1000_start_get_set_command(const int ioaddr[],
112 static int sb1000_end_get_set_command(const int ioaddr[],
114 static int sb1000_activate(const int ioaddr[], const char* name);
115 static int sb1000_get_firmware_version(const int ioaddr[],
116 const char* name, unsigned char version[], int do_end);
117 static int sb1000_get_frequency(const int ioaddr[], const char* name,
119 static int sb1000_set_frequency(const int ioaddr[], const char* name,
121 static int sb1000_get_PIDs(const int ioaddr[], const char* name,
123 static int sb1000_set_PIDs(const int ioaddr[], const char* name,
126 /* SB1000 commands for frame rx interrupt */
127 static int sb1000_rx(struct net_device *dev);
128 static void sb1000_error_dpc(struct net_device *dev);
130 static const struct pnp_device_id sb1000_pnp_ids[] = {
134 MODULE_DEVICE_TABLE(pnp, sb1000_pnp_ids);
136 static const struct net_device_ops sb1000_netdev_ops = {
137 .ndo_open = sb1000_open,
138 .ndo_start_xmit = sb1000_start_xmit,
139 .ndo_siocdevprivate = sb1000_siocdevprivate,
140 .ndo_stop = sb1000_close,
141 .ndo_set_mac_address = eth_mac_addr,
142 .ndo_validate_addr = eth_validate_addr,
146 sb1000_probe_one(struct pnp_dev *pdev, const struct pnp_device_id *id)
148 struct net_device *dev;
149 unsigned short ioaddr[2], irq;
150 unsigned int serial_number;
153 if (pnp_device_attach(pdev) < 0)
155 if (pnp_activate_dev(pdev) < 0)
158 if (!pnp_port_valid(pdev, 0) || !pnp_port_valid(pdev, 1))
160 if (!pnp_irq_valid(pdev, 0))
163 serial_number = pdev->card->serial;
165 ioaddr[0] = pnp_port_start(pdev, 0);
166 ioaddr[1] = pnp_port_start(pdev, 0);
168 irq = pnp_irq(pdev, 0);
170 if (!request_region(ioaddr[0], 16, "sb1000"))
172 if (!request_region(ioaddr[1], 16, "sb1000"))
173 goto out_release_region0;
175 dev = alloc_etherdev(sizeof(struct sb1000_private));
178 goto out_release_regions;
182 dev->base_addr = ioaddr[0];
183 /* mem_start holds the second I/O address */
184 dev->mem_start = ioaddr[1];
187 if (sb1000_debug > 0)
188 printk(KERN_NOTICE "%s: sb1000 at (%#3.3lx,%#3.3lx), "
189 "S/N %#8.8x, IRQ %d.\n", dev->name, dev->base_addr,
190 dev->mem_start, serial_number, dev->irq);
193 * The SB1000 is an rx-only cable modem device. The uplink is a modem
194 * and we do not want to arp on it.
196 dev->flags = IFF_POINTOPOINT|IFF_NOARP;
198 SET_NETDEV_DEV(dev, &pdev->dev);
200 if (sb1000_debug > 0)
201 printk(KERN_NOTICE "%s", version);
203 dev->netdev_ops = &sb1000_netdev_ops;
205 /* hardware address is 0:0:serial_number */
206 dev->dev_addr[2] = serial_number >> 24 & 0xff;
207 dev->dev_addr[3] = serial_number >> 16 & 0xff;
208 dev->dev_addr[4] = serial_number >> 8 & 0xff;
209 dev->dev_addr[5] = serial_number >> 0 & 0xff;
211 pnp_set_drvdata(pdev, dev);
213 error = register_netdev(dev);
215 goto out_free_netdev;
221 release_region(ioaddr[1], 16);
223 release_region(ioaddr[0], 16);
225 pnp_disable_dev(pdev);
227 pnp_device_detach(pdev);
232 sb1000_remove_one(struct pnp_dev *pdev)
234 struct net_device *dev = pnp_get_drvdata(pdev);
236 unregister_netdev(dev);
237 release_region(dev->base_addr, 16);
238 release_region(dev->mem_start, 16);
242 static struct pnp_driver sb1000_driver = {
244 .id_table = sb1000_pnp_ids,
245 .probe = sb1000_probe_one,
246 .remove = sb1000_remove_one,
251 * SB1000 hardware routines to be used during open/configuration phases
254 static const int TimeOutJiffies = (875 * HZ) / 100;
256 /* Card Wait For Busy Clear (cannot be used during an interrupt) */
258 card_wait_for_busy_clear(const int ioaddr[], const char* name)
261 unsigned long timeout;
263 a = inb(ioaddr[0] + 7);
264 timeout = jiffies + TimeOutJiffies;
265 while (a & 0x80 || a & 0x40) {
269 a = inb(ioaddr[0] + 7);
270 if (time_after_eq(jiffies, timeout)) {
271 printk(KERN_WARNING "%s: card_wait_for_busy_clear timeout\n",
280 /* Card Wait For Ready (cannot be used during an interrupt) */
282 card_wait_for_ready(const int ioaddr[], const char* name, unsigned char in[])
285 unsigned long timeout;
287 a = inb(ioaddr[1] + 6);
288 timeout = jiffies + TimeOutJiffies;
289 while (a & 0x80 || !(a & 0x40)) {
293 a = inb(ioaddr[1] + 6);
294 if (time_after_eq(jiffies, timeout)) {
295 printk(KERN_WARNING "%s: card_wait_for_ready timeout\n",
301 in[1] = inb(ioaddr[0] + 1);
302 in[2] = inb(ioaddr[0] + 2);
303 in[3] = inb(ioaddr[0] + 3);
304 in[4] = inb(ioaddr[0] + 4);
305 in[0] = inb(ioaddr[0] + 5);
306 in[6] = inb(ioaddr[0] + 6);
307 in[5] = inb(ioaddr[1] + 6);
311 /* Card Send Command (cannot be used during an interrupt) */
313 card_send_command(const int ioaddr[], const char* name,
314 const unsigned char out[], unsigned char in[])
318 if ((status = card_wait_for_busy_clear(ioaddr, name)))
320 outb(0xa0, ioaddr[0] + 6);
321 outb(out[2], ioaddr[0] + 1);
322 outb(out[3], ioaddr[0] + 2);
323 outb(out[4], ioaddr[0] + 3);
324 outb(out[5], ioaddr[0] + 4);
325 outb(out[1], ioaddr[0] + 5);
326 outb(0xa0, ioaddr[0] + 6);
327 outb(out[0], ioaddr[0] + 7);
328 if (out[0] != 0x20 && out[0] != 0x30) {
329 if ((status = card_wait_for_ready(ioaddr, name, in)))
332 if (sb1000_debug > 3)
333 printk(KERN_DEBUG "%s: card_send_command "
334 "out: %02x%02x%02x%02x%02x%02x "
335 "in: %02x%02x%02x%02x%02x%02x%02x\n", name,
336 out[0], out[1], out[2], out[3], out[4], out[5],
337 in[0], in[1], in[2], in[3], in[4], in[5], in[6]);
339 if (sb1000_debug > 3)
340 printk(KERN_DEBUG "%s: card_send_command "
341 "out: %02x%02x%02x%02x%02x%02x\n", name,
342 out[0], out[1], out[2], out[3], out[4], out[5]);
345 if (out[1] != 0x1b) {
346 if (out[0] >= 0x80 && in[0] != (out[1] | 0x80))
354 * SB1000 hardware routines to be used during frame rx interrupt
356 static const int Sb1000TimeOutJiffies = 7 * HZ;
358 /* Card Wait For Ready (to be used during frame rx) */
360 sb1000_wait_for_ready(const int ioaddr[], const char* name)
362 unsigned long timeout;
364 timeout = jiffies + Sb1000TimeOutJiffies;
365 while (inb(ioaddr[1] + 6) & 0x80) {
366 if (time_after_eq(jiffies, timeout)) {
367 printk(KERN_WARNING "%s: sb1000_wait_for_ready timeout\n",
372 timeout = jiffies + Sb1000TimeOutJiffies;
373 while (!(inb(ioaddr[1] + 6) & 0x40)) {
374 if (time_after_eq(jiffies, timeout)) {
375 printk(KERN_WARNING "%s: sb1000_wait_for_ready timeout\n",
384 /* Card Wait For Ready Clear (to be used during frame rx) */
386 sb1000_wait_for_ready_clear(const int ioaddr[], const char* name)
388 unsigned long timeout;
390 timeout = jiffies + Sb1000TimeOutJiffies;
391 while (inb(ioaddr[1] + 6) & 0x80) {
392 if (time_after_eq(jiffies, timeout)) {
393 printk(KERN_WARNING "%s: sb1000_wait_for_ready_clear timeout\n",
398 timeout = jiffies + Sb1000TimeOutJiffies;
399 while (inb(ioaddr[1] + 6) & 0x40) {
400 if (time_after_eq(jiffies, timeout)) {
401 printk(KERN_WARNING "%s: sb1000_wait_for_ready_clear timeout\n",
409 /* Card Send Command (to be used during frame rx) */
411 sb1000_send_command(const int ioaddr[], const char* name,
412 const unsigned char out[])
414 outb(out[2], ioaddr[0] + 1);
415 outb(out[3], ioaddr[0] + 2);
416 outb(out[4], ioaddr[0] + 3);
417 outb(out[5], ioaddr[0] + 4);
418 outb(out[1], ioaddr[0] + 5);
419 outb(out[0], ioaddr[0] + 7);
420 if (sb1000_debug > 3)
421 printk(KERN_DEBUG "%s: sb1000_send_command out: %02x%02x%02x%02x"
422 "%02x%02x\n", name, out[0], out[1], out[2], out[3], out[4], out[5]);
425 /* Card Read Status (to be used during frame rx) */
427 sb1000_read_status(const int ioaddr[], unsigned char in[])
429 in[1] = inb(ioaddr[0] + 1);
430 in[2] = inb(ioaddr[0] + 2);
431 in[3] = inb(ioaddr[0] + 3);
432 in[4] = inb(ioaddr[0] + 4);
433 in[0] = inb(ioaddr[0] + 5);
436 /* Issue Read Command (to be used during frame rx) */
438 sb1000_issue_read_command(const int ioaddr[], const char* name)
440 static const unsigned char Command0[6] = {0x20, 0x00, 0x00, 0x01, 0x00, 0x00};
442 sb1000_wait_for_ready_clear(ioaddr, name);
443 outb(0xa0, ioaddr[0] + 6);
444 sb1000_send_command(ioaddr, name, Command0);
449 * SB1000 commands for open/configuration
451 /* reset SB1000 card */
453 sb1000_reset(const int ioaddr[], const char* name)
455 static const unsigned char Command0[6] = {0x80, 0x16, 0x00, 0x00, 0x00, 0x00};
460 port = ioaddr[1] + 6;
474 if ((status = card_send_command(ioaddr, name, Command0, st)))
481 /* check SB1000 firmware CRC */
483 sb1000_check_CRC(const int ioaddr[], const char* name)
485 static const unsigned char Command0[6] = {0x80, 0x1f, 0x00, 0x00, 0x00, 0x00};
491 if ((status = card_send_command(ioaddr, name, Command0, st)))
493 if (st[1] != st[3] || st[2] != st[4])
499 sb1000_start_get_set_command(const int ioaddr[], const char* name)
501 static const unsigned char Command0[6] = {0x80, 0x1b, 0x00, 0x00, 0x00, 0x00};
505 return card_send_command(ioaddr, name, Command0, st);
509 sb1000_end_get_set_command(const int ioaddr[], const char* name)
511 static const unsigned char Command0[6] = {0x80, 0x1b, 0x02, 0x00, 0x00, 0x00};
512 static const unsigned char Command1[6] = {0x20, 0x00, 0x00, 0x00, 0x00, 0x00};
517 if ((status = card_send_command(ioaddr, name, Command0, st)))
519 return card_send_command(ioaddr, name, Command1, st);
523 sb1000_activate(const int ioaddr[], const char* name)
525 static const unsigned char Command0[6] = {0x80, 0x11, 0x00, 0x00, 0x00, 0x00};
526 static const unsigned char Command1[6] = {0x80, 0x16, 0x00, 0x00, 0x00, 0x00};
532 status = card_send_command(ioaddr, name, Command0, st);
535 status = card_send_command(ioaddr, name, Command1, st);
539 status = sb1000_start_get_set_command(ioaddr, name);
545 return sb1000_start_get_set_command(ioaddr, name);
548 /* get SB1000 firmware version */
550 sb1000_get_firmware_version(const int ioaddr[], const char* name,
551 unsigned char version[], int do_end)
553 static const unsigned char Command0[6] = {0x80, 0x23, 0x00, 0x00, 0x00, 0x00};
558 if ((status = sb1000_start_get_set_command(ioaddr, name)))
560 if ((status = card_send_command(ioaddr, name, Command0, st)))
567 return sb1000_end_get_set_command(ioaddr, name);
572 /* get SB1000 frequency */
574 sb1000_get_frequency(const int ioaddr[], const char* name, int* frequency)
576 static const unsigned char Command0[6] = {0x80, 0x44, 0x00, 0x00, 0x00, 0x00};
582 if ((status = sb1000_start_get_set_command(ioaddr, name)))
584 if ((status = card_send_command(ioaddr, name, Command0, st)))
586 *frequency = ((st[1] << 8 | st[2]) << 8 | st[3]) << 8 | st[4];
587 return sb1000_end_get_set_command(ioaddr, name);
590 /* set SB1000 frequency */
592 sb1000_set_frequency(const int ioaddr[], const char* name, int frequency)
596 unsigned char Command0[6] = {0x80, 0x29, 0x00, 0x00, 0x00, 0x00};
598 const int FrequencyLowerLimit = 57000;
599 const int FrequencyUpperLimit = 804000;
601 if (frequency < FrequencyLowerLimit || frequency > FrequencyUpperLimit) {
602 printk(KERN_ERR "%s: frequency chosen (%d kHz) is not in the range "
603 "[%d,%d] kHz\n", name, frequency, FrequencyLowerLimit,
604 FrequencyUpperLimit);
608 if ((status = sb1000_start_get_set_command(ioaddr, name)))
610 Command0[5] = frequency & 0xff;
612 Command0[4] = frequency & 0xff;
614 Command0[3] = frequency & 0xff;
616 Command0[2] = frequency & 0xff;
617 return card_send_command(ioaddr, name, Command0, st);
620 /* get SB1000 PIDs */
622 sb1000_get_PIDs(const int ioaddr[], const char* name, short PID[])
624 static const unsigned char Command0[6] = {0x80, 0x40, 0x00, 0x00, 0x00, 0x00};
625 static const unsigned char Command1[6] = {0x80, 0x41, 0x00, 0x00, 0x00, 0x00};
626 static const unsigned char Command2[6] = {0x80, 0x42, 0x00, 0x00, 0x00, 0x00};
627 static const unsigned char Command3[6] = {0x80, 0x43, 0x00, 0x00, 0x00, 0x00};
633 if ((status = sb1000_start_get_set_command(ioaddr, name)))
636 if ((status = card_send_command(ioaddr, name, Command0, st)))
638 PID[0] = st[1] << 8 | st[2];
640 if ((status = card_send_command(ioaddr, name, Command1, st)))
642 PID[1] = st[1] << 8 | st[2];
644 if ((status = card_send_command(ioaddr, name, Command2, st)))
646 PID[2] = st[1] << 8 | st[2];
648 if ((status = card_send_command(ioaddr, name, Command3, st)))
650 PID[3] = st[1] << 8 | st[2];
652 return sb1000_end_get_set_command(ioaddr, name);
655 /* set SB1000 PIDs */
657 sb1000_set_PIDs(const int ioaddr[], const char* name, const short PID[])
659 static const unsigned char Command4[6] = {0x80, 0x2e, 0x00, 0x00, 0x00, 0x00};
664 unsigned char Command0[6] = {0x80, 0x31, 0x00, 0x00, 0x00, 0x00};
665 unsigned char Command1[6] = {0x80, 0x32, 0x00, 0x00, 0x00, 0x00};
666 unsigned char Command2[6] = {0x80, 0x33, 0x00, 0x00, 0x00, 0x00};
667 unsigned char Command3[6] = {0x80, 0x34, 0x00, 0x00, 0x00, 0x00};
670 if ((status = sb1000_start_get_set_command(ioaddr, name)))
674 Command0[3] = p & 0xff;
676 Command0[2] = p & 0xff;
677 if ((status = card_send_command(ioaddr, name, Command0, st)))
681 Command1[3] = p & 0xff;
683 Command1[2] = p & 0xff;
684 if ((status = card_send_command(ioaddr, name, Command1, st)))
688 Command2[3] = p & 0xff;
690 Command2[2] = p & 0xff;
691 if ((status = card_send_command(ioaddr, name, Command2, st)))
695 Command3[3] = p & 0xff;
697 Command3[2] = p & 0xff;
698 if ((status = card_send_command(ioaddr, name, Command3, st)))
701 if ((status = card_send_command(ioaddr, name, Command4, st)))
703 return sb1000_end_get_set_command(ioaddr, name);
708 sb1000_print_status_buffer(const char* name, unsigned char st[],
709 unsigned char buffer[], int size)
713 printk(KERN_DEBUG "%s: status: %02x %02x\n", name, st[0], st[1]);
714 if (buffer[24] == 0x08 && buffer[25] == 0x00 && buffer[26] == 0x45) {
715 printk(KERN_DEBUG "%s: length: %d protocol: %d from: %d.%d.%d.%d:%d "
716 "to %d.%d.%d.%d:%d\n", name, buffer[28] << 8 | buffer[29],
717 buffer[35], buffer[38], buffer[39], buffer[40], buffer[41],
718 buffer[46] << 8 | buffer[47],
719 buffer[42], buffer[43], buffer[44], buffer[45],
720 buffer[48] << 8 | buffer[49]);
722 for (i = 0, k = 0; i < (size + 7) / 8; i++) {
723 printk(KERN_DEBUG "%s: %s", name, i ? " " : "buffer:");
724 for (j = 0; j < 8 && k < size; j++, k++)
725 printk(" %02x", buffer[k]);
732 * SB1000 commands for frame rx interrupt
734 /* receive a single frame and assemble datagram
735 * (this is the heart of the interrupt routine)
738 sb1000_rx(struct net_device *dev)
741 #define FRAMESIZE 184
742 unsigned char st[2], buffer[FRAMESIZE], session_id, frame_id;
745 unsigned int skbsize;
747 struct sb1000_private *lp = netdev_priv(dev);
748 struct net_device_stats *stats = &dev->stats;
750 /* SB1000 frame constants */
751 const int FrameSize = FRAMESIZE;
752 const int NewDatagramHeaderSkip = 8;
753 const int NewDatagramHeaderSize = NewDatagramHeaderSkip + 18;
754 const int NewDatagramDataSize = FrameSize - NewDatagramHeaderSize;
755 const int ContDatagramHeaderSkip = 7;
756 const int ContDatagramHeaderSize = ContDatagramHeaderSkip + 1;
757 const int ContDatagramDataSize = FrameSize - ContDatagramHeaderSize;
758 const int TrailerSize = 4;
760 ioaddr = dev->base_addr;
762 insw(ioaddr, (unsigned short*) st, 1);
764 printk("cm0: received: %02x %02x\n", st[0], st[1]);
765 #endif /* XXXDEBUG */
768 /* decide if it is a good or bad frame */
769 for (ns = 0; ns < NPIDS; ns++) {
770 session_id = lp->rx_session_id[ns];
771 frame_id = lp->rx_frame_id[ns];
772 if (st[0] == session_id) {
773 if (st[1] == frame_id || (!frame_id && (st[1] & 0xf0) == 0x30)) {
775 } else if ((st[1] & 0xf0) == 0x30 && (st[0] & 0x40)) {
780 } else if (st[0] == (session_id | 0x40)) {
781 if ((st[1] & 0xf0) == 0x30) {
791 stats->rx_frame_errors++;
792 skb = lp->rx_skb[ns];
793 if (sb1000_debug > 1)
794 printk(KERN_WARNING "%s: missing frame(s): got %02x %02x "
795 "expecting %02x %02x\n", dev->name, st[0], st[1],
796 skb ? session_id : session_id | 0x40, frame_id);
803 lp->rx_frame_id[ns] = 0x30 | ((st[1] + 1) & 0x0f);
806 /* get data length */
807 insw(ioaddr, buffer, NewDatagramHeaderSize / 2);
809 printk("cm0: IP identification: %02x%02x fragment offset: %02x%02x\n", buffer[30], buffer[31], buffer[32], buffer[33]);
810 #endif /* XXXDEBUG */
811 if (buffer[0] != NewDatagramHeaderSkip) {
812 if (sb1000_debug > 1)
813 printk(KERN_WARNING "%s: new datagram header skip error: "
814 "got %02x expecting %02x\n", dev->name, buffer[0],
815 NewDatagramHeaderSkip);
816 stats->rx_length_errors++;
817 insw(ioaddr, buffer, NewDatagramDataSize / 2);
820 dlen = ((buffer[NewDatagramHeaderSkip + 3] & 0x0f) << 8 |
821 buffer[NewDatagramHeaderSkip + 4]) - 17;
822 if (dlen > SB1000_MRU) {
823 if (sb1000_debug > 1)
824 printk(KERN_WARNING "%s: datagram length (%d) greater "
825 "than MRU (%d)\n", dev->name, dlen, SB1000_MRU);
826 stats->rx_length_errors++;
827 insw(ioaddr, buffer, NewDatagramDataSize / 2);
830 lp->rx_dlen[ns] = dlen;
831 /* compute size to allocate for datagram */
832 skbsize = dlen + FrameSize;
833 if ((skb = alloc_skb(skbsize, GFP_ATOMIC)) == NULL) {
834 if (sb1000_debug > 1)
835 printk(KERN_WARNING "%s: can't allocate %d bytes long "
836 "skbuff\n", dev->name, skbsize);
838 insw(ioaddr, buffer, NewDatagramDataSize / 2);
842 skb_reset_mac_header(skb);
843 skb->protocol = (unsigned short) buffer[NewDatagramHeaderSkip + 16];
844 insw(ioaddr, skb_put(skb, NewDatagramDataSize),
845 NewDatagramDataSize / 2);
846 lp->rx_skb[ns] = skb;
848 /* continuation of previous datagram */
849 insw(ioaddr, buffer, ContDatagramHeaderSize / 2);
850 if (buffer[0] != ContDatagramHeaderSkip) {
851 if (sb1000_debug > 1)
852 printk(KERN_WARNING "%s: cont datagram header skip error: "
853 "got %02x expecting %02x\n", dev->name, buffer[0],
854 ContDatagramHeaderSkip);
855 stats->rx_length_errors++;
856 insw(ioaddr, buffer, ContDatagramDataSize / 2);
859 skb = lp->rx_skb[ns];
860 insw(ioaddr, skb_put(skb, ContDatagramDataSize),
861 ContDatagramDataSize / 2);
862 dlen = lp->rx_dlen[ns];
864 if (skb->len < dlen + TrailerSize) {
865 lp->rx_session_id[ns] &= ~0x40;
869 /* datagram completed: send to upper level */
872 stats->rx_bytes+=dlen;
874 lp->rx_skb[ns] = NULL;
875 lp->rx_session_id[ns] |= 0x40;
879 insw(ioaddr, buffer, FrameSize / 2);
880 if (sb1000_debug > 1)
881 printk(KERN_WARNING "%s: frame error: got %02x %02x\n",
882 dev->name, st[0], st[1]);
883 stats->rx_frame_errors++;
885 if (sb1000_debug > 2)
886 sb1000_print_status_buffer(dev->name, st, buffer, FrameSize);
890 if ((skb = lp->rx_skb[ns])) {
892 lp->rx_skb[ns] = NULL;
894 lp->rx_session_id[ns] |= 0x40;
900 sb1000_error_dpc(struct net_device *dev)
902 static const unsigned char Command0[6] = {0x80, 0x26, 0x00, 0x00, 0x00, 0x00};
907 struct sb1000_private *lp = netdev_priv(dev);
908 const int ErrorDpcCounterInitialize = 200;
910 ioaddr[0] = dev->base_addr;
911 /* mem_start holds the second I/O address */
912 ioaddr[1] = dev->mem_start;
915 sb1000_wait_for_ready_clear(ioaddr, name);
916 sb1000_send_command(ioaddr, name, Command0);
917 sb1000_wait_for_ready(ioaddr, name);
918 sb1000_read_status(ioaddr, st);
920 lp->rx_error_dpc_count = ErrorDpcCounterInitialize;
925 * Linux interface functions
928 sb1000_open(struct net_device *dev)
931 int ioaddr[2], status;
932 struct sb1000_private *lp = netdev_priv(dev);
933 const unsigned short FirmwareVersion[] = {0x01, 0x01};
935 ioaddr[0] = dev->base_addr;
936 /* mem_start holds the second I/O address */
937 ioaddr[1] = dev->mem_start;
940 /* initialize sb1000 */
941 if ((status = sb1000_reset(ioaddr, name)))
944 if ((status = sb1000_check_CRC(ioaddr, name)))
947 /* initialize private data before board can catch interrupts */
948 lp->rx_skb[0] = NULL;
949 lp->rx_skb[1] = NULL;
950 lp->rx_skb[2] = NULL;
951 lp->rx_skb[3] = NULL;
957 lp->rx_error_count = 0;
958 lp->rx_error_dpc_count = 0;
959 lp->rx_session_id[0] = 0x50;
960 lp->rx_session_id[1] = 0x48;
961 lp->rx_session_id[2] = 0x44;
962 lp->rx_session_id[3] = 0x42;
963 lp->rx_frame_id[0] = 0;
964 lp->rx_frame_id[1] = 0;
965 lp->rx_frame_id[2] = 0;
966 lp->rx_frame_id[3] = 0;
967 if (request_irq(dev->irq, sb1000_interrupt, 0, "sb1000", dev)) {
971 if (sb1000_debug > 2)
972 printk(KERN_DEBUG "%s: Opening, IRQ %d\n", name, dev->irq);
974 /* Activate board and check firmware version */
976 if ((status = sb1000_activate(ioaddr, name)))
979 if ((status = sb1000_get_firmware_version(ioaddr, name, version, 0)))
981 if (version[0] != FirmwareVersion[0] || version[1] != FirmwareVersion[1])
982 printk(KERN_WARNING "%s: found firmware version %x.%02x "
983 "(should be %x.%02x)\n", name, version[0], version[1],
984 FirmwareVersion[0], FirmwareVersion[1]);
987 netif_start_queue(dev);
988 return 0; /* Always succeed */
991 static int sb1000_siocdevprivate(struct net_device *dev, struct ifreq *ifr,
992 void __user *data, int cmd)
995 unsigned char version[2];
997 int ioaddr[2], status, frequency;
998 unsigned int stats[5];
999 struct sb1000_private *lp = netdev_priv(dev);
1001 if (!(dev && dev->flags & IFF_UP))
1004 ioaddr[0] = dev->base_addr;
1005 /* mem_start holds the second I/O address */
1006 ioaddr[1] = dev->mem_start;
1010 case SIOCGCMSTATS: /* get statistics */
1011 stats[0] = dev->stats.rx_bytes;
1012 stats[1] = lp->rx_frames;
1013 stats[2] = dev->stats.rx_packets;
1014 stats[3] = dev->stats.rx_errors;
1015 stats[4] = dev->stats.rx_dropped;
1016 if (copy_to_user(data, stats, sizeof(stats)))
1021 case SIOCGCMFIRMWARE: /* get firmware version */
1022 if ((status = sb1000_get_firmware_version(ioaddr, name, version, 1)))
1024 if (copy_to_user(data, version, sizeof(version)))
1028 case SIOCGCMFREQUENCY: /* get frequency */
1029 if ((status = sb1000_get_frequency(ioaddr, name, &frequency)))
1031 if (put_user(frequency, (int __user *)data))
1035 case SIOCSCMFREQUENCY: /* set frequency */
1036 if (!capable(CAP_NET_ADMIN))
1038 if (get_user(frequency, (int __user *)data))
1040 if ((status = sb1000_set_frequency(ioaddr, name, frequency)))
1044 case SIOCGCMPIDS: /* get PIDs */
1045 if ((status = sb1000_get_PIDs(ioaddr, name, PID)))
1047 if (copy_to_user(data, PID, sizeof(PID)))
1051 case SIOCSCMPIDS: /* set PIDs */
1052 if (!capable(CAP_NET_ADMIN))
1054 if (copy_from_user(PID, data, sizeof(PID)))
1056 if ((status = sb1000_set_PIDs(ioaddr, name, PID)))
1058 /* set session_id, frame_id and pkt_type too */
1059 lp->rx_session_id[0] = 0x50 | (PID[0] & 0x0f);
1060 lp->rx_session_id[1] = 0x48;
1061 lp->rx_session_id[2] = 0x44;
1062 lp->rx_session_id[3] = 0x42;
1063 lp->rx_frame_id[0] = 0;
1064 lp->rx_frame_id[1] = 0;
1065 lp->rx_frame_id[2] = 0;
1066 lp->rx_frame_id[3] = 0;
1076 /* transmit function: do nothing since SB1000 can't send anything out */
1078 sb1000_start_xmit(struct sk_buff *skb, struct net_device *dev)
1080 printk(KERN_WARNING "%s: trying to transmit!!!\n", dev->name);
1081 /* sb1000 can't xmit datagrams */
1083 return NETDEV_TX_OK;
1086 /* SB1000 interrupt handler. */
1087 static irqreturn_t sb1000_interrupt(int irq, void *dev_id)
1089 static const unsigned char Command0[6] = {0x80, 0x2c, 0x00, 0x00, 0x00, 0x00};
1090 static const unsigned char Command1[6] = {0x80, 0x2e, 0x00, 0x00, 0x00, 0x00};
1095 struct net_device *dev = dev_id;
1096 struct sb1000_private *lp = netdev_priv(dev);
1098 const int MaxRxErrorCount = 6;
1100 ioaddr[0] = dev->base_addr;
1101 /* mem_start holds the second I/O address */
1102 ioaddr[1] = dev->mem_start;
1105 /* is it a good interrupt? */
1106 st = inb(ioaddr[1] + 6);
1107 if (!(st & 0x08 && st & 0x20)) {
1111 if (sb1000_debug > 3)
1112 printk(KERN_DEBUG "%s: entering interrupt\n", dev->name);
1114 st = inb(ioaddr[0] + 7);
1116 lp->rx_error_count++;
1118 udelay(SB1000_DELAY);
1119 #endif /* SB1000_DELAY */
1120 sb1000_issue_read_command(ioaddr, name);
1122 sb1000_error_dpc(dev);
1123 sb1000_issue_read_command(ioaddr, name);
1125 if (lp->rx_error_dpc_count && !(--lp->rx_error_dpc_count)) {
1126 sb1000_wait_for_ready_clear(ioaddr, name);
1127 sb1000_send_command(ioaddr, name, Command0);
1128 sb1000_wait_for_ready(ioaddr, name);
1129 sb1000_issue_read_command(ioaddr, name);
1131 if (lp->rx_error_count >= MaxRxErrorCount) {
1132 sb1000_wait_for_ready_clear(ioaddr, name);
1133 sb1000_send_command(ioaddr, name, Command1);
1134 sb1000_wait_for_ready(ioaddr, name);
1135 sb1000_issue_read_command(ioaddr, name);
1136 lp->rx_error_count = 0;
1142 static int sb1000_close(struct net_device *dev)
1146 struct sb1000_private *lp = netdev_priv(dev);
1148 if (sb1000_debug > 2)
1149 printk(KERN_DEBUG "%s: Shutting down sb1000.\n", dev->name);
1151 netif_stop_queue(dev);
1153 ioaddr[0] = dev->base_addr;
1154 /* mem_start holds the second I/O address */
1155 ioaddr[1] = dev->mem_start;
1157 free_irq(dev->irq, dev);
1158 /* If we don't do this, we can't re-insmod it later. */
1159 release_region(ioaddr[1], SB1000_IO_EXTENT);
1160 release_region(ioaddr[0], SB1000_IO_EXTENT);
1162 /* free rx_skb's if needed */
1163 for (i=0; i<4; i++) {
1164 if (lp->rx_skb[i]) {
1165 dev_kfree_skb(lp->rx_skb[i]);
1172 MODULE_DESCRIPTION("General Instruments SB1000 driver");
1173 MODULE_LICENSE("GPL");
1175 module_pnp_driver(sb1000_driver);