Linux Kernel  3.7.1
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
spider_net.c
Go to the documentation of this file.
1 /*
2  * Network device driver for Cell Processor-Based Blade and Celleb platform
3  *
4  * (C) Copyright IBM Corp. 2005
5  * (C) Copyright 2006 TOSHIBA CORPORATION
6  *
7  * Authors : Utz Bacher <[email protected]>
8  * Jens Osterkamp <[email protected]>
9  *
10  * This program is free software; you can redistribute it and/or modify
11  * it under the terms of the GNU General Public License as published by
12  * the Free Software Foundation; either version 2, or (at your option)
13  * any later version.
14  *
15  * This program is distributed in the hope that it will be useful,
16  * but WITHOUT ANY WARRANTY; without even the implied warranty of
17  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18  * GNU General Public License for more details.
19  *
20  * You should have received a copy of the GNU General Public License
21  * along with this program; if not, write to the Free Software
22  * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
23  */
24 
25 #include <linux/compiler.h>
26 #include <linux/crc32.h>
27 #include <linux/delay.h>
28 #include <linux/etherdevice.h>
29 #include <linux/ethtool.h>
30 #include <linux/firmware.h>
31 #include <linux/if_vlan.h>
32 #include <linux/in.h>
33 #include <linux/init.h>
34 #include <linux/interrupt.h>
35 #include <linux/gfp.h>
36 #include <linux/ioport.h>
37 #include <linux/ip.h>
38 #include <linux/kernel.h>
39 #include <linux/mii.h>
40 #include <linux/module.h>
41 #include <linux/netdevice.h>
42 #include <linux/device.h>
43 #include <linux/pci.h>
44 #include <linux/skbuff.h>
45 #include <linux/tcp.h>
46 #include <linux/types.h>
47 #include <linux/vmalloc.h>
48 #include <linux/wait.h>
49 #include <linux/workqueue.h>
50 #include <linux/bitops.h>
51 #include <asm/pci-bridge.h>
52 #include <net/checksum.h>
53 
54 #include "spider_net.h"
55 
56 MODULE_AUTHOR("Utz Bacher <[email protected]> and Jens Osterkamp " \
57  "<[email protected]>");
58 MODULE_DESCRIPTION("Spider Southbridge Gigabit Ethernet driver");
59 MODULE_LICENSE("GPL");
62 
63 static int rx_descriptors = SPIDER_NET_RX_DESCRIPTORS_DEFAULT;
64 static int tx_descriptors = SPIDER_NET_TX_DESCRIPTORS_DEFAULT;
65 
66 module_param(rx_descriptors, int, 0444);
67 module_param(tx_descriptors, int, 0444);
68 
69 MODULE_PARM_DESC(rx_descriptors, "number of descriptors used " \
70  "in rx chains");
71 MODULE_PARM_DESC(tx_descriptors, "number of descriptors used " \
72  "in tx chain");
73 
74 char spider_net_driver_name[] = "spidernet";
75 
76 static DEFINE_PCI_DEVICE_TABLE(spider_net_pci_tbl) = {
78  PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0UL },
79  { 0, }
80 };
81 
82 MODULE_DEVICE_TABLE(pci, spider_net_pci_tbl);
83 
91 static inline u32
92 spider_net_read_reg(struct spider_net_card *card, u32 reg)
93 {
94  /* We use the powerpc specific variants instead of readl_be() because
95  * we know spidernet is not a real PCI device and we can thus avoid the
96  * performance hit caused by the PCI workarounds.
97  */
98  return in_be32(card->regs + reg);
99 }
100 
107 static inline void
108 spider_net_write_reg(struct spider_net_card *card, u32 reg, u32 value)
109 {
110  /* We use the powerpc specific variants instead of writel_be() because
111  * we know spidernet is not a real PCI device and we can thus avoid the
112  * performance hit caused by the PCI workarounds.
113  */
114  out_be32(card->regs + reg, value);
115 }
116 
128 static void
129 spider_net_write_phy(struct net_device *netdev, int mii_id,
130  int reg, int val)
131 {
132  struct spider_net_card *card = netdev_priv(netdev);
133  u32 writevalue;
134 
135  writevalue = ((u32)mii_id << 21) |
136  ((u32)reg << 16) | ((u32)val);
137 
138  spider_net_write_reg(card, SPIDER_NET_GPCWOPCMD, writevalue);
139 }
140 
152 static int
153 spider_net_read_phy(struct net_device *netdev, int mii_id, int reg)
154 {
155  struct spider_net_card *card = netdev_priv(netdev);
156  u32 readvalue;
157 
158  readvalue = ((u32)mii_id << 21) | ((u32)reg << 16);
159  spider_net_write_reg(card, SPIDER_NET_GPCROPCMD, readvalue);
160 
161  /* we don't use semaphores to wait for an SPIDER_NET_GPROPCMPINT
162  * interrupt, as we poll for the completion of the read operation
163  * in spider_net_read_phy. Should take about 50 us */
164  do {
165  readvalue = spider_net_read_reg(card, SPIDER_NET_GPCROPCMD);
166  } while (readvalue & SPIDER_NET_GPREXEC);
167 
168  readvalue &= SPIDER_NET_GPRDAT_MASK;
169 
170  return readvalue;
171 }
172 
177 static void
178 spider_net_setup_aneg(struct spider_net_card *card)
179 {
180  struct mii_phy *phy = &card->phy;
181  u32 advertise = 0;
182  u16 bmsr, estat;
183 
184  bmsr = spider_net_read_phy(card->netdev, phy->mii_id, MII_BMSR);
185  estat = spider_net_read_phy(card->netdev, phy->mii_id, MII_ESTATUS);
186 
187  if (bmsr & BMSR_10HALF)
188  advertise |= ADVERTISED_10baseT_Half;
189  if (bmsr & BMSR_10FULL)
190  advertise |= ADVERTISED_10baseT_Full;
191  if (bmsr & BMSR_100HALF)
192  advertise |= ADVERTISED_100baseT_Half;
193  if (bmsr & BMSR_100FULL)
194  advertise |= ADVERTISED_100baseT_Full;
195 
196  if ((bmsr & BMSR_ESTATEN) && (estat & ESTATUS_1000_TFULL))
197  advertise |= SUPPORTED_1000baseT_Full;
198  if ((bmsr & BMSR_ESTATEN) && (estat & ESTATUS_1000_THALF))
199  advertise |= SUPPORTED_1000baseT_Half;
200 
201  sungem_phy_probe(phy, phy->mii_id);
202  phy->def->ops->setup_aneg(phy, advertise);
203 
204 }
205 
212 static void
213 spider_net_rx_irq_off(struct spider_net_card *card)
214 {
215  u32 regvalue;
216 
218  spider_net_write_reg(card, SPIDER_NET_GHIINT0MSK, regvalue);
219 }
220 
227 static void
228 spider_net_rx_irq_on(struct spider_net_card *card)
229 {
230  u32 regvalue;
231 
233  spider_net_write_reg(card, SPIDER_NET_GHIINT0MSK, regvalue);
234 }
235 
243 static void
244 spider_net_set_promisc(struct spider_net_card *card)
245 {
246  u32 macu, macl;
247  struct net_device *netdev = card->netdev;
248 
249  if (netdev->flags & IFF_PROMISC) {
250  /* clear destination entry 0 */
251  spider_net_write_reg(card, SPIDER_NET_GMRUAFILnR, 0);
252  spider_net_write_reg(card, SPIDER_NET_GMRUAFILnR + 0x04, 0);
253  spider_net_write_reg(card, SPIDER_NET_GMRUA0FIL15R,
255  } else {
256  macu = netdev->dev_addr[0];
257  macu <<= 8;
258  macu |= netdev->dev_addr[1];
259  memcpy(&macl, &netdev->dev_addr[2], sizeof(macl));
260 
262  spider_net_write_reg(card, SPIDER_NET_GMRUAFILnR, macu);
263  spider_net_write_reg(card, SPIDER_NET_GMRUAFILnR + 0x04, macl);
264  spider_net_write_reg(card, SPIDER_NET_GMRUA0FIL15R,
266  }
267 }
268 
275 static int
276 spider_net_get_mac_address(struct net_device *netdev)
277 {
278  struct spider_net_card *card = netdev_priv(netdev);
279  u32 macl, macu;
280 
281  macl = spider_net_read_reg(card, SPIDER_NET_GMACUNIMACL);
282  macu = spider_net_read_reg(card, SPIDER_NET_GMACUNIMACU);
283 
284  netdev->dev_addr[0] = (macu >> 24) & 0xff;
285  netdev->dev_addr[1] = (macu >> 16) & 0xff;
286  netdev->dev_addr[2] = (macu >> 8) & 0xff;
287  netdev->dev_addr[3] = macu & 0xff;
288  netdev->dev_addr[4] = (macl >> 8) & 0xff;
289  netdev->dev_addr[5] = macl & 0xff;
290 
291  if (!is_valid_ether_addr(&netdev->dev_addr[0]))
292  return -EINVAL;
293 
294  return 0;
295 }
296 
303 static inline int
304 spider_net_get_descr_status(struct spider_net_hw_descr *hwdescr)
305 {
307 }
308 
315 static void
316 spider_net_free_chain(struct spider_net_card *card,
318 {
319  struct spider_net_descr *descr;
320 
321  descr = chain->ring;
322  do {
323  descr->bus_addr = 0;
324  descr->hwdescr->next_descr_addr = 0;
325  descr = descr->next;
326  } while (descr != chain->ring);
327 
328  dma_free_coherent(&card->pdev->dev, chain->num_desc,
329  chain->hwring, chain->dma_addr);
330 }
331 
342 static int
343 spider_net_init_chain(struct spider_net_card *card,
344  struct spider_net_descr_chain *chain)
345 {
346  int i;
347  struct spider_net_descr *descr;
348  struct spider_net_hw_descr *hwdescr;
349  dma_addr_t buf;
350  size_t alloc_size;
351 
352  alloc_size = chain->num_desc * sizeof(struct spider_net_hw_descr);
353 
354  chain->hwring = dma_alloc_coherent(&card->pdev->dev, alloc_size,
355  &chain->dma_addr, GFP_KERNEL);
356 
357  if (!chain->hwring)
358  return -ENOMEM;
359 
360  memset(chain->ring, 0, chain->num_desc * sizeof(struct spider_net_descr));
361 
362  /* Set up the hardware pointers in each descriptor */
363  descr = chain->ring;
364  hwdescr = chain->hwring;
365  buf = chain->dma_addr;
366  for (i=0; i < chain->num_desc; i++, descr++, hwdescr++) {
368  hwdescr->next_descr_addr = 0;
369 
370  descr->hwdescr = hwdescr;
371  descr->bus_addr = buf;
372  descr->next = descr + 1;
373  descr->prev = descr - 1;
374 
375  buf += sizeof(struct spider_net_hw_descr);
376  }
377  /* do actual circular list */
378  (descr-1)->next = chain->ring;
379  chain->ring->prev = descr-1;
380 
381  spin_lock_init(&chain->lock);
382  chain->head = chain->ring;
383  chain->tail = chain->ring;
384  return 0;
385 }
386 
393 static void
394 spider_net_free_rx_chain_contents(struct spider_net_card *card)
395 {
396  struct spider_net_descr *descr;
397 
398  descr = card->rx_chain.head;
399  do {
400  if (descr->skb) {
401  pci_unmap_single(card->pdev, descr->hwdescr->buf_addr,
404  dev_kfree_skb(descr->skb);
405  descr->skb = NULL;
406  }
407  descr = descr->next;
408  } while (descr != card->rx_chain.head);
409 }
410 
421 static int
422 spider_net_prepare_rx_descr(struct spider_net_card *card,
423  struct spider_net_descr *descr)
424 {
425  struct spider_net_hw_descr *hwdescr = descr->hwdescr;
426  dma_addr_t buf;
427  int offset;
428  int bufsize;
429 
430  /* we need to round up the buffer size to a multiple of 128 */
431  bufsize = (SPIDER_NET_MAX_FRAME + SPIDER_NET_RXBUF_ALIGN - 1) &
432  (~(SPIDER_NET_RXBUF_ALIGN - 1));
433 
434  /* and we need to have it 128 byte aligned, therefore we allocate a
435  * bit more */
436  /* allocate an skb */
437  descr->skb = netdev_alloc_skb(card->netdev,
438  bufsize + SPIDER_NET_RXBUF_ALIGN - 1);
439  if (!descr->skb) {
440  if (netif_msg_rx_err(card) && net_ratelimit())
441  dev_err(&card->netdev->dev,
442  "Not enough memory to allocate rx buffer\n");
443  card->spider_stats.alloc_rx_skb_error++;
444  return -ENOMEM;
445  }
446  hwdescr->buf_size = bufsize;
447  hwdescr->result_size = 0;
448  hwdescr->valid_size = 0;
449  hwdescr->data_status = 0;
450  hwdescr->data_error = 0;
451 
452  offset = ((unsigned long)descr->skb->data) &
454  if (offset)
455  skb_reserve(descr->skb, SPIDER_NET_RXBUF_ALIGN - offset);
456  /* iommu-map the skb */
457  buf = pci_map_single(card->pdev, descr->skb->data,
459  if (pci_dma_mapping_error(card->pdev, buf)) {
460  dev_kfree_skb_any(descr->skb);
461  descr->skb = NULL;
462  if (netif_msg_rx_err(card) && net_ratelimit())
463  dev_err(&card->netdev->dev, "Could not iommu-map rx buffer\n");
464  card->spider_stats.rx_iommu_map_error++;
466  } else {
467  hwdescr->buf_addr = buf;
468  wmb();
471  }
472 
473  return 0;
474 }
475 
484 static inline void
485 spider_net_enable_rxchtails(struct spider_net_card *card)
486 {
487  /* assume chain is aligned correctly */
488  spider_net_write_reg(card, SPIDER_NET_GDADCHA ,
489  card->rx_chain.tail->bus_addr);
490 }
491 
499 static inline void
500 spider_net_enable_rxdmac(struct spider_net_card *card)
501 {
502  wmb();
503  spider_net_write_reg(card, SPIDER_NET_GDADMACCNTR,
505 }
506 
514 static inline void
515 spider_net_disable_rxdmac(struct spider_net_card *card)
516 {
517  spider_net_write_reg(card, SPIDER_NET_GDADMACCNTR,
519 }
520 
527 static void
528 spider_net_refill_rx_chain(struct spider_net_card *card)
529 {
530  struct spider_net_descr_chain *chain = &card->rx_chain;
531  unsigned long flags;
532 
533  /* one context doing the refill (and a second context seeing that
534  * and omitting it) is ok. If called by NAPI, we'll be called again
535  * as spider_net_decode_one_descr is called several times. If some
536  * interrupt calls us, the NAPI is about to clean up anyway. */
537  if (!spin_trylock_irqsave(&chain->lock, flags))
538  return;
539 
540  while (spider_net_get_descr_status(chain->head->hwdescr) ==
542  if (spider_net_prepare_rx_descr(card, chain->head))
543  break;
544  chain->head = chain->head->next;
545  }
546 
547  spin_unlock_irqrestore(&chain->lock, flags);
548 }
549 
556 static int
557 spider_net_alloc_rx_skbs(struct spider_net_card *card)
558 {
559  struct spider_net_descr_chain *chain = &card->rx_chain;
560  struct spider_net_descr *start = chain->tail;
561  struct spider_net_descr *descr = start;
562 
563  /* Link up the hardware chain pointers */
564  do {
565  descr->prev->hwdescr->next_descr_addr = descr->bus_addr;
566  descr = descr->next;
567  } while (descr != start);
568 
569  /* Put at least one buffer into the chain. if this fails,
570  * we've got a problem. If not, spider_net_refill_rx_chain
571  * will do the rest at the end of this function. */
572  if (spider_net_prepare_rx_descr(card, chain->head))
573  goto error;
574  else
575  chain->head = chain->head->next;
576 
577  /* This will allocate the rest of the rx buffers;
578  * if not, it's business as usual later on. */
579  spider_net_refill_rx_chain(card);
580  spider_net_enable_rxdmac(card);
581  return 0;
582 
583 error:
584  spider_net_free_rx_chain_contents(card);
585  return -ENOMEM;
586 }
587 
597 static u8
598 spider_net_get_multicast_hash(struct net_device *netdev, __u8 *addr)
599 {
600  u32 crc;
601  u8 hash;
602  char addr_for_crc[ETH_ALEN] = { 0, };
603  int i, bit;
604 
605  for (i = 0; i < ETH_ALEN * 8; i++) {
606  bit = (addr[i / 8] >> (i % 8)) & 1;
607  addr_for_crc[ETH_ALEN - 1 - i / 8] += bit << (7 - (i % 8));
608  }
609 
610  crc = crc32_be(~0, addr_for_crc, netdev->addr_len);
611 
612  hash = (crc >> 27);
613  hash <<= 3;
614  hash |= crc & 7;
615  hash &= 0xff;
616 
617  return hash;
618 }
619 
628 static void
629 spider_net_set_multi(struct net_device *netdev)
630 {
631  struct netdev_hw_addr *ha;
632  u8 hash;
633  int i;
634  u32 reg;
635  struct spider_net_card *card = netdev_priv(netdev);
637  {0, };
638 
639  spider_net_set_promisc(card);
640 
641  if (netdev->flags & IFF_ALLMULTI) {
642  for (i = 0; i < SPIDER_NET_MULTICAST_HASHES; i++) {
643  set_bit(i, bitmask);
644  }
645  goto write_hash;
646  }
647 
648  /* well, we know, what the broadcast hash value is: it's xfd
649  hash = spider_net_get_multicast_hash(netdev, netdev->broadcast); */
650  set_bit(0xfd, bitmask);
651 
652  netdev_for_each_mc_addr(ha, netdev) {
653  hash = spider_net_get_multicast_hash(netdev, ha->addr);
654  set_bit(hash, bitmask);
655  }
656 
657 write_hash:
658  for (i = 0; i < SPIDER_NET_MULTICAST_HASHES / 4; i++) {
659  reg = 0;
660  if (test_bit(i * 4, bitmask))
661  reg += 0x08;
662  reg <<= 8;
663  if (test_bit(i * 4 + 1, bitmask))
664  reg += 0x08;
665  reg <<= 8;
666  if (test_bit(i * 4 + 2, bitmask))
667  reg += 0x08;
668  reg <<= 8;
669  if (test_bit(i * 4 + 3, bitmask))
670  reg += 0x08;
671 
672  spider_net_write_reg(card, SPIDER_NET_GMRMHFILnR + i * 4, reg);
673  }
674 }
675 
686 static int
687 spider_net_prepare_tx_descr(struct spider_net_card *card,
688  struct sk_buff *skb)
689 {
690  struct spider_net_descr_chain *chain = &card->tx_chain;
691  struct spider_net_descr *descr;
692  struct spider_net_hw_descr *hwdescr;
693  dma_addr_t buf;
694  unsigned long flags;
695 
696  buf = pci_map_single(card->pdev, skb->data, skb->len, PCI_DMA_TODEVICE);
697  if (pci_dma_mapping_error(card->pdev, buf)) {
698  if (netif_msg_tx_err(card) && net_ratelimit())
699  dev_err(&card->netdev->dev, "could not iommu-map packet (%p, %i). "
700  "Dropping packet\n", skb->data, skb->len);
701  card->spider_stats.tx_iommu_map_error++;
702  return -ENOMEM;
703  }
704 
705  spin_lock_irqsave(&chain->lock, flags);
706  descr = card->tx_chain.head;
707  if (descr->next == chain->tail->prev) {
708  spin_unlock_irqrestore(&chain->lock, flags);
709  pci_unmap_single(card->pdev, buf, skb->len, PCI_DMA_TODEVICE);
710  return -ENOMEM;
711  }
712  hwdescr = descr->hwdescr;
713  chain->head = descr->next;
714 
715  descr->skb = skb;
716  hwdescr->buf_addr = buf;
717  hwdescr->buf_size = skb->len;
718  hwdescr->next_descr_addr = 0;
719  hwdescr->data_status = 0;
720 
721  hwdescr->dmac_cmd_status =
723  spin_unlock_irqrestore(&chain->lock, flags);
724 
725  if (skb->ip_summed == CHECKSUM_PARTIAL)
726  switch (ip_hdr(skb)->protocol) {
727  case IPPROTO_TCP:
729  break;
730  case IPPROTO_UDP:
732  break;
733  }
734 
735  /* Chain the bus address, so that the DMA engine finds this descr. */
736  wmb();
737  descr->prev->hwdescr->next_descr_addr = descr->bus_addr;
738 
739  card->netdev->trans_start = jiffies; /* set netdev watchdog timer */
740  return 0;
741 }
742 
743 static int
744 spider_net_set_low_watermark(struct spider_net_card *card)
745 {
746  struct spider_net_descr *descr = card->tx_chain.tail;
747  struct spider_net_hw_descr *hwdescr;
748  unsigned long flags;
749  int status;
750  int cnt=0;
751  int i;
752 
753  /* Measure the length of the queue. Measurement does not
754  * need to be precise -- does not need a lock. */
755  while (descr != card->tx_chain.head) {
756  status = descr->hwdescr->dmac_cmd_status & SPIDER_NET_DESCR_NOT_IN_USE;
757  if (status == SPIDER_NET_DESCR_NOT_IN_USE)
758  break;
759  descr = descr->next;
760  cnt++;
761  }
762 
763  /* If TX queue is short, don't even bother with interrupts */
764  if (cnt < card->tx_chain.num_desc/4)
765  return cnt;
766 
767  /* Set low-watermark 3/4th's of the way into the queue. */
768  descr = card->tx_chain.tail;
769  cnt = (cnt*3)/4;
770  for (i=0;i<cnt; i++)
771  descr = descr->next;
772 
773  /* Set the new watermark, clear the old watermark */
774  spin_lock_irqsave(&card->tx_chain.lock, flags);
775  descr->hwdescr->dmac_cmd_status |= SPIDER_NET_DESCR_TXDESFLG;
776  if (card->low_watermark && card->low_watermark != descr) {
777  hwdescr = card->low_watermark->hwdescr;
778  hwdescr->dmac_cmd_status =
780  }
781  card->low_watermark = descr;
782  spin_unlock_irqrestore(&card->tx_chain.lock, flags);
783  return cnt;
784 }
785 
798 static int
799 spider_net_release_tx_chain(struct spider_net_card *card, int brutal)
800 {
801  struct net_device *dev = card->netdev;
802  struct spider_net_descr_chain *chain = &card->tx_chain;
803  struct spider_net_descr *descr;
804  struct spider_net_hw_descr *hwdescr;
805  struct sk_buff *skb;
806  u32 buf_addr;
807  unsigned long flags;
808  int status;
809 
810  while (1) {
811  spin_lock_irqsave(&chain->lock, flags);
812  if (chain->tail == chain->head) {
813  spin_unlock_irqrestore(&chain->lock, flags);
814  return 0;
815  }
816  descr = chain->tail;
817  hwdescr = descr->hwdescr;
818 
819  status = spider_net_get_descr_status(hwdescr);
820  switch (status) {
822  dev->stats.tx_packets++;
823  dev->stats.tx_bytes += descr->skb->len;
824  break;
825 
827  if (!brutal) {
828  spin_unlock_irqrestore(&chain->lock, flags);
829  return 1;
830  }
831 
832  /* fallthrough, if we release the descriptors
833  * brutally (then we don't care about
834  * SPIDER_NET_DESCR_CARDOWNED) */
835 
839  if (netif_msg_tx_err(card))
840  dev_err(&card->netdev->dev, "forcing end of tx descriptor "
841  "with status x%02x\n", status);
842  dev->stats.tx_errors++;
843  break;
844 
845  default:
846  dev->stats.tx_dropped++;
847  if (!brutal) {
848  spin_unlock_irqrestore(&chain->lock, flags);
849  return 1;
850  }
851  }
852 
853  chain->tail = descr->next;
855  skb = descr->skb;
856  descr->skb = NULL;
857  buf_addr = hwdescr->buf_addr;
858  spin_unlock_irqrestore(&chain->lock, flags);
859 
860  /* unmap the skb */
861  if (skb) {
862  pci_unmap_single(card->pdev, buf_addr, skb->len,
864  dev_kfree_skb(skb);
865  }
866  }
867  return 0;
868 }
869 
881 static inline void
882 spider_net_kick_tx_dma(struct spider_net_card *card)
883 {
884  struct spider_net_descr *descr;
885 
886  if (spider_net_read_reg(card, SPIDER_NET_GDTDMACCNTR) &
888  goto out;
889 
890  descr = card->tx_chain.tail;
891  for (;;) {
892  if (spider_net_get_descr_status(descr->hwdescr) ==
894  spider_net_write_reg(card, SPIDER_NET_GDTDCHA,
895  descr->bus_addr);
896  spider_net_write_reg(card, SPIDER_NET_GDTDMACCNTR,
898  break;
899  }
900  if (descr == card->tx_chain.head)
901  break;
902  descr = descr->next;
903  }
904 
905 out:
906  mod_timer(&card->tx_timer, jiffies + SPIDER_NET_TX_TIMER);
907 }
908 
916 static int
917 spider_net_xmit(struct sk_buff *skb, struct net_device *netdev)
918 {
919  int cnt;
920  struct spider_net_card *card = netdev_priv(netdev);
921 
922  spider_net_release_tx_chain(card, 0);
923 
924  if (spider_net_prepare_tx_descr(card, skb) != 0) {
925  netdev->stats.tx_dropped++;
926  netif_stop_queue(netdev);
927  return NETDEV_TX_BUSY;
928  }
929 
930  cnt = spider_net_set_low_watermark(card);
931  if (cnt < 5)
932  spider_net_kick_tx_dma(card);
933  return NETDEV_TX_OK;
934 }
935 
945 static void
946 spider_net_cleanup_tx_ring(struct spider_net_card *card)
947 {
948  if ((spider_net_release_tx_chain(card, 0) != 0) &&
949  (card->netdev->flags & IFF_UP)) {
950  spider_net_kick_tx_dma(card);
951  netif_wake_queue(card->netdev);
952  }
953 }
954 
964 static int
965 spider_net_do_ioctl(struct net_device *netdev, struct ifreq *ifr, int cmd)
966 {
967  switch (cmd) {
968  default:
969  return -EOPNOTSUPP;
970  }
971 }
972 
981 static void
982 spider_net_pass_skb_up(struct spider_net_descr *descr,
983  struct spider_net_card *card)
984 {
985  struct spider_net_hw_descr *hwdescr = descr->hwdescr;
986  struct sk_buff *skb = descr->skb;
987  struct net_device *netdev = card->netdev;
988  u32 data_status = hwdescr->data_status;
989  u32 data_error = hwdescr->data_error;
990 
991  skb_put(skb, hwdescr->valid_size);
992 
993  /* the card seems to add 2 bytes of junk in front
994  * of the ethernet frame */
995 #define SPIDER_MISALIGN 2
996  skb_pull(skb, SPIDER_MISALIGN);
997  skb->protocol = eth_type_trans(skb, netdev);
998 
999  /* checksum offload */
1000  skb_checksum_none_assert(skb);
1001  if (netdev->features & NETIF_F_RXCSUM) {
1002  if ( ( (data_status & SPIDER_NET_DATA_STATUS_CKSUM_MASK) ==
1003  SPIDER_NET_DATA_STATUS_CKSUM_MASK) &&
1004  !(data_error & SPIDER_NET_DATA_ERR_CKSUM_MASK))
1006  }
1007 
1008  if (data_status & SPIDER_NET_VLAN_PACKET) {
1009  /* further enhancements: HW-accel VLAN */
1010  }
1011 
1012  /* update netdevice statistics */
1013  netdev->stats.rx_packets++;
1014  netdev->stats.rx_bytes += skb->len;
1015 
1016  /* pass skb up to stack */
1017  netif_receive_skb(skb);
1018 }
1019 
1020 static void show_rx_chain(struct spider_net_card *card)
1021 {
1022  struct spider_net_descr_chain *chain = &card->rx_chain;
1023  struct spider_net_descr *start= chain->tail;
1024  struct spider_net_descr *descr= start;
1025  struct spider_net_hw_descr *hwd = start->hwdescr;
1026  struct device *dev = &card->netdev->dev;
1027  u32 curr_desc, next_desc;
1028  int status;
1029 
1030  int tot = 0;
1031  int cnt = 0;
1032  int off = start - chain->ring;
1033  int cstat = hwd->dmac_cmd_status;
1034 
1035  dev_info(dev, "Total number of descrs=%d\n",
1036  chain->num_desc);
1037  dev_info(dev, "Chain tail located at descr=%d, status=0x%x\n",
1038  off, cstat);
1039 
1040  curr_desc = spider_net_read_reg(card, SPIDER_NET_GDACTDPA);
1041  next_desc = spider_net_read_reg(card, SPIDER_NET_GDACNEXTDA);
1042 
1043  status = cstat;
1044  do
1045  {
1046  hwd = descr->hwdescr;
1047  off = descr - chain->ring;
1048  status = hwd->dmac_cmd_status;
1049 
1050  if (descr == chain->head)
1051  dev_info(dev, "Chain head is at %d, head status=0x%x\n",
1052  off, status);
1053 
1054  if (curr_desc == descr->bus_addr)
1055  dev_info(dev, "HW curr desc (GDACTDPA) is at %d, status=0x%x\n",
1056  off, status);
1057 
1058  if (next_desc == descr->bus_addr)
1059  dev_info(dev, "HW next desc (GDACNEXTDA) is at %d, status=0x%x\n",
1060  off, status);
1061 
1062  if (hwd->next_descr_addr == 0)
1063  dev_info(dev, "chain is cut at %d\n", off);
1064 
1065  if (cstat != status) {
1066  int from = (chain->num_desc + off - cnt) % chain->num_desc;
1067  int to = (chain->num_desc + off - 1) % chain->num_desc;
1068  dev_info(dev, "Have %d (from %d to %d) descrs "
1069  "with stat=0x%08x\n", cnt, from, to, cstat);
1070  cstat = status;
1071  cnt = 0;
1072  }
1073 
1074  cnt ++;
1075  tot ++;
1076  descr = descr->next;
1077  } while (descr != start);
1078 
1079  dev_info(dev, "Last %d descrs with stat=0x%08x "
1080  "for a total of %d descrs\n", cnt, cstat, tot);
1081 
1082 #ifdef DEBUG
1083  /* Now dump the whole ring */
1084  descr = start;
1085  do
1086  {
1087  struct spider_net_hw_descr *hwd = descr->hwdescr;
1088  status = spider_net_get_descr_status(hwd);
1089  cnt = descr - chain->ring;
1090  dev_info(dev, "Descr %d stat=0x%08x skb=%p\n",
1091  cnt, status, descr->skb);
1092  dev_info(dev, "bus addr=%08x buf addr=%08x sz=%d\n",
1093  descr->bus_addr, hwd->buf_addr, hwd->buf_size);
1094  dev_info(dev, "next=%08x result sz=%d valid sz=%d\n",
1095  hwd->next_descr_addr, hwd->result_size,
1096  hwd->valid_size);
1097  dev_info(dev, "dmac=%08x data stat=%08x data err=%08x\n",
1098  hwd->dmac_cmd_status, hwd->data_status,
1099  hwd->data_error);
1100  dev_info(dev, "\n");
1101 
1102  descr = descr->next;
1103  } while (descr != start);
1104 #endif
1105 
1106 }
1107 
1117 static void spider_net_resync_head_ptr(struct spider_net_card *card)
1118 {
1119  unsigned long flags;
1120  struct spider_net_descr_chain *chain = &card->rx_chain;
1121  struct spider_net_descr *descr;
1122  int i, status;
1123 
1124  /* Advance head pointer past any empty descrs */
1125  descr = chain->head;
1126  status = spider_net_get_descr_status(descr->hwdescr);
1127 
1128  if (status == SPIDER_NET_DESCR_NOT_IN_USE)
1129  return;
1130 
1131  spin_lock_irqsave(&chain->lock, flags);
1132 
1133  descr = chain->head;
1134  status = spider_net_get_descr_status(descr->hwdescr);
1135  for (i=0; i<chain->num_desc; i++) {
1136  if (status != SPIDER_NET_DESCR_CARDOWNED) break;
1137  descr = descr->next;
1138  status = spider_net_get_descr_status(descr->hwdescr);
1139  }
1140  chain->head = descr;
1141 
1142  spin_unlock_irqrestore(&chain->lock, flags);
1143 }
1144 
1145 static int spider_net_resync_tail_ptr(struct spider_net_card *card)
1146 {
1147  struct spider_net_descr_chain *chain = &card->rx_chain;
1148  struct spider_net_descr *descr;
1149  int i, status;
1150 
1151  /* Advance tail pointer past any empty and reaped descrs */
1152  descr = chain->tail;
1153  status = spider_net_get_descr_status(descr->hwdescr);
1154 
1155  for (i=0; i<chain->num_desc; i++) {
1156  if ((status != SPIDER_NET_DESCR_CARDOWNED) &&
1157  (status != SPIDER_NET_DESCR_NOT_IN_USE)) break;
1158  descr = descr->next;
1159  status = spider_net_get_descr_status(descr->hwdescr);
1160  }
1161  chain->tail = descr;
1162 
1163  if ((i == chain->num_desc) || (i == 0))
1164  return 1;
1165  return 0;
1166 }
1167 
1179 static int
1180 spider_net_decode_one_descr(struct spider_net_card *card)
1181 {
1182  struct net_device *dev = card->netdev;
1183  struct spider_net_descr_chain *chain = &card->rx_chain;
1184  struct spider_net_descr *descr = chain->tail;
1185  struct spider_net_hw_descr *hwdescr = descr->hwdescr;
1186  u32 hw_buf_addr;
1187  int status;
1188 
1189  status = spider_net_get_descr_status(hwdescr);
1190 
1191  /* Nothing in the descriptor, or ring must be empty */
1192  if ((status == SPIDER_NET_DESCR_CARDOWNED) ||
1193  (status == SPIDER_NET_DESCR_NOT_IN_USE))
1194  return 0;
1195 
1196  /* descriptor definitively used -- move on tail */
1197  chain->tail = descr->next;
1198 
1199  /* unmap descriptor */
1200  hw_buf_addr = hwdescr->buf_addr;
1201  hwdescr->buf_addr = 0xffffffff;
1202  pci_unmap_single(card->pdev, hw_buf_addr,
1204 
1205  if ( (status == SPIDER_NET_DESCR_RESPONSE_ERROR) ||
1206  (status == SPIDER_NET_DESCR_PROTECTION_ERROR) ||
1207  (status == SPIDER_NET_DESCR_FORCE_END) ) {
1208  if (netif_msg_rx_err(card))
1209  dev_err(&dev->dev,
1210  "dropping RX descriptor with state %d\n", status);
1211  dev->stats.rx_dropped++;
1212  goto bad_desc;
1213  }
1214 
1215  if ( (status != SPIDER_NET_DESCR_COMPLETE) &&
1216  (status != SPIDER_NET_DESCR_FRAME_END) ) {
1217  if (netif_msg_rx_err(card))
1218  dev_err(&card->netdev->dev,
1219  "RX descriptor with unknown state %d\n", status);
1220  card->spider_stats.rx_desc_unk_state++;
1221  goto bad_desc;
1222  }
1223 
1224  /* The cases we'll throw away the packet immediately */
1225  if (hwdescr->data_error & SPIDER_NET_DESTROY_RX_FLAGS) {
1226  if (netif_msg_rx_err(card))
1227  dev_err(&card->netdev->dev,
1228  "error in received descriptor found, "
1229  "data_status=x%08x, data_error=x%08x\n",
1230  hwdescr->data_status, hwdescr->data_error);
1231  goto bad_desc;
1232  }
1233 
1235  dev_err(&card->netdev->dev, "bad status, cmd_status=x%08x\n",
1236  hwdescr->dmac_cmd_status);
1237  pr_err("buf_addr=x%08x\n", hw_buf_addr);
1238  pr_err("buf_size=x%08x\n", hwdescr->buf_size);
1239  pr_err("next_descr_addr=x%08x\n", hwdescr->next_descr_addr);
1240  pr_err("result_size=x%08x\n", hwdescr->result_size);
1241  pr_err("valid_size=x%08x\n", hwdescr->valid_size);
1242  pr_err("data_status=x%08x\n", hwdescr->data_status);
1243  pr_err("data_error=x%08x\n", hwdescr->data_error);
1244  pr_err("which=%ld\n", descr - card->rx_chain.ring);
1245 
1246  card->spider_stats.rx_desc_error++;
1247  goto bad_desc;
1248  }
1249 
1250  /* Ok, we've got a packet in descr */
1251  spider_net_pass_skb_up(descr, card);
1252  descr->skb = NULL;
1254  return 1;
1255 
1256 bad_desc:
1257  if (netif_msg_rx_err(card))
1258  show_rx_chain(card);
1259  dev_kfree_skb_irq(descr->skb);
1260  descr->skb = NULL;
1262  return 0;
1263 }
1264 
1277 static int spider_net_poll(struct napi_struct *napi, int budget)
1278 {
1279  struct spider_net_card *card = container_of(napi, struct spider_net_card, napi);
1280  int packets_done = 0;
1281 
1282  while (packets_done < budget) {
1283  if (!spider_net_decode_one_descr(card))
1284  break;
1285 
1286  packets_done++;
1287  }
1288 
1289  if ((packets_done == 0) && (card->num_rx_ints != 0)) {
1290  if (!spider_net_resync_tail_ptr(card))
1291  packets_done = budget;
1292  spider_net_resync_head_ptr(card);
1293  }
1294  card->num_rx_ints = 0;
1295 
1296  spider_net_refill_rx_chain(card);
1297  spider_net_enable_rxdmac(card);
1298 
1299  spider_net_cleanup_tx_ring(card);
1300 
1301  /* if all packets are in the stack, enable interrupts and return 0 */
1302  /* if not, return 1 */
1303  if (packets_done < budget) {
1304  napi_complete(napi);
1305  spider_net_rx_irq_on(card);
1306  card->ignore_rx_ramfull = 0;
1307  }
1308 
1309  return packets_done;
1310 }
1311 
1319 static int
1320 spider_net_change_mtu(struct net_device *netdev, int new_mtu)
1321 {
1322  /* no need to re-alloc skbs or so -- the max mtu is about 2.3k
1323  * and mtu is outbound only anyway */
1324  if ( (new_mtu < SPIDER_NET_MIN_MTU ) ||
1325  (new_mtu > SPIDER_NET_MAX_MTU) )
1326  return -EINVAL;
1327  netdev->mtu = new_mtu;
1328  return 0;
1329 }
1330 
1339 static int
1340 spider_net_set_mac(struct net_device *netdev, void *p)
1341 {
1342  struct spider_net_card *card = netdev_priv(netdev);
1343  u32 macl, macu, regvalue;
1344  struct sockaddr *addr = p;
1345 
1346  if (!is_valid_ether_addr(addr->sa_data))
1347  return -EADDRNOTAVAIL;
1348 
1349  /* switch off GMACTPE and GMACRPE */
1350  regvalue = spider_net_read_reg(card, SPIDER_NET_GMACOPEMD);
1351  regvalue &= ~((1 << 5) | (1 << 6));
1352  spider_net_write_reg(card, SPIDER_NET_GMACOPEMD, regvalue);
1353 
1354  /* write mac */
1355  macu = (addr->sa_data[0]<<24) + (addr->sa_data[1]<<16) +
1356  (addr->sa_data[2]<<8) + (addr->sa_data[3]);
1357  macl = (addr->sa_data[4]<<8) + (addr->sa_data[5]);
1358  spider_net_write_reg(card, SPIDER_NET_GMACUNIMACU, macu);
1359  spider_net_write_reg(card, SPIDER_NET_GMACUNIMACL, macl);
1360 
1361  /* switch GMACTPE and GMACRPE back on */
1362  regvalue = spider_net_read_reg(card, SPIDER_NET_GMACOPEMD);
1363  regvalue |= ((1 << 5) | (1 << 6));
1364  spider_net_write_reg(card, SPIDER_NET_GMACOPEMD, regvalue);
1365 
1366  spider_net_set_promisc(card);
1367 
1368  /* look up, whether we have been successful */
1369  if (spider_net_get_mac_address(netdev))
1370  return -EADDRNOTAVAIL;
1371  if (memcmp(netdev->dev_addr,addr->sa_data,netdev->addr_len))
1372  return -EADDRNOTAVAIL;
1373 
1374  return 0;
1375 }
1376 
1385 static void
1386 spider_net_link_reset(struct net_device *netdev)
1387 {
1388 
1389  struct spider_net_card *card = netdev_priv(netdev);
1390 
1391  del_timer_sync(&card->aneg_timer);
1392 
1393  /* clear interrupt, block further interrupts */
1394  spider_net_write_reg(card, SPIDER_NET_GMACST,
1395  spider_net_read_reg(card, SPIDER_NET_GMACST));
1396  spider_net_write_reg(card, SPIDER_NET_GMACINTEN, 0);
1397 
1398  /* reset phy and setup aneg */
1399  card->aneg_count = 0;
1400  card->medium = BCM54XX_COPPER;
1401  spider_net_setup_aneg(card);
1402  mod_timer(&card->aneg_timer, jiffies + SPIDER_NET_ANEG_TIMER);
1403 
1404 }
1405 
1414 static void
1415 spider_net_handle_error_irq(struct spider_net_card *card, u32 status_reg,
1416  u32 error_reg1, u32 error_reg2)
1417 {
1418  u32 i;
1419  int show_error = 1;
1420 
1421  /* check GHIINT0STS ************************************/
1422  if (status_reg)
1423  for (i = 0; i < 32; i++)
1424  if (status_reg & (1<<i))
1425  switch (i)
1426  {
1427  /* let error_reg1 and error_reg2 evaluation decide, what to do
1428  case SPIDER_NET_PHYINT:
1429  case SPIDER_NET_GMAC2INT:
1430  case SPIDER_NET_GMAC1INT:
1431  case SPIDER_NET_GFIFOINT:
1432  case SPIDER_NET_DMACINT:
1433  case SPIDER_NET_GSYSINT:
1434  break; */
1435 
1436  case SPIDER_NET_GIPSINT:
1437  show_error = 0;
1438  break;
1439 
1441  /* PHY write operation completed */
1442  show_error = 0;
1443  break;
1445  /* PHY read operation completed */
1446  /* we don't use semaphores, as we poll for the completion
1447  * of the read operation in spider_net_read_phy. Should take
1448  * about 50 us */
1449  show_error = 0;
1450  break;
1451  case SPIDER_NET_GPWFFINT:
1452  /* PHY command queue full */
1453  if (netif_msg_intr(card))
1454  dev_err(&card->netdev->dev, "PHY write queue full\n");
1455  show_error = 0;
1456  break;
1457 
1458  /* case SPIDER_NET_GRMDADRINT: not used. print a message */
1459  /* case SPIDER_NET_GRMARPINT: not used. print a message */
1460  /* case SPIDER_NET_GRMMPINT: not used. print a message */
1461 
1462  case SPIDER_NET_GDTDEN0INT:
1463  /* someone has set TX_DMA_EN to 0 */
1464  show_error = 0;
1465  break;
1466 
1467  case SPIDER_NET_GDDDEN0INT: /* fallthrough */
1468  case SPIDER_NET_GDCDEN0INT: /* fallthrough */
1469  case SPIDER_NET_GDBDEN0INT: /* fallthrough */
1470  case SPIDER_NET_GDADEN0INT:
1471  /* someone has set RX_DMA_EN to 0 */
1472  show_error = 0;
1473  break;
1474 
1475  /* RX interrupts */
1476  case SPIDER_NET_GDDFDCINT:
1477  case SPIDER_NET_GDCFDCINT:
1478  case SPIDER_NET_GDBFDCINT:
1479  case SPIDER_NET_GDAFDCINT:
1480  /* case SPIDER_NET_GDNMINT: not used. print a message */
1481  /* case SPIDER_NET_GCNMINT: not used. print a message */
1482  /* case SPIDER_NET_GBNMINT: not used. print a message */
1483  /* case SPIDER_NET_GANMINT: not used. print a message */
1484  /* case SPIDER_NET_GRFNMINT: not used. print a message */
1485  show_error = 0;
1486  break;
1487 
1488  /* TX interrupts */
1489  case SPIDER_NET_GDTFDCINT:
1490  show_error = 0;
1491  break;
1492  case SPIDER_NET_GTTEDINT:
1493  show_error = 0;
1494  break;
1495  case SPIDER_NET_GDTDCEINT:
1496  /* chain end. If a descriptor should be sent, kick off
1497  * tx dma
1498  if (card->tx_chain.tail != card->tx_chain.head)
1499  spider_net_kick_tx_dma(card);
1500  */
1501  show_error = 0;
1502  break;
1503 
1504  /* case SPIDER_NET_G1TMCNTINT: not used. print a message */
1505  /* case SPIDER_NET_GFREECNTINT: not used. print a message */
1506  }
1507 
1508  /* check GHIINT1STS ************************************/
1509  if (error_reg1)
1510  for (i = 0; i < 32; i++)
1511  if (error_reg1 & (1<<i))
1512  switch (i)
1513  {
1514  case SPIDER_NET_GTMFLLINT:
1515  /* TX RAM full may happen on a usual case.
1516  * Logging is not needed. */
1517  show_error = 0;
1518  break;
1519  case SPIDER_NET_GRFDFLLINT: /* fallthrough */
1520  case SPIDER_NET_GRFCFLLINT: /* fallthrough */
1521  case SPIDER_NET_GRFBFLLINT: /* fallthrough */
1522  case SPIDER_NET_GRFAFLLINT: /* fallthrough */
1523  case SPIDER_NET_GRMFLLINT:
1524  /* Could happen when rx chain is full */
1525  if (card->ignore_rx_ramfull == 0) {
1526  card->ignore_rx_ramfull = 1;
1527  spider_net_resync_head_ptr(card);
1528  spider_net_refill_rx_chain(card);
1529  spider_net_enable_rxdmac(card);
1530  card->num_rx_ints ++;
1531  napi_schedule(&card->napi);
1532  }
1533  show_error = 0;
1534  break;
1535 
1536  /* case SPIDER_NET_GTMSHTINT: problem, print a message */
1537  case SPIDER_NET_GDTINVDINT:
1538  /* allrighty. tx from previous descr ok */
1539  show_error = 0;
1540  break;
1541 
1542  /* chain end */
1543  case SPIDER_NET_GDDDCEINT: /* fallthrough */
1544  case SPIDER_NET_GDCDCEINT: /* fallthrough */
1545  case SPIDER_NET_GDBDCEINT: /* fallthrough */
1546  case SPIDER_NET_GDADCEINT:
1547  spider_net_resync_head_ptr(card);
1548  spider_net_refill_rx_chain(card);
1549  spider_net_enable_rxdmac(card);
1550  card->num_rx_ints ++;
1551  napi_schedule(&card->napi);
1552  show_error = 0;
1553  break;
1554 
1555  /* invalid descriptor */
1556  case SPIDER_NET_GDDINVDINT: /* fallthrough */
1557  case SPIDER_NET_GDCINVDINT: /* fallthrough */
1558  case SPIDER_NET_GDBINVDINT: /* fallthrough */
1559  case SPIDER_NET_GDAINVDINT:
1560  /* Could happen when rx chain is full */
1561  spider_net_resync_head_ptr(card);
1562  spider_net_refill_rx_chain(card);
1563  spider_net_enable_rxdmac(card);
1564  card->num_rx_ints ++;
1565  napi_schedule(&card->napi);
1566  show_error = 0;
1567  break;
1568 
1569  /* case SPIDER_NET_GDTRSERINT: problem, print a message */
1570  /* case SPIDER_NET_GDDRSERINT: problem, print a message */
1571  /* case SPIDER_NET_GDCRSERINT: problem, print a message */
1572  /* case SPIDER_NET_GDBRSERINT: problem, print a message */
1573  /* case SPIDER_NET_GDARSERINT: problem, print a message */
1574  /* case SPIDER_NET_GDSERINT: problem, print a message */
1575  /* case SPIDER_NET_GDTPTERINT: problem, print a message */
1576  /* case SPIDER_NET_GDDPTERINT: problem, print a message */
1577  /* case SPIDER_NET_GDCPTERINT: problem, print a message */
1578  /* case SPIDER_NET_GDBPTERINT: problem, print a message */
1579  /* case SPIDER_NET_GDAPTERINT: problem, print a message */
1580  default:
1581  show_error = 1;
1582  break;
1583  }
1584 
1585  /* check GHIINT2STS ************************************/
1586  if (error_reg2)
1587  for (i = 0; i < 32; i++)
1588  if (error_reg2 & (1<<i))
1589  switch (i)
1590  {
1591  /* there is nothing we can (want to) do at this time. Log a
1592  * message, we can switch on and off the specific values later on
1593  case SPIDER_NET_GPROPERINT:
1594  case SPIDER_NET_GMCTCRSNGINT:
1595  case SPIDER_NET_GMCTLCOLINT:
1596  case SPIDER_NET_GMCTTMOTINT:
1597  case SPIDER_NET_GMCRCAERINT:
1598  case SPIDER_NET_GMCRCALERINT:
1599  case SPIDER_NET_GMCRALNERINT:
1600  case SPIDER_NET_GMCROVRINT:
1601  case SPIDER_NET_GMCRRNTINT:
1602  case SPIDER_NET_GMCRRXERINT:
1603  case SPIDER_NET_GTITCSERINT:
1604  case SPIDER_NET_GTIFMTERINT:
1605  case SPIDER_NET_GTIPKTRVKINT:
1606  case SPIDER_NET_GTISPINGINT:
1607  case SPIDER_NET_GTISADNGINT:
1608  case SPIDER_NET_GTISPDNGINT:
1609  case SPIDER_NET_GRIFMTERINT:
1610  case SPIDER_NET_GRIPKTRVKINT:
1611  case SPIDER_NET_GRISPINGINT:
1612  case SPIDER_NET_GRISADNGINT:
1613  case SPIDER_NET_GRISPDNGINT:
1614  break;
1615  */
1616  default:
1617  break;
1618  }
1619 
1620  if ((show_error) && (netif_msg_intr(card)) && net_ratelimit())
1621  dev_err(&card->netdev->dev, "Error interrupt, GHIINT0STS = 0x%08x, "
1622  "GHIINT1STS = 0x%08x, GHIINT2STS = 0x%08x\n",
1623  status_reg, error_reg1, error_reg2);
1624 
1625  /* clear interrupt sources */
1626  spider_net_write_reg(card, SPIDER_NET_GHIINT1STS, error_reg1);
1627  spider_net_write_reg(card, SPIDER_NET_GHIINT2STS, error_reg2);
1628 }
1629 
1641 static irqreturn_t
1642 spider_net_interrupt(int irq, void *ptr)
1643 {
1644  struct net_device *netdev = ptr;
1645  struct spider_net_card *card = netdev_priv(netdev);
1646  u32 status_reg, error_reg1, error_reg2;
1647 
1648  status_reg = spider_net_read_reg(card, SPIDER_NET_GHIINT0STS);
1649  error_reg1 = spider_net_read_reg(card, SPIDER_NET_GHIINT1STS);
1650  error_reg2 = spider_net_read_reg(card, SPIDER_NET_GHIINT2STS);
1651 
1652  if (!(status_reg & SPIDER_NET_INT0_MASK_VALUE) &&
1653  !(error_reg1 & SPIDER_NET_INT1_MASK_VALUE) &&
1654  !(error_reg2 & SPIDER_NET_INT2_MASK_VALUE))
1655  return IRQ_NONE;
1656 
1657  if (status_reg & SPIDER_NET_RXINT ) {
1658  spider_net_rx_irq_off(card);
1659  napi_schedule(&card->napi);
1660  card->num_rx_ints ++;
1661  }
1662  if (status_reg & SPIDER_NET_TXINT)
1663  napi_schedule(&card->napi);
1664 
1665  if (status_reg & SPIDER_NET_LINKINT)
1666  spider_net_link_reset(netdev);
1667 
1668  if (status_reg & SPIDER_NET_ERRINT )
1669  spider_net_handle_error_irq(card, status_reg,
1670  error_reg1, error_reg2);
1671 
1672  /* clear interrupt sources */
1673  spider_net_write_reg(card, SPIDER_NET_GHIINT0STS, status_reg);
1674 
1675  return IRQ_HANDLED;
1676 }
1677 
1678 #ifdef CONFIG_NET_POLL_CONTROLLER
1679 
1685 static void
1686 spider_net_poll_controller(struct net_device *netdev)
1687 {
1688  disable_irq(netdev->irq);
1689  spider_net_interrupt(netdev->irq, netdev);
1690  enable_irq(netdev->irq);
1691 }
1692 #endif /* CONFIG_NET_POLL_CONTROLLER */
1693 
1700 static void
1701 spider_net_enable_interrupts(struct spider_net_card *card)
1702 {
1703  spider_net_write_reg(card, SPIDER_NET_GHIINT0MSK,
1704  SPIDER_NET_INT0_MASK_VALUE);
1705  spider_net_write_reg(card, SPIDER_NET_GHIINT1MSK,
1706  SPIDER_NET_INT1_MASK_VALUE);
1707  spider_net_write_reg(card, SPIDER_NET_GHIINT2MSK,
1708  SPIDER_NET_INT2_MASK_VALUE);
1709 }
1710 
1717 static void
1718 spider_net_disable_interrupts(struct spider_net_card *card)
1719 {
1720  spider_net_write_reg(card, SPIDER_NET_GHIINT0MSK, 0);
1721  spider_net_write_reg(card, SPIDER_NET_GHIINT1MSK, 0);
1722  spider_net_write_reg(card, SPIDER_NET_GHIINT2MSK, 0);
1723  spider_net_write_reg(card, SPIDER_NET_GMACINTEN, 0);
1724 }
1725 
1733 static void
1734 spider_net_init_card(struct spider_net_card *card)
1735 {
1736  spider_net_write_reg(card, SPIDER_NET_CKRCTRL,
1738 
1739  spider_net_write_reg(card, SPIDER_NET_CKRCTRL,
1741 
1742  /* trigger ETOMOD signal */
1743  spider_net_write_reg(card, SPIDER_NET_GMACOPEMD,
1744  spider_net_read_reg(card, SPIDER_NET_GMACOPEMD) | 0x4);
1745 
1746  spider_net_disable_interrupts(card);
1747 }
1748 
1755 static void
1756 spider_net_enable_card(struct spider_net_card *card)
1757 {
1758  int i;
1759  /* the following array consists of (register),(value) pairs
1760  * that are set in this function. A register of 0 ends the list */
1761  u32 regs[][2] = {
1762  { SPIDER_NET_GRESUMINTNUM, 0 },
1763  { SPIDER_NET_GREINTNUM, 0 },
1764 
1765  /* set interrupt frame number registers */
1766  /* clear the single DMA engine registers first */
1771  /* then set, what we really need */
1773 
1774  /* timer counter registers and stuff */
1775  { SPIDER_NET_GFREECNNUM, 0 },
1776  { SPIDER_NET_GONETIMENUM, 0 },
1777  { SPIDER_NET_GTOUTFRMNUM, 0 },
1778 
1779  /* RX mode setting */
1781  /* TX mode setting */
1783  /* IPSEC mode setting */
1785 
1787 
1788  { SPIDER_NET_GMRWOLCTRL, 0 },
1789  { SPIDER_NET_GTESTMD, 0x10000000 },
1790  { SPIDER_NET_GTTQMSK, 0x00400040 },
1791 
1792  { SPIDER_NET_GMACINTEN, 0 },
1793 
1794  /* flow control stuff */
1797 
1799  { 0, 0}
1800  };
1801 
1802  i = 0;
1803  while (regs[i][0]) {
1804  spider_net_write_reg(card, regs[i][0], regs[i][1]);
1805  i++;
1806  }
1807 
1808  /* clear unicast filter table entries 1 to 14 */
1809  for (i = 1; i <= 14; i++) {
1810  spider_net_write_reg(card,
1811  SPIDER_NET_GMRUAFILnR + i * 8,
1812  0x00080000);
1813  spider_net_write_reg(card,
1814  SPIDER_NET_GMRUAFILnR + i * 8 + 4,
1815  0x00000000);
1816  }
1817 
1818  spider_net_write_reg(card, SPIDER_NET_GMRUA0FIL15R, 0x08080000);
1819 
1820  spider_net_write_reg(card, SPIDER_NET_ECMODE, SPIDER_NET_ECMODE_VALUE);
1821 
1822  /* set chain tail address for RX chains and
1823  * enable DMA */
1824  spider_net_enable_rxchtails(card);
1825  spider_net_enable_rxdmac(card);
1826 
1827  spider_net_write_reg(card, SPIDER_NET_GRXDMAEN, SPIDER_NET_WOL_VALUE);
1828 
1829  spider_net_write_reg(card, SPIDER_NET_GMACLENLMT,
1831  spider_net_write_reg(card, SPIDER_NET_GMACOPEMD,
1833 
1834  spider_net_write_reg(card, SPIDER_NET_GDTDMACCNTR,
1836 }
1837 
1846 static int
1847 spider_net_download_firmware(struct spider_net_card *card,
1848  const void *firmware_ptr)
1849 {
1850  int sequencer, i;
1851  const u32 *fw_ptr = firmware_ptr;
1852 
1853  /* stop sequencers */
1854  spider_net_write_reg(card, SPIDER_NET_GSINIT,
1856 
1857  for (sequencer = 0; sequencer < SPIDER_NET_FIRMWARE_SEQS;
1858  sequencer++) {
1859  spider_net_write_reg(card,
1860  SPIDER_NET_GSnPRGADR + sequencer * 8, 0);
1861  for (i = 0; i < SPIDER_NET_FIRMWARE_SEQWORDS; i++) {
1862  spider_net_write_reg(card, SPIDER_NET_GSnPRGDAT +
1863  sequencer * 8, *fw_ptr);
1864  fw_ptr++;
1865  }
1866  }
1867 
1868  if (spider_net_read_reg(card, SPIDER_NET_GSINIT))
1869  return -EIO;
1870 
1871  spider_net_write_reg(card, SPIDER_NET_GSINIT,
1873 
1874  return 0;
1875 }
1876 
1903 static int
1904 spider_net_init_firmware(struct spider_net_card *card)
1905 {
1906  struct firmware *firmware = NULL;
1907  struct device_node *dn;
1908  const u8 *fw_prop = NULL;
1909  int err = -ENOENT;
1910  int fw_size;
1911 
1912  if (request_firmware((const struct firmware **)&firmware,
1913  SPIDER_NET_FIRMWARE_NAME, &card->pdev->dev) == 0) {
1914  if ( (firmware->size != SPIDER_NET_FIRMWARE_LEN) &&
1915  netif_msg_probe(card) ) {
1916  dev_err(&card->netdev->dev,
1917  "Incorrect size of spidernet firmware in " \
1918  "filesystem. Looking in host firmware...\n");
1919  goto try_host_fw;
1920  }
1921  err = spider_net_download_firmware(card, firmware->data);
1922 
1923  release_firmware(firmware);
1924  if (err)
1925  goto try_host_fw;
1926 
1927  goto done;
1928  }
1929 
1930 try_host_fw:
1931  dn = pci_device_to_OF_node(card->pdev);
1932  if (!dn)
1933  goto out_err;
1934 
1935  fw_prop = of_get_property(dn, "firmware", &fw_size);
1936  if (!fw_prop)
1937  goto out_err;
1938 
1939  if ( (fw_size != SPIDER_NET_FIRMWARE_LEN) &&
1940  netif_msg_probe(card) ) {
1941  dev_err(&card->netdev->dev,
1942  "Incorrect size of spidernet firmware in host firmware\n");
1943  goto done;
1944  }
1945 
1946  err = spider_net_download_firmware(card, fw_prop);
1947 
1948 done:
1949  return err;
1950 out_err:
1951  if (netif_msg_probe(card))
1952  dev_err(&card->netdev->dev,
1953  "Couldn't find spidernet firmware in filesystem " \
1954  "or host firmware\n");
1955  return err;
1956 }
1957 
1967 int
1969 {
1970  struct spider_net_card *card = netdev_priv(netdev);
1971  int result;
1972 
1973  result = spider_net_init_firmware(card);
1974  if (result)
1975  goto init_firmware_failed;
1976 
1977  /* start probing with copper */
1978  card->aneg_count = 0;
1979  card->medium = BCM54XX_COPPER;
1980  spider_net_setup_aneg(card);
1981  if (card->phy.def->phy_id)
1983 
1984  result = spider_net_init_chain(card, &card->tx_chain);
1985  if (result)
1986  goto alloc_tx_failed;
1987  card->low_watermark = NULL;
1988 
1989  result = spider_net_init_chain(card, &card->rx_chain);
1990  if (result)
1991  goto alloc_rx_failed;
1992 
1993  /* Allocate rx skbs */
1994  if (spider_net_alloc_rx_skbs(card))
1995  goto alloc_skbs_failed;
1996 
1997  spider_net_set_multi(netdev);
1998 
1999  /* further enhancement: setup hw vlan, if needed */
2000 
2001  result = -EBUSY;
2002  if (request_irq(netdev->irq, spider_net_interrupt,
2003  IRQF_SHARED, netdev->name, netdev))
2004  goto register_int_failed;
2005 
2006  spider_net_enable_card(card);
2007 
2008  netif_start_queue(netdev);
2009  netif_carrier_on(netdev);
2010  napi_enable(&card->napi);
2011 
2012  spider_net_enable_interrupts(card);
2013 
2014  return 0;
2015 
2016 register_int_failed:
2017  spider_net_free_rx_chain_contents(card);
2018 alloc_skbs_failed:
2019  spider_net_free_chain(card, &card->rx_chain);
2020 alloc_rx_failed:
2021  spider_net_free_chain(card, &card->tx_chain);
2022 alloc_tx_failed:
2023  del_timer_sync(&card->aneg_timer);
2024 init_firmware_failed:
2025  return result;
2026 }
2027 
2033 static void spider_net_link_phy(unsigned long data)
2034 {
2035  struct spider_net_card *card = (struct spider_net_card *)data;
2036  struct mii_phy *phy = &card->phy;
2037 
2038  /* if link didn't come up after SPIDER_NET_ANEG_TIMEOUT tries, setup phy again */
2039  if (card->aneg_count > SPIDER_NET_ANEG_TIMEOUT) {
2040 
2041  pr_debug("%s: link is down trying to bring it up\n",
2042  card->netdev->name);
2043 
2044  switch (card->medium) {
2045  case BCM54XX_COPPER:
2046  /* enable fiber with autonegotiation first */
2047  if (phy->def->ops->enable_fiber)
2048  phy->def->ops->enable_fiber(phy, 1);
2049  card->medium = BCM54XX_FIBER;
2050  break;
2051 
2052  case BCM54XX_FIBER:
2053  /* fiber didn't come up, try to disable fiber autoneg */
2054  if (phy->def->ops->enable_fiber)
2055  phy->def->ops->enable_fiber(phy, 0);
2056  card->medium = BCM54XX_UNKNOWN;
2057  break;
2058 
2059  case BCM54XX_UNKNOWN:
2060  /* copper, fiber with and without failed,
2061  * retry from beginning */
2062  spider_net_setup_aneg(card);
2063  card->medium = BCM54XX_COPPER;
2064  break;
2065  }
2066 
2067  card->aneg_count = 0;
2068  mod_timer(&card->aneg_timer, jiffies + SPIDER_NET_ANEG_TIMER);
2069  return;
2070  }
2071 
2072  /* link still not up, try again later */
2073  if (!(phy->def->ops->poll_link(phy))) {
2074  card->aneg_count++;
2075  mod_timer(&card->aneg_timer, jiffies + SPIDER_NET_ANEG_TIMER);
2076  return;
2077  }
2078 
2079  /* link came up, get abilities */
2080  phy->def->ops->read_link(phy);
2081 
2082  spider_net_write_reg(card, SPIDER_NET_GMACST,
2083  spider_net_read_reg(card, SPIDER_NET_GMACST));
2084  spider_net_write_reg(card, SPIDER_NET_GMACINTEN, 0x4);
2085 
2086  if (phy->speed == 1000)
2087  spider_net_write_reg(card, SPIDER_NET_GMACMODE, 0x00000001);
2088  else
2089  spider_net_write_reg(card, SPIDER_NET_GMACMODE, 0);
2090 
2091  card->aneg_count = 0;
2092 
2093  pr_info("%s: link up, %i Mbps, %s-duplex %sautoneg.\n",
2094  card->netdev->name, phy->speed,
2095  phy->duplex == 1 ? "Full" : "Half",
2096  phy->autoneg == 1 ? "" : "no ");
2097 }
2098 
2107 static int
2108 spider_net_setup_phy(struct spider_net_card *card)
2109 {
2110  struct mii_phy *phy = &card->phy;
2111 
2112  spider_net_write_reg(card, SPIDER_NET_GDTDMASEL,
2114  spider_net_write_reg(card, SPIDER_NET_GPCCTRL,
2116 
2117  phy->dev = card->netdev;
2118  phy->mdio_read = spider_net_read_phy;
2119  phy->mdio_write = spider_net_write_phy;
2120 
2121  for (phy->mii_id = 1; phy->mii_id <= 31; phy->mii_id++) {
2122  unsigned short id;
2123  id = spider_net_read_phy(card->netdev, phy->mii_id, MII_BMSR);
2124  if (id != 0x0000 && id != 0xffff) {
2125  if (!sungem_phy_probe(phy, phy->mii_id)) {
2126  pr_info("Found %s.\n", phy->def->name);
2127  break;
2128  }
2129  }
2130  }
2131 
2132  return 0;
2133 }
2134 
2141 static void
2142 spider_net_workaround_rxramfull(struct spider_net_card *card)
2143 {
2144  int i, sequencer = 0;
2145 
2146  /* cancel reset */
2147  spider_net_write_reg(card, SPIDER_NET_CKRCTRL,
2149 
2150  /* empty sequencer data */
2151  for (sequencer = 0; sequencer < SPIDER_NET_FIRMWARE_SEQS;
2152  sequencer++) {
2153  spider_net_write_reg(card, SPIDER_NET_GSnPRGADR +
2154  sequencer * 8, 0x0);
2155  for (i = 0; i < SPIDER_NET_FIRMWARE_SEQWORDS; i++) {
2156  spider_net_write_reg(card, SPIDER_NET_GSnPRGDAT +
2157  sequencer * 8, 0x0);
2158  }
2159  }
2160 
2161  /* set sequencer operation */
2162  spider_net_write_reg(card, SPIDER_NET_GSINIT, 0x000000fe);
2163 
2164  /* reset */
2165  spider_net_write_reg(card, SPIDER_NET_CKRCTRL,
2167 }
2168 
2175 int
2177 {
2178  struct spider_net_card *card = netdev_priv(netdev);
2179 
2180  napi_disable(&card->napi);
2181  netif_carrier_off(netdev);
2182  netif_stop_queue(netdev);
2183  del_timer_sync(&card->tx_timer);
2184  del_timer_sync(&card->aneg_timer);
2185 
2186  spider_net_disable_interrupts(card);
2187 
2188  free_irq(netdev->irq, netdev);
2189 
2190  spider_net_write_reg(card, SPIDER_NET_GDTDMACCNTR,
2192 
2193  /* turn off DMA, force end */
2194  spider_net_disable_rxdmac(card);
2195 
2196  /* release chains */
2197  spider_net_release_tx_chain(card, 1);
2198  spider_net_free_rx_chain_contents(card);
2199 
2200  spider_net_free_chain(card, &card->tx_chain);
2201  spider_net_free_chain(card, &card->rx_chain);
2202 
2203  return 0;
2204 }
2205 
2213 static void
2214 spider_net_tx_timeout_task(struct work_struct *work)
2215 {
2216  struct spider_net_card *card =
2218  struct net_device *netdev = card->netdev;
2219 
2220  if (!(netdev->flags & IFF_UP))
2221  goto out;
2222 
2223  netif_device_detach(netdev);
2224  spider_net_stop(netdev);
2225 
2226  spider_net_workaround_rxramfull(card);
2227  spider_net_init_card(card);
2228 
2229  if (spider_net_setup_phy(card))
2230  goto out;
2231 
2232  spider_net_open(netdev);
2233  spider_net_kick_tx_dma(card);
2234  netif_device_attach(netdev);
2235 
2236 out:
2238 }
2239 
2246 static void
2247 spider_net_tx_timeout(struct net_device *netdev)
2248 {
2249  struct spider_net_card *card;
2250 
2251  card = netdev_priv(netdev);
2253  if (netdev->flags & IFF_UP)
2255  else
2257  card->spider_stats.tx_timeouts++;
2258 }
2259 
2260 static const struct net_device_ops spider_net_ops = {
2261  .ndo_open = spider_net_open,
2262  .ndo_stop = spider_net_stop,
2263  .ndo_start_xmit = spider_net_xmit,
2264  .ndo_set_rx_mode = spider_net_set_multi,
2265  .ndo_set_mac_address = spider_net_set_mac,
2266  .ndo_change_mtu = spider_net_change_mtu,
2267  .ndo_do_ioctl = spider_net_do_ioctl,
2268  .ndo_tx_timeout = spider_net_tx_timeout,
2269  .ndo_validate_addr = eth_validate_addr,
2270  /* HW VLAN */
2271 #ifdef CONFIG_NET_POLL_CONTROLLER
2272  /* poll controller */
2273  .ndo_poll_controller = spider_net_poll_controller,
2274 #endif /* CONFIG_NET_POLL_CONTROLLER */
2275 };
2276 
2283 static void
2284 spider_net_setup_netdev_ops(struct net_device *netdev)
2285 {
2286  netdev->netdev_ops = &spider_net_ops;
2288  /* ethtool ops */
2290 }
2291 
2300 static int
2301 spider_net_setup_netdev(struct spider_net_card *card)
2302 {
2303  int result;
2304  struct net_device *netdev = card->netdev;
2305  struct device_node *dn;
2306  struct sockaddr addr;
2307  const u8 *mac;
2308 
2309  SET_NETDEV_DEV(netdev, &card->pdev->dev);
2310 
2311  pci_set_drvdata(card->pdev, netdev);
2312 
2313  init_timer(&card->tx_timer);
2314  card->tx_timer.function =
2315  (void (*)(unsigned long)) spider_net_cleanup_tx_ring;
2316  card->tx_timer.data = (unsigned long) card;
2317  netdev->irq = card->pdev->irq;
2318 
2319  card->aneg_count = 0;
2320  init_timer(&card->aneg_timer);
2321  card->aneg_timer.function = spider_net_link_phy;
2322  card->aneg_timer.data = (unsigned long) card;
2323 
2324  netif_napi_add(netdev, &card->napi,
2325  spider_net_poll, SPIDER_NET_NAPI_WEIGHT);
2326 
2327  spider_net_setup_netdev_ops(netdev);
2328 
2331  netdev->features |= NETIF_F_RXCSUM;
2332  netdev->features |= NETIF_F_IP_CSUM | NETIF_F_LLTX;
2333  /* some time: NETIF_F_HW_VLAN_TX | NETIF_F_HW_VLAN_RX |
2334  * NETIF_F_HW_VLAN_FILTER */
2335 
2336  netdev->irq = card->pdev->irq;
2337  card->num_rx_ints = 0;
2338  card->ignore_rx_ramfull = 0;
2339 
2340  dn = pci_device_to_OF_node(card->pdev);
2341  if (!dn)
2342  return -EIO;
2343 
2344  mac = of_get_property(dn, "local-mac-address", NULL);
2345  if (!mac)
2346  return -EIO;
2347  memcpy(addr.sa_data, mac, ETH_ALEN);
2348 
2349  result = spider_net_set_mac(netdev, &addr);
2350  if ((result) && (netif_msg_probe(card)))
2351  dev_err(&card->netdev->dev,
2352  "Failed to set MAC address: %i\n", result);
2353 
2354  result = register_netdev(netdev);
2355  if (result) {
2356  if (netif_msg_probe(card))
2357  dev_err(&card->netdev->dev,
2358  "Couldn't register net_device: %i\n", result);
2359  return result;
2360  }
2361 
2362  if (netif_msg_probe(card))
2363  pr_info("Initialized device %s.\n", netdev->name);
2364 
2365  return 0;
2366 }
2367 
2375 static struct spider_net_card *
2376 spider_net_alloc_card(void)
2377 {
2378  struct net_device *netdev;
2379  struct spider_net_card *card;
2380  size_t alloc_size;
2381 
2382  alloc_size = sizeof(struct spider_net_card) +
2383  (tx_descriptors + rx_descriptors) * sizeof(struct spider_net_descr);
2384  netdev = alloc_etherdev(alloc_size);
2385  if (!netdev)
2386  return NULL;
2387 
2388  card = netdev_priv(netdev);
2389  card->netdev = netdev;
2391  INIT_WORK(&card->tx_timeout_task, spider_net_tx_timeout_task);
2392  init_waitqueue_head(&card->waitq);
2394 
2395  card->rx_chain.num_desc = rx_descriptors;
2396  card->rx_chain.ring = card->darray;
2397  card->tx_chain.num_desc = tx_descriptors;
2398  card->tx_chain.ring = card->darray + rx_descriptors;
2399 
2400  return card;
2401 }
2402 
2409 static void
2410 spider_net_undo_pci_setup(struct spider_net_card *card)
2411 {
2412  iounmap(card->regs);
2413  pci_release_regions(card->pdev);
2414 }
2415 
2428 static struct spider_net_card *
2429 spider_net_setup_pci_dev(struct pci_dev *pdev)
2430 {
2431  struct spider_net_card *card;
2432  unsigned long mmio_start, mmio_len;
2433 
2434  if (pci_enable_device(pdev)) {
2435  dev_err(&pdev->dev, "Couldn't enable PCI device\n");
2436  return NULL;
2437  }
2438 
2439  if (!(pci_resource_flags(pdev, 0) & IORESOURCE_MEM)) {
2440  dev_err(&pdev->dev,
2441  "Couldn't find proper PCI device base address.\n");
2442  goto out_disable_dev;
2443  }
2444 
2446  dev_err(&pdev->dev,
2447  "Couldn't obtain PCI resources, aborting.\n");
2448  goto out_disable_dev;
2449  }
2450 
2451  pci_set_master(pdev);
2452 
2453  card = spider_net_alloc_card();
2454  if (!card) {
2455  dev_err(&pdev->dev,
2456  "Couldn't allocate net_device structure, aborting.\n");
2457  goto out_release_regions;
2458  }
2459  card->pdev = pdev;
2460 
2461  /* fetch base address and length of first resource */
2462  mmio_start = pci_resource_start(pdev, 0);
2463  mmio_len = pci_resource_len(pdev, 0);
2464 
2465  card->netdev->mem_start = mmio_start;
2466  card->netdev->mem_end = mmio_start + mmio_len;
2467  card->regs = ioremap(mmio_start, mmio_len);
2468 
2469  if (!card->regs) {
2470  dev_err(&pdev->dev,
2471  "Couldn't obtain PCI resources, aborting.\n");
2472  goto out_release_regions;
2473  }
2474 
2475  return card;
2476 
2477 out_release_regions:
2478  pci_release_regions(pdev);
2479 out_disable_dev:
2480  pci_disable_device(pdev);
2481  pci_set_drvdata(pdev, NULL);
2482  return NULL;
2483 }
2484 
2495 static int __devinit
2496 spider_net_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
2497 {
2498  int err = -EIO;
2499  struct spider_net_card *card;
2500 
2501  card = spider_net_setup_pci_dev(pdev);
2502  if (!card)
2503  goto out;
2504 
2505  spider_net_workaround_rxramfull(card);
2506  spider_net_init_card(card);
2507 
2508  err = spider_net_setup_phy(card);
2509  if (err)
2510  goto out_undo_pci;
2511 
2512  err = spider_net_setup_netdev(card);
2513  if (err)
2514  goto out_undo_pci;
2515 
2516  return 0;
2517 
2518 out_undo_pci:
2519  spider_net_undo_pci_setup(card);
2520  free_netdev(card->netdev);
2521 out:
2522  return err;
2523 }
2524 
2534 static void __devexit
2535 spider_net_remove(struct pci_dev *pdev)
2536 {
2537  struct net_device *netdev;
2538  struct spider_net_card *card;
2539 
2540  netdev = pci_get_drvdata(pdev);
2541  card = netdev_priv(netdev);
2542 
2543  wait_event(card->waitq,
2544  atomic_read(&card->tx_timeout_task_counter) == 0);
2545 
2546  unregister_netdev(netdev);
2547 
2548  /* switch off card */
2549  spider_net_write_reg(card, SPIDER_NET_CKRCTRL,
2551  spider_net_write_reg(card, SPIDER_NET_CKRCTRL,
2553 
2554  spider_net_undo_pci_setup(card);
2555  free_netdev(netdev);
2556 }
2557 
2558 static struct pci_driver spider_net_driver = {
2559  .name = spider_net_driver_name,
2560  .id_table = spider_net_pci_tbl,
2561  .probe = spider_net_probe,
2562  .remove = __devexit_p(spider_net_remove)
2563 };
2564 
2570 static int __init spider_net_init(void)
2571 {
2572  printk(KERN_INFO "Spidernet version %s.\n", VERSION);
2573 
2574  if (rx_descriptors < SPIDER_NET_RX_DESCRIPTORS_MIN) {
2575  rx_descriptors = SPIDER_NET_RX_DESCRIPTORS_MIN;
2576  pr_info("adjusting rx descriptors to %i.\n", rx_descriptors);
2577  }
2578  if (rx_descriptors > SPIDER_NET_RX_DESCRIPTORS_MAX) {
2579  rx_descriptors = SPIDER_NET_RX_DESCRIPTORS_MAX;
2580  pr_info("adjusting rx descriptors to %i.\n", rx_descriptors);
2581  }
2582  if (tx_descriptors < SPIDER_NET_TX_DESCRIPTORS_MIN) {
2583  tx_descriptors = SPIDER_NET_TX_DESCRIPTORS_MIN;
2584  pr_info("adjusting tx descriptors to %i.\n", tx_descriptors);
2585  }
2586  if (tx_descriptors > SPIDER_NET_TX_DESCRIPTORS_MAX) {
2587  tx_descriptors = SPIDER_NET_TX_DESCRIPTORS_MAX;
2588  pr_info("adjusting tx descriptors to %i.\n", tx_descriptors);
2589  }
2590 
2591  return pci_register_driver(&spider_net_driver);
2592 }
2593 
2599 static void __exit spider_net_cleanup(void)
2600 {
2601  pci_unregister_driver(&spider_net_driver);
2602 }
2603 
2604 module_init(spider_net_init);
2605 module_exit(spider_net_cleanup);