1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49#define DRV_NAME "8139cp"
50#define DRV_VERSION "1.3"
51#define DRV_RELDATE "Mar 22, 2004"
52
53
54#include <linux/module.h>
55#include <linux/moduleparam.h>
56#include <linux/kernel.h>
57#include <linux/compiler.h>
58#include <linux/netdevice.h>
59#include <linux/etherdevice.h>
60#include <linux/init.h>
61#include <linux/pci.h>
62#include <linux/dma-mapping.h>
63#include <linux/delay.h>
64#include <linux/ethtool.h>
65#include <linux/mii.h>
66#include <linux/if_vlan.h>
67#include <linux/crc32.h>
68#include <linux/in.h>
69#include <linux/ip.h>
70#include <linux/tcp.h>
71#include <linux/udp.h>
72#include <linux/cache.h>
73#include <asm/io.h>
74#include <asm/irq.h>
75#include <asm/uaccess.h>
76
77
78#if defined(CONFIG_VLAN_8021Q) || defined(CONFIG_VLAN_8021Q_MODULE)
79#define CP_VLAN_TAG_USED 1
80#define CP_VLAN_TX_TAG(tx_desc,vlan_tag_value) \
81 do { (tx_desc)->opts2 = cpu_to_le32(vlan_tag_value); } while (0)
82#else
83#define CP_VLAN_TAG_USED 0
84#define CP_VLAN_TX_TAG(tx_desc,vlan_tag_value) \
85 do { (tx_desc)->opts2 = 0; } while (0)
86#endif
87
88
89static char version[] =
90KERN_INFO DRV_NAME ": 10/100 PCI Ethernet driver v" DRV_VERSION " (" DRV_RELDATE ")\n";
91
92MODULE_AUTHOR("Jeff Garzik <jgarzik@pobox.com>");
93MODULE_DESCRIPTION("RealTek RTL-8139C+ series 10/100 PCI Ethernet driver");
94MODULE_VERSION(DRV_VERSION);
95MODULE_LICENSE("GPL");
96
97static int debug = -1;
98module_param(debug, int, 0);
99MODULE_PARM_DESC (debug, "8139cp: bitmapped message enable number");
100
101
102
103static int multicast_filter_limit = 32;
104module_param(multicast_filter_limit, int, 0);
105MODULE_PARM_DESC (multicast_filter_limit, "8139cp: maximum number of filtered multicast addresses");
106
107#define PFX DRV_NAME ": "
108
109#define CP_DEF_MSG_ENABLE (NETIF_MSG_DRV | \
110 NETIF_MSG_PROBE | \
111 NETIF_MSG_LINK)
112#define CP_NUM_STATS 14
113#define CP_STATS_SIZE 64
114#define CP_REGS_SIZE (0xff + 1)
115#define CP_REGS_VER 1
116#define CP_RX_RING_SIZE 64
117#define CP_TX_RING_SIZE 64
118#define CP_RING_BYTES \
119 ((sizeof(struct cp_desc) * CP_RX_RING_SIZE) + \
120 (sizeof(struct cp_desc) * CP_TX_RING_SIZE) + \
121 CP_STATS_SIZE)
122#define NEXT_TX(N) (((N) + 1) & (CP_TX_RING_SIZE - 1))
123#define NEXT_RX(N) (((N) + 1) & (CP_RX_RING_SIZE - 1))
124#define TX_BUFFS_AVAIL(CP) \
125 (((CP)->tx_tail <= (CP)->tx_head) ? \
126 (CP)->tx_tail + (CP_TX_RING_SIZE - 1) - (CP)->tx_head : \
127 (CP)->tx_tail - (CP)->tx_head - 1)
128
129#define PKT_BUF_SZ 1536
130#define RX_OFFSET 2
131#define CP_INTERNAL_PHY 32
132
133
134#define RX_FIFO_THRESH 5
135#define RX_DMA_BURST 4
136#define TX_DMA_BURST 6
137#define TX_EARLY_THRESH 256
138
139
140#define TX_TIMEOUT (6*HZ)
141
142
143#define CP_MIN_MTU 60
144#define CP_MAX_MTU 4096
145
146enum {
147
148 MAC0 = 0x00,
149 MAR0 = 0x08,
150 StatsAddr = 0x10,
151 TxRingAddr = 0x20,
152 HiTxRingAddr = 0x28,
153 Cmd = 0x37,
154 IntrMask = 0x3C,
155 IntrStatus = 0x3E,
156 TxConfig = 0x40,
157 ChipVersion = 0x43,
158 RxConfig = 0x44,
159 RxMissed = 0x4C,
160 Cfg9346 = 0x50,
161 Config1 = 0x52,
162 Config3 = 0x59,
163 Config4 = 0x5A,
164 MultiIntr = 0x5C,
165 BasicModeCtrl = 0x62,
166 BasicModeStatus = 0x64,
167 NWayAdvert = 0x66,
168 NWayLPAR = 0x68,
169 NWayExpansion = 0x6A,
170 Config5 = 0xD8,
171 TxPoll = 0xD9,
172 RxMaxSize = 0xDA,
173 CpCmd = 0xE0,
174 IntrMitigate = 0xE2,
175 RxRingAddr = 0xE4,
176 TxThresh = 0xEC,
177 OldRxBufAddr = 0x30,
178 OldTSD0 = 0x10,
179
180
181 DescOwn = (1 << 31),
182 RingEnd = (1 << 30),
183 FirstFrag = (1 << 29),
184 LastFrag = (1 << 28),
185 LargeSend = (1 << 27),
186 MSSShift = 16,
187 MSSMask = 0xfff,
188 TxError = (1 << 23),
189 RxError = (1 << 20),
190 IPCS = (1 << 18),
191 UDPCS = (1 << 17),
192 TCPCS = (1 << 16),
193 TxVlanTag = (1 << 17),
194 RxVlanTagged = (1 << 16),
195 IPFail = (1 << 15),
196 UDPFail = (1 << 14),
197 TCPFail = (1 << 13),
198 NormalTxPoll = (1 << 6),
199 PID1 = (1 << 17),
200 PID0 = (1 << 16),
201 RxProtoTCP = 1,
202 RxProtoUDP = 2,
203 RxProtoIP = 3,
204 TxFIFOUnder = (1 << 25),
205 TxOWC = (1 << 22),
206 TxLinkFail = (1 << 21),
207 TxMaxCol = (1 << 20),
208 TxColCntShift = 16,
209 TxColCntMask = 0x01 | 0x02 | 0x04 | 0x08,
210 RxErrFrame = (1 << 27),
211 RxMcast = (1 << 26),
212 RxErrCRC = (1 << 18),
213 RxErrRunt = (1 << 19),
214 RxErrLong = (1 << 21),
215 RxErrFIFO = (1 << 22),
216
217
218 DumpStats = (1 << 3),
219
220
221 RxCfgFIFOShift = 13,
222 RxCfgDMAShift = 8,
223 AcceptErr = 0x20,
224 AcceptRunt = 0x10,
225 AcceptBroadcast = 0x08,
226 AcceptMulticast = 0x04,
227 AcceptMyPhys = 0x02,
228 AcceptAllPhys = 0x01,
229
230
231 PciErr = (1 << 15),
232 TimerIntr = (1 << 14),
233 LenChg = (1 << 13),
234 SWInt = (1 << 8),
235 TxEmpty = (1 << 7),
236 RxFIFOOvr = (1 << 6),
237 LinkChg = (1 << 5),
238 RxEmpty = (1 << 4),
239 TxErr = (1 << 3),
240 TxOK = (1 << 2),
241 RxErr = (1 << 1),
242 RxOK = (1 << 0),
243 IntrResvd = (1 << 10),
244
245
246 IntrAll = PciErr | TimerIntr | LenChg | SWInt | TxEmpty |
247 RxFIFOOvr | LinkChg | RxEmpty | TxErr | TxOK |
248 RxErr | RxOK | IntrResvd,
249
250
251 CmdReset = (1 << 4),
252 RxOn = (1 << 3),
253 TxOn = (1 << 2),
254
255
256 RxVlanOn = (1 << 6),
257 RxChkSum = (1 << 5),
258 PCIDAC = (1 << 4),
259 PCIMulRW = (1 << 3),
260 CpRxOn = (1 << 1),
261 CpTxOn = (1 << 0),
262
263
264 Cfg9346_Lock = 0x00,
265 Cfg9346_Unlock = 0xC0,
266
267
268 IFG = (1 << 25) | (1 << 24),
269 TxDMAShift = 8,
270
271
272 TxThreshMask = 0x3f,
273 TxThreshMax = 2048,
274
275
276 DriverLoaded = (1 << 5),
277 LWACT = (1 << 4),
278 PMEnable = (1 << 0),
279
280
281 PARMEnable = (1 << 6),
282 MagicPacket = (1 << 5),
283 LinkUp = (1 << 4),
284
285
286 LWPTN = (1 << 1),
287 LWPME = (1 << 4),
288
289
290 BWF = (1 << 6),
291 MWF = (1 << 5),
292 UWF = (1 << 4),
293 LANWake = (1 << 1),
294 PMEStatus = (1 << 0),
295
296 cp_norx_intr_mask = PciErr | LinkChg | TxOK | TxErr | TxEmpty,
297 cp_rx_intr_mask = RxOK | RxErr | RxEmpty | RxFIFOOvr,
298 cp_intr_mask = cp_rx_intr_mask | cp_norx_intr_mask,
299};
300
301static const unsigned int cp_rx_config =
302 (RX_FIFO_THRESH << RxCfgFIFOShift) |
303 (RX_DMA_BURST << RxCfgDMAShift);
304
305struct cp_desc {
306 __le32 opts1;
307 __le32 opts2;
308 __le64 addr;
309};
310
311struct cp_dma_stats {
312 __le64 tx_ok;
313 __le64 rx_ok;
314 __le64 tx_err;
315 __le32 rx_err;
316 __le16 rx_fifo;
317 __le16 frame_align;
318 __le32 tx_ok_1col;
319 __le32 tx_ok_mcol;
320 __le64 rx_ok_phys;
321 __le64 rx_ok_bcast;
322 __le32 rx_ok_mcast;
323 __le16 tx_abort;
324 __le16 tx_underrun;
325} __attribute__((packed));
326
327struct cp_extra_stats {
328 unsigned long rx_frags;
329};
330
331struct cp_private {
332 void __iomem *regs;
333 struct net_device *dev;
334 spinlock_t lock;
335 u32 msg_enable;
336
337 struct napi_struct napi;
338
339 struct pci_dev *pdev;
340 u32 rx_config;
341 u16 cpcmd;
342
343 struct net_device_stats net_stats;
344 struct cp_extra_stats cp_stats;
345
346 unsigned rx_head ____cacheline_aligned;
347 unsigned rx_tail;
348 struct cp_desc *rx_ring;
349 struct sk_buff *rx_skb[CP_RX_RING_SIZE];
350
351 unsigned tx_head ____cacheline_aligned;
352 unsigned tx_tail;
353 struct cp_desc *tx_ring;
354 struct sk_buff *tx_skb[CP_TX_RING_SIZE];
355
356 unsigned rx_buf_sz;
357 unsigned wol_enabled : 1;
358
359#if CP_VLAN_TAG_USED
360 struct vlan_group *vlgrp;
361#endif
362 dma_addr_t ring_dma;
363
364 struct mii_if_info mii_if;
365};
366
367#define cpr8(reg) readb(cp->regs + (reg))
368#define cpr16(reg) readw(cp->regs + (reg))
369#define cpr32(reg) readl(cp->regs + (reg))
370#define cpw8(reg,val) writeb((val), cp->regs + (reg))
371#define cpw16(reg,val) writew((val), cp->regs + (reg))
372#define cpw32(reg,val) writel((val), cp->regs + (reg))
373#define cpw8_f(reg,val) do { \
374 writeb((val), cp->regs + (reg)); \
375 readb(cp->regs + (reg)); \
376 } while (0)
377#define cpw16_f(reg,val) do { \
378 writew((val), cp->regs + (reg)); \
379 readw(cp->regs + (reg)); \
380 } while (0)
381#define cpw32_f(reg,val) do { \
382 writel((val), cp->regs + (reg)); \
383 readl(cp->regs + (reg)); \
384 } while (0)
385
386
387static void __cp_set_rx_mode (struct net_device *dev);
388static void cp_tx (struct cp_private *cp);
389static void cp_clean_rings (struct cp_private *cp);
390#ifdef CONFIG_NET_POLL_CONTROLLER
391static void cp_poll_controller(struct net_device *dev);
392#endif
393static int cp_get_eeprom_len(struct net_device *dev);
394static int cp_get_eeprom(struct net_device *dev,
395 struct ethtool_eeprom *eeprom, u8 *data);
396static int cp_set_eeprom(struct net_device *dev,
397 struct ethtool_eeprom *eeprom, u8 *data);
398
399static struct pci_device_id cp_pci_tbl[] = {
400 { PCI_DEVICE(PCI_VENDOR_ID_REALTEK, PCI_DEVICE_ID_REALTEK_8139), },
401 { PCI_DEVICE(PCI_VENDOR_ID_TTTECH, PCI_DEVICE_ID_TTTECH_MC322), },
402 { },
403};
404MODULE_DEVICE_TABLE(pci, cp_pci_tbl);
405
406static struct {
407 const char str[ETH_GSTRING_LEN];
408} ethtool_stats_keys[] = {
409 { "tx_ok" },
410 { "rx_ok" },
411 { "tx_err" },
412 { "rx_err" },
413 { "rx_fifo" },
414 { "frame_align" },
415 { "tx_ok_1col" },
416 { "tx_ok_mcol" },
417 { "rx_ok_phys" },
418 { "rx_ok_bcast" },
419 { "rx_ok_mcast" },
420 { "tx_abort" },
421 { "tx_underrun" },
422 { "rx_frags" },
423};
424
425
426#if CP_VLAN_TAG_USED
427static void cp_vlan_rx_register(struct net_device *dev, struct vlan_group *grp)
428{
429 struct cp_private *cp = netdev_priv(dev);
430 unsigned long flags;
431
432 spin_lock_irqsave(&cp->lock, flags);
433 cp->vlgrp = grp;
434 if (grp)
435 cp->cpcmd |= RxVlanOn;
436 else
437 cp->cpcmd &= ~RxVlanOn;
438
439 cpw16(CpCmd, cp->cpcmd);
440 spin_unlock_irqrestore(&cp->lock, flags);
441}
442#endif
443
444static inline void cp_set_rxbufsize (struct cp_private *cp)
445{
446 unsigned int mtu = cp->dev->mtu;
447
448 if (mtu > ETH_DATA_LEN)
449
450 cp->rx_buf_sz = mtu + ETH_HLEN + 8;
451 else
452 cp->rx_buf_sz = PKT_BUF_SZ;
453}
454
455static inline void cp_rx_skb (struct cp_private *cp, struct sk_buff *skb,
456 struct cp_desc *desc)
457{
458 skb->protocol = eth_type_trans (skb, cp->dev);
459
460 cp->net_stats.rx_packets++;
461 cp->net_stats.rx_bytes += skb->len;
462 cp->dev->last_rx = jiffies;
463
464#if CP_VLAN_TAG_USED
465 if (cp->vlgrp && (desc->opts2 & cpu_to_le32(RxVlanTagged))) {
466 vlan_hwaccel_receive_skb(skb, cp->vlgrp,
467 swab16(le32_to_cpu(desc->opts2) & 0xffff));
468 } else
469#endif
470 netif_receive_skb(skb);
471}
472
473static void cp_rx_err_acct (struct cp_private *cp, unsigned rx_tail,
474 u32 status, u32 len)
475{
476 if (netif_msg_rx_err (cp))
477 printk (KERN_DEBUG
478 "%s: rx err, slot %d status 0x%x len %d\n",
479 cp->dev->name, rx_tail, status, len);
480 cp->net_stats.rx_errors++;
481 if (status & RxErrFrame)
482 cp->net_stats.rx_frame_errors++;
483 if (status & RxErrCRC)
484 cp->net_stats.rx_crc_errors++;
485 if ((status & RxErrRunt) || (status & RxErrLong))
486 cp->net_stats.rx_length_errors++;
487 if ((status & (FirstFrag | LastFrag)) != (FirstFrag | LastFrag))
488 cp->net_stats.rx_length_errors++;
489 if (status & RxErrFIFO)
490 cp->net_stats.rx_fifo_errors++;
491}
492
493static inline unsigned int cp_rx_csum_ok (u32 status)
494{
495 unsigned int protocol = (status >> 16) & 0x3;
496
497 if (likely((protocol == RxProtoTCP) && (!(status & TCPFail))))
498 return 1;
499 else if ((protocol == RxProtoUDP) && (!(status & UDPFail)))
500 return 1;
501 else if ((protocol == RxProtoIP) && (!(status & IPFail)))
502 return 1;
503 return 0;
504}
505
506static int cp_rx_poll(struct napi_struct *napi, int budget)
507{
508 struct cp_private *cp = container_of(napi, struct cp_private, napi);
509 struct net_device *dev = cp->dev;
510 unsigned int rx_tail = cp->rx_tail;
511 int rx;
512
513rx_status_loop:
514 rx = 0;
515 cpw16(IntrStatus, cp_rx_intr_mask);
516
517 while (1) {
518 u32 status, len;
519 dma_addr_t mapping;
520 struct sk_buff *skb, *new_skb;
521 struct cp_desc *desc;
522 unsigned buflen;
523
524 skb = cp->rx_skb[rx_tail];
525 BUG_ON(!skb);
526
527 desc = &cp->rx_ring[rx_tail];
528 status = le32_to_cpu(desc->opts1);
529 if (status & DescOwn)
530 break;
531
532 len = (status & 0x1fff) - 4;
533 mapping = le64_to_cpu(desc->addr);
534
535 if ((status & (FirstFrag | LastFrag)) != (FirstFrag | LastFrag)) {
536
537
538
539
540
541 cp_rx_err_acct(cp, rx_tail, status, len);
542 cp->net_stats.rx_dropped++;
543 cp->cp_stats.rx_frags++;
544 goto rx_next;
545 }
546
547 if (status & (RxError | RxErrFIFO)) {
548 cp_rx_err_acct(cp, rx_tail, status, len);
549 goto rx_next;
550 }
551
552 if (netif_msg_rx_status(cp))
553 printk(KERN_DEBUG "%s: rx slot %d status 0x%x len %d\n",
554 dev->name, rx_tail, status, len);
555
556 buflen = cp->rx_buf_sz + RX_OFFSET;
557 new_skb = dev_alloc_skb (buflen);
558 if (!new_skb) {
559 cp->net_stats.rx_dropped++;
560 goto rx_next;
561 }
562
563 skb_reserve(new_skb, RX_OFFSET);
564
565 dma_unmap_single(&cp->pdev->dev, mapping,
566 buflen, PCI_DMA_FROMDEVICE);
567
568
569 if (cp_rx_csum_ok(status))
570 skb->ip_summed = CHECKSUM_UNNECESSARY;
571 else
572 skb->ip_summed = CHECKSUM_NONE;
573
574 skb_put(skb, len);
575
576 mapping = dma_map_single(&cp->pdev->dev, new_skb->data, buflen,
577 PCI_DMA_FROMDEVICE);
578 cp->rx_skb[rx_tail] = new_skb;
579
580 cp_rx_skb(cp, skb, desc);
581 rx++;
582
583rx_next:
584 cp->rx_ring[rx_tail].opts2 = 0;
585 cp->rx_ring[rx_tail].addr = cpu_to_le64(mapping);
586 if (rx_tail == (CP_RX_RING_SIZE - 1))
587 desc->opts1 = cpu_to_le32(DescOwn | RingEnd |
588 cp->rx_buf_sz);
589 else
590 desc->opts1 = cpu_to_le32(DescOwn | cp->rx_buf_sz);
591 rx_tail = NEXT_RX(rx_tail);
592
593 if (rx >= budget)
594 break;
595 }
596
597 cp->rx_tail = rx_tail;
598
599
600
601
602 if (rx < budget) {
603 unsigned long flags;
604
605 if (cpr16(IntrStatus) & cp_rx_intr_mask)
606 goto rx_status_loop;
607
608 spin_lock_irqsave(&cp->lock, flags);
609 cpw16_f(IntrMask, cp_intr_mask);
610 __netif_rx_complete(dev, napi);
611 spin_unlock_irqrestore(&cp->lock, flags);
612 }
613
614 return rx;
615}
616
617static irqreturn_t cp_interrupt (int irq, void *dev_instance)
618{
619 struct net_device *dev = dev_instance;
620 struct cp_private *cp;
621 u16 status;
622
623 if (unlikely(dev == NULL))
624 return IRQ_NONE;
625 cp = netdev_priv(dev);
626
627 status = cpr16(IntrStatus);
628 if (!status || (status == 0xFFFF))
629 return IRQ_NONE;
630
631 if (netif_msg_intr(cp))
632 printk(KERN_DEBUG "%s: intr, status %04x cmd %02x cpcmd %04x\n",
633 dev->name, status, cpr8(Cmd), cpr16(CpCmd));
634
635 cpw16(IntrStatus, status & ~cp_rx_intr_mask);
636
637 spin_lock(&cp->lock);
638
639
640 if (unlikely(!netif_running(dev))) {
641 cpw16(IntrMask, 0);
642 spin_unlock(&cp->lock);
643 return IRQ_HANDLED;
644 }
645
646 if (status & (RxOK | RxErr | RxEmpty | RxFIFOOvr))
647 if (netif_rx_schedule_prep(dev, &cp->napi)) {
648 cpw16_f(IntrMask, cp_norx_intr_mask);
649 __netif_rx_schedule(dev, &cp->napi);
650 }
651
652 if (status & (TxOK | TxErr | TxEmpty | SWInt))
653 cp_tx(cp);
654 if (status & LinkChg)
655 mii_check_media(&cp->mii_if, netif_msg_link(cp), false);
656
657 spin_unlock(&cp->lock);
658
659 if (status & PciErr) {
660 u16 pci_status;
661
662 pci_read_config_word(cp->pdev, PCI_STATUS, &pci_status);
663 pci_write_config_word(cp->pdev, PCI_STATUS, pci_status);
664 printk(KERN_ERR "%s: PCI bus error, status=%04x, PCI status=%04x\n",
665 dev->name, status, pci_status);
666
667
668 }
669
670 return IRQ_HANDLED;
671}
672
673#ifdef CONFIG_NET_POLL_CONTROLLER
674
675
676
677
678static void cp_poll_controller(struct net_device *dev)
679{
680 disable_irq(dev->irq);
681 cp_interrupt(dev->irq, dev);
682 enable_irq(dev->irq);
683}
684#endif
685
686static void cp_tx (struct cp_private *cp)
687{
688 unsigned tx_head = cp->tx_head;
689 unsigned tx_tail = cp->tx_tail;
690
691 while (tx_tail != tx_head) {
692 struct cp_desc *txd = cp->tx_ring + tx_tail;
693 struct sk_buff *skb;
694 u32 status;
695
696 rmb();
697 status = le32_to_cpu(txd->opts1);
698 if (status & DescOwn)
699 break;
700
701 skb = cp->tx_skb[tx_tail];
702 BUG_ON(!skb);
703
704 dma_unmap_single(&cp->pdev->dev, le64_to_cpu(txd->addr),
705 le32_to_cpu(txd->opts1) & 0xffff,
706 PCI_DMA_TODEVICE);
707
708 if (status & LastFrag) {
709 if (status & (TxError | TxFIFOUnder)) {
710 if (netif_msg_tx_err(cp))
711 printk(KERN_DEBUG "%s: tx err, status 0x%x\n",
712 cp->dev->name, status);
713 cp->net_stats.tx_errors++;
714 if (status & TxOWC)
715 cp->net_stats.tx_window_errors++;
716 if (status & TxMaxCol)
717 cp->net_stats.tx_aborted_errors++;
718 if (status & TxLinkFail)
719 cp->net_stats.tx_carrier_errors++;
720 if (status & TxFIFOUnder)
721 cp->net_stats.tx_fifo_errors++;
722 } else {
723 cp->net_stats.collisions +=
724 ((status >> TxColCntShift) & TxColCntMask);
725 cp->net_stats.tx_packets++;
726 cp->net_stats.tx_bytes += skb->len;
727 if (netif_msg_tx_done(cp))
728 printk(KERN_DEBUG "%s: tx done, slot %d\n", cp->dev->name, tx_tail);
729 }
730 dev_kfree_skb_irq(skb);
731 }
732
733 cp->tx_skb[tx_tail] = NULL;
734
735 tx_tail = NEXT_TX(tx_tail);
736 }
737
738 cp->tx_tail = tx_tail;
739
740 if (TX_BUFFS_AVAIL(cp) > (MAX_SKB_FRAGS + 1))
741 netif_wake_queue(cp->dev);
742}
743
744static int cp_start_xmit (struct sk_buff *skb, struct net_device *dev)
745{
746 struct cp_private *cp = netdev_priv(dev);
747 unsigned entry;
748 u32 eor, flags;
749 unsigned long intr_flags;
750#if CP_VLAN_TAG_USED
751 u32 vlan_tag = 0;
752#endif
753 int mss = 0;
754
755 spin_lock_irqsave(&cp->lock, intr_flags);
756
757
758 if (TX_BUFFS_AVAIL(cp) <= (skb_shinfo(skb)->nr_frags + 1)) {
759 netif_stop_queue(dev);
760 spin_unlock_irqrestore(&cp->lock, intr_flags);
761 printk(KERN_ERR PFX "%s: BUG! Tx Ring full when queue awake!\n",
762 dev->name);
763 return 1;
764 }
765
766#if CP_VLAN_TAG_USED
767 if (cp->vlgrp && vlan_tx_tag_present(skb))
768 vlan_tag = TxVlanTag | swab16(vlan_tx_tag_get(skb));
769#endif
770
771 entry = cp->tx_head;
772 eor = (entry == (CP_TX_RING_SIZE - 1)) ? RingEnd : 0;
773 if (dev->features & NETIF_F_TSO)
774 mss = skb_shinfo(skb)->gso_size;
775
776 if (skb_shinfo(skb)->nr_frags == 0) {
777 struct cp_desc *txd = &cp->tx_ring[entry];
778 u32 len;
779 dma_addr_t mapping;
780
781 len = skb->len;
782 mapping = dma_map_single(&cp->pdev->dev, skb->data, len, PCI_DMA_TODEVICE);
783 CP_VLAN_TX_TAG(txd, vlan_tag);
784 txd->addr = cpu_to_le64(mapping);
785 wmb();
786
787 flags = eor | len | DescOwn | FirstFrag | LastFrag;
788
789 if (mss)
790 flags |= LargeSend | ((mss & MSSMask) << MSSShift);
791 else if (skb->ip_summed == CHECKSUM_PARTIAL) {
792 const struct iphdr *ip = ip_hdr(skb);
793 if (ip->protocol == IPPROTO_TCP)
794 flags |= IPCS | TCPCS;
795 else if (ip->protocol == IPPROTO_UDP)
796 flags |= IPCS | UDPCS;
797 else
798 WARN_ON(1);
799 }
800
801 txd->opts1 = cpu_to_le32(flags);
802 wmb();
803
804 cp->tx_skb[entry] = skb;
805 entry = NEXT_TX(entry);
806 } else {
807 struct cp_desc *txd;
808 u32 first_len, first_eor;
809 dma_addr_t first_mapping;
810 int frag, first_entry = entry;
811 const struct iphdr *ip = ip_hdr(skb);
812
813
814
815
816 first_eor = eor;
817 first_len = skb_headlen(skb);
818 first_mapping = dma_map_single(&cp->pdev->dev, skb->data,
819 first_len, PCI_DMA_TODEVICE);
820 cp->tx_skb[entry] = skb;
821 entry = NEXT_TX(entry);
822
823 for (frag = 0; frag < skb_shinfo(skb)->nr_frags; frag++) {
824 skb_frag_t *this_frag = &skb_shinfo(skb)->frags[frag];
825 u32 len;
826 u32 ctrl;
827 dma_addr_t mapping;
828
829 len = this_frag->size;
830 mapping = dma_map_single(&cp->pdev->dev,
831 ((void *) page_address(this_frag->page) +
832 this_frag->page_offset),
833 len, PCI_DMA_TODEVICE);
834 eor = (entry == (CP_TX_RING_SIZE - 1)) ? RingEnd : 0;
835
836 ctrl = eor | len | DescOwn;
837
838 if (mss)
839 ctrl |= LargeSend |
840 ((mss & MSSMask) << MSSShift);
841 else if (skb->ip_summed == CHECKSUM_PARTIAL) {
842 if (ip->protocol == IPPROTO_TCP)
843 ctrl |= IPCS | TCPCS;
844 else if (ip->protocol == IPPROTO_UDP)
845 ctrl |= IPCS | UDPCS;
846 else
847 BUG();
848 }
849
850 if (frag == skb_shinfo(skb)->nr_frags - 1)
851 ctrl |= LastFrag;
852
853 txd = &cp->tx_ring[entry];
854 CP_VLAN_TX_TAG(txd, vlan_tag);
855 txd->addr = cpu_to_le64(mapping);
856 wmb();
857
858 txd->opts1 = cpu_to_le32(ctrl);
859 wmb();
860
861 cp->tx_skb[entry] = skb;
862 entry = NEXT_TX(entry);
863 }
864
865 txd = &cp->tx_ring[first_entry];
866 CP_VLAN_TX_TAG(txd, vlan_tag);
867 txd->addr = cpu_to_le64(first_mapping);
868 wmb();
869
870 if (skb->ip_summed == CHECKSUM_PARTIAL) {
871 if (ip->protocol == IPPROTO_TCP)
872 txd->opts1 = cpu_to_le32(first_eor | first_len |
873 FirstFrag | DescOwn |
874 IPCS | TCPCS);
875 else if (ip->protocol == IPPROTO_UDP)
876 txd->opts1 = cpu_to_le32(first_eor | first_len |
877 FirstFrag | DescOwn |
878 IPCS | UDPCS);
879 else
880 BUG();
881 } else
882 txd->opts1 = cpu_to_le32(first_eor | first_len |
883 FirstFrag | DescOwn);
884 wmb();
885 }
886 cp->tx_head = entry;
887 if (netif_msg_tx_queued(cp))
888 printk(KERN_DEBUG "%s: tx queued, slot %d, skblen %d\n",
889 dev->name, entry, skb->len);
890 if (TX_BUFFS_AVAIL(cp) <= (MAX_SKB_FRAGS + 1))
891 netif_stop_queue(dev);
892
893 spin_unlock_irqrestore(&cp->lock, intr_flags);
894
895 cpw8(TxPoll, NormalTxPoll);
896 dev->trans_start = jiffies;
897
898 return 0;
899}
900
901
902
903
904static void __cp_set_rx_mode (struct net_device *dev)
905{
906 struct cp_private *cp = netdev_priv(dev);
907 u32 mc_filter[2];
908 int i, rx_mode;
909 u32 tmp;
910
911
912 if (dev->flags & IFF_PROMISC) {
913
914 rx_mode =
915 AcceptBroadcast | AcceptMulticast | AcceptMyPhys |
916 AcceptAllPhys;
917 mc_filter[1] = mc_filter[0] = 0xffffffff;
918 } else if ((dev->mc_count > multicast_filter_limit)
919 || (dev->flags & IFF_ALLMULTI)) {
920
921 rx_mode = AcceptBroadcast | AcceptMulticast | AcceptMyPhys;
922 mc_filter[1] = mc_filter[0] = 0xffffffff;
923 } else {
924 struct dev_mc_list *mclist;
925 rx_mode = AcceptBroadcast | AcceptMyPhys;
926 mc_filter[1] = mc_filter[0] = 0;
927 for (i = 0, mclist = dev->mc_list; mclist && i < dev->mc_count;
928 i++, mclist = mclist->next) {
929 int bit_nr = ether_crc(ETH_ALEN, mclist->dmi_addr) >> 26;
930
931 mc_filter[bit_nr >> 5] |= 1 << (bit_nr & 31);
932 rx_mode |= AcceptMulticast;
933 }
934 }
935
936
937 tmp = cp_rx_config | rx_mode;
938 if (cp->rx_config != tmp) {
939 cpw32_f (RxConfig, tmp);
940 cp->rx_config = tmp;
941 }
942 cpw32_f (MAR0 + 0, mc_filter[0]);
943 cpw32_f (MAR0 + 4, mc_filter[1]);
944}
945
946static void cp_set_rx_mode (struct net_device *dev)
947{
948 unsigned long flags;
949 struct cp_private *cp = netdev_priv(dev);
950
951 spin_lock_irqsave (&cp->lock, flags);
952 __cp_set_rx_mode(dev);
953 spin_unlock_irqrestore (&cp->lock, flags);
954}
955
956static void __cp_get_stats(struct cp_private *cp)
957{
958
959 cp->net_stats.rx_missed_errors += (cpr32 (RxMissed) & 0xffffff);
960 cpw32 (RxMissed, 0);
961}
962
963static struct net_device_stats *cp_get_stats(struct net_device *dev)
964{
965 struct cp_private *cp = netdev_priv(dev);
966 unsigned long flags;
967
968
969 spin_lock_irqsave(&cp->lock, flags);
970 if (netif_running(dev) && netif_device_present(dev))
971 __cp_get_stats(cp);
972 spin_unlock_irqrestore(&cp->lock, flags);
973
974 return &cp->net_stats;
975}
976
977static void cp_stop_hw (struct cp_private *cp)
978{
979 cpw16(IntrStatus, ~(cpr16(IntrStatus)));
980 cpw16_f(IntrMask, 0);
981 cpw8(Cmd, 0);
982 cpw16_f(CpCmd, 0);
983 cpw16_f(IntrStatus, ~(cpr16(IntrStatus)));
984
985 cp->rx_tail = 0;
986 cp->tx_head = cp->tx_tail = 0;
987}
988
989static void cp_reset_hw (struct cp_private *cp)
990{
991 unsigned work = 1000;
992
993 cpw8(Cmd, CmdReset);
994
995 while (work--) {
996 if (!(cpr8(Cmd) & CmdReset))
997 return;
998
999 schedule_timeout_uninterruptible(10);
1000 }
1001
1002 printk(KERN_ERR "%s: hardware reset timeout\n", cp->dev->name);
1003}
1004
1005static inline void cp_start_hw (struct cp_private *cp)
1006{
1007 cpw16(CpCmd, cp->cpcmd);
1008 cpw8(Cmd, RxOn | TxOn);
1009}
1010
1011static void cp_init_hw (struct cp_private *cp)
1012{
1013 struct net_device *dev = cp->dev;
1014 dma_addr_t ring_dma;
1015
1016 cp_reset_hw(cp);
1017
1018 cpw8_f (Cfg9346, Cfg9346_Unlock);
1019
1020
1021 cpw32_f (MAC0 + 0, le32_to_cpu (*(__le32 *) (dev->dev_addr + 0)));
1022 cpw32_f (MAC0 + 4, le32_to_cpu (*(__le32 *) (dev->dev_addr + 4)));
1023
1024 cp_start_hw(cp);
1025 cpw8(TxThresh, 0x06);
1026
1027 __cp_set_rx_mode(dev);
1028 cpw32_f (TxConfig, IFG | (TX_DMA_BURST << TxDMAShift));
1029
1030 cpw8(Config1, cpr8(Config1) | DriverLoaded | PMEnable);
1031
1032 cpw8(Config3, PARMEnable);
1033 cp->wol_enabled = 0;
1034
1035 cpw8(Config5, cpr8(Config5) & PMEStatus);
1036
1037 cpw32_f(HiTxRingAddr, 0);
1038 cpw32_f(HiTxRingAddr + 4, 0);
1039
1040 ring_dma = cp->ring_dma;
1041 cpw32_f(RxRingAddr, ring_dma & 0xffffffff);
1042 cpw32_f(RxRingAddr + 4, (ring_dma >> 16) >> 16);
1043
1044 ring_dma += sizeof(struct cp_desc) * CP_RX_RING_SIZE;
1045 cpw32_f(TxRingAddr, ring_dma & 0xffffffff);
1046 cpw32_f(TxRingAddr + 4, (ring_dma >> 16) >> 16);
1047
1048 cpw16(MultiIntr, 0);
1049
1050 cpw16_f(IntrMask, cp_intr_mask);
1051
1052 cpw8_f(Cfg9346, Cfg9346_Lock);
1053}
1054
1055static int cp_refill_rx (struct cp_private *cp)
1056{
1057 unsigned i;
1058
1059 for (i = 0; i < CP_RX_RING_SIZE; i++) {
1060 struct sk_buff *skb;
1061 dma_addr_t mapping;
1062
1063 skb = dev_alloc_skb(cp->rx_buf_sz + RX_OFFSET);
1064 if (!skb)
1065 goto err_out;
1066
1067 skb_reserve(skb, RX_OFFSET);
1068
1069 mapping = dma_map_single(&cp->pdev->dev, skb->data,
1070 cp->rx_buf_sz, PCI_DMA_FROMDEVICE);
1071 cp->rx_skb[i] = skb;
1072
1073 cp->rx_ring[i].opts2 = 0;
1074 cp->rx_ring[i].addr = cpu_to_le64(mapping);
1075 if (i == (CP_RX_RING_SIZE - 1))
1076 cp->rx_ring[i].opts1 =
1077 cpu_to_le32(DescOwn | RingEnd | cp->rx_buf_sz);
1078 else
1079 cp->rx_ring[i].opts1 =
1080 cpu_to_le32(DescOwn | cp->rx_buf_sz);
1081 }
1082
1083 return 0;
1084
1085err_out:
1086 cp_clean_rings(cp);
1087 return -ENOMEM;
1088}
1089
1090static void cp_init_rings_index (struct cp_private *cp)
1091{
1092 cp->rx_tail = 0;
1093 cp->tx_head = cp->tx_tail = 0;
1094}
1095
1096static int cp_init_rings (struct cp_private *cp)
1097{
1098 memset(cp->tx_ring, 0, sizeof(struct cp_desc) * CP_TX_RING_SIZE);
1099 cp->tx_ring[CP_TX_RING_SIZE - 1].opts1 = cpu_to_le32(RingEnd);
1100
1101 cp_init_rings_index(cp);
1102
1103 return cp_refill_rx (cp);
1104}
1105
1106static int cp_alloc_rings (struct cp_private *cp)
1107{
1108 void *mem;
1109
1110 mem = dma_alloc_coherent(&cp->pdev->dev, CP_RING_BYTES,
1111 &cp->ring_dma, GFP_KERNEL);
1112 if (!mem)
1113 return -ENOMEM;
1114
1115 cp->rx_ring = mem;
1116 cp->tx_ring = &cp->rx_ring[CP_RX_RING_SIZE];
1117
1118 return cp_init_rings(cp);
1119}
1120
1121static void cp_clean_rings (struct cp_private *cp)
1122{
1123 struct cp_desc *desc;
1124 unsigned i;
1125
1126 for (i = 0; i < CP_RX_RING_SIZE; i++) {
1127 if (cp->rx_skb[i]) {
1128 desc = cp->rx_ring + i;
1129 dma_unmap_single(&cp->pdev->dev,le64_to_cpu(desc->addr),
1130 cp->rx_buf_sz, PCI_DMA_FROMDEVICE);
1131 dev_kfree_skb(cp->rx_skb[i]);
1132 }
1133 }
1134
1135 for (i = 0; i < CP_TX_RING_SIZE; i++) {
1136 if (cp->tx_skb[i]) {
1137 struct sk_buff *skb = cp->tx_skb[i];
1138
1139 desc = cp->tx_ring + i;
1140 dma_unmap_single(&cp->pdev->dev,le64_to_cpu(desc->addr),
1141 le32_to_cpu(desc->opts1) & 0xffff,
1142 PCI_DMA_TODEVICE);
1143 if (le32_to_cpu(desc->opts1) & LastFrag)
1144 dev_kfree_skb(skb);
1145 cp->net_stats.tx_dropped++;
1146 }
1147 }
1148
1149 memset(cp->rx_ring, 0, sizeof(struct cp_desc) * CP_RX_RING_SIZE);
1150 memset(cp->tx_ring, 0, sizeof(struct cp_desc) * CP_TX_RING_SIZE);
1151
1152 memset(cp->rx_skb, 0, sizeof(struct sk_buff *) * CP_RX_RING_SIZE);
1153 memset(cp->tx_skb, 0, sizeof(struct sk_buff *) * CP_TX_RING_SIZE);
1154}
1155
1156static void cp_free_rings (struct cp_private *cp)
1157{
1158 cp_clean_rings(cp);
1159 dma_free_coherent(&cp->pdev->dev, CP_RING_BYTES, cp->rx_ring,
1160 cp->ring_dma);
1161 cp->rx_ring = NULL;
1162 cp->tx_ring = NULL;
1163}
1164
1165static int cp_open (struct net_device *dev)
1166{
1167 struct cp_private *cp = netdev_priv(dev);
1168 int rc;
1169
1170 if (netif_msg_ifup(cp))
1171 printk(KERN_DEBUG "%s: enabling interface\n", dev->name);
1172
1173 rc = cp_alloc_rings(cp);
1174 if (rc)
1175 return rc;
1176
1177 napi_enable(&cp->napi);
1178
1179 cp_init_hw(cp);
1180
1181 rc = request_irq(dev->irq, cp_interrupt, IRQF_SHARED, dev->name, dev);
1182 if (rc)
1183 goto err_out_hw;
1184
1185 netif_carrier_off(dev);
1186 mii_check_media(&cp->mii_if, netif_msg_link(cp), true);
1187 netif_start_queue(dev);
1188
1189 return 0;
1190
1191err_out_hw:
1192 napi_disable(&cp->napi);
1193 cp_stop_hw(cp);
1194 cp_free_rings(cp);
1195 return rc;
1196}
1197
1198static int cp_close (struct net_device *dev)
1199{
1200 struct cp_private *cp = netdev_priv(dev);
1201 unsigned long flags;
1202
1203 napi_disable(&cp->napi);
1204
1205 if (netif_msg_ifdown(cp))
1206 printk(KERN_DEBUG "%s: disabling interface\n", dev->name);
1207
1208 spin_lock_irqsave(&cp->lock, flags);
1209
1210 netif_stop_queue(dev);
1211 netif_carrier_off(dev);
1212
1213 cp_stop_hw(cp);
1214
1215 spin_unlock_irqrestore(&cp->lock, flags);
1216
1217 synchronize_irq(dev->irq);
1218 free_irq(dev->irq, dev);
1219
1220 cp_free_rings(cp);
1221 return 0;
1222}
1223
1224static void cp_tx_timeout(struct net_device *dev)
1225{
1226 struct cp_private *cp = netdev_priv(dev);
1227 unsigned long flags;
1228 int rc;
1229
1230 printk(KERN_WARNING "%s: Transmit timeout, status %2x %4x %4x %4x\n",
1231 dev->name, cpr8(Cmd), cpr16(CpCmd),
1232 cpr16(IntrStatus), cpr16(IntrMask));
1233
1234 spin_lock_irqsave(&cp->lock, flags);
1235
1236 cp_stop_hw(cp);
1237 cp_clean_rings(cp);
1238 rc = cp_init_rings(cp);
1239 cp_start_hw(cp);
1240
1241 netif_wake_queue(dev);
1242
1243 spin_unlock_irqrestore(&cp->lock, flags);
1244
1245 return;
1246}
1247
1248#ifdef BROKEN
1249static int cp_change_mtu(struct net_device *dev, int new_mtu)
1250{
1251 struct cp_private *cp = netdev_priv(dev);
1252 int rc;
1253 unsigned long flags;
1254
1255
1256 if (new_mtu < CP_MIN_MTU || new_mtu > CP_MAX_MTU)
1257 return -EINVAL;
1258
1259
1260 if (!netif_running(dev)) {
1261 dev->mtu = new_mtu;
1262 cp_set_rxbufsize(cp);
1263 return 0;
1264 }
1265
1266 spin_lock_irqsave(&cp->lock, flags);
1267
1268 cp_stop_hw(cp);
1269 cp_clean_rings(cp);
1270
1271 dev->mtu = new_mtu;
1272 cp_set_rxbufsize(cp);
1273
1274 rc = cp_init_rings(cp);
1275 cp_start_hw(cp);
1276
1277 spin_unlock_irqrestore(&cp->lock, flags);
1278
1279 return rc;
1280}
1281#endif
1282
1283static const char mii_2_8139_map[8] = {
1284 BasicModeCtrl,
1285 BasicModeStatus,
1286 0,
1287 0,
1288 NWayAdvert,
1289 NWayLPAR,
1290 NWayExpansion,
1291 0
1292};
1293
1294static int mdio_read(struct net_device *dev, int phy_id, int location)
1295{
1296 struct cp_private *cp = netdev_priv(dev);
1297
1298 return location < 8 && mii_2_8139_map[location] ?
1299 readw(cp->regs + mii_2_8139_map[location]) : 0;
1300}
1301
1302
1303static void mdio_write(struct net_device *dev, int phy_id, int location,
1304 int value)
1305{
1306 struct cp_private *cp = netdev_priv(dev);
1307
1308 if (location == 0) {
1309 cpw8(Cfg9346, Cfg9346_Unlock);
1310 cpw16(BasicModeCtrl, value);
1311 cpw8(Cfg9346, Cfg9346_Lock);
1312 } else if (location < 8 && mii_2_8139_map[location])
1313 cpw16(mii_2_8139_map[location], value);
1314}
1315
1316
1317static int netdev_set_wol (struct cp_private *cp,
1318 const struct ethtool_wolinfo *wol)
1319{
1320 u8 options;
1321
1322 options = cpr8 (Config3) & ~(LinkUp | MagicPacket);
1323
1324 if (wol->wolopts) {
1325 if (wol->wolopts & WAKE_PHY) options |= LinkUp;
1326 if (wol->wolopts & WAKE_MAGIC) options |= MagicPacket;
1327 }
1328
1329 cpw8 (Cfg9346, Cfg9346_Unlock);
1330 cpw8 (Config3, options);
1331 cpw8 (Cfg9346, Cfg9346_Lock);
1332
1333 options = 0;
1334 options = cpr8 (Config5) & ~(UWF | MWF | BWF);
1335
1336 if (wol->wolopts) {
1337 if (wol->wolopts & WAKE_UCAST) options |= UWF;
1338 if (wol->wolopts & WAKE_BCAST) options |= BWF;
1339 if (wol->wolopts & WAKE_MCAST) options |= MWF;
1340 }
1341
1342 cpw8 (Config5, options);
1343
1344 cp->wol_enabled = (wol->wolopts) ? 1 : 0;
1345
1346 return 0;
1347}
1348
1349
1350static void netdev_get_wol (struct cp_private *cp,
1351 struct ethtool_wolinfo *wol)
1352{
1353 u8 options;
1354
1355 wol->wolopts = 0;
1356 wol->supported = WAKE_PHY | WAKE_BCAST | WAKE_MAGIC |
1357 WAKE_MCAST | WAKE_UCAST;
1358
1359 if (!cp->wol_enabled) return;
1360
1361 options = cpr8 (Config3);
1362 if (options & LinkUp) wol->wolopts |= WAKE_PHY;
1363 if (options & MagicPacket) wol->wolopts |= WAKE_MAGIC;
1364
1365 options = 0;
1366 options = cpr8 (Config5);
1367 if (options & UWF) wol->wolopts |= WAKE_UCAST;
1368 if (options & BWF) wol->wolopts |= WAKE_BCAST;
1369 if (options & MWF) wol->wolopts |= WAKE_MCAST;
1370}
1371
1372static void cp_get_drvinfo (struct net_device *dev, struct ethtool_drvinfo *info)
1373{
1374 struct cp_private *cp = netdev_priv(dev);
1375
1376 strcpy (info->driver, DRV_NAME);
1377 strcpy (info->version, DRV_VERSION);
1378 strcpy (info->bus_info, pci_name(cp->pdev));
1379}
1380
1381static int cp_get_regs_len(struct net_device *dev)
1382{
1383 return CP_REGS_SIZE;
1384}
1385
1386static int cp_get_sset_count (struct net_device *dev, int sset)
1387{
1388 switch (sset) {
1389 case ETH_SS_STATS:
1390 return CP_NUM_STATS;
1391 default:
1392 return -EOPNOTSUPP;
1393 }
1394}
1395
1396static int cp_get_settings(struct net_device *dev, struct ethtool_cmd *cmd)
1397{
1398 struct cp_private *cp = netdev_priv(dev);
1399 int rc;
1400 unsigned long flags;
1401
1402 spin_lock_irqsave(&cp->lock, flags);
1403 rc = mii_ethtool_gset(&cp->mii_if, cmd);
1404 spin_unlock_irqrestore(&cp->lock, flags);
1405
1406 return rc;
1407}
1408
1409static int cp_set_settings(struct net_device *dev, struct ethtool_cmd *cmd)
1410{
1411 struct cp_private *cp = netdev_priv(dev);
1412 int rc;
1413 unsigned long flags;
1414
1415 spin_lock_irqsave(&cp->lock, flags);
1416 rc = mii_ethtool_sset(&cp->mii_if, cmd);
1417 spin_unlock_irqrestore(&cp->lock, flags);
1418
1419 return rc;
1420}
1421
1422static int cp_nway_reset(struct net_device *dev)
1423{
1424 struct cp_private *cp = netdev_priv(dev);
1425 return mii_nway_restart(&cp->mii_if);
1426}
1427
1428static u32 cp_get_msglevel(struct net_device *dev)
1429{
1430 struct cp_private *cp = netdev_priv(dev);
1431 return cp->msg_enable;
1432}
1433
1434static void cp_set_msglevel(struct net_device *dev, u32 value)
1435{
1436 struct cp_private *cp = netdev_priv(dev);
1437 cp->msg_enable = value;
1438}
1439
1440static u32 cp_get_rx_csum(struct net_device *dev)
1441{
1442 struct cp_private *cp = netdev_priv(dev);
1443 return (cpr16(CpCmd) & RxChkSum) ? 1 : 0;
1444}
1445
1446static int cp_set_rx_csum(struct net_device *dev, u32 data)
1447{
1448 struct cp_private *cp = netdev_priv(dev);
1449 u16 cmd = cp->cpcmd, newcmd;
1450
1451 newcmd = cmd;
1452
1453 if (data)
1454 newcmd |= RxChkSum;
1455 else
1456 newcmd &= ~RxChkSum;
1457
1458 if (newcmd != cmd) {
1459 unsigned long flags;
1460
1461 spin_lock_irqsave(&cp->lock, flags);
1462 cp->cpcmd = newcmd;
1463 cpw16_f(CpCmd, newcmd);
1464 spin_unlock_irqrestore(&cp->lock, flags);
1465 }
1466
1467 return 0;
1468}
1469
1470static void cp_get_regs(struct net_device *dev, struct ethtool_regs *regs,
1471 void *p)
1472{
1473 struct cp_private *cp = netdev_priv(dev);
1474 unsigned long flags;
1475
1476 if (regs->len < CP_REGS_SIZE)
1477 return ;
1478
1479 regs->version = CP_REGS_VER;
1480
1481 spin_lock_irqsave(&cp->lock, flags);
1482 memcpy_fromio(p, cp->regs, CP_REGS_SIZE);
1483 spin_unlock_irqrestore(&cp->lock, flags);
1484}
1485
1486static void cp_get_wol (struct net_device *dev, struct ethtool_wolinfo *wol)
1487{
1488 struct cp_private *cp = netdev_priv(dev);
1489 unsigned long flags;
1490
1491 spin_lock_irqsave (&cp->lock, flags);
1492 netdev_get_wol (cp, wol);
1493 spin_unlock_irqrestore (&cp->lock, flags);
1494}
1495
1496static int cp_set_wol (struct net_device *dev, struct ethtool_wolinfo *wol)
1497{
1498 struct cp_private *cp = netdev_priv(dev);
1499 unsigned long flags;
1500 int rc;
1501
1502 spin_lock_irqsave (&cp->lock, flags);
1503 rc = netdev_set_wol (cp, wol);
1504 spin_unlock_irqrestore (&cp->lock, flags);
1505
1506 return rc;
1507}
1508
1509static void cp_get_strings (struct net_device *dev, u32 stringset, u8 *buf)
1510{
1511 switch (stringset) {
1512 case ETH_SS_STATS:
1513 memcpy(buf, ðtool_stats_keys, sizeof(ethtool_stats_keys));
1514 break;
1515 default:
1516 BUG();
1517 break;
1518 }
1519}
1520
1521static void cp_get_ethtool_stats (struct net_device *dev,
1522 struct ethtool_stats *estats, u64 *tmp_stats)
1523{
1524 struct cp_private *cp = netdev_priv(dev);
1525 struct cp_dma_stats *nic_stats;
1526 dma_addr_t dma;
1527 int i;
1528
1529 nic_stats = dma_alloc_coherent(&cp->pdev->dev, sizeof(*nic_stats),
1530 &dma, GFP_KERNEL);
1531 if (!nic_stats)
1532 return;
1533
1534
1535 cpw32(StatsAddr + 4, (u64)dma >> 32);
1536 cpw32(StatsAddr, ((u64)dma & DMA_32BIT_MASK) | DumpStats);
1537 cpr32(StatsAddr);
1538
1539 for (i = 0; i < 1000; i++) {
1540 if ((cpr32(StatsAddr) & DumpStats) == 0)
1541 break;
1542 udelay(10);
1543 }
1544 cpw32(StatsAddr, 0);
1545 cpw32(StatsAddr + 4, 0);
1546 cpr32(StatsAddr);
1547
1548 i = 0;
1549 tmp_stats[i++] = le64_to_cpu(nic_stats->tx_ok);
1550 tmp_stats[i++] = le64_to_cpu(nic_stats->rx_ok);
1551 tmp_stats[i++] = le64_to_cpu(nic_stats->tx_err);
1552 tmp_stats[i++] = le32_to_cpu(nic_stats->rx_err);
1553 tmp_stats[i++] = le16_to_cpu(nic_stats->rx_fifo);
1554 tmp_stats[i++] = le16_to_cpu(nic_stats->frame_align);
1555 tmp_stats[i++] = le32_to_cpu(nic_stats->tx_ok_1col);
1556 tmp_stats[i++] = le32_to_cpu(nic_stats->tx_ok_mcol);
1557 tmp_stats[i++] = le64_to_cpu(nic_stats->rx_ok_phys);
1558 tmp_stats[i++] = le64_to_cpu(nic_stats->rx_ok_bcast);
1559 tmp_stats[i++] = le32_to_cpu(nic_stats->rx_ok_mcast);
1560 tmp_stats[i++] = le16_to_cpu(nic_stats->tx_abort);
1561 tmp_stats[i++] = le16_to_cpu(nic_stats->tx_underrun);
1562 tmp_stats[i++] = cp->cp_stats.rx_frags;
1563 BUG_ON(i != CP_NUM_STATS);
1564
1565 dma_free_coherent(&cp->pdev->dev, sizeof(*nic_stats), nic_stats, dma);
1566}
1567
1568static const struct ethtool_ops cp_ethtool_ops = {
1569 .get_drvinfo = cp_get_drvinfo,
1570 .get_regs_len = cp_get_regs_len,
1571 .get_sset_count = cp_get_sset_count,
1572 .get_settings = cp_get_settings,
1573 .set_settings = cp_set_settings,
1574 .nway_reset = cp_nway_reset,
1575 .get_link = ethtool_op_get_link,
1576 .get_msglevel = cp_get_msglevel,
1577 .set_msglevel = cp_set_msglevel,
1578 .get_rx_csum = cp_get_rx_csum,
1579 .set_rx_csum = cp_set_rx_csum,
1580 .set_tx_csum = ethtool_op_set_tx_csum,
1581 .set_sg = ethtool_op_set_sg,
1582 .set_tso = ethtool_op_set_tso,
1583 .get_regs = cp_get_regs,
1584 .get_wol = cp_get_wol,
1585 .set_wol = cp_set_wol,
1586 .get_strings = cp_get_strings,
1587 .get_ethtool_stats = cp_get_ethtool_stats,
1588 .get_eeprom_len = cp_get_eeprom_len,
1589 .get_eeprom = cp_get_eeprom,
1590 .set_eeprom = cp_set_eeprom,
1591};
1592
1593static int cp_ioctl (struct net_device *dev, struct ifreq *rq, int cmd)
1594{
1595 struct cp_private *cp = netdev_priv(dev);
1596 int rc;
1597 unsigned long flags;
1598
1599 if (!netif_running(dev))
1600 return -EINVAL;
1601
1602 spin_lock_irqsave(&cp->lock, flags);
1603 rc = generic_mii_ioctl(&cp->mii_if, if_mii(rq), cmd, NULL);
1604 spin_unlock_irqrestore(&cp->lock, flags);
1605 return rc;
1606}
1607
1608
1609
1610
1611#define EE_SHIFT_CLK 0x04
1612#define EE_CS 0x08
1613#define EE_DATA_WRITE 0x02
1614#define EE_WRITE_0 0x00
1615#define EE_WRITE_1 0x02
1616#define EE_DATA_READ 0x01
1617#define EE_ENB (0x80 | EE_CS)
1618
1619
1620
1621
1622
1623#define eeprom_delay() readl(ee_addr)
1624
1625
1626#define EE_EXTEND_CMD (4)
1627#define EE_WRITE_CMD (5)
1628#define EE_READ_CMD (6)
1629#define EE_ERASE_CMD (7)
1630
1631#define EE_EWDS_ADDR (0)
1632#define EE_WRAL_ADDR (1)
1633#define EE_ERAL_ADDR (2)
1634#define EE_EWEN_ADDR (3)
1635
1636#define CP_EEPROM_MAGIC PCI_DEVICE_ID_REALTEK_8139
1637
1638static void eeprom_cmd_start(void __iomem *ee_addr)
1639{
1640 writeb (EE_ENB & ~EE_CS, ee_addr);
1641 writeb (EE_ENB, ee_addr);
1642 eeprom_delay ();
1643}
1644
1645static void eeprom_cmd(void __iomem *ee_addr, int cmd, int cmd_len)
1646{
1647 int i;
1648
1649
1650 for (i = cmd_len - 1; i >= 0; i--) {
1651 int dataval = (cmd & (1 << i)) ? EE_DATA_WRITE : 0;
1652 writeb (EE_ENB | dataval, ee_addr);
1653 eeprom_delay ();
1654 writeb (EE_ENB | dataval | EE_SHIFT_CLK, ee_addr);
1655 eeprom_delay ();
1656 }
1657 writeb (EE_ENB, ee_addr);
1658 eeprom_delay ();
1659}
1660
1661static void eeprom_cmd_end(void __iomem *ee_addr)
1662{
1663 writeb (~EE_CS, ee_addr);
1664 eeprom_delay ();
1665}
1666
1667static void eeprom_extend_cmd(void __iomem *ee_addr, int extend_cmd,
1668 int addr_len)
1669{
1670 int cmd = (EE_EXTEND_CMD << addr_len) | (extend_cmd << (addr_len - 2));
1671
1672 eeprom_cmd_start(ee_addr);
1673 eeprom_cmd(ee_addr, cmd, 3 + addr_len);
1674 eeprom_cmd_end(ee_addr);
1675}
1676
1677static u16 read_eeprom (void __iomem *ioaddr, int location, int addr_len)
1678{
1679 int i;
1680 u16 retval = 0;
1681 void __iomem *ee_addr = ioaddr + Cfg9346;
1682 int read_cmd = location | (EE_READ_CMD << addr_len);
1683
1684 eeprom_cmd_start(ee_addr);
1685 eeprom_cmd(ee_addr, read_cmd, 3 + addr_len);
1686
1687 for (i = 16; i > 0; i--) {
1688 writeb (EE_ENB | EE_SHIFT_CLK, ee_addr);
1689 eeprom_delay ();
1690 retval =
1691 (retval << 1) | ((readb (ee_addr) & EE_DATA_READ) ? 1 :
1692 0);
1693 writeb (EE_ENB, ee_addr);
1694 eeprom_delay ();
1695 }
1696
1697 eeprom_cmd_end(ee_addr);
1698
1699 return retval;
1700}
1701
1702static void write_eeprom(void __iomem *ioaddr, int location, u16 val,
1703 int addr_len)
1704{
1705 int i;
1706 void __iomem *ee_addr = ioaddr + Cfg9346;
1707 int write_cmd = location | (EE_WRITE_CMD << addr_len);
1708
1709 eeprom_extend_cmd(ee_addr, EE_EWEN_ADDR, addr_len);
1710
1711 eeprom_cmd_start(ee_addr);
1712 eeprom_cmd(ee_addr, write_cmd, 3 + addr_len);
1713 eeprom_cmd(ee_addr, val, 16);
1714 eeprom_cmd_end(ee_addr);
1715
1716 eeprom_cmd_start(ee_addr);
1717 for (i = 0; i < 20000; i++)
1718 if (readb(ee_addr) & EE_DATA_READ)
1719 break;
1720 eeprom_cmd_end(ee_addr);
1721
1722 eeprom_extend_cmd(ee_addr, EE_EWDS_ADDR, addr_len);
1723}
1724
1725static int cp_get_eeprom_len(struct net_device *dev)
1726{
1727 struct cp_private *cp = netdev_priv(dev);
1728 int size;
1729
1730 spin_lock_irq(&cp->lock);
1731 size = read_eeprom(cp->regs, 0, 8) == 0x8129 ? 256 : 128;
1732 spin_unlock_irq(&cp->lock);
1733
1734 return size;
1735}
1736
1737static int cp_get_eeprom(struct net_device *dev,
1738 struct ethtool_eeprom *eeprom, u8 *data)
1739{
1740 struct cp_private *cp = netdev_priv(dev);
1741 unsigned int addr_len;
1742 u16 val;
1743 u32 offset = eeprom->offset >> 1;
1744 u32 len = eeprom->len;
1745 u32 i = 0;
1746
1747 eeprom->magic = CP_EEPROM_MAGIC;
1748
1749 spin_lock_irq(&cp->lock);
1750
1751 addr_len = read_eeprom(cp->regs, 0, 8) == 0x8129 ? 8 : 6;
1752
1753 if (eeprom->offset & 1) {
1754 val = read_eeprom(cp->regs, offset, addr_len);
1755 data[i++] = (u8)(val >> 8);
1756 offset++;
1757 }
1758
1759 while (i < len - 1) {
1760 val = read_eeprom(cp->regs, offset, addr_len);
1761 data[i++] = (u8)val;
1762 data[i++] = (u8)(val >> 8);
1763 offset++;
1764 }
1765
1766 if (i < len) {
1767 val = read_eeprom(cp->regs, offset, addr_len);
1768 data[i] = (u8)val;
1769 }
1770
1771 spin_unlock_irq(&cp->lock);
1772 return 0;
1773}
1774
1775static int cp_set_eeprom(struct net_device *dev,
1776 struct ethtool_eeprom *eeprom, u8 *data)
1777{
1778 struct cp_private *cp = netdev_priv(dev);
1779 unsigned int addr_len;
1780 u16 val;
1781 u32 offset = eeprom->offset >> 1;
1782 u32 len = eeprom->len;
1783 u32 i = 0;
1784
1785 if (eeprom->magic != CP_EEPROM_MAGIC)
1786 return -EINVAL;
1787
1788 spin_lock_irq(&cp->lock);
1789
1790 addr_len = read_eeprom(cp->regs, 0, 8) == 0x8129 ? 8 : 6;
1791
1792 if (eeprom->offset & 1) {
1793 val = read_eeprom(cp->regs, offset, addr_len) & 0xff;
1794 val |= (u16)data[i++] << 8;
1795 write_eeprom(cp->regs, offset, val, addr_len);
1796 offset++;
1797 }
1798
1799 while (i < len - 1) {
1800 val = (u16)data[i++];
1801 val |= (u16)data[i++] << 8;
1802 write_eeprom(cp->regs, offset, val, addr_len);
1803 offset++;
1804 }
1805
1806 if (i < len) {
1807 val = read_eeprom(cp->regs, offset, addr_len) & 0xff00;
1808 val |= (u16)data[i];
1809 write_eeprom(cp->regs, offset, val, addr_len);
1810 }
1811
1812 spin_unlock_irq(&cp->lock);
1813 return 0;
1814}
1815
1816
1817static void cp_set_d3_state (struct cp_private *cp)
1818{
1819 pci_enable_wake (cp->pdev, 0, 1);
1820 pci_set_power_state (cp->pdev, PCI_D3hot);
1821}
1822
1823static int cp_init_one (struct pci_dev *pdev, const struct pci_device_id *ent)
1824{
1825 struct net_device *dev;
1826 struct cp_private *cp;
1827 int rc;
1828 void __iomem *regs;
1829 resource_size_t pciaddr;
1830 unsigned int addr_len, i, pci_using_dac;
1831 DECLARE_MAC_BUF(mac);
1832
1833#ifndef MODULE
1834 static int version_printed;
1835 if (version_printed++ == 0)
1836 printk("%s", version);
1837#endif
1838
1839 if (pdev->vendor == PCI_VENDOR_ID_REALTEK &&
1840 pdev->device == PCI_DEVICE_ID_REALTEK_8139 && pdev->revision < 0x20) {
1841 dev_err(&pdev->dev,
1842 "This (id %04x:%04x rev %02x) is not an 8139C+ compatible chip\n",
1843 pdev->vendor, pdev->device, pdev->revision);
1844 dev_err(&pdev->dev, "Try the \"8139too\" driver instead.\n");
1845 return -ENODEV;
1846 }
1847
1848 dev = alloc_etherdev(sizeof(struct cp_private));
1849 if (!dev)
1850 return -ENOMEM;
1851 SET_NETDEV_DEV(dev, &pdev->dev);
1852
1853 cp = netdev_priv(dev);
1854 cp->pdev = pdev;
1855 cp->dev = dev;
1856 cp->msg_enable = (debug < 0 ? CP_DEF_MSG_ENABLE : debug);
1857 spin_lock_init (&cp->lock);
1858 cp->mii_if.dev = dev;
1859 cp->mii_if.mdio_read = mdio_read;
1860 cp->mii_if.mdio_write = mdio_write;
1861 cp->mii_if.phy_id = CP_INTERNAL_PHY;
1862 cp->mii_if.phy_id_mask = 0x1f;
1863 cp->mii_if.reg_num_mask = 0x1f;
1864 cp_set_rxbufsize(cp);
1865
1866 rc = pci_enable_device(pdev);
1867 if (rc)
1868 goto err_out_free;
1869
1870 rc = pci_set_mwi(pdev);
1871 if (rc)
1872 goto err_out_disable;
1873
1874 rc = pci_request_regions(pdev, DRV_NAME);
1875 if (rc)
1876 goto err_out_mwi;
1877
1878 pciaddr = pci_resource_start(pdev, 1);
1879 if (!pciaddr) {
1880 rc = -EIO;
1881 dev_err(&pdev->dev, "no MMIO resource\n");
1882 goto err_out_res;
1883 }
1884 if (pci_resource_len(pdev, 1) < CP_REGS_SIZE) {
1885 rc = -EIO;
1886 dev_err(&pdev->dev, "MMIO resource (%llx) too small\n",
1887 (unsigned long long)pci_resource_len(pdev, 1));
1888 goto err_out_res;
1889 }
1890
1891
1892 if ((sizeof(dma_addr_t) > 4) &&
1893 !pci_set_consistent_dma_mask(pdev, DMA_64BIT_MASK) &&
1894 !pci_set_dma_mask(pdev, DMA_64BIT_MASK)) {
1895 pci_using_dac = 1;
1896 } else {
1897 pci_using_dac = 0;
1898
1899 rc = pci_set_dma_mask(pdev, DMA_32BIT_MASK);
1900 if (rc) {
1901 dev_err(&pdev->dev,
1902 "No usable DMA configuration, aborting.\n");
1903 goto err_out_res;
1904 }
1905 rc = pci_set_consistent_dma_mask(pdev, DMA_32BIT_MASK);
1906 if (rc) {
1907 dev_err(&pdev->dev,
1908 "No usable consistent DMA configuration, "
1909 "aborting.\n");
1910 goto err_out_res;
1911 }
1912 }
1913
1914 cp->cpcmd = (pci_using_dac ? PCIDAC : 0) |
1915 PCIMulRW | RxChkSum | CpRxOn | CpTxOn;
1916
1917 regs = ioremap(pciaddr, CP_REGS_SIZE);
1918 if (!regs) {
1919 rc = -EIO;
1920 dev_err(&pdev->dev, "Cannot map PCI MMIO (%Lx@%Lx)\n",
1921 (unsigned long long)pci_resource_len(pdev, 1),
1922 (unsigned long long)pciaddr);
1923 goto err_out_res;
1924 }
1925 dev->base_addr = (unsigned long) regs;
1926 cp->regs = regs;
1927
1928 cp_stop_hw(cp);
1929
1930
1931 addr_len = read_eeprom (regs, 0, 8) == 0x8129 ? 8 : 6;
1932 for (i = 0; i < 3; i++)
1933 ((__le16 *) (dev->dev_addr))[i] =
1934 cpu_to_le16(read_eeprom (regs, i + 7, addr_len));
1935 memcpy(dev->perm_addr, dev->dev_addr, dev->addr_len);
1936
1937 dev->open = cp_open;
1938 dev->stop = cp_close;
1939 dev->set_multicast_list = cp_set_rx_mode;
1940 dev->hard_start_xmit = cp_start_xmit;
1941 dev->get_stats = cp_get_stats;
1942 dev->do_ioctl = cp_ioctl;
1943#ifdef CONFIG_NET_POLL_CONTROLLER
1944 dev->poll_controller = cp_poll_controller;
1945#endif
1946 netif_napi_add(dev, &cp->napi, cp_rx_poll, 16);
1947#ifdef BROKEN
1948 dev->change_mtu = cp_change_mtu;
1949#endif
1950 dev->ethtool_ops = &cp_ethtool_ops;
1951 dev->tx_timeout = cp_tx_timeout;
1952 dev->watchdog_timeo = TX_TIMEOUT;
1953
1954#if CP_VLAN_TAG_USED
1955 dev->features |= NETIF_F_HW_VLAN_TX | NETIF_F_HW_VLAN_RX;
1956 dev->vlan_rx_register = cp_vlan_rx_register;
1957#endif
1958
1959 if (pci_using_dac)
1960 dev->features |= NETIF_F_HIGHDMA;
1961
1962#if 0
1963 dev->features |= NETIF_F_TSO;
1964#endif
1965
1966 dev->irq = pdev->irq;
1967
1968 rc = register_netdev(dev);
1969 if (rc)
1970 goto err_out_iomap;
1971
1972 printk (KERN_INFO "%s: RTL-8139C+ at 0x%lx, "
1973 "%s, IRQ %d\n",
1974 dev->name,
1975 dev->base_addr,
1976 print_mac(mac, dev->dev_addr),
1977 dev->irq);
1978
1979 pci_set_drvdata(pdev, dev);
1980
1981
1982 pci_set_master(pdev);
1983
1984 if (cp->wol_enabled)
1985 cp_set_d3_state (cp);
1986
1987 return 0;
1988
1989err_out_iomap:
1990 iounmap(regs);
1991err_out_res:
1992 pci_release_regions(pdev);
1993err_out_mwi:
1994 pci_clear_mwi(pdev);
1995err_out_disable:
1996 pci_disable_device(pdev);
1997err_out_free:
1998 free_netdev(dev);
1999 return rc;
2000}
2001
2002static void cp_remove_one (struct pci_dev *pdev)
2003{
2004 struct net_device *dev = pci_get_drvdata(pdev);
2005 struct cp_private *cp = netdev_priv(dev);
2006
2007 unregister_netdev(dev);
2008 iounmap(cp->regs);
2009 if (cp->wol_enabled)
2010 pci_set_power_state (pdev, PCI_D0);
2011 pci_release_regions(pdev);
2012 pci_clear_mwi(pdev);
2013 pci_disable_device(pdev);
2014 pci_set_drvdata(pdev, NULL);
2015 free_netdev(dev);
2016}
2017
2018#ifdef CONFIG_PM
2019static int cp_suspend (struct pci_dev *pdev, pm_message_t state)
2020{
2021 struct net_device *dev = pci_get_drvdata(pdev);
2022 struct cp_private *cp = netdev_priv(dev);
2023 unsigned long flags;
2024
2025 if (!netif_running(dev))
2026 return 0;
2027
2028 netif_device_detach (dev);
2029 netif_stop_queue (dev);
2030
2031 spin_lock_irqsave (&cp->lock, flags);
2032
2033
2034 cpw16 (IntrMask, 0);
2035 cpw8 (Cmd, cpr8 (Cmd) & (~RxOn | ~TxOn));
2036
2037 spin_unlock_irqrestore (&cp->lock, flags);
2038
2039 pci_save_state(pdev);
2040 pci_enable_wake(pdev, pci_choose_state(pdev, state), cp->wol_enabled);
2041 pci_set_power_state(pdev, pci_choose_state(pdev, state));
2042
2043 return 0;
2044}
2045
2046static int cp_resume (struct pci_dev *pdev)
2047{
2048 struct net_device *dev = pci_get_drvdata (pdev);
2049 struct cp_private *cp = netdev_priv(dev);
2050 unsigned long flags;
2051
2052 if (!netif_running(dev))
2053 return 0;
2054
2055 netif_device_attach (dev);
2056
2057 pci_set_power_state(pdev, PCI_D0);
2058 pci_restore_state(pdev);
2059 pci_enable_wake(pdev, PCI_D0, 0);
2060
2061
2062 cp_init_rings_index (cp);
2063 cp_init_hw (cp);
2064 netif_start_queue (dev);
2065
2066 spin_lock_irqsave (&cp->lock, flags);
2067
2068 mii_check_media(&cp->mii_if, netif_msg_link(cp), false);
2069
2070 spin_unlock_irqrestore (&cp->lock, flags);
2071
2072 return 0;
2073}
2074#endif
2075
2076static struct pci_driver cp_driver = {
2077 .name = DRV_NAME,
2078 .id_table = cp_pci_tbl,
2079 .probe = cp_init_one,
2080 .remove = cp_remove_one,
2081#ifdef CONFIG_PM
2082 .resume = cp_resume,
2083 .suspend = cp_suspend,
2084#endif
2085};
2086
2087static int __init cp_init (void)
2088{
2089#ifdef MODULE
2090 printk("%s", version);
2091#endif
2092 return pci_register_driver(&cp_driver);
2093}
2094
2095static void __exit cp_exit (void)
2096{
2097 pci_unregister_driver (&cp_driver);
2098}
2099
2100module_init(cp_init);
2101module_exit(cp_exit);
2102