net: ethernet: micrel: fix an error code
[linux-2.6-block.git] / drivers / net / ethernet / micrel / ks8842.c
1 /*
2  * ks8842.c timberdale KS8842 ethernet driver
3  * Copyright (c) 2009 Intel Corporation
4  *
5  * This program is free software; you can redistribute it and/or modify
6  * it under the terms of the GNU General Public License version 2 as
7  * published by the Free Software Foundation.
8  *
9  * This program is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12  * GNU General Public License for more details.
13  *
14  * You should have received a copy of the GNU General Public License
15  * along with this program; if not, write to the Free Software
16  * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
17  */
18
19 /* Supports:
20  * The Micrel KS8842 behind the timberdale FPGA
21  * The genuine Micrel KS8841/42 device with ISA 16/32bit bus interface
22  */
23
24 #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
25
26 #include <linux/interrupt.h>
27 #include <linux/kernel.h>
28 #include <linux/module.h>
29 #include <linux/platform_device.h>
30 #include <linux/netdevice.h>
31 #include <linux/etherdevice.h>
32 #include <linux/ethtool.h>
33 #include <linux/ks8842.h>
34 #include <linux/dmaengine.h>
35 #include <linux/dma-mapping.h>
36 #include <linux/scatterlist.h>
37
38 #define DRV_NAME "ks8842"
39
40 /* Timberdale specific Registers */
41 #define REG_TIMB_RST            0x1c
42 #define REG_TIMB_FIFO           0x20
43 #define REG_TIMB_ISR            0x24
44 #define REG_TIMB_IER            0x28
45 #define REG_TIMB_IAR            0x2C
46 #define REQ_TIMB_DMA_RESUME     0x30
47
48 /* KS8842 registers */
49
50 #define REG_SELECT_BANK 0x0e
51
52 /* bank 0 registers */
53 #define REG_QRFCR       0x04
54
55 /* bank 2 registers */
56 #define REG_MARL        0x00
57 #define REG_MARM        0x02
58 #define REG_MARH        0x04
59
60 /* bank 3 registers */
61 #define REG_GRR         0x06
62
63 /* bank 16 registers */
64 #define REG_TXCR        0x00
65 #define REG_TXSR        0x02
66 #define REG_RXCR        0x04
67 #define REG_TXMIR       0x08
68 #define REG_RXMIR       0x0A
69
70 /* bank 17 registers */
71 #define REG_TXQCR       0x00
72 #define REG_RXQCR       0x02
73 #define REG_TXFDPR      0x04
74 #define REG_RXFDPR      0x06
75 #define REG_QMU_DATA_LO 0x08
76 #define REG_QMU_DATA_HI 0x0A
77
78 /* bank 18 registers */
79 #define REG_IER         0x00
80 #define IRQ_LINK_CHANGE 0x8000
81 #define IRQ_TX          0x4000
82 #define IRQ_RX          0x2000
83 #define IRQ_RX_OVERRUN  0x0800
84 #define IRQ_TX_STOPPED  0x0200
85 #define IRQ_RX_STOPPED  0x0100
86 #define IRQ_RX_ERROR    0x0080
87 #define ENABLED_IRQS    (IRQ_LINK_CHANGE | IRQ_TX | IRQ_RX | IRQ_RX_STOPPED | \
88                 IRQ_TX_STOPPED | IRQ_RX_OVERRUN | IRQ_RX_ERROR)
89 /* When running via timberdale in DMA mode, the RX interrupt should be
90    enabled in the KS8842, but not in the FPGA IP, since the IP handles
91    RX DMA internally.
92    TX interrupts are not needed it is handled by the FPGA the driver is
93    notified via DMA callbacks.
94 */
95 #define ENABLED_IRQS_DMA_IP     (IRQ_LINK_CHANGE | IRQ_RX_STOPPED | \
96         IRQ_TX_STOPPED | IRQ_RX_OVERRUN | IRQ_RX_ERROR)
97 #define ENABLED_IRQS_DMA        (ENABLED_IRQS_DMA_IP | IRQ_RX)
98 #define REG_ISR         0x02
99 #define REG_RXSR        0x04
100 #define RXSR_VALID      0x8000
101 #define RXSR_BROADCAST  0x80
102 #define RXSR_MULTICAST  0x40
103 #define RXSR_UNICAST    0x20
104 #define RXSR_FRAMETYPE  0x08
105 #define RXSR_TOO_LONG   0x04
106 #define RXSR_RUNT       0x02
107 #define RXSR_CRC_ERROR  0x01
108 #define RXSR_ERROR      (RXSR_TOO_LONG | RXSR_RUNT | RXSR_CRC_ERROR)
109
110 /* bank 32 registers */
111 #define REG_SW_ID_AND_ENABLE    0x00
112 #define REG_SGCR1               0x02
113 #define REG_SGCR2               0x04
114 #define REG_SGCR3               0x06
115
116 /* bank 39 registers */
117 #define REG_MACAR1              0x00
118 #define REG_MACAR2              0x02
119 #define REG_MACAR3              0x04
120
121 /* bank 45 registers */
122 #define REG_P1MBCR              0x00
123 #define REG_P1MBSR              0x02
124
125 /* bank 46 registers */
126 #define REG_P2MBCR              0x00
127 #define REG_P2MBSR              0x02
128
129 /* bank 48 registers */
130 #define REG_P1CR2               0x02
131
132 /* bank 49 registers */
133 #define REG_P1CR4               0x02
134 #define REG_P1SR                0x04
135
136 /* flags passed by platform_device for configuration */
137 #define MICREL_KS884X           0x01    /* 0=Timeberdale(FPGA), 1=Micrel */
138 #define KS884X_16BIT            0x02    /*  1=16bit, 0=32bit */
139
140 #define DMA_BUFFER_SIZE         2048
141
142 struct ks8842_tx_dma_ctl {
143         struct dma_chan *chan;
144         struct dma_async_tx_descriptor *adesc;
145         void *buf;
146         struct scatterlist sg;
147         int channel;
148 };
149
150 struct ks8842_rx_dma_ctl {
151         struct dma_chan *chan;
152         struct dma_async_tx_descriptor *adesc;
153         struct sk_buff  *skb;
154         struct scatterlist sg;
155         struct tasklet_struct tasklet;
156         int channel;
157 };
158
159 #define KS8842_USE_DMA(adapter) (((adapter)->dma_tx.channel != -1) && \
160          ((adapter)->dma_rx.channel != -1))
161
162 struct ks8842_adapter {
163         void __iomem    *hw_addr;
164         int             irq;
165         unsigned long   conf_flags;     /* copy of platform_device config */
166         struct tasklet_struct   tasklet;
167         spinlock_t      lock; /* spinlock to be interrupt safe */
168         struct work_struct timeout_work;
169         struct net_device *netdev;
170         struct device *dev;
171         struct ks8842_tx_dma_ctl        dma_tx;
172         struct ks8842_rx_dma_ctl        dma_rx;
173 };
174
175 static void ks8842_dma_rx_cb(void *data);
176 static void ks8842_dma_tx_cb(void *data);
177
178 static inline void ks8842_resume_dma(struct ks8842_adapter *adapter)
179 {
180         iowrite32(1, adapter->hw_addr + REQ_TIMB_DMA_RESUME);
181 }
182
183 static inline void ks8842_select_bank(struct ks8842_adapter *adapter, u16 bank)
184 {
185         iowrite16(bank, adapter->hw_addr + REG_SELECT_BANK);
186 }
187
188 static inline void ks8842_write8(struct ks8842_adapter *adapter, u16 bank,
189         u8 value, int offset)
190 {
191         ks8842_select_bank(adapter, bank);
192         iowrite8(value, adapter->hw_addr + offset);
193 }
194
195 static inline void ks8842_write16(struct ks8842_adapter *adapter, u16 bank,
196         u16 value, int offset)
197 {
198         ks8842_select_bank(adapter, bank);
199         iowrite16(value, adapter->hw_addr + offset);
200 }
201
202 static inline void ks8842_enable_bits(struct ks8842_adapter *adapter, u16 bank,
203         u16 bits, int offset)
204 {
205         u16 reg;
206         ks8842_select_bank(adapter, bank);
207         reg = ioread16(adapter->hw_addr + offset);
208         reg |= bits;
209         iowrite16(reg, adapter->hw_addr + offset);
210 }
211
212 static inline void ks8842_clear_bits(struct ks8842_adapter *adapter, u16 bank,
213         u16 bits, int offset)
214 {
215         u16 reg;
216         ks8842_select_bank(adapter, bank);
217         reg = ioread16(adapter->hw_addr + offset);
218         reg &= ~bits;
219         iowrite16(reg, adapter->hw_addr + offset);
220 }
221
222 static inline void ks8842_write32(struct ks8842_adapter *adapter, u16 bank,
223         u32 value, int offset)
224 {
225         ks8842_select_bank(adapter, bank);
226         iowrite32(value, adapter->hw_addr + offset);
227 }
228
229 static inline u8 ks8842_read8(struct ks8842_adapter *adapter, u16 bank,
230         int offset)
231 {
232         ks8842_select_bank(adapter, bank);
233         return ioread8(adapter->hw_addr + offset);
234 }
235
236 static inline u16 ks8842_read16(struct ks8842_adapter *adapter, u16 bank,
237         int offset)
238 {
239         ks8842_select_bank(adapter, bank);
240         return ioread16(adapter->hw_addr + offset);
241 }
242
243 static inline u32 ks8842_read32(struct ks8842_adapter *adapter, u16 bank,
244         int offset)
245 {
246         ks8842_select_bank(adapter, bank);
247         return ioread32(adapter->hw_addr + offset);
248 }
249
250 static void ks8842_reset(struct ks8842_adapter *adapter)
251 {
252         if (adapter->conf_flags & MICREL_KS884X) {
253                 ks8842_write16(adapter, 3, 1, REG_GRR);
254                 msleep(10);
255                 iowrite16(0, adapter->hw_addr + REG_GRR);
256         } else {
257                 /* The KS8842 goes haywire when doing softare reset
258                 * a work around in the timberdale IP is implemented to
259                 * do a hardware reset instead
260                 ks8842_write16(adapter, 3, 1, REG_GRR);
261                 msleep(10);
262                 iowrite16(0, adapter->hw_addr + REG_GRR);
263                 */
264                 iowrite32(0x1, adapter->hw_addr + REG_TIMB_RST);
265                 msleep(20);
266         }
267 }
268
269 static void ks8842_update_link_status(struct net_device *netdev,
270         struct ks8842_adapter *adapter)
271 {
272         /* check the status of the link */
273         if (ks8842_read16(adapter, 45, REG_P1MBSR) & 0x4) {
274                 netif_carrier_on(netdev);
275                 netif_wake_queue(netdev);
276         } else {
277                 netif_stop_queue(netdev);
278                 netif_carrier_off(netdev);
279         }
280 }
281
282 static void ks8842_enable_tx(struct ks8842_adapter *adapter)
283 {
284         ks8842_enable_bits(adapter, 16, 0x01, REG_TXCR);
285 }
286
287 static void ks8842_disable_tx(struct ks8842_adapter *adapter)
288 {
289         ks8842_clear_bits(adapter, 16, 0x01, REG_TXCR);
290 }
291
292 static void ks8842_enable_rx(struct ks8842_adapter *adapter)
293 {
294         ks8842_enable_bits(adapter, 16, 0x01, REG_RXCR);
295 }
296
297 static void ks8842_disable_rx(struct ks8842_adapter *adapter)
298 {
299         ks8842_clear_bits(adapter, 16, 0x01, REG_RXCR);
300 }
301
302 static void ks8842_reset_hw(struct ks8842_adapter *adapter)
303 {
304         /* reset the HW */
305         ks8842_reset(adapter);
306
307         /* Enable QMU Transmit flow control / transmit padding / Transmit CRC */
308         ks8842_write16(adapter, 16, 0x000E, REG_TXCR);
309
310         /* enable the receiver, uni + multi + broadcast + flow ctrl
311                 + crc strip */
312         ks8842_write16(adapter, 16, 0x8 | 0x20 | 0x40 | 0x80 | 0x400,
313                 REG_RXCR);
314
315         /* TX frame pointer autoincrement */
316         ks8842_write16(adapter, 17, 0x4000, REG_TXFDPR);
317
318         /* RX frame pointer autoincrement */
319         ks8842_write16(adapter, 17, 0x4000, REG_RXFDPR);
320
321         /* RX 2 kb high watermark */
322         ks8842_write16(adapter, 0, 0x1000, REG_QRFCR);
323
324         /* aggressive back off in half duplex */
325         ks8842_enable_bits(adapter, 32, 1 << 8, REG_SGCR1);
326
327         /* enable no excessive collison drop */
328         ks8842_enable_bits(adapter, 32, 1 << 3, REG_SGCR2);
329
330         /* Enable port 1 force flow control / back pressure / transmit / recv */
331         ks8842_write16(adapter, 48, 0x1E07, REG_P1CR2);
332
333         /* restart port auto-negotiation */
334         ks8842_enable_bits(adapter, 49, 1 << 13, REG_P1CR4);
335
336         /* Enable the transmitter */
337         ks8842_enable_tx(adapter);
338
339         /* Enable the receiver */
340         ks8842_enable_rx(adapter);
341
342         /* clear all interrupts */
343         ks8842_write16(adapter, 18, 0xffff, REG_ISR);
344
345         /* enable interrupts */
346         if (KS8842_USE_DMA(adapter)) {
347                 /* When running in DMA Mode the RX interrupt is not enabled in
348                    timberdale because RX data is received by DMA callbacks
349                    it must still be enabled in the KS8842 because it indicates
350                    to timberdale when there is RX data for it's DMA FIFOs */
351                 iowrite16(ENABLED_IRQS_DMA_IP, adapter->hw_addr + REG_TIMB_IER);
352                 ks8842_write16(adapter, 18, ENABLED_IRQS_DMA, REG_IER);
353         } else {
354                 if (!(adapter->conf_flags & MICREL_KS884X))
355                         iowrite16(ENABLED_IRQS,
356                                 adapter->hw_addr + REG_TIMB_IER);
357                 ks8842_write16(adapter, 18, ENABLED_IRQS, REG_IER);
358         }
359         /* enable the switch */
360         ks8842_write16(adapter, 32, 0x1, REG_SW_ID_AND_ENABLE);
361 }
362
363 static void ks8842_read_mac_addr(struct ks8842_adapter *adapter, u8 *dest)
364 {
365         int i;
366         u16 mac;
367
368         for (i = 0; i < ETH_ALEN; i++)
369                 dest[ETH_ALEN - i - 1] = ks8842_read8(adapter, 2, REG_MARL + i);
370
371         if (adapter->conf_flags & MICREL_KS884X) {
372                 /*
373                 the sequence of saving mac addr between MAC and Switch is
374                 different.
375                 */
376
377                 mac = ks8842_read16(adapter, 2, REG_MARL);
378                 ks8842_write16(adapter, 39, mac, REG_MACAR3);
379                 mac = ks8842_read16(adapter, 2, REG_MARM);
380                 ks8842_write16(adapter, 39, mac, REG_MACAR2);
381                 mac = ks8842_read16(adapter, 2, REG_MARH);
382                 ks8842_write16(adapter, 39, mac, REG_MACAR1);
383         } else {
384
385                 /* make sure the switch port uses the same MAC as the QMU */
386                 mac = ks8842_read16(adapter, 2, REG_MARL);
387                 ks8842_write16(adapter, 39, mac, REG_MACAR1);
388                 mac = ks8842_read16(adapter, 2, REG_MARM);
389                 ks8842_write16(adapter, 39, mac, REG_MACAR2);
390                 mac = ks8842_read16(adapter, 2, REG_MARH);
391                 ks8842_write16(adapter, 39, mac, REG_MACAR3);
392         }
393 }
394
395 static void ks8842_write_mac_addr(struct ks8842_adapter *adapter, u8 *mac)
396 {
397         unsigned long flags;
398         unsigned i;
399
400         spin_lock_irqsave(&adapter->lock, flags);
401         for (i = 0; i < ETH_ALEN; i++) {
402                 ks8842_write8(adapter, 2, mac[ETH_ALEN - i - 1], REG_MARL + i);
403                 if (!(adapter->conf_flags & MICREL_KS884X))
404                         ks8842_write8(adapter, 39, mac[ETH_ALEN - i - 1],
405                                 REG_MACAR1 + i);
406         }
407
408         if (adapter->conf_flags & MICREL_KS884X) {
409                 /*
410                 the sequence of saving mac addr between MAC and Switch is
411                 different.
412                 */
413
414                 u16 mac;
415
416                 mac = ks8842_read16(adapter, 2, REG_MARL);
417                 ks8842_write16(adapter, 39, mac, REG_MACAR3);
418                 mac = ks8842_read16(adapter, 2, REG_MARM);
419                 ks8842_write16(adapter, 39, mac, REG_MACAR2);
420                 mac = ks8842_read16(adapter, 2, REG_MARH);
421                 ks8842_write16(adapter, 39, mac, REG_MACAR1);
422         }
423         spin_unlock_irqrestore(&adapter->lock, flags);
424 }
425
426 static inline u16 ks8842_tx_fifo_space(struct ks8842_adapter *adapter)
427 {
428         return ks8842_read16(adapter, 16, REG_TXMIR) & 0x1fff;
429 }
430
431 static int ks8842_tx_frame_dma(struct sk_buff *skb, struct net_device *netdev)
432 {
433         struct ks8842_adapter *adapter = netdev_priv(netdev);
434         struct ks8842_tx_dma_ctl *ctl = &adapter->dma_tx;
435         u8 *buf = ctl->buf;
436
437         if (ctl->adesc) {
438                 netdev_dbg(netdev, "%s: TX ongoing\n", __func__);
439                 /* transfer ongoing */
440                 return NETDEV_TX_BUSY;
441         }
442
443         sg_dma_len(&ctl->sg) = skb->len + sizeof(u32);
444
445         /* copy data to the TX buffer */
446         /* the control word, enable IRQ, port 1 and the length */
447         *buf++ = 0x00;
448         *buf++ = 0x01; /* Port 1 */
449         *buf++ = skb->len & 0xff;
450         *buf++ = (skb->len >> 8) & 0xff;
451         skb_copy_from_linear_data(skb, buf, skb->len);
452
453         dma_sync_single_range_for_device(adapter->dev,
454                 sg_dma_address(&ctl->sg), 0, sg_dma_len(&ctl->sg),
455                 DMA_TO_DEVICE);
456
457         /* make sure the length is a multiple of 4 */
458         if (sg_dma_len(&ctl->sg) % 4)
459                 sg_dma_len(&ctl->sg) += 4 - sg_dma_len(&ctl->sg) % 4;
460
461         ctl->adesc = dmaengine_prep_slave_sg(ctl->chan,
462                 &ctl->sg, 1, DMA_MEM_TO_DEV, DMA_PREP_INTERRUPT);
463         if (!ctl->adesc)
464                 return NETDEV_TX_BUSY;
465
466         ctl->adesc->callback_param = netdev;
467         ctl->adesc->callback = ks8842_dma_tx_cb;
468         ctl->adesc->tx_submit(ctl->adesc);
469
470         netdev->stats.tx_bytes += skb->len;
471
472         dev_kfree_skb(skb);
473
474         return NETDEV_TX_OK;
475 }
476
477 static int ks8842_tx_frame(struct sk_buff *skb, struct net_device *netdev)
478 {
479         struct ks8842_adapter *adapter = netdev_priv(netdev);
480         int len = skb->len;
481
482         netdev_dbg(netdev, "%s: len %u head %p data %p tail %p end %p\n",
483                 __func__, skb->len, skb->head, skb->data,
484                 skb_tail_pointer(skb), skb_end_pointer(skb));
485
486         /* check FIFO buffer space, we need space for CRC and command bits */
487         if (ks8842_tx_fifo_space(adapter) < len + 8)
488                 return NETDEV_TX_BUSY;
489
490         if (adapter->conf_flags & KS884X_16BIT) {
491                 u16 *ptr16 = (u16 *)skb->data;
492                 ks8842_write16(adapter, 17, 0x8000 | 0x100, REG_QMU_DATA_LO);
493                 ks8842_write16(adapter, 17, (u16)len, REG_QMU_DATA_HI);
494                 netdev->stats.tx_bytes += len;
495
496                 /* copy buffer */
497                 while (len > 0) {
498                         iowrite16(*ptr16++, adapter->hw_addr + REG_QMU_DATA_LO);
499                         iowrite16(*ptr16++, adapter->hw_addr + REG_QMU_DATA_HI);
500                         len -= sizeof(u32);
501                 }
502         } else {
503
504                 u32 *ptr = (u32 *)skb->data;
505                 u32 ctrl;
506                 /* the control word, enable IRQ, port 1 and the length */
507                 ctrl = 0x8000 | 0x100 | (len << 16);
508                 ks8842_write32(adapter, 17, ctrl, REG_QMU_DATA_LO);
509
510                 netdev->stats.tx_bytes += len;
511
512                 /* copy buffer */
513                 while (len > 0) {
514                         iowrite32(*ptr, adapter->hw_addr + REG_QMU_DATA_LO);
515                         len -= sizeof(u32);
516                         ptr++;
517                 }
518         }
519
520         /* enqueue packet */
521         ks8842_write16(adapter, 17, 1, REG_TXQCR);
522
523         dev_kfree_skb(skb);
524
525         return NETDEV_TX_OK;
526 }
527
528 static void ks8842_update_rx_err_counters(struct net_device *netdev, u32 status)
529 {
530         netdev_dbg(netdev, "RX error, status: %x\n", status);
531
532         netdev->stats.rx_errors++;
533         if (status & RXSR_TOO_LONG)
534                 netdev->stats.rx_length_errors++;
535         if (status & RXSR_CRC_ERROR)
536                 netdev->stats.rx_crc_errors++;
537         if (status & RXSR_RUNT)
538                 netdev->stats.rx_frame_errors++;
539 }
540
541 static void ks8842_update_rx_counters(struct net_device *netdev, u32 status,
542         int len)
543 {
544         netdev_dbg(netdev, "RX packet, len: %d\n", len);
545
546         netdev->stats.rx_packets++;
547         netdev->stats.rx_bytes += len;
548         if (status & RXSR_MULTICAST)
549                 netdev->stats.multicast++;
550 }
551
552 static int __ks8842_start_new_rx_dma(struct net_device *netdev)
553 {
554         struct ks8842_adapter *adapter = netdev_priv(netdev);
555         struct ks8842_rx_dma_ctl *ctl = &adapter->dma_rx;
556         struct scatterlist *sg = &ctl->sg;
557         int err;
558
559         ctl->skb = netdev_alloc_skb(netdev, DMA_BUFFER_SIZE);
560         if (ctl->skb) {
561                 sg_init_table(sg, 1);
562                 sg_dma_address(sg) = dma_map_single(adapter->dev,
563                         ctl->skb->data, DMA_BUFFER_SIZE, DMA_FROM_DEVICE);
564                 err = dma_mapping_error(adapter->dev, sg_dma_address(sg));
565                 if (unlikely(err)) {
566                         sg_dma_address(sg) = 0;
567                         goto out;
568                 }
569
570                 sg_dma_len(sg) = DMA_BUFFER_SIZE;
571
572                 ctl->adesc = dmaengine_prep_slave_sg(ctl->chan,
573                         sg, 1, DMA_DEV_TO_MEM, DMA_PREP_INTERRUPT);
574
575                 if (!ctl->adesc)
576                         goto out;
577
578                 ctl->adesc->callback_param = netdev;
579                 ctl->adesc->callback = ks8842_dma_rx_cb;
580                 ctl->adesc->tx_submit(ctl->adesc);
581         } else {
582                 err = -ENOMEM;
583                 sg_dma_address(sg) = 0;
584                 goto out;
585         }
586
587         return err;
588 out:
589         if (sg_dma_address(sg))
590                 dma_unmap_single(adapter->dev, sg_dma_address(sg),
591                         DMA_BUFFER_SIZE, DMA_FROM_DEVICE);
592         sg_dma_address(sg) = 0;
593         if (ctl->skb)
594                 dev_kfree_skb(ctl->skb);
595
596         ctl->skb = NULL;
597
598         printk(KERN_ERR DRV_NAME": Failed to start RX DMA: %d\n", err);
599         return err;
600 }
601
602 static void ks8842_rx_frame_dma_tasklet(unsigned long arg)
603 {
604         struct net_device *netdev = (struct net_device *)arg;
605         struct ks8842_adapter *adapter = netdev_priv(netdev);
606         struct ks8842_rx_dma_ctl *ctl = &adapter->dma_rx;
607         struct sk_buff *skb = ctl->skb;
608         dma_addr_t addr = sg_dma_address(&ctl->sg);
609         u32 status;
610
611         ctl->adesc = NULL;
612
613         /* kick next transfer going */
614         __ks8842_start_new_rx_dma(netdev);
615
616         /* now handle the data we got */
617         dma_unmap_single(adapter->dev, addr, DMA_BUFFER_SIZE, DMA_FROM_DEVICE);
618
619         status = *((u32 *)skb->data);
620
621         netdev_dbg(netdev, "%s - rx_data: status: %x\n",
622                 __func__, status & 0xffff);
623
624         /* check the status */
625         if ((status & RXSR_VALID) && !(status & RXSR_ERROR)) {
626                 int len = (status >> 16) & 0x7ff;
627
628                 ks8842_update_rx_counters(netdev, status, len);
629
630                 /* reserve 4 bytes which is the status word */
631                 skb_reserve(skb, 4);
632                 skb_put(skb, len);
633
634                 skb->protocol = eth_type_trans(skb, netdev);
635                 netif_rx(skb);
636         } else {
637                 ks8842_update_rx_err_counters(netdev, status);
638                 dev_kfree_skb(skb);
639         }
640 }
641
642 static void ks8842_rx_frame(struct net_device *netdev,
643         struct ks8842_adapter *adapter)
644 {
645         u32 status;
646         int len;
647
648         if (adapter->conf_flags & KS884X_16BIT) {
649                 status = ks8842_read16(adapter, 17, REG_QMU_DATA_LO);
650                 len = ks8842_read16(adapter, 17, REG_QMU_DATA_HI);
651                 netdev_dbg(netdev, "%s - rx_data: status: %x\n",
652                            __func__, status);
653         } else {
654                 status = ks8842_read32(adapter, 17, REG_QMU_DATA_LO);
655                 len = (status >> 16) & 0x7ff;
656                 status &= 0xffff;
657                 netdev_dbg(netdev, "%s - rx_data: status: %x\n",
658                            __func__, status);
659         }
660
661         /* check the status */
662         if ((status & RXSR_VALID) && !(status & RXSR_ERROR)) {
663                 struct sk_buff *skb = netdev_alloc_skb_ip_align(netdev, len + 3);
664
665                 if (skb) {
666
667                         ks8842_update_rx_counters(netdev, status, len);
668
669                         if (adapter->conf_flags & KS884X_16BIT) {
670                                 u16 *data16 = (u16 *)skb_put(skb, len);
671                                 ks8842_select_bank(adapter, 17);
672                                 while (len > 0) {
673                                         *data16++ = ioread16(adapter->hw_addr +
674                                                 REG_QMU_DATA_LO);
675                                         *data16++ = ioread16(adapter->hw_addr +
676                                                 REG_QMU_DATA_HI);
677                                         len -= sizeof(u32);
678                                 }
679                         } else {
680                                 u32 *data = (u32 *)skb_put(skb, len);
681
682                                 ks8842_select_bank(adapter, 17);
683                                 while (len > 0) {
684                                         *data++ = ioread32(adapter->hw_addr +
685                                                 REG_QMU_DATA_LO);
686                                         len -= sizeof(u32);
687                                 }
688                         }
689                         skb->protocol = eth_type_trans(skb, netdev);
690                         netif_rx(skb);
691                 } else
692                         netdev->stats.rx_dropped++;
693         } else
694                 ks8842_update_rx_err_counters(netdev, status);
695
696         /* set high watermark to 3K */
697         ks8842_clear_bits(adapter, 0, 1 << 12, REG_QRFCR);
698
699         /* release the frame */
700         ks8842_write16(adapter, 17, 0x01, REG_RXQCR);
701
702         /* set high watermark to 2K */
703         ks8842_enable_bits(adapter, 0, 1 << 12, REG_QRFCR);
704 }
705
706 static void ks8842_handle_rx(struct net_device *netdev,
707         struct ks8842_adapter *adapter)
708 {
709         u16 rx_data = ks8842_read16(adapter, 16, REG_RXMIR) & 0x1fff;
710         netdev_dbg(netdev, "%s Entry - rx_data: %d\n", __func__, rx_data);
711         while (rx_data) {
712                 ks8842_rx_frame(netdev, adapter);
713                 rx_data = ks8842_read16(adapter, 16, REG_RXMIR) & 0x1fff;
714         }
715 }
716
717 static void ks8842_handle_tx(struct net_device *netdev,
718         struct ks8842_adapter *adapter)
719 {
720         u16 sr = ks8842_read16(adapter, 16, REG_TXSR);
721         netdev_dbg(netdev, "%s - entry, sr: %x\n", __func__, sr);
722         netdev->stats.tx_packets++;
723         if (netif_queue_stopped(netdev))
724                 netif_wake_queue(netdev);
725 }
726
727 static void ks8842_handle_rx_overrun(struct net_device *netdev,
728         struct ks8842_adapter *adapter)
729 {
730         netdev_dbg(netdev, "%s: entry\n", __func__);
731         netdev->stats.rx_errors++;
732         netdev->stats.rx_fifo_errors++;
733 }
734
735 static void ks8842_tasklet(unsigned long arg)
736 {
737         struct net_device *netdev = (struct net_device *)arg;
738         struct ks8842_adapter *adapter = netdev_priv(netdev);
739         u16 isr;
740         unsigned long flags;
741         u16 entry_bank;
742
743         /* read current bank to be able to set it back */
744         spin_lock_irqsave(&adapter->lock, flags);
745         entry_bank = ioread16(adapter->hw_addr + REG_SELECT_BANK);
746         spin_unlock_irqrestore(&adapter->lock, flags);
747
748         isr = ks8842_read16(adapter, 18, REG_ISR);
749         netdev_dbg(netdev, "%s - ISR: 0x%x\n", __func__, isr);
750
751         /* when running in DMA mode, do not ack RX interrupts, it is handled
752            internally by timberdale, otherwise it's DMA FIFO:s would stop
753         */
754         if (KS8842_USE_DMA(adapter))
755                 isr &= ~IRQ_RX;
756
757         /* Ack */
758         ks8842_write16(adapter, 18, isr, REG_ISR);
759
760         if (!(adapter->conf_flags & MICREL_KS884X))
761                 /* Ack in the timberdale IP as well */
762                 iowrite32(0x1, adapter->hw_addr + REG_TIMB_IAR);
763
764         if (!netif_running(netdev))
765                 return;
766
767         if (isr & IRQ_LINK_CHANGE)
768                 ks8842_update_link_status(netdev, adapter);
769
770         /* should not get IRQ_RX when running DMA mode */
771         if (isr & (IRQ_RX | IRQ_RX_ERROR) && !KS8842_USE_DMA(adapter))
772                 ks8842_handle_rx(netdev, adapter);
773
774         /* should only happen when in PIO mode */
775         if (isr & IRQ_TX)
776                 ks8842_handle_tx(netdev, adapter);
777
778         if (isr & IRQ_RX_OVERRUN)
779                 ks8842_handle_rx_overrun(netdev, adapter);
780
781         if (isr & IRQ_TX_STOPPED) {
782                 ks8842_disable_tx(adapter);
783                 ks8842_enable_tx(adapter);
784         }
785
786         if (isr & IRQ_RX_STOPPED) {
787                 ks8842_disable_rx(adapter);
788                 ks8842_enable_rx(adapter);
789         }
790
791         /* re-enable interrupts, put back the bank selection register */
792         spin_lock_irqsave(&adapter->lock, flags);
793         if (KS8842_USE_DMA(adapter))
794                 ks8842_write16(adapter, 18, ENABLED_IRQS_DMA, REG_IER);
795         else
796                 ks8842_write16(adapter, 18, ENABLED_IRQS, REG_IER);
797         iowrite16(entry_bank, adapter->hw_addr + REG_SELECT_BANK);
798
799         /* Make sure timberdale continues DMA operations, they are stopped while
800            we are handling the ks8842 because we might change bank */
801         if (KS8842_USE_DMA(adapter))
802                 ks8842_resume_dma(adapter);
803
804         spin_unlock_irqrestore(&adapter->lock, flags);
805 }
806
807 static irqreturn_t ks8842_irq(int irq, void *devid)
808 {
809         struct net_device *netdev = devid;
810         struct ks8842_adapter *adapter = netdev_priv(netdev);
811         u16 isr;
812         u16 entry_bank = ioread16(adapter->hw_addr + REG_SELECT_BANK);
813         irqreturn_t ret = IRQ_NONE;
814
815         isr = ks8842_read16(adapter, 18, REG_ISR);
816         netdev_dbg(netdev, "%s - ISR: 0x%x\n", __func__, isr);
817
818         if (isr) {
819                 if (KS8842_USE_DMA(adapter))
820                         /* disable all but RX IRQ, since the FPGA relies on it*/
821                         ks8842_write16(adapter, 18, IRQ_RX, REG_IER);
822                 else
823                         /* disable IRQ */
824                         ks8842_write16(adapter, 18, 0x00, REG_IER);
825
826                 /* schedule tasklet */
827                 tasklet_schedule(&adapter->tasklet);
828
829                 ret = IRQ_HANDLED;
830         }
831
832         iowrite16(entry_bank, adapter->hw_addr + REG_SELECT_BANK);
833
834         /* After an interrupt, tell timberdale to continue DMA operations.
835            DMA is disabled while we are handling the ks8842 because we might
836            change bank */
837         ks8842_resume_dma(adapter);
838
839         return ret;
840 }
841
842 static void ks8842_dma_rx_cb(void *data)
843 {
844         struct net_device       *netdev = data;
845         struct ks8842_adapter   *adapter = netdev_priv(netdev);
846
847         netdev_dbg(netdev, "RX DMA finished\n");
848         /* schedule tasklet */
849         if (adapter->dma_rx.adesc)
850                 tasklet_schedule(&adapter->dma_rx.tasklet);
851 }
852
853 static void ks8842_dma_tx_cb(void *data)
854 {
855         struct net_device               *netdev = data;
856         struct ks8842_adapter           *adapter = netdev_priv(netdev);
857         struct ks8842_tx_dma_ctl        *ctl = &adapter->dma_tx;
858
859         netdev_dbg(netdev, "TX DMA finished\n");
860
861         if (!ctl->adesc)
862                 return;
863
864         netdev->stats.tx_packets++;
865         ctl->adesc = NULL;
866
867         if (netif_queue_stopped(netdev))
868                 netif_wake_queue(netdev);
869 }
870
871 static void ks8842_stop_dma(struct ks8842_adapter *adapter)
872 {
873         struct ks8842_tx_dma_ctl *tx_ctl = &adapter->dma_tx;
874         struct ks8842_rx_dma_ctl *rx_ctl = &adapter->dma_rx;
875
876         tx_ctl->adesc = NULL;
877         if (tx_ctl->chan)
878                 dmaengine_terminate_all(tx_ctl->chan);
879
880         rx_ctl->adesc = NULL;
881         if (rx_ctl->chan)
882                 dmaengine_terminate_all(rx_ctl->chan);
883
884         if (sg_dma_address(&rx_ctl->sg))
885                 dma_unmap_single(adapter->dev, sg_dma_address(&rx_ctl->sg),
886                         DMA_BUFFER_SIZE, DMA_FROM_DEVICE);
887         sg_dma_address(&rx_ctl->sg) = 0;
888
889         dev_kfree_skb(rx_ctl->skb);
890         rx_ctl->skb = NULL;
891 }
892
893 static void ks8842_dealloc_dma_bufs(struct ks8842_adapter *adapter)
894 {
895         struct ks8842_tx_dma_ctl *tx_ctl = &adapter->dma_tx;
896         struct ks8842_rx_dma_ctl *rx_ctl = &adapter->dma_rx;
897
898         ks8842_stop_dma(adapter);
899
900         if (tx_ctl->chan)
901                 dma_release_channel(tx_ctl->chan);
902         tx_ctl->chan = NULL;
903
904         if (rx_ctl->chan)
905                 dma_release_channel(rx_ctl->chan);
906         rx_ctl->chan = NULL;
907
908         tasklet_kill(&rx_ctl->tasklet);
909
910         if (sg_dma_address(&tx_ctl->sg))
911                 dma_unmap_single(adapter->dev, sg_dma_address(&tx_ctl->sg),
912                         DMA_BUFFER_SIZE, DMA_TO_DEVICE);
913         sg_dma_address(&tx_ctl->sg) = 0;
914
915         kfree(tx_ctl->buf);
916         tx_ctl->buf = NULL;
917 }
918
919 static bool ks8842_dma_filter_fn(struct dma_chan *chan, void *filter_param)
920 {
921         return chan->chan_id == (long)filter_param;
922 }
923
924 static int ks8842_alloc_dma_bufs(struct net_device *netdev)
925 {
926         struct ks8842_adapter *adapter = netdev_priv(netdev);
927         struct ks8842_tx_dma_ctl *tx_ctl = &adapter->dma_tx;
928         struct ks8842_rx_dma_ctl *rx_ctl = &adapter->dma_rx;
929         int err;
930
931         dma_cap_mask_t mask;
932
933         dma_cap_zero(mask);
934         dma_cap_set(DMA_SLAVE, mask);
935         dma_cap_set(DMA_PRIVATE, mask);
936
937         sg_init_table(&tx_ctl->sg, 1);
938
939         tx_ctl->chan = dma_request_channel(mask, ks8842_dma_filter_fn,
940                                            (void *)(long)tx_ctl->channel);
941         if (!tx_ctl->chan) {
942                 err = -ENODEV;
943                 goto err;
944         }
945
946         /* allocate DMA buffer */
947         tx_ctl->buf = kmalloc(DMA_BUFFER_SIZE, GFP_KERNEL);
948         if (!tx_ctl->buf) {
949                 err = -ENOMEM;
950                 goto err;
951         }
952
953         sg_dma_address(&tx_ctl->sg) = dma_map_single(adapter->dev,
954                 tx_ctl->buf, DMA_BUFFER_SIZE, DMA_TO_DEVICE);
955         if (dma_mapping_error(adapter->dev, sg_dma_address(&tx_ctl->sg))) {
956                 err = -ENOMEM;
957                 sg_dma_address(&tx_ctl->sg) = 0;
958                 goto err;
959         }
960
961         rx_ctl->chan = dma_request_channel(mask, ks8842_dma_filter_fn,
962                                            (void *)(long)rx_ctl->channel);
963         if (!rx_ctl->chan) {
964                 err = -ENODEV;
965                 goto err;
966         }
967
968         tasklet_init(&rx_ctl->tasklet, ks8842_rx_frame_dma_tasklet,
969                 (unsigned long)netdev);
970
971         return 0;
972 err:
973         ks8842_dealloc_dma_bufs(adapter);
974         return err;
975 }
976
977 /* Netdevice operations */
978
979 static int ks8842_open(struct net_device *netdev)
980 {
981         struct ks8842_adapter *adapter = netdev_priv(netdev);
982         int err;
983
984         netdev_dbg(netdev, "%s - entry\n", __func__);
985
986         if (KS8842_USE_DMA(adapter)) {
987                 err = ks8842_alloc_dma_bufs(netdev);
988
989                 if (!err) {
990                         /* start RX dma */
991                         err = __ks8842_start_new_rx_dma(netdev);
992                         if (err)
993                                 ks8842_dealloc_dma_bufs(adapter);
994                 }
995
996                 if (err) {
997                         printk(KERN_WARNING DRV_NAME
998                                 ": Failed to initiate DMA, running PIO\n");
999                         ks8842_dealloc_dma_bufs(adapter);
1000                         adapter->dma_rx.channel = -1;
1001                         adapter->dma_tx.channel = -1;
1002                 }
1003         }
1004
1005         /* reset the HW */
1006         ks8842_reset_hw(adapter);
1007
1008         ks8842_write_mac_addr(adapter, netdev->dev_addr);
1009
1010         ks8842_update_link_status(netdev, adapter);
1011
1012         err = request_irq(adapter->irq, ks8842_irq, IRQF_SHARED, DRV_NAME,
1013                 netdev);
1014         if (err) {
1015                 pr_err("Failed to request IRQ: %d: %d\n", adapter->irq, err);
1016                 return err;
1017         }
1018
1019         return 0;
1020 }
1021
1022 static int ks8842_close(struct net_device *netdev)
1023 {
1024         struct ks8842_adapter *adapter = netdev_priv(netdev);
1025
1026         netdev_dbg(netdev, "%s - entry\n", __func__);
1027
1028         cancel_work_sync(&adapter->timeout_work);
1029
1030         if (KS8842_USE_DMA(adapter))
1031                 ks8842_dealloc_dma_bufs(adapter);
1032
1033         /* free the irq */
1034         free_irq(adapter->irq, netdev);
1035
1036         /* disable the switch */
1037         ks8842_write16(adapter, 32, 0x0, REG_SW_ID_AND_ENABLE);
1038
1039         return 0;
1040 }
1041
1042 static netdev_tx_t ks8842_xmit_frame(struct sk_buff *skb,
1043                                      struct net_device *netdev)
1044 {
1045         int ret;
1046         struct ks8842_adapter *adapter = netdev_priv(netdev);
1047
1048         netdev_dbg(netdev, "%s: entry\n", __func__);
1049
1050         if (KS8842_USE_DMA(adapter)) {
1051                 unsigned long flags;
1052                 ret = ks8842_tx_frame_dma(skb, netdev);
1053                 /* for now only allow one transfer at the time */
1054                 spin_lock_irqsave(&adapter->lock, flags);
1055                 if (adapter->dma_tx.adesc)
1056                         netif_stop_queue(netdev);
1057                 spin_unlock_irqrestore(&adapter->lock, flags);
1058                 return ret;
1059         }
1060
1061         ret = ks8842_tx_frame(skb, netdev);
1062
1063         if (ks8842_tx_fifo_space(adapter) <  netdev->mtu + 8)
1064                 netif_stop_queue(netdev);
1065
1066         return ret;
1067 }
1068
1069 static int ks8842_set_mac(struct net_device *netdev, void *p)
1070 {
1071         struct ks8842_adapter *adapter = netdev_priv(netdev);
1072         struct sockaddr *addr = p;
1073         char *mac = (u8 *)addr->sa_data;
1074
1075         netdev_dbg(netdev, "%s: entry\n", __func__);
1076
1077         if (!is_valid_ether_addr(addr->sa_data))
1078                 return -EADDRNOTAVAIL;
1079
1080         memcpy(netdev->dev_addr, mac, netdev->addr_len);
1081
1082         ks8842_write_mac_addr(adapter, mac);
1083         return 0;
1084 }
1085
1086 static void ks8842_tx_timeout_work(struct work_struct *work)
1087 {
1088         struct ks8842_adapter *adapter =
1089                 container_of(work, struct ks8842_adapter, timeout_work);
1090         struct net_device *netdev = adapter->netdev;
1091         unsigned long flags;
1092
1093         netdev_dbg(netdev, "%s: entry\n", __func__);
1094
1095         spin_lock_irqsave(&adapter->lock, flags);
1096
1097         if (KS8842_USE_DMA(adapter))
1098                 ks8842_stop_dma(adapter);
1099
1100         /* disable interrupts */
1101         ks8842_write16(adapter, 18, 0, REG_IER);
1102         ks8842_write16(adapter, 18, 0xFFFF, REG_ISR);
1103
1104         netif_stop_queue(netdev);
1105
1106         spin_unlock_irqrestore(&adapter->lock, flags);
1107
1108         ks8842_reset_hw(adapter);
1109
1110         ks8842_write_mac_addr(adapter, netdev->dev_addr);
1111
1112         ks8842_update_link_status(netdev, adapter);
1113
1114         if (KS8842_USE_DMA(adapter))
1115                 __ks8842_start_new_rx_dma(netdev);
1116 }
1117
1118 static void ks8842_tx_timeout(struct net_device *netdev)
1119 {
1120         struct ks8842_adapter *adapter = netdev_priv(netdev);
1121
1122         netdev_dbg(netdev, "%s: entry\n", __func__);
1123
1124         schedule_work(&adapter->timeout_work);
1125 }
1126
1127 static const struct net_device_ops ks8842_netdev_ops = {
1128         .ndo_open               = ks8842_open,
1129         .ndo_stop               = ks8842_close,
1130         .ndo_start_xmit         = ks8842_xmit_frame,
1131         .ndo_set_mac_address    = ks8842_set_mac,
1132         .ndo_tx_timeout         = ks8842_tx_timeout,
1133         .ndo_validate_addr      = eth_validate_addr
1134 };
1135
1136 static const struct ethtool_ops ks8842_ethtool_ops = {
1137         .get_link               = ethtool_op_get_link,
1138 };
1139
1140 static int ks8842_probe(struct platform_device *pdev)
1141 {
1142         int err = -ENOMEM;
1143         struct resource *iomem;
1144         struct net_device *netdev;
1145         struct ks8842_adapter *adapter;
1146         struct ks8842_platform_data *pdata = dev_get_platdata(&pdev->dev);
1147         u16 id;
1148         unsigned i;
1149
1150         iomem = platform_get_resource(pdev, IORESOURCE_MEM, 0);
1151         if (!request_mem_region(iomem->start, resource_size(iomem), DRV_NAME))
1152                 goto err_mem_region;
1153
1154         netdev = alloc_etherdev(sizeof(struct ks8842_adapter));
1155         if (!netdev)
1156                 goto err_alloc_etherdev;
1157
1158         SET_NETDEV_DEV(netdev, &pdev->dev);
1159
1160         adapter = netdev_priv(netdev);
1161         adapter->netdev = netdev;
1162         INIT_WORK(&adapter->timeout_work, ks8842_tx_timeout_work);
1163         adapter->hw_addr = ioremap(iomem->start, resource_size(iomem));
1164         adapter->conf_flags = iomem->flags;
1165
1166         if (!adapter->hw_addr)
1167                 goto err_ioremap;
1168
1169         adapter->irq = platform_get_irq(pdev, 0);
1170         if (adapter->irq < 0) {
1171                 err = adapter->irq;
1172                 goto err_get_irq;
1173         }
1174
1175         adapter->dev = (pdev->dev.parent) ? pdev->dev.parent : &pdev->dev;
1176
1177         /* DMA is only supported when accessed via timberdale */
1178         if (!(adapter->conf_flags & MICREL_KS884X) && pdata &&
1179                 (pdata->tx_dma_channel != -1) &&
1180                 (pdata->rx_dma_channel != -1)) {
1181                 adapter->dma_rx.channel = pdata->rx_dma_channel;
1182                 adapter->dma_tx.channel = pdata->tx_dma_channel;
1183         } else {
1184                 adapter->dma_rx.channel = -1;
1185                 adapter->dma_tx.channel = -1;
1186         }
1187
1188         tasklet_init(&adapter->tasklet, ks8842_tasklet, (unsigned long)netdev);
1189         spin_lock_init(&adapter->lock);
1190
1191         netdev->netdev_ops = &ks8842_netdev_ops;
1192         netdev->ethtool_ops = &ks8842_ethtool_ops;
1193
1194         /* Check if a mac address was given */
1195         i = netdev->addr_len;
1196         if (pdata) {
1197                 for (i = 0; i < netdev->addr_len; i++)
1198                         if (pdata->macaddr[i] != 0)
1199                                 break;
1200
1201                 if (i < netdev->addr_len)
1202                         /* an address was passed, use it */
1203                         memcpy(netdev->dev_addr, pdata->macaddr,
1204                                 netdev->addr_len);
1205         }
1206
1207         if (i == netdev->addr_len) {
1208                 ks8842_read_mac_addr(adapter, netdev->dev_addr);
1209
1210                 if (!is_valid_ether_addr(netdev->dev_addr))
1211                         eth_hw_addr_random(netdev);
1212         }
1213
1214         id = ks8842_read16(adapter, 32, REG_SW_ID_AND_ENABLE);
1215
1216         strcpy(netdev->name, "eth%d");
1217         err = register_netdev(netdev);
1218         if (err)
1219                 goto err_register;
1220
1221         platform_set_drvdata(pdev, netdev);
1222
1223         pr_info("Found chip, family: 0x%x, id: 0x%x, rev: 0x%x\n",
1224                 (id >> 8) & 0xff, (id >> 4) & 0xf, (id >> 1) & 0x7);
1225
1226         return 0;
1227
1228 err_register:
1229 err_get_irq:
1230         iounmap(adapter->hw_addr);
1231 err_ioremap:
1232         free_netdev(netdev);
1233 err_alloc_etherdev:
1234         release_mem_region(iomem->start, resource_size(iomem));
1235 err_mem_region:
1236         return err;
1237 }
1238
1239 static int ks8842_remove(struct platform_device *pdev)
1240 {
1241         struct net_device *netdev = platform_get_drvdata(pdev);
1242         struct ks8842_adapter *adapter = netdev_priv(netdev);
1243         struct resource *iomem = platform_get_resource(pdev, IORESOURCE_MEM, 0);
1244
1245         unregister_netdev(netdev);
1246         tasklet_kill(&adapter->tasklet);
1247         iounmap(adapter->hw_addr);
1248         free_netdev(netdev);
1249         release_mem_region(iomem->start, resource_size(iomem));
1250         return 0;
1251 }
1252
1253
1254 static struct platform_driver ks8842_platform_driver = {
1255         .driver = {
1256                 .name   = DRV_NAME,
1257         },
1258         .probe          = ks8842_probe,
1259         .remove         = ks8842_remove,
1260 };
1261
1262 module_platform_driver(ks8842_platform_driver);
1263
1264 MODULE_DESCRIPTION("Timberdale KS8842 ethernet driver");
1265 MODULE_AUTHOR("Mocean Laboratories <info@mocean-labs.com>");
1266 MODULE_LICENSE("GPL v2");
1267 MODULE_ALIAS("platform:ks8842");
1268