GNU Linux-libre 4.4.288-gnu1
[releases.git] / drivers / net / ethernet / smsc / smc911x.c
1 /*
2  * smc911x.c
3  * This is a driver for SMSC's LAN911{5,6,7,8} single-chip Ethernet devices.
4  *
5  * Copyright (C) 2005 Sensoria Corp
6  *         Derived from the unified SMC91x driver by Nicolas Pitre
7  *         and the smsc911x.c reference driver by SMSC
8  *
9  * This program is free software; you can redistribute it and/or modify
10  * it under the terms of the GNU General Public License as published by
11  * the Free Software Foundation; either version 2 of the License, or
12  * (at your option) any later version.
13  *
14  * This program is distributed in the hope that it will be useful,
15  * but WITHOUT ANY WARRANTY; without even the implied warranty of
16  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17  * GNU General Public License for more details.
18  *
19  * You should have received a copy of the GNU General Public License
20  * along with this program; if not, see <http://www.gnu.org/licenses/>.
21  *
22  * Arguments:
23  *       watchdog  = TX watchdog timeout
24  *       tx_fifo_kb = Size of TX FIFO in KB
25  *
26  * History:
27  *        04/16/05      Dustin McIntire          Initial version
28  */
29 static const char version[] =
30          "smc911x.c: v1.0 04-16-2005 by Dustin McIntire <dustin@sensoria.com>\n";
31
32 /* Debugging options */
33 #define ENABLE_SMC_DEBUG_RX             0
34 #define ENABLE_SMC_DEBUG_TX             0
35 #define ENABLE_SMC_DEBUG_DMA            0
36 #define ENABLE_SMC_DEBUG_PKTS           0
37 #define ENABLE_SMC_DEBUG_MISC           0
38 #define ENABLE_SMC_DEBUG_FUNC           0
39
40 #define SMC_DEBUG_RX            ((ENABLE_SMC_DEBUG_RX   ? 1 : 0) << 0)
41 #define SMC_DEBUG_TX            ((ENABLE_SMC_DEBUG_TX   ? 1 : 0) << 1)
42 #define SMC_DEBUG_DMA           ((ENABLE_SMC_DEBUG_DMA  ? 1 : 0) << 2)
43 #define SMC_DEBUG_PKTS          ((ENABLE_SMC_DEBUG_PKTS ? 1 : 0) << 3)
44 #define SMC_DEBUG_MISC          ((ENABLE_SMC_DEBUG_MISC ? 1 : 0) << 4)
45 #define SMC_DEBUG_FUNC          ((ENABLE_SMC_DEBUG_FUNC ? 1 : 0) << 5)
46
47 #ifndef SMC_DEBUG
48 #define SMC_DEBUG        ( SMC_DEBUG_RX   | \
49                            SMC_DEBUG_TX   | \
50                            SMC_DEBUG_DMA  | \
51                            SMC_DEBUG_PKTS | \
52                            SMC_DEBUG_MISC | \
53                            SMC_DEBUG_FUNC   \
54                          )
55 #endif
56
57 #include <linux/module.h>
58 #include <linux/kernel.h>
59 #include <linux/sched.h>
60 #include <linux/delay.h>
61 #include <linux/interrupt.h>
62 #include <linux/errno.h>
63 #include <linux/ioport.h>
64 #include <linux/crc32.h>
65 #include <linux/device.h>
66 #include <linux/platform_device.h>
67 #include <linux/spinlock.h>
68 #include <linux/ethtool.h>
69 #include <linux/mii.h>
70 #include <linux/workqueue.h>
71
72 #include <linux/netdevice.h>
73 #include <linux/etherdevice.h>
74 #include <linux/skbuff.h>
75
76 #include <asm/io.h>
77
78 #include "smc911x.h"
79
80 /*
81  * Transmit timeout, default 5 seconds.
82  */
83 static int watchdog = 5000;
84 module_param(watchdog, int, 0400);
85 MODULE_PARM_DESC(watchdog, "transmit timeout in milliseconds");
86
87 static int tx_fifo_kb=8;
88 module_param(tx_fifo_kb, int, 0400);
89 MODULE_PARM_DESC(tx_fifo_kb,"transmit FIFO size in KB (1<x<15)(default=8)");
90
91 MODULE_LICENSE("GPL");
92 MODULE_ALIAS("platform:smc911x");
93
94 /*
95  * The internal workings of the driver.  If you are changing anything
96  * here with the SMC stuff, you should have the datasheet and know
97  * what you are doing.
98  */
99 #define CARDNAME "smc911x"
100
101 /*
102  * Use power-down feature of the chip
103  */
104 #define POWER_DOWN               1
105
106 #if SMC_DEBUG > 0
107 #define DBG(n, dev, args...)                     \
108         do {                                     \
109                 if (SMC_DEBUG & (n))             \
110                         netdev_dbg(dev, args);   \
111         } while (0)
112
113 #define PRINTK(dev, args...)   netdev_info(dev, args)
114 #else
115 #define DBG(n, dev, args...)   do { } while (0)
116 #define PRINTK(dev, args...)   netdev_dbg(dev, args)
117 #endif
118
119 #if SMC_DEBUG_PKTS > 0
120 static void PRINT_PKT(u_char *buf, int length)
121 {
122         int i;
123         int remainder;
124         int lines;
125
126         lines = length / 16;
127         remainder = length % 16;
128
129         for (i = 0; i < lines ; i ++) {
130                 int cur;
131                 printk(KERN_DEBUG);
132                 for (cur = 0; cur < 8; cur++) {
133                         u_char a, b;
134                         a = *buf++;
135                         b = *buf++;
136                         pr_cont("%02x%02x ", a, b);
137                 }
138                 pr_cont("\n");
139         }
140         printk(KERN_DEBUG);
141         for (i = 0; i < remainder/2 ; i++) {
142                 u_char a, b;
143                 a = *buf++;
144                 b = *buf++;
145                 pr_cont("%02x%02x ", a, b);
146         }
147         pr_cont("\n");
148 }
149 #else
150 #define PRINT_PKT(x...)  do { } while (0)
151 #endif
152
153
154 /* this enables an interrupt in the interrupt mask register */
155 #define SMC_ENABLE_INT(lp, x) do {                      \
156         unsigned int  __mask;                           \
157         __mask = SMC_GET_INT_EN((lp));                  \
158         __mask |= (x);                                  \
159         SMC_SET_INT_EN((lp), __mask);                   \
160 } while (0)
161
162 /* this disables an interrupt from the interrupt mask register */
163 #define SMC_DISABLE_INT(lp, x) do {                     \
164         unsigned int  __mask;                           \
165         __mask = SMC_GET_INT_EN((lp));                  \
166         __mask &= ~(x);                                 \
167         SMC_SET_INT_EN((lp), __mask);                   \
168 } while (0)
169
170 /*
171  * this does a soft reset on the device
172  */
173 static void smc911x_reset(struct net_device *dev)
174 {
175         struct smc911x_local *lp = netdev_priv(dev);
176         unsigned int reg, timeout=0, resets=1, irq_cfg;
177         unsigned long flags;
178
179         DBG(SMC_DEBUG_FUNC, dev, "--> %s\n", __func__);
180
181         /*       Take out of PM setting first */
182         if ((SMC_GET_PMT_CTRL(lp) & PMT_CTRL_READY_) == 0) {
183                 /* Write to the bytetest will take out of powerdown */
184                 SMC_SET_BYTE_TEST(lp, 0);
185                 timeout=10;
186                 do {
187                         udelay(10);
188                         reg = SMC_GET_PMT_CTRL(lp) & PMT_CTRL_READY_;
189                 } while (--timeout && !reg);
190                 if (timeout == 0) {
191                         PRINTK(dev, "smc911x_reset timeout waiting for PM restore\n");
192                         return;
193                 }
194         }
195
196         /* Disable all interrupts */
197         spin_lock_irqsave(&lp->lock, flags);
198         SMC_SET_INT_EN(lp, 0);
199         spin_unlock_irqrestore(&lp->lock, flags);
200
201         while (resets--) {
202                 SMC_SET_HW_CFG(lp, HW_CFG_SRST_);
203                 timeout=10;
204                 do {
205                         udelay(10);
206                         reg = SMC_GET_HW_CFG(lp);
207                         /* If chip indicates reset timeout then try again */
208                         if (reg & HW_CFG_SRST_TO_) {
209                                 PRINTK(dev, "chip reset timeout, retrying...\n");
210                                 resets++;
211                                 break;
212                         }
213                 } while (--timeout && (reg & HW_CFG_SRST_));
214         }
215         if (timeout == 0) {
216                 PRINTK(dev, "smc911x_reset timeout waiting for reset\n");
217                 return;
218         }
219
220         /* make sure EEPROM has finished loading before setting GPIO_CFG */
221         timeout=1000;
222         while (--timeout && (SMC_GET_E2P_CMD(lp) & E2P_CMD_EPC_BUSY_))
223                 udelay(10);
224
225         if (timeout == 0){
226                 PRINTK(dev, "smc911x_reset timeout waiting for EEPROM busy\n");
227                 return;
228         }
229
230         /* Initialize interrupts */
231         SMC_SET_INT_EN(lp, 0);
232         SMC_ACK_INT(lp, -1);
233
234         /* Reset the FIFO level and flow control settings */
235         SMC_SET_HW_CFG(lp, (lp->tx_fifo_kb & 0xF) << 16);
236 //TODO: Figure out what appropriate pause time is
237         SMC_SET_FLOW(lp, FLOW_FCPT_ | FLOW_FCEN_);
238         SMC_SET_AFC_CFG(lp, lp->afc_cfg);
239
240
241         /* Set to LED outputs */
242         SMC_SET_GPIO_CFG(lp, 0x70070000);
243
244         /*
245          * Deassert IRQ for 1*10us for edge type interrupts
246          * and drive IRQ pin push-pull
247          */
248         irq_cfg = (1 << 24) | INT_CFG_IRQ_EN_ | INT_CFG_IRQ_TYPE_;
249 #ifdef SMC_DYNAMIC_BUS_CONFIG
250         if (lp->cfg.irq_polarity)
251                 irq_cfg |= INT_CFG_IRQ_POL_;
252 #endif
253         SMC_SET_IRQ_CFG(lp, irq_cfg);
254
255         /* clear anything saved */
256         if (lp->pending_tx_skb != NULL) {
257                 dev_kfree_skb (lp->pending_tx_skb);
258                 lp->pending_tx_skb = NULL;
259                 dev->stats.tx_errors++;
260                 dev->stats.tx_aborted_errors++;
261         }
262 }
263
264 /*
265  * Enable Interrupts, Receive, and Transmit
266  */
267 static void smc911x_enable(struct net_device *dev)
268 {
269         struct smc911x_local *lp = netdev_priv(dev);
270         unsigned mask, cfg, cr;
271         unsigned long flags;
272
273         DBG(SMC_DEBUG_FUNC, dev, "--> %s\n", __func__);
274
275         spin_lock_irqsave(&lp->lock, flags);
276
277         SMC_SET_MAC_ADDR(lp, dev->dev_addr);
278
279         /* Enable TX */
280         cfg = SMC_GET_HW_CFG(lp);
281         cfg &= HW_CFG_TX_FIF_SZ_ | 0xFFF;
282         cfg |= HW_CFG_SF_;
283         SMC_SET_HW_CFG(lp, cfg);
284         SMC_SET_FIFO_TDA(lp, 0xFF);
285         /* Update TX stats on every 64 packets received or every 1 sec */
286         SMC_SET_FIFO_TSL(lp, 64);
287         SMC_SET_GPT_CFG(lp, GPT_CFG_TIMER_EN_ | 10000);
288
289         SMC_GET_MAC_CR(lp, cr);
290         cr |= MAC_CR_TXEN_ | MAC_CR_HBDIS_;
291         SMC_SET_MAC_CR(lp, cr);
292         SMC_SET_TX_CFG(lp, TX_CFG_TX_ON_);
293
294         /* Add 2 byte padding to start of packets */
295         SMC_SET_RX_CFG(lp, (2<<8) & RX_CFG_RXDOFF_);
296
297         /* Turn on receiver and enable RX */
298         if (cr & MAC_CR_RXEN_)
299                 DBG(SMC_DEBUG_RX, dev, "Receiver already enabled\n");
300
301         SMC_SET_MAC_CR(lp, cr | MAC_CR_RXEN_);
302
303         /* Interrupt on every received packet */
304         SMC_SET_FIFO_RSA(lp, 0x01);
305         SMC_SET_FIFO_RSL(lp, 0x00);
306
307         /* now, enable interrupts */
308         mask = INT_EN_TDFA_EN_ | INT_EN_TSFL_EN_ | INT_EN_RSFL_EN_ |
309                 INT_EN_GPT_INT_EN_ | INT_EN_RXDFH_INT_EN_ | INT_EN_RXE_EN_ |
310                 INT_EN_PHY_INT_EN_;
311         if (IS_REV_A(lp->revision))
312                 mask|=INT_EN_RDFL_EN_;
313         else {
314                 mask|=INT_EN_RDFO_EN_;
315         }
316         SMC_ENABLE_INT(lp, mask);
317
318         spin_unlock_irqrestore(&lp->lock, flags);
319 }
320
321 /*
322  * this puts the device in an inactive state
323  */
324 static void smc911x_shutdown(struct net_device *dev)
325 {
326         struct smc911x_local *lp = netdev_priv(dev);
327         unsigned cr;
328         unsigned long flags;
329
330         DBG(SMC_DEBUG_FUNC, dev, "%s: --> %s\n", CARDNAME, __func__);
331
332         /* Disable IRQ's */
333         SMC_SET_INT_EN(lp, 0);
334
335         /* Turn of Rx and TX */
336         spin_lock_irqsave(&lp->lock, flags);
337         SMC_GET_MAC_CR(lp, cr);
338         cr &= ~(MAC_CR_TXEN_ | MAC_CR_RXEN_ | MAC_CR_HBDIS_);
339         SMC_SET_MAC_CR(lp, cr);
340         SMC_SET_TX_CFG(lp, TX_CFG_STOP_TX_);
341         spin_unlock_irqrestore(&lp->lock, flags);
342 }
343
344 static inline void smc911x_drop_pkt(struct net_device *dev)
345 {
346         struct smc911x_local *lp = netdev_priv(dev);
347         unsigned int fifo_count, timeout, reg;
348
349         DBG(SMC_DEBUG_FUNC | SMC_DEBUG_RX, dev, "%s: --> %s\n",
350             CARDNAME, __func__);
351         fifo_count = SMC_GET_RX_FIFO_INF(lp) & 0xFFFF;
352         if (fifo_count <= 4) {
353                 /* Manually dump the packet data */
354                 while (fifo_count--)
355                         SMC_GET_RX_FIFO(lp);
356         } else   {
357                 /* Fast forward through the bad packet */
358                 SMC_SET_RX_DP_CTRL(lp, RX_DP_CTRL_FFWD_BUSY_);
359                 timeout=50;
360                 do {
361                         udelay(10);
362                         reg = SMC_GET_RX_DP_CTRL(lp) & RX_DP_CTRL_FFWD_BUSY_;
363                 } while (--timeout && reg);
364                 if (timeout == 0) {
365                         PRINTK(dev, "timeout waiting for RX fast forward\n");
366                 }
367         }
368 }
369
370 /*
371  * This is the procedure to handle the receipt of a packet.
372  * It should be called after checking for packet presence in
373  * the RX status FIFO.   It must be called with the spin lock
374  * already held.
375  */
376 static inline void       smc911x_rcv(struct net_device *dev)
377 {
378         struct smc911x_local *lp = netdev_priv(dev);
379         unsigned int pkt_len, status;
380         struct sk_buff *skb;
381         unsigned char *data;
382
383         DBG(SMC_DEBUG_FUNC | SMC_DEBUG_RX, dev, "--> %s\n",
384             __func__);
385         status = SMC_GET_RX_STS_FIFO(lp);
386         DBG(SMC_DEBUG_RX, dev, "Rx pkt len %d status 0x%08x\n",
387             (status & 0x3fff0000) >> 16, status & 0xc000ffff);
388         pkt_len = (status & RX_STS_PKT_LEN_) >> 16;
389         if (status & RX_STS_ES_) {
390                 /* Deal with a bad packet */
391                 dev->stats.rx_errors++;
392                 if (status & RX_STS_CRC_ERR_)
393                         dev->stats.rx_crc_errors++;
394                 else {
395                         if (status & RX_STS_LEN_ERR_)
396                                 dev->stats.rx_length_errors++;
397                         if (status & RX_STS_MCAST_)
398                                 dev->stats.multicast++;
399                 }
400                 /* Remove the bad packet data from the RX FIFO */
401                 smc911x_drop_pkt(dev);
402         } else {
403                 /* Receive a valid packet */
404                 /* Alloc a buffer with extra room for DMA alignment */
405                 skb = netdev_alloc_skb(dev, pkt_len+32);
406                 if (unlikely(skb == NULL)) {
407                         PRINTK(dev, "Low memory, rcvd packet dropped.\n");
408                         dev->stats.rx_dropped++;
409                         smc911x_drop_pkt(dev);
410                         return;
411                 }
412                 /* Align IP header to 32 bits
413                  * Note that the device is configured to add a 2
414                  * byte padding to the packet start, so we really
415                  * want to write to the orignal data pointer */
416                 data = skb->data;
417                 skb_reserve(skb, 2);
418                 skb_put(skb,pkt_len-4);
419 #ifdef SMC_USE_DMA
420                 {
421                 unsigned int fifo;
422                 /* Lower the FIFO threshold if possible */
423                 fifo = SMC_GET_FIFO_INT(lp);
424                 if (fifo & 0xFF) fifo--;
425                 DBG(SMC_DEBUG_RX, dev, "Setting RX stat FIFO threshold to %d\n",
426                     fifo & 0xff);
427                 SMC_SET_FIFO_INT(lp, fifo);
428                 /* Setup RX DMA */
429                 SMC_SET_RX_CFG(lp, RX_CFG_RX_END_ALGN16_ | ((2<<8) & RX_CFG_RXDOFF_));
430                 lp->rxdma_active = 1;
431                 lp->current_rx_skb = skb;
432                 SMC_PULL_DATA(lp, data, (pkt_len+2+15) & ~15);
433                 /* Packet processing deferred to DMA RX interrupt */
434                 }
435 #else
436                 SMC_SET_RX_CFG(lp, RX_CFG_RX_END_ALGN4_ | ((2<<8) & RX_CFG_RXDOFF_));
437                 SMC_PULL_DATA(lp, data, pkt_len+2+3);
438
439                 DBG(SMC_DEBUG_PKTS, dev, "Received packet\n");
440                 PRINT_PKT(data, ((pkt_len - 4) <= 64) ? pkt_len - 4 : 64);
441                 skb->protocol = eth_type_trans(skb, dev);
442                 netif_rx(skb);
443                 dev->stats.rx_packets++;
444                 dev->stats.rx_bytes += pkt_len-4;
445 #endif
446         }
447 }
448
449 /*
450  * This is called to actually send a packet to the chip.
451  */
452 static void smc911x_hardware_send_pkt(struct net_device *dev)
453 {
454         struct smc911x_local *lp = netdev_priv(dev);
455         struct sk_buff *skb;
456         unsigned int cmdA, cmdB, len;
457         unsigned char *buf;
458
459         DBG(SMC_DEBUG_FUNC | SMC_DEBUG_TX, dev, "--> %s\n", __func__);
460         BUG_ON(lp->pending_tx_skb == NULL);
461
462         skb = lp->pending_tx_skb;
463         lp->pending_tx_skb = NULL;
464
465         /* cmdA {25:24] data alignment [20:16] start offset [10:0] buffer length */
466         /* cmdB {31:16] pkt tag [10:0] length */
467 #ifdef SMC_USE_DMA
468         /* 16 byte buffer alignment mode */
469         buf = (char*)((u32)(skb->data) & ~0xF);
470         len = (skb->len + 0xF + ((u32)skb->data & 0xF)) & ~0xF;
471         cmdA = (1<<24) | (((u32)skb->data & 0xF)<<16) |
472                         TX_CMD_A_INT_FIRST_SEG_ | TX_CMD_A_INT_LAST_SEG_ |
473                         skb->len;
474 #else
475         buf = (char*)((u32)skb->data & ~0x3);
476         len = (skb->len + 3 + ((u32)skb->data & 3)) & ~0x3;
477         cmdA = (((u32)skb->data & 0x3) << 16) |
478                         TX_CMD_A_INT_FIRST_SEG_ | TX_CMD_A_INT_LAST_SEG_ |
479                         skb->len;
480 #endif
481         /* tag is packet length so we can use this in stats update later */
482         cmdB = (skb->len  << 16) | (skb->len & 0x7FF);
483
484         DBG(SMC_DEBUG_TX, dev, "TX PKT LENGTH 0x%04x (%d) BUF 0x%p CMDA 0x%08x CMDB 0x%08x\n",
485             len, len, buf, cmdA, cmdB);
486         SMC_SET_TX_FIFO(lp, cmdA);
487         SMC_SET_TX_FIFO(lp, cmdB);
488
489         DBG(SMC_DEBUG_PKTS, dev, "Transmitted packet\n");
490         PRINT_PKT(buf, len <= 64 ? len : 64);
491
492         /* Send pkt via PIO or DMA */
493 #ifdef SMC_USE_DMA
494         lp->current_tx_skb = skb;
495         SMC_PUSH_DATA(lp, buf, len);
496         /* DMA complete IRQ will free buffer and set jiffies */
497 #else
498         SMC_PUSH_DATA(lp, buf, len);
499         dev->trans_start = jiffies;
500         dev_kfree_skb_irq(skb);
501 #endif
502         if (!lp->tx_throttle) {
503                 netif_wake_queue(dev);
504         }
505         SMC_ENABLE_INT(lp, INT_EN_TDFA_EN_ | INT_EN_TSFL_EN_);
506 }
507
508 /*
509  * Since I am not sure if I will have enough room in the chip's ram
510  * to store the packet, I call this routine which either sends it
511  * now, or set the card to generates an interrupt when ready
512  * for the packet.
513  */
514 static netdev_tx_t
515 smc911x_hard_start_xmit(struct sk_buff *skb, struct net_device *dev)
516 {
517         struct smc911x_local *lp = netdev_priv(dev);
518         unsigned int free;
519         unsigned long flags;
520
521         DBG(SMC_DEBUG_FUNC | SMC_DEBUG_TX, dev, "--> %s\n",
522             __func__);
523
524         spin_lock_irqsave(&lp->lock, flags);
525
526         BUG_ON(lp->pending_tx_skb != NULL);
527
528         free = SMC_GET_TX_FIFO_INF(lp) & TX_FIFO_INF_TDFREE_;
529         DBG(SMC_DEBUG_TX, dev, "TX free space %d\n", free);
530
531         /* Turn off the flow when running out of space in FIFO */
532         if (free <= SMC911X_TX_FIFO_LOW_THRESHOLD) {
533                 DBG(SMC_DEBUG_TX, dev, "Disabling data flow due to low FIFO space (%d)\n",
534                     free);
535                 /* Reenable when at least 1 packet of size MTU present */
536                 SMC_SET_FIFO_TDA(lp, (SMC911X_TX_FIFO_LOW_THRESHOLD)/64);
537                 lp->tx_throttle = 1;
538                 netif_stop_queue(dev);
539         }
540
541         /* Drop packets when we run out of space in TX FIFO
542          * Account for overhead required for:
543          *
544          *        Tx command words                       8 bytes
545          *        Start offset                           15 bytes
546          *        End padding                            15 bytes
547          */
548         if (unlikely(free < (skb->len + 8 + 15 + 15))) {
549                 netdev_warn(dev, "No Tx free space %d < %d\n",
550                             free, skb->len);
551                 lp->pending_tx_skb = NULL;
552                 dev->stats.tx_errors++;
553                 dev->stats.tx_dropped++;
554                 spin_unlock_irqrestore(&lp->lock, flags);
555                 dev_kfree_skb_any(skb);
556                 return NETDEV_TX_OK;
557         }
558
559 #ifdef SMC_USE_DMA
560         {
561                 /* If the DMA is already running then defer this packet Tx until
562                  * the DMA IRQ starts it
563                  */
564                 if (lp->txdma_active) {
565                         DBG(SMC_DEBUG_TX | SMC_DEBUG_DMA, dev, "Tx DMA running, deferring packet\n");
566                         lp->pending_tx_skb = skb;
567                         netif_stop_queue(dev);
568                         spin_unlock_irqrestore(&lp->lock, flags);
569                         return NETDEV_TX_OK;
570                 } else {
571                         DBG(SMC_DEBUG_TX | SMC_DEBUG_DMA, dev, "Activating Tx DMA\n");
572                         lp->txdma_active = 1;
573                 }
574         }
575 #endif
576         lp->pending_tx_skb = skb;
577         smc911x_hardware_send_pkt(dev);
578         spin_unlock_irqrestore(&lp->lock, flags);
579
580         return NETDEV_TX_OK;
581 }
582
583 /*
584  * This handles a TX status interrupt, which is only called when:
585  * - a TX error occurred, or
586  * - TX of a packet completed.
587  */
588 static void smc911x_tx(struct net_device *dev)
589 {
590         struct smc911x_local *lp = netdev_priv(dev);
591         unsigned int tx_status;
592
593         DBG(SMC_DEBUG_FUNC | SMC_DEBUG_TX, dev, "--> %s\n",
594             __func__);
595
596         /* Collect the TX status */
597         while (((SMC_GET_TX_FIFO_INF(lp) & TX_FIFO_INF_TSUSED_) >> 16) != 0) {
598                 DBG(SMC_DEBUG_TX, dev, "Tx stat FIFO used 0x%04x\n",
599                     (SMC_GET_TX_FIFO_INF(lp) & TX_FIFO_INF_TSUSED_) >> 16);
600                 tx_status = SMC_GET_TX_STS_FIFO(lp);
601                 dev->stats.tx_packets++;
602                 dev->stats.tx_bytes+=tx_status>>16;
603                 DBG(SMC_DEBUG_TX, dev, "Tx FIFO tag 0x%04x status 0x%04x\n",
604                     (tx_status & 0xffff0000) >> 16,
605                     tx_status & 0x0000ffff);
606                 /* count Tx errors, but ignore lost carrier errors when in
607                  * full-duplex mode */
608                 if ((tx_status & TX_STS_ES_) && !(lp->ctl_rfduplx &&
609                     !(tx_status & 0x00000306))) {
610                         dev->stats.tx_errors++;
611                 }
612                 if (tx_status & TX_STS_MANY_COLL_) {
613                         dev->stats.collisions+=16;
614                         dev->stats.tx_aborted_errors++;
615                 } else {
616                         dev->stats.collisions+=(tx_status & TX_STS_COLL_CNT_) >> 3;
617                 }
618                 /* carrier error only has meaning for half-duplex communication */
619                 if ((tx_status & (TX_STS_LOC_ | TX_STS_NO_CARR_)) &&
620                     !lp->ctl_rfduplx) {
621                         dev->stats.tx_carrier_errors++;
622                 }
623                 if (tx_status & TX_STS_LATE_COLL_) {
624                         dev->stats.collisions++;
625                         dev->stats.tx_aborted_errors++;
626                 }
627         }
628 }
629
630
631 /*---PHY CONTROL AND CONFIGURATION-----------------------------------------*/
632 /*
633  * Reads a register from the MII Management serial interface
634  */
635
636 static int smc911x_phy_read(struct net_device *dev, int phyaddr, int phyreg)
637 {
638         struct smc911x_local *lp = netdev_priv(dev);
639         unsigned int phydata;
640
641         SMC_GET_MII(lp, phyreg, phyaddr, phydata);
642
643         DBG(SMC_DEBUG_MISC, dev, "%s: phyaddr=0x%x, phyreg=0x%02x, phydata=0x%04x\n",
644             __func__, phyaddr, phyreg, phydata);
645         return phydata;
646 }
647
648
649 /*
650  * Writes a register to the MII Management serial interface
651  */
652 static void smc911x_phy_write(struct net_device *dev, int phyaddr, int phyreg,
653                         int phydata)
654 {
655         struct smc911x_local *lp = netdev_priv(dev);
656
657         DBG(SMC_DEBUG_MISC, dev, "%s: phyaddr=0x%x, phyreg=0x%x, phydata=0x%x\n",
658             __func__, phyaddr, phyreg, phydata);
659
660         SMC_SET_MII(lp, phyreg, phyaddr, phydata);
661 }
662
663 /*
664  * Finds and reports the PHY address (115 and 117 have external
665  * PHY interface 118 has internal only
666  */
667 static void smc911x_phy_detect(struct net_device *dev)
668 {
669         struct smc911x_local *lp = netdev_priv(dev);
670         int phyaddr;
671         unsigned int cfg, id1, id2;
672
673         DBG(SMC_DEBUG_FUNC, dev, "--> %s\n", __func__);
674
675         lp->phy_type = 0;
676
677         /*
678          * Scan all 32 PHY addresses if necessary, starting at
679          * PHY#1 to PHY#31, and then PHY#0 last.
680          */
681         switch(lp->version) {
682                 case CHIP_9115:
683                 case CHIP_9117:
684                 case CHIP_9215:
685                 case CHIP_9217:
686                         cfg = SMC_GET_HW_CFG(lp);
687                         if (cfg & HW_CFG_EXT_PHY_DET_) {
688                                 cfg &= ~HW_CFG_PHY_CLK_SEL_;
689                                 cfg |= HW_CFG_PHY_CLK_SEL_CLK_DIS_;
690                                 SMC_SET_HW_CFG(lp, cfg);
691                                 udelay(10); /* Wait for clocks to stop */
692
693                                 cfg |= HW_CFG_EXT_PHY_EN_;
694                                 SMC_SET_HW_CFG(lp, cfg);
695                                 udelay(10); /* Wait for clocks to stop */
696
697                                 cfg &= ~HW_CFG_PHY_CLK_SEL_;
698                                 cfg |= HW_CFG_PHY_CLK_SEL_EXT_PHY_;
699                                 SMC_SET_HW_CFG(lp, cfg);
700                                 udelay(10); /* Wait for clocks to stop */
701
702                                 cfg |= HW_CFG_SMI_SEL_;
703                                 SMC_SET_HW_CFG(lp, cfg);
704
705                                 for (phyaddr = 1; phyaddr < 32; ++phyaddr) {
706
707                                         /* Read the PHY identifiers */
708                                         SMC_GET_PHY_ID1(lp, phyaddr & 31, id1);
709                                         SMC_GET_PHY_ID2(lp, phyaddr & 31, id2);
710
711                                         /* Make sure it is a valid identifier */
712                                         if (id1 != 0x0000 && id1 != 0xffff &&
713                                             id1 != 0x8000 && id2 != 0x0000 &&
714                                             id2 != 0xffff && id2 != 0x8000) {
715                                                 /* Save the PHY's address */
716                                                 lp->mii.phy_id = phyaddr & 31;
717                                                 lp->phy_type = id1 << 16 | id2;
718                                                 break;
719                                         }
720                                 }
721                                 if (phyaddr < 32)
722                                         /* Found an external PHY */
723                                         break;
724                         }
725                 default:
726                         /* Internal media only */
727                         SMC_GET_PHY_ID1(lp, 1, id1);
728                         SMC_GET_PHY_ID2(lp, 1, id2);
729                         /* Save the PHY's address */
730                         lp->mii.phy_id = 1;
731                         lp->phy_type = id1 << 16 | id2;
732         }
733
734         DBG(SMC_DEBUG_MISC, dev, "phy_id1=0x%x, phy_id2=0x%x phyaddr=0x%x\n",
735             id1, id2, lp->mii.phy_id);
736 }
737
738 /*
739  * Sets the PHY to a configuration as determined by the user.
740  * Called with spin_lock held.
741  */
742 static int smc911x_phy_fixed(struct net_device *dev)
743 {
744         struct smc911x_local *lp = netdev_priv(dev);
745         int phyaddr = lp->mii.phy_id;
746         int bmcr;
747
748         DBG(SMC_DEBUG_FUNC, dev, "--> %s\n", __func__);
749
750         /* Enter Link Disable state */
751         SMC_GET_PHY_BMCR(lp, phyaddr, bmcr);
752         bmcr |= BMCR_PDOWN;
753         SMC_SET_PHY_BMCR(lp, phyaddr, bmcr);
754
755         /*
756          * Set our fixed capabilities
757          * Disable auto-negotiation
758          */
759         bmcr &= ~BMCR_ANENABLE;
760         if (lp->ctl_rfduplx)
761                 bmcr |= BMCR_FULLDPLX;
762
763         if (lp->ctl_rspeed == 100)
764                 bmcr |= BMCR_SPEED100;
765
766         /* Write our capabilities to the phy control register */
767         SMC_SET_PHY_BMCR(lp, phyaddr, bmcr);
768
769         /* Re-Configure the Receive/Phy Control register */
770         bmcr &= ~BMCR_PDOWN;
771         SMC_SET_PHY_BMCR(lp, phyaddr, bmcr);
772
773         return 1;
774 }
775
776 /**
777  * smc911x_phy_reset - reset the phy
778  * @dev: net device
779  * @phy: phy address
780  *
781  * Issue a software reset for the specified PHY and
782  * wait up to 100ms for the reset to complete.   We should
783  * not access the PHY for 50ms after issuing the reset.
784  *
785  * The time to wait appears to be dependent on the PHY.
786  *
787  */
788 static int smc911x_phy_reset(struct net_device *dev, int phy)
789 {
790         struct smc911x_local *lp = netdev_priv(dev);
791         int timeout;
792         unsigned long flags;
793         unsigned int reg;
794
795         DBG(SMC_DEBUG_FUNC, dev, "--> %s()\n", __func__);
796
797         spin_lock_irqsave(&lp->lock, flags);
798         reg = SMC_GET_PMT_CTRL(lp);
799         reg &= ~0xfffff030;
800         reg |= PMT_CTRL_PHY_RST_;
801         SMC_SET_PMT_CTRL(lp, reg);
802         spin_unlock_irqrestore(&lp->lock, flags);
803         for (timeout = 2; timeout; timeout--) {
804                 msleep(50);
805                 spin_lock_irqsave(&lp->lock, flags);
806                 reg = SMC_GET_PMT_CTRL(lp);
807                 spin_unlock_irqrestore(&lp->lock, flags);
808                 if (!(reg & PMT_CTRL_PHY_RST_)) {
809                         /* extra delay required because the phy may
810                          * not be completed with its reset
811                          * when PHY_BCR_RESET_ is cleared. 256us
812                          * should suffice, but use 500us to be safe
813                          */
814                         udelay(500);
815                 break;
816                 }
817         }
818
819         return reg & PMT_CTRL_PHY_RST_;
820 }
821
822 /**
823  * smc911x_phy_powerdown - powerdown phy
824  * @dev: net device
825  * @phy: phy address
826  *
827  * Power down the specified PHY
828  */
829 static void smc911x_phy_powerdown(struct net_device *dev, int phy)
830 {
831         struct smc911x_local *lp = netdev_priv(dev);
832         unsigned int bmcr;
833
834         /* Enter Link Disable state */
835         SMC_GET_PHY_BMCR(lp, phy, bmcr);
836         bmcr |= BMCR_PDOWN;
837         SMC_SET_PHY_BMCR(lp, phy, bmcr);
838 }
839
840 /**
841  * smc911x_phy_check_media - check the media status and adjust BMCR
842  * @dev: net device
843  * @init: set true for initialisation
844  *
845  * Select duplex mode depending on negotiation state.   This
846  * also updates our carrier state.
847  */
848 static void smc911x_phy_check_media(struct net_device *dev, int init)
849 {
850         struct smc911x_local *lp = netdev_priv(dev);
851         int phyaddr = lp->mii.phy_id;
852         unsigned int bmcr, cr;
853
854         DBG(SMC_DEBUG_FUNC, dev, "--> %s\n", __func__);
855
856         if (mii_check_media(&lp->mii, netif_msg_link(lp), init)) {
857                 /* duplex state has changed */
858                 SMC_GET_PHY_BMCR(lp, phyaddr, bmcr);
859                 SMC_GET_MAC_CR(lp, cr);
860                 if (lp->mii.full_duplex) {
861                         DBG(SMC_DEBUG_MISC, dev, "Configuring for full-duplex mode\n");
862                         bmcr |= BMCR_FULLDPLX;
863                         cr |= MAC_CR_RCVOWN_;
864                 } else {
865                         DBG(SMC_DEBUG_MISC, dev, "Configuring for half-duplex mode\n");
866                         bmcr &= ~BMCR_FULLDPLX;
867                         cr &= ~MAC_CR_RCVOWN_;
868                 }
869                 SMC_SET_PHY_BMCR(lp, phyaddr, bmcr);
870                 SMC_SET_MAC_CR(lp, cr);
871         }
872 }
873
874 /*
875  * Configures the specified PHY through the MII management interface
876  * using Autonegotiation.
877  * Calls smc911x_phy_fixed() if the user has requested a certain config.
878  * If RPC ANEG bit is set, the media selection is dependent purely on
879  * the selection by the MII (either in the MII BMCR reg or the result
880  * of autonegotiation.)  If the RPC ANEG bit is cleared, the selection
881  * is controlled by the RPC SPEED and RPC DPLX bits.
882  */
883 static void smc911x_phy_configure(struct work_struct *work)
884 {
885         struct smc911x_local *lp = container_of(work, struct smc911x_local,
886                                                 phy_configure);
887         struct net_device *dev = lp->netdev;
888         int phyaddr = lp->mii.phy_id;
889         int my_phy_caps; /* My PHY capabilities */
890         int my_ad_caps; /* My Advertised capabilities */
891         int status;
892         unsigned long flags;
893
894         DBG(SMC_DEBUG_FUNC, dev, "--> %s()\n", __func__);
895
896         /*
897          * We should not be called if phy_type is zero.
898          */
899         if (lp->phy_type == 0)
900                 return;
901
902         if (smc911x_phy_reset(dev, phyaddr)) {
903                 netdev_info(dev, "PHY reset timed out\n");
904                 return;
905         }
906         spin_lock_irqsave(&lp->lock, flags);
907
908         /*
909          * Enable PHY Interrupts (for register 18)
910          * Interrupts listed here are enabled
911          */
912         SMC_SET_PHY_INT_MASK(lp, phyaddr, PHY_INT_MASK_ENERGY_ON_ |
913                  PHY_INT_MASK_ANEG_COMP_ | PHY_INT_MASK_REMOTE_FAULT_ |
914                  PHY_INT_MASK_LINK_DOWN_);
915
916         /* If the user requested no auto neg, then go set his request */
917         if (lp->mii.force_media) {
918                 smc911x_phy_fixed(dev);
919                 goto smc911x_phy_configure_exit;
920         }
921
922         /* Copy our capabilities from MII_BMSR to MII_ADVERTISE */
923         SMC_GET_PHY_BMSR(lp, phyaddr, my_phy_caps);
924         if (!(my_phy_caps & BMSR_ANEGCAPABLE)) {
925                 netdev_info(dev, "Auto negotiation NOT supported\n");
926                 smc911x_phy_fixed(dev);
927                 goto smc911x_phy_configure_exit;
928         }
929
930         /* CSMA capable w/ both pauses */
931         my_ad_caps = ADVERTISE_CSMA | ADVERTISE_PAUSE_CAP | ADVERTISE_PAUSE_ASYM;
932
933         if (my_phy_caps & BMSR_100BASE4)
934                 my_ad_caps |= ADVERTISE_100BASE4;
935         if (my_phy_caps & BMSR_100FULL)
936                 my_ad_caps |= ADVERTISE_100FULL;
937         if (my_phy_caps & BMSR_100HALF)
938                 my_ad_caps |= ADVERTISE_100HALF;
939         if (my_phy_caps & BMSR_10FULL)
940                 my_ad_caps |= ADVERTISE_10FULL;
941         if (my_phy_caps & BMSR_10HALF)
942                 my_ad_caps |= ADVERTISE_10HALF;
943
944         /* Disable capabilities not selected by our user */
945         if (lp->ctl_rspeed != 100)
946                 my_ad_caps &= ~(ADVERTISE_100BASE4|ADVERTISE_100FULL|ADVERTISE_100HALF);
947
948         if (!lp->ctl_rfduplx)
949                 my_ad_caps &= ~(ADVERTISE_100FULL|ADVERTISE_10FULL);
950
951         /* Update our Auto-Neg Advertisement Register */
952         SMC_SET_PHY_MII_ADV(lp, phyaddr, my_ad_caps);
953         lp->mii.advertising = my_ad_caps;
954
955         /*
956          * Read the register back.       Without this, it appears that when
957          * auto-negotiation is restarted, sometimes it isn't ready and
958          * the link does not come up.
959          */
960         udelay(10);
961         SMC_GET_PHY_MII_ADV(lp, phyaddr, status);
962
963         DBG(SMC_DEBUG_MISC, dev, "phy caps=0x%04x\n", my_phy_caps);
964         DBG(SMC_DEBUG_MISC, dev, "phy advertised caps=0x%04x\n", my_ad_caps);
965
966         /* Restart auto-negotiation process in order to advertise my caps */
967         SMC_SET_PHY_BMCR(lp, phyaddr, BMCR_ANENABLE | BMCR_ANRESTART);
968
969         smc911x_phy_check_media(dev, 1);
970
971 smc911x_phy_configure_exit:
972         spin_unlock_irqrestore(&lp->lock, flags);
973 }
974
975 /*
976  * smc911x_phy_interrupt
977  *
978  * Purpose:  Handle interrupts relating to PHY register 18. This is
979  *       called from the "hard" interrupt handler under our private spinlock.
980  */
981 static void smc911x_phy_interrupt(struct net_device *dev)
982 {
983         struct smc911x_local *lp = netdev_priv(dev);
984         int phyaddr = lp->mii.phy_id;
985         int status;
986
987         DBG(SMC_DEBUG_FUNC, dev, "--> %s\n", __func__);
988
989         if (lp->phy_type == 0)
990                 return;
991
992         smc911x_phy_check_media(dev, 0);
993         /* read to clear status bits */
994         SMC_GET_PHY_INT_SRC(lp, phyaddr,status);
995         DBG(SMC_DEBUG_MISC, dev, "PHY interrupt status 0x%04x\n",
996             status & 0xffff);
997         DBG(SMC_DEBUG_MISC, dev, "AFC_CFG 0x%08x\n",
998             SMC_GET_AFC_CFG(lp));
999 }
1000
1001 /*--- END PHY CONTROL AND CONFIGURATION-------------------------------------*/
1002
1003 /*
1004  * This is the main routine of the driver, to handle the device when
1005  * it needs some attention.
1006  */
1007 static irqreturn_t smc911x_interrupt(int irq, void *dev_id)
1008 {
1009         struct net_device *dev = dev_id;
1010         struct smc911x_local *lp = netdev_priv(dev);
1011         unsigned int status, mask, timeout;
1012         unsigned int rx_overrun=0, cr, pkts;
1013         unsigned long flags;
1014
1015         DBG(SMC_DEBUG_FUNC, dev, "--> %s\n", __func__);
1016
1017         spin_lock_irqsave(&lp->lock, flags);
1018
1019         /* Spurious interrupt check */
1020         if ((SMC_GET_IRQ_CFG(lp) & (INT_CFG_IRQ_INT_ | INT_CFG_IRQ_EN_)) !=
1021                 (INT_CFG_IRQ_INT_ | INT_CFG_IRQ_EN_)) {
1022                 spin_unlock_irqrestore(&lp->lock, flags);
1023                 return IRQ_NONE;
1024         }
1025
1026         mask = SMC_GET_INT_EN(lp);
1027         SMC_SET_INT_EN(lp, 0);
1028
1029         /* set a timeout value, so I don't stay here forever */
1030         timeout = 8;
1031
1032
1033         do {
1034                 status = SMC_GET_INT(lp);
1035
1036                 DBG(SMC_DEBUG_MISC, dev, "INT 0x%08x MASK 0x%08x OUTSIDE MASK 0x%08x\n",
1037                     status, mask, status & ~mask);
1038
1039                 status &= mask;
1040                 if (!status)
1041                         break;
1042
1043                 /* Handle SW interrupt condition */
1044                 if (status & INT_STS_SW_INT_) {
1045                         SMC_ACK_INT(lp, INT_STS_SW_INT_);
1046                         mask &= ~INT_EN_SW_INT_EN_;
1047                 }
1048                 /* Handle various error conditions */
1049                 if (status & INT_STS_RXE_) {
1050                         SMC_ACK_INT(lp, INT_STS_RXE_);
1051                         dev->stats.rx_errors++;
1052                 }
1053                 if (status & INT_STS_RXDFH_INT_) {
1054                         SMC_ACK_INT(lp, INT_STS_RXDFH_INT_);
1055                         dev->stats.rx_dropped+=SMC_GET_RX_DROP(lp);
1056                  }
1057                 /* Undocumented interrupt-what is the right thing to do here? */
1058                 if (status & INT_STS_RXDF_INT_) {
1059                         SMC_ACK_INT(lp, INT_STS_RXDF_INT_);
1060                 }
1061
1062                 /* Rx Data FIFO exceeds set level */
1063                 if (status & INT_STS_RDFL_) {
1064                         if (IS_REV_A(lp->revision)) {
1065                                 rx_overrun=1;
1066                                 SMC_GET_MAC_CR(lp, cr);
1067                                 cr &= ~MAC_CR_RXEN_;
1068                                 SMC_SET_MAC_CR(lp, cr);
1069                                 DBG(SMC_DEBUG_RX, dev, "RX overrun\n");
1070                                 dev->stats.rx_errors++;
1071                                 dev->stats.rx_fifo_errors++;
1072                         }
1073                         SMC_ACK_INT(lp, INT_STS_RDFL_);
1074                 }
1075                 if (status & INT_STS_RDFO_) {
1076                         if (!IS_REV_A(lp->revision)) {
1077                                 SMC_GET_MAC_CR(lp, cr);
1078                                 cr &= ~MAC_CR_RXEN_;
1079                                 SMC_SET_MAC_CR(lp, cr);
1080                                 rx_overrun=1;
1081                                 DBG(SMC_DEBUG_RX, dev, "RX overrun\n");
1082                                 dev->stats.rx_errors++;
1083                                 dev->stats.rx_fifo_errors++;
1084                         }
1085                         SMC_ACK_INT(lp, INT_STS_RDFO_);
1086                 }
1087                 /* Handle receive condition */
1088                 if ((status & INT_STS_RSFL_) || rx_overrun) {
1089                         unsigned int fifo;
1090                         DBG(SMC_DEBUG_RX, dev, "RX irq\n");
1091                         fifo = SMC_GET_RX_FIFO_INF(lp);
1092                         pkts = (fifo & RX_FIFO_INF_RXSUSED_) >> 16;
1093                         DBG(SMC_DEBUG_RX, dev, "Rx FIFO pkts %d, bytes %d\n",
1094                             pkts, fifo & 0xFFFF);
1095                         if (pkts != 0) {
1096 #ifdef SMC_USE_DMA
1097                                 unsigned int fifo;
1098                                 if (lp->rxdma_active){
1099                                         DBG(SMC_DEBUG_RX | SMC_DEBUG_DMA, dev,
1100                                             "RX DMA active\n");
1101                                         /* The DMA is already running so up the IRQ threshold */
1102                                         fifo = SMC_GET_FIFO_INT(lp) & ~0xFF;
1103                                         fifo |= pkts & 0xFF;
1104                                         DBG(SMC_DEBUG_RX, dev,
1105                                             "Setting RX stat FIFO threshold to %d\n",
1106                                             fifo & 0xff);
1107                                         SMC_SET_FIFO_INT(lp, fifo);
1108                                 } else
1109 #endif
1110                                 smc911x_rcv(dev);
1111                         }
1112                         SMC_ACK_INT(lp, INT_STS_RSFL_);
1113                 }
1114                 /* Handle transmit FIFO available */
1115                 if (status & INT_STS_TDFA_) {
1116                         DBG(SMC_DEBUG_TX, dev, "TX data FIFO space available irq\n");
1117                         SMC_SET_FIFO_TDA(lp, 0xFF);
1118                         lp->tx_throttle = 0;
1119 #ifdef SMC_USE_DMA
1120                         if (!lp->txdma_active)
1121 #endif
1122                                 netif_wake_queue(dev);
1123                         SMC_ACK_INT(lp, INT_STS_TDFA_);
1124                 }
1125                 /* Handle transmit done condition */
1126 #if 1
1127                 if (status & (INT_STS_TSFL_ | INT_STS_GPT_INT_)) {
1128                         DBG(SMC_DEBUG_TX | SMC_DEBUG_MISC, dev,
1129                             "Tx stat FIFO limit (%d) /GPT irq\n",
1130                             (SMC_GET_FIFO_INT(lp) & 0x00ff0000) >> 16);
1131                         smc911x_tx(dev);
1132                         SMC_SET_GPT_CFG(lp, GPT_CFG_TIMER_EN_ | 10000);
1133                         SMC_ACK_INT(lp, INT_STS_TSFL_);
1134                         SMC_ACK_INT(lp, INT_STS_TSFL_ | INT_STS_GPT_INT_);
1135                 }
1136 #else
1137                 if (status & INT_STS_TSFL_) {
1138                         DBG(SMC_DEBUG_TX, dev, "TX status FIFO limit (%d) irq\n", ?);
1139                         smc911x_tx(dev);
1140                         SMC_ACK_INT(lp, INT_STS_TSFL_);
1141                 }
1142
1143                 if (status & INT_STS_GPT_INT_) {
1144                         DBG(SMC_DEBUG_RX, dev, "IRQ_CFG 0x%08x FIFO_INT 0x%08x RX_CFG 0x%08x\n",
1145                             SMC_GET_IRQ_CFG(lp),
1146                             SMC_GET_FIFO_INT(lp),
1147                             SMC_GET_RX_CFG(lp));
1148                         DBG(SMC_DEBUG_RX, dev, "Rx Stat FIFO Used 0x%02x Data FIFO Used 0x%04x Stat FIFO 0x%08x\n",
1149                             (SMC_GET_RX_FIFO_INF(lp) & 0x00ff0000) >> 16,
1150                             SMC_GET_RX_FIFO_INF(lp) & 0xffff,
1151                             SMC_GET_RX_STS_FIFO_PEEK(lp));
1152                         SMC_SET_GPT_CFG(lp, GPT_CFG_TIMER_EN_ | 10000);
1153                         SMC_ACK_INT(lp, INT_STS_GPT_INT_);
1154                 }
1155 #endif
1156
1157                 /* Handle PHY interrupt condition */
1158                 if (status & INT_STS_PHY_INT_) {
1159                         DBG(SMC_DEBUG_MISC, dev, "PHY irq\n");
1160                         smc911x_phy_interrupt(dev);
1161                         SMC_ACK_INT(lp, INT_STS_PHY_INT_);
1162                 }
1163         } while (--timeout);
1164
1165         /* restore mask state */
1166         SMC_SET_INT_EN(lp, mask);
1167
1168         DBG(SMC_DEBUG_MISC, dev, "Interrupt done (%d loops)\n",
1169             8-timeout);
1170
1171         spin_unlock_irqrestore(&lp->lock, flags);
1172
1173         return IRQ_HANDLED;
1174 }
1175
1176 #ifdef SMC_USE_DMA
1177 static void
1178 smc911x_tx_dma_irq(int dma, void *data)
1179 {
1180         struct net_device *dev = (struct net_device *)data;
1181         struct smc911x_local *lp = netdev_priv(dev);
1182         struct sk_buff *skb = lp->current_tx_skb;
1183         unsigned long flags;
1184
1185         DBG(SMC_DEBUG_FUNC, dev, "--> %s\n", __func__);
1186
1187         DBG(SMC_DEBUG_TX | SMC_DEBUG_DMA, dev, "TX DMA irq handler\n");
1188         /* Clear the DMA interrupt sources */
1189         SMC_DMA_ACK_IRQ(dev, dma);
1190         BUG_ON(skb == NULL);
1191         dma_unmap_single(NULL, tx_dmabuf, tx_dmalen, DMA_TO_DEVICE);
1192         dev->trans_start = jiffies;
1193         dev_kfree_skb_irq(skb);
1194         lp->current_tx_skb = NULL;
1195         if (lp->pending_tx_skb != NULL)
1196                 smc911x_hardware_send_pkt(dev);
1197         else {
1198                 DBG(SMC_DEBUG_TX | SMC_DEBUG_DMA, dev,
1199                     "No pending Tx packets. DMA disabled\n");
1200                 spin_lock_irqsave(&lp->lock, flags);
1201                 lp->txdma_active = 0;
1202                 if (!lp->tx_throttle) {
1203                         netif_wake_queue(dev);
1204                 }
1205                 spin_unlock_irqrestore(&lp->lock, flags);
1206         }
1207
1208         DBG(SMC_DEBUG_TX | SMC_DEBUG_DMA, dev,
1209             "TX DMA irq completed\n");
1210 }
1211 static void
1212 smc911x_rx_dma_irq(int dma, void *data)
1213 {
1214         struct net_device *dev = (struct net_device *)data;
1215         struct smc911x_local *lp = netdev_priv(dev);
1216         struct sk_buff *skb = lp->current_rx_skb;
1217         unsigned long flags;
1218         unsigned int pkts;
1219
1220         DBG(SMC_DEBUG_FUNC, dev, "--> %s\n", __func__);
1221         DBG(SMC_DEBUG_RX | SMC_DEBUG_DMA, dev, "RX DMA irq handler\n");
1222         /* Clear the DMA interrupt sources */
1223         SMC_DMA_ACK_IRQ(dev, dma);
1224         dma_unmap_single(NULL, rx_dmabuf, rx_dmalen, DMA_FROM_DEVICE);
1225         BUG_ON(skb == NULL);
1226         lp->current_rx_skb = NULL;
1227         PRINT_PKT(skb->data, skb->len);
1228         skb->protocol = eth_type_trans(skb, dev);
1229         dev->stats.rx_packets++;
1230         dev->stats.rx_bytes += skb->len;
1231         netif_rx(skb);
1232
1233         spin_lock_irqsave(&lp->lock, flags);
1234         pkts = (SMC_GET_RX_FIFO_INF(lp) & RX_FIFO_INF_RXSUSED_) >> 16;
1235         if (pkts != 0) {
1236                 smc911x_rcv(dev);
1237         }else {
1238                 lp->rxdma_active = 0;
1239         }
1240         spin_unlock_irqrestore(&lp->lock, flags);
1241         DBG(SMC_DEBUG_RX | SMC_DEBUG_DMA, dev,
1242             "RX DMA irq completed. DMA RX FIFO PKTS %d\n",
1243             pkts);
1244 }
1245 #endif   /* SMC_USE_DMA */
1246
1247 #ifdef CONFIG_NET_POLL_CONTROLLER
1248 /*
1249  * Polling receive - used by netconsole and other diagnostic tools
1250  * to allow network i/o with interrupts disabled.
1251  */
1252 static void smc911x_poll_controller(struct net_device *dev)
1253 {
1254         disable_irq(dev->irq);
1255         smc911x_interrupt(dev->irq, dev);
1256         enable_irq(dev->irq);
1257 }
1258 #endif
1259
1260 /* Our watchdog timed out. Called by the networking layer */
1261 static void smc911x_timeout(struct net_device *dev)
1262 {
1263         struct smc911x_local *lp = netdev_priv(dev);
1264         int status, mask;
1265         unsigned long flags;
1266
1267         DBG(SMC_DEBUG_FUNC, dev, "--> %s\n", __func__);
1268
1269         spin_lock_irqsave(&lp->lock, flags);
1270         status = SMC_GET_INT(lp);
1271         mask = SMC_GET_INT_EN(lp);
1272         spin_unlock_irqrestore(&lp->lock, flags);
1273         DBG(SMC_DEBUG_MISC, dev, "INT 0x%02x MASK 0x%02x\n",
1274             status, mask);
1275
1276         /* Dump the current TX FIFO contents and restart */
1277         mask = SMC_GET_TX_CFG(lp);
1278         SMC_SET_TX_CFG(lp, mask | TX_CFG_TXS_DUMP_ | TX_CFG_TXD_DUMP_);
1279         /*
1280          * Reconfiguring the PHY doesn't seem like a bad idea here, but
1281          * smc911x_phy_configure() calls msleep() which calls schedule_timeout()
1282          * which calls schedule().       Hence we use a work queue.
1283          */
1284         if (lp->phy_type != 0)
1285                 schedule_work(&lp->phy_configure);
1286
1287         /* We can accept TX packets again */
1288         dev->trans_start = jiffies; /* prevent tx timeout */
1289         netif_wake_queue(dev);
1290 }
1291
1292 /*
1293  * This routine will, depending on the values passed to it,
1294  * either make it accept multicast packets, go into
1295  * promiscuous mode (for TCPDUMP and cousins) or accept
1296  * a select set of multicast packets
1297  */
1298 static void smc911x_set_multicast_list(struct net_device *dev)
1299 {
1300         struct smc911x_local *lp = netdev_priv(dev);
1301         unsigned int multicast_table[2];
1302         unsigned int mcr, update_multicast = 0;
1303         unsigned long flags;
1304
1305         DBG(SMC_DEBUG_FUNC, dev, "--> %s\n", __func__);
1306
1307         spin_lock_irqsave(&lp->lock, flags);
1308         SMC_GET_MAC_CR(lp, mcr);
1309         spin_unlock_irqrestore(&lp->lock, flags);
1310
1311         if (dev->flags & IFF_PROMISC) {
1312
1313                 DBG(SMC_DEBUG_MISC, dev, "RCR_PRMS\n");
1314                 mcr |= MAC_CR_PRMS_;
1315         }
1316         /*
1317          * Here, I am setting this to accept all multicast packets.
1318          * I don't need to zero the multicast table, because the flag is
1319          * checked before the table is
1320          */
1321         else if (dev->flags & IFF_ALLMULTI || netdev_mc_count(dev) > 16) {
1322                 DBG(SMC_DEBUG_MISC, dev, "RCR_ALMUL\n");
1323                 mcr |= MAC_CR_MCPAS_;
1324         }
1325
1326         /*
1327          * This sets the internal hardware table to filter out unwanted
1328          * multicast packets before they take up memory.
1329          *
1330          * The SMC chip uses a hash table where the high 6 bits of the CRC of
1331          * address are the offset into the table.       If that bit is 1, then the
1332          * multicast packet is accepted.  Otherwise, it's dropped silently.
1333          *
1334          * To use the 6 bits as an offset into the table, the high 1 bit is
1335          * the number of the 32 bit register, while the low 5 bits are the bit
1336          * within that register.
1337          */
1338         else if (!netdev_mc_empty(dev)) {
1339                 struct netdev_hw_addr *ha;
1340
1341                 /* Set the Hash perfec mode */
1342                 mcr |= MAC_CR_HPFILT_;
1343
1344                 /* start with a table of all zeros: reject all */
1345                 memset(multicast_table, 0, sizeof(multicast_table));
1346
1347                 netdev_for_each_mc_addr(ha, dev) {
1348                         u32 position;
1349
1350                         /* upper 6 bits are used as hash index */
1351                         position = ether_crc(ETH_ALEN, ha->addr)>>26;
1352
1353                         multicast_table[position>>5] |= 1 << (position&0x1f);
1354                 }
1355
1356                 /* be sure I get rid of flags I might have set */
1357                 mcr &= ~(MAC_CR_PRMS_ | MAC_CR_MCPAS_);
1358
1359                 /* now, the table can be loaded into the chipset */
1360                 update_multicast = 1;
1361         } else   {
1362                 DBG(SMC_DEBUG_MISC, dev, "~(MAC_CR_PRMS_|MAC_CR_MCPAS_)\n");
1363                 mcr &= ~(MAC_CR_PRMS_ | MAC_CR_MCPAS_);
1364
1365                 /*
1366                  * since I'm disabling all multicast entirely, I need to
1367                  * clear the multicast list
1368                  */
1369                 memset(multicast_table, 0, sizeof(multicast_table));
1370                 update_multicast = 1;
1371         }
1372
1373         spin_lock_irqsave(&lp->lock, flags);
1374         SMC_SET_MAC_CR(lp, mcr);
1375         if (update_multicast) {
1376                 DBG(SMC_DEBUG_MISC, dev,
1377                     "update mcast hash table 0x%08x 0x%08x\n",
1378                     multicast_table[0], multicast_table[1]);
1379                 SMC_SET_HASHL(lp, multicast_table[0]);
1380                 SMC_SET_HASHH(lp, multicast_table[1]);
1381         }
1382         spin_unlock_irqrestore(&lp->lock, flags);
1383 }
1384
1385
1386 /*
1387  * Open and Initialize the board
1388  *
1389  * Set up everything, reset the card, etc..
1390  */
1391 static int
1392 smc911x_open(struct net_device *dev)
1393 {
1394         struct smc911x_local *lp = netdev_priv(dev);
1395
1396         DBG(SMC_DEBUG_FUNC, dev, "--> %s\n", __func__);
1397
1398         /* reset the hardware */
1399         smc911x_reset(dev);
1400
1401         /* Configure the PHY, initialize the link state */
1402         smc911x_phy_configure(&lp->phy_configure);
1403
1404         /* Turn on Tx + Rx */
1405         smc911x_enable(dev);
1406
1407         netif_start_queue(dev);
1408
1409         return 0;
1410 }
1411
1412 /*
1413  * smc911x_close
1414  *
1415  * this makes the board clean up everything that it can
1416  * and not talk to the outside world.    Caused by
1417  * an 'ifconfig ethX down'
1418  */
1419 static int smc911x_close(struct net_device *dev)
1420 {
1421         struct smc911x_local *lp = netdev_priv(dev);
1422
1423         DBG(SMC_DEBUG_FUNC, dev, "--> %s\n", __func__);
1424
1425         netif_stop_queue(dev);
1426         netif_carrier_off(dev);
1427
1428         /* clear everything */
1429         smc911x_shutdown(dev);
1430
1431         if (lp->phy_type != 0) {
1432                 /* We need to ensure that no calls to
1433                  * smc911x_phy_configure are pending.
1434                  */
1435                 cancel_work_sync(&lp->phy_configure);
1436                 smc911x_phy_powerdown(dev, lp->mii.phy_id);
1437         }
1438
1439         if (lp->pending_tx_skb) {
1440                 dev_kfree_skb(lp->pending_tx_skb);
1441                 lp->pending_tx_skb = NULL;
1442         }
1443
1444         return 0;
1445 }
1446
1447 /*
1448  * Ethtool support
1449  */
1450 static int
1451 smc911x_ethtool_getsettings(struct net_device *dev, struct ethtool_cmd *cmd)
1452 {
1453         struct smc911x_local *lp = netdev_priv(dev);
1454         int ret, status;
1455         unsigned long flags;
1456
1457         DBG(SMC_DEBUG_FUNC, dev, "--> %s\n", __func__);
1458         cmd->maxtxpkt = 1;
1459         cmd->maxrxpkt = 1;
1460
1461         if (lp->phy_type != 0) {
1462                 spin_lock_irqsave(&lp->lock, flags);
1463                 ret = mii_ethtool_gset(&lp->mii, cmd);
1464                 spin_unlock_irqrestore(&lp->lock, flags);
1465         } else {
1466                 cmd->supported = SUPPORTED_10baseT_Half |
1467                                 SUPPORTED_10baseT_Full |
1468                                 SUPPORTED_TP | SUPPORTED_AUI;
1469
1470                 if (lp->ctl_rspeed == 10)
1471                         ethtool_cmd_speed_set(cmd, SPEED_10);
1472                 else if (lp->ctl_rspeed == 100)
1473                         ethtool_cmd_speed_set(cmd, SPEED_100);
1474
1475                 cmd->autoneg = AUTONEG_DISABLE;
1476                 if (lp->mii.phy_id==1)
1477                         cmd->transceiver = XCVR_INTERNAL;
1478                 else
1479                         cmd->transceiver = XCVR_EXTERNAL;
1480                 cmd->port = 0;
1481                 SMC_GET_PHY_SPECIAL(lp, lp->mii.phy_id, status);
1482                 cmd->duplex =
1483                         (status & (PHY_SPECIAL_SPD_10FULL_ | PHY_SPECIAL_SPD_100FULL_)) ?
1484                                 DUPLEX_FULL : DUPLEX_HALF;
1485                 ret = 0;
1486         }
1487
1488         return ret;
1489 }
1490
1491 static int
1492 smc911x_ethtool_setsettings(struct net_device *dev, struct ethtool_cmd *cmd)
1493 {
1494         struct smc911x_local *lp = netdev_priv(dev);
1495         int ret;
1496         unsigned long flags;
1497
1498         if (lp->phy_type != 0) {
1499                 spin_lock_irqsave(&lp->lock, flags);
1500                 ret = mii_ethtool_sset(&lp->mii, cmd);
1501                 spin_unlock_irqrestore(&lp->lock, flags);
1502         } else {
1503                 if (cmd->autoneg != AUTONEG_DISABLE ||
1504                         cmd->speed != SPEED_10 ||
1505                         (cmd->duplex != DUPLEX_HALF && cmd->duplex != DUPLEX_FULL) ||
1506                         (cmd->port != PORT_TP && cmd->port != PORT_AUI))
1507                         return -EINVAL;
1508
1509                 lp->ctl_rfduplx = cmd->duplex == DUPLEX_FULL;
1510
1511                 ret = 0;
1512         }
1513
1514         return ret;
1515 }
1516
1517 static void
1518 smc911x_ethtool_getdrvinfo(struct net_device *dev, struct ethtool_drvinfo *info)
1519 {
1520         strlcpy(info->driver, CARDNAME, sizeof(info->driver));
1521         strlcpy(info->version, version, sizeof(info->version));
1522         strlcpy(info->bus_info, dev_name(dev->dev.parent),
1523                 sizeof(info->bus_info));
1524 }
1525
1526 static int smc911x_ethtool_nwayreset(struct net_device *dev)
1527 {
1528         struct smc911x_local *lp = netdev_priv(dev);
1529         int ret = -EINVAL;
1530         unsigned long flags;
1531
1532         if (lp->phy_type != 0) {
1533                 spin_lock_irqsave(&lp->lock, flags);
1534                 ret = mii_nway_restart(&lp->mii);
1535                 spin_unlock_irqrestore(&lp->lock, flags);
1536         }
1537
1538         return ret;
1539 }
1540
1541 static u32 smc911x_ethtool_getmsglevel(struct net_device *dev)
1542 {
1543         struct smc911x_local *lp = netdev_priv(dev);
1544         return lp->msg_enable;
1545 }
1546
1547 static void smc911x_ethtool_setmsglevel(struct net_device *dev, u32 level)
1548 {
1549         struct smc911x_local *lp = netdev_priv(dev);
1550         lp->msg_enable = level;
1551 }
1552
1553 static int smc911x_ethtool_getregslen(struct net_device *dev)
1554 {
1555         /* System regs + MAC regs + PHY regs */
1556         return (((E2P_CMD - ID_REV)/4 + 1) +
1557                         (WUCSR - MAC_CR)+1 + 32) * sizeof(u32);
1558 }
1559
1560 static void smc911x_ethtool_getregs(struct net_device *dev,
1561                                                                                  struct ethtool_regs* regs, void *buf)
1562 {
1563         struct smc911x_local *lp = netdev_priv(dev);
1564         unsigned long flags;
1565         u32 reg,i,j=0;
1566         u32 *data = (u32*)buf;
1567
1568         regs->version = lp->version;
1569         for(i=ID_REV;i<=E2P_CMD;i+=4) {
1570                 data[j++] = SMC_inl(lp, i);
1571         }
1572         for(i=MAC_CR;i<=WUCSR;i++) {
1573                 spin_lock_irqsave(&lp->lock, flags);
1574                 SMC_GET_MAC_CSR(lp, i, reg);
1575                 spin_unlock_irqrestore(&lp->lock, flags);
1576                 data[j++] = reg;
1577         }
1578         for(i=0;i<=31;i++) {
1579                 spin_lock_irqsave(&lp->lock, flags);
1580                 SMC_GET_MII(lp, i, lp->mii.phy_id, reg);
1581                 spin_unlock_irqrestore(&lp->lock, flags);
1582                 data[j++] = reg & 0xFFFF;
1583         }
1584 }
1585
1586 static int smc911x_ethtool_wait_eeprom_ready(struct net_device *dev)
1587 {
1588         struct smc911x_local *lp = netdev_priv(dev);
1589         unsigned int timeout;
1590         int e2p_cmd;
1591
1592         e2p_cmd = SMC_GET_E2P_CMD(lp);
1593         for(timeout=10;(e2p_cmd & E2P_CMD_EPC_BUSY_) && timeout; timeout--) {
1594                 if (e2p_cmd & E2P_CMD_EPC_TIMEOUT_) {
1595                         PRINTK(dev, "%s timeout waiting for EEPROM to respond\n",
1596                                __func__);
1597                         return -EFAULT;
1598                 }
1599                 mdelay(1);
1600                 e2p_cmd = SMC_GET_E2P_CMD(lp);
1601         }
1602         if (timeout == 0) {
1603                 PRINTK(dev, "%s timeout waiting for EEPROM CMD not busy\n",
1604                        __func__);
1605                 return -ETIMEDOUT;
1606         }
1607         return 0;
1608 }
1609
1610 static inline int smc911x_ethtool_write_eeprom_cmd(struct net_device *dev,
1611                                                                                                         int cmd, int addr)
1612 {
1613         struct smc911x_local *lp = netdev_priv(dev);
1614         int ret;
1615
1616         if ((ret = smc911x_ethtool_wait_eeprom_ready(dev))!=0)
1617                 return ret;
1618         SMC_SET_E2P_CMD(lp, E2P_CMD_EPC_BUSY_ |
1619                 ((cmd) & (0x7<<28)) |
1620                 ((addr) & 0xFF));
1621         return 0;
1622 }
1623
1624 static inline int smc911x_ethtool_read_eeprom_byte(struct net_device *dev,
1625                                                                                                         u8 *data)
1626 {
1627         struct smc911x_local *lp = netdev_priv(dev);
1628         int ret;
1629
1630         if ((ret = smc911x_ethtool_wait_eeprom_ready(dev))!=0)
1631                 return ret;
1632         *data = SMC_GET_E2P_DATA(lp);
1633         return 0;
1634 }
1635
1636 static inline int smc911x_ethtool_write_eeprom_byte(struct net_device *dev,
1637                                                                                                          u8 data)
1638 {
1639         struct smc911x_local *lp = netdev_priv(dev);
1640         int ret;
1641
1642         if ((ret = smc911x_ethtool_wait_eeprom_ready(dev))!=0)
1643                 return ret;
1644         SMC_SET_E2P_DATA(lp, data);
1645         return 0;
1646 }
1647
1648 static int smc911x_ethtool_geteeprom(struct net_device *dev,
1649                                                                           struct ethtool_eeprom *eeprom, u8 *data)
1650 {
1651         u8 eebuf[SMC911X_EEPROM_LEN];
1652         int i, ret;
1653
1654         for(i=0;i<SMC911X_EEPROM_LEN;i++) {
1655                 if ((ret=smc911x_ethtool_write_eeprom_cmd(dev, E2P_CMD_EPC_CMD_READ_, i ))!=0)
1656                         return ret;
1657                 if ((ret=smc911x_ethtool_read_eeprom_byte(dev, &eebuf[i]))!=0)
1658                         return ret;
1659                 }
1660         memcpy(data, eebuf+eeprom->offset, eeprom->len);
1661         return 0;
1662 }
1663
1664 static int smc911x_ethtool_seteeprom(struct net_device *dev,
1665                                                                            struct ethtool_eeprom *eeprom, u8 *data)
1666 {
1667         int i, ret;
1668
1669         /* Enable erase */
1670         if ((ret=smc911x_ethtool_write_eeprom_cmd(dev, E2P_CMD_EPC_CMD_EWEN_, 0 ))!=0)
1671                 return ret;
1672         for(i=eeprom->offset;i<(eeprom->offset+eeprom->len);i++) {
1673                 /* erase byte */
1674                 if ((ret=smc911x_ethtool_write_eeprom_cmd(dev, E2P_CMD_EPC_CMD_ERASE_, i ))!=0)
1675                         return ret;
1676                 /* write byte */
1677                 if ((ret=smc911x_ethtool_write_eeprom_byte(dev, *data))!=0)
1678                          return ret;
1679                 if ((ret=smc911x_ethtool_write_eeprom_cmd(dev, E2P_CMD_EPC_CMD_WRITE_, i ))!=0)
1680                         return ret;
1681                 }
1682          return 0;
1683 }
1684
1685 static int smc911x_ethtool_geteeprom_len(struct net_device *dev)
1686 {
1687          return SMC911X_EEPROM_LEN;
1688 }
1689
1690 static const struct ethtool_ops smc911x_ethtool_ops = {
1691         .get_settings    = smc911x_ethtool_getsettings,
1692         .set_settings    = smc911x_ethtool_setsettings,
1693         .get_drvinfo     = smc911x_ethtool_getdrvinfo,
1694         .get_msglevel    = smc911x_ethtool_getmsglevel,
1695         .set_msglevel    = smc911x_ethtool_setmsglevel,
1696         .nway_reset = smc911x_ethtool_nwayreset,
1697         .get_link        = ethtool_op_get_link,
1698         .get_regs_len    = smc911x_ethtool_getregslen,
1699         .get_regs        = smc911x_ethtool_getregs,
1700         .get_eeprom_len = smc911x_ethtool_geteeprom_len,
1701         .get_eeprom = smc911x_ethtool_geteeprom,
1702         .set_eeprom = smc911x_ethtool_seteeprom,
1703 };
1704
1705 /*
1706  * smc911x_findirq
1707  *
1708  * This routine has a simple purpose -- make the SMC chip generate an
1709  * interrupt, so an auto-detect routine can detect it, and find the IRQ,
1710  */
1711 static int smc911x_findirq(struct net_device *dev)
1712 {
1713         struct smc911x_local *lp = netdev_priv(dev);
1714         int timeout = 20;
1715         unsigned long cookie;
1716
1717         DBG(SMC_DEBUG_FUNC, dev, "--> %s\n", __func__);
1718
1719         cookie = probe_irq_on();
1720
1721         /*
1722          * Force a SW interrupt
1723          */
1724
1725         SMC_SET_INT_EN(lp, INT_EN_SW_INT_EN_);
1726
1727         /*
1728          * Wait until positive that the interrupt has been generated
1729          */
1730         do {
1731                 int int_status;
1732                 udelay(10);
1733                 int_status = SMC_GET_INT_EN(lp);
1734                 if (int_status & INT_EN_SW_INT_EN_)
1735                          break;         /* got the interrupt */
1736         } while (--timeout);
1737
1738         /*
1739          * there is really nothing that I can do here if timeout fails,
1740          * as autoirq_report will return a 0 anyway, which is what I
1741          * want in this case.    Plus, the clean up is needed in both
1742          * cases.
1743          */
1744
1745         /* and disable all interrupts again */
1746         SMC_SET_INT_EN(lp, 0);
1747
1748         /* and return what I found */
1749         return probe_irq_off(cookie);
1750 }
1751
1752 static const struct net_device_ops smc911x_netdev_ops = {
1753         .ndo_open               = smc911x_open,
1754         .ndo_stop               = smc911x_close,
1755         .ndo_start_xmit         = smc911x_hard_start_xmit,
1756         .ndo_tx_timeout         = smc911x_timeout,
1757         .ndo_set_rx_mode        = smc911x_set_multicast_list,
1758         .ndo_change_mtu         = eth_change_mtu,
1759         .ndo_validate_addr      = eth_validate_addr,
1760         .ndo_set_mac_address    = eth_mac_addr,
1761 #ifdef CONFIG_NET_POLL_CONTROLLER
1762         .ndo_poll_controller    = smc911x_poll_controller,
1763 #endif
1764 };
1765
1766 /*
1767  * Function: smc911x_probe(unsigned long ioaddr)
1768  *
1769  * Purpose:
1770  *       Tests to see if a given ioaddr points to an SMC911x chip.
1771  *       Returns a 0 on success
1772  *
1773  * Algorithm:
1774  *       (1) see if the endian word is OK
1775  *       (1) see if I recognize the chip ID in the appropriate register
1776  *
1777  * Here I do typical initialization tasks.
1778  *
1779  * o  Initialize the structure if needed
1780  * o  print out my vanity message if not done so already
1781  * o  print out what type of hardware is detected
1782  * o  print out the ethernet address
1783  * o  find the IRQ
1784  * o  set up my private data
1785  * o  configure the dev structure with my subroutines
1786  * o  actually GRAB the irq.
1787  * o  GRAB the region
1788  */
1789 static int smc911x_probe(struct net_device *dev)
1790 {
1791         struct smc911x_local *lp = netdev_priv(dev);
1792         int i, retval;
1793         unsigned int val, chip_id, revision;
1794         const char *version_string;
1795         unsigned long irq_flags;
1796
1797         DBG(SMC_DEBUG_FUNC, dev, "--> %s\n", __func__);
1798
1799         /* First, see if the endian word is recognized */
1800         val = SMC_GET_BYTE_TEST(lp);
1801         DBG(SMC_DEBUG_MISC, dev, "%s: endian probe returned 0x%04x\n",
1802             CARDNAME, val);
1803         if (val != 0x87654321) {
1804                 netdev_err(dev, "Invalid chip endian 0x%08x\n", val);
1805                 retval = -ENODEV;
1806                 goto err_out;
1807         }
1808
1809         /*
1810          * check if the revision register is something that I
1811          * recognize.   These might need to be added to later,
1812          * as future revisions could be added.
1813          */
1814         chip_id = SMC_GET_PN(lp);
1815         DBG(SMC_DEBUG_MISC, dev, "%s: id probe returned 0x%04x\n",
1816             CARDNAME, chip_id);
1817         for(i=0;chip_ids[i].id != 0; i++) {
1818                 if (chip_ids[i].id == chip_id) break;
1819         }
1820         if (!chip_ids[i].id) {
1821                 netdev_err(dev, "Unknown chip ID %04x\n", chip_id);
1822                 retval = -ENODEV;
1823                 goto err_out;
1824         }
1825         version_string = chip_ids[i].name;
1826
1827         revision = SMC_GET_REV(lp);
1828         DBG(SMC_DEBUG_MISC, dev, "%s: revision = 0x%04x\n", CARDNAME, revision);
1829
1830         /* At this point I'll assume that the chip is an SMC911x. */
1831         DBG(SMC_DEBUG_MISC, dev, "%s: Found a %s\n",
1832             CARDNAME, chip_ids[i].name);
1833
1834         /* Validate the TX FIFO size requested */
1835         if ((tx_fifo_kb < 2) || (tx_fifo_kb > 14)) {
1836                 netdev_err(dev, "Invalid TX FIFO size requested %d\n",
1837                            tx_fifo_kb);
1838                 retval = -EINVAL;
1839                 goto err_out;
1840         }
1841
1842         /* fill in some of the fields */
1843         lp->version = chip_ids[i].id;
1844         lp->revision = revision;
1845         lp->tx_fifo_kb = tx_fifo_kb;
1846         /* Reverse calculate the RX FIFO size from the TX */
1847         lp->tx_fifo_size=(lp->tx_fifo_kb<<10) - 512;
1848         lp->rx_fifo_size= ((0x4000 - 512 - lp->tx_fifo_size) / 16) * 15;
1849
1850         /* Set the automatic flow control values */
1851         switch(lp->tx_fifo_kb) {
1852                 /*
1853                  *       AFC_HI is about ((Rx Data Fifo Size)*2/3)/64
1854                  *       AFC_LO is AFC_HI/2
1855                  *       BACK_DUR is about 5uS*(AFC_LO) rounded down
1856                  */
1857                 case 2:/* 13440 Rx Data Fifo Size */
1858                         lp->afc_cfg=0x008C46AF;break;
1859                 case 3:/* 12480 Rx Data Fifo Size */
1860                         lp->afc_cfg=0x0082419F;break;
1861                 case 4:/* 11520 Rx Data Fifo Size */
1862                         lp->afc_cfg=0x00783C9F;break;
1863                 case 5:/* 10560 Rx Data Fifo Size */
1864                         lp->afc_cfg=0x006E374F;break;
1865                 case 6:/* 9600 Rx Data Fifo Size */
1866                         lp->afc_cfg=0x0064328F;break;
1867                 case 7:/* 8640 Rx Data Fifo Size */
1868                         lp->afc_cfg=0x005A2D7F;break;
1869                 case 8:/* 7680 Rx Data Fifo Size */
1870                         lp->afc_cfg=0x0050287F;break;
1871                 case 9:/* 6720 Rx Data Fifo Size */
1872                         lp->afc_cfg=0x0046236F;break;
1873                 case 10:/* 5760 Rx Data Fifo Size */
1874                         lp->afc_cfg=0x003C1E6F;break;
1875                 case 11:/* 4800 Rx Data Fifo Size */
1876                         lp->afc_cfg=0x0032195F;break;
1877                 /*
1878                  *       AFC_HI is ~1520 bytes less than RX Data Fifo Size
1879                  *       AFC_LO is AFC_HI/2
1880                  *       BACK_DUR is about 5uS*(AFC_LO) rounded down
1881                  */
1882                 case 12:/* 3840 Rx Data Fifo Size */
1883                         lp->afc_cfg=0x0024124F;break;
1884                 case 13:/* 2880 Rx Data Fifo Size */
1885                         lp->afc_cfg=0x0015073F;break;
1886                 case 14:/* 1920 Rx Data Fifo Size */
1887                         lp->afc_cfg=0x0006032F;break;
1888                  default:
1889                          PRINTK(dev, "ERROR -- no AFC_CFG setting found");
1890                          break;
1891         }
1892
1893         DBG(SMC_DEBUG_MISC | SMC_DEBUG_TX | SMC_DEBUG_RX, dev,
1894             "%s: tx_fifo %d rx_fifo %d afc_cfg 0x%08x\n", CARDNAME,
1895             lp->tx_fifo_size, lp->rx_fifo_size, lp->afc_cfg);
1896
1897         spin_lock_init(&lp->lock);
1898
1899         /* Get the MAC address */
1900         SMC_GET_MAC_ADDR(lp, dev->dev_addr);
1901
1902         /* now, reset the chip, and put it into a known state */
1903         smc911x_reset(dev);
1904
1905         /*
1906          * If dev->irq is 0, then the device has to be banged on to see
1907          * what the IRQ is.
1908          *
1909          * Specifying an IRQ is done with the assumption that the user knows
1910          * what (s)he is doing.  No checking is done!!!!
1911          */
1912         if (dev->irq < 1) {
1913                 int trials;
1914
1915                 trials = 3;
1916                 while (trials--) {
1917                         dev->irq = smc911x_findirq(dev);
1918                         if (dev->irq)
1919                                 break;
1920                         /* kick the card and try again */
1921                         smc911x_reset(dev);
1922                 }
1923         }
1924         if (dev->irq == 0) {
1925                 netdev_warn(dev, "Couldn't autodetect your IRQ. Use irq=xx.\n");
1926                 retval = -ENODEV;
1927                 goto err_out;
1928         }
1929         dev->irq = irq_canonicalize(dev->irq);
1930
1931         dev->netdev_ops = &smc911x_netdev_ops;
1932         dev->watchdog_timeo = msecs_to_jiffies(watchdog);
1933         dev->ethtool_ops = &smc911x_ethtool_ops;
1934
1935         INIT_WORK(&lp->phy_configure, smc911x_phy_configure);
1936         lp->mii.phy_id_mask = 0x1f;
1937         lp->mii.reg_num_mask = 0x1f;
1938         lp->mii.force_media = 0;
1939         lp->mii.full_duplex = 0;
1940         lp->mii.dev = dev;
1941         lp->mii.mdio_read = smc911x_phy_read;
1942         lp->mii.mdio_write = smc911x_phy_write;
1943
1944         /*
1945          * Locate the phy, if any.
1946          */
1947         smc911x_phy_detect(dev);
1948
1949         /* Set default parameters */
1950         lp->msg_enable = NETIF_MSG_LINK;
1951         lp->ctl_rfduplx = 1;
1952         lp->ctl_rspeed = 100;
1953
1954 #ifdef SMC_DYNAMIC_BUS_CONFIG
1955         irq_flags = lp->cfg.irq_flags;
1956 #else
1957         irq_flags = IRQF_SHARED | SMC_IRQ_SENSE;
1958 #endif
1959
1960         /* Grab the IRQ */
1961         retval = request_irq(dev->irq, smc911x_interrupt,
1962                              irq_flags, dev->name, dev);
1963         if (retval)
1964                 goto err_out;
1965
1966 #ifdef SMC_USE_DMA
1967         lp->rxdma = SMC_DMA_REQUEST(dev, smc911x_rx_dma_irq);
1968         lp->txdma = SMC_DMA_REQUEST(dev, smc911x_tx_dma_irq);
1969         lp->rxdma_active = 0;
1970         lp->txdma_active = 0;
1971         dev->dma = lp->rxdma;
1972 #endif
1973
1974         retval = register_netdev(dev);
1975         if (retval == 0) {
1976                 /* now, print out the card info, in a short format.. */
1977                 netdev_info(dev, "%s (rev %d) at %#lx IRQ %d",
1978                             version_string, lp->revision,
1979                             dev->base_addr, dev->irq);
1980
1981 #ifdef SMC_USE_DMA
1982                 if (lp->rxdma != -1)
1983                         pr_cont(" RXDMA %d", lp->rxdma);
1984
1985                 if (lp->txdma != -1)
1986                         pr_cont(" TXDMA %d", lp->txdma);
1987 #endif
1988                 pr_cont("\n");
1989                 if (!is_valid_ether_addr(dev->dev_addr)) {
1990                         netdev_warn(dev, "Invalid ethernet MAC address. Please set using ifconfig\n");
1991                 } else {
1992                         /* Print the Ethernet address */
1993                         netdev_info(dev, "Ethernet addr: %pM\n",
1994                                     dev->dev_addr);
1995                 }
1996
1997                 if (lp->phy_type == 0) {
1998                         PRINTK(dev, "No PHY found\n");
1999                 } else if ((lp->phy_type & ~0xff) == LAN911X_INTERNAL_PHY_ID) {
2000                         PRINTK(dev, "LAN911x Internal PHY\n");
2001                 } else {
2002                         PRINTK(dev, "External PHY 0x%08x\n", lp->phy_type);
2003                 }
2004         }
2005
2006 err_out:
2007 #ifdef SMC_USE_DMA
2008         if (retval) {
2009                 if (lp->rxdma != -1) {
2010                         SMC_DMA_FREE(dev, lp->rxdma);
2011                 }
2012                 if (lp->txdma != -1) {
2013                         SMC_DMA_FREE(dev, lp->txdma);
2014                 }
2015         }
2016 #endif
2017         return retval;
2018 }
2019
2020 /*
2021  * smc911x_drv_probe(void)
2022  *
2023  *        Output:
2024  *       0 --> there is a device
2025  *       anything else, error
2026  */
2027 static int smc911x_drv_probe(struct platform_device *pdev)
2028 {
2029         struct net_device *ndev;
2030         struct resource *res;
2031         struct smc911x_local *lp;
2032         void __iomem *addr;
2033         int ret;
2034
2035         /* ndev is not valid yet, so avoid passing it in. */
2036         DBG(SMC_DEBUG_FUNC, "--> %s\n",  __func__);
2037         res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
2038         if (!res) {
2039                 ret = -ENODEV;
2040                 goto out;
2041         }
2042
2043         /*
2044          * Request the regions.
2045          */
2046         if (!request_mem_region(res->start, SMC911X_IO_EXTENT, CARDNAME)) {
2047                  ret = -EBUSY;
2048                  goto out;
2049         }
2050
2051         ndev = alloc_etherdev(sizeof(struct smc911x_local));
2052         if (!ndev) {
2053                 ret = -ENOMEM;
2054                 goto release_1;
2055         }
2056         SET_NETDEV_DEV(ndev, &pdev->dev);
2057
2058         ndev->dma = (unsigned char)-1;
2059         ndev->irq = platform_get_irq(pdev, 0);
2060         lp = netdev_priv(ndev);
2061         lp->netdev = ndev;
2062 #ifdef SMC_DYNAMIC_BUS_CONFIG
2063         {
2064                 struct smc911x_platdata *pd = dev_get_platdata(&pdev->dev);
2065                 if (!pd) {
2066                         ret = -EINVAL;
2067                         goto release_both;
2068                 }
2069                 memcpy(&lp->cfg, pd, sizeof(lp->cfg));
2070         }
2071 #endif
2072
2073         addr = ioremap(res->start, SMC911X_IO_EXTENT);
2074         if (!addr) {
2075                 ret = -ENOMEM;
2076                 goto release_both;
2077         }
2078
2079         platform_set_drvdata(pdev, ndev);
2080         lp->base = addr;
2081         ndev->base_addr = res->start;
2082         ret = smc911x_probe(ndev);
2083         if (ret != 0) {
2084                 iounmap(addr);
2085 release_both:
2086                 free_netdev(ndev);
2087 release_1:
2088                 release_mem_region(res->start, SMC911X_IO_EXTENT);
2089 out:
2090                 pr_info("%s: not found (%d).\n", CARDNAME, ret);
2091         }
2092 #ifdef SMC_USE_DMA
2093         else {
2094                 lp->physaddr = res->start;
2095                 lp->dev = &pdev->dev;
2096         }
2097 #endif
2098
2099         return ret;
2100 }
2101
2102 static int smc911x_drv_remove(struct platform_device *pdev)
2103 {
2104         struct net_device *ndev = platform_get_drvdata(pdev);
2105         struct smc911x_local *lp = netdev_priv(ndev);
2106         struct resource *res;
2107
2108         DBG(SMC_DEBUG_FUNC, ndev, "--> %s\n", __func__);
2109
2110         unregister_netdev(ndev);
2111
2112         free_irq(ndev->irq, ndev);
2113
2114 #ifdef SMC_USE_DMA
2115         {
2116                 if (lp->rxdma != -1) {
2117                         SMC_DMA_FREE(dev, lp->rxdma);
2118                 }
2119                 if (lp->txdma != -1) {
2120                         SMC_DMA_FREE(dev, lp->txdma);
2121                 }
2122         }
2123 #endif
2124         iounmap(lp->base);
2125         res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
2126         release_mem_region(res->start, SMC911X_IO_EXTENT);
2127
2128         free_netdev(ndev);
2129         return 0;
2130 }
2131
2132 static int smc911x_drv_suspend(struct platform_device *dev, pm_message_t state)
2133 {
2134         struct net_device *ndev = platform_get_drvdata(dev);
2135         struct smc911x_local *lp = netdev_priv(ndev);
2136
2137         DBG(SMC_DEBUG_FUNC, ndev, "--> %s\n", __func__);
2138         if (ndev) {
2139                 if (netif_running(ndev)) {
2140                         netif_device_detach(ndev);
2141                         smc911x_shutdown(ndev);
2142 #if POWER_DOWN
2143                         /* Set D2 - Energy detect only setting */
2144                         SMC_SET_PMT_CTRL(lp, 2<<12);
2145 #endif
2146                 }
2147         }
2148         return 0;
2149 }
2150
2151 static int smc911x_drv_resume(struct platform_device *dev)
2152 {
2153         struct net_device *ndev = platform_get_drvdata(dev);
2154
2155         DBG(SMC_DEBUG_FUNC, ndev, "--> %s\n", __func__);
2156         if (ndev) {
2157                 struct smc911x_local *lp = netdev_priv(ndev);
2158
2159                 if (netif_running(ndev)) {
2160                         smc911x_reset(ndev);
2161                         if (lp->phy_type != 0)
2162                                 smc911x_phy_configure(&lp->phy_configure);
2163                         smc911x_enable(ndev);
2164                         netif_device_attach(ndev);
2165                 }
2166         }
2167         return 0;
2168 }
2169
2170 static struct platform_driver smc911x_driver = {
2171         .probe           = smc911x_drv_probe,
2172         .remove  = smc911x_drv_remove,
2173         .suspend         = smc911x_drv_suspend,
2174         .resume  = smc911x_drv_resume,
2175         .driver  = {
2176                 .name    = CARDNAME,
2177         },
2178 };
2179
2180 module_platform_driver(smc911x_driver);