Linux Kernel  3.7.1
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
cs89x0.c
Go to the documentation of this file.
1 /* cs89x0.c: A Crystal Semiconductor (Now Cirrus Logic) CS89[02]0
2  * driver for linux.
3  * Written 1996 by Russell Nelson, with reference to skeleton.c
4  * written 1993-1994 by Donald Becker.
5  *
6  * This software may be used and distributed according to the terms
7  * of the GNU General Public License, incorporated herein by reference.
8  *
9  * The author may be reached at [email protected], Crynwr
10  * Software, 521 Pleasant Valley Rd., Potsdam, NY 13676
11  *
12  * Other contributors:
13  * Mike Cruse : [email protected]
14  * Russ Nelson
15  * Melody Lee : [email protected]
16  * Alan Cox
17  * Andrew Morton
18  * Oskar Schirmer : [email protected]
19  * Deepak Saxena : [email protected]
20  * Dmitry Pervushin : [email protected]
21  * Deepak Saxena : [email protected]
22  * Domenico Andreoli : [email protected]
23  */
24 
25 
26 /*
27  * Set this to zero to disable DMA code
28  *
29  * Note that even if DMA is turned off we still support the 'dma' and 'use_dma'
30  * module options so we don't break any startup scripts.
31  */
32 #ifndef CONFIG_ISA_DMA_API
33 #define ALLOW_DMA 0
34 #else
35 #define ALLOW_DMA 1
36 #endif
37 
38 /*
39  * Set this to zero to remove all the debug statements via
40  * dead code elimination
41  */
42 #define DEBUGGING 1
43 
44 /* Sources:
45  * Crynwr packet driver epktisa.
46  * Crystal Semiconductor data sheets.
47  */
48 
49 #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
50 
51 #include <linux/module.h>
52 #include <linux/printk.h>
53 #include <linux/errno.h>
54 #include <linux/netdevice.h>
55 #include <linux/etherdevice.h>
56 #include <linux/platform_device.h>
57 #include <linux/kernel.h>
58 #include <linux/types.h>
59 #include <linux/fcntl.h>
60 #include <linux/interrupt.h>
61 #include <linux/ioport.h>
62 #include <linux/in.h>
63 #include <linux/skbuff.h>
64 #include <linux/spinlock.h>
65 #include <linux/string.h>
66 #include <linux/init.h>
67 #include <linux/bitops.h>
68 #include <linux/delay.h>
69 #include <linux/gfp.h>
70 #include <linux/io.h>
71 
72 #include <asm/irq.h>
73 #include <linux/atomic.h>
74 #if ALLOW_DMA
75 #include <asm/dma.h>
76 #endif
77 
78 #include "cs89x0.h"
79 
80 #define cs89_dbg(val, level, fmt, ...) \
81 do { \
82  if (val <= net_debug) \
83  pr_##level(fmt, ##__VA_ARGS__); \
84 } while (0)
85 
86 static char version[] __initdata =
87  "v2.4.3-pre1 Russell Nelson <[email protected]>, Andrew Morton";
88 
89 #define DRV_NAME "cs89x0"
90 
91 /* First, a few definitions that the brave might change.
92  * A zero-terminated list of I/O addresses to be probed. Some special flags..
93  * Addr & 1 = Read back the address port, look for signature and reset
94  * the page window before probing
95  * Addr & 3 = Reset the page window and probe
96  * The CLPS eval board has the Cirrus chip at 0x80090300, in ARM IO space,
97  * but it is possible that a Cirrus board could be plugged into the ISA
98  * slots.
99  */
100 /* The cs8900 has 4 IRQ pins, software selectable. cs8900_irq_map maps
101  * them to system IRQ numbers. This mapping is card specific and is set to
102  * the configuration of the Cirrus Eval board for this chip.
103  */
104 #if defined(CONFIG_MACH_IXDP2351)
105 #define CS89x0_NONISA_IRQ
106 static unsigned int netcard_portlist[] __used __initdata = {
107  IXDP2351_VIRT_CS8900_BASE, 0
108 };
109 static unsigned int cs8900_irq_map[] = {
110  IRQ_IXDP2351_CS8900, 0, 0, 0
111 };
112 #elif defined(CONFIG_ARCH_IXDP2X01)
113 #define CS89x0_NONISA_IRQ
114 static unsigned int netcard_portlist[] __used __initdata = {
115  IXDP2X01_CS8900_VIRT_BASE, 0
116 };
117 static unsigned int cs8900_irq_map[] = {
118  IRQ_IXDP2X01_CS8900, 0, 0, 0
119 };
120 #else
121 #ifndef CONFIG_CS89x0_PLATFORM
122 static unsigned int netcard_portlist[] __used __initdata = {
123  0x300, 0x320, 0x340, 0x360, 0x200, 0x220, 0x240,
124  0x260, 0x280, 0x2a0, 0x2c0, 0x2e0, 0
125 };
126 static unsigned int cs8900_irq_map[] = {
127  10, 11, 12, 5
128 };
129 #endif
130 #endif
131 
132 #if DEBUGGING
133 static unsigned int net_debug = DEBUGGING;
134 #else
135 #define net_debug 0 /* gcc will remove all the debug code for us */
136 #endif
137 
138 /* The number of low I/O ports used by the ethercard. */
139 #define NETCARD_IO_EXTENT 16
140 
141 /* we allow the user to override various values normally set in the EEPROM */
142 #define FORCE_RJ45 0x0001 /* pick one of these three */
143 #define FORCE_AUI 0x0002
144 #define FORCE_BNC 0x0004
145 
146 #define FORCE_AUTO 0x0010 /* pick one of these three */
147 #define FORCE_HALF 0x0020
148 #define FORCE_FULL 0x0030
149 
150 /* Information that need to be kept for each board. */
151 struct net_local {
152  int chip_type; /* one of: CS8900, CS8920, CS8920M */
153  char chip_revision; /* revision letter of the chip ('A'...) */
154  int send_cmd; /* the proper send command: TX_NOW, TX_AFTER_381, or TX_AFTER_ALL */
155  int auto_neg_cnf; /* auto-negotiation word from EEPROM */
156  int adapter_cnf; /* adapter configuration from EEPROM */
157  int isa_config; /* ISA configuration from EEPROM */
158  int irq_map; /* IRQ map from EEPROM */
159  int rx_mode; /* what mode are we in? 0, RX_MULTCAST_ACCEPT, or RX_ALL_ACCEPT */
160  int curr_rx_cfg; /* a copy of PP_RxCFG */
161  int linectl; /* either 0 or LOW_RX_SQUELCH, depending on configuration. */
162  int send_underrun; /* keep track of how many underruns in a row we get */
163  int force; /* force various values; see FORCE* above. */
165  void __iomem *virt_addr;/* CS89x0 virtual address. */
166  unsigned long size; /* Length of CS89x0 memory region. */
167 #if ALLOW_DMA
168  int use_dma; /* Flag: we're using dma */
169  int dma; /* DMA channel */
170  int dmasize; /* 16 or 64 */
171  unsigned char *dma_buff; /* points to the beginning of the buffer */
172  unsigned char *end_dma_buff; /* points to the end of the buffer */
173  unsigned char *rx_dma_ptr; /* points to the next packet */
174 #endif
175 };
176 
177 /* Example routines you must write ;->. */
178 #define tx_done(dev) 1
179 
180 /*
181  * Permit 'cs89x0_dma=N' in the kernel boot environment
182  */
183 #if !defined(MODULE)
184 #if ALLOW_DMA
185 static int g_cs89x0_dma;
186 
187 static int __init dma_fn(char *str)
188 {
189  g_cs89x0_dma = simple_strtol(str, NULL, 0);
190  return 1;
191 }
192 
193 __setup("cs89x0_dma=", dma_fn);
194 #endif /* ALLOW_DMA */
195 
196 static int g_cs89x0_media__force;
197 
198 static int __init media_fn(char *str)
199 {
200  if (!strcmp(str, "rj45"))
201  g_cs89x0_media__force = FORCE_RJ45;
202  else if (!strcmp(str, "aui"))
203  g_cs89x0_media__force = FORCE_AUI;
204  else if (!strcmp(str, "bnc"))
205  g_cs89x0_media__force = FORCE_BNC;
206 
207  return 1;
208 }
209 
210 __setup("cs89x0_media=", media_fn);
211 #endif
212 
213 #if defined(CONFIG_MACH_IXDP2351)
214 static u16
215 readword(unsigned long base_addr, int portno)
216 {
217  return __raw_readw(base_addr + (portno << 1));
218 }
219 
220 static void
221 writeword(unsigned long base_addr, int portno, u16 value)
222 {
223  __raw_writew(value, base_addr + (portno << 1));
224 }
225 #elif defined(CONFIG_ARCH_IXDP2X01)
226 static u16
227 readword(unsigned long base_addr, int portno)
228 {
229  return __raw_readl(base_addr + (portno << 1));
230 }
231 
232 static void
233 writeword(unsigned long base_addr, int portno, u16 value)
234 {
235  __raw_writel(value, base_addr + (portno << 1));
236 }
237 #endif
238 
239 static void readwords(struct net_local *lp, int portno, void *buf, int length)
240 {
241  u8 *buf8 = (u8 *)buf;
242 
243  do {
244  u16 tmp16;
245 
246  tmp16 = ioread16(lp->virt_addr + portno);
247  *buf8++ = (u8)tmp16;
248  *buf8++ = (u8)(tmp16 >> 8);
249  } while (--length);
250 }
251 
252 static void writewords(struct net_local *lp, int portno, void *buf, int length)
253 {
254  u8 *buf8 = (u8 *)buf;
255 
256  do {
257  u16 tmp16;
258 
259  tmp16 = *buf8++;
260  tmp16 |= (*buf8++) << 8;
261  iowrite16(tmp16, lp->virt_addr + portno);
262  } while (--length);
263 }
264 
265 static u16
266 readreg(struct net_device *dev, u16 regno)
267 {
268  struct net_local *lp = netdev_priv(dev);
269 
270  iowrite16(regno, lp->virt_addr + ADD_PORT);
271  return ioread16(lp->virt_addr + DATA_PORT);
272 }
273 
274 static void
275 writereg(struct net_device *dev, u16 regno, u16 value)
276 {
277  struct net_local *lp = netdev_priv(dev);
278 
279  iowrite16(regno, lp->virt_addr + ADD_PORT);
280  iowrite16(value, lp->virt_addr + DATA_PORT);
281 }
282 
283 static int __init
284 wait_eeprom_ready(struct net_device *dev)
285 {
286  int timeout = jiffies;
287  /* check to see if the EEPROM is ready,
288  * a timeout is used just in case EEPROM is ready when
289  * SI_BUSY in the PP_SelfST is clear
290  */
291  while (readreg(dev, PP_SelfST) & SI_BUSY)
292  if (jiffies - timeout >= 40)
293  return -1;
294  return 0;
295 }
296 
297 static int __init
298 get_eeprom_data(struct net_device *dev, int off, int len, int *buffer)
299 {
300  int i;
301 
302  cs89_dbg(3, info, "EEPROM data from %x for %x:", off, len);
303  for (i = 0; i < len; i++) {
304  if (wait_eeprom_ready(dev) < 0)
305  return -1;
306  /* Now send the EEPROM read command and EEPROM location to read */
307  writereg(dev, PP_EECMD, (off + i) | EEPROM_READ_CMD);
308  if (wait_eeprom_ready(dev) < 0)
309  return -1;
310  buffer[i] = readreg(dev, PP_EEData);
311  cs89_dbg(3, cont, " %04x", buffer[i]);
312  }
313  cs89_dbg(3, cont, "\n");
314  return 0;
315 }
316 
317 static int __init
318 get_eeprom_cksum(int off, int len, int *buffer)
319 {
320  int i, cksum;
321 
322  cksum = 0;
323  for (i = 0; i < len; i++)
324  cksum += buffer[i];
325  cksum &= 0xffff;
326  if (cksum == 0)
327  return 0;
328  return -1;
329 }
330 
331 static void
332 write_irq(struct net_device *dev, int chip_type, int irq)
333 {
334  int i;
335 
336  if (chip_type == CS8900) {
337 #ifndef CONFIG_CS89x0_PLATFORM
338  /* Search the mapping table for the corresponding IRQ pin. */
339  for (i = 0; i != ARRAY_SIZE(cs8900_irq_map); i++)
340  if (cs8900_irq_map[i] == irq)
341  break;
342  /* Not found */
343  if (i == ARRAY_SIZE(cs8900_irq_map))
344  i = 3;
345 #else
346  /* INTRQ0 pin is used for interrupt generation. */
347  i = 0;
348 #endif
349  writereg(dev, PP_CS8900_ISAINT, i);
350  } else {
351  writereg(dev, PP_CS8920_ISAINT, irq);
352  }
353 }
354 
355 static void
356 count_rx_errors(int status, struct net_device *dev)
357 {
358  dev->stats.rx_errors++;
359  if (status & RX_RUNT)
360  dev->stats.rx_length_errors++;
361  if (status & RX_EXTRA_DATA)
362  dev->stats.rx_length_errors++;
363  if ((status & RX_CRC_ERROR) && !(status & (RX_EXTRA_DATA | RX_RUNT)))
364  /* per str 172 */
365  dev->stats.rx_crc_errors++;
366  if (status & RX_DRIBBLE)
367  dev->stats.rx_frame_errors++;
368 }
369 
370 /*********************************
371  * This page contains DMA routines
372  *********************************/
373 
374 #if ALLOW_DMA
375 
376 #define dma_page_eq(ptr1, ptr2) ((long)(ptr1) >> 17 == (long)(ptr2) >> 17)
377 
378 static void
379 get_dma_channel(struct net_device *dev)
380 {
381  struct net_local *lp = netdev_priv(dev);
382 
383  if (lp->dma) {
384  dev->dma = lp->dma;
385  lp->isa_config |= ISA_RxDMA;
386  } else {
387  if ((lp->isa_config & ANY_ISA_DMA) == 0)
388  return;
389  dev->dma = lp->isa_config & DMA_NO_MASK;
390  if (lp->chip_type == CS8900)
391  dev->dma += 5;
392  if (dev->dma < 5 || dev->dma > 7) {
393  lp->isa_config &= ~ANY_ISA_DMA;
394  return;
395  }
396  }
397 }
398 
399 static void
400 write_dma(struct net_device *dev, int chip_type, int dma)
401 {
402  struct net_local *lp = netdev_priv(dev);
403  if ((lp->isa_config & ANY_ISA_DMA) == 0)
404  return;
405  if (chip_type == CS8900)
406  writereg(dev, PP_CS8900_ISADMA, dma - 5);
407  else
408  writereg(dev, PP_CS8920_ISADMA, dma);
409 }
410 
411 static void
412 set_dma_cfg(struct net_device *dev)
413 {
414  struct net_local *lp = netdev_priv(dev);
415 
416  if (lp->use_dma) {
417  if ((lp->isa_config & ANY_ISA_DMA) == 0) {
418  cs89_dbg(3, err, "set_dma_cfg(): no DMA\n");
419  return;
420  }
421  if (lp->isa_config & ISA_RxDMA) {
422  lp->curr_rx_cfg |= RX_DMA_ONLY;
423  cs89_dbg(3, info, "set_dma_cfg(): RX_DMA_ONLY\n");
424  } else {
425  lp->curr_rx_cfg |= AUTO_RX_DMA; /* not that we support it... */
426  cs89_dbg(3, info, "set_dma_cfg(): AUTO_RX_DMA\n");
427  }
428  }
429 }
430 
431 static int
432 dma_bufcfg(struct net_device *dev)
433 {
434  struct net_local *lp = netdev_priv(dev);
435  if (lp->use_dma)
436  return (lp->isa_config & ANY_ISA_DMA) ? RX_DMA_ENBL : 0;
437  else
438  return 0;
439 }
440 
441 static int
442 dma_busctl(struct net_device *dev)
443 {
444  int retval = 0;
445  struct net_local *lp = netdev_priv(dev);
446  if (lp->use_dma) {
447  if (lp->isa_config & ANY_ISA_DMA)
448  retval |= RESET_RX_DMA; /* Reset the DMA pointer */
449  if (lp->isa_config & DMA_BURST)
450  retval |= DMA_BURST_MODE; /* Does ISA config specify DMA burst ? */
451  if (lp->dmasize == 64)
452  retval |= RX_DMA_SIZE_64K; /* did they ask for 64K? */
453  retval |= MEMORY_ON; /* we need memory enabled to use DMA. */
454  }
455  return retval;
456 }
457 
458 static void
459 dma_rx(struct net_device *dev)
460 {
461  struct net_local *lp = netdev_priv(dev);
462  struct sk_buff *skb;
463  int status, length;
464  unsigned char *bp = lp->rx_dma_ptr;
465 
466  status = bp[0] + (bp[1] << 8);
467  length = bp[2] + (bp[3] << 8);
468  bp += 4;
469 
470  cs89_dbg(5, debug, "%s: receiving DMA packet at %lx, status %x, length %x\n",
471  dev->name, (unsigned long)bp, status, length);
472 
473  if ((status & RX_OK) == 0) {
474  count_rx_errors(status, dev);
475  goto skip_this_frame;
476  }
477 
478  /* Malloc up new buffer. */
479  skb = netdev_alloc_skb(dev, length + 2);
480  if (skb == NULL) {
481  /* I don't think we want to do this to a stressed system */
482  cs89_dbg(0, err, "%s: Memory squeeze, dropping packet\n",
483  dev->name);
484  dev->stats.rx_dropped++;
485 
486  /* AKPM: advance bp to the next frame */
487 skip_this_frame:
488  bp += (length + 3) & ~3;
489  if (bp >= lp->end_dma_buff)
490  bp -= lp->dmasize * 1024;
491  lp->rx_dma_ptr = bp;
492  return;
493  }
494  skb_reserve(skb, 2); /* longword align L3 header */
495 
496  if (bp + length > lp->end_dma_buff) {
497  int semi_cnt = lp->end_dma_buff - bp;
498  memcpy(skb_put(skb, semi_cnt), bp, semi_cnt);
499  memcpy(skb_put(skb, length - semi_cnt), lp->dma_buff,
500  length - semi_cnt);
501  } else {
502  memcpy(skb_put(skb, length), bp, length);
503  }
504  bp += (length + 3) & ~3;
505  if (bp >= lp->end_dma_buff)
506  bp -= lp->dmasize*1024;
507  lp->rx_dma_ptr = bp;
508 
509  cs89_dbg(3, info, "%s: received %d byte DMA packet of type %x\n",
510  dev->name, length,
511  ((skb->data[ETH_ALEN + ETH_ALEN] << 8) |
512  skb->data[ETH_ALEN + ETH_ALEN + 1]));
513 
514  skb->protocol = eth_type_trans(skb, dev);
515  netif_rx(skb);
516  dev->stats.rx_packets++;
517  dev->stats.rx_bytes += length;
518 }
519 
520 static void release_dma_buff(struct net_local *lp)
521 {
522  if (lp->dma_buff) {
523  free_pages((unsigned long)(lp->dma_buff),
524  get_order(lp->dmasize * 1024));
525  lp->dma_buff = NULL;
526  }
527 }
528 
529 #endif /* ALLOW_DMA */
530 
531 static void
532 control_dc_dc(struct net_device *dev, int on_not_off)
533 {
534  struct net_local *lp = netdev_priv(dev);
535  unsigned int selfcontrol;
536  int timenow = jiffies;
537  /* control the DC to DC convertor in the SelfControl register.
538  * Note: This is hooked up to a general purpose pin, might not
539  * always be a DC to DC convertor.
540  */
541 
542  selfcontrol = HCB1_ENBL; /* Enable the HCB1 bit as an output */
543  if (((lp->adapter_cnf & A_CNF_DC_DC_POLARITY) != 0) ^ on_not_off)
544  selfcontrol |= HCB1;
545  else
546  selfcontrol &= ~HCB1;
547  writereg(dev, PP_SelfCTL, selfcontrol);
548 
549  /* Wait for the DC/DC converter to power up - 500ms */
550  while (jiffies - timenow < HZ)
551  ;
552 }
553 
554 /* send a test packet - return true if carrier bits are ok */
555 static int
556 send_test_pkt(struct net_device *dev)
557 {
558  struct net_local *lp = netdev_priv(dev);
559  char test_packet[] = {
560  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
561  0, 46, /* A 46 in network order */
562  0, 0, /* DSAP=0 & SSAP=0 fields */
563  0xf3, 0 /* Control (Test Req + P bit set) */
564  };
565  long timenow = jiffies;
566 
568 
569  memcpy(test_packet, dev->dev_addr, ETH_ALEN);
570  memcpy(test_packet + ETH_ALEN, dev->dev_addr, ETH_ALEN);
571 
574 
575  /* Test to see if the chip has allocated memory for the packet */
576  while (jiffies - timenow < 5)
577  if (readreg(dev, PP_BusST) & READY_FOR_TX_NOW)
578  break;
579  if (jiffies - timenow >= 5)
580  return 0; /* this shouldn't happen */
581 
582  /* Write the contents of the packet */
583  writewords(lp, TX_FRAME_PORT, test_packet, (ETH_ZLEN + 1) >> 1);
584 
585  cs89_dbg(1, debug, "Sending test packet ");
586  /* wait a couple of jiffies for packet to be received */
587  for (timenow = jiffies; jiffies - timenow < 3;)
588  ;
589  if ((readreg(dev, PP_TxEvent) & TX_SEND_OK_BITS) == TX_OK) {
590  cs89_dbg(1, cont, "succeeded\n");
591  return 1;
592  }
593  cs89_dbg(1, cont, "failed\n");
594  return 0;
595 }
596 
597 #define DETECTED_NONE 0
598 #define DETECTED_RJ45H 1
599 #define DETECTED_RJ45F 2
600 #define DETECTED_AUI 3
601 #define DETECTED_BNC 4
602 
603 static int
604 detect_tp(struct net_device *dev)
605 {
606  struct net_local *lp = netdev_priv(dev);
607  int timenow = jiffies;
608  int fdx;
609 
610  cs89_dbg(1, debug, "%s: Attempting TP\n", dev->name);
611 
612  /* If connected to another full duplex capable 10-Base-T card
613  * the link pulses seem to be lost when the auto detect bit in
614  * the LineCTL is set. To overcome this the auto detect bit will
615  * be cleared whilst testing the 10-Base-T interface. This would
616  * not be necessary for the sparrow chip but is simpler to do it
617  * anyway.
618  */
619  writereg(dev, PP_LineCTL, lp->linectl & ~AUI_ONLY);
620  control_dc_dc(dev, 0);
621 
622  /* Delay for the hardware to work out if the TP cable is present
623  * - 150ms
624  */
625  for (timenow = jiffies; jiffies - timenow < 15;)
626  ;
627  if ((readreg(dev, PP_LineST) & LINK_OK) == 0)
628  return DETECTED_NONE;
629 
630  if (lp->chip_type == CS8900) {
631  switch (lp->force & 0xf0) {
632 #if 0
633  case FORCE_AUTO:
634  pr_info("%s: cs8900 doesn't autonegotiate\n",
635  dev->name);
636  return DETECTED_NONE;
637 #endif
638  /* CS8900 doesn't support AUTO, change to HALF*/
639  case FORCE_AUTO:
640  lp->force &= ~FORCE_AUTO;
641  lp->force |= FORCE_HALF;
642  break;
643  case FORCE_HALF:
644  break;
645  case FORCE_FULL:
646  writereg(dev, PP_TestCTL,
647  readreg(dev, PP_TestCTL) | FDX_8900);
648  break;
649  }
650  fdx = readreg(dev, PP_TestCTL) & FDX_8900;
651  } else {
652  switch (lp->force & 0xf0) {
653  case FORCE_AUTO:
655  break;
656  case FORCE_HALF:
657  lp->auto_neg_cnf = 0;
658  break;
659  case FORCE_FULL:
661  break;
662  }
663 
665 
666  if ((lp->auto_neg_cnf & AUTO_NEG_BITS) == AUTO_NEG_ENABLE) {
667  pr_info("%s: negotiating duplex...\n", dev->name);
668  while (readreg(dev, PP_AutoNegST) & AUTO_NEG_BUSY) {
669  if (jiffies - timenow > 4000) {
670  pr_err("**** Full / half duplex auto-negotiation timed out ****\n");
671  break;
672  }
673  }
674  }
675  fdx = readreg(dev, PP_AutoNegST) & FDX_ACTIVE;
676  }
677  if (fdx)
678  return DETECTED_RJ45F;
679  else
680  return DETECTED_RJ45H;
681 }
682 
683 static int
684 detect_bnc(struct net_device *dev)
685 {
686  struct net_local *lp = netdev_priv(dev);
687 
688  cs89_dbg(1, debug, "%s: Attempting BNC\n", dev->name);
689  control_dc_dc(dev, 1);
690 
692 
693  if (send_test_pkt(dev))
694  return DETECTED_BNC;
695  else
696  return DETECTED_NONE;
697 }
698 
699 static int
700 detect_aui(struct net_device *dev)
701 {
702  struct net_local *lp = netdev_priv(dev);
703 
704  cs89_dbg(1, debug, "%s: Attempting AUI\n", dev->name);
705  control_dc_dc(dev, 0);
706 
708 
709  if (send_test_pkt(dev))
710  return DETECTED_AUI;
711  else
712  return DETECTED_NONE;
713 }
714 
715 /* We have a good packet(s), get it/them out of the buffers. */
716 static void
717 net_rx(struct net_device *dev)
718 {
719  struct net_local *lp = netdev_priv(dev);
720  struct sk_buff *skb;
721  int status, length;
722 
723  status = ioread16(lp->virt_addr + RX_FRAME_PORT);
724  length = ioread16(lp->virt_addr + RX_FRAME_PORT);
725 
726  if ((status & RX_OK) == 0) {
727  count_rx_errors(status, dev);
728  return;
729  }
730 
731  /* Malloc up new buffer. */
732  skb = netdev_alloc_skb(dev, length + 2);
733  if (skb == NULL) {
734 #if 0 /* Again, this seems a cruel thing to do */
735  pr_warn("%s: Memory squeeze, dropping packet\n", dev->name);
736 #endif
737  dev->stats.rx_dropped++;
738  return;
739  }
740  skb_reserve(skb, 2); /* longword align L3 header */
741 
742  readwords(lp, RX_FRAME_PORT, skb_put(skb, length), length >> 1);
743  if (length & 1)
744  skb->data[length-1] = ioread16(lp->virt_addr + RX_FRAME_PORT);
745 
746  cs89_dbg(3, debug, "%s: received %d byte packet of type %x\n",
747  dev->name, length,
748  (skb->data[ETH_ALEN + ETH_ALEN] << 8) |
749  skb->data[ETH_ALEN + ETH_ALEN + 1]);
750 
751  skb->protocol = eth_type_trans(skb, dev);
752  netif_rx(skb);
753  dev->stats.rx_packets++;
754  dev->stats.rx_bytes += length;
755 }
756 
757 /* The typical workload of the driver:
758  * Handle the network interface interrupts.
759  */
760 
761 static irqreturn_t net_interrupt(int irq, void *dev_id)
762 {
763  struct net_device *dev = dev_id;
764  struct net_local *lp;
765  int status;
766  int handled = 0;
767 
768  lp = netdev_priv(dev);
769 
770  /* we MUST read all the events out of the ISQ, otherwise we'll never
771  * get interrupted again. As a consequence, we can't have any limit
772  * on the number of times we loop in the interrupt handler. The
773  * hardware guarantees that eventually we'll run out of events. Of
774  * course, if you're on a slow machine, and packets are arriving
775  * faster than you can read them off, you're screwed. Hasta la
776  * vista, baby!
777  */
778  while ((status = ioread16(lp->virt_addr + ISQ_PORT))) {
779  cs89_dbg(4, debug, "%s: event=%04x\n", dev->name, status);
780  handled = 1;
781  switch (status & ISQ_EVENT_MASK) {
782  case ISQ_RECEIVER_EVENT:
783  /* Got a packet(s). */
784  net_rx(dev);
785  break;
787  dev->stats.tx_packets++;
788  netif_wake_queue(dev); /* Inform upper layers. */
789  if ((status & (TX_OK |
790  TX_LOST_CRS |
791  TX_SQE_ERROR |
792  TX_LATE_COL |
793  TX_16_COL)) != TX_OK) {
794  if ((status & TX_OK) == 0)
795  dev->stats.tx_errors++;
796  if (status & TX_LOST_CRS)
797  dev->stats.tx_carrier_errors++;
798  if (status & TX_SQE_ERROR)
799  dev->stats.tx_heartbeat_errors++;
800  if (status & TX_LATE_COL)
801  dev->stats.tx_window_errors++;
802  if (status & TX_16_COL)
803  dev->stats.tx_aborted_errors++;
804  }
805  break;
806  case ISQ_BUFFER_EVENT:
807  if (status & READY_FOR_TX) {
808  /* we tried to transmit a packet earlier,
809  * but inexplicably ran out of buffers.
810  * That shouldn't happen since we only ever
811  * load one packet. Shrug. Do the right
812  * thing anyway.
813  */
814  netif_wake_queue(dev); /* Inform upper layers. */
815  }
816  if (status & TX_UNDERRUN) {
817  cs89_dbg(0, err, "%s: transmit underrun\n",
818  dev->name);
819  lp->send_underrun++;
820  if (lp->send_underrun == 3)
821  lp->send_cmd = TX_AFTER_381;
822  else if (lp->send_underrun == 6)
823  lp->send_cmd = TX_AFTER_ALL;
824  /* transmit cycle is done, although
825  * frame wasn't transmitted - this
826  * avoids having to wait for the upper
827  * layers to timeout on us, in the
828  * event of a tx underrun
829  */
830  netif_wake_queue(dev); /* Inform upper layers. */
831  }
832 #if ALLOW_DMA
833  if (lp->use_dma && (status & RX_DMA)) {
834  int count = readreg(dev, PP_DmaFrameCnt);
835  while (count) {
836  cs89_dbg(5, debug,
837  "%s: receiving %d DMA frames\n",
838  dev->name, count);
839  if (count > 1)
840  cs89_dbg(2, debug,
841  "%s: receiving %d DMA frames\n",
842  dev->name, count);
843  dma_rx(dev);
844  if (--count == 0)
845  count = readreg(dev, PP_DmaFrameCnt);
846  if (count > 0)
847  cs89_dbg(2, debug,
848  "%s: continuing with %d DMA frames\n",
849  dev->name, count);
850  }
851  }
852 #endif
853  break;
854  case ISQ_RX_MISS_EVENT:
855  dev->stats.rx_missed_errors += (status >> 6);
856  break;
857  case ISQ_TX_COL_EVENT:
858  dev->stats.collisions += (status >> 6);
859  break;
860  }
861  }
862  return IRQ_RETVAL(handled);
863 }
864 
865 /* Open/initialize the board. This is called (in the current kernel)
866  sometime after booting when the 'ifconfig' program is run.
867 
868  This routine should set everything up anew at each open, even
869  registers that "should" only need to be set once at boot, so that
870  there is non-reboot way to recover if something goes wrong.
871 */
872 
873 /* AKPM: do we need to do any locking here? */
874 
875 static int
876 net_open(struct net_device *dev)
877 {
878  struct net_local *lp = netdev_priv(dev);
879  int result = 0;
880  int i;
881  int ret;
882 
883  if (dev->irq < 2) {
884  /* Allow interrupts to be generated by the chip */
885 /* Cirrus' release had this: */
886 #if 0
888 #endif
889 /* And 2.3.47 had this: */
891 
892  for (i = 2; i < CS8920_NO_INTS; i++) {
893  if ((1 << i) & lp->irq_map) {
894  if (request_irq(i, net_interrupt, 0, dev->name,
895  dev) == 0) {
896  dev->irq = i;
897  write_irq(dev, lp->chip_type, i);
898  /* writereg(dev, PP_BufCFG, GENERATE_SW_INTERRUPT); */
899  break;
900  }
901  }
902  }
903 
904  if (i >= CS8920_NO_INTS) {
905  writereg(dev, PP_BusCTL, 0); /* disable interrupts. */
906  pr_err("can't get an interrupt\n");
907  ret = -EAGAIN;
908  goto bad_out;
909  }
910  } else {
911 #if !defined(CS89x0_NONISA_IRQ) && !defined(CONFIG_CS89x0_PLATFORM)
912  if (((1 << dev->irq) & lp->irq_map) == 0) {
913  pr_err("%s: IRQ %d is not in our map of allowable IRQs, which is %x\n",
914  dev->name, dev->irq, lp->irq_map);
915  ret = -EAGAIN;
916  goto bad_out;
917  }
918 #endif
919 /* FIXME: Cirrus' release had this: */
921 /* And 2.3.47 had this: */
922 #if 0
924 #endif
925  write_irq(dev, lp->chip_type, dev->irq);
926  ret = request_irq(dev->irq, net_interrupt, 0, dev->name, dev);
927  if (ret) {
928  pr_err("request_irq(%d) failed\n", dev->irq);
929  goto bad_out;
930  }
931  }
932 
933 #if ALLOW_DMA
934  if (lp->use_dma && (lp->isa_config & ANY_ISA_DMA)) {
935  unsigned long flags;
936  lp->dma_buff = (unsigned char *)__get_dma_pages(GFP_KERNEL,
937  get_order(lp->dmasize * 1024));
938  if (!lp->dma_buff) {
939  pr_err("%s: cannot get %dK memory for DMA\n",
940  dev->name, lp->dmasize);
941  goto release_irq;
942  }
943  cs89_dbg(1, debug, "%s: dma %lx %lx\n",
944  dev->name,
945  (unsigned long)lp->dma_buff,
946  (unsigned long)isa_virt_to_bus(lp->dma_buff));
947  if ((unsigned long)lp->dma_buff >= MAX_DMA_ADDRESS ||
948  !dma_page_eq(lp->dma_buff,
949  lp->dma_buff + lp->dmasize * 1024 - 1)) {
950  pr_err("%s: not usable as DMA buffer\n", dev->name);
951  goto release_irq;
952  }
953  memset(lp->dma_buff, 0, lp->dmasize * 1024); /* Why? */
954  if (request_dma(dev->dma, dev->name)) {
955  pr_err("%s: cannot get dma channel %d\n",
956  dev->name, dev->dma);
957  goto release_irq;
958  }
959  write_dma(dev, lp->chip_type, dev->dma);
960  lp->rx_dma_ptr = lp->dma_buff;
961  lp->end_dma_buff = lp->dma_buff + lp->dmasize * 1024;
962  spin_lock_irqsave(&lp->lock, flags);
963  disable_dma(dev->dma);
964  clear_dma_ff(dev->dma);
965  set_dma_mode(dev->dma, DMA_RX_MODE); /* auto_init as well */
966  set_dma_addr(dev->dma, isa_virt_to_bus(lp->dma_buff));
967  set_dma_count(dev->dma, lp->dmasize * 1024);
968  enable_dma(dev->dma);
969  spin_unlock_irqrestore(&lp->lock, flags);
970  }
971 #endif /* ALLOW_DMA */
972 
973  /* set the Ethernet address */
974  for (i = 0; i < ETH_ALEN / 2; i++)
975  writereg(dev, PP_IA + i * 2,
976  (dev->dev_addr[i * 2] |
977  (dev->dev_addr[i * 2 + 1] << 8)));
978 
979  /* while we're testing the interface, leave interrupts disabled */
981 
982  /* Set the LineCTL quintuplet based on adapter configuration read from EEPROM */
983  if ((lp->adapter_cnf & A_CNF_EXTND_10B_2) &&
985  lp->linectl = LOW_RX_SQUELCH;
986  else
987  lp->linectl = 0;
988 
989  /* check to make sure that they have the "right" hardware available */
990  switch (lp->adapter_cnf & A_CNF_MEDIA_TYPE) {
991  case A_CNF_MEDIA_10B_T:
992  result = lp->adapter_cnf & A_CNF_10B_T;
993  break;
994  case A_CNF_MEDIA_AUI:
995  result = lp->adapter_cnf & A_CNF_AUI;
996  break;
997  case A_CNF_MEDIA_10B_2:
998  result = lp->adapter_cnf & A_CNF_10B_2;
999  break;
1000  default:
1001  result = lp->adapter_cnf & (A_CNF_10B_T |
1002  A_CNF_AUI |
1003  A_CNF_10B_2);
1004  }
1005  if (!result) {
1006  pr_err("%s: EEPROM is configured for unavailable media\n",
1007  dev->name);
1008 release_dma:
1009 #if ALLOW_DMA
1010  free_dma(dev->dma);
1011 release_irq:
1012  release_dma_buff(lp);
1013 #endif
1014  writereg(dev, PP_LineCTL,
1016  free_irq(dev->irq, dev);
1017  ret = -EAGAIN;
1018  goto bad_out;
1019  }
1020 
1021  /* set the hardware to the configured choice */
1022  switch (lp->adapter_cnf & A_CNF_MEDIA_TYPE) {
1023  case A_CNF_MEDIA_10B_T:
1024  result = detect_tp(dev);
1025  if (result == DETECTED_NONE) {
1026  pr_warn("%s: 10Base-T (RJ-45) has no cable\n",
1027  dev->name);
1028  if (lp->auto_neg_cnf & IMM_BIT) /* check "ignore missing media" bit */
1029  result = DETECTED_RJ45H; /* Yes! I don't care if I see a link pulse */
1030  }
1031  break;
1032  case A_CNF_MEDIA_AUI:
1033  result = detect_aui(dev);
1034  if (result == DETECTED_NONE) {
1035  pr_warn("%s: 10Base-5 (AUI) has no cable\n", dev->name);
1036  if (lp->auto_neg_cnf & IMM_BIT) /* check "ignore missing media" bit */
1037  result = DETECTED_AUI; /* Yes! I don't care if I see a carrrier */
1038  }
1039  break;
1040  case A_CNF_MEDIA_10B_2:
1041  result = detect_bnc(dev);
1042  if (result == DETECTED_NONE) {
1043  pr_warn("%s: 10Base-2 (BNC) has no cable\n", dev->name);
1044  if (lp->auto_neg_cnf & IMM_BIT) /* check "ignore missing media" bit */
1045  result = DETECTED_BNC; /* Yes! I don't care if I can xmit a packet */
1046  }
1047  break;
1048  case A_CNF_MEDIA_AUTO:
1050  if (lp->adapter_cnf & A_CNF_10B_T) {
1051  result = detect_tp(dev);
1052  if (result != DETECTED_NONE)
1053  break;
1054  }
1055  if (lp->adapter_cnf & A_CNF_AUI) {
1056  result = detect_aui(dev);
1057  if (result != DETECTED_NONE)
1058  break;
1059  }
1060  if (lp->adapter_cnf & A_CNF_10B_2) {
1061  result = detect_bnc(dev);
1062  if (result != DETECTED_NONE)
1063  break;
1064  }
1065  pr_err("%s: no media detected\n", dev->name);
1066  goto release_dma;
1067  }
1068  switch (result) {
1069  case DETECTED_NONE:
1070  pr_err("%s: no network cable attached to configured media\n",
1071  dev->name);
1072  goto release_dma;
1073  case DETECTED_RJ45H:
1074  pr_info("%s: using half-duplex 10Base-T (RJ-45)\n", dev->name);
1075  break;
1076  case DETECTED_RJ45F:
1077  pr_info("%s: using full-duplex 10Base-T (RJ-45)\n", dev->name);
1078  break;
1079  case DETECTED_AUI:
1080  pr_info("%s: using 10Base-5 (AUI)\n", dev->name);
1081  break;
1082  case DETECTED_BNC:
1083  pr_info("%s: using 10Base-2 (BNC)\n", dev->name);
1084  break;
1085  }
1086 
1087  /* Turn on both receive and transmit operations */
1088  writereg(dev, PP_LineCTL,
1090 
1091  /* Receive only error free packets addressed to this card */
1092  lp->rx_mode = 0;
1094 
1096 
1097  if (lp->isa_config & STREAM_TRANSFER)
1098  lp->curr_rx_cfg |= RX_STREAM_ENBL;
1099 #if ALLOW_DMA
1100  set_dma_cfg(dev);
1101 #endif
1102  writereg(dev, PP_RxCFG, lp->curr_rx_cfg);
1103 
1106  TX_OK_ENBL |
1108  TX_JBR_ENBL |
1109  TX_ANY_COL_ENBL |
1110  TX_16_COL_ENBL));
1111 
1114 #if ALLOW_DMA
1115  dma_bufcfg(dev) |
1116 #endif
1118  TX_UNDERRUN_ENBL));
1119 
1120  /* now that we've got our act together, enable everything */
1122  | (dev->mem_start ? MEMORY_ON : 0) /* turn memory on */
1123 #if ALLOW_DMA
1124  | dma_busctl(dev)
1125 #endif
1126  ));
1127  netif_start_queue(dev);
1128  cs89_dbg(1, debug, "net_open() succeeded\n");
1129  return 0;
1130 bad_out:
1131  return ret;
1132 }
1133 
1134 /* The inverse routine to net_open(). */
1135 static int
1136 net_close(struct net_device *dev)
1137 {
1138 #if ALLOW_DMA
1139  struct net_local *lp = netdev_priv(dev);
1140 #endif
1141 
1142  netif_stop_queue(dev);
1143 
1144  writereg(dev, PP_RxCFG, 0);
1145  writereg(dev, PP_TxCFG, 0);
1146  writereg(dev, PP_BufCFG, 0);
1147  writereg(dev, PP_BusCTL, 0);
1148 
1149  free_irq(dev->irq, dev);
1150 
1151 #if ALLOW_DMA
1152  if (lp->use_dma && lp->dma) {
1153  free_dma(dev->dma);
1154  release_dma_buff(lp);
1155  }
1156 #endif
1157 
1158  /* Update the statistics here. */
1159  return 0;
1160 }
1161 
1162 /* Get the current statistics.
1163  * This may be called with the card open or closed.
1164  */
1165 static struct net_device_stats *
1166 net_get_stats(struct net_device *dev)
1167 {
1168  struct net_local *lp = netdev_priv(dev);
1169  unsigned long flags;
1170 
1171  spin_lock_irqsave(&lp->lock, flags);
1172  /* Update the statistics from the device registers. */
1173  dev->stats.rx_missed_errors += (readreg(dev, PP_RxMiss) >> 6);
1174  dev->stats.collisions += (readreg(dev, PP_TxCol) >> 6);
1175  spin_unlock_irqrestore(&lp->lock, flags);
1176 
1177  return &dev->stats;
1178 }
1179 
1180 static void net_timeout(struct net_device *dev)
1181 {
1182  /* If we get here, some higher level has decided we are broken.
1183  There should really be a "kick me" function call instead. */
1184  cs89_dbg(0, err, "%s: transmit timed out, %s?\n",
1185  dev->name,
1186  tx_done(dev) ? "IRQ conflict" : "network cable problem");
1187  /* Try to restart the adaptor. */
1188  netif_wake_queue(dev);
1189 }
1190 
1191 static netdev_tx_t net_send_packet(struct sk_buff *skb, struct net_device *dev)
1192 {
1193  struct net_local *lp = netdev_priv(dev);
1194  unsigned long flags;
1195 
1196  cs89_dbg(3, debug, "%s: sent %d byte packet of type %x\n",
1197  dev->name, skb->len,
1198  ((skb->data[ETH_ALEN + ETH_ALEN] << 8) |
1199  skb->data[ETH_ALEN + ETH_ALEN + 1]));
1200 
1201  /* keep the upload from being interrupted, since we
1202  * ask the chip to start transmitting before the
1203  * whole packet has been completely uploaded.
1204  */
1205 
1206  spin_lock_irqsave(&lp->lock, flags);
1207  netif_stop_queue(dev);
1208 
1209  /* initiate a transmit sequence */
1211  iowrite16(skb->len, lp->virt_addr + TX_LEN_PORT);
1212 
1213  /* Test to see if the chip has allocated memory for the packet */
1214  if ((readreg(dev, PP_BusST) & READY_FOR_TX_NOW) == 0) {
1215  /* Gasp! It hasn't. But that shouldn't happen since
1216  * we're waiting for TxOk, so return 1 and requeue this packet.
1217  */
1218 
1219  spin_unlock_irqrestore(&lp->lock, flags);
1220  cs89_dbg(0, err, "Tx buffer not free!\n");
1221  return NETDEV_TX_BUSY;
1222  }
1223  /* Write the contents of the packet */
1224  writewords(lp, TX_FRAME_PORT, skb->data, (skb->len + 1) >> 1);
1225  spin_unlock_irqrestore(&lp->lock, flags);
1226  dev->stats.tx_bytes += skb->len;
1227  dev_kfree_skb(skb);
1228 
1229  /* We DO NOT call netif_wake_queue() here.
1230  * We also DO NOT call netif_start_queue().
1231  *
1232  * Either of these would cause another bottom half run through
1233  * net_send_packet() before this packet has fully gone out.
1234  * That causes us to hit the "Gasp!" above and the send is rescheduled.
1235  * it runs like a dog. We just return and wait for the Tx completion
1236  * interrupt handler to restart the netdevice layer
1237  */
1238 
1239  return NETDEV_TX_OK;
1240 }
1241 
1242 static void set_multicast_list(struct net_device *dev)
1243 {
1244  struct net_local *lp = netdev_priv(dev);
1245  unsigned long flags;
1246  u16 cfg;
1247 
1248  spin_lock_irqsave(&lp->lock, flags);
1249  if (dev->flags & IFF_PROMISC)
1250  lp->rx_mode = RX_ALL_ACCEPT;
1251  else if ((dev->flags & IFF_ALLMULTI) || !netdev_mc_empty(dev))
1252  /* The multicast-accept list is initialized to accept-all,
1253  * and we rely on higher-level filtering for now.
1254  */
1256  else
1257  lp->rx_mode = 0;
1258 
1259  writereg(dev, PP_RxCTL, DEF_RX_ACCEPT | lp->rx_mode);
1260 
1261  /* in promiscuous mode, we accept errored packets,
1262  * so we have to enable interrupts on them also
1263  */
1264  cfg = lp->curr_rx_cfg;
1265  if (lp->rx_mode == RX_ALL_ACCEPT)
1267  writereg(dev, PP_RxCFG, cfg);
1268  spin_unlock_irqrestore(&lp->lock, flags);
1269 }
1270 
1271 static int set_mac_address(struct net_device *dev, void *p)
1272 {
1273  int i;
1274  struct sockaddr *addr = p;
1275 
1276  if (netif_running(dev))
1277  return -EBUSY;
1278 
1279  memcpy(dev->dev_addr, addr->sa_data, dev->addr_len);
1280 
1281  cs89_dbg(0, debug, "%s: Setting MAC address to %pM\n",
1282  dev->name, dev->dev_addr);
1283 
1284  /* set the Ethernet address */
1285  for (i = 0; i < ETH_ALEN / 2; i++)
1286  writereg(dev, PP_IA + i * 2,
1287  (dev->dev_addr[i * 2] |
1288  (dev->dev_addr[i * 2 + 1] << 8)));
1289 
1290  return 0;
1291 }
1292 
1293 #ifdef CONFIG_NET_POLL_CONTROLLER
1294 /*
1295  * Polling receive - used by netconsole and other diagnostic tools
1296  * to allow network i/o with interrupts disabled.
1297  */
1298 static void net_poll_controller(struct net_device *dev)
1299 {
1300  disable_irq(dev->irq);
1301  net_interrupt(dev->irq, dev);
1302  enable_irq(dev->irq);
1303 }
1304 #endif
1305 
1306 static const struct net_device_ops net_ops = {
1307  .ndo_open = net_open,
1308  .ndo_stop = net_close,
1309  .ndo_tx_timeout = net_timeout,
1310  .ndo_start_xmit = net_send_packet,
1311  .ndo_get_stats = net_get_stats,
1312  .ndo_set_rx_mode = set_multicast_list,
1313  .ndo_set_mac_address = set_mac_address,
1314 #ifdef CONFIG_NET_POLL_CONTROLLER
1315  .ndo_poll_controller = net_poll_controller,
1316 #endif
1317  .ndo_change_mtu = eth_change_mtu,
1318  .ndo_validate_addr = eth_validate_addr,
1319 };
1320 
1321 static void __init reset_chip(struct net_device *dev)
1322 {
1323 #if !defined(CONFIG_MACH_MX31ADS)
1324 #if !defined(CS89x0_NONISA_IRQ)
1325  struct net_local *lp = netdev_priv(dev);
1326 #endif /* CS89x0_NONISA_IRQ */
1327  int reset_start_time;
1328 
1330 
1331  /* wait 30 ms */
1332  msleep(30);
1333 
1334 #if !defined(CS89x0_NONISA_IRQ)
1335  if (lp->chip_type != CS8900) {
1336  /* Hardware problem requires PNP registers to be reconfigured after a reset */
1338  iowrite8(dev->irq, lp->virt_addr + DATA_PORT);
1339  iowrite8(0, lp->virt_addr + DATA_PORT + 1);
1340 
1342  iowrite8((dev->mem_start >> 16) & 0xff,
1343  lp->virt_addr + DATA_PORT);
1344  iowrite8((dev->mem_start >> 8) & 0xff,
1345  lp->virt_addr + DATA_PORT + 1);
1346  }
1347 #endif /* CS89x0_NONISA_IRQ */
1348 
1349  /* Wait until the chip is reset */
1350  reset_start_time = jiffies;
1351  while ((readreg(dev, PP_SelfST) & INIT_DONE) == 0 &&
1352  jiffies - reset_start_time < 2)
1353  ;
1354 #endif /* !CONFIG_MACH_MX31ADS */
1355 }
1356 
1357 /* This is the real probe routine.
1358  * Linux has a history of friendly device probes on the ISA bus.
1359  * A good device probes avoids doing writes, and
1360  * verifies that the correct device exists and functions.
1361  * Return 0 on success.
1362  */
1363 static int __init
1364 cs89x0_probe1(struct net_device *dev, void __iomem *ioaddr, int modular)
1365 {
1366  struct net_local *lp = netdev_priv(dev);
1367  int i;
1368  int tmp;
1369  unsigned rev_type = 0;
1370  int eeprom_buff[CHKSUM_LEN];
1371  int retval;
1372 
1373  /* Initialize the device structure. */
1374  if (!modular) {
1375  memset(lp, 0, sizeof(*lp));
1376  spin_lock_init(&lp->lock);
1377 #ifndef MODULE
1378 #if ALLOW_DMA
1379  if (g_cs89x0_dma) {
1380  lp->use_dma = 1;
1381  lp->dma = g_cs89x0_dma;
1382  lp->dmasize = 16; /* Could make this an option... */
1383  }
1384 #endif
1385  lp->force = g_cs89x0_media__force;
1386 #endif
1387  }
1388 
1389  pr_debug("PP_addr at %p[%x]: 0x%x\n",
1390  ioaddr, ADD_PORT, ioread16(ioaddr + ADD_PORT));
1391  iowrite16(PP_ChipID, ioaddr + ADD_PORT);
1392 
1393  tmp = ioread16(ioaddr + DATA_PORT);
1394  if (tmp != CHIP_EISA_ID_SIG) {
1395  pr_debug("%s: incorrect signature at %p[%x]: 0x%x!="
1396  CHIP_EISA_ID_SIG_STR "\n",
1397  dev->name, ioaddr, DATA_PORT, tmp);
1398  retval = -ENODEV;
1399  goto out1;
1400  }
1401 
1402  lp->virt_addr = ioaddr;
1403 
1404  /* get the chip type */
1405  rev_type = readreg(dev, PRODUCT_ID_ADD);
1406  lp->chip_type = rev_type & ~REVISON_BITS;
1407  lp->chip_revision = ((rev_type & REVISON_BITS) >> 8) + 'A';
1408 
1409  /* Check the chip type and revision in order to set the correct
1410  * send command. CS8920 revision C and CS8900 revision F can use
1411  * the faster send.
1412  */
1413  lp->send_cmd = TX_AFTER_381;
1414  if (lp->chip_type == CS8900 && lp->chip_revision >= 'F')
1415  lp->send_cmd = TX_NOW;
1416  if (lp->chip_type != CS8900 && lp->chip_revision >= 'C')
1417  lp->send_cmd = TX_NOW;
1418 
1419  pr_info_once("%s\n", version);
1420 
1421  pr_info("%s: cs89%c0%s rev %c found at %p ",
1422  dev->name,
1423  lp->chip_type == CS8900 ? '0' : '2',
1424  lp->chip_type == CS8920M ? "M" : "",
1425  lp->chip_revision,
1426  lp->virt_addr);
1427 
1428  reset_chip(dev);
1429 
1430  /* Here we read the current configuration of the chip.
1431  * If there is no Extended EEPROM then the idea is to not disturb
1432  * the chip configuration, it should have been correctly setup by
1433  * automatic EEPROM read on reset. So, if the chip says it read
1434  * the EEPROM the driver will always do *something* instead of
1435  * complain that adapter_cnf is 0.
1436  */
1437 
1438  if ((readreg(dev, PP_SelfST) & (EEPROM_OK | EEPROM_PRESENT)) ==
1439  (EEPROM_OK | EEPROM_PRESENT)) {
1440  /* Load the MAC. */
1441  for (i = 0; i < ETH_ALEN / 2; i++) {
1442  unsigned int Addr;
1443  Addr = readreg(dev, PP_IA + i * 2);
1444  dev->dev_addr[i * 2] = Addr & 0xFF;
1445  dev->dev_addr[i * 2 + 1] = Addr >> 8;
1446  }
1447 
1448  /* Load the Adapter Configuration.
1449  * Note: Barring any more specific information from some
1450  * other source (ie EEPROM+Schematics), we would not know
1451  * how to operate a 10Base2 interface on the AUI port.
1452  * However, since we do read the status of HCB1 and use
1453  * settings that always result in calls to control_dc_dc(dev,0)
1454  * a BNC interface should work if the enable pin
1455  * (dc/dc converter) is on HCB1.
1456  * It will be called AUI however.
1457  */
1458 
1459  lp->adapter_cnf = 0;
1460  i = readreg(dev, PP_LineCTL);
1461  /* Preserve the setting of the HCB1 pin. */
1462  if ((i & (HCB1 | HCB1_ENBL)) == (HCB1 | HCB1_ENBL))
1464  /* Save the sqelch bit */
1465  if ((i & LOW_RX_SQUELCH) == LOW_RX_SQUELCH)
1467  /* Check if the card is in 10Base-t only mode */
1468  if ((i & (AUI_ONLY | AUTO_AUI_10BASET)) == 0)
1470  /* Check if the card is in AUI only mode */
1471  if ((i & (AUI_ONLY | AUTO_AUI_10BASET)) == AUI_ONLY)
1473  /* Check if the card is in Auto mode. */
1474  if ((i & (AUI_ONLY | AUTO_AUI_10BASET)) == AUTO_AUI_10BASET)
1475  lp->adapter_cnf |= A_CNF_AUI | A_CNF_10B_T |
1477 
1478  cs89_dbg(1, info, "%s: PP_LineCTL=0x%x, adapter_cnf=0x%x\n",
1479  dev->name, i, lp->adapter_cnf);
1480 
1481  /* IRQ. Other chips already probe, see below. */
1482  if (lp->chip_type == CS8900)
1484 
1485  pr_cont("[Cirrus EEPROM] ");
1486  }
1487 
1488  pr_cont("\n");
1489 
1490  /* First check to see if an EEPROM is attached. */
1491 
1492  if ((readreg(dev, PP_SelfST) & EEPROM_PRESENT) == 0)
1493  pr_warn("No EEPROM, relying on command line....\n");
1494  else if (get_eeprom_data(dev, START_EEPROM_DATA, CHKSUM_LEN, eeprom_buff) < 0) {
1495  pr_warn("EEPROM read failed, relying on command line\n");
1496  } else if (get_eeprom_cksum(START_EEPROM_DATA, CHKSUM_LEN, eeprom_buff) < 0) {
1497  /* Check if the chip was able to read its own configuration starting
1498  at 0 in the EEPROM*/
1499  if ((readreg(dev, PP_SelfST) & (EEPROM_OK | EEPROM_PRESENT)) !=
1500  (EEPROM_OK | EEPROM_PRESENT))
1501  pr_warn("Extended EEPROM checksum bad and no Cirrus EEPROM, relying on command line\n");
1502 
1503  } else {
1504  /* This reads an extended EEPROM that is not documented
1505  * in the CS8900 datasheet.
1506  */
1507 
1508  /* get transmission control word but keep the autonegotiation bits */
1509  if (!lp->auto_neg_cnf)
1510  lp->auto_neg_cnf = eeprom_buff[AUTO_NEG_CNF_OFFSET / 2];
1511  /* Store adapter configuration */
1512  if (!lp->adapter_cnf)
1513  lp->adapter_cnf = eeprom_buff[ADAPTER_CNF_OFFSET / 2];
1514  /* Store ISA configuration */
1515  lp->isa_config = eeprom_buff[ISA_CNF_OFFSET / 2];
1516  dev->mem_start = eeprom_buff[PACKET_PAGE_OFFSET / 2] << 8;
1517 
1518  /* eeprom_buff has 32-bit ints, so we can't just memcpy it */
1519  /* store the initial memory base address */
1520  for (i = 0; i < ETH_ALEN / 2; i++) {
1521  dev->dev_addr[i * 2] = eeprom_buff[i];
1522  dev->dev_addr[i * 2 + 1] = eeprom_buff[i] >> 8;
1523  }
1524  cs89_dbg(1, debug, "%s: new adapter_cnf: 0x%x\n",
1525  dev->name, lp->adapter_cnf);
1526  }
1527 
1528  /* allow them to force multiple transceivers. If they force multiple, autosense */
1529  {
1530  int count = 0;
1531  if (lp->force & FORCE_RJ45) {
1532  lp->adapter_cnf |= A_CNF_10B_T;
1533  count++;
1534  }
1535  if (lp->force & FORCE_AUI) {
1536  lp->adapter_cnf |= A_CNF_AUI;
1537  count++;
1538  }
1539  if (lp->force & FORCE_BNC) {
1540  lp->adapter_cnf |= A_CNF_10B_2;
1541  count++;
1542  }
1543  if (count > 1)
1545  else if (lp->force & FORCE_RJ45)
1547  else if (lp->force & FORCE_AUI)
1549  else if (lp->force & FORCE_BNC)
1551  }
1552 
1553  cs89_dbg(1, debug, "%s: after force 0x%x, adapter_cnf=0x%x\n",
1554  dev->name, lp->force, lp->adapter_cnf);
1555 
1556  /* FIXME: We don't let you set dc-dc polarity or low RX squelch from the command line: add it here */
1557 
1558  /* FIXME: We don't let you set the IMM bit from the command line: add it to lp->auto_neg_cnf here */
1559 
1560  /* FIXME: we don't set the Ethernet address on the command line. Use
1561  * ifconfig IFACE hw ether AABBCCDDEEFF
1562  */
1563 
1564  pr_info("media %s%s%s",
1565  (lp->adapter_cnf & A_CNF_10B_T) ? "RJ-45," : "",
1566  (lp->adapter_cnf & A_CNF_AUI) ? "AUI," : "",
1567  (lp->adapter_cnf & A_CNF_10B_2) ? "BNC," : "");
1568 
1569  lp->irq_map = 0xffff;
1570 
1571  /* If this is a CS8900 then no pnp soft */
1572  if (lp->chip_type != CS8900 &&
1573  /* Check if the ISA IRQ has been set */
1574  (i = readreg(dev, PP_CS8920_ISAINT) & 0xff,
1575  (i != 0 && i < CS8920_NO_INTS))) {
1576  if (!dev->irq)
1577  dev->irq = i;
1578  } else {
1579  i = lp->isa_config & INT_NO_MASK;
1580 #ifndef CONFIG_CS89x0_PLATFORM
1581  if (lp->chip_type == CS8900) {
1582 #ifdef CS89x0_NONISA_IRQ
1583  i = cs8900_irq_map[0];
1584 #else
1585  /* Translate the IRQ using the IRQ mapping table. */
1586  if (i >= ARRAY_SIZE(cs8900_irq_map))
1587  pr_err("invalid ISA interrupt number %d\n", i);
1588  else
1589  i = cs8900_irq_map[i];
1590 
1591  lp->irq_map = CS8900_IRQ_MAP; /* fixed IRQ map for CS8900 */
1592  } else {
1593  int irq_map_buff[IRQ_MAP_LEN/2];
1594 
1595  if (get_eeprom_data(dev, IRQ_MAP_EEPROM_DATA,
1596  IRQ_MAP_LEN / 2,
1597  irq_map_buff) >= 0) {
1598  if ((irq_map_buff[0] & 0xff) == PNP_IRQ_FRMT)
1599  lp->irq_map = ((irq_map_buff[0] >> 8) |
1600  (irq_map_buff[1] << 8));
1601  }
1602 #endif
1603  }
1604 #endif
1605  if (!dev->irq)
1606  dev->irq = i;
1607  }
1608 
1609  pr_cont(" IRQ %d", dev->irq);
1610 
1611 #if ALLOW_DMA
1612  if (lp->use_dma) {
1613  get_dma_channel(dev);
1614  pr_cont(", DMA %d", dev->dma);
1615  } else
1616 #endif
1617  pr_cont(", programmed I/O");
1618 
1619  /* print the ethernet address. */
1620  pr_cont(", MAC %pM\n", dev->dev_addr);
1621 
1622  dev->netdev_ops = &net_ops;
1623  dev->watchdog_timeo = HZ;
1624 
1625  cs89_dbg(0, info, "cs89x0_probe1() successful\n");
1626 
1627  retval = register_netdev(dev);
1628  if (retval)
1629  goto out2;
1630  return 0;
1631 out2:
1633 out1:
1634  return retval;
1635 }
1636 
1637 #ifndef CONFIG_CS89x0_PLATFORM
1638 /*
1639  * This function converts the I/O port addres used by the cs89x0_probe() and
1640  * init_module() functions to the I/O memory address used by the
1641  * cs89x0_probe1() function.
1642  */
1643 static int __init
1644 cs89x0_ioport_probe(struct net_device *dev, unsigned long ioport, int modular)
1645 {
1646  struct net_local *lp = netdev_priv(dev);
1647  int ret;
1648  void __iomem *io_mem;
1649 
1650  if (!lp)
1651  return -ENOMEM;
1652 
1653  dev->base_addr = ioport;
1654 
1655  if (!request_region(ioport, NETCARD_IO_EXTENT, DRV_NAME)) {
1656  ret = -EBUSY;
1657  goto out;
1658  }
1659 
1660  io_mem = ioport_map(ioport & ~3, NETCARD_IO_EXTENT);
1661  if (!io_mem) {
1662  ret = -ENOMEM;
1663  goto release;
1664  }
1665 
1666  /* if they give us an odd I/O address, then do ONE write to
1667  * the address port, to get it back to address zero, where we
1668  * expect to find the EISA signature word. An IO with a base of 0x3
1669  * will skip the test for the ADD_PORT.
1670  */
1671  if (ioport & 1) {
1672  cs89_dbg(1, info, "%s: odd ioaddr 0x%lx\n", dev->name, ioport);
1673  if ((ioport & 2) != 2) {
1674  if ((ioread16(io_mem + ADD_PORT) & ADD_MASK) !=
1675  ADD_SIG) {
1676  pr_err("%s: bad signature 0x%x\n",
1677  dev->name, ioread16(io_mem + ADD_PORT));
1678  ret = -ENODEV;
1679  goto unmap;
1680  }
1681  }
1682  }
1683 
1684  ret = cs89x0_probe1(dev, io_mem, modular);
1685  if (!ret)
1686  goto out;
1687 unmap:
1688  ioport_unmap(io_mem);
1689 release:
1691 out:
1692  return ret;
1693 }
1694 
1695 #ifndef MODULE
1696 /* Check for a network adaptor of this type, and return '0' iff one exists.
1697  * If dev->base_addr == 0, probe all likely locations.
1698  * If dev->base_addr == 1, always return failure.
1699  * If dev->base_addr == 2, allocate space for the device and return success
1700  * (detachable devices only).
1701  * Return 0 on success.
1702  */
1703 
1705 {
1706  struct net_device *dev = alloc_etherdev(sizeof(struct net_local));
1707  unsigned *port;
1708  int err = 0;
1709  int irq;
1710  int io;
1711 
1712  if (!dev)
1713  return ERR_PTR(-ENODEV);
1714 
1715  sprintf(dev->name, "eth%d", unit);
1717  io = dev->base_addr;
1718  irq = dev->irq;
1719 
1720  cs89_dbg(0, info, "cs89x0_probe(0x%x)\n", io);
1721 
1722  if (io > 0x1ff) { /* Check a single specified location. */
1723  err = cs89x0_ioport_probe(dev, io, 0);
1724  } else if (io != 0) { /* Don't probe at all. */
1725  err = -ENXIO;
1726  } else {
1727  for (port = netcard_portlist; *port; port++) {
1728  if (cs89x0_ioport_probe(dev, *port, 0) == 0)
1729  break;
1730  dev->irq = irq;
1731  }
1732  if (!*port)
1733  err = -ENODEV;
1734  }
1735  if (err)
1736  goto out;
1737  return dev;
1738 out:
1739  free_netdev(dev);
1740  pr_warn("no cs8900 or cs8920 detected. Be sure to disable PnP with SETUP\n");
1741  return ERR_PTR(err);
1742 }
1743 #endif
1744 #endif
1745 
1746 #if defined(MODULE) && !defined(CONFIG_CS89x0_PLATFORM)
1747 
1748 static struct net_device *dev_cs89x0;
1749 
1750 /* Support the 'debug' module parm even if we're compiled for non-debug to
1751  * avoid breaking someone's startup scripts
1752  */
1753 
1754 static int io;
1755 static int irq;
1756 static int debug;
1757 static char media[8];
1758 static int duplex = -1;
1759 
1760 static int use_dma; /* These generate unused var warnings if ALLOW_DMA = 0 */
1761 static int dma;
1762 static int dmasize = 16; /* or 64 */
1763 
1764 module_param(io, int, 0);
1765 module_param(irq, int, 0);
1766 module_param(debug, int, 0);
1767 module_param_string(media, media, sizeof(media), 0);
1768 module_param(duplex, int, 0);
1769 module_param(dma , int, 0);
1770 module_param(dmasize , int, 0);
1771 module_param(use_dma , int, 0);
1772 MODULE_PARM_DESC(io, "cs89x0 I/O base address");
1773 MODULE_PARM_DESC(irq, "cs89x0 IRQ number");
1774 #if DEBUGGING
1775 MODULE_PARM_DESC(debug, "cs89x0 debug level (0-6)");
1776 #else
1777 MODULE_PARM_DESC(debug, "(ignored)");
1778 #endif
1779 MODULE_PARM_DESC(media, "Set cs89x0 adapter(s) media type(s) (rj45,bnc,aui)");
1780 /* No other value than -1 for duplex seems to be currently interpreted */
1781 MODULE_PARM_DESC(duplex, "(ignored)");
1782 #if ALLOW_DMA
1783 MODULE_PARM_DESC(dma , "cs89x0 ISA DMA channel; ignored if use_dma=0");
1784 MODULE_PARM_DESC(dmasize , "cs89x0 DMA size in kB (16,64); ignored if use_dma=0");
1785 MODULE_PARM_DESC(use_dma , "cs89x0 using DMA (0-1)");
1786 #else
1787 MODULE_PARM_DESC(dma , "(ignored)");
1788 MODULE_PARM_DESC(dmasize , "(ignored)");
1789 MODULE_PARM_DESC(use_dma , "(ignored)");
1790 #endif
1791 
1792 MODULE_AUTHOR("Mike Cruse, Russwll Nelson <[email protected]>, Andrew Morton");
1793 MODULE_LICENSE("GPL");
1794 
1795 /*
1796  * media=t - specify media type
1797  * or media=2
1798  * or media=aui
1799  * or medai=auto
1800  * duplex=0 - specify forced half/full/autonegotiate duplex
1801  * debug=# - debug level
1802  *
1803  * Default Chip Configuration:
1804  * DMA Burst = enabled
1805  * IOCHRDY Enabled = enabled
1806  * UseSA = enabled
1807  * CS8900 defaults to half-duplex if not specified on command-line
1808  * CS8920 defaults to autoneg if not specified on command-line
1809  * Use reset defaults for other config parameters
1810  *
1811  * Assumptions:
1812  * media type specified is supported (circuitry is present)
1813  * if memory address is > 1MB, then required mem decode hw is present
1814  * if 10B-2, then agent other than driver will enable DC/DC converter
1815  * (hw or software util)
1816  */
1817 
1818 int __init init_module(void)
1819 {
1820  struct net_device *dev = alloc_etherdev(sizeof(struct net_local));
1821  struct net_local *lp;
1822  int ret = 0;
1823 
1824 #if DEBUGGING
1825  net_debug = debug;
1826 #else
1827  debug = 0;
1828 #endif
1829  if (!dev)
1830  return -ENOMEM;
1831 
1832  dev->irq = irq;
1833  dev->base_addr = io;
1834  lp = netdev_priv(dev);
1835 
1836 #if ALLOW_DMA
1837  if (use_dma) {
1838  lp->use_dma = use_dma;
1839  lp->dma = dma;
1840  lp->dmasize = dmasize;
1841  }
1842 #endif
1843 
1844  spin_lock_init(&lp->lock);
1845 
1846  /* boy, they'd better get these right */
1847  if (!strcmp(media, "rj45"))
1849  else if (!strcmp(media, "aui"))
1851  else if (!strcmp(media, "bnc"))
1853  else
1855 
1856  if (duplex == -1)
1858 
1859  if (io == 0) {
1860  pr_err("Module autoprobing not allowed\n");
1861  pr_err("Append io=0xNNN\n");
1862  ret = -EPERM;
1863  goto out;
1864  } else if (io <= 0x1ff) {
1865  ret = -ENXIO;
1866  goto out;
1867  }
1868 
1869 #if ALLOW_DMA
1870  if (use_dma && dmasize != 16 && dmasize != 64) {
1871  pr_err("dma size must be either 16K or 64K, not %dK\n",
1872  dmasize);
1873  ret = -EPERM;
1874  goto out;
1875  }
1876 #endif
1877  ret = cs89x0_ioport_probe(dev, io, 1);
1878  if (ret)
1879  goto out;
1880 
1881  dev_cs89x0 = dev;
1882  return 0;
1883 out:
1884  free_netdev(dev);
1885  return ret;
1886 }
1887 
1888 void __exit
1889 cleanup_module(void)
1890 {
1891  struct net_local *lp = netdev_priv(dev_cs89x0);
1892 
1893  unregister_netdev(dev_cs89x0);
1895  ioport_unmap(lp->virt_addr);
1897  free_netdev(dev_cs89x0);
1898 }
1899 #endif /* MODULE && !CONFIG_CS89x0_PLATFORM */
1900 
1901 #ifdef CONFIG_CS89x0_PLATFORM
1902 static int __init cs89x0_platform_probe(struct platform_device *pdev)
1903 {
1904  struct net_device *dev = alloc_etherdev(sizeof(struct net_local));
1905  struct net_local *lp;
1906  struct resource *mem_res;
1907  void __iomem *virt_addr;
1908  int err;
1909 
1910  if (!dev)
1911  return -ENOMEM;
1912 
1913  lp = netdev_priv(dev);
1914 
1915  mem_res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
1916  dev->irq = platform_get_irq(pdev, 0);
1917  if (mem_res == NULL || dev->irq <= 0) {
1918  dev_warn(&dev->dev, "memory/interrupt resource missing\n");
1919  err = -ENXIO;
1920  goto free;
1921  }
1922 
1923  lp->size = resource_size(mem_res);
1924  if (!request_mem_region(mem_res->start, lp->size, DRV_NAME)) {
1925  dev_warn(&dev->dev, "request_mem_region() failed\n");
1926  err = -EBUSY;
1927  goto free;
1928  }
1929 
1930  virt_addr = ioremap(mem_res->start, lp->size);
1931  if (!virt_addr) {
1932  dev_warn(&dev->dev, "ioremap() failed\n");
1933  err = -ENOMEM;
1934  goto release;
1935  }
1936 
1937  err = cs89x0_probe1(dev, virt_addr, 0);
1938  if (err) {
1939  dev_warn(&dev->dev, "no cs8900 or cs8920 detected\n");
1940  goto unmap;
1941  }
1942 
1943  platform_set_drvdata(pdev, dev);
1944  return 0;
1945 
1946 unmap:
1947  iounmap(virt_addr);
1948 release:
1949  release_mem_region(mem_res->start, lp->size);
1950 free:
1951  free_netdev(dev);
1952  return err;
1953 }
1954 
1955 static int cs89x0_platform_remove(struct platform_device *pdev)
1956 {
1957  struct net_device *dev = platform_get_drvdata(pdev);
1958  struct net_local *lp = netdev_priv(dev);
1959  struct resource *mem_res;
1960 
1961  /* This platform_get_resource() call will not return NULL, because
1962  * the same call in cs89x0_platform_probe() has returned a non NULL
1963  * value.
1964  */
1965  mem_res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
1966  unregister_netdev(dev);
1967  iounmap(lp->virt_addr);
1968  release_mem_region(mem_res->start, lp->size);
1969  free_netdev(dev);
1970  return 0;
1971 }
1972 
1973 static struct platform_driver cs89x0_driver = {
1974  .driver = {
1975  .name = DRV_NAME,
1976  .owner = THIS_MODULE,
1977  },
1978  .remove = cs89x0_platform_remove,
1979 };
1980 
1981 static int __init cs89x0_init(void)
1982 {
1983  return platform_driver_probe(&cs89x0_driver, cs89x0_platform_probe);
1984 }
1985 
1986 module_init(cs89x0_init);
1987 
1988 static void __exit cs89x0_cleanup(void)
1989 {
1990  platform_driver_unregister(&cs89x0_driver);
1991 }
1992 
1993 module_exit(cs89x0_cleanup);
1994 
1995 #endif /* CONFIG_CS89x0_PLATFORM */