Pull virt-cpu-accounting into release branch
[pandora-kernel.git] / drivers / net / ibm_newemac / core.c
1 /*
2  * drivers/net/ibm_newemac/core.c
3  *
4  * Driver for PowerPC 4xx on-chip ethernet controller.
5  *
6  * Copyright 2007 Benjamin Herrenschmidt, IBM Corp.
7  *                <benh@kernel.crashing.org>
8  *
9  * Based on the arch/ppc version of the driver:
10  *
11  * Copyright (c) 2004, 2005 Zultys Technologies.
12  * Eugene Surovegin <eugene.surovegin@zultys.com> or <ebs@ebshome.net>
13  *
14  * Based on original work by
15  *      Matt Porter <mporter@kernel.crashing.org>
16  *      (c) 2003 Benjamin Herrenschmidt <benh@kernel.crashing.org>
17  *      Armin Kuster <akuster@mvista.com>
18  *      Johnnie Peters <jpeters@mvista.com>
19  *
20  * This program is free software; you can redistribute  it and/or modify it
21  * under  the terms of  the GNU General  Public License as published by the
22  * Free Software Foundation;  either version 2 of the  License, or (at your
23  * option) any later version.
24  *
25  */
26
27 #include <linux/sched.h>
28 #include <linux/string.h>
29 #include <linux/errno.h>
30 #include <linux/delay.h>
31 #include <linux/types.h>
32 #include <linux/pci.h>
33 #include <linux/etherdevice.h>
34 #include <linux/skbuff.h>
35 #include <linux/crc32.h>
36 #include <linux/ethtool.h>
37 #include <linux/mii.h>
38 #include <linux/bitops.h>
39 #include <linux/workqueue.h>
40 #include <linux/of.h>
41
42 #include <asm/processor.h>
43 #include <asm/io.h>
44 #include <asm/dma.h>
45 #include <asm/uaccess.h>
46
47 #include "core.h"
48
49 /*
50  * Lack of dma_unmap_???? calls is intentional.
51  *
52  * API-correct usage requires additional support state information to be
53  * maintained for every RX and TX buffer descriptor (BD). Unfortunately, due to
54  * EMAC design (e.g. TX buffer passed from network stack can be split into
55  * several BDs, dma_map_single/dma_map_page can be used to map particular BD),
56  * maintaining such information will add additional overhead.
57  * Current DMA API implementation for 4xx processors only ensures cache coherency
58  * and dma_unmap_???? routines are empty and are likely to stay this way.
59  * I decided to omit dma_unmap_??? calls because I don't want to add additional
60  * complexity just for the sake of following some abstract API, when it doesn't
61  * add any real benefit to the driver. I understand that this decision maybe
62  * controversial, but I really tried to make code API-correct and efficient
63  * at the same time and didn't come up with code I liked :(.                --ebs
64  */
65
66 #define DRV_NAME        "emac"
67 #define DRV_VERSION     "3.54"
68 #define DRV_DESC        "PPC 4xx OCP EMAC driver"
69
70 MODULE_DESCRIPTION(DRV_DESC);
71 MODULE_AUTHOR
72     ("Eugene Surovegin <eugene.surovegin@zultys.com> or <ebs@ebshome.net>");
73 MODULE_LICENSE("GPL");
74
75 /*
76  * PPC64 doesn't (yet) have a cacheable_memcpy
77  */
78 #ifdef CONFIG_PPC64
79 #define cacheable_memcpy(d,s,n) memcpy((d),(s),(n))
80 #endif
81
82 /* minimum number of free TX descriptors required to wake up TX process */
83 #define EMAC_TX_WAKEUP_THRESH           (NUM_TX_BUFF / 4)
84
85 /* If packet size is less than this number, we allocate small skb and copy packet
86  * contents into it instead of just sending original big skb up
87  */
88 #define EMAC_RX_COPY_THRESH             CONFIG_IBM_NEW_EMAC_RX_COPY_THRESHOLD
89
90 /* Since multiple EMACs share MDIO lines in various ways, we need
91  * to avoid re-using the same PHY ID in cases where the arch didn't
92  * setup precise phy_map entries
93  *
94  * XXX This is something that needs to be reworked as we can have multiple
95  * EMAC "sets" (multiple ASICs containing several EMACs) though we can
96  * probably require in that case to have explicit PHY IDs in the device-tree
97  */
98 static u32 busy_phy_map;
99 static DEFINE_MUTEX(emac_phy_map_lock);
100
101 /* This is the wait queue used to wait on any event related to probe, that
102  * is discovery of MALs, other EMACs, ZMII/RGMIIs, etc...
103  */
104 static DECLARE_WAIT_QUEUE_HEAD(emac_probe_wait);
105
106 /* Having stable interface names is a doomed idea. However, it would be nice
107  * if we didn't have completely random interface names at boot too :-) It's
108  * just a matter of making everybody's life easier. Since we are doing
109  * threaded probing, it's a bit harder though. The base idea here is that
110  * we make up a list of all emacs in the device-tree before we register the
111  * driver. Every emac will then wait for the previous one in the list to
112  * initialize before itself. We should also keep that list ordered by
113  * cell_index.
114  * That list is only 4 entries long, meaning that additional EMACs don't
115  * get ordering guarantees unless EMAC_BOOT_LIST_SIZE is increased.
116  */
117
118 #define EMAC_BOOT_LIST_SIZE     4
119 static struct device_node *emac_boot_list[EMAC_BOOT_LIST_SIZE];
120
121 /* How long should I wait for dependent devices ? */
122 #define EMAC_PROBE_DEP_TIMEOUT  (HZ * 5)
123
124 /* I don't want to litter system log with timeout errors
125  * when we have brain-damaged PHY.
126  */
127 static inline void emac_report_timeout_error(struct emac_instance *dev,
128                                              const char *error)
129 {
130         if (net_ratelimit())
131                 printk(KERN_ERR "%s: %s\n", dev->ndev->name, error);
132 }
133
134 /* PHY polling intervals */
135 #define PHY_POLL_LINK_ON        HZ
136 #define PHY_POLL_LINK_OFF       (HZ / 5)
137
138 /* Graceful stop timeouts in us.
139  * We should allow up to 1 frame time (full-duplex, ignoring collisions)
140  */
141 #define STOP_TIMEOUT_10         1230
142 #define STOP_TIMEOUT_100        124
143 #define STOP_TIMEOUT_1000       13
144 #define STOP_TIMEOUT_1000_JUMBO 73
145
146 static unsigned char default_mcast_addr[] = {
147         0x01, 0x80, 0xC2, 0x00, 0x00, 0x01
148 };
149
150 /* Please, keep in sync with struct ibm_emac_stats/ibm_emac_error_stats */
151 static const char emac_stats_keys[EMAC_ETHTOOL_STATS_COUNT][ETH_GSTRING_LEN] = {
152         "rx_packets", "rx_bytes", "tx_packets", "tx_bytes", "rx_packets_csum",
153         "tx_packets_csum", "tx_undo", "rx_dropped_stack", "rx_dropped_oom",
154         "rx_dropped_error", "rx_dropped_resize", "rx_dropped_mtu",
155         "rx_stopped", "rx_bd_errors", "rx_bd_overrun", "rx_bd_bad_packet",
156         "rx_bd_runt_packet", "rx_bd_short_event", "rx_bd_alignment_error",
157         "rx_bd_bad_fcs", "rx_bd_packet_too_long", "rx_bd_out_of_range",
158         "rx_bd_in_range", "rx_parity", "rx_fifo_overrun", "rx_overrun",
159         "rx_bad_packet", "rx_runt_packet", "rx_short_event",
160         "rx_alignment_error", "rx_bad_fcs", "rx_packet_too_long",
161         "rx_out_of_range", "rx_in_range", "tx_dropped", "tx_bd_errors",
162         "tx_bd_bad_fcs", "tx_bd_carrier_loss", "tx_bd_excessive_deferral",
163         "tx_bd_excessive_collisions", "tx_bd_late_collision",
164         "tx_bd_multple_collisions", "tx_bd_single_collision",
165         "tx_bd_underrun", "tx_bd_sqe", "tx_parity", "tx_underrun", "tx_sqe",
166         "tx_errors"
167 };
168
169 static irqreturn_t emac_irq(int irq, void *dev_instance);
170 static void emac_clean_tx_ring(struct emac_instance *dev);
171 static void __emac_set_multicast_list(struct emac_instance *dev);
172
173 static inline int emac_phy_supports_gige(int phy_mode)
174 {
175         return  phy_mode == PHY_MODE_GMII ||
176                 phy_mode == PHY_MODE_RGMII ||
177                 phy_mode == PHY_MODE_TBI ||
178                 phy_mode == PHY_MODE_RTBI;
179 }
180
181 static inline int emac_phy_gpcs(int phy_mode)
182 {
183         return  phy_mode == PHY_MODE_TBI ||
184                 phy_mode == PHY_MODE_RTBI;
185 }
186
187 static inline void emac_tx_enable(struct emac_instance *dev)
188 {
189         struct emac_regs __iomem *p = dev->emacp;
190         u32 r;
191
192         DBG(dev, "tx_enable" NL);
193
194         r = in_be32(&p->mr0);
195         if (!(r & EMAC_MR0_TXE))
196                 out_be32(&p->mr0, r | EMAC_MR0_TXE);
197 }
198
199 static void emac_tx_disable(struct emac_instance *dev)
200 {
201         struct emac_regs __iomem *p = dev->emacp;
202         u32 r;
203
204         DBG(dev, "tx_disable" NL);
205
206         r = in_be32(&p->mr0);
207         if (r & EMAC_MR0_TXE) {
208                 int n = dev->stop_timeout;
209                 out_be32(&p->mr0, r & ~EMAC_MR0_TXE);
210                 while (!(in_be32(&p->mr0) & EMAC_MR0_TXI) && n) {
211                         udelay(1);
212                         --n;
213                 }
214                 if (unlikely(!n))
215                         emac_report_timeout_error(dev, "TX disable timeout");
216         }
217 }
218
219 static void emac_rx_enable(struct emac_instance *dev)
220 {
221         struct emac_regs __iomem *p = dev->emacp;
222         u32 r;
223
224         if (unlikely(test_bit(MAL_COMMAC_RX_STOPPED, &dev->commac.flags)))
225                 goto out;
226
227         DBG(dev, "rx_enable" NL);
228
229         r = in_be32(&p->mr0);
230         if (!(r & EMAC_MR0_RXE)) {
231                 if (unlikely(!(r & EMAC_MR0_RXI))) {
232                         /* Wait if previous async disable is still in progress */
233                         int n = dev->stop_timeout;
234                         while (!(r = in_be32(&p->mr0) & EMAC_MR0_RXI) && n) {
235                                 udelay(1);
236                                 --n;
237                         }
238                         if (unlikely(!n))
239                                 emac_report_timeout_error(dev,
240                                                           "RX disable timeout");
241                 }
242                 out_be32(&p->mr0, r | EMAC_MR0_RXE);
243         }
244  out:
245         ;
246 }
247
248 static void emac_rx_disable(struct emac_instance *dev)
249 {
250         struct emac_regs __iomem *p = dev->emacp;
251         u32 r;
252
253         DBG(dev, "rx_disable" NL);
254
255         r = in_be32(&p->mr0);
256         if (r & EMAC_MR0_RXE) {
257                 int n = dev->stop_timeout;
258                 out_be32(&p->mr0, r & ~EMAC_MR0_RXE);
259                 while (!(in_be32(&p->mr0) & EMAC_MR0_RXI) && n) {
260                         udelay(1);
261                         --n;
262                 }
263                 if (unlikely(!n))
264                         emac_report_timeout_error(dev, "RX disable timeout");
265         }
266 }
267
268 static inline void emac_netif_stop(struct emac_instance *dev)
269 {
270         netif_tx_lock_bh(dev->ndev);
271         dev->no_mcast = 1;
272         netif_tx_unlock_bh(dev->ndev);
273         dev->ndev->trans_start = jiffies;       /* prevent tx timeout */
274         mal_poll_disable(dev->mal, &dev->commac);
275         netif_tx_disable(dev->ndev);
276 }
277
278 static inline void emac_netif_start(struct emac_instance *dev)
279 {
280         netif_tx_lock_bh(dev->ndev);
281         dev->no_mcast = 0;
282         if (dev->mcast_pending && netif_running(dev->ndev))
283                 __emac_set_multicast_list(dev);
284         netif_tx_unlock_bh(dev->ndev);
285
286         netif_wake_queue(dev->ndev);
287
288         /* NOTE: unconditional netif_wake_queue is only appropriate
289          * so long as all callers are assured to have free tx slots
290          * (taken from tg3... though the case where that is wrong is
291          *  not terribly harmful)
292          */
293         mal_poll_enable(dev->mal, &dev->commac);
294 }
295
296 static inline void emac_rx_disable_async(struct emac_instance *dev)
297 {
298         struct emac_regs __iomem *p = dev->emacp;
299         u32 r;
300
301         DBG(dev, "rx_disable_async" NL);
302
303         r = in_be32(&p->mr0);
304         if (r & EMAC_MR0_RXE)
305                 out_be32(&p->mr0, r & ~EMAC_MR0_RXE);
306 }
307
308 static int emac_reset(struct emac_instance *dev)
309 {
310         struct emac_regs __iomem *p = dev->emacp;
311         int n = 20;
312
313         DBG(dev, "reset" NL);
314
315         if (!dev->reset_failed) {
316                 /* 40x erratum suggests stopping RX channel before reset,
317                  * we stop TX as well
318                  */
319                 emac_rx_disable(dev);
320                 emac_tx_disable(dev);
321         }
322
323         out_be32(&p->mr0, EMAC_MR0_SRST);
324         while ((in_be32(&p->mr0) & EMAC_MR0_SRST) && n)
325                 --n;
326
327         if (n) {
328                 dev->reset_failed = 0;
329                 return 0;
330         } else {
331                 emac_report_timeout_error(dev, "reset timeout");
332                 dev->reset_failed = 1;
333                 return -ETIMEDOUT;
334         }
335 }
336
337 static void emac_hash_mc(struct emac_instance *dev)
338 {
339         struct emac_regs __iomem *p = dev->emacp;
340         u16 gaht[4] = { 0 };
341         struct dev_mc_list *dmi;
342
343         DBG(dev, "hash_mc %d" NL, dev->ndev->mc_count);
344
345         for (dmi = dev->ndev->mc_list; dmi; dmi = dmi->next) {
346                 int bit;
347                 DBG2(dev, "mc %02x:%02x:%02x:%02x:%02x:%02x" NL,
348                      dmi->dmi_addr[0], dmi->dmi_addr[1], dmi->dmi_addr[2],
349                      dmi->dmi_addr[3], dmi->dmi_addr[4], dmi->dmi_addr[5]);
350
351                 bit = 63 - (ether_crc(ETH_ALEN, dmi->dmi_addr) >> 26);
352                 gaht[bit >> 4] |= 0x8000 >> (bit & 0x0f);
353         }
354         out_be32(&p->gaht1, gaht[0]);
355         out_be32(&p->gaht2, gaht[1]);
356         out_be32(&p->gaht3, gaht[2]);
357         out_be32(&p->gaht4, gaht[3]);
358 }
359
360 static inline u32 emac_iff2rmr(struct net_device *ndev)
361 {
362         struct emac_instance *dev = netdev_priv(ndev);
363         u32 r;
364
365         r = EMAC_RMR_SP | EMAC_RMR_SFCS | EMAC_RMR_IAE | EMAC_RMR_BAE;
366
367         if (emac_has_feature(dev, EMAC_FTR_EMAC4))
368             r |= EMAC4_RMR_BASE;
369         else
370             r |= EMAC_RMR_BASE;
371
372         if (ndev->flags & IFF_PROMISC)
373                 r |= EMAC_RMR_PME;
374         else if (ndev->flags & IFF_ALLMULTI || ndev->mc_count > 32)
375                 r |= EMAC_RMR_PMME;
376         else if (ndev->mc_count > 0)
377                 r |= EMAC_RMR_MAE;
378
379         return r;
380 }
381
382 static u32 __emac_calc_base_mr1(struct emac_instance *dev, int tx_size, int rx_size)
383 {
384         u32 ret = EMAC_MR1_VLE | EMAC_MR1_IST | EMAC_MR1_TR0_MULT;
385
386         DBG2(dev, "__emac_calc_base_mr1" NL);
387
388         switch(tx_size) {
389         case 2048:
390                 ret |= EMAC_MR1_TFS_2K;
391                 break;
392         default:
393                 printk(KERN_WARNING "%s: Unknown Rx FIFO size %d\n",
394                        dev->ndev->name, tx_size);
395         }
396
397         switch(rx_size) {
398         case 16384:
399                 ret |= EMAC_MR1_RFS_16K;
400                 break;
401         case 4096:
402                 ret |= EMAC_MR1_RFS_4K;
403                 break;
404         default:
405                 printk(KERN_WARNING "%s: Unknown Rx FIFO size %d\n",
406                        dev->ndev->name, rx_size);
407         }
408
409         return ret;
410 }
411
412 static u32 __emac4_calc_base_mr1(struct emac_instance *dev, int tx_size, int rx_size)
413 {
414         u32 ret = EMAC_MR1_VLE | EMAC_MR1_IST | EMAC4_MR1_TR |
415                 EMAC4_MR1_OBCI(dev->opb_bus_freq / 1000000);
416
417         DBG2(dev, "__emac4_calc_base_mr1" NL);
418
419         switch(tx_size) {
420         case 4096:
421                 ret |= EMAC4_MR1_TFS_4K;
422                 break;
423         case 2048:
424                 ret |= EMAC4_MR1_TFS_2K;
425                 break;
426         default:
427                 printk(KERN_WARNING "%s: Unknown Rx FIFO size %d\n",
428                        dev->ndev->name, tx_size);
429         }
430
431         switch(rx_size) {
432         case 16384:
433                 ret |= EMAC4_MR1_RFS_16K;
434                 break;
435         case 4096:
436                 ret |= EMAC4_MR1_RFS_4K;
437                 break;
438         case 2048:
439                 ret |= EMAC4_MR1_RFS_2K;
440                 break;
441         default:
442                 printk(KERN_WARNING "%s: Unknown Rx FIFO size %d\n",
443                        dev->ndev->name, rx_size);
444         }
445
446         return ret;
447 }
448
449 static u32 emac_calc_base_mr1(struct emac_instance *dev, int tx_size, int rx_size)
450 {
451         return emac_has_feature(dev, EMAC_FTR_EMAC4) ?
452                 __emac4_calc_base_mr1(dev, tx_size, rx_size) :
453                 __emac_calc_base_mr1(dev, tx_size, rx_size);
454 }
455
456 static inline u32 emac_calc_trtr(struct emac_instance *dev, unsigned int size)
457 {
458         if (emac_has_feature(dev, EMAC_FTR_EMAC4))
459                 return ((size >> 6) - 1) << EMAC_TRTR_SHIFT_EMAC4;
460         else
461                 return ((size >> 6) - 1) << EMAC_TRTR_SHIFT;
462 }
463
464 static inline u32 emac_calc_rwmr(struct emac_instance *dev,
465                                  unsigned int low, unsigned int high)
466 {
467         if (emac_has_feature(dev, EMAC_FTR_EMAC4))
468                 return (low << 22) | ( (high & 0x3ff) << 6);
469         else
470                 return (low << 23) | ( (high & 0x1ff) << 7);
471 }
472
473 static int emac_configure(struct emac_instance *dev)
474 {
475         struct emac_regs __iomem *p = dev->emacp;
476         struct net_device *ndev = dev->ndev;
477         int tx_size, rx_size, link = netif_carrier_ok(dev->ndev);
478         u32 r, mr1 = 0;
479
480         DBG(dev, "configure" NL);
481
482         if (!link) {
483                 out_be32(&p->mr1, in_be32(&p->mr1)
484                          | EMAC_MR1_FDE | EMAC_MR1_ILE);
485                 udelay(100);
486         } else if (emac_reset(dev) < 0)
487                 return -ETIMEDOUT;
488
489         if (emac_has_feature(dev, EMAC_FTR_HAS_TAH))
490                 tah_reset(dev->tah_dev);
491
492         DBG(dev, " link = %d duplex = %d, pause = %d, asym_pause = %d\n",
493             link, dev->phy.duplex, dev->phy.pause, dev->phy.asym_pause);
494
495         /* Default fifo sizes */
496         tx_size = dev->tx_fifo_size;
497         rx_size = dev->rx_fifo_size;
498
499         /* No link, force loopback */
500         if (!link)
501                 mr1 = EMAC_MR1_FDE | EMAC_MR1_ILE;
502
503         /* Check for full duplex */
504         else if (dev->phy.duplex == DUPLEX_FULL)
505                 mr1 |= EMAC_MR1_FDE | EMAC_MR1_MWSW_001;
506
507         /* Adjust fifo sizes, mr1 and timeouts based on link speed */
508         dev->stop_timeout = STOP_TIMEOUT_10;
509         switch (dev->phy.speed) {
510         case SPEED_1000:
511                 if (emac_phy_gpcs(dev->phy.mode)) {
512                         mr1 |= EMAC_MR1_MF_1000GPCS |
513                                 EMAC_MR1_MF_IPPA(dev->phy.address);
514
515                         /* Put some arbitrary OUI, Manuf & Rev IDs so we can
516                          * identify this GPCS PHY later.
517                          */
518                         out_be32(&p->ipcr, 0xdeadbeef);
519                 } else
520                         mr1 |= EMAC_MR1_MF_1000;
521
522                 /* Extended fifo sizes */
523                 tx_size = dev->tx_fifo_size_gige;
524                 rx_size = dev->rx_fifo_size_gige;
525
526                 if (dev->ndev->mtu > ETH_DATA_LEN) {
527                         mr1 |= EMAC_MR1_JPSM;
528                         dev->stop_timeout = STOP_TIMEOUT_1000_JUMBO;
529                 } else
530                         dev->stop_timeout = STOP_TIMEOUT_1000;
531                 break;
532         case SPEED_100:
533                 mr1 |= EMAC_MR1_MF_100;
534                 dev->stop_timeout = STOP_TIMEOUT_100;
535                 break;
536         default: /* make gcc happy */
537                 break;
538         }
539
540         if (emac_has_feature(dev, EMAC_FTR_HAS_RGMII))
541                 rgmii_set_speed(dev->rgmii_dev, dev->rgmii_port,
542                                 dev->phy.speed);
543         if (emac_has_feature(dev, EMAC_FTR_HAS_ZMII))
544                 zmii_set_speed(dev->zmii_dev, dev->zmii_port, dev->phy.speed);
545
546         /* on 40x erratum forces us to NOT use integrated flow control,
547          * let's hope it works on 44x ;)
548          */
549         if (!emac_has_feature(dev, EMAC_FTR_NO_FLOW_CONTROL_40x) &&
550             dev->phy.duplex == DUPLEX_FULL) {
551                 if (dev->phy.pause)
552                         mr1 |= EMAC_MR1_EIFC | EMAC_MR1_APP;
553                 else if (dev->phy.asym_pause)
554                         mr1 |= EMAC_MR1_APP;
555         }
556
557         /* Add base settings & fifo sizes & program MR1 */
558         mr1 |= emac_calc_base_mr1(dev, tx_size, rx_size);
559         out_be32(&p->mr1, mr1);
560
561         /* Set individual MAC address */
562         out_be32(&p->iahr, (ndev->dev_addr[0] << 8) | ndev->dev_addr[1]);
563         out_be32(&p->ialr, (ndev->dev_addr[2] << 24) |
564                  (ndev->dev_addr[3] << 16) | (ndev->dev_addr[4] << 8) |
565                  ndev->dev_addr[5]);
566
567         /* VLAN Tag Protocol ID */
568         out_be32(&p->vtpid, 0x8100);
569
570         /* Receive mode register */
571         r = emac_iff2rmr(ndev);
572         if (r & EMAC_RMR_MAE)
573                 emac_hash_mc(dev);
574         out_be32(&p->rmr, r);
575
576         /* FIFOs thresholds */
577         if (emac_has_feature(dev, EMAC_FTR_EMAC4))
578                 r = EMAC4_TMR1((dev->mal_burst_size / dev->fifo_entry_size) + 1,
579                                tx_size / 2 / dev->fifo_entry_size);
580         else
581                 r = EMAC_TMR1((dev->mal_burst_size / dev->fifo_entry_size) + 1,
582                               tx_size / 2 / dev->fifo_entry_size);
583         out_be32(&p->tmr1, r);
584         out_be32(&p->trtr, emac_calc_trtr(dev, tx_size / 2));
585
586         /* PAUSE frame is sent when RX FIFO reaches its high-water mark,
587            there should be still enough space in FIFO to allow the our link
588            partner time to process this frame and also time to send PAUSE
589            frame itself.
590
591            Here is the worst case scenario for the RX FIFO "headroom"
592            (from "The Switch Book") (100Mbps, without preamble, inter-frame gap):
593
594            1) One maximum-length frame on TX                    1522 bytes
595            2) One PAUSE frame time                                64 bytes
596            3) PAUSE frame decode time allowance                   64 bytes
597            4) One maximum-length frame on RX                    1522 bytes
598            5) Round-trip propagation delay of the link (100Mb)    15 bytes
599            ----------
600            3187 bytes
601
602            I chose to set high-water mark to RX_FIFO_SIZE / 4 (1024 bytes)
603            low-water mark  to RX_FIFO_SIZE / 8 (512 bytes)
604          */
605         r = emac_calc_rwmr(dev, rx_size / 8 / dev->fifo_entry_size,
606                            rx_size / 4 / dev->fifo_entry_size);
607         out_be32(&p->rwmr, r);
608
609         /* Set PAUSE timer to the maximum */
610         out_be32(&p->ptr, 0xffff);
611
612         /* IRQ sources */
613         r = EMAC_ISR_OVR | EMAC_ISR_BP | EMAC_ISR_SE |
614                 EMAC_ISR_ALE | EMAC_ISR_BFCS | EMAC_ISR_PTLE | EMAC_ISR_ORE |
615                 EMAC_ISR_IRE | EMAC_ISR_TE;
616         if (emac_has_feature(dev, EMAC_FTR_EMAC4))
617             r |= EMAC4_ISR_TXPE | EMAC4_ISR_RXPE /* | EMAC4_ISR_TXUE |
618                                                   EMAC4_ISR_RXOE | */;
619         out_be32(&p->iser,  r);
620
621         /* We need to take GPCS PHY out of isolate mode after EMAC reset */
622         if (emac_phy_gpcs(dev->phy.mode))
623                 emac_mii_reset_phy(&dev->phy);
624
625         /* Required for Pause packet support in EMAC */
626         dev_mc_add(ndev, default_mcast_addr, sizeof(default_mcast_addr), 1);
627
628         return 0;
629 }
630
631 static void emac_reinitialize(struct emac_instance *dev)
632 {
633         DBG(dev, "reinitialize" NL);
634
635         emac_netif_stop(dev);
636         if (!emac_configure(dev)) {
637                 emac_tx_enable(dev);
638                 emac_rx_enable(dev);
639         }
640         emac_netif_start(dev);
641 }
642
643 static void emac_full_tx_reset(struct emac_instance *dev)
644 {
645         DBG(dev, "full_tx_reset" NL);
646
647         emac_tx_disable(dev);
648         mal_disable_tx_channel(dev->mal, dev->mal_tx_chan);
649         emac_clean_tx_ring(dev);
650         dev->tx_cnt = dev->tx_slot = dev->ack_slot = 0;
651
652         emac_configure(dev);
653
654         mal_enable_tx_channel(dev->mal, dev->mal_tx_chan);
655         emac_tx_enable(dev);
656         emac_rx_enable(dev);
657 }
658
659 static void emac_reset_work(struct work_struct *work)
660 {
661         struct emac_instance *dev = container_of(work, struct emac_instance, reset_work);
662
663         DBG(dev, "reset_work" NL);
664
665         mutex_lock(&dev->link_lock);
666         if (dev->opened) {
667                 emac_netif_stop(dev);
668                 emac_full_tx_reset(dev);
669                 emac_netif_start(dev);
670         }
671         mutex_unlock(&dev->link_lock);
672 }
673
674 static void emac_tx_timeout(struct net_device *ndev)
675 {
676         struct emac_instance *dev = netdev_priv(ndev);
677
678         DBG(dev, "tx_timeout" NL);
679
680         schedule_work(&dev->reset_work);
681 }
682
683
684 static inline int emac_phy_done(struct emac_instance *dev, u32 stacr)
685 {
686         int done = !!(stacr & EMAC_STACR_OC);
687
688         if (emac_has_feature(dev, EMAC_FTR_STACR_OC_INVERT))
689                 done = !done;
690
691         return done;
692 };
693
694 static int __emac_mdio_read(struct emac_instance *dev, u8 id, u8 reg)
695 {
696         struct emac_regs __iomem *p = dev->emacp;
697         u32 r = 0;
698         int n, err = -ETIMEDOUT;
699
700         mutex_lock(&dev->mdio_lock);
701
702         DBG2(dev, "mdio_read(%02x,%02x)" NL, id, reg);
703
704         /* Enable proper MDIO port */
705         if (emac_has_feature(dev, EMAC_FTR_HAS_ZMII))
706                 zmii_get_mdio(dev->zmii_dev, dev->zmii_port);
707         if (emac_has_feature(dev, EMAC_FTR_HAS_RGMII))
708                 rgmii_get_mdio(dev->rgmii_dev, dev->rgmii_port);
709
710         /* Wait for management interface to become idle */
711         n = 10;
712         while (!emac_phy_done(dev, in_be32(&p->stacr))) {
713                 udelay(1);
714                 if (!--n) {
715                         DBG2(dev, " -> timeout wait idle\n");
716                         goto bail;
717                 }
718         }
719
720         /* Issue read command */
721         if (emac_has_feature(dev, EMAC_FTR_EMAC4))
722                 r = EMAC4_STACR_BASE(dev->opb_bus_freq);
723         else
724                 r = EMAC_STACR_BASE(dev->opb_bus_freq);
725         if (emac_has_feature(dev, EMAC_FTR_STACR_OC_INVERT))
726                 r |= EMAC_STACR_OC;
727         if (emac_has_feature(dev, EMAC_FTR_HAS_NEW_STACR))
728                 r |= EMACX_STACR_STAC_READ;
729         else
730                 r |= EMAC_STACR_STAC_READ;
731         r |= (reg & EMAC_STACR_PRA_MASK)
732                 | ((id & EMAC_STACR_PCDA_MASK) << EMAC_STACR_PCDA_SHIFT);
733         out_be32(&p->stacr, r);
734
735         /* Wait for read to complete */
736         n = 100;
737         while (!emac_phy_done(dev, (r = in_be32(&p->stacr)))) {
738                 udelay(1);
739                 if (!--n) {
740                         DBG2(dev, " -> timeout wait complete\n");
741                         goto bail;
742                 }
743         }
744
745         if (unlikely(r & EMAC_STACR_PHYE)) {
746                 DBG(dev, "mdio_read(%02x, %02x) failed" NL, id, reg);
747                 err = -EREMOTEIO;
748                 goto bail;
749         }
750
751         r = ((r >> EMAC_STACR_PHYD_SHIFT) & EMAC_STACR_PHYD_MASK);
752
753         DBG2(dev, "mdio_read -> %04x" NL, r);
754         err = 0;
755  bail:
756         if (emac_has_feature(dev, EMAC_FTR_HAS_RGMII))
757                 rgmii_put_mdio(dev->rgmii_dev, dev->rgmii_port);
758         if (emac_has_feature(dev, EMAC_FTR_HAS_ZMII))
759                 zmii_put_mdio(dev->zmii_dev, dev->zmii_port);
760         mutex_unlock(&dev->mdio_lock);
761
762         return err == 0 ? r : err;
763 }
764
765 static void __emac_mdio_write(struct emac_instance *dev, u8 id, u8 reg,
766                               u16 val)
767 {
768         struct emac_regs __iomem *p = dev->emacp;
769         u32 r = 0;
770         int n, err = -ETIMEDOUT;
771
772         mutex_lock(&dev->mdio_lock);
773
774         DBG2(dev, "mdio_write(%02x,%02x,%04x)" NL, id, reg, val);
775
776         /* Enable proper MDIO port */
777         if (emac_has_feature(dev, EMAC_FTR_HAS_ZMII))
778                 zmii_get_mdio(dev->zmii_dev, dev->zmii_port);
779         if (emac_has_feature(dev, EMAC_FTR_HAS_RGMII))
780                 rgmii_get_mdio(dev->rgmii_dev, dev->rgmii_port);
781
782         /* Wait for management interface to be idle */
783         n = 10;
784         while (!emac_phy_done(dev, in_be32(&p->stacr))) {
785                 udelay(1);
786                 if (!--n) {
787                         DBG2(dev, " -> timeout wait idle\n");
788                         goto bail;
789                 }
790         }
791
792         /* Issue write command */
793         if (emac_has_feature(dev, EMAC_FTR_EMAC4))
794                 r = EMAC4_STACR_BASE(dev->opb_bus_freq);
795         else
796                 r = EMAC_STACR_BASE(dev->opb_bus_freq);
797         if (emac_has_feature(dev, EMAC_FTR_STACR_OC_INVERT))
798                 r |= EMAC_STACR_OC;
799         if (emac_has_feature(dev, EMAC_FTR_HAS_NEW_STACR))
800                 r |= EMACX_STACR_STAC_WRITE;
801         else
802                 r |= EMAC_STACR_STAC_WRITE;
803         r |= (reg & EMAC_STACR_PRA_MASK) |
804                 ((id & EMAC_STACR_PCDA_MASK) << EMAC_STACR_PCDA_SHIFT) |
805                 (val << EMAC_STACR_PHYD_SHIFT);
806         out_be32(&p->stacr, r);
807
808         /* Wait for write to complete */
809         n = 100;
810         while (!emac_phy_done(dev, in_be32(&p->stacr))) {
811                 udelay(1);
812                 if (!--n) {
813                         DBG2(dev, " -> timeout wait complete\n");
814                         goto bail;
815                 }
816         }
817         err = 0;
818  bail:
819         if (emac_has_feature(dev, EMAC_FTR_HAS_RGMII))
820                 rgmii_put_mdio(dev->rgmii_dev, dev->rgmii_port);
821         if (emac_has_feature(dev, EMAC_FTR_HAS_ZMII))
822                 zmii_put_mdio(dev->zmii_dev, dev->zmii_port);
823         mutex_unlock(&dev->mdio_lock);
824 }
825
826 static int emac_mdio_read(struct net_device *ndev, int id, int reg)
827 {
828         struct emac_instance *dev = netdev_priv(ndev);
829         int res;
830
831         res = __emac_mdio_read(dev->mdio_instance ? dev->mdio_instance : dev,
832                                (u8) id, (u8) reg);
833         return res;
834 }
835
836 static void emac_mdio_write(struct net_device *ndev, int id, int reg, int val)
837 {
838         struct emac_instance *dev = netdev_priv(ndev);
839
840         __emac_mdio_write(dev->mdio_instance ? dev->mdio_instance : dev,
841                           (u8) id, (u8) reg, (u16) val);
842 }
843
844 /* Tx lock BH */
845 static void __emac_set_multicast_list(struct emac_instance *dev)
846 {
847         struct emac_regs __iomem *p = dev->emacp;
848         u32 rmr = emac_iff2rmr(dev->ndev);
849
850         DBG(dev, "__multicast %08x" NL, rmr);
851
852         /* I decided to relax register access rules here to avoid
853          * full EMAC reset.
854          *
855          * There is a real problem with EMAC4 core if we use MWSW_001 bit
856          * in MR1 register and do a full EMAC reset.
857          * One TX BD status update is delayed and, after EMAC reset, it
858          * never happens, resulting in TX hung (it'll be recovered by TX
859          * timeout handler eventually, but this is just gross).
860          * So we either have to do full TX reset or try to cheat here :)
861          *
862          * The only required change is to RX mode register, so I *think* all
863          * we need is just to stop RX channel. This seems to work on all
864          * tested SoCs.                                                --ebs
865          *
866          * If we need the full reset, we might just trigger the workqueue
867          * and do it async... a bit nasty but should work --BenH
868          */
869         dev->mcast_pending = 0;
870         emac_rx_disable(dev);
871         if (rmr & EMAC_RMR_MAE)
872                 emac_hash_mc(dev);
873         out_be32(&p->rmr, rmr);
874         emac_rx_enable(dev);
875 }
876
877 /* Tx lock BH */
878 static void emac_set_multicast_list(struct net_device *ndev)
879 {
880         struct emac_instance *dev = netdev_priv(ndev);
881
882         DBG(dev, "multicast" NL);
883
884         BUG_ON(!netif_running(dev->ndev));
885
886         if (dev->no_mcast) {
887                 dev->mcast_pending = 1;
888                 return;
889         }
890         __emac_set_multicast_list(dev);
891 }
892
893 static int emac_resize_rx_ring(struct emac_instance *dev, int new_mtu)
894 {
895         int rx_sync_size = emac_rx_sync_size(new_mtu);
896         int rx_skb_size = emac_rx_skb_size(new_mtu);
897         int i, ret = 0;
898
899         mutex_lock(&dev->link_lock);
900         emac_netif_stop(dev);
901         emac_rx_disable(dev);
902         mal_disable_rx_channel(dev->mal, dev->mal_rx_chan);
903
904         if (dev->rx_sg_skb) {
905                 ++dev->estats.rx_dropped_resize;
906                 dev_kfree_skb(dev->rx_sg_skb);
907                 dev->rx_sg_skb = NULL;
908         }
909
910         /* Make a first pass over RX ring and mark BDs ready, dropping
911          * non-processed packets on the way. We need this as a separate pass
912          * to simplify error recovery in the case of allocation failure later.
913          */
914         for (i = 0; i < NUM_RX_BUFF; ++i) {
915                 if (dev->rx_desc[i].ctrl & MAL_RX_CTRL_FIRST)
916                         ++dev->estats.rx_dropped_resize;
917
918                 dev->rx_desc[i].data_len = 0;
919                 dev->rx_desc[i].ctrl = MAL_RX_CTRL_EMPTY |
920                     (i == (NUM_RX_BUFF - 1) ? MAL_RX_CTRL_WRAP : 0);
921         }
922
923         /* Reallocate RX ring only if bigger skb buffers are required */
924         if (rx_skb_size <= dev->rx_skb_size)
925                 goto skip;
926
927         /* Second pass, allocate new skbs */
928         for (i = 0; i < NUM_RX_BUFF; ++i) {
929                 struct sk_buff *skb = alloc_skb(rx_skb_size, GFP_ATOMIC);
930                 if (!skb) {
931                         ret = -ENOMEM;
932                         goto oom;
933                 }
934
935                 BUG_ON(!dev->rx_skb[i]);
936                 dev_kfree_skb(dev->rx_skb[i]);
937
938                 skb_reserve(skb, EMAC_RX_SKB_HEADROOM + 2);
939                 dev->rx_desc[i].data_ptr =
940                     dma_map_single(&dev->ofdev->dev, skb->data - 2, rx_sync_size,
941                                    DMA_FROM_DEVICE) + 2;
942                 dev->rx_skb[i] = skb;
943         }
944  skip:
945         /* Check if we need to change "Jumbo" bit in MR1 */
946         if ((new_mtu > ETH_DATA_LEN) ^ (dev->ndev->mtu > ETH_DATA_LEN)) {
947                 /* This is to prevent starting RX channel in emac_rx_enable() */
948                 set_bit(MAL_COMMAC_RX_STOPPED, &dev->commac.flags);
949
950                 dev->ndev->mtu = new_mtu;
951                 emac_full_tx_reset(dev);
952         }
953
954         mal_set_rcbs(dev->mal, dev->mal_rx_chan, emac_rx_size(new_mtu));
955  oom:
956         /* Restart RX */
957         clear_bit(MAL_COMMAC_RX_STOPPED, &dev->commac.flags);
958         dev->rx_slot = 0;
959         mal_enable_rx_channel(dev->mal, dev->mal_rx_chan);
960         emac_rx_enable(dev);
961         emac_netif_start(dev);
962         mutex_unlock(&dev->link_lock);
963
964         return ret;
965 }
966
967 /* Process ctx, rtnl_lock semaphore */
968 static int emac_change_mtu(struct net_device *ndev, int new_mtu)
969 {
970         struct emac_instance *dev = netdev_priv(ndev);
971         int ret = 0;
972
973         if (new_mtu < EMAC_MIN_MTU || new_mtu > dev->max_mtu)
974                 return -EINVAL;
975
976         DBG(dev, "change_mtu(%d)" NL, new_mtu);
977
978         if (netif_running(ndev)) {
979                 /* Check if we really need to reinitalize RX ring */
980                 if (emac_rx_skb_size(ndev->mtu) != emac_rx_skb_size(new_mtu))
981                         ret = emac_resize_rx_ring(dev, new_mtu);
982         }
983
984         if (!ret) {
985                 ndev->mtu = new_mtu;
986                 dev->rx_skb_size = emac_rx_skb_size(new_mtu);
987                 dev->rx_sync_size = emac_rx_sync_size(new_mtu);
988         }
989
990         return ret;
991 }
992
993 static void emac_clean_tx_ring(struct emac_instance *dev)
994 {
995         int i;
996
997         for (i = 0; i < NUM_TX_BUFF; ++i) {
998                 if (dev->tx_skb[i]) {
999                         dev_kfree_skb(dev->tx_skb[i]);
1000                         dev->tx_skb[i] = NULL;
1001                         if (dev->tx_desc[i].ctrl & MAL_TX_CTRL_READY)
1002                                 ++dev->estats.tx_dropped;
1003                 }
1004                 dev->tx_desc[i].ctrl = 0;
1005                 dev->tx_desc[i].data_ptr = 0;
1006         }
1007 }
1008
1009 static void emac_clean_rx_ring(struct emac_instance *dev)
1010 {
1011         int i;
1012
1013         for (i = 0; i < NUM_RX_BUFF; ++i)
1014                 if (dev->rx_skb[i]) {
1015                         dev->rx_desc[i].ctrl = 0;
1016                         dev_kfree_skb(dev->rx_skb[i]);
1017                         dev->rx_skb[i] = NULL;
1018                         dev->rx_desc[i].data_ptr = 0;
1019                 }
1020
1021         if (dev->rx_sg_skb) {
1022                 dev_kfree_skb(dev->rx_sg_skb);
1023                 dev->rx_sg_skb = NULL;
1024         }
1025 }
1026
1027 static inline int emac_alloc_rx_skb(struct emac_instance *dev, int slot,
1028                                     gfp_t flags)
1029 {
1030         struct sk_buff *skb = alloc_skb(dev->rx_skb_size, flags);
1031         if (unlikely(!skb))
1032                 return -ENOMEM;
1033
1034         dev->rx_skb[slot] = skb;
1035         dev->rx_desc[slot].data_len = 0;
1036
1037         skb_reserve(skb, EMAC_RX_SKB_HEADROOM + 2);
1038         dev->rx_desc[slot].data_ptr =
1039             dma_map_single(&dev->ofdev->dev, skb->data - 2, dev->rx_sync_size,
1040                            DMA_FROM_DEVICE) + 2;
1041         wmb();
1042         dev->rx_desc[slot].ctrl = MAL_RX_CTRL_EMPTY |
1043             (slot == (NUM_RX_BUFF - 1) ? MAL_RX_CTRL_WRAP : 0);
1044
1045         return 0;
1046 }
1047
1048 static void emac_print_link_status(struct emac_instance *dev)
1049 {
1050         if (netif_carrier_ok(dev->ndev))
1051                 printk(KERN_INFO "%s: link is up, %d %s%s\n",
1052                        dev->ndev->name, dev->phy.speed,
1053                        dev->phy.duplex == DUPLEX_FULL ? "FDX" : "HDX",
1054                        dev->phy.pause ? ", pause enabled" :
1055                        dev->phy.asym_pause ? ", asymmetric pause enabled" : "");
1056         else
1057                 printk(KERN_INFO "%s: link is down\n", dev->ndev->name);
1058 }
1059
1060 /* Process ctx, rtnl_lock semaphore */
1061 static int emac_open(struct net_device *ndev)
1062 {
1063         struct emac_instance *dev = netdev_priv(ndev);
1064         int err, i;
1065
1066         DBG(dev, "open" NL);
1067
1068         /* Setup error IRQ handler */
1069         err = request_irq(dev->emac_irq, emac_irq, 0, "EMAC", dev);
1070         if (err) {
1071                 printk(KERN_ERR "%s: failed to request IRQ %d\n",
1072                        ndev->name, dev->emac_irq);
1073                 return err;
1074         }
1075
1076         /* Allocate RX ring */
1077         for (i = 0; i < NUM_RX_BUFF; ++i)
1078                 if (emac_alloc_rx_skb(dev, i, GFP_KERNEL)) {
1079                         printk(KERN_ERR "%s: failed to allocate RX ring\n",
1080                                ndev->name);
1081                         goto oom;
1082                 }
1083
1084         dev->tx_cnt = dev->tx_slot = dev->ack_slot = dev->rx_slot = 0;
1085         clear_bit(MAL_COMMAC_RX_STOPPED, &dev->commac.flags);
1086         dev->rx_sg_skb = NULL;
1087
1088         mutex_lock(&dev->link_lock);
1089         dev->opened = 1;
1090
1091         /* Start PHY polling now.
1092          */
1093         if (dev->phy.address >= 0) {
1094                 int link_poll_interval;
1095                 if (dev->phy.def->ops->poll_link(&dev->phy)) {
1096                         dev->phy.def->ops->read_link(&dev->phy);
1097                         netif_carrier_on(dev->ndev);
1098                         link_poll_interval = PHY_POLL_LINK_ON;
1099                 } else {
1100                         netif_carrier_off(dev->ndev);
1101                         link_poll_interval = PHY_POLL_LINK_OFF;
1102                 }
1103                 dev->link_polling = 1;
1104                 wmb();
1105                 schedule_delayed_work(&dev->link_work, link_poll_interval);
1106                 emac_print_link_status(dev);
1107         } else
1108                 netif_carrier_on(dev->ndev);
1109
1110         emac_configure(dev);
1111         mal_poll_add(dev->mal, &dev->commac);
1112         mal_enable_tx_channel(dev->mal, dev->mal_tx_chan);
1113         mal_set_rcbs(dev->mal, dev->mal_rx_chan, emac_rx_size(ndev->mtu));
1114         mal_enable_rx_channel(dev->mal, dev->mal_rx_chan);
1115         emac_tx_enable(dev);
1116         emac_rx_enable(dev);
1117         emac_netif_start(dev);
1118
1119         mutex_unlock(&dev->link_lock);
1120
1121         return 0;
1122  oom:
1123         emac_clean_rx_ring(dev);
1124         free_irq(dev->emac_irq, dev);
1125
1126         return -ENOMEM;
1127 }
1128
1129 /* BHs disabled */
1130 #if 0
1131 static int emac_link_differs(struct emac_instance *dev)
1132 {
1133         u32 r = in_be32(&dev->emacp->mr1);
1134
1135         int duplex = r & EMAC_MR1_FDE ? DUPLEX_FULL : DUPLEX_HALF;
1136         int speed, pause, asym_pause;
1137
1138         if (r & EMAC_MR1_MF_1000)
1139                 speed = SPEED_1000;
1140         else if (r & EMAC_MR1_MF_100)
1141                 speed = SPEED_100;
1142         else
1143                 speed = SPEED_10;
1144
1145         switch (r & (EMAC_MR1_EIFC | EMAC_MR1_APP)) {
1146         case (EMAC_MR1_EIFC | EMAC_MR1_APP):
1147                 pause = 1;
1148                 asym_pause = 0;
1149                 break;
1150         case EMAC_MR1_APP:
1151                 pause = 0;
1152                 asym_pause = 1;
1153                 break;
1154         default:
1155                 pause = asym_pause = 0;
1156         }
1157         return speed != dev->phy.speed || duplex != dev->phy.duplex ||
1158             pause != dev->phy.pause || asym_pause != dev->phy.asym_pause;
1159 }
1160 #endif
1161
1162 static void emac_link_timer(struct work_struct *work)
1163 {
1164         struct emac_instance *dev =
1165                 container_of((struct delayed_work *)work,
1166                              struct emac_instance, link_work);
1167         int link_poll_interval;
1168
1169         mutex_lock(&dev->link_lock);
1170         DBG2(dev, "link timer" NL);
1171
1172         if (!dev->opened)
1173                 goto bail;
1174
1175         if (dev->phy.def->ops->poll_link(&dev->phy)) {
1176                 if (!netif_carrier_ok(dev->ndev)) {
1177                         /* Get new link parameters */
1178                         dev->phy.def->ops->read_link(&dev->phy);
1179
1180                         netif_carrier_on(dev->ndev);
1181                         emac_netif_stop(dev);
1182                         emac_full_tx_reset(dev);
1183                         emac_netif_start(dev);
1184                         emac_print_link_status(dev);
1185                 }
1186                 link_poll_interval = PHY_POLL_LINK_ON;
1187         } else {
1188                 if (netif_carrier_ok(dev->ndev)) {
1189                         netif_carrier_off(dev->ndev);
1190                         netif_tx_disable(dev->ndev);
1191                         emac_reinitialize(dev);
1192                         emac_print_link_status(dev);
1193                 }
1194                 link_poll_interval = PHY_POLL_LINK_OFF;
1195         }
1196         schedule_delayed_work(&dev->link_work, link_poll_interval);
1197  bail:
1198         mutex_unlock(&dev->link_lock);
1199 }
1200
1201 static void emac_force_link_update(struct emac_instance *dev)
1202 {
1203         netif_carrier_off(dev->ndev);
1204         smp_rmb();
1205         if (dev->link_polling) {
1206                 cancel_rearming_delayed_work(&dev->link_work);
1207                 if (dev->link_polling)
1208                         schedule_delayed_work(&dev->link_work,  PHY_POLL_LINK_OFF);
1209         }
1210 }
1211
1212 /* Process ctx, rtnl_lock semaphore */
1213 static int emac_close(struct net_device *ndev)
1214 {
1215         struct emac_instance *dev = netdev_priv(ndev);
1216
1217         DBG(dev, "close" NL);
1218
1219         if (dev->phy.address >= 0) {
1220                 dev->link_polling = 0;
1221                 cancel_rearming_delayed_work(&dev->link_work);
1222         }
1223         mutex_lock(&dev->link_lock);
1224         emac_netif_stop(dev);
1225         dev->opened = 0;
1226         mutex_unlock(&dev->link_lock);
1227
1228         emac_rx_disable(dev);
1229         emac_tx_disable(dev);
1230         mal_disable_rx_channel(dev->mal, dev->mal_rx_chan);
1231         mal_disable_tx_channel(dev->mal, dev->mal_tx_chan);
1232         mal_poll_del(dev->mal, &dev->commac);
1233
1234         emac_clean_tx_ring(dev);
1235         emac_clean_rx_ring(dev);
1236
1237         free_irq(dev->emac_irq, dev);
1238
1239         return 0;
1240 }
1241
1242 static inline u16 emac_tx_csum(struct emac_instance *dev,
1243                                struct sk_buff *skb)
1244 {
1245         if (emac_has_feature(dev, EMAC_FTR_HAS_TAH) &&
1246                 (skb->ip_summed == CHECKSUM_PARTIAL)) {
1247                 ++dev->stats.tx_packets_csum;
1248                 return EMAC_TX_CTRL_TAH_CSUM;
1249         }
1250         return 0;
1251 }
1252
1253 static inline int emac_xmit_finish(struct emac_instance *dev, int len)
1254 {
1255         struct emac_regs __iomem *p = dev->emacp;
1256         struct net_device *ndev = dev->ndev;
1257
1258         /* Send the packet out. If the if makes a significant perf
1259          * difference, then we can store the TMR0 value in "dev"
1260          * instead
1261          */
1262         if (emac_has_feature(dev, EMAC_FTR_EMAC4))
1263                 out_be32(&p->tmr0, EMAC4_TMR0_XMIT);
1264         else
1265                 out_be32(&p->tmr0, EMAC_TMR0_XMIT);
1266
1267         if (unlikely(++dev->tx_cnt == NUM_TX_BUFF)) {
1268                 netif_stop_queue(ndev);
1269                 DBG2(dev, "stopped TX queue" NL);
1270         }
1271
1272         ndev->trans_start = jiffies;
1273         ++dev->stats.tx_packets;
1274         dev->stats.tx_bytes += len;
1275
1276         return 0;
1277 }
1278
1279 /* Tx lock BH */
1280 static int emac_start_xmit(struct sk_buff *skb, struct net_device *ndev)
1281 {
1282         struct emac_instance *dev = netdev_priv(ndev);
1283         unsigned int len = skb->len;
1284         int slot;
1285
1286         u16 ctrl = EMAC_TX_CTRL_GFCS | EMAC_TX_CTRL_GP | MAL_TX_CTRL_READY |
1287             MAL_TX_CTRL_LAST | emac_tx_csum(dev, skb);
1288
1289         slot = dev->tx_slot++;
1290         if (dev->tx_slot == NUM_TX_BUFF) {
1291                 dev->tx_slot = 0;
1292                 ctrl |= MAL_TX_CTRL_WRAP;
1293         }
1294
1295         DBG2(dev, "xmit(%u) %d" NL, len, slot);
1296
1297         dev->tx_skb[slot] = skb;
1298         dev->tx_desc[slot].data_ptr = dma_map_single(&dev->ofdev->dev,
1299                                                      skb->data, len,
1300                                                      DMA_TO_DEVICE);
1301         dev->tx_desc[slot].data_len = (u16) len;
1302         wmb();
1303         dev->tx_desc[slot].ctrl = ctrl;
1304
1305         return emac_xmit_finish(dev, len);
1306 }
1307
1308 static inline int emac_xmit_split(struct emac_instance *dev, int slot,
1309                                   u32 pd, int len, int last, u16 base_ctrl)
1310 {
1311         while (1) {
1312                 u16 ctrl = base_ctrl;
1313                 int chunk = min(len, MAL_MAX_TX_SIZE);
1314                 len -= chunk;
1315
1316                 slot = (slot + 1) % NUM_TX_BUFF;
1317
1318                 if (last && !len)
1319                         ctrl |= MAL_TX_CTRL_LAST;
1320                 if (slot == NUM_TX_BUFF - 1)
1321                         ctrl |= MAL_TX_CTRL_WRAP;
1322
1323                 dev->tx_skb[slot] = NULL;
1324                 dev->tx_desc[slot].data_ptr = pd;
1325                 dev->tx_desc[slot].data_len = (u16) chunk;
1326                 dev->tx_desc[slot].ctrl = ctrl;
1327                 ++dev->tx_cnt;
1328
1329                 if (!len)
1330                         break;
1331
1332                 pd += chunk;
1333         }
1334         return slot;
1335 }
1336
1337 /* Tx lock BH disabled (SG version for TAH equipped EMACs) */
1338 static int emac_start_xmit_sg(struct sk_buff *skb, struct net_device *ndev)
1339 {
1340         struct emac_instance *dev = netdev_priv(ndev);
1341         int nr_frags = skb_shinfo(skb)->nr_frags;
1342         int len = skb->len, chunk;
1343         int slot, i;
1344         u16 ctrl;
1345         u32 pd;
1346
1347         /* This is common "fast" path */
1348         if (likely(!nr_frags && len <= MAL_MAX_TX_SIZE))
1349                 return emac_start_xmit(skb, ndev);
1350
1351         len -= skb->data_len;
1352
1353         /* Note, this is only an *estimation*, we can still run out of empty
1354          * slots because of the additional fragmentation into
1355          * MAL_MAX_TX_SIZE-sized chunks
1356          */
1357         if (unlikely(dev->tx_cnt + nr_frags + mal_tx_chunks(len) > NUM_TX_BUFF))
1358                 goto stop_queue;
1359
1360         ctrl = EMAC_TX_CTRL_GFCS | EMAC_TX_CTRL_GP | MAL_TX_CTRL_READY |
1361             emac_tx_csum(dev, skb);
1362         slot = dev->tx_slot;
1363
1364         /* skb data */
1365         dev->tx_skb[slot] = NULL;
1366         chunk = min(len, MAL_MAX_TX_SIZE);
1367         dev->tx_desc[slot].data_ptr = pd =
1368             dma_map_single(&dev->ofdev->dev, skb->data, len, DMA_TO_DEVICE);
1369         dev->tx_desc[slot].data_len = (u16) chunk;
1370         len -= chunk;
1371         if (unlikely(len))
1372                 slot = emac_xmit_split(dev, slot, pd + chunk, len, !nr_frags,
1373                                        ctrl);
1374         /* skb fragments */
1375         for (i = 0; i < nr_frags; ++i) {
1376                 struct skb_frag_struct *frag = &skb_shinfo(skb)->frags[i];
1377                 len = frag->size;
1378
1379                 if (unlikely(dev->tx_cnt + mal_tx_chunks(len) >= NUM_TX_BUFF))
1380                         goto undo_frame;
1381
1382                 pd = dma_map_page(&dev->ofdev->dev, frag->page, frag->page_offset, len,
1383                                   DMA_TO_DEVICE);
1384
1385                 slot = emac_xmit_split(dev, slot, pd, len, i == nr_frags - 1,
1386                                        ctrl);
1387         }
1388
1389         DBG2(dev, "xmit_sg(%u) %d - %d" NL, skb->len, dev->tx_slot, slot);
1390
1391         /* Attach skb to the last slot so we don't release it too early */
1392         dev->tx_skb[slot] = skb;
1393
1394         /* Send the packet out */
1395         if (dev->tx_slot == NUM_TX_BUFF - 1)
1396                 ctrl |= MAL_TX_CTRL_WRAP;
1397         wmb();
1398         dev->tx_desc[dev->tx_slot].ctrl = ctrl;
1399         dev->tx_slot = (slot + 1) % NUM_TX_BUFF;
1400
1401         return emac_xmit_finish(dev, skb->len);
1402
1403  undo_frame:
1404         /* Well, too bad. Our previous estimation was overly optimistic.
1405          * Undo everything.
1406          */
1407         while (slot != dev->tx_slot) {
1408                 dev->tx_desc[slot].ctrl = 0;
1409                 --dev->tx_cnt;
1410                 if (--slot < 0)
1411                         slot = NUM_TX_BUFF - 1;
1412         }
1413         ++dev->estats.tx_undo;
1414
1415  stop_queue:
1416         netif_stop_queue(ndev);
1417         DBG2(dev, "stopped TX queue" NL);
1418         return 1;
1419 }
1420
1421 /* Tx lock BHs */
1422 static void emac_parse_tx_error(struct emac_instance *dev, u16 ctrl)
1423 {
1424         struct emac_error_stats *st = &dev->estats;
1425
1426         DBG(dev, "BD TX error %04x" NL, ctrl);
1427
1428         ++st->tx_bd_errors;
1429         if (ctrl & EMAC_TX_ST_BFCS)
1430                 ++st->tx_bd_bad_fcs;
1431         if (ctrl & EMAC_TX_ST_LCS)
1432                 ++st->tx_bd_carrier_loss;
1433         if (ctrl & EMAC_TX_ST_ED)
1434                 ++st->tx_bd_excessive_deferral;
1435         if (ctrl & EMAC_TX_ST_EC)
1436                 ++st->tx_bd_excessive_collisions;
1437         if (ctrl & EMAC_TX_ST_LC)
1438                 ++st->tx_bd_late_collision;
1439         if (ctrl & EMAC_TX_ST_MC)
1440                 ++st->tx_bd_multple_collisions;
1441         if (ctrl & EMAC_TX_ST_SC)
1442                 ++st->tx_bd_single_collision;
1443         if (ctrl & EMAC_TX_ST_UR)
1444                 ++st->tx_bd_underrun;
1445         if (ctrl & EMAC_TX_ST_SQE)
1446                 ++st->tx_bd_sqe;
1447 }
1448
1449 static void emac_poll_tx(void *param)
1450 {
1451         struct emac_instance *dev = param;
1452         u32 bad_mask;
1453
1454         DBG2(dev, "poll_tx, %d %d" NL, dev->tx_cnt, dev->ack_slot);
1455
1456         if (emac_has_feature(dev, EMAC_FTR_HAS_TAH))
1457                 bad_mask = EMAC_IS_BAD_TX_TAH;
1458         else
1459                 bad_mask = EMAC_IS_BAD_TX;
1460
1461         netif_tx_lock_bh(dev->ndev);
1462         if (dev->tx_cnt) {
1463                 u16 ctrl;
1464                 int slot = dev->ack_slot, n = 0;
1465         again:
1466                 ctrl = dev->tx_desc[slot].ctrl;
1467                 if (!(ctrl & MAL_TX_CTRL_READY)) {
1468                         struct sk_buff *skb = dev->tx_skb[slot];
1469                         ++n;
1470
1471                         if (skb) {
1472                                 dev_kfree_skb(skb);
1473                                 dev->tx_skb[slot] = NULL;
1474                         }
1475                         slot = (slot + 1) % NUM_TX_BUFF;
1476
1477                         if (unlikely(ctrl & bad_mask))
1478                                 emac_parse_tx_error(dev, ctrl);
1479
1480                         if (--dev->tx_cnt)
1481                                 goto again;
1482                 }
1483                 if (n) {
1484                         dev->ack_slot = slot;
1485                         if (netif_queue_stopped(dev->ndev) &&
1486                             dev->tx_cnt < EMAC_TX_WAKEUP_THRESH)
1487                                 netif_wake_queue(dev->ndev);
1488
1489                         DBG2(dev, "tx %d pkts" NL, n);
1490                 }
1491         }
1492         netif_tx_unlock_bh(dev->ndev);
1493 }
1494
1495 static inline void emac_recycle_rx_skb(struct emac_instance *dev, int slot,
1496                                        int len)
1497 {
1498         struct sk_buff *skb = dev->rx_skb[slot];
1499
1500         DBG2(dev, "recycle %d %d" NL, slot, len);
1501
1502         if (len)
1503                 dma_map_single(&dev->ofdev->dev, skb->data - 2,
1504                                EMAC_DMA_ALIGN(len + 2), DMA_FROM_DEVICE);
1505
1506         dev->rx_desc[slot].data_len = 0;
1507         wmb();
1508         dev->rx_desc[slot].ctrl = MAL_RX_CTRL_EMPTY |
1509             (slot == (NUM_RX_BUFF - 1) ? MAL_RX_CTRL_WRAP : 0);
1510 }
1511
1512 static void emac_parse_rx_error(struct emac_instance *dev, u16 ctrl)
1513 {
1514         struct emac_error_stats *st = &dev->estats;
1515
1516         DBG(dev, "BD RX error %04x" NL, ctrl);
1517
1518         ++st->rx_bd_errors;
1519         if (ctrl & EMAC_RX_ST_OE)
1520                 ++st->rx_bd_overrun;
1521         if (ctrl & EMAC_RX_ST_BP)
1522                 ++st->rx_bd_bad_packet;
1523         if (ctrl & EMAC_RX_ST_RP)
1524                 ++st->rx_bd_runt_packet;
1525         if (ctrl & EMAC_RX_ST_SE)
1526                 ++st->rx_bd_short_event;
1527         if (ctrl & EMAC_RX_ST_AE)
1528                 ++st->rx_bd_alignment_error;
1529         if (ctrl & EMAC_RX_ST_BFCS)
1530                 ++st->rx_bd_bad_fcs;
1531         if (ctrl & EMAC_RX_ST_PTL)
1532                 ++st->rx_bd_packet_too_long;
1533         if (ctrl & EMAC_RX_ST_ORE)
1534                 ++st->rx_bd_out_of_range;
1535         if (ctrl & EMAC_RX_ST_IRE)
1536                 ++st->rx_bd_in_range;
1537 }
1538
1539 static inline void emac_rx_csum(struct emac_instance *dev,
1540                                 struct sk_buff *skb, u16 ctrl)
1541 {
1542 #ifdef CONFIG_IBM_NEW_EMAC_TAH
1543         if (!ctrl && dev->tah_dev) {
1544                 skb->ip_summed = CHECKSUM_UNNECESSARY;
1545                 ++dev->stats.rx_packets_csum;
1546         }
1547 #endif
1548 }
1549
1550 static inline int emac_rx_sg_append(struct emac_instance *dev, int slot)
1551 {
1552         if (likely(dev->rx_sg_skb != NULL)) {
1553                 int len = dev->rx_desc[slot].data_len;
1554                 int tot_len = dev->rx_sg_skb->len + len;
1555
1556                 if (unlikely(tot_len + 2 > dev->rx_skb_size)) {
1557                         ++dev->estats.rx_dropped_mtu;
1558                         dev_kfree_skb(dev->rx_sg_skb);
1559                         dev->rx_sg_skb = NULL;
1560                 } else {
1561                         cacheable_memcpy(skb_tail_pointer(dev->rx_sg_skb),
1562                                          dev->rx_skb[slot]->data, len);
1563                         skb_put(dev->rx_sg_skb, len);
1564                         emac_recycle_rx_skb(dev, slot, len);
1565                         return 0;
1566                 }
1567         }
1568         emac_recycle_rx_skb(dev, slot, 0);
1569         return -1;
1570 }
1571
1572 /* NAPI poll context */
1573 static int emac_poll_rx(void *param, int budget)
1574 {
1575         struct emac_instance *dev = param;
1576         int slot = dev->rx_slot, received = 0;
1577
1578         DBG2(dev, "poll_rx(%d)" NL, budget);
1579
1580  again:
1581         while (budget > 0) {
1582                 int len;
1583                 struct sk_buff *skb;
1584                 u16 ctrl = dev->rx_desc[slot].ctrl;
1585
1586                 if (ctrl & MAL_RX_CTRL_EMPTY)
1587                         break;
1588
1589                 skb = dev->rx_skb[slot];
1590                 mb();
1591                 len = dev->rx_desc[slot].data_len;
1592
1593                 if (unlikely(!MAL_IS_SINGLE_RX(ctrl)))
1594                         goto sg;
1595
1596                 ctrl &= EMAC_BAD_RX_MASK;
1597                 if (unlikely(ctrl && ctrl != EMAC_RX_TAH_BAD_CSUM)) {
1598                         emac_parse_rx_error(dev, ctrl);
1599                         ++dev->estats.rx_dropped_error;
1600                         emac_recycle_rx_skb(dev, slot, 0);
1601                         len = 0;
1602                         goto next;
1603                 }
1604
1605                 if (len && len < EMAC_RX_COPY_THRESH) {
1606                         struct sk_buff *copy_skb =
1607                             alloc_skb(len + EMAC_RX_SKB_HEADROOM + 2, GFP_ATOMIC);
1608                         if (unlikely(!copy_skb))
1609                                 goto oom;
1610
1611                         skb_reserve(copy_skb, EMAC_RX_SKB_HEADROOM + 2);
1612                         cacheable_memcpy(copy_skb->data - 2, skb->data - 2,
1613                                          len + 2);
1614                         emac_recycle_rx_skb(dev, slot, len);
1615                         skb = copy_skb;
1616                 } else if (unlikely(emac_alloc_rx_skb(dev, slot, GFP_ATOMIC)))
1617                         goto oom;
1618
1619                 skb_put(skb, len);
1620         push_packet:
1621                 skb->dev = dev->ndev;
1622                 skb->protocol = eth_type_trans(skb, dev->ndev);
1623                 emac_rx_csum(dev, skb, ctrl);
1624
1625                 if (unlikely(netif_receive_skb(skb) == NET_RX_DROP))
1626                         ++dev->estats.rx_dropped_stack;
1627         next:
1628                 ++dev->stats.rx_packets;
1629         skip:
1630                 dev->stats.rx_bytes += len;
1631                 slot = (slot + 1) % NUM_RX_BUFF;
1632                 --budget;
1633                 ++received;
1634                 continue;
1635         sg:
1636                 if (ctrl & MAL_RX_CTRL_FIRST) {
1637                         BUG_ON(dev->rx_sg_skb);
1638                         if (unlikely(emac_alloc_rx_skb(dev, slot, GFP_ATOMIC))) {
1639                                 DBG(dev, "rx OOM %d" NL, slot);
1640                                 ++dev->estats.rx_dropped_oom;
1641                                 emac_recycle_rx_skb(dev, slot, 0);
1642                         } else {
1643                                 dev->rx_sg_skb = skb;
1644                                 skb_put(skb, len);
1645                         }
1646                 } else if (!emac_rx_sg_append(dev, slot) &&
1647                            (ctrl & MAL_RX_CTRL_LAST)) {
1648
1649                         skb = dev->rx_sg_skb;
1650                         dev->rx_sg_skb = NULL;
1651
1652                         ctrl &= EMAC_BAD_RX_MASK;
1653                         if (unlikely(ctrl && ctrl != EMAC_RX_TAH_BAD_CSUM)) {
1654                                 emac_parse_rx_error(dev, ctrl);
1655                                 ++dev->estats.rx_dropped_error;
1656                                 dev_kfree_skb(skb);
1657                                 len = 0;
1658                         } else
1659                                 goto push_packet;
1660                 }
1661                 goto skip;
1662         oom:
1663                 DBG(dev, "rx OOM %d" NL, slot);
1664                 /* Drop the packet and recycle skb */
1665                 ++dev->estats.rx_dropped_oom;
1666                 emac_recycle_rx_skb(dev, slot, 0);
1667                 goto next;
1668         }
1669
1670         if (received) {
1671                 DBG2(dev, "rx %d BDs" NL, received);
1672                 dev->rx_slot = slot;
1673         }
1674
1675         if (unlikely(budget && test_bit(MAL_COMMAC_RX_STOPPED, &dev->commac.flags))) {
1676                 mb();
1677                 if (!(dev->rx_desc[slot].ctrl & MAL_RX_CTRL_EMPTY)) {
1678                         DBG2(dev, "rx restart" NL);
1679                         received = 0;
1680                         goto again;
1681                 }
1682
1683                 if (dev->rx_sg_skb) {
1684                         DBG2(dev, "dropping partial rx packet" NL);
1685                         ++dev->estats.rx_dropped_error;
1686                         dev_kfree_skb(dev->rx_sg_skb);
1687                         dev->rx_sg_skb = NULL;
1688                 }
1689
1690                 clear_bit(MAL_COMMAC_RX_STOPPED, &dev->commac.flags);
1691                 mal_enable_rx_channel(dev->mal, dev->mal_rx_chan);
1692                 emac_rx_enable(dev);
1693                 dev->rx_slot = 0;
1694         }
1695         return received;
1696 }
1697
1698 /* NAPI poll context */
1699 static int emac_peek_rx(void *param)
1700 {
1701         struct emac_instance *dev = param;
1702
1703         return !(dev->rx_desc[dev->rx_slot].ctrl & MAL_RX_CTRL_EMPTY);
1704 }
1705
1706 /* NAPI poll context */
1707 static int emac_peek_rx_sg(void *param)
1708 {
1709         struct emac_instance *dev = param;
1710
1711         int slot = dev->rx_slot;
1712         while (1) {
1713                 u16 ctrl = dev->rx_desc[slot].ctrl;
1714                 if (ctrl & MAL_RX_CTRL_EMPTY)
1715                         return 0;
1716                 else if (ctrl & MAL_RX_CTRL_LAST)
1717                         return 1;
1718
1719                 slot = (slot + 1) % NUM_RX_BUFF;
1720
1721                 /* I'm just being paranoid here :) */
1722                 if (unlikely(slot == dev->rx_slot))
1723                         return 0;
1724         }
1725 }
1726
1727 /* Hard IRQ */
1728 static void emac_rxde(void *param)
1729 {
1730         struct emac_instance *dev = param;
1731
1732         ++dev->estats.rx_stopped;
1733         emac_rx_disable_async(dev);
1734 }
1735
1736 /* Hard IRQ */
1737 static irqreturn_t emac_irq(int irq, void *dev_instance)
1738 {
1739         struct emac_instance *dev = dev_instance;
1740         struct emac_regs __iomem *p = dev->emacp;
1741         struct emac_error_stats *st = &dev->estats;
1742         u32 isr;
1743
1744         spin_lock(&dev->lock);
1745
1746         isr = in_be32(&p->isr);
1747         out_be32(&p->isr, isr);
1748
1749         DBG(dev, "isr = %08x" NL, isr);
1750
1751         if (isr & EMAC4_ISR_TXPE)
1752                 ++st->tx_parity;
1753         if (isr & EMAC4_ISR_RXPE)
1754                 ++st->rx_parity;
1755         if (isr & EMAC4_ISR_TXUE)
1756                 ++st->tx_underrun;
1757         if (isr & EMAC4_ISR_RXOE)
1758                 ++st->rx_fifo_overrun;
1759         if (isr & EMAC_ISR_OVR)
1760                 ++st->rx_overrun;
1761         if (isr & EMAC_ISR_BP)
1762                 ++st->rx_bad_packet;
1763         if (isr & EMAC_ISR_RP)
1764                 ++st->rx_runt_packet;
1765         if (isr & EMAC_ISR_SE)
1766                 ++st->rx_short_event;
1767         if (isr & EMAC_ISR_ALE)
1768                 ++st->rx_alignment_error;
1769         if (isr & EMAC_ISR_BFCS)
1770                 ++st->rx_bad_fcs;
1771         if (isr & EMAC_ISR_PTLE)
1772                 ++st->rx_packet_too_long;
1773         if (isr & EMAC_ISR_ORE)
1774                 ++st->rx_out_of_range;
1775         if (isr & EMAC_ISR_IRE)
1776                 ++st->rx_in_range;
1777         if (isr & EMAC_ISR_SQE)
1778                 ++st->tx_sqe;
1779         if (isr & EMAC_ISR_TE)
1780                 ++st->tx_errors;
1781
1782         spin_unlock(&dev->lock);
1783
1784         return IRQ_HANDLED;
1785 }
1786
1787 static struct net_device_stats *emac_stats(struct net_device *ndev)
1788 {
1789         struct emac_instance *dev = netdev_priv(ndev);
1790         struct emac_stats *st = &dev->stats;
1791         struct emac_error_stats *est = &dev->estats;
1792         struct net_device_stats *nst = &dev->nstats;
1793         unsigned long flags;
1794
1795         DBG2(dev, "stats" NL);
1796
1797         /* Compute "legacy" statistics */
1798         spin_lock_irqsave(&dev->lock, flags);
1799         nst->rx_packets = (unsigned long)st->rx_packets;
1800         nst->rx_bytes = (unsigned long)st->rx_bytes;
1801         nst->tx_packets = (unsigned long)st->tx_packets;
1802         nst->tx_bytes = (unsigned long)st->tx_bytes;
1803         nst->rx_dropped = (unsigned long)(est->rx_dropped_oom +
1804                                           est->rx_dropped_error +
1805                                           est->rx_dropped_resize +
1806                                           est->rx_dropped_mtu);
1807         nst->tx_dropped = (unsigned long)est->tx_dropped;
1808
1809         nst->rx_errors = (unsigned long)est->rx_bd_errors;
1810         nst->rx_fifo_errors = (unsigned long)(est->rx_bd_overrun +
1811                                               est->rx_fifo_overrun +
1812                                               est->rx_overrun);
1813         nst->rx_frame_errors = (unsigned long)(est->rx_bd_alignment_error +
1814                                                est->rx_alignment_error);
1815         nst->rx_crc_errors = (unsigned long)(est->rx_bd_bad_fcs +
1816                                              est->rx_bad_fcs);
1817         nst->rx_length_errors = (unsigned long)(est->rx_bd_runt_packet +
1818                                                 est->rx_bd_short_event +
1819                                                 est->rx_bd_packet_too_long +
1820                                                 est->rx_bd_out_of_range +
1821                                                 est->rx_bd_in_range +
1822                                                 est->rx_runt_packet +
1823                                                 est->rx_short_event +
1824                                                 est->rx_packet_too_long +
1825                                                 est->rx_out_of_range +
1826                                                 est->rx_in_range);
1827
1828         nst->tx_errors = (unsigned long)(est->tx_bd_errors + est->tx_errors);
1829         nst->tx_fifo_errors = (unsigned long)(est->tx_bd_underrun +
1830                                               est->tx_underrun);
1831         nst->tx_carrier_errors = (unsigned long)est->tx_bd_carrier_loss;
1832         nst->collisions = (unsigned long)(est->tx_bd_excessive_deferral +
1833                                           est->tx_bd_excessive_collisions +
1834                                           est->tx_bd_late_collision +
1835                                           est->tx_bd_multple_collisions);
1836         spin_unlock_irqrestore(&dev->lock, flags);
1837         return nst;
1838 }
1839
1840 static struct mal_commac_ops emac_commac_ops = {
1841         .poll_tx = &emac_poll_tx,
1842         .poll_rx = &emac_poll_rx,
1843         .peek_rx = &emac_peek_rx,
1844         .rxde = &emac_rxde,
1845 };
1846
1847 static struct mal_commac_ops emac_commac_sg_ops = {
1848         .poll_tx = &emac_poll_tx,
1849         .poll_rx = &emac_poll_rx,
1850         .peek_rx = &emac_peek_rx_sg,
1851         .rxde = &emac_rxde,
1852 };
1853
1854 /* Ethtool support */
1855 static int emac_ethtool_get_settings(struct net_device *ndev,
1856                                      struct ethtool_cmd *cmd)
1857 {
1858         struct emac_instance *dev = netdev_priv(ndev);
1859
1860         cmd->supported = dev->phy.features;
1861         cmd->port = PORT_MII;
1862         cmd->phy_address = dev->phy.address;
1863         cmd->transceiver =
1864             dev->phy.address >= 0 ? XCVR_EXTERNAL : XCVR_INTERNAL;
1865
1866         mutex_lock(&dev->link_lock);
1867         cmd->advertising = dev->phy.advertising;
1868         cmd->autoneg = dev->phy.autoneg;
1869         cmd->speed = dev->phy.speed;
1870         cmd->duplex = dev->phy.duplex;
1871         mutex_unlock(&dev->link_lock);
1872
1873         return 0;
1874 }
1875
1876 static int emac_ethtool_set_settings(struct net_device *ndev,
1877                                      struct ethtool_cmd *cmd)
1878 {
1879         struct emac_instance *dev = netdev_priv(ndev);
1880         u32 f = dev->phy.features;
1881
1882         DBG(dev, "set_settings(%d, %d, %d, 0x%08x)" NL,
1883             cmd->autoneg, cmd->speed, cmd->duplex, cmd->advertising);
1884
1885         /* Basic sanity checks */
1886         if (dev->phy.address < 0)
1887                 return -EOPNOTSUPP;
1888         if (cmd->autoneg != AUTONEG_ENABLE && cmd->autoneg != AUTONEG_DISABLE)
1889                 return -EINVAL;
1890         if (cmd->autoneg == AUTONEG_ENABLE && cmd->advertising == 0)
1891                 return -EINVAL;
1892         if (cmd->duplex != DUPLEX_HALF && cmd->duplex != DUPLEX_FULL)
1893                 return -EINVAL;
1894
1895         if (cmd->autoneg == AUTONEG_DISABLE) {
1896                 switch (cmd->speed) {
1897                 case SPEED_10:
1898                         if (cmd->duplex == DUPLEX_HALF
1899                             && !(f & SUPPORTED_10baseT_Half))
1900                                 return -EINVAL;
1901                         if (cmd->duplex == DUPLEX_FULL
1902                             && !(f & SUPPORTED_10baseT_Full))
1903                                 return -EINVAL;
1904                         break;
1905                 case SPEED_100:
1906                         if (cmd->duplex == DUPLEX_HALF
1907                             && !(f & SUPPORTED_100baseT_Half))
1908                                 return -EINVAL;
1909                         if (cmd->duplex == DUPLEX_FULL
1910                             && !(f & SUPPORTED_100baseT_Full))
1911                                 return -EINVAL;
1912                         break;
1913                 case SPEED_1000:
1914                         if (cmd->duplex == DUPLEX_HALF
1915                             && !(f & SUPPORTED_1000baseT_Half))
1916                                 return -EINVAL;
1917                         if (cmd->duplex == DUPLEX_FULL
1918                             && !(f & SUPPORTED_1000baseT_Full))
1919                                 return -EINVAL;
1920                         break;
1921                 default:
1922                         return -EINVAL;
1923                 }
1924
1925                 mutex_lock(&dev->link_lock);
1926                 dev->phy.def->ops->setup_forced(&dev->phy, cmd->speed,
1927                                                 cmd->duplex);
1928                 mutex_unlock(&dev->link_lock);
1929
1930         } else {
1931                 if (!(f & SUPPORTED_Autoneg))
1932                         return -EINVAL;
1933
1934                 mutex_lock(&dev->link_lock);
1935                 dev->phy.def->ops->setup_aneg(&dev->phy,
1936                                               (cmd->advertising & f) |
1937                                               (dev->phy.advertising &
1938                                                (ADVERTISED_Pause |
1939                                                 ADVERTISED_Asym_Pause)));
1940                 mutex_unlock(&dev->link_lock);
1941         }
1942         emac_force_link_update(dev);
1943
1944         return 0;
1945 }
1946
1947 static void emac_ethtool_get_ringparam(struct net_device *ndev,
1948                                        struct ethtool_ringparam *rp)
1949 {
1950         rp->rx_max_pending = rp->rx_pending = NUM_RX_BUFF;
1951         rp->tx_max_pending = rp->tx_pending = NUM_TX_BUFF;
1952 }
1953
1954 static void emac_ethtool_get_pauseparam(struct net_device *ndev,
1955                                         struct ethtool_pauseparam *pp)
1956 {
1957         struct emac_instance *dev = netdev_priv(ndev);
1958
1959         mutex_lock(&dev->link_lock);
1960         if ((dev->phy.features & SUPPORTED_Autoneg) &&
1961             (dev->phy.advertising & (ADVERTISED_Pause | ADVERTISED_Asym_Pause)))
1962                 pp->autoneg = 1;
1963
1964         if (dev->phy.duplex == DUPLEX_FULL) {
1965                 if (dev->phy.pause)
1966                         pp->rx_pause = pp->tx_pause = 1;
1967                 else if (dev->phy.asym_pause)
1968                         pp->tx_pause = 1;
1969         }
1970         mutex_unlock(&dev->link_lock);
1971 }
1972
1973 static u32 emac_ethtool_get_rx_csum(struct net_device *ndev)
1974 {
1975         struct emac_instance *dev = netdev_priv(ndev);
1976
1977         return dev->tah_dev != NULL;
1978 }
1979
1980 static int emac_get_regs_len(struct emac_instance *dev)
1981 {
1982         if (emac_has_feature(dev, EMAC_FTR_EMAC4))
1983                 return sizeof(struct emac_ethtool_regs_subhdr) +
1984                         EMAC4_ETHTOOL_REGS_SIZE;
1985         else
1986                 return sizeof(struct emac_ethtool_regs_subhdr) +
1987                         EMAC_ETHTOOL_REGS_SIZE;
1988 }
1989
1990 static int emac_ethtool_get_regs_len(struct net_device *ndev)
1991 {
1992         struct emac_instance *dev = netdev_priv(ndev);
1993         int size;
1994
1995         size = sizeof(struct emac_ethtool_regs_hdr) +
1996                 emac_get_regs_len(dev) + mal_get_regs_len(dev->mal);
1997         if (emac_has_feature(dev, EMAC_FTR_HAS_ZMII))
1998                 size += zmii_get_regs_len(dev->zmii_dev);
1999         if (emac_has_feature(dev, EMAC_FTR_HAS_RGMII))
2000                 size += rgmii_get_regs_len(dev->rgmii_dev);
2001         if (emac_has_feature(dev, EMAC_FTR_HAS_TAH))
2002                 size += tah_get_regs_len(dev->tah_dev);
2003
2004         return size;
2005 }
2006
2007 static void *emac_dump_regs(struct emac_instance *dev, void *buf)
2008 {
2009         struct emac_ethtool_regs_subhdr *hdr = buf;
2010
2011         hdr->index = dev->cell_index;
2012         if (emac_has_feature(dev, EMAC_FTR_EMAC4)) {
2013                 hdr->version = EMAC4_ETHTOOL_REGS_VER;
2014                 memcpy_fromio(hdr + 1, dev->emacp, EMAC4_ETHTOOL_REGS_SIZE);
2015                 return ((void *)(hdr + 1) + EMAC4_ETHTOOL_REGS_SIZE);
2016         } else {
2017                 hdr->version = EMAC_ETHTOOL_REGS_VER;
2018                 memcpy_fromio(hdr + 1, dev->emacp, EMAC_ETHTOOL_REGS_SIZE);
2019                 return ((void *)(hdr + 1) + EMAC_ETHTOOL_REGS_SIZE);
2020         }
2021 }
2022
2023 static void emac_ethtool_get_regs(struct net_device *ndev,
2024                                   struct ethtool_regs *regs, void *buf)
2025 {
2026         struct emac_instance *dev = netdev_priv(ndev);
2027         struct emac_ethtool_regs_hdr *hdr = buf;
2028
2029         hdr->components = 0;
2030         buf = hdr + 1;
2031
2032         buf = mal_dump_regs(dev->mal, buf);
2033         buf = emac_dump_regs(dev, buf);
2034         if (emac_has_feature(dev, EMAC_FTR_HAS_ZMII)) {
2035                 hdr->components |= EMAC_ETHTOOL_REGS_ZMII;
2036                 buf = zmii_dump_regs(dev->zmii_dev, buf);
2037         }
2038         if (emac_has_feature(dev, EMAC_FTR_HAS_RGMII)) {
2039                 hdr->components |= EMAC_ETHTOOL_REGS_RGMII;
2040                 buf = rgmii_dump_regs(dev->rgmii_dev, buf);
2041         }
2042         if (emac_has_feature(dev, EMAC_FTR_HAS_TAH)) {
2043                 hdr->components |= EMAC_ETHTOOL_REGS_TAH;
2044                 buf = tah_dump_regs(dev->tah_dev, buf);
2045         }
2046 }
2047
2048 static int emac_ethtool_nway_reset(struct net_device *ndev)
2049 {
2050         struct emac_instance *dev = netdev_priv(ndev);
2051         int res = 0;
2052
2053         DBG(dev, "nway_reset" NL);
2054
2055         if (dev->phy.address < 0)
2056                 return -EOPNOTSUPP;
2057
2058         mutex_lock(&dev->link_lock);
2059         if (!dev->phy.autoneg) {
2060                 res = -EINVAL;
2061                 goto out;
2062         }
2063
2064         dev->phy.def->ops->setup_aneg(&dev->phy, dev->phy.advertising);
2065  out:
2066         mutex_unlock(&dev->link_lock);
2067         emac_force_link_update(dev);
2068         return res;
2069 }
2070
2071 static int emac_ethtool_get_stats_count(struct net_device *ndev)
2072 {
2073         return EMAC_ETHTOOL_STATS_COUNT;
2074 }
2075
2076 static void emac_ethtool_get_strings(struct net_device *ndev, u32 stringset,
2077                                      u8 * buf)
2078 {
2079         if (stringset == ETH_SS_STATS)
2080                 memcpy(buf, &emac_stats_keys, sizeof(emac_stats_keys));
2081 }
2082
2083 static void emac_ethtool_get_ethtool_stats(struct net_device *ndev,
2084                                            struct ethtool_stats *estats,
2085                                            u64 * tmp_stats)
2086 {
2087         struct emac_instance *dev = netdev_priv(ndev);
2088
2089         memcpy(tmp_stats, &dev->stats, sizeof(dev->stats));
2090         tmp_stats += sizeof(dev->stats) / sizeof(u64);
2091         memcpy(tmp_stats, &dev->estats, sizeof(dev->estats));
2092 }
2093
2094 static void emac_ethtool_get_drvinfo(struct net_device *ndev,
2095                                      struct ethtool_drvinfo *info)
2096 {
2097         struct emac_instance *dev = netdev_priv(ndev);
2098
2099         strcpy(info->driver, "ibm_emac");
2100         strcpy(info->version, DRV_VERSION);
2101         info->fw_version[0] = '\0';
2102         sprintf(info->bus_info, "PPC 4xx EMAC-%d %s",
2103                 dev->cell_index, dev->ofdev->node->full_name);
2104         info->n_stats = emac_ethtool_get_stats_count(ndev);
2105         info->regdump_len = emac_ethtool_get_regs_len(ndev);
2106 }
2107
2108 static const struct ethtool_ops emac_ethtool_ops = {
2109         .get_settings = emac_ethtool_get_settings,
2110         .set_settings = emac_ethtool_set_settings,
2111         .get_drvinfo = emac_ethtool_get_drvinfo,
2112
2113         .get_regs_len = emac_ethtool_get_regs_len,
2114         .get_regs = emac_ethtool_get_regs,
2115
2116         .nway_reset = emac_ethtool_nway_reset,
2117
2118         .get_ringparam = emac_ethtool_get_ringparam,
2119         .get_pauseparam = emac_ethtool_get_pauseparam,
2120
2121         .get_rx_csum = emac_ethtool_get_rx_csum,
2122
2123         .get_strings = emac_ethtool_get_strings,
2124         .get_stats_count = emac_ethtool_get_stats_count,
2125         .get_ethtool_stats = emac_ethtool_get_ethtool_stats,
2126
2127         .get_link = ethtool_op_get_link,
2128         .get_tx_csum = ethtool_op_get_tx_csum,
2129         .get_sg = ethtool_op_get_sg,
2130 };
2131
2132 static int emac_ioctl(struct net_device *ndev, struct ifreq *rq, int cmd)
2133 {
2134         struct emac_instance *dev = netdev_priv(ndev);
2135         uint16_t *data = (uint16_t *) & rq->ifr_ifru;
2136
2137         DBG(dev, "ioctl %08x" NL, cmd);
2138
2139         if (dev->phy.address < 0)
2140                 return -EOPNOTSUPP;
2141
2142         switch (cmd) {
2143         case SIOCGMIIPHY:
2144         case SIOCDEVPRIVATE:
2145                 data[0] = dev->phy.address;
2146                 /* Fall through */
2147         case SIOCGMIIREG:
2148         case SIOCDEVPRIVATE + 1:
2149                 data[3] = emac_mdio_read(ndev, dev->phy.address, data[1]);
2150                 return 0;
2151
2152         case SIOCSMIIREG:
2153         case SIOCDEVPRIVATE + 2:
2154                 if (!capable(CAP_NET_ADMIN))
2155                         return -EPERM;
2156                 emac_mdio_write(ndev, dev->phy.address, data[1], data[2]);
2157                 return 0;
2158         default:
2159                 return -EOPNOTSUPP;
2160         }
2161 }
2162
2163 struct emac_depentry {
2164         u32                     phandle;
2165         struct device_node      *node;
2166         struct of_device        *ofdev;
2167         void                    *drvdata;
2168 };
2169
2170 #define EMAC_DEP_MAL_IDX        0
2171 #define EMAC_DEP_ZMII_IDX       1
2172 #define EMAC_DEP_RGMII_IDX      2
2173 #define EMAC_DEP_TAH_IDX        3
2174 #define EMAC_DEP_MDIO_IDX       4
2175 #define EMAC_DEP_PREV_IDX       5
2176 #define EMAC_DEP_COUNT          6
2177
2178 static int __devinit emac_check_deps(struct emac_instance *dev,
2179                                      struct emac_depentry *deps)
2180 {
2181         int i, there = 0;
2182         struct device_node *np;
2183
2184         for (i = 0; i < EMAC_DEP_COUNT; i++) {
2185                 /* no dependency on that item, allright */
2186                 if (deps[i].phandle == 0) {
2187                         there++;
2188                         continue;
2189                 }
2190                 /* special case for blist as the dependency might go away */
2191                 if (i == EMAC_DEP_PREV_IDX) {
2192                         np = *(dev->blist - 1);
2193                         if (np == NULL) {
2194                                 deps[i].phandle = 0;
2195                                 there++;
2196                                 continue;
2197                         }
2198                         if (deps[i].node == NULL)
2199                                 deps[i].node = of_node_get(np);
2200                 }
2201                 if (deps[i].node == NULL)
2202                         deps[i].node = of_find_node_by_phandle(deps[i].phandle);
2203                 if (deps[i].node == NULL)
2204                         continue;
2205                 if (deps[i].ofdev == NULL)
2206                         deps[i].ofdev = of_find_device_by_node(deps[i].node);
2207                 if (deps[i].ofdev == NULL)
2208                         continue;
2209                 if (deps[i].drvdata == NULL)
2210                         deps[i].drvdata = dev_get_drvdata(&deps[i].ofdev->dev);
2211                 if (deps[i].drvdata != NULL)
2212                         there++;
2213         }
2214         return (there == EMAC_DEP_COUNT);
2215 }
2216
2217 static void emac_put_deps(struct emac_instance *dev)
2218 {
2219         if (dev->mal_dev)
2220                 of_dev_put(dev->mal_dev);
2221         if (dev->zmii_dev)
2222                 of_dev_put(dev->zmii_dev);
2223         if (dev->rgmii_dev)
2224                 of_dev_put(dev->rgmii_dev);
2225         if (dev->mdio_dev)
2226                 of_dev_put(dev->mdio_dev);
2227         if (dev->tah_dev)
2228                 of_dev_put(dev->tah_dev);
2229 }
2230
2231 static int __devinit emac_of_bus_notify(struct notifier_block *nb,
2232                                         unsigned long action, void *data)
2233 {
2234         /* We are only intereted in device addition */
2235         if (action == BUS_NOTIFY_BOUND_DRIVER)
2236                 wake_up_all(&emac_probe_wait);
2237         return 0;
2238 }
2239
2240 static struct notifier_block emac_of_bus_notifier = {
2241         .notifier_call = emac_of_bus_notify
2242 };
2243
2244 static int __devinit emac_wait_deps(struct emac_instance *dev)
2245 {
2246         struct emac_depentry deps[EMAC_DEP_COUNT];
2247         int i, err;
2248
2249         memset(&deps, 0, sizeof(deps));
2250
2251         deps[EMAC_DEP_MAL_IDX].phandle = dev->mal_ph;
2252         deps[EMAC_DEP_ZMII_IDX].phandle = dev->zmii_ph;
2253         deps[EMAC_DEP_RGMII_IDX].phandle = dev->rgmii_ph;
2254         if (dev->tah_ph)
2255                 deps[EMAC_DEP_TAH_IDX].phandle = dev->tah_ph;
2256         if (dev->mdio_ph)
2257                 deps[EMAC_DEP_MDIO_IDX].phandle = dev->mdio_ph;
2258         if (dev->blist && dev->blist > emac_boot_list)
2259                 deps[EMAC_DEP_PREV_IDX].phandle = 0xffffffffu;
2260         bus_register_notifier(&of_platform_bus_type, &emac_of_bus_notifier);
2261         wait_event_timeout(emac_probe_wait,
2262                            emac_check_deps(dev, deps),
2263                            EMAC_PROBE_DEP_TIMEOUT);
2264         bus_unregister_notifier(&of_platform_bus_type, &emac_of_bus_notifier);
2265         err = emac_check_deps(dev, deps) ? 0 : -ENODEV;
2266         for (i = 0; i < EMAC_DEP_COUNT; i++) {
2267                 if (deps[i].node)
2268                         of_node_put(deps[i].node);
2269                 if (err && deps[i].ofdev)
2270                         of_dev_put(deps[i].ofdev);
2271         }
2272         if (err == 0) {
2273                 dev->mal_dev = deps[EMAC_DEP_MAL_IDX].ofdev;
2274                 dev->zmii_dev = deps[EMAC_DEP_ZMII_IDX].ofdev;
2275                 dev->rgmii_dev = deps[EMAC_DEP_RGMII_IDX].ofdev;
2276                 dev->tah_dev = deps[EMAC_DEP_TAH_IDX].ofdev;
2277                 dev->mdio_dev = deps[EMAC_DEP_MDIO_IDX].ofdev;
2278         }
2279         if (deps[EMAC_DEP_PREV_IDX].ofdev)
2280                 of_dev_put(deps[EMAC_DEP_PREV_IDX].ofdev);
2281         return err;
2282 }
2283
2284 static int __devinit emac_read_uint_prop(struct device_node *np, const char *name,
2285                                          u32 *val, int fatal)
2286 {
2287         int len;
2288         const u32 *prop = of_get_property(np, name, &len);
2289         if (prop == NULL || len < sizeof(u32)) {
2290                 if (fatal)
2291                         printk(KERN_ERR "%s: missing %s property\n",
2292                                np->full_name, name);
2293                 return -ENODEV;
2294         }
2295         *val = *prop;
2296         return 0;
2297 }
2298
2299 static int __devinit emac_init_phy(struct emac_instance *dev)
2300 {
2301         struct device_node *np = dev->ofdev->node;
2302         struct net_device *ndev = dev->ndev;
2303         u32 phy_map, adv;
2304         int i;
2305
2306         dev->phy.dev = ndev;
2307         dev->phy.mode = dev->phy_mode;
2308
2309         /* PHY-less configuration.
2310          * XXX I probably should move these settings to the dev tree
2311          */
2312         if (dev->phy_address == 0xffffffff && dev->phy_map == 0xffffffff) {
2313                 emac_reset(dev);
2314
2315                 /* PHY-less configuration.
2316                  * XXX I probably should move these settings to the dev tree
2317                  */
2318                 dev->phy.address = -1;
2319                 dev->phy.features = SUPPORTED_100baseT_Full | SUPPORTED_MII;
2320                 dev->phy.pause = 1;
2321
2322                 return 0;
2323         }
2324
2325         mutex_lock(&emac_phy_map_lock);
2326         phy_map = dev->phy_map | busy_phy_map;
2327
2328         DBG(dev, "PHY maps %08x %08x" NL, dev->phy_map, busy_phy_map);
2329
2330         dev->phy.mdio_read = emac_mdio_read;
2331         dev->phy.mdio_write = emac_mdio_write;
2332
2333         /* Configure EMAC with defaults so we can at least use MDIO
2334          * This is needed mostly for 440GX
2335          */
2336         if (emac_phy_gpcs(dev->phy.mode)) {
2337                 /* XXX
2338                  * Make GPCS PHY address equal to EMAC index.
2339                  * We probably should take into account busy_phy_map
2340                  * and/or phy_map here.
2341                  *
2342                  * Note that the busy_phy_map is currently global
2343                  * while it should probably be per-ASIC...
2344                  */
2345                 dev->phy.address = dev->cell_index;
2346         }
2347
2348         emac_configure(dev);
2349
2350         if (dev->phy_address != 0xffffffff)
2351                 phy_map = ~(1 << dev->phy_address);
2352
2353         for (i = 0; i < 0x20; phy_map >>= 1, ++i)
2354                 if (!(phy_map & 1)) {
2355                         int r;
2356                         busy_phy_map |= 1 << i;
2357
2358                         /* Quick check if there is a PHY at the address */
2359                         r = emac_mdio_read(dev->ndev, i, MII_BMCR);
2360                         if (r == 0xffff || r < 0)
2361                                 continue;
2362                         if (!emac_mii_phy_probe(&dev->phy, i))
2363                                 break;
2364                 }
2365         mutex_unlock(&emac_phy_map_lock);
2366         if (i == 0x20) {
2367                 printk(KERN_WARNING "%s: can't find PHY!\n", np->full_name);
2368                 return -ENXIO;
2369         }
2370
2371         /* Init PHY */
2372         if (dev->phy.def->ops->init)
2373                 dev->phy.def->ops->init(&dev->phy);
2374
2375         /* Disable any PHY features not supported by the platform */
2376         dev->phy.def->features &= ~dev->phy_feat_exc;
2377
2378         /* Setup initial link parameters */
2379         if (dev->phy.features & SUPPORTED_Autoneg) {
2380                 adv = dev->phy.features;
2381                 if (!emac_has_feature(dev, EMAC_FTR_NO_FLOW_CONTROL_40x))
2382                         adv |= ADVERTISED_Pause | ADVERTISED_Asym_Pause;
2383                 /* Restart autonegotiation */
2384                 dev->phy.def->ops->setup_aneg(&dev->phy, adv);
2385         } else {
2386                 u32 f = dev->phy.def->features;
2387                 int speed = SPEED_10, fd = DUPLEX_HALF;
2388
2389                 /* Select highest supported speed/duplex */
2390                 if (f & SUPPORTED_1000baseT_Full) {
2391                         speed = SPEED_1000;
2392                         fd = DUPLEX_FULL;
2393                 } else if (f & SUPPORTED_1000baseT_Half)
2394                         speed = SPEED_1000;
2395                 else if (f & SUPPORTED_100baseT_Full) {
2396                         speed = SPEED_100;
2397                         fd = DUPLEX_FULL;
2398                 } else if (f & SUPPORTED_100baseT_Half)
2399                         speed = SPEED_100;
2400                 else if (f & SUPPORTED_10baseT_Full)
2401                         fd = DUPLEX_FULL;
2402
2403                 /* Force link parameters */
2404                 dev->phy.def->ops->setup_forced(&dev->phy, speed, fd);
2405         }
2406         return 0;
2407 }
2408
2409 static int __devinit emac_init_config(struct emac_instance *dev)
2410 {
2411         struct device_node *np = dev->ofdev->node;
2412         const void *p;
2413         unsigned int plen;
2414         const char *pm, *phy_modes[] = {
2415                 [PHY_MODE_NA] = "",
2416                 [PHY_MODE_MII] = "mii",
2417                 [PHY_MODE_RMII] = "rmii",
2418                 [PHY_MODE_SMII] = "smii",
2419                 [PHY_MODE_RGMII] = "rgmii",
2420                 [PHY_MODE_TBI] = "tbi",
2421                 [PHY_MODE_GMII] = "gmii",
2422                 [PHY_MODE_RTBI] = "rtbi",
2423                 [PHY_MODE_SGMII] = "sgmii",
2424         };
2425
2426         /* Read config from device-tree */
2427         if (emac_read_uint_prop(np, "mal-device", &dev->mal_ph, 1))
2428                 return -ENXIO;
2429         if (emac_read_uint_prop(np, "mal-tx-channel", &dev->mal_tx_chan, 1))
2430                 return -ENXIO;
2431         if (emac_read_uint_prop(np, "mal-rx-channel", &dev->mal_rx_chan, 1))
2432                 return -ENXIO;
2433         if (emac_read_uint_prop(np, "cell-index", &dev->cell_index, 1))
2434                 return -ENXIO;
2435         if (emac_read_uint_prop(np, "max-frame-size", &dev->max_mtu, 0))
2436                 dev->max_mtu = 1500;
2437         if (emac_read_uint_prop(np, "rx-fifo-size", &dev->rx_fifo_size, 0))
2438                 dev->rx_fifo_size = 2048;
2439         if (emac_read_uint_prop(np, "tx-fifo-size", &dev->tx_fifo_size, 0))
2440                 dev->tx_fifo_size = 2048;
2441         if (emac_read_uint_prop(np, "rx-fifo-size-gige", &dev->rx_fifo_size_gige, 0))
2442                 dev->rx_fifo_size_gige = dev->rx_fifo_size;
2443         if (emac_read_uint_prop(np, "tx-fifo-size-gige", &dev->tx_fifo_size_gige, 0))
2444                 dev->tx_fifo_size_gige = dev->tx_fifo_size;
2445         if (emac_read_uint_prop(np, "phy-address", &dev->phy_address, 0))
2446                 dev->phy_address = 0xffffffff;
2447         if (emac_read_uint_prop(np, "phy-map", &dev->phy_map, 0))
2448                 dev->phy_map = 0xffffffff;
2449         if (emac_read_uint_prop(np->parent, "clock-frequency", &dev->opb_bus_freq, 1))
2450                 return -ENXIO;
2451         if (emac_read_uint_prop(np, "tah-device", &dev->tah_ph, 0))
2452                 dev->tah_ph = 0;
2453         if (emac_read_uint_prop(np, "tah-channel", &dev->tah_port, 0))
2454                 dev->tah_port = 0;
2455         if (emac_read_uint_prop(np, "mdio-device", &dev->mdio_ph, 0))
2456                 dev->mdio_ph = 0;
2457         if (emac_read_uint_prop(np, "zmii-device", &dev->zmii_ph, 0))
2458                 dev->zmii_ph = 0;;
2459         if (emac_read_uint_prop(np, "zmii-channel", &dev->zmii_port, 0))
2460                 dev->zmii_port = 0xffffffff;;
2461         if (emac_read_uint_prop(np, "rgmii-device", &dev->rgmii_ph, 0))
2462                 dev->rgmii_ph = 0;;
2463         if (emac_read_uint_prop(np, "rgmii-channel", &dev->rgmii_port, 0))
2464                 dev->rgmii_port = 0xffffffff;;
2465         if (emac_read_uint_prop(np, "fifo-entry-size", &dev->fifo_entry_size, 0))
2466                 dev->fifo_entry_size = 16;
2467         if (emac_read_uint_prop(np, "mal-burst-size", &dev->mal_burst_size, 0))
2468                 dev->mal_burst_size = 256;
2469
2470         /* PHY mode needs some decoding */
2471         dev->phy_mode = PHY_MODE_NA;
2472         pm = of_get_property(np, "phy-mode", &plen);
2473         if (pm != NULL) {
2474                 int i;
2475                 for (i = 0; i < ARRAY_SIZE(phy_modes); i++)
2476                         if (!strcasecmp(pm, phy_modes[i])) {
2477                                 dev->phy_mode = i;
2478                                 break;
2479                         }
2480         }
2481
2482         /* Backward compat with non-final DT */
2483         if (dev->phy_mode == PHY_MODE_NA && pm != NULL && plen == 4) {
2484                 u32 nmode = *(const u32 *)pm;
2485                 if (nmode > PHY_MODE_NA && nmode <= PHY_MODE_SGMII)
2486                         dev->phy_mode = nmode;
2487         }
2488
2489         /* Check EMAC version */
2490         if (of_device_is_compatible(np, "ibm,emac4"))
2491                 dev->features |= EMAC_FTR_EMAC4;
2492
2493         /* Fixup some feature bits based on the device tree */
2494         if (of_get_property(np, "has-inverted-stacr-oc", NULL))
2495                 dev->features |= EMAC_FTR_STACR_OC_INVERT;
2496         if (of_get_property(np, "has-new-stacr-staopc", NULL))
2497                 dev->features |= EMAC_FTR_HAS_NEW_STACR;
2498
2499         /* CAB lacks the appropriate properties */
2500         if (of_device_is_compatible(np, "ibm,emac-axon"))
2501                 dev->features |= EMAC_FTR_HAS_NEW_STACR |
2502                         EMAC_FTR_STACR_OC_INVERT;
2503
2504         /* Enable TAH/ZMII/RGMII features as found */
2505         if (dev->tah_ph != 0) {
2506 #ifdef CONFIG_IBM_NEW_EMAC_TAH
2507                 dev->features |= EMAC_FTR_HAS_TAH;
2508 #else
2509                 printk(KERN_ERR "%s: TAH support not enabled !\n",
2510                        np->full_name);
2511                 return -ENXIO;
2512 #endif
2513         }
2514
2515         if (dev->zmii_ph != 0) {
2516 #ifdef CONFIG_IBM_NEW_EMAC_ZMII
2517                 dev->features |= EMAC_FTR_HAS_ZMII;
2518 #else
2519                 printk(KERN_ERR "%s: ZMII support not enabled !\n",
2520                        np->full_name);
2521                 return -ENXIO;
2522 #endif
2523         }
2524
2525         if (dev->rgmii_ph != 0) {
2526 #ifdef CONFIG_IBM_NEW_EMAC_RGMII
2527                 dev->features |= EMAC_FTR_HAS_RGMII;
2528 #else
2529                 printk(KERN_ERR "%s: RGMII support not enabled !\n",
2530                        np->full_name);
2531                 return -ENXIO;
2532 #endif
2533         }
2534
2535         /* Read MAC-address */
2536         p = of_get_property(np, "local-mac-address", NULL);
2537         if (p == NULL) {
2538                 printk(KERN_ERR "%s: Can't find local-mac-address property\n",
2539                        np->full_name);
2540                 return -ENXIO;
2541         }
2542         memcpy(dev->ndev->dev_addr, p, 6);
2543
2544         DBG(dev, "features     : 0x%08x / 0x%08x\n", dev->features, EMAC_FTRS_POSSIBLE);
2545         DBG(dev, "tx_fifo_size : %d (%d gige)\n", dev->tx_fifo_size, dev->tx_fifo_size_gige);
2546         DBG(dev, "rx_fifo_size : %d (%d gige)\n", dev->rx_fifo_size, dev->rx_fifo_size_gige);
2547         DBG(dev, "max_mtu      : %d\n", dev->max_mtu);
2548         DBG(dev, "OPB freq     : %d\n", dev->opb_bus_freq);
2549
2550         return 0;
2551 }
2552
2553 static int __devinit emac_probe(struct of_device *ofdev,
2554                                 const struct of_device_id *match)
2555 {
2556         struct net_device *ndev;
2557         struct emac_instance *dev;
2558         struct device_node *np = ofdev->node;
2559         struct device_node **blist = NULL;
2560         int err, i;
2561
2562         /* Skip unused/unwired EMACS */
2563         if (of_get_property(np, "unused", NULL))
2564                 return -ENODEV;
2565
2566         /* Find ourselves in the bootlist if we are there */
2567         for (i = 0; i < EMAC_BOOT_LIST_SIZE; i++)
2568                 if (emac_boot_list[i] == np)
2569                         blist = &emac_boot_list[i];
2570
2571         /* Allocate our net_device structure */
2572         err = -ENOMEM;
2573         ndev = alloc_etherdev(sizeof(struct emac_instance));
2574         if (!ndev) {
2575                 printk(KERN_ERR "%s: could not allocate ethernet device!\n",
2576                        np->full_name);
2577                 goto err_gone;
2578         }
2579         dev = netdev_priv(ndev);
2580         dev->ndev = ndev;
2581         dev->ofdev = ofdev;
2582         dev->blist = blist;
2583         SET_NETDEV_DEV(ndev, &ofdev->dev);
2584
2585         /* Initialize some embedded data structures */
2586         mutex_init(&dev->mdio_lock);
2587         mutex_init(&dev->link_lock);
2588         spin_lock_init(&dev->lock);
2589         INIT_WORK(&dev->reset_work, emac_reset_work);
2590
2591         /* Init various config data based on device-tree */
2592         err = emac_init_config(dev);
2593         if (err != 0)
2594                 goto err_free;
2595
2596         /* Get interrupts. EMAC irq is mandatory, WOL irq is optional */
2597         dev->emac_irq = irq_of_parse_and_map(np, 0);
2598         dev->wol_irq = irq_of_parse_and_map(np, 1);
2599         if (dev->emac_irq == NO_IRQ) {
2600                 printk(KERN_ERR "%s: Can't map main interrupt\n", np->full_name);
2601                 goto err_free;
2602         }
2603         ndev->irq = dev->emac_irq;
2604
2605         /* Map EMAC regs */
2606         if (of_address_to_resource(np, 0, &dev->rsrc_regs)) {
2607                 printk(KERN_ERR "%s: Can't get registers address\n",
2608                        np->full_name);
2609                 goto err_irq_unmap;
2610         }
2611         // TODO : request_mem_region
2612         dev->emacp = ioremap(dev->rsrc_regs.start, sizeof(struct emac_regs));
2613         if (dev->emacp == NULL) {
2614                 printk(KERN_ERR "%s: Can't map device registers!\n",
2615                        np->full_name);
2616                 err = -ENOMEM;
2617                 goto err_irq_unmap;
2618         }
2619
2620         /* Wait for dependent devices */
2621         err = emac_wait_deps(dev);
2622         if (err) {
2623                 printk(KERN_ERR
2624                        "%s: Timeout waiting for dependent devices\n",
2625                        np->full_name);
2626                 /*  display more info about what's missing ? */
2627                 goto err_reg_unmap;
2628         }
2629         dev->mal = dev_get_drvdata(&dev->mal_dev->dev);
2630         if (dev->mdio_dev != NULL)
2631                 dev->mdio_instance = dev_get_drvdata(&dev->mdio_dev->dev);
2632
2633         /* Register with MAL */
2634         dev->commac.ops = &emac_commac_ops;
2635         dev->commac.dev = dev;
2636         dev->commac.tx_chan_mask = MAL_CHAN_MASK(dev->mal_tx_chan);
2637         dev->commac.rx_chan_mask = MAL_CHAN_MASK(dev->mal_rx_chan);
2638         err = mal_register_commac(dev->mal, &dev->commac);
2639         if (err) {
2640                 printk(KERN_ERR "%s: failed to register with mal %s!\n",
2641                        np->full_name, dev->mal_dev->node->full_name);
2642                 goto err_rel_deps;
2643         }
2644         dev->rx_skb_size = emac_rx_skb_size(ndev->mtu);
2645         dev->rx_sync_size = emac_rx_sync_size(ndev->mtu);
2646
2647         /* Get pointers to BD rings */
2648         dev->tx_desc =
2649             dev->mal->bd_virt + mal_tx_bd_offset(dev->mal, dev->mal_tx_chan);
2650         dev->rx_desc =
2651             dev->mal->bd_virt + mal_rx_bd_offset(dev->mal, dev->mal_rx_chan);
2652
2653         DBG(dev, "tx_desc %p" NL, dev->tx_desc);
2654         DBG(dev, "rx_desc %p" NL, dev->rx_desc);
2655
2656         /* Clean rings */
2657         memset(dev->tx_desc, 0, NUM_TX_BUFF * sizeof(struct mal_descriptor));
2658         memset(dev->rx_desc, 0, NUM_RX_BUFF * sizeof(struct mal_descriptor));
2659
2660         /* Attach to ZMII, if needed */
2661         if (emac_has_feature(dev, EMAC_FTR_HAS_ZMII) &&
2662             (err = zmii_attach(dev->zmii_dev, dev->zmii_port, &dev->phy_mode)) != 0)
2663                 goto err_unreg_commac;
2664
2665         /* Attach to RGMII, if needed */
2666         if (emac_has_feature(dev, EMAC_FTR_HAS_RGMII) &&
2667             (err = rgmii_attach(dev->rgmii_dev, dev->rgmii_port, dev->phy_mode)) != 0)
2668                 goto err_detach_zmii;
2669
2670         /* Attach to TAH, if needed */
2671         if (emac_has_feature(dev, EMAC_FTR_HAS_TAH) &&
2672             (err = tah_attach(dev->tah_dev, dev->tah_port)) != 0)
2673                 goto err_detach_rgmii;
2674
2675         /* Set some link defaults before we can find out real parameters */
2676         dev->phy.speed = SPEED_100;
2677         dev->phy.duplex = DUPLEX_FULL;
2678         dev->phy.autoneg = AUTONEG_DISABLE;
2679         dev->phy.pause = dev->phy.asym_pause = 0;
2680         dev->stop_timeout = STOP_TIMEOUT_100;
2681         INIT_DELAYED_WORK(&dev->link_work, emac_link_timer);
2682
2683         /* Find PHY if any */
2684         err = emac_init_phy(dev);
2685         if (err != 0)
2686                 goto err_detach_tah;
2687
2688         /* Fill in the driver function table */
2689         ndev->open = &emac_open;
2690         if (dev->tah_dev)
2691                 ndev->features |= NETIF_F_IP_CSUM | NETIF_F_SG;
2692         ndev->tx_timeout = &emac_tx_timeout;
2693         ndev->watchdog_timeo = 5 * HZ;
2694         ndev->stop = &emac_close;
2695         ndev->get_stats = &emac_stats;
2696         ndev->set_multicast_list = &emac_set_multicast_list;
2697         ndev->do_ioctl = &emac_ioctl;
2698         if (emac_phy_supports_gige(dev->phy_mode)) {
2699                 ndev->hard_start_xmit = &emac_start_xmit_sg;
2700                 ndev->change_mtu = &emac_change_mtu;
2701                 dev->commac.ops = &emac_commac_sg_ops;
2702         } else {
2703                 ndev->hard_start_xmit = &emac_start_xmit;
2704         }
2705         SET_ETHTOOL_OPS(ndev, &emac_ethtool_ops);
2706
2707         netif_carrier_off(ndev);
2708         netif_stop_queue(ndev);
2709
2710         err = register_netdev(ndev);
2711         if (err) {
2712                 printk(KERN_ERR "%s: failed to register net device (%d)!\n",
2713                        np->full_name, err);
2714                 goto err_detach_tah;
2715         }
2716
2717         /* Set our drvdata last as we don't want them visible until we are
2718          * fully initialized
2719          */
2720         wmb();
2721         dev_set_drvdata(&ofdev->dev, dev);
2722
2723         /* There's a new kid in town ! Let's tell everybody */
2724         wake_up_all(&emac_probe_wait);
2725
2726
2727         printk(KERN_INFO
2728                "%s: EMAC-%d %s, MAC %02x:%02x:%02x:%02x:%02x:%02x\n",
2729                ndev->name, dev->cell_index, np->full_name,
2730                ndev->dev_addr[0], ndev->dev_addr[1], ndev->dev_addr[2],
2731                ndev->dev_addr[3], ndev->dev_addr[4], ndev->dev_addr[5]);
2732
2733         if (dev->phy.address >= 0)
2734                 printk("%s: found %s PHY (0x%02x)\n", ndev->name,
2735                        dev->phy.def->name, dev->phy.address);
2736
2737         emac_dbg_register(dev);
2738
2739         /* Life is good */
2740         return 0;
2741
2742         /* I have a bad feeling about this ... */
2743
2744  err_detach_tah:
2745         if (emac_has_feature(dev, EMAC_FTR_HAS_TAH))
2746                 tah_detach(dev->tah_dev, dev->tah_port);
2747  err_detach_rgmii:
2748         if (emac_has_feature(dev, EMAC_FTR_HAS_RGMII))
2749                 rgmii_detach(dev->rgmii_dev, dev->rgmii_port);
2750  err_detach_zmii:
2751         if (emac_has_feature(dev, EMAC_FTR_HAS_ZMII))
2752                 zmii_detach(dev->zmii_dev, dev->zmii_port);
2753  err_unreg_commac:
2754         mal_unregister_commac(dev->mal, &dev->commac);
2755  err_rel_deps:
2756         emac_put_deps(dev);
2757  err_reg_unmap:
2758         iounmap(dev->emacp);
2759  err_irq_unmap:
2760         if (dev->wol_irq != NO_IRQ)
2761                 irq_dispose_mapping(dev->wol_irq);
2762         if (dev->emac_irq != NO_IRQ)
2763                 irq_dispose_mapping(dev->emac_irq);
2764  err_free:
2765         kfree(ndev);
2766  err_gone:
2767         /* if we were on the bootlist, remove us as we won't show up and
2768          * wake up all waiters to notify them in case they were waiting
2769          * on us
2770          */
2771         if (blist) {
2772                 *blist = NULL;
2773                 wake_up_all(&emac_probe_wait);
2774         }
2775         return err;
2776 }
2777
2778 static int __devexit emac_remove(struct of_device *ofdev)
2779 {
2780         struct emac_instance *dev = dev_get_drvdata(&ofdev->dev);
2781
2782         DBG(dev, "remove" NL);
2783
2784         dev_set_drvdata(&ofdev->dev, NULL);
2785
2786         unregister_netdev(dev->ndev);
2787
2788         flush_scheduled_work();
2789
2790         if (emac_has_feature(dev, EMAC_FTR_HAS_TAH))
2791                 tah_detach(dev->tah_dev, dev->tah_port);
2792         if (emac_has_feature(dev, EMAC_FTR_HAS_RGMII))
2793                 rgmii_detach(dev->rgmii_dev, dev->rgmii_port);
2794         if (emac_has_feature(dev, EMAC_FTR_HAS_ZMII))
2795                 zmii_detach(dev->zmii_dev, dev->zmii_port);
2796
2797         mal_unregister_commac(dev->mal, &dev->commac);
2798         emac_put_deps(dev);
2799
2800         emac_dbg_unregister(dev);
2801         iounmap(dev->emacp);
2802
2803         if (dev->wol_irq != NO_IRQ)
2804                 irq_dispose_mapping(dev->wol_irq);
2805         if (dev->emac_irq != NO_IRQ)
2806                 irq_dispose_mapping(dev->emac_irq);
2807
2808         kfree(dev->ndev);
2809
2810         return 0;
2811 }
2812
2813 /* XXX Features in here should be replaced by properties... */
2814 static struct of_device_id emac_match[] =
2815 {
2816         {
2817                 .type           = "network",
2818                 .compatible     = "ibm,emac",
2819         },
2820         {
2821                 .type           = "network",
2822                 .compatible     = "ibm,emac4",
2823         },
2824         {},
2825 };
2826
2827 static struct of_platform_driver emac_driver = {
2828         .name = "emac",
2829         .match_table = emac_match,
2830
2831         .probe = emac_probe,
2832         .remove = emac_remove,
2833 };
2834
2835 static void __init emac_make_bootlist(void)
2836 {
2837         struct device_node *np = NULL;
2838         int j, max, i = 0, k;
2839         int cell_indices[EMAC_BOOT_LIST_SIZE];
2840
2841         /* Collect EMACs */
2842         while((np = of_find_all_nodes(np)) != NULL) {
2843                 const u32 *idx;
2844
2845                 if (of_match_node(emac_match, np) == NULL)
2846                         continue;
2847                 if (of_get_property(np, "unused", NULL))
2848                         continue;
2849                 idx = of_get_property(np, "cell-index", NULL);
2850                 if (idx == NULL)
2851                         continue;
2852                 cell_indices[i] = *idx;
2853                 emac_boot_list[i++] = of_node_get(np);
2854                 if (i >= EMAC_BOOT_LIST_SIZE) {
2855                         of_node_put(np);
2856                         break;
2857                 }
2858         }
2859         max = i;
2860
2861         /* Bubble sort them (doh, what a creative algorithm :-) */
2862         for (i = 0; max > 1 && (i < (max - 1)); i++)
2863                 for (j = i; j < max; j++) {
2864                         if (cell_indices[i] > cell_indices[j]) {
2865                                 np = emac_boot_list[i];
2866                                 emac_boot_list[i] = emac_boot_list[j];
2867                                 emac_boot_list[j] = np;
2868                                 k = cell_indices[i];
2869                                 cell_indices[i] = cell_indices[j];
2870                                 cell_indices[j] = k;
2871                         }
2872                 }
2873 }
2874
2875 static int __init emac_init(void)
2876 {
2877         int rc;
2878
2879         printk(KERN_INFO DRV_DESC ", version " DRV_VERSION "\n");
2880
2881         /* Init debug stuff */
2882         emac_init_debug();
2883
2884         /* Build EMAC boot list */
2885         emac_make_bootlist();
2886
2887         /* Init submodules */
2888         rc = mal_init();
2889         if (rc)
2890                 goto err;
2891         rc = zmii_init();
2892         if (rc)
2893                 goto err_mal;
2894         rc = rgmii_init();
2895         if (rc)
2896                 goto err_zmii;
2897         rc = tah_init();
2898         if (rc)
2899                 goto err_rgmii;
2900         rc = of_register_platform_driver(&emac_driver);
2901         if (rc)
2902                 goto err_tah;
2903
2904         return 0;
2905
2906  err_tah:
2907         tah_exit();
2908  err_rgmii:
2909         rgmii_exit();
2910  err_zmii:
2911         zmii_exit();
2912  err_mal:
2913         mal_exit();
2914  err:
2915         return rc;
2916 }
2917
2918 static void __exit emac_exit(void)
2919 {
2920         int i;
2921
2922         of_unregister_platform_driver(&emac_driver);
2923
2924         tah_exit();
2925         rgmii_exit();
2926         zmii_exit();
2927         mal_exit();
2928         emac_fini_debug();
2929
2930         /* Destroy EMAC boot list */
2931         for (i = 0; i < EMAC_BOOT_LIST_SIZE; i++)
2932                 if (emac_boot_list[i])
2933                         of_node_put(emac_boot_list[i]);
2934 }
2935
2936 module_init(emac_init);
2937 module_exit(emac_exit);