ar8216: Factor out chip-specific parameters from ar8xxx_probe_switch
[openwrt.git] / target / linux / generic / files / drivers / net / phy / ar8216.c
1 /*
2  * ar8216.c: AR8216 switch driver
3  *
4  * Copyright (C) 2009 Felix Fietkau <nbd@openwrt.org>
5  * Copyright (C) 2011-2012 Gabor Juhos <juhosg@openwrt.org>
6  *
7  * This program is free software; you can redistribute it and/or
8  * modify it under the terms of the GNU General Public License
9  * as published by the Free Software Foundation; either version 2
10  * of the License, or (at your option) any later version.
11  *
12  * This program is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15  * GNU General Public License for more details.
16  */
17
18 #include <linux/if.h>
19 #include <linux/module.h>
20 #include <linux/init.h>
21 #include <linux/list.h>
22 #include <linux/if_ether.h>
23 #include <linux/skbuff.h>
24 #include <linux/netdevice.h>
25 #include <linux/netlink.h>
26 #include <linux/bitops.h>
27 #include <net/genetlink.h>
28 #include <linux/switch.h>
29 #include <linux/delay.h>
30 #include <linux/phy.h>
31 #include <linux/netdevice.h>
32 #include <linux/etherdevice.h>
33 #include <linux/lockdep.h>
34 #include <linux/ar8216_platform.h>
35 #include <linux/workqueue.h>
36 #include <linux/of_device.h>
37 #include <linux/leds.h>
38 #include <linux/gpio.h>
39 #include <linux/version.h>
40
41 #include "ar8216.h"
42
43 /* size of the vlan table */
44 #define AR8X16_MAX_VLANS        128
45 #define AR8X16_PROBE_RETRIES    10
46 #define AR8X16_MAX_PORTS        8
47
48 #define AR8XXX_MIB_WORK_DELAY   2000 /* msecs */
49
50 struct ar8xxx_priv;
51
52 #define AR8XXX_CAP_GIGE                 BIT(0)
53 #define AR8XXX_CAP_MIB_COUNTERS         BIT(1)
54
55 #define AR8XXX_NUM_PHYS         5
56
57 enum {
58         AR8XXX_VER_AR8216 = 0x01,
59         AR8XXX_VER_AR8236 = 0x03,
60         AR8XXX_VER_AR8316 = 0x10,
61         AR8XXX_VER_AR8327 = 0x12,
62         AR8XXX_VER_AR8337 = 0x13,
63 };
64
65 struct ar8xxx_mib_desc {
66         unsigned int size;
67         unsigned int offset;
68         const char *name;
69 };
70
71 struct ar8xxx_chip {
72         unsigned long caps;
73         bool config_at_probe;
74         bool mii_lo_first;
75
76         /* parameters to calculate REG_PORT_STATS_BASE */
77         unsigned reg_port_stats_start;
78         unsigned reg_port_stats_length;
79
80         int (*hw_init)(struct ar8xxx_priv *priv);
81         void (*cleanup)(struct ar8xxx_priv *priv);
82
83         const char *name;
84         int vlans;
85         int ports;
86         const struct switch_dev_ops *swops;
87
88         void (*init_globals)(struct ar8xxx_priv *priv);
89         void (*init_port)(struct ar8xxx_priv *priv, int port);
90         void (*setup_port)(struct ar8xxx_priv *priv, int port, u32 members);
91         u32 (*read_port_status)(struct ar8xxx_priv *priv, int port);
92         int (*atu_flush)(struct ar8xxx_priv *priv);
93         void (*vtu_flush)(struct ar8xxx_priv *priv);
94         void (*vtu_load_vlan)(struct ar8xxx_priv *priv, u32 vid, u32 port_mask);
95         void (*phy_fixup)(struct ar8xxx_priv *priv, int phy);
96         void (*set_mirror_regs)(struct ar8xxx_priv *priv);
97
98         const struct ar8xxx_mib_desc *mib_decs;
99         unsigned num_mibs;
100         unsigned mib_func;
101 };
102
103 enum ar8327_led_pattern {
104         AR8327_LED_PATTERN_OFF = 0,
105         AR8327_LED_PATTERN_BLINK,
106         AR8327_LED_PATTERN_ON,
107         AR8327_LED_PATTERN_RULE,
108 };
109
110 struct ar8327_led_entry {
111         unsigned reg;
112         unsigned shift;
113 };
114
115 struct ar8327_led {
116         struct led_classdev cdev;
117         struct ar8xxx_priv *sw_priv;
118
119         char *name;
120         bool active_low;
121         u8 led_num;
122         enum ar8327_led_mode mode;
123
124         struct mutex mutex;
125         spinlock_t lock;
126         struct work_struct led_work;
127         bool enable_hw_mode;
128         enum ar8327_led_pattern pattern;
129 };
130
131 struct ar8327_data {
132         u32 port0_status;
133         u32 port6_status;
134
135         struct ar8327_led **leds;
136         unsigned int num_leds;
137 };
138
139 struct ar8xxx_priv {
140         struct switch_dev dev;
141         struct mii_bus *mii_bus;
142         struct phy_device *phy;
143
144         u32 (*read)(struct ar8xxx_priv *priv, int reg);
145         void (*write)(struct ar8xxx_priv *priv, int reg, u32 val);
146         u32 (*rmw)(struct ar8xxx_priv *priv, int reg, u32 mask, u32 val);
147
148         int (*get_port_link)(unsigned port);
149
150         const struct net_device_ops *ndo_old;
151         struct net_device_ops ndo;
152         struct mutex reg_mutex;
153         u8 chip_ver;
154         u8 chip_rev;
155         const struct ar8xxx_chip *chip;
156         void *chip_data;
157         bool initialized;
158         bool port4_phy;
159         char buf[2048];
160
161         bool init;
162
163         struct mutex mib_lock;
164         struct delayed_work mib_work;
165         int mib_next_port;
166         u64 *mib_stats;
167
168         struct list_head list;
169         unsigned int use_count;
170
171         /* all fields below are cleared on reset */
172         bool vlan;
173         u16 vlan_id[AR8X16_MAX_VLANS];
174         u8 vlan_table[AR8X16_MAX_VLANS];
175         u8 vlan_tagged;
176         u16 pvid[AR8X16_MAX_PORTS];
177
178         /* mirroring */
179         bool mirror_rx;
180         bool mirror_tx;
181         int source_port;
182         int monitor_port;
183 };
184
185 #define MIB_DESC(_s , _o, _n)   \
186         {                       \
187                 .size = (_s),   \
188                 .offset = (_o), \
189                 .name = (_n),   \
190         }
191
192 static const struct ar8xxx_mib_desc ar8216_mibs[] = {
193         MIB_DESC(1, AR8216_STATS_RXBROAD, "RxBroad"),
194         MIB_DESC(1, AR8216_STATS_RXPAUSE, "RxPause"),
195         MIB_DESC(1, AR8216_STATS_RXMULTI, "RxMulti"),
196         MIB_DESC(1, AR8216_STATS_RXFCSERR, "RxFcsErr"),
197         MIB_DESC(1, AR8216_STATS_RXALIGNERR, "RxAlignErr"),
198         MIB_DESC(1, AR8216_STATS_RXRUNT, "RxRunt"),
199         MIB_DESC(1, AR8216_STATS_RXFRAGMENT, "RxFragment"),
200         MIB_DESC(1, AR8216_STATS_RX64BYTE, "Rx64Byte"),
201         MIB_DESC(1, AR8216_STATS_RX128BYTE, "Rx128Byte"),
202         MIB_DESC(1, AR8216_STATS_RX256BYTE, "Rx256Byte"),
203         MIB_DESC(1, AR8216_STATS_RX512BYTE, "Rx512Byte"),
204         MIB_DESC(1, AR8216_STATS_RX1024BYTE, "Rx1024Byte"),
205         MIB_DESC(1, AR8216_STATS_RXMAXBYTE, "RxMaxByte"),
206         MIB_DESC(1, AR8216_STATS_RXTOOLONG, "RxTooLong"),
207         MIB_DESC(2, AR8216_STATS_RXGOODBYTE, "RxGoodByte"),
208         MIB_DESC(2, AR8216_STATS_RXBADBYTE, "RxBadByte"),
209         MIB_DESC(1, AR8216_STATS_RXOVERFLOW, "RxOverFlow"),
210         MIB_DESC(1, AR8216_STATS_FILTERED, "Filtered"),
211         MIB_DESC(1, AR8216_STATS_TXBROAD, "TxBroad"),
212         MIB_DESC(1, AR8216_STATS_TXPAUSE, "TxPause"),
213         MIB_DESC(1, AR8216_STATS_TXMULTI, "TxMulti"),
214         MIB_DESC(1, AR8216_STATS_TXUNDERRUN, "TxUnderRun"),
215         MIB_DESC(1, AR8216_STATS_TX64BYTE, "Tx64Byte"),
216         MIB_DESC(1, AR8216_STATS_TX128BYTE, "Tx128Byte"),
217         MIB_DESC(1, AR8216_STATS_TX256BYTE, "Tx256Byte"),
218         MIB_DESC(1, AR8216_STATS_TX512BYTE, "Tx512Byte"),
219         MIB_DESC(1, AR8216_STATS_TX1024BYTE, "Tx1024Byte"),
220         MIB_DESC(1, AR8216_STATS_TXMAXBYTE, "TxMaxByte"),
221         MIB_DESC(1, AR8216_STATS_TXOVERSIZE, "TxOverSize"),
222         MIB_DESC(2, AR8216_STATS_TXBYTE, "TxByte"),
223         MIB_DESC(1, AR8216_STATS_TXCOLLISION, "TxCollision"),
224         MIB_DESC(1, AR8216_STATS_TXABORTCOL, "TxAbortCol"),
225         MIB_DESC(1, AR8216_STATS_TXMULTICOL, "TxMultiCol"),
226         MIB_DESC(1, AR8216_STATS_TXSINGLECOL, "TxSingleCol"),
227         MIB_DESC(1, AR8216_STATS_TXEXCDEFER, "TxExcDefer"),
228         MIB_DESC(1, AR8216_STATS_TXDEFER, "TxDefer"),
229         MIB_DESC(1, AR8216_STATS_TXLATECOL, "TxLateCol"),
230 };
231
232 static const struct ar8xxx_mib_desc ar8236_mibs[] = {
233         MIB_DESC(1, AR8236_STATS_RXBROAD, "RxBroad"),
234         MIB_DESC(1, AR8236_STATS_RXPAUSE, "RxPause"),
235         MIB_DESC(1, AR8236_STATS_RXMULTI, "RxMulti"),
236         MIB_DESC(1, AR8236_STATS_RXFCSERR, "RxFcsErr"),
237         MIB_DESC(1, AR8236_STATS_RXALIGNERR, "RxAlignErr"),
238         MIB_DESC(1, AR8236_STATS_RXRUNT, "RxRunt"),
239         MIB_DESC(1, AR8236_STATS_RXFRAGMENT, "RxFragment"),
240         MIB_DESC(1, AR8236_STATS_RX64BYTE, "Rx64Byte"),
241         MIB_DESC(1, AR8236_STATS_RX128BYTE, "Rx128Byte"),
242         MIB_DESC(1, AR8236_STATS_RX256BYTE, "Rx256Byte"),
243         MIB_DESC(1, AR8236_STATS_RX512BYTE, "Rx512Byte"),
244         MIB_DESC(1, AR8236_STATS_RX1024BYTE, "Rx1024Byte"),
245         MIB_DESC(1, AR8236_STATS_RX1518BYTE, "Rx1518Byte"),
246         MIB_DESC(1, AR8236_STATS_RXMAXBYTE, "RxMaxByte"),
247         MIB_DESC(1, AR8236_STATS_RXTOOLONG, "RxTooLong"),
248         MIB_DESC(2, AR8236_STATS_RXGOODBYTE, "RxGoodByte"),
249         MIB_DESC(2, AR8236_STATS_RXBADBYTE, "RxBadByte"),
250         MIB_DESC(1, AR8236_STATS_RXOVERFLOW, "RxOverFlow"),
251         MIB_DESC(1, AR8236_STATS_FILTERED, "Filtered"),
252         MIB_DESC(1, AR8236_STATS_TXBROAD, "TxBroad"),
253         MIB_DESC(1, AR8236_STATS_TXPAUSE, "TxPause"),
254         MIB_DESC(1, AR8236_STATS_TXMULTI, "TxMulti"),
255         MIB_DESC(1, AR8236_STATS_TXUNDERRUN, "TxUnderRun"),
256         MIB_DESC(1, AR8236_STATS_TX64BYTE, "Tx64Byte"),
257         MIB_DESC(1, AR8236_STATS_TX128BYTE, "Tx128Byte"),
258         MIB_DESC(1, AR8236_STATS_TX256BYTE, "Tx256Byte"),
259         MIB_DESC(1, AR8236_STATS_TX512BYTE, "Tx512Byte"),
260         MIB_DESC(1, AR8236_STATS_TX1024BYTE, "Tx1024Byte"),
261         MIB_DESC(1, AR8236_STATS_TX1518BYTE, "Tx1518Byte"),
262         MIB_DESC(1, AR8236_STATS_TXMAXBYTE, "TxMaxByte"),
263         MIB_DESC(1, AR8236_STATS_TXOVERSIZE, "TxOverSize"),
264         MIB_DESC(2, AR8236_STATS_TXBYTE, "TxByte"),
265         MIB_DESC(1, AR8236_STATS_TXCOLLISION, "TxCollision"),
266         MIB_DESC(1, AR8236_STATS_TXABORTCOL, "TxAbortCol"),
267         MIB_DESC(1, AR8236_STATS_TXMULTICOL, "TxMultiCol"),
268         MIB_DESC(1, AR8236_STATS_TXSINGLECOL, "TxSingleCol"),
269         MIB_DESC(1, AR8236_STATS_TXEXCDEFER, "TxExcDefer"),
270         MIB_DESC(1, AR8236_STATS_TXDEFER, "TxDefer"),
271         MIB_DESC(1, AR8236_STATS_TXLATECOL, "TxLateCol"),
272 };
273
274 static DEFINE_MUTEX(ar8xxx_dev_list_lock);
275 static LIST_HEAD(ar8xxx_dev_list);
276
277 static inline struct ar8xxx_priv *
278 swdev_to_ar8xxx(struct switch_dev *swdev)
279 {
280         return container_of(swdev, struct ar8xxx_priv, dev);
281 }
282
283 static inline bool ar8xxx_has_gige(struct ar8xxx_priv *priv)
284 {
285         return priv->chip->caps & AR8XXX_CAP_GIGE;
286 }
287
288 static inline bool ar8xxx_has_mib_counters(struct ar8xxx_priv *priv)
289 {
290         return priv->chip->caps & AR8XXX_CAP_MIB_COUNTERS;
291 }
292
293 static inline bool chip_is_ar8216(struct ar8xxx_priv *priv)
294 {
295         return priv->chip_ver == AR8XXX_VER_AR8216;
296 }
297
298 static inline bool chip_is_ar8236(struct ar8xxx_priv *priv)
299 {
300         return priv->chip_ver == AR8XXX_VER_AR8236;
301 }
302
303 static inline bool chip_is_ar8316(struct ar8xxx_priv *priv)
304 {
305         return priv->chip_ver == AR8XXX_VER_AR8316;
306 }
307
308 static inline bool chip_is_ar8327(struct ar8xxx_priv *priv)
309 {
310         return priv->chip_ver == AR8XXX_VER_AR8327;
311 }
312
313 static inline bool chip_is_ar8337(struct ar8xxx_priv *priv)
314 {
315         return priv->chip_ver == AR8XXX_VER_AR8337;
316 }
317
318 static inline void
319 split_addr(u32 regaddr, u16 *r1, u16 *r2, u16 *page)
320 {
321         regaddr >>= 1;
322         *r1 = regaddr & 0x1e;
323
324         regaddr >>= 5;
325         *r2 = regaddr & 0x7;
326
327         regaddr >>= 3;
328         *page = regaddr & 0x1ff;
329 }
330
331 /* inspired by phy_poll_reset in drivers/net/phy/phy_device.c */
332 static int
333 ar8xxx_phy_poll_reset(struct mii_bus *bus)
334 {
335         unsigned int sleep_msecs = 20;
336         int ret, elapsed, i;
337
338         for (elapsed = sleep_msecs; elapsed <= 600;
339              elapsed += sleep_msecs) {
340                 msleep(sleep_msecs);
341                 for (i = 0; i < AR8XXX_NUM_PHYS; i++) {
342                         ret = mdiobus_read(bus, i, MII_BMCR);
343                         if (ret < 0)
344                                 return ret;
345                         if (ret & BMCR_RESET)
346                                 break;
347                         if (i == AR8XXX_NUM_PHYS - 1) {
348                                 usleep_range(1000, 2000);
349                                 return 0;
350                         }
351                 }
352         }
353         return -ETIMEDOUT;
354 }
355
356 static int
357 ar8xxx_phy_check_aneg(struct phy_device *phydev)
358 {
359         int ret;
360
361         if (phydev->autoneg != AUTONEG_ENABLE)
362                 return 0;
363         /*
364          * BMCR_ANENABLE might have been cleared
365          * by phy_init_hw in certain kernel versions
366          * therefore check for it
367          */
368         ret = phy_read(phydev, MII_BMCR);
369         if (ret < 0)
370                 return ret;
371         if (ret & BMCR_ANENABLE)
372                 return 0;
373
374         dev_info(&phydev->dev, "ANEG disabled, re-enabling ...\n");
375         ret |= BMCR_ANENABLE | BMCR_ANRESTART;
376         return phy_write(phydev, MII_BMCR, ret);
377 }
378
379 static void
380 ar8xxx_phy_init(struct ar8xxx_priv *priv)
381 {
382         int i;
383         struct mii_bus *bus;
384
385         bus = priv->mii_bus;
386         for (i = 0; i < AR8XXX_NUM_PHYS; i++) {
387                 if (priv->chip->phy_fixup)
388                         priv->chip->phy_fixup(priv, i);
389
390                 /* initialize the port itself */
391                 mdiobus_write(bus, i, MII_ADVERTISE,
392                         ADVERTISE_ALL | ADVERTISE_PAUSE_CAP | ADVERTISE_PAUSE_ASYM);
393                 if (ar8xxx_has_gige(priv))
394                         mdiobus_write(bus, i, MII_CTRL1000, ADVERTISE_1000FULL);
395                 mdiobus_write(bus, i, MII_BMCR, BMCR_RESET | BMCR_ANENABLE);
396         }
397
398         ar8xxx_phy_poll_reset(bus);
399 }
400
401 static u32
402 ar8xxx_mii_read(struct ar8xxx_priv *priv, int reg)
403 {
404         struct mii_bus *bus = priv->mii_bus;
405         u16 r1, r2, page;
406         u16 lo, hi;
407
408         split_addr((u32) reg, &r1, &r2, &page);
409
410         mutex_lock(&bus->mdio_lock);
411
412         bus->write(bus, 0x18, 0, page);
413         usleep_range(1000, 2000); /* wait for the page switch to propagate */
414         lo = bus->read(bus, 0x10 | r2, r1);
415         hi = bus->read(bus, 0x10 | r2, r1 + 1);
416
417         mutex_unlock(&bus->mdio_lock);
418
419         return (hi << 16) | lo;
420 }
421
422 static void
423 ar8xxx_mii_write(struct ar8xxx_priv *priv, int reg, u32 val)
424 {
425         struct mii_bus *bus = priv->mii_bus;
426         u16 r1, r2, r3;
427         u16 lo, hi;
428
429         split_addr((u32) reg, &r1, &r2, &r3);
430         lo = val & 0xffff;
431         hi = (u16) (val >> 16);
432
433         mutex_lock(&bus->mdio_lock);
434
435         bus->write(bus, 0x18, 0, r3);
436         usleep_range(1000, 2000); /* wait for the page switch to propagate */
437         if (priv->chip->mii_lo_first) {
438                 bus->write(bus, 0x10 | r2, r1, lo);
439                 bus->write(bus, 0x10 | r2, r1 + 1, hi);
440         } else {
441                 bus->write(bus, 0x10 | r2, r1 + 1, hi);
442                 bus->write(bus, 0x10 | r2, r1, lo);
443         }
444
445         mutex_unlock(&bus->mdio_lock);
446 }
447
448 static u32
449 ar8xxx_mii_rmw(struct ar8xxx_priv *priv, int reg, u32 mask, u32 val)
450 {
451         struct mii_bus *bus = priv->mii_bus;
452         u16 r1, r2, page;
453         u16 lo, hi;
454         u32 ret;
455
456         split_addr((u32) reg, &r1, &r2, &page);
457
458         mutex_lock(&bus->mdio_lock);
459
460         bus->write(bus, 0x18, 0, page);
461         usleep_range(1000, 2000); /* wait for the page switch to propagate */
462
463         lo = bus->read(bus, 0x10 | r2, r1);
464         hi = bus->read(bus, 0x10 | r2, r1 + 1);
465
466         ret = hi << 16 | lo;
467         ret &= ~mask;
468         ret |= val;
469
470         lo = ret & 0xffff;
471         hi = (u16) (ret >> 16);
472
473         if (priv->chip->mii_lo_first) {
474                 bus->write(bus, 0x10 | r2, r1, lo);
475                 bus->write(bus, 0x10 | r2, r1 + 1, hi);
476         } else {
477                 bus->write(bus, 0x10 | r2, r1 + 1, hi);
478                 bus->write(bus, 0x10 | r2, r1, lo);
479         }
480
481         mutex_unlock(&bus->mdio_lock);
482
483         return ret;
484 }
485
486
487 static void
488 ar8xxx_phy_dbg_write(struct ar8xxx_priv *priv, int phy_addr,
489                      u16 dbg_addr, u16 dbg_data)
490 {
491         struct mii_bus *bus = priv->mii_bus;
492
493         mutex_lock(&bus->mdio_lock);
494         bus->write(bus, phy_addr, MII_ATH_DBG_ADDR, dbg_addr);
495         bus->write(bus, phy_addr, MII_ATH_DBG_DATA, dbg_data);
496         mutex_unlock(&bus->mdio_lock);
497 }
498
499 static void
500 ar8xxx_phy_mmd_write(struct ar8xxx_priv *priv, int phy_addr, u16 addr, u16 data)
501 {
502         struct mii_bus *bus = priv->mii_bus;
503
504         mutex_lock(&bus->mdio_lock);
505         bus->write(bus, phy_addr, MII_ATH_MMD_ADDR, addr);
506         bus->write(bus, phy_addr, MII_ATH_MMD_DATA, data);
507         mutex_unlock(&bus->mdio_lock);
508 }
509
510 static inline u32
511 ar8xxx_rmw(struct ar8xxx_priv *priv, int reg, u32 mask, u32 val)
512 {
513         return priv->rmw(priv, reg, mask, val);
514 }
515
516 static inline void
517 ar8xxx_reg_set(struct ar8xxx_priv *priv, int reg, u32 val)
518 {
519         priv->rmw(priv, reg, 0, val);
520 }
521
522 static int
523 ar8xxx_reg_wait(struct ar8xxx_priv *priv, u32 reg, u32 mask, u32 val,
524                 unsigned timeout)
525 {
526         int i;
527
528         for (i = 0; i < timeout; i++) {
529                 u32 t;
530
531                 t = priv->read(priv, reg);
532                 if ((t & mask) == val)
533                         return 0;
534
535                 usleep_range(1000, 2000);
536         }
537
538         return -ETIMEDOUT;
539 }
540
541 static int
542 ar8xxx_mib_op(struct ar8xxx_priv *priv, u32 op)
543 {
544         unsigned mib_func = priv->chip->mib_func;
545         int ret;
546
547         lockdep_assert_held(&priv->mib_lock);
548
549         /* Capture the hardware statistics for all ports */
550         ar8xxx_rmw(priv, mib_func, AR8216_MIB_FUNC, (op << AR8216_MIB_FUNC_S));
551
552         /* Wait for the capturing to complete. */
553         ret = ar8xxx_reg_wait(priv, mib_func, AR8216_MIB_BUSY, 0, 10);
554         if (ret)
555                 goto out;
556
557         ret = 0;
558
559 out:
560         return ret;
561 }
562
563 static int
564 ar8xxx_mib_capture(struct ar8xxx_priv *priv)
565 {
566         return ar8xxx_mib_op(priv, AR8216_MIB_FUNC_CAPTURE);
567 }
568
569 static int
570 ar8xxx_mib_flush(struct ar8xxx_priv *priv)
571 {
572         return ar8xxx_mib_op(priv, AR8216_MIB_FUNC_FLUSH);
573 }
574
575 static void
576 ar8xxx_mib_fetch_port_stat(struct ar8xxx_priv *priv, int port, bool flush)
577 {
578         unsigned int base;
579         u64 *mib_stats;
580         int i;
581
582         WARN_ON(port >= priv->dev.ports);
583
584         lockdep_assert_held(&priv->mib_lock);
585
586         base = priv->chip->reg_port_stats_start +
587                priv->chip->reg_port_stats_length * port;
588
589         mib_stats = &priv->mib_stats[port * priv->chip->num_mibs];
590         for (i = 0; i < priv->chip->num_mibs; i++) {
591                 const struct ar8xxx_mib_desc *mib;
592                 u64 t;
593
594                 mib = &priv->chip->mib_decs[i];
595                 t = priv->read(priv, base + mib->offset);
596                 if (mib->size == 2) {
597                         u64 hi;
598
599                         hi = priv->read(priv, base + mib->offset + 4);
600                         t |= hi << 32;
601                 }
602
603                 if (flush)
604                         mib_stats[i] = 0;
605                 else
606                         mib_stats[i] += t;
607         }
608 }
609
610 static void
611 ar8216_read_port_link(struct ar8xxx_priv *priv, int port,
612                       struct switch_port_link *link)
613 {
614         u32 status;
615         u32 speed;
616
617         memset(link, '\0', sizeof(*link));
618
619         status = priv->chip->read_port_status(priv, port);
620
621         link->aneg = !!(status & AR8216_PORT_STATUS_LINK_AUTO);
622         if (link->aneg) {
623                 link->link = !!(status & AR8216_PORT_STATUS_LINK_UP);
624         } else {
625                 link->link = true;
626
627                 if (priv->get_port_link) {
628                         int err;
629
630                         err = priv->get_port_link(port);
631                         if (err >= 0)
632                                 link->link = !!err;
633                 }
634         }
635
636         if (!link->link)
637                 return;
638
639         link->duplex = !!(status & AR8216_PORT_STATUS_DUPLEX);
640         link->tx_flow = !!(status & AR8216_PORT_STATUS_TXFLOW);
641         link->rx_flow = !!(status & AR8216_PORT_STATUS_RXFLOW);
642
643         speed = (status & AR8216_PORT_STATUS_SPEED) >>
644                  AR8216_PORT_STATUS_SPEED_S;
645
646         switch (speed) {
647         case AR8216_PORT_SPEED_10M:
648                 link->speed = SWITCH_PORT_SPEED_10;
649                 break;
650         case AR8216_PORT_SPEED_100M:
651                 link->speed = SWITCH_PORT_SPEED_100;
652                 break;
653         case AR8216_PORT_SPEED_1000M:
654                 link->speed = SWITCH_PORT_SPEED_1000;
655                 break;
656         default:
657                 link->speed = SWITCH_PORT_SPEED_UNKNOWN;
658                 break;
659         }
660 }
661
662 static struct sk_buff *
663 ar8216_mangle_tx(struct net_device *dev, struct sk_buff *skb)
664 {
665         struct ar8xxx_priv *priv = dev->phy_ptr;
666         unsigned char *buf;
667
668         if (unlikely(!priv))
669                 goto error;
670
671         if (!priv->vlan)
672                 goto send;
673
674         if (unlikely(skb_headroom(skb) < 2)) {
675                 if (pskb_expand_head(skb, 2, 0, GFP_ATOMIC) < 0)
676                         goto error;
677         }
678
679         buf = skb_push(skb, 2);
680         buf[0] = 0x10;
681         buf[1] = 0x80;
682
683 send:
684         return skb;
685
686 error:
687         dev_kfree_skb_any(skb);
688         return NULL;
689 }
690
691 static void
692 ar8216_mangle_rx(struct net_device *dev, struct sk_buff *skb)
693 {
694         struct ar8xxx_priv *priv;
695         unsigned char *buf;
696         int port, vlan;
697
698         priv = dev->phy_ptr;
699         if (!priv)
700                 return;
701
702         /* don't strip the header if vlan mode is disabled */
703         if (!priv->vlan)
704                 return;
705
706         /* strip header, get vlan id */
707         buf = skb->data;
708         skb_pull(skb, 2);
709
710         /* check for vlan header presence */
711         if ((buf[12 + 2] != 0x81) || (buf[13 + 2] != 0x00))
712                 return;
713
714         port = buf[0] & 0xf;
715
716         /* no need to fix up packets coming from a tagged source */
717         if (priv->vlan_tagged & (1 << port))
718                 return;
719
720         /* lookup port vid from local table, the switch passes an invalid vlan id */
721         vlan = priv->vlan_id[priv->pvid[port]];
722
723         buf[14 + 2] &= 0xf0;
724         buf[14 + 2] |= vlan >> 8;
725         buf[15 + 2] = vlan & 0xff;
726 }
727
728 static int
729 ar8216_wait_bit(struct ar8xxx_priv *priv, int reg, u32 mask, u32 val)
730 {
731         int timeout = 20;
732         u32 t = 0;
733
734         while (1) {
735                 t = priv->read(priv, reg);
736                 if ((t & mask) == val)
737                         return 0;
738
739                 if (timeout-- <= 0)
740                         break;
741
742                 udelay(10);
743         }
744
745         pr_err("ar8216: timeout on reg %08x: %08x & %08x != %08x\n",
746                (unsigned int) reg, t, mask, val);
747         return -ETIMEDOUT;
748 }
749
750 static void
751 ar8216_vtu_op(struct ar8xxx_priv *priv, u32 op, u32 val)
752 {
753         if (ar8216_wait_bit(priv, AR8216_REG_VTU, AR8216_VTU_ACTIVE, 0))
754                 return;
755         if ((op & AR8216_VTU_OP) == AR8216_VTU_OP_LOAD) {
756                 val &= AR8216_VTUDATA_MEMBER;
757                 val |= AR8216_VTUDATA_VALID;
758                 priv->write(priv, AR8216_REG_VTU_DATA, val);
759         }
760         op |= AR8216_VTU_ACTIVE;
761         priv->write(priv, AR8216_REG_VTU, op);
762 }
763
764 static void
765 ar8216_vtu_flush(struct ar8xxx_priv *priv)
766 {
767         ar8216_vtu_op(priv, AR8216_VTU_OP_FLUSH, 0);
768 }
769
770 static void
771 ar8216_vtu_load_vlan(struct ar8xxx_priv *priv, u32 vid, u32 port_mask)
772 {
773         u32 op;
774
775         op = AR8216_VTU_OP_LOAD | (vid << AR8216_VTU_VID_S);
776         ar8216_vtu_op(priv, op, port_mask);
777 }
778
779 static int
780 ar8216_atu_flush(struct ar8xxx_priv *priv)
781 {
782         int ret;
783
784         ret = ar8216_wait_bit(priv, AR8216_REG_ATU, AR8216_ATU_ACTIVE, 0);
785         if (!ret)
786                 priv->write(priv, AR8216_REG_ATU, AR8216_ATU_OP_FLUSH);
787
788         return ret;
789 }
790
791 static u32
792 ar8216_read_port_status(struct ar8xxx_priv *priv, int port)
793 {
794         return priv->read(priv, AR8216_REG_PORT_STATUS(port));
795 }
796
797 static void
798 ar8216_setup_port(struct ar8xxx_priv *priv, int port, u32 members)
799 {
800         u32 header;
801         u32 egress, ingress;
802         u32 pvid;
803
804         if (priv->vlan) {
805                 pvid = priv->vlan_id[priv->pvid[port]];
806                 if (priv->vlan_tagged & (1 << port))
807                         egress = AR8216_OUT_ADD_VLAN;
808                 else
809                         egress = AR8216_OUT_STRIP_VLAN;
810                 ingress = AR8216_IN_SECURE;
811         } else {
812                 pvid = port;
813                 egress = AR8216_OUT_KEEP;
814                 ingress = AR8216_IN_PORT_ONLY;
815         }
816
817         if (chip_is_ar8216(priv) && priv->vlan && port == AR8216_PORT_CPU)
818                 header = AR8216_PORT_CTRL_HEADER;
819         else
820                 header = 0;
821
822         ar8xxx_rmw(priv, AR8216_REG_PORT_CTRL(port),
823                    AR8216_PORT_CTRL_LEARN | AR8216_PORT_CTRL_VLAN_MODE |
824                    AR8216_PORT_CTRL_SINGLE_VLAN | AR8216_PORT_CTRL_STATE |
825                    AR8216_PORT_CTRL_HEADER | AR8216_PORT_CTRL_LEARN_LOCK,
826                    AR8216_PORT_CTRL_LEARN | header |
827                    (egress << AR8216_PORT_CTRL_VLAN_MODE_S) |
828                    (AR8216_PORT_STATE_FORWARD << AR8216_PORT_CTRL_STATE_S));
829
830         ar8xxx_rmw(priv, AR8216_REG_PORT_VLAN(port),
831                    AR8216_PORT_VLAN_DEST_PORTS | AR8216_PORT_VLAN_MODE |
832                    AR8216_PORT_VLAN_DEFAULT_ID,
833                    (members << AR8216_PORT_VLAN_DEST_PORTS_S) |
834                    (ingress << AR8216_PORT_VLAN_MODE_S) |
835                    (pvid << AR8216_PORT_VLAN_DEFAULT_ID_S));
836 }
837
838 static int
839 ar8216_hw_init(struct ar8xxx_priv *priv)
840 {
841         if (priv->initialized)
842                 return 0;
843
844         ar8xxx_phy_init(priv);
845
846         priv->initialized = true;
847         return 0;
848 }
849
850 static void
851 ar8216_init_globals(struct ar8xxx_priv *priv)
852 {
853         /* standard atheros magic */
854         priv->write(priv, 0x38, 0xc000050e);
855
856         ar8xxx_rmw(priv, AR8216_REG_GLOBAL_CTRL,
857                    AR8216_GCTRL_MTU, 1518 + 8 + 2);
858 }
859
860 static void
861 ar8216_init_port(struct ar8xxx_priv *priv, int port)
862 {
863         /* Enable port learning and tx */
864         priv->write(priv, AR8216_REG_PORT_CTRL(port),
865                 AR8216_PORT_CTRL_LEARN |
866                 (4 << AR8216_PORT_CTRL_STATE_S));
867
868         priv->write(priv, AR8216_REG_PORT_VLAN(port), 0);
869
870         if (port == AR8216_PORT_CPU) {
871                 priv->write(priv, AR8216_REG_PORT_STATUS(port),
872                         AR8216_PORT_STATUS_LINK_UP |
873                         (ar8xxx_has_gige(priv) ?
874                                 AR8216_PORT_SPEED_1000M : AR8216_PORT_SPEED_100M) |
875                         AR8216_PORT_STATUS_TXMAC |
876                         AR8216_PORT_STATUS_RXMAC |
877                         (chip_is_ar8316(priv) ? AR8216_PORT_STATUS_RXFLOW : 0) |
878                         (chip_is_ar8316(priv) ? AR8216_PORT_STATUS_TXFLOW : 0) |
879                         AR8216_PORT_STATUS_DUPLEX);
880         } else {
881                 priv->write(priv, AR8216_REG_PORT_STATUS(port),
882                         AR8216_PORT_STATUS_LINK_AUTO);
883         }
884 }
885
886 static void
887 ar8236_setup_port(struct ar8xxx_priv *priv, int port, u32 members)
888 {
889         u32 egress, ingress;
890         u32 pvid;
891
892         if (priv->vlan) {
893                 pvid = priv->vlan_id[priv->pvid[port]];
894                 if (priv->vlan_tagged & (1 << port))
895                         egress = AR8216_OUT_ADD_VLAN;
896                 else
897                         egress = AR8216_OUT_STRIP_VLAN;
898                 ingress = AR8216_IN_SECURE;
899         } else {
900                 pvid = port;
901                 egress = AR8216_OUT_KEEP;
902                 ingress = AR8216_IN_PORT_ONLY;
903         }
904
905         ar8xxx_rmw(priv, AR8216_REG_PORT_CTRL(port),
906                    AR8216_PORT_CTRL_LEARN | AR8216_PORT_CTRL_VLAN_MODE |
907                    AR8216_PORT_CTRL_SINGLE_VLAN | AR8216_PORT_CTRL_STATE |
908                    AR8216_PORT_CTRL_HEADER | AR8216_PORT_CTRL_LEARN_LOCK,
909                    AR8216_PORT_CTRL_LEARN |
910                    (egress << AR8216_PORT_CTRL_VLAN_MODE_S) |
911                    (AR8216_PORT_STATE_FORWARD << AR8216_PORT_CTRL_STATE_S));
912
913         ar8xxx_rmw(priv, AR8236_REG_PORT_VLAN(port),
914                    AR8236_PORT_VLAN_DEFAULT_ID,
915                    (pvid << AR8236_PORT_VLAN_DEFAULT_ID_S));
916
917         ar8xxx_rmw(priv, AR8236_REG_PORT_VLAN2(port),
918                    AR8236_PORT_VLAN2_VLAN_MODE |
919                    AR8236_PORT_VLAN2_MEMBER,
920                    (ingress << AR8236_PORT_VLAN2_VLAN_MODE_S) |
921                    (members << AR8236_PORT_VLAN2_MEMBER_S));
922 }
923
924 static void
925 ar8236_init_globals(struct ar8xxx_priv *priv)
926 {
927         /* enable jumbo frames */
928         ar8xxx_rmw(priv, AR8216_REG_GLOBAL_CTRL,
929                    AR8316_GCTRL_MTU, 9018 + 8 + 2);
930
931         /* enable cpu port to receive arp frames */
932         ar8xxx_rmw(priv, AR8216_REG_ATU_CTRL,
933                    AR8236_ATU_CTRL_RES, AR8236_ATU_CTRL_RES);
934
935         /* enable cpu port to receive multicast and broadcast frames */
936         ar8xxx_rmw(priv, AR8216_REG_FLOOD_MASK,
937                    AR8236_FM_CPU_BROADCAST_EN | AR8236_FM_CPU_BCAST_FWD_EN,
938                    AR8236_FM_CPU_BROADCAST_EN | AR8236_FM_CPU_BCAST_FWD_EN);
939
940         /* Enable MIB counters */
941         ar8xxx_rmw(priv, AR8216_REG_MIB_FUNC, AR8216_MIB_FUNC | AR8236_MIB_EN,
942                    (AR8216_MIB_FUNC_NO_OP << AR8216_MIB_FUNC_S) |
943                    AR8236_MIB_EN);
944 }
945
946 static int
947 ar8316_hw_init(struct ar8xxx_priv *priv)
948 {
949         u32 val, newval;
950
951         val = priv->read(priv, AR8316_REG_POSTRIP);
952
953         if (priv->phy->interface == PHY_INTERFACE_MODE_RGMII) {
954                 if (priv->port4_phy) {
955                         /* value taken from Ubiquiti RouterStation Pro */
956                         newval = 0x81461bea;
957                         pr_info("ar8316: Using port 4 as PHY\n");
958                 } else {
959                         newval = 0x01261be2;
960                         pr_info("ar8316: Using port 4 as switch port\n");
961                 }
962         } else if (priv->phy->interface == PHY_INTERFACE_MODE_GMII) {
963                 /* value taken from AVM Fritz!Box 7390 sources */
964                 newval = 0x010e5b71;
965         } else {
966                 /* no known value for phy interface */
967                 pr_err("ar8316: unsupported mii mode: %d.\n",
968                        priv->phy->interface);
969                 return -EINVAL;
970         }
971
972         if (val == newval)
973                 goto out;
974
975         priv->write(priv, AR8316_REG_POSTRIP, newval);
976
977         if (priv->port4_phy &&
978             priv->phy->interface == PHY_INTERFACE_MODE_RGMII) {
979                 /* work around for phy4 rgmii mode */
980                 ar8xxx_phy_dbg_write(priv, 4, 0x12, 0x480c);
981                 /* rx delay */
982                 ar8xxx_phy_dbg_write(priv, 4, 0x0, 0x824e);
983                 /* tx delay */
984                 ar8xxx_phy_dbg_write(priv, 4, 0x5, 0x3d47);
985                 msleep(1000);
986         }
987
988         ar8xxx_phy_init(priv);
989
990 out:
991         priv->initialized = true;
992         return 0;
993 }
994
995 static void
996 ar8316_init_globals(struct ar8xxx_priv *priv)
997 {
998         /* standard atheros magic */
999         priv->write(priv, 0x38, 0xc000050e);
1000
1001         /* enable cpu port to receive multicast and broadcast frames */
1002         priv->write(priv, AR8216_REG_FLOOD_MASK, 0x003f003f);
1003
1004         /* enable jumbo frames */
1005         ar8xxx_rmw(priv, AR8216_REG_GLOBAL_CTRL,
1006                    AR8316_GCTRL_MTU, 9018 + 8 + 2);
1007
1008         /* Enable MIB counters */
1009         ar8xxx_rmw(priv, AR8216_REG_MIB_FUNC, AR8216_MIB_FUNC | AR8236_MIB_EN,
1010                    (AR8216_MIB_FUNC_NO_OP << AR8216_MIB_FUNC_S) |
1011                    AR8236_MIB_EN);
1012 }
1013
1014 static u32
1015 ar8327_get_pad_cfg(struct ar8327_pad_cfg *cfg)
1016 {
1017         u32 t;
1018
1019         if (!cfg)
1020                 return 0;
1021
1022         t = 0;
1023         switch (cfg->mode) {
1024         case AR8327_PAD_NC:
1025                 break;
1026
1027         case AR8327_PAD_MAC2MAC_MII:
1028                 t = AR8327_PAD_MAC_MII_EN;
1029                 if (cfg->rxclk_sel)
1030                         t |= AR8327_PAD_MAC_MII_RXCLK_SEL;
1031                 if (cfg->txclk_sel)
1032                         t |= AR8327_PAD_MAC_MII_TXCLK_SEL;
1033                 break;
1034
1035         case AR8327_PAD_MAC2MAC_GMII:
1036                 t = AR8327_PAD_MAC_GMII_EN;
1037                 if (cfg->rxclk_sel)
1038                         t |= AR8327_PAD_MAC_GMII_RXCLK_SEL;
1039                 if (cfg->txclk_sel)
1040                         t |= AR8327_PAD_MAC_GMII_TXCLK_SEL;
1041                 break;
1042
1043         case AR8327_PAD_MAC_SGMII:
1044                 t = AR8327_PAD_SGMII_EN;
1045
1046                 /*
1047                  * WAR for the QUalcomm Atheros AP136 board.
1048                  * It seems that RGMII TX/RX delay settings needs to be
1049                  * applied for SGMII mode as well, The ethernet is not
1050                  * reliable without this.
1051                  */
1052                 t |= cfg->txclk_delay_sel << AR8327_PAD_RGMII_TXCLK_DELAY_SEL_S;
1053                 t |= cfg->rxclk_delay_sel << AR8327_PAD_RGMII_RXCLK_DELAY_SEL_S;
1054                 if (cfg->rxclk_delay_en)
1055                         t |= AR8327_PAD_RGMII_RXCLK_DELAY_EN;
1056                 if (cfg->txclk_delay_en)
1057                         t |= AR8327_PAD_RGMII_TXCLK_DELAY_EN;
1058
1059                 if (cfg->sgmii_delay_en)
1060                         t |= AR8327_PAD_SGMII_DELAY_EN;
1061
1062                 break;
1063
1064         case AR8327_PAD_MAC2PHY_MII:
1065                 t = AR8327_PAD_PHY_MII_EN;
1066                 if (cfg->rxclk_sel)
1067                         t |= AR8327_PAD_PHY_MII_RXCLK_SEL;
1068                 if (cfg->txclk_sel)
1069                         t |= AR8327_PAD_PHY_MII_TXCLK_SEL;
1070                 break;
1071
1072         case AR8327_PAD_MAC2PHY_GMII:
1073                 t = AR8327_PAD_PHY_GMII_EN;
1074                 if (cfg->pipe_rxclk_sel)
1075                         t |= AR8327_PAD_PHY_GMII_PIPE_RXCLK_SEL;
1076                 if (cfg->rxclk_sel)
1077                         t |= AR8327_PAD_PHY_GMII_RXCLK_SEL;
1078                 if (cfg->txclk_sel)
1079                         t |= AR8327_PAD_PHY_GMII_TXCLK_SEL;
1080                 break;
1081
1082         case AR8327_PAD_MAC_RGMII:
1083                 t = AR8327_PAD_RGMII_EN;
1084                 t |= cfg->txclk_delay_sel << AR8327_PAD_RGMII_TXCLK_DELAY_SEL_S;
1085                 t |= cfg->rxclk_delay_sel << AR8327_PAD_RGMII_RXCLK_DELAY_SEL_S;
1086                 if (cfg->rxclk_delay_en)
1087                         t |= AR8327_PAD_RGMII_RXCLK_DELAY_EN;
1088                 if (cfg->txclk_delay_en)
1089                         t |= AR8327_PAD_RGMII_TXCLK_DELAY_EN;
1090                 break;
1091
1092         case AR8327_PAD_PHY_GMII:
1093                 t = AR8327_PAD_PHYX_GMII_EN;
1094                 break;
1095
1096         case AR8327_PAD_PHY_RGMII:
1097                 t = AR8327_PAD_PHYX_RGMII_EN;
1098                 break;
1099
1100         case AR8327_PAD_PHY_MII:
1101                 t = AR8327_PAD_PHYX_MII_EN;
1102                 break;
1103         }
1104
1105         return t;
1106 }
1107
1108 static void
1109 ar8327_phy_fixup(struct ar8xxx_priv *priv, int phy)
1110 {
1111         switch (priv->chip_rev) {
1112         case 1:
1113                 /* For 100M waveform */
1114                 ar8xxx_phy_dbg_write(priv, phy, 0, 0x02ea);
1115                 /* Turn on Gigabit clock */
1116                 ar8xxx_phy_dbg_write(priv, phy, 0x3d, 0x68a0);
1117                 break;
1118
1119         case 2:
1120                 ar8xxx_phy_mmd_write(priv, phy, 0x7, 0x3c);
1121                 ar8xxx_phy_mmd_write(priv, phy, 0x4007, 0x0);
1122                 /* fallthrough */
1123         case 4:
1124                 ar8xxx_phy_mmd_write(priv, phy, 0x3, 0x800d);
1125                 ar8xxx_phy_mmd_write(priv, phy, 0x4003, 0x803f);
1126
1127                 ar8xxx_phy_dbg_write(priv, phy, 0x3d, 0x6860);
1128                 ar8xxx_phy_dbg_write(priv, phy, 0x5, 0x2c46);
1129                 ar8xxx_phy_dbg_write(priv, phy, 0x3c, 0x6000);
1130                 break;
1131         }
1132 }
1133
1134 static u32
1135 ar8327_get_port_init_status(struct ar8327_port_cfg *cfg)
1136 {
1137         u32 t;
1138
1139         if (!cfg->force_link)
1140                 return AR8216_PORT_STATUS_LINK_AUTO;
1141
1142         t = AR8216_PORT_STATUS_TXMAC | AR8216_PORT_STATUS_RXMAC;
1143         t |= cfg->duplex ? AR8216_PORT_STATUS_DUPLEX : 0;
1144         t |= cfg->rxpause ? AR8216_PORT_STATUS_RXFLOW : 0;
1145         t |= cfg->txpause ? AR8216_PORT_STATUS_TXFLOW : 0;
1146
1147         switch (cfg->speed) {
1148         case AR8327_PORT_SPEED_10:
1149                 t |= AR8216_PORT_SPEED_10M;
1150                 break;
1151         case AR8327_PORT_SPEED_100:
1152                 t |= AR8216_PORT_SPEED_100M;
1153                 break;
1154         case AR8327_PORT_SPEED_1000:
1155                 t |= AR8216_PORT_SPEED_1000M;
1156                 break;
1157         }
1158
1159         return t;
1160 }
1161
1162 #define AR8327_LED_ENTRY(_num, _reg, _shift) \
1163         [_num] = { .reg = (_reg), .shift = (_shift) }
1164
1165 static const struct ar8327_led_entry
1166 ar8327_led_map[AR8327_NUM_LEDS] = {
1167         AR8327_LED_ENTRY(AR8327_LED_PHY0_0, 0, 14),
1168         AR8327_LED_ENTRY(AR8327_LED_PHY0_1, 1, 14),
1169         AR8327_LED_ENTRY(AR8327_LED_PHY0_2, 2, 14),
1170
1171         AR8327_LED_ENTRY(AR8327_LED_PHY1_0, 3, 8),
1172         AR8327_LED_ENTRY(AR8327_LED_PHY1_1, 3, 10),
1173         AR8327_LED_ENTRY(AR8327_LED_PHY1_2, 3, 12),
1174
1175         AR8327_LED_ENTRY(AR8327_LED_PHY2_0, 3, 14),
1176         AR8327_LED_ENTRY(AR8327_LED_PHY2_1, 3, 16),
1177         AR8327_LED_ENTRY(AR8327_LED_PHY2_2, 3, 18),
1178
1179         AR8327_LED_ENTRY(AR8327_LED_PHY3_0, 3, 20),
1180         AR8327_LED_ENTRY(AR8327_LED_PHY3_1, 3, 22),
1181         AR8327_LED_ENTRY(AR8327_LED_PHY3_2, 3, 24),
1182
1183         AR8327_LED_ENTRY(AR8327_LED_PHY4_0, 0, 30),
1184         AR8327_LED_ENTRY(AR8327_LED_PHY4_1, 1, 30),
1185         AR8327_LED_ENTRY(AR8327_LED_PHY4_2, 2, 30),
1186 };
1187
1188 static void
1189 ar8327_set_led_pattern(struct ar8xxx_priv *priv, unsigned int led_num,
1190                        enum ar8327_led_pattern pattern)
1191 {
1192         const struct ar8327_led_entry *entry;
1193
1194         entry = &ar8327_led_map[led_num];
1195         ar8xxx_rmw(priv, AR8327_REG_LED_CTRL(entry->reg),
1196                    (3 << entry->shift), pattern << entry->shift);
1197 }
1198
1199 static void
1200 ar8327_led_work_func(struct work_struct *work)
1201 {
1202         struct ar8327_led *aled;
1203         u8 pattern;
1204
1205         aled = container_of(work, struct ar8327_led, led_work);
1206
1207         spin_lock(&aled->lock);
1208         pattern = aled->pattern;
1209         spin_unlock(&aled->lock);
1210
1211         ar8327_set_led_pattern(aled->sw_priv, aled->led_num,
1212                                pattern);
1213 }
1214
1215 static void
1216 ar8327_led_schedule_change(struct ar8327_led *aled, u8 pattern)
1217 {
1218         if (aled->pattern == pattern)
1219                 return;
1220
1221         aled->pattern = pattern;
1222         schedule_work(&aled->led_work);
1223 }
1224
1225 static inline struct ar8327_led *
1226 led_cdev_to_ar8327_led(struct led_classdev *led_cdev)
1227 {
1228         return container_of(led_cdev, struct ar8327_led, cdev);
1229 }
1230
1231 static int
1232 ar8327_led_blink_set(struct led_classdev *led_cdev,
1233                      unsigned long *delay_on,
1234                      unsigned long *delay_off)
1235 {
1236         struct ar8327_led *aled = led_cdev_to_ar8327_led(led_cdev);
1237
1238         if (*delay_on == 0 && *delay_off == 0) {
1239                 *delay_on = 125;
1240                 *delay_off = 125;
1241         }
1242
1243         if (*delay_on != 125 || *delay_off != 125) {
1244                 /*
1245                  * The hardware only supports blinking at 4Hz. Fall back
1246                  * to software implementation in other cases.
1247                  */
1248                 return -EINVAL;
1249         }
1250
1251         spin_lock(&aled->lock);
1252
1253         aled->enable_hw_mode = false;
1254         ar8327_led_schedule_change(aled, AR8327_LED_PATTERN_BLINK);
1255
1256         spin_unlock(&aled->lock);
1257
1258         return 0;
1259 }
1260
1261 static void
1262 ar8327_led_set_brightness(struct led_classdev *led_cdev,
1263                           enum led_brightness brightness)
1264 {
1265         struct ar8327_led *aled = led_cdev_to_ar8327_led(led_cdev);
1266         u8 pattern;
1267         bool active;
1268
1269         active = (brightness != LED_OFF);
1270         active ^= aled->active_low;
1271
1272         pattern = (active) ? AR8327_LED_PATTERN_ON :
1273                              AR8327_LED_PATTERN_OFF;
1274
1275         spin_lock(&aled->lock);
1276
1277         aled->enable_hw_mode = false;
1278         ar8327_led_schedule_change(aled, pattern);
1279
1280         spin_unlock(&aled->lock);
1281 }
1282
1283 static ssize_t
1284 ar8327_led_enable_hw_mode_show(struct device *dev,
1285                                struct device_attribute *attr,
1286                                char *buf)
1287 {
1288         struct led_classdev *led_cdev = dev_get_drvdata(dev);
1289         struct ar8327_led *aled = led_cdev_to_ar8327_led(led_cdev);
1290         ssize_t ret = 0;
1291
1292         spin_lock(&aled->lock);
1293         ret += sprintf(buf, "%d\n", aled->enable_hw_mode);
1294         spin_unlock(&aled->lock);
1295
1296         return ret;
1297 }
1298
1299 static ssize_t
1300 ar8327_led_enable_hw_mode_store(struct device *dev,
1301                                 struct device_attribute *attr,
1302                                 const char *buf,
1303                                 size_t size)
1304 {
1305         struct led_classdev *led_cdev = dev_get_drvdata(dev);
1306         struct ar8327_led *aled = led_cdev_to_ar8327_led(led_cdev);
1307         u8 pattern;
1308         u8 value;
1309         int ret;
1310
1311         ret = kstrtou8(buf, 10, &value);
1312         if (ret < 0)
1313                 return -EINVAL;
1314
1315         spin_lock(&aled->lock);
1316
1317         aled->enable_hw_mode = !!value;
1318         if (aled->enable_hw_mode)
1319                 pattern = AR8327_LED_PATTERN_RULE;
1320         else
1321                 pattern = AR8327_LED_PATTERN_OFF;
1322
1323         ar8327_led_schedule_change(aled, pattern);
1324
1325         spin_unlock(&aled->lock);
1326
1327         return size;
1328 }
1329
1330 static DEVICE_ATTR(enable_hw_mode,  S_IRUGO | S_IWUSR,
1331                    ar8327_led_enable_hw_mode_show,
1332                    ar8327_led_enable_hw_mode_store);
1333
1334 static int
1335 ar8327_led_register(struct ar8327_led *aled)
1336 {
1337         int ret;
1338
1339         ret = led_classdev_register(NULL, &aled->cdev);
1340         if (ret < 0)
1341                 return ret;
1342
1343         if (aled->mode == AR8327_LED_MODE_HW) {
1344                 ret = device_create_file(aled->cdev.dev,
1345                                          &dev_attr_enable_hw_mode);
1346                 if (ret)
1347                         goto err_unregister;
1348         }
1349
1350         return 0;
1351
1352 err_unregister:
1353         led_classdev_unregister(&aled->cdev);
1354         return ret;
1355 }
1356
1357 static void
1358 ar8327_led_unregister(struct ar8327_led *aled)
1359 {
1360         if (aled->mode == AR8327_LED_MODE_HW)
1361                 device_remove_file(aled->cdev.dev, &dev_attr_enable_hw_mode);
1362
1363         led_classdev_unregister(&aled->cdev);
1364         cancel_work_sync(&aled->led_work);
1365 }
1366
1367 static int
1368 ar8327_led_create(struct ar8xxx_priv *priv,
1369                   const struct ar8327_led_info *led_info)
1370 {
1371         struct ar8327_data *data = priv->chip_data;
1372         struct ar8327_led *aled;
1373         int ret;
1374
1375         if (!IS_ENABLED(CONFIG_AR8216_PHY_LEDS))
1376                 return 0;
1377
1378         if (!led_info->name)
1379                 return -EINVAL;
1380
1381         if (led_info->led_num >= AR8327_NUM_LEDS)
1382                 return -EINVAL;
1383
1384         aled = kzalloc(sizeof(*aled) + strlen(led_info->name) + 1,
1385                        GFP_KERNEL);
1386         if (!aled)
1387                 return -ENOMEM;
1388
1389         aled->sw_priv = priv;
1390         aled->led_num = led_info->led_num;
1391         aled->active_low = led_info->active_low;
1392         aled->mode = led_info->mode;
1393
1394         if (aled->mode == AR8327_LED_MODE_HW)
1395                 aled->enable_hw_mode = true;
1396
1397         aled->name = (char *)(aled + 1);
1398         strcpy(aled->name, led_info->name);
1399
1400         aled->cdev.name = aled->name;
1401         aled->cdev.brightness_set = ar8327_led_set_brightness;
1402         aled->cdev.blink_set = ar8327_led_blink_set;
1403         aled->cdev.default_trigger = led_info->default_trigger;
1404
1405         spin_lock_init(&aled->lock);
1406         mutex_init(&aled->mutex);
1407         INIT_WORK(&aled->led_work, ar8327_led_work_func);
1408
1409         ret = ar8327_led_register(aled);
1410         if (ret)
1411                 goto err_free;
1412
1413         data->leds[data->num_leds++] = aled;
1414
1415         return 0;
1416
1417 err_free:
1418         kfree(aled);
1419         return ret;
1420 }
1421
1422 static void
1423 ar8327_led_destroy(struct ar8327_led *aled)
1424 {
1425         ar8327_led_unregister(aled);
1426         kfree(aled);
1427 }
1428
1429 static void
1430 ar8327_leds_init(struct ar8xxx_priv *priv)
1431 {
1432         struct ar8327_data *data = priv->chip_data;
1433         unsigned i;
1434
1435         if (!IS_ENABLED(CONFIG_AR8216_PHY_LEDS))
1436                 return;
1437
1438         for (i = 0; i < data->num_leds; i++) {
1439                 struct ar8327_led *aled;
1440
1441                 aled = data->leds[i];
1442
1443                 if (aled->enable_hw_mode)
1444                         aled->pattern = AR8327_LED_PATTERN_RULE;
1445                 else
1446                         aled->pattern = AR8327_LED_PATTERN_OFF;
1447
1448                 ar8327_set_led_pattern(priv, aled->led_num, aled->pattern);
1449         }
1450 }
1451
1452 static void
1453 ar8327_leds_cleanup(struct ar8xxx_priv *priv)
1454 {
1455         struct ar8327_data *data = priv->chip_data;
1456         unsigned i;
1457
1458         if (!IS_ENABLED(CONFIG_AR8216_PHY_LEDS))
1459                 return;
1460
1461         for (i = 0; i < data->num_leds; i++) {
1462                 struct ar8327_led *aled;
1463
1464                 aled = data->leds[i];
1465                 ar8327_led_destroy(aled);
1466         }
1467
1468         kfree(data->leds);
1469 }
1470
1471 static int
1472 ar8327_hw_config_pdata(struct ar8xxx_priv *priv,
1473                        struct ar8327_platform_data *pdata)
1474 {
1475         struct ar8327_led_cfg *led_cfg;
1476         struct ar8327_data *data = priv->chip_data;
1477         u32 pos, new_pos;
1478         u32 t;
1479
1480         if (!pdata)
1481                 return -EINVAL;
1482
1483         priv->get_port_link = pdata->get_port_link;
1484
1485         data->port0_status = ar8327_get_port_init_status(&pdata->port0_cfg);
1486         data->port6_status = ar8327_get_port_init_status(&pdata->port6_cfg);
1487
1488         t = ar8327_get_pad_cfg(pdata->pad0_cfg);
1489         if (chip_is_ar8337(priv))
1490                 t |= AR8337_PAD_MAC06_EXCHANGE_EN;
1491
1492         priv->write(priv, AR8327_REG_PAD0_MODE, t);
1493         t = ar8327_get_pad_cfg(pdata->pad5_cfg);
1494         priv->write(priv, AR8327_REG_PAD5_MODE, t);
1495         t = ar8327_get_pad_cfg(pdata->pad6_cfg);
1496         priv->write(priv, AR8327_REG_PAD6_MODE, t);
1497
1498         pos = priv->read(priv, AR8327_REG_POWER_ON_STRIP);
1499         new_pos = pos;
1500
1501         led_cfg = pdata->led_cfg;
1502         if (led_cfg) {
1503                 if (led_cfg->open_drain)
1504                         new_pos |= AR8327_POWER_ON_STRIP_LED_OPEN_EN;
1505                 else
1506                         new_pos &= ~AR8327_POWER_ON_STRIP_LED_OPEN_EN;
1507
1508                 priv->write(priv, AR8327_REG_LED_CTRL0, led_cfg->led_ctrl0);
1509                 priv->write(priv, AR8327_REG_LED_CTRL1, led_cfg->led_ctrl1);
1510                 priv->write(priv, AR8327_REG_LED_CTRL2, led_cfg->led_ctrl2);
1511                 priv->write(priv, AR8327_REG_LED_CTRL3, led_cfg->led_ctrl3);
1512
1513                 if (new_pos != pos)
1514                         new_pos |= AR8327_POWER_ON_STRIP_POWER_ON_SEL;
1515         }
1516
1517         if (pdata->sgmii_cfg) {
1518                 t = pdata->sgmii_cfg->sgmii_ctrl;
1519                 if (priv->chip_rev == 1)
1520                         t |= AR8327_SGMII_CTRL_EN_PLL |
1521                              AR8327_SGMII_CTRL_EN_RX |
1522                              AR8327_SGMII_CTRL_EN_TX;
1523                 else
1524                         t &= ~(AR8327_SGMII_CTRL_EN_PLL |
1525                                AR8327_SGMII_CTRL_EN_RX |
1526                                AR8327_SGMII_CTRL_EN_TX);
1527
1528                 priv->write(priv, AR8327_REG_SGMII_CTRL, t);
1529
1530                 if (pdata->sgmii_cfg->serdes_aen)
1531                         new_pos &= ~AR8327_POWER_ON_STRIP_SERDES_AEN;
1532                 else
1533                         new_pos |= AR8327_POWER_ON_STRIP_SERDES_AEN;
1534         }
1535
1536         priv->write(priv, AR8327_REG_POWER_ON_STRIP, new_pos);
1537
1538         if (pdata->leds && pdata->num_leds) {
1539                 int i;
1540
1541                 data->leds = kzalloc(pdata->num_leds * sizeof(void *),
1542                                      GFP_KERNEL);
1543                 if (!data->leds)
1544                         return -ENOMEM;
1545
1546                 for (i = 0; i < pdata->num_leds; i++)
1547                         ar8327_led_create(priv, &pdata->leds[i]);
1548         }
1549
1550         return 0;
1551 }
1552
1553 #ifdef CONFIG_OF
1554 static int
1555 ar8327_hw_config_of(struct ar8xxx_priv *priv, struct device_node *np)
1556 {
1557         struct ar8327_data *data = priv->chip_data;
1558         const __be32 *paddr;
1559         int len;
1560         int i;
1561
1562         paddr = of_get_property(np, "qca,ar8327-initvals", &len);
1563         if (!paddr || len < (2 * sizeof(*paddr)))
1564                 return -EINVAL;
1565
1566         len /= sizeof(*paddr);
1567
1568         for (i = 0; i < len - 1; i += 2) {
1569                 u32 reg;
1570                 u32 val;
1571
1572                 reg = be32_to_cpup(paddr + i);
1573                 val = be32_to_cpup(paddr + i + 1);
1574
1575                 switch (reg) {
1576                 case AR8327_REG_PORT_STATUS(0):
1577                         data->port0_status = val;
1578                         break;
1579                 case AR8327_REG_PORT_STATUS(6):
1580                         data->port6_status = val;
1581                         break;
1582                 default:
1583                         priv->write(priv, reg, val);
1584                         break;
1585                 }
1586         }
1587
1588         return 0;
1589 }
1590 #else
1591 static inline int
1592 ar8327_hw_config_of(struct ar8xxx_priv *priv, struct device_node *np)
1593 {
1594         return -EINVAL;
1595 }
1596 #endif
1597
1598 static int
1599 ar8327_hw_init(struct ar8xxx_priv *priv)
1600 {
1601         int ret;
1602
1603         priv->chip_data = kzalloc(sizeof(struct ar8327_data), GFP_KERNEL);
1604         if (!priv->chip_data)
1605                 return -ENOMEM;
1606
1607         if (priv->phy->dev.of_node)
1608                 ret = ar8327_hw_config_of(priv, priv->phy->dev.of_node);
1609         else
1610                 ret = ar8327_hw_config_pdata(priv,
1611                                              priv->phy->dev.platform_data);
1612
1613         if (ret)
1614                 return ret;
1615
1616         ar8327_leds_init(priv);
1617
1618         ar8xxx_phy_init(priv);
1619
1620         return 0;
1621 }
1622
1623 static void
1624 ar8327_cleanup(struct ar8xxx_priv *priv)
1625 {
1626         ar8327_leds_cleanup(priv);
1627 }
1628
1629 static void
1630 ar8327_init_globals(struct ar8xxx_priv *priv)
1631 {
1632         u32 t;
1633
1634         /* enable CPU port and disable mirror port */
1635         t = AR8327_FWD_CTRL0_CPU_PORT_EN |
1636             AR8327_FWD_CTRL0_MIRROR_PORT;
1637         priv->write(priv, AR8327_REG_FWD_CTRL0, t);
1638
1639         /* forward multicast and broadcast frames to CPU */
1640         t = (AR8327_PORTS_ALL << AR8327_FWD_CTRL1_UC_FLOOD_S) |
1641             (AR8327_PORTS_ALL << AR8327_FWD_CTRL1_MC_FLOOD_S) |
1642             (AR8327_PORTS_ALL << AR8327_FWD_CTRL1_BC_FLOOD_S);
1643         priv->write(priv, AR8327_REG_FWD_CTRL1, t);
1644
1645         /* enable jumbo frames */
1646         ar8xxx_rmw(priv, AR8327_REG_MAX_FRAME_SIZE,
1647                    AR8327_MAX_FRAME_SIZE_MTU, 9018 + 8 + 2);
1648
1649         /* Enable MIB counters */
1650         ar8xxx_reg_set(priv, AR8327_REG_MODULE_EN,
1651                        AR8327_MODULE_EN_MIB);
1652
1653         /* Disable EEE on all ports due to stability issues */
1654         t = priv->read(priv, AR8327_REG_EEE_CTRL);
1655         t |= AR8327_EEE_CTRL_DISABLE_PHY(0) |
1656              AR8327_EEE_CTRL_DISABLE_PHY(1) |
1657              AR8327_EEE_CTRL_DISABLE_PHY(2) |
1658              AR8327_EEE_CTRL_DISABLE_PHY(3) |
1659              AR8327_EEE_CTRL_DISABLE_PHY(4);
1660         priv->write(priv, AR8327_REG_EEE_CTRL, t);
1661 }
1662
1663 static void
1664 ar8327_init_port(struct ar8xxx_priv *priv, int port)
1665 {
1666         struct ar8327_data *data = priv->chip_data;
1667         u32 t;
1668
1669         if (port == AR8216_PORT_CPU)
1670                 t = data->port0_status;
1671         else if (port == 6)
1672                 t = data->port6_status;
1673         else
1674                 t = AR8216_PORT_STATUS_LINK_AUTO;
1675
1676         priv->write(priv, AR8327_REG_PORT_STATUS(port), t);
1677         priv->write(priv, AR8327_REG_PORT_HEADER(port), 0);
1678
1679         t = 1 << AR8327_PORT_VLAN0_DEF_SVID_S;
1680         t |= 1 << AR8327_PORT_VLAN0_DEF_CVID_S;
1681         priv->write(priv, AR8327_REG_PORT_VLAN0(port), t);
1682
1683         t = AR8327_PORT_VLAN1_OUT_MODE_UNTOUCH << AR8327_PORT_VLAN1_OUT_MODE_S;
1684         priv->write(priv, AR8327_REG_PORT_VLAN1(port), t);
1685
1686         t = AR8327_PORT_LOOKUP_LEARN;
1687         t |= AR8216_PORT_STATE_FORWARD << AR8327_PORT_LOOKUP_STATE_S;
1688         priv->write(priv, AR8327_REG_PORT_LOOKUP(port), t);
1689 }
1690
1691 static u32
1692 ar8327_read_port_status(struct ar8xxx_priv *priv, int port)
1693 {
1694         return priv->read(priv, AR8327_REG_PORT_STATUS(port));
1695 }
1696
1697 static int
1698 ar8327_atu_flush(struct ar8xxx_priv *priv)
1699 {
1700         int ret;
1701
1702         ret = ar8216_wait_bit(priv, AR8327_REG_ATU_FUNC,
1703                               AR8327_ATU_FUNC_BUSY, 0);
1704         if (!ret)
1705                 priv->write(priv, AR8327_REG_ATU_FUNC,
1706                             AR8327_ATU_FUNC_OP_FLUSH);
1707
1708         return ret;
1709 }
1710
1711 static void
1712 ar8327_vtu_op(struct ar8xxx_priv *priv, u32 op, u32 val)
1713 {
1714         if (ar8216_wait_bit(priv, AR8327_REG_VTU_FUNC1,
1715                             AR8327_VTU_FUNC1_BUSY, 0))
1716                 return;
1717
1718         if ((op & AR8327_VTU_FUNC1_OP) == AR8327_VTU_FUNC1_OP_LOAD)
1719                 priv->write(priv, AR8327_REG_VTU_FUNC0, val);
1720
1721         op |= AR8327_VTU_FUNC1_BUSY;
1722         priv->write(priv, AR8327_REG_VTU_FUNC1, op);
1723 }
1724
1725 static void
1726 ar8327_vtu_flush(struct ar8xxx_priv *priv)
1727 {
1728         ar8327_vtu_op(priv, AR8327_VTU_FUNC1_OP_FLUSH, 0);
1729 }
1730
1731 static void
1732 ar8327_vtu_load_vlan(struct ar8xxx_priv *priv, u32 vid, u32 port_mask)
1733 {
1734         u32 op;
1735         u32 val;
1736         int i;
1737
1738         op = AR8327_VTU_FUNC1_OP_LOAD | (vid << AR8327_VTU_FUNC1_VID_S);
1739         val = AR8327_VTU_FUNC0_VALID | AR8327_VTU_FUNC0_IVL;
1740         for (i = 0; i < AR8327_NUM_PORTS; i++) {
1741                 u32 mode;
1742
1743                 if ((port_mask & BIT(i)) == 0)
1744                         mode = AR8327_VTU_FUNC0_EG_MODE_NOT;
1745                 else if (priv->vlan == 0)
1746                         mode = AR8327_VTU_FUNC0_EG_MODE_KEEP;
1747                 else if ((priv->vlan_tagged & BIT(i)) || (priv->vlan_id[priv->pvid[i]] != vid))
1748                         mode = AR8327_VTU_FUNC0_EG_MODE_TAG;
1749                 else
1750                         mode = AR8327_VTU_FUNC0_EG_MODE_UNTAG;
1751
1752                 val |= mode << AR8327_VTU_FUNC0_EG_MODE_S(i);
1753         }
1754         ar8327_vtu_op(priv, op, val);
1755 }
1756
1757 static void
1758 ar8327_setup_port(struct ar8xxx_priv *priv, int port, u32 members)
1759 {
1760         u32 t;
1761         u32 egress, ingress;
1762         u32 pvid = priv->vlan_id[priv->pvid[port]];
1763
1764         if (priv->vlan) {
1765                 egress = AR8327_PORT_VLAN1_OUT_MODE_UNMOD;
1766                 ingress = AR8216_IN_SECURE;
1767         } else {
1768                 egress = AR8327_PORT_VLAN1_OUT_MODE_UNTOUCH;
1769                 ingress = AR8216_IN_PORT_ONLY;
1770         }
1771
1772         t = pvid << AR8327_PORT_VLAN0_DEF_SVID_S;
1773         t |= pvid << AR8327_PORT_VLAN0_DEF_CVID_S;
1774         priv->write(priv, AR8327_REG_PORT_VLAN0(port), t);
1775
1776         t = AR8327_PORT_VLAN1_PORT_VLAN_PROP;
1777         t |= egress << AR8327_PORT_VLAN1_OUT_MODE_S;
1778         priv->write(priv, AR8327_REG_PORT_VLAN1(port), t);
1779
1780         t = members;
1781         t |= AR8327_PORT_LOOKUP_LEARN;
1782         t |= ingress << AR8327_PORT_LOOKUP_IN_MODE_S;
1783         t |= AR8216_PORT_STATE_FORWARD << AR8327_PORT_LOOKUP_STATE_S;
1784         priv->write(priv, AR8327_REG_PORT_LOOKUP(port), t);
1785 }
1786
1787 static int
1788 ar8xxx_sw_set_vlan(struct switch_dev *dev, const struct switch_attr *attr,
1789                    struct switch_val *val)
1790 {
1791         struct ar8xxx_priv *priv = swdev_to_ar8xxx(dev);
1792         priv->vlan = !!val->value.i;
1793         return 0;
1794 }
1795
1796 static int
1797 ar8xxx_sw_get_vlan(struct switch_dev *dev, const struct switch_attr *attr,
1798                    struct switch_val *val)
1799 {
1800         struct ar8xxx_priv *priv = swdev_to_ar8xxx(dev);
1801         val->value.i = priv->vlan;
1802         return 0;
1803 }
1804
1805
1806 static int
1807 ar8xxx_sw_set_pvid(struct switch_dev *dev, int port, int vlan)
1808 {
1809         struct ar8xxx_priv *priv = swdev_to_ar8xxx(dev);
1810
1811         /* make sure no invalid PVIDs get set */
1812
1813         if (vlan >= dev->vlans)
1814                 return -EINVAL;
1815
1816         priv->pvid[port] = vlan;
1817         return 0;
1818 }
1819
1820 static int
1821 ar8xxx_sw_get_pvid(struct switch_dev *dev, int port, int *vlan)
1822 {
1823         struct ar8xxx_priv *priv = swdev_to_ar8xxx(dev);
1824         *vlan = priv->pvid[port];
1825         return 0;
1826 }
1827
1828 static int
1829 ar8xxx_sw_set_vid(struct switch_dev *dev, const struct switch_attr *attr,
1830                   struct switch_val *val)
1831 {
1832         struct ar8xxx_priv *priv = swdev_to_ar8xxx(dev);
1833         priv->vlan_id[val->port_vlan] = val->value.i;
1834         return 0;
1835 }
1836
1837 static int
1838 ar8xxx_sw_get_vid(struct switch_dev *dev, const struct switch_attr *attr,
1839                   struct switch_val *val)
1840 {
1841         struct ar8xxx_priv *priv = swdev_to_ar8xxx(dev);
1842         val->value.i = priv->vlan_id[val->port_vlan];
1843         return 0;
1844 }
1845
1846 static int
1847 ar8xxx_sw_get_port_link(struct switch_dev *dev, int port,
1848                         struct switch_port_link *link)
1849 {
1850         struct ar8xxx_priv *priv = swdev_to_ar8xxx(dev);
1851
1852         ar8216_read_port_link(priv, port, link);
1853         return 0;
1854 }
1855
1856 static int
1857 ar8xxx_sw_get_ports(struct switch_dev *dev, struct switch_val *val)
1858 {
1859         struct ar8xxx_priv *priv = swdev_to_ar8xxx(dev);
1860         u8 ports = priv->vlan_table[val->port_vlan];
1861         int i;
1862
1863         val->len = 0;
1864         for (i = 0; i < dev->ports; i++) {
1865                 struct switch_port *p;
1866
1867                 if (!(ports & (1 << i)))
1868                         continue;
1869
1870                 p = &val->value.ports[val->len++];
1871                 p->id = i;
1872                 if (priv->vlan_tagged & (1 << i))
1873                         p->flags = (1 << SWITCH_PORT_FLAG_TAGGED);
1874                 else
1875                         p->flags = 0;
1876         }
1877         return 0;
1878 }
1879
1880 static int
1881 ar8327_sw_get_ports(struct switch_dev *dev, struct switch_val *val)
1882 {
1883         struct ar8xxx_priv *priv = swdev_to_ar8xxx(dev);
1884         u8 ports = priv->vlan_table[val->port_vlan];
1885         int i;
1886
1887         val->len = 0;
1888         for (i = 0; i < dev->ports; i++) {
1889                 struct switch_port *p;
1890
1891                 if (!(ports & (1 << i)))
1892                         continue;
1893
1894                 p = &val->value.ports[val->len++];
1895                 p->id = i;
1896                 if ((priv->vlan_tagged & (1 << i)) || (priv->pvid[i] != val->port_vlan))
1897                         p->flags = (1 << SWITCH_PORT_FLAG_TAGGED);
1898                 else
1899                         p->flags = 0;
1900         }
1901         return 0;
1902 }
1903
1904 static int
1905 ar8xxx_sw_set_ports(struct switch_dev *dev, struct switch_val *val)
1906 {
1907         struct ar8xxx_priv *priv = swdev_to_ar8xxx(dev);
1908         u8 *vt = &priv->vlan_table[val->port_vlan];
1909         int i, j;
1910
1911         *vt = 0;
1912         for (i = 0; i < val->len; i++) {
1913                 struct switch_port *p = &val->value.ports[i];
1914
1915                 if (p->flags & (1 << SWITCH_PORT_FLAG_TAGGED)) {
1916                         priv->vlan_tagged |= (1 << p->id);
1917                 } else {
1918                         priv->vlan_tagged &= ~(1 << p->id);
1919                         priv->pvid[p->id] = val->port_vlan;
1920
1921                         /* make sure that an untagged port does not
1922                          * appear in other vlans */
1923                         for (j = 0; j < AR8X16_MAX_VLANS; j++) {
1924                                 if (j == val->port_vlan)
1925                                         continue;
1926                                 priv->vlan_table[j] &= ~(1 << p->id);
1927                         }
1928                 }
1929
1930                 *vt |= 1 << p->id;
1931         }
1932         return 0;
1933 }
1934
1935 static int
1936 ar8327_sw_set_ports(struct switch_dev *dev, struct switch_val *val)
1937 {
1938         struct ar8xxx_priv *priv = swdev_to_ar8xxx(dev);
1939         u8 *vt = &priv->vlan_table[val->port_vlan];
1940         int i;
1941
1942         *vt = 0;
1943         for (i = 0; i < val->len; i++) {
1944                 struct switch_port *p = &val->value.ports[i];
1945
1946                 if (p->flags & (1 << SWITCH_PORT_FLAG_TAGGED)) {
1947                         if (val->port_vlan == priv->pvid[p->id]) {
1948                                 priv->vlan_tagged |= (1 << p->id);
1949                         }
1950                 } else {
1951                         priv->vlan_tagged &= ~(1 << p->id);
1952                         priv->pvid[p->id] = val->port_vlan;
1953                 }
1954
1955                 *vt |= 1 << p->id;
1956         }
1957         return 0;
1958 }
1959
1960 static void
1961 ar8327_set_mirror_regs(struct ar8xxx_priv *priv)
1962 {
1963         int port;
1964
1965         /* reset all mirror registers */
1966         ar8xxx_rmw(priv, AR8327_REG_FWD_CTRL0,
1967                    AR8327_FWD_CTRL0_MIRROR_PORT,
1968                    (0xF << AR8327_FWD_CTRL0_MIRROR_PORT_S));
1969         for (port = 0; port < AR8327_NUM_PORTS; port++) {
1970                 ar8xxx_rmw(priv, AR8327_REG_PORT_LOOKUP(port),
1971                            AR8327_PORT_LOOKUP_ING_MIRROR_EN,
1972                            0);
1973
1974                 ar8xxx_rmw(priv, AR8327_REG_PORT_HOL_CTRL1(port),
1975                            AR8327_PORT_HOL_CTRL1_EG_MIRROR_EN,
1976                            0);
1977         }
1978
1979         /* now enable mirroring if necessary */
1980         if (priv->source_port >= AR8327_NUM_PORTS ||
1981             priv->monitor_port >= AR8327_NUM_PORTS ||
1982             priv->source_port == priv->monitor_port) {
1983                 return;
1984         }
1985
1986         ar8xxx_rmw(priv, AR8327_REG_FWD_CTRL0,
1987                    AR8327_FWD_CTRL0_MIRROR_PORT,
1988                    (priv->monitor_port << AR8327_FWD_CTRL0_MIRROR_PORT_S));
1989
1990         if (priv->mirror_rx)
1991                 ar8xxx_rmw(priv, AR8327_REG_PORT_LOOKUP(priv->source_port),
1992                            AR8327_PORT_LOOKUP_ING_MIRROR_EN,
1993                            AR8327_PORT_LOOKUP_ING_MIRROR_EN);
1994
1995         if (priv->mirror_tx)
1996                 ar8xxx_rmw(priv, AR8327_REG_PORT_HOL_CTRL1(priv->source_port),
1997                            AR8327_PORT_HOL_CTRL1_EG_MIRROR_EN,
1998                            AR8327_PORT_HOL_CTRL1_EG_MIRROR_EN);
1999 }
2000
2001 static void
2002 ar8216_set_mirror_regs(struct ar8xxx_priv *priv)
2003 {
2004         int port;
2005
2006         /* reset all mirror registers */
2007         ar8xxx_rmw(priv, AR8216_REG_GLOBAL_CPUPORT,
2008                    AR8216_GLOBAL_CPUPORT_MIRROR_PORT,
2009                    (0xF << AR8216_GLOBAL_CPUPORT_MIRROR_PORT_S));
2010         for (port = 0; port < AR8216_NUM_PORTS; port++) {
2011                 ar8xxx_rmw(priv, AR8216_REG_PORT_CTRL(port),
2012                            AR8216_PORT_CTRL_MIRROR_RX,
2013                            0);
2014
2015                 ar8xxx_rmw(priv, AR8216_REG_PORT_CTRL(port),
2016                            AR8216_PORT_CTRL_MIRROR_TX,
2017                            0);
2018         }
2019
2020         /* now enable mirroring if necessary */
2021         if (priv->source_port >= AR8216_NUM_PORTS ||
2022             priv->monitor_port >= AR8216_NUM_PORTS ||
2023             priv->source_port == priv->monitor_port) {
2024                 return;
2025         }
2026
2027         ar8xxx_rmw(priv, AR8216_REG_GLOBAL_CPUPORT,
2028                    AR8216_GLOBAL_CPUPORT_MIRROR_PORT,
2029                    (priv->monitor_port << AR8216_GLOBAL_CPUPORT_MIRROR_PORT_S));
2030
2031         if (priv->mirror_rx)
2032                 ar8xxx_rmw(priv, AR8216_REG_PORT_CTRL(priv->source_port),
2033                            AR8216_PORT_CTRL_MIRROR_RX,
2034                            AR8216_PORT_CTRL_MIRROR_RX);
2035
2036         if (priv->mirror_tx)
2037                 ar8xxx_rmw(priv, AR8216_REG_PORT_CTRL(priv->source_port),
2038                            AR8216_PORT_CTRL_MIRROR_TX,
2039                            AR8216_PORT_CTRL_MIRROR_TX);
2040 }
2041
2042 static int
2043 ar8xxx_sw_hw_apply(struct switch_dev *dev)
2044 {
2045         struct ar8xxx_priv *priv = swdev_to_ar8xxx(dev);
2046         u8 portmask[AR8X16_MAX_PORTS];
2047         int i, j;
2048
2049         mutex_lock(&priv->reg_mutex);
2050         /* flush all vlan translation unit entries */
2051         priv->chip->vtu_flush(priv);
2052
2053         memset(portmask, 0, sizeof(portmask));
2054         if (!priv->init) {
2055                 /* calculate the port destination masks and load vlans
2056                  * into the vlan translation unit */
2057                 for (j = 0; j < AR8X16_MAX_VLANS; j++) {
2058                         u8 vp = priv->vlan_table[j];
2059
2060                         if (!vp)
2061                                 continue;
2062
2063                         for (i = 0; i < dev->ports; i++) {
2064                                 u8 mask = (1 << i);
2065                                 if (vp & mask)
2066                                         portmask[i] |= vp & ~mask;
2067                         }
2068
2069                         priv->chip->vtu_load_vlan(priv, priv->vlan_id[j],
2070                                                  priv->vlan_table[j]);
2071                 }
2072         } else {
2073                 /* vlan disabled:
2074                  * isolate all ports, but connect them to the cpu port */
2075                 for (i = 0; i < dev->ports; i++) {
2076                         if (i == AR8216_PORT_CPU)
2077                                 continue;
2078
2079                         portmask[i] = 1 << AR8216_PORT_CPU;
2080                         portmask[AR8216_PORT_CPU] |= (1 << i);
2081                 }
2082         }
2083
2084         /* update the port destination mask registers and tag settings */
2085         for (i = 0; i < dev->ports; i++) {
2086                 priv->chip->setup_port(priv, i, portmask[i]);
2087         }
2088
2089         priv->chip->set_mirror_regs(priv);
2090
2091         mutex_unlock(&priv->reg_mutex);
2092         return 0;
2093 }
2094
2095 static int
2096 ar8xxx_sw_reset_switch(struct switch_dev *dev)
2097 {
2098         struct ar8xxx_priv *priv = swdev_to_ar8xxx(dev);
2099         int i;
2100
2101         mutex_lock(&priv->reg_mutex);
2102         memset(&priv->vlan, 0, sizeof(struct ar8xxx_priv) -
2103                 offsetof(struct ar8xxx_priv, vlan));
2104
2105         for (i = 0; i < AR8X16_MAX_VLANS; i++)
2106                 priv->vlan_id[i] = i;
2107
2108         /* Configure all ports */
2109         for (i = 0; i < dev->ports; i++)
2110                 priv->chip->init_port(priv, i);
2111
2112         priv->mirror_rx = false;
2113         priv->mirror_tx = false;
2114         priv->source_port = 0;
2115         priv->monitor_port = 0;
2116
2117         priv->chip->init_globals(priv);
2118
2119         mutex_unlock(&priv->reg_mutex);
2120
2121         return ar8xxx_sw_hw_apply(dev);
2122 }
2123
2124 static int
2125 ar8xxx_sw_set_reset_mibs(struct switch_dev *dev,
2126                          const struct switch_attr *attr,
2127                          struct switch_val *val)
2128 {
2129         struct ar8xxx_priv *priv = swdev_to_ar8xxx(dev);
2130         unsigned int len;
2131         int ret;
2132
2133         if (!ar8xxx_has_mib_counters(priv))
2134                 return -EOPNOTSUPP;
2135
2136         mutex_lock(&priv->mib_lock);
2137
2138         len = priv->dev.ports * priv->chip->num_mibs *
2139               sizeof(*priv->mib_stats);
2140         memset(priv->mib_stats, '\0', len);
2141         ret = ar8xxx_mib_flush(priv);
2142         if (ret)
2143                 goto unlock;
2144
2145         ret = 0;
2146
2147 unlock:
2148         mutex_unlock(&priv->mib_lock);
2149         return ret;
2150 }
2151
2152 static int
2153 ar8xxx_sw_set_mirror_rx_enable(struct switch_dev *dev,
2154                                const struct switch_attr *attr,
2155                                struct switch_val *val)
2156 {
2157         struct ar8xxx_priv *priv = swdev_to_ar8xxx(dev);
2158
2159         mutex_lock(&priv->reg_mutex);
2160         priv->mirror_rx = !!val->value.i;
2161         priv->chip->set_mirror_regs(priv);
2162         mutex_unlock(&priv->reg_mutex);
2163
2164         return 0;
2165 }
2166
2167 static int
2168 ar8xxx_sw_get_mirror_rx_enable(struct switch_dev *dev,
2169                                const struct switch_attr *attr,
2170                                struct switch_val *val)
2171 {
2172         struct ar8xxx_priv *priv = swdev_to_ar8xxx(dev);
2173         val->value.i = priv->mirror_rx;
2174         return 0;
2175 }
2176
2177 static int
2178 ar8xxx_sw_set_mirror_tx_enable(struct switch_dev *dev,
2179                                const struct switch_attr *attr,
2180                                struct switch_val *val)
2181 {
2182         struct ar8xxx_priv *priv = swdev_to_ar8xxx(dev);
2183
2184         mutex_lock(&priv->reg_mutex);
2185         priv->mirror_tx = !!val->value.i;
2186         priv->chip->set_mirror_regs(priv);
2187         mutex_unlock(&priv->reg_mutex);
2188
2189         return 0;
2190 }
2191
2192 static int
2193 ar8xxx_sw_get_mirror_tx_enable(struct switch_dev *dev,
2194                                const struct switch_attr *attr,
2195                                struct switch_val *val)
2196 {
2197         struct ar8xxx_priv *priv = swdev_to_ar8xxx(dev);
2198         val->value.i = priv->mirror_tx;
2199         return 0;
2200 }
2201
2202 static int
2203 ar8xxx_sw_set_mirror_monitor_port(struct switch_dev *dev,
2204                                   const struct switch_attr *attr,
2205                                   struct switch_val *val)
2206 {
2207         struct ar8xxx_priv *priv = swdev_to_ar8xxx(dev);
2208
2209         mutex_lock(&priv->reg_mutex);
2210         priv->monitor_port = val->value.i;
2211         priv->chip->set_mirror_regs(priv);
2212         mutex_unlock(&priv->reg_mutex);
2213
2214         return 0;
2215 }
2216
2217 static int
2218 ar8xxx_sw_get_mirror_monitor_port(struct switch_dev *dev,
2219                                   const struct switch_attr *attr,
2220                                   struct switch_val *val)
2221 {
2222         struct ar8xxx_priv *priv = swdev_to_ar8xxx(dev);
2223         val->value.i = priv->monitor_port;
2224         return 0;
2225 }
2226
2227 static int
2228 ar8xxx_sw_set_mirror_source_port(struct switch_dev *dev,
2229                                  const struct switch_attr *attr,
2230                                  struct switch_val *val)
2231 {
2232         struct ar8xxx_priv *priv = swdev_to_ar8xxx(dev);
2233
2234         mutex_lock(&priv->reg_mutex);
2235         priv->source_port = val->value.i;
2236         priv->chip->set_mirror_regs(priv);
2237         mutex_unlock(&priv->reg_mutex);
2238
2239         return 0;
2240 }
2241
2242 static int
2243 ar8xxx_sw_get_mirror_source_port(struct switch_dev *dev,
2244                                  const struct switch_attr *attr,
2245                                  struct switch_val *val)
2246 {
2247         struct ar8xxx_priv *priv = swdev_to_ar8xxx(dev);
2248         val->value.i = priv->source_port;
2249         return 0;
2250 }
2251
2252 static int
2253 ar8xxx_sw_set_port_reset_mib(struct switch_dev *dev,
2254                              const struct switch_attr *attr,
2255                              struct switch_val *val)
2256 {
2257         struct ar8xxx_priv *priv = swdev_to_ar8xxx(dev);
2258         int port;
2259         int ret;
2260
2261         if (!ar8xxx_has_mib_counters(priv))
2262                 return -EOPNOTSUPP;
2263
2264         port = val->port_vlan;
2265         if (port >= dev->ports)
2266                 return -EINVAL;
2267
2268         mutex_lock(&priv->mib_lock);
2269         ret = ar8xxx_mib_capture(priv);
2270         if (ret)
2271                 goto unlock;
2272
2273         ar8xxx_mib_fetch_port_stat(priv, port, true);
2274
2275         ret = 0;
2276
2277 unlock:
2278         mutex_unlock(&priv->mib_lock);
2279         return ret;
2280 }
2281
2282 static int
2283 ar8xxx_sw_get_port_mib(struct switch_dev *dev,
2284                        const struct switch_attr *attr,
2285                        struct switch_val *val)
2286 {
2287         struct ar8xxx_priv *priv = swdev_to_ar8xxx(dev);
2288         const struct ar8xxx_chip *chip = priv->chip;
2289         u64 *mib_stats;
2290         int port;
2291         int ret;
2292         char *buf = priv->buf;
2293         int i, len = 0;
2294
2295         if (!ar8xxx_has_mib_counters(priv))
2296                 return -EOPNOTSUPP;
2297
2298         port = val->port_vlan;
2299         if (port >= dev->ports)
2300                 return -EINVAL;
2301
2302         mutex_lock(&priv->mib_lock);
2303         ret = ar8xxx_mib_capture(priv);
2304         if (ret)
2305                 goto unlock;
2306
2307         ar8xxx_mib_fetch_port_stat(priv, port, false);
2308
2309         len += snprintf(buf + len, sizeof(priv->buf) - len,
2310                         "Port %d MIB counters\n",
2311                         port);
2312
2313         mib_stats = &priv->mib_stats[port * chip->num_mibs];
2314         for (i = 0; i < chip->num_mibs; i++)
2315                 len += snprintf(buf + len, sizeof(priv->buf) - len,
2316                                 "%-12s: %llu\n",
2317                                 chip->mib_decs[i].name,
2318                                 mib_stats[i]);
2319
2320         val->value.s = buf;
2321         val->len = len;
2322
2323         ret = 0;
2324
2325 unlock:
2326         mutex_unlock(&priv->mib_lock);
2327         return ret;
2328 }
2329
2330 static struct switch_attr ar8xxx_sw_attr_globals[] = {
2331         {
2332                 .type = SWITCH_TYPE_INT,
2333                 .name = "enable_vlan",
2334                 .description = "Enable VLAN mode",
2335                 .set = ar8xxx_sw_set_vlan,
2336                 .get = ar8xxx_sw_get_vlan,
2337                 .max = 1
2338         },
2339         {
2340                 .type = SWITCH_TYPE_NOVAL,
2341                 .name = "reset_mibs",
2342                 .description = "Reset all MIB counters",
2343                 .set = ar8xxx_sw_set_reset_mibs,
2344         },
2345         {
2346                 .type = SWITCH_TYPE_INT,
2347                 .name = "enable_mirror_rx",
2348                 .description = "Enable mirroring of RX packets",
2349                 .set = ar8xxx_sw_set_mirror_rx_enable,
2350                 .get = ar8xxx_sw_get_mirror_rx_enable,
2351                 .max = 1
2352         },
2353         {
2354                 .type = SWITCH_TYPE_INT,
2355                 .name = "enable_mirror_tx",
2356                 .description = "Enable mirroring of TX packets",
2357                 .set = ar8xxx_sw_set_mirror_tx_enable,
2358                 .get = ar8xxx_sw_get_mirror_tx_enable,
2359                 .max = 1
2360         },
2361         {
2362                 .type = SWITCH_TYPE_INT,
2363                 .name = "mirror_monitor_port",
2364                 .description = "Mirror monitor port",
2365                 .set = ar8xxx_sw_set_mirror_monitor_port,
2366                 .get = ar8xxx_sw_get_mirror_monitor_port,
2367                 .max = AR8216_NUM_PORTS - 1
2368         },
2369         {
2370                 .type = SWITCH_TYPE_INT,
2371                 .name = "mirror_source_port",
2372                 .description = "Mirror source port",
2373                 .set = ar8xxx_sw_set_mirror_source_port,
2374                 .get = ar8xxx_sw_get_mirror_source_port,
2375                 .max = AR8216_NUM_PORTS - 1
2376         },
2377 };
2378
2379 static struct switch_attr ar8327_sw_attr_globals[] = {
2380         {
2381                 .type = SWITCH_TYPE_INT,
2382                 .name = "enable_vlan",
2383                 .description = "Enable VLAN mode",
2384                 .set = ar8xxx_sw_set_vlan,
2385                 .get = ar8xxx_sw_get_vlan,
2386                 .max = 1
2387         },
2388         {
2389                 .type = SWITCH_TYPE_NOVAL,
2390                 .name = "reset_mibs",
2391                 .description = "Reset all MIB counters",
2392                 .set = ar8xxx_sw_set_reset_mibs,
2393         },
2394         {
2395                 .type = SWITCH_TYPE_INT,
2396                 .name = "enable_mirror_rx",
2397                 .description = "Enable mirroring of RX packets",
2398                 .set = ar8xxx_sw_set_mirror_rx_enable,
2399                 .get = ar8xxx_sw_get_mirror_rx_enable,
2400                 .max = 1
2401         },
2402         {
2403                 .type = SWITCH_TYPE_INT,
2404                 .name = "enable_mirror_tx",
2405                 .description = "Enable mirroring of TX packets",
2406                 .set = ar8xxx_sw_set_mirror_tx_enable,
2407                 .get = ar8xxx_sw_get_mirror_tx_enable,
2408                 .max = 1
2409         },
2410         {
2411                 .type = SWITCH_TYPE_INT,
2412                 .name = "mirror_monitor_port",
2413                 .description = "Mirror monitor port",
2414                 .set = ar8xxx_sw_set_mirror_monitor_port,
2415                 .get = ar8xxx_sw_get_mirror_monitor_port,
2416                 .max = AR8327_NUM_PORTS - 1
2417         },
2418         {
2419                 .type = SWITCH_TYPE_INT,
2420                 .name = "mirror_source_port",
2421                 .description = "Mirror source port",
2422                 .set = ar8xxx_sw_set_mirror_source_port,
2423                 .get = ar8xxx_sw_get_mirror_source_port,
2424                 .max = AR8327_NUM_PORTS - 1
2425         },
2426 };
2427
2428 static struct switch_attr ar8xxx_sw_attr_port[] = {
2429         {
2430                 .type = SWITCH_TYPE_NOVAL,
2431                 .name = "reset_mib",
2432                 .description = "Reset single port MIB counters",
2433                 .set = ar8xxx_sw_set_port_reset_mib,
2434         },
2435         {
2436                 .type = SWITCH_TYPE_STRING,
2437                 .name = "mib",
2438                 .description = "Get port's MIB counters",
2439                 .set = NULL,
2440                 .get = ar8xxx_sw_get_port_mib,
2441         },
2442 };
2443
2444 static struct switch_attr ar8xxx_sw_attr_vlan[] = {
2445         {
2446                 .type = SWITCH_TYPE_INT,
2447                 .name = "vid",
2448                 .description = "VLAN ID (0-4094)",
2449                 .set = ar8xxx_sw_set_vid,
2450                 .get = ar8xxx_sw_get_vid,
2451                 .max = 4094,
2452         },
2453 };
2454
2455 static const struct switch_dev_ops ar8xxx_sw_ops = {
2456         .attr_global = {
2457                 .attr = ar8xxx_sw_attr_globals,
2458                 .n_attr = ARRAY_SIZE(ar8xxx_sw_attr_globals),
2459         },
2460         .attr_port = {
2461                 .attr = ar8xxx_sw_attr_port,
2462                 .n_attr = ARRAY_SIZE(ar8xxx_sw_attr_port),
2463         },
2464         .attr_vlan = {
2465                 .attr = ar8xxx_sw_attr_vlan,
2466                 .n_attr = ARRAY_SIZE(ar8xxx_sw_attr_vlan),
2467         },
2468         .get_port_pvid = ar8xxx_sw_get_pvid,
2469         .set_port_pvid = ar8xxx_sw_set_pvid,
2470         .get_vlan_ports = ar8xxx_sw_get_ports,
2471         .set_vlan_ports = ar8xxx_sw_set_ports,
2472         .apply_config = ar8xxx_sw_hw_apply,
2473         .reset_switch = ar8xxx_sw_reset_switch,
2474         .get_port_link = ar8xxx_sw_get_port_link,
2475 };
2476
2477 static const struct switch_dev_ops ar8327_sw_ops = {
2478         .attr_global = {
2479                 .attr = ar8327_sw_attr_globals,
2480                 .n_attr = ARRAY_SIZE(ar8327_sw_attr_globals),
2481         },
2482         .attr_port = {
2483                 .attr = ar8xxx_sw_attr_port,
2484                 .n_attr = ARRAY_SIZE(ar8xxx_sw_attr_port),
2485         },
2486         .attr_vlan = {
2487                 .attr = ar8xxx_sw_attr_vlan,
2488                 .n_attr = ARRAY_SIZE(ar8xxx_sw_attr_vlan),
2489         },
2490         .get_port_pvid = ar8xxx_sw_get_pvid,
2491         .set_port_pvid = ar8xxx_sw_set_pvid,
2492         .get_vlan_ports = ar8327_sw_get_ports,
2493         .set_vlan_ports = ar8327_sw_set_ports,
2494         .apply_config = ar8xxx_sw_hw_apply,
2495         .reset_switch = ar8xxx_sw_reset_switch,
2496         .get_port_link = ar8xxx_sw_get_port_link,
2497 };
2498
2499 static const struct ar8xxx_chip ar8216_chip = {
2500         .caps = AR8XXX_CAP_MIB_COUNTERS,
2501
2502         .reg_port_stats_start = 0x19000,
2503         .reg_port_stats_length = 0xa0,
2504
2505         .name = "Atheros AR8216",
2506         .ports = AR8216_NUM_PORTS,
2507         .vlans = AR8216_NUM_VLANS,
2508         .swops = &ar8xxx_sw_ops,
2509
2510         .hw_init = ar8216_hw_init,
2511         .init_globals = ar8216_init_globals,
2512         .init_port = ar8216_init_port,
2513         .setup_port = ar8216_setup_port,
2514         .read_port_status = ar8216_read_port_status,
2515         .atu_flush = ar8216_atu_flush,
2516         .vtu_flush = ar8216_vtu_flush,
2517         .vtu_load_vlan = ar8216_vtu_load_vlan,
2518         .set_mirror_regs = ar8216_set_mirror_regs,
2519
2520         .num_mibs = ARRAY_SIZE(ar8216_mibs),
2521         .mib_decs = ar8216_mibs,
2522         .mib_func = AR8216_REG_MIB_FUNC
2523 };
2524
2525 static const struct ar8xxx_chip ar8236_chip = {
2526         .caps = AR8XXX_CAP_MIB_COUNTERS,
2527
2528         .reg_port_stats_start = 0x20000,
2529         .reg_port_stats_length = 0x100,
2530
2531         .name = "Atheros AR8236",
2532         .ports = AR8216_NUM_PORTS,
2533         .vlans = AR8216_NUM_VLANS,
2534         .swops = &ar8xxx_sw_ops,
2535
2536         .hw_init = ar8216_hw_init,
2537         .init_globals = ar8236_init_globals,
2538         .init_port = ar8216_init_port,
2539         .setup_port = ar8236_setup_port,
2540         .read_port_status = ar8216_read_port_status,
2541         .atu_flush = ar8216_atu_flush,
2542         .vtu_flush = ar8216_vtu_flush,
2543         .vtu_load_vlan = ar8216_vtu_load_vlan,
2544         .set_mirror_regs = ar8216_set_mirror_regs,
2545
2546         .num_mibs = ARRAY_SIZE(ar8236_mibs),
2547         .mib_decs = ar8236_mibs,
2548         .mib_func = AR8216_REG_MIB_FUNC
2549 };
2550
2551 static const struct ar8xxx_chip ar8316_chip = {
2552         .caps = AR8XXX_CAP_GIGE | AR8XXX_CAP_MIB_COUNTERS,
2553
2554         .reg_port_stats_start = 0x20000,
2555         .reg_port_stats_length = 0x100,
2556
2557         .name = "Atheros AR8316",
2558         .ports = AR8216_NUM_PORTS,
2559         .vlans = AR8X16_MAX_VLANS,
2560         .swops = &ar8xxx_sw_ops,
2561
2562         .hw_init = ar8316_hw_init,
2563         .init_globals = ar8316_init_globals,
2564         .init_port = ar8216_init_port,
2565         .setup_port = ar8216_setup_port,
2566         .read_port_status = ar8216_read_port_status,
2567         .atu_flush = ar8216_atu_flush,
2568         .vtu_flush = ar8216_vtu_flush,
2569         .vtu_load_vlan = ar8216_vtu_load_vlan,
2570         .set_mirror_regs = ar8216_set_mirror_regs,
2571
2572         .num_mibs = ARRAY_SIZE(ar8236_mibs),
2573         .mib_decs = ar8236_mibs,
2574         .mib_func = AR8216_REG_MIB_FUNC
2575 };
2576
2577 static const struct ar8xxx_chip ar8327_chip = {
2578         .caps = AR8XXX_CAP_GIGE | AR8XXX_CAP_MIB_COUNTERS,
2579         .config_at_probe = true,
2580         .mii_lo_first = true,
2581
2582         .name = "Atheros AR8327",
2583         .ports = AR8327_NUM_PORTS,
2584         .vlans = AR8X16_MAX_VLANS,
2585         .swops = &ar8327_sw_ops,
2586
2587         .reg_port_stats_start = 0x1000,
2588         .reg_port_stats_length = 0x100,
2589
2590         .hw_init = ar8327_hw_init,
2591         .cleanup = ar8327_cleanup,
2592         .init_globals = ar8327_init_globals,
2593         .init_port = ar8327_init_port,
2594         .setup_port = ar8327_setup_port,
2595         .read_port_status = ar8327_read_port_status,
2596         .atu_flush = ar8327_atu_flush,
2597         .vtu_flush = ar8327_vtu_flush,
2598         .vtu_load_vlan = ar8327_vtu_load_vlan,
2599         .phy_fixup = ar8327_phy_fixup,
2600         .set_mirror_regs = ar8327_set_mirror_regs,
2601
2602         .num_mibs = ARRAY_SIZE(ar8236_mibs),
2603         .mib_decs = ar8236_mibs,
2604         .mib_func = AR8327_REG_MIB_FUNC
2605 };
2606
2607 static const struct ar8xxx_chip ar8337_chip = {
2608         .caps = AR8XXX_CAP_GIGE | AR8XXX_CAP_MIB_COUNTERS,
2609         .config_at_probe = true,
2610         .mii_lo_first = true,
2611
2612         .name = "Atheros AR8337",
2613         .ports = AR8327_NUM_PORTS,
2614         .vlans = AR8X16_MAX_VLANS,
2615         .swops = &ar8327_sw_ops,
2616
2617         .reg_port_stats_start = 0x1000,
2618         .reg_port_stats_length = 0x100,
2619
2620         .hw_init = ar8327_hw_init,
2621         .cleanup = ar8327_cleanup,
2622         .init_globals = ar8327_init_globals,
2623         .init_port = ar8327_init_port,
2624         .setup_port = ar8327_setup_port,
2625         .read_port_status = ar8327_read_port_status,
2626         .atu_flush = ar8327_atu_flush,
2627         .vtu_flush = ar8327_vtu_flush,
2628         .vtu_load_vlan = ar8327_vtu_load_vlan,
2629         .phy_fixup = ar8327_phy_fixup,
2630         .set_mirror_regs = ar8327_set_mirror_regs,
2631
2632         .num_mibs = ARRAY_SIZE(ar8236_mibs),
2633         .mib_decs = ar8236_mibs,
2634         .mib_func = AR8327_REG_MIB_FUNC
2635 };
2636
2637 static int
2638 ar8xxx_id_chip(struct ar8xxx_priv *priv)
2639 {
2640         u32 val;
2641         u16 id;
2642         int i;
2643
2644         val = priv->read(priv, AR8216_REG_CTRL);
2645         if (val == ~0)
2646                 return -ENODEV;
2647
2648         id = val & (AR8216_CTRL_REVISION | AR8216_CTRL_VERSION);
2649         for (i = 0; i < AR8X16_PROBE_RETRIES; i++) {
2650                 u16 t;
2651
2652                 val = priv->read(priv, AR8216_REG_CTRL);
2653                 if (val == ~0)
2654                         return -ENODEV;
2655
2656                 t = val & (AR8216_CTRL_REVISION | AR8216_CTRL_VERSION);
2657                 if (t != id)
2658                         return -ENODEV;
2659         }
2660
2661         priv->chip_ver = (id & AR8216_CTRL_VERSION) >> AR8216_CTRL_VERSION_S;
2662         priv->chip_rev = (id & AR8216_CTRL_REVISION);
2663
2664         switch (priv->chip_ver) {
2665         case AR8XXX_VER_AR8216:
2666                 priv->chip = &ar8216_chip;
2667                 break;
2668         case AR8XXX_VER_AR8236:
2669                 priv->chip = &ar8236_chip;
2670                 break;
2671         case AR8XXX_VER_AR8316:
2672                 priv->chip = &ar8316_chip;
2673                 break;
2674         case AR8XXX_VER_AR8327:
2675                 priv->chip = &ar8327_chip;
2676                 break;
2677         case AR8XXX_VER_AR8337:
2678                 priv->chip = &ar8337_chip;
2679                 break;
2680         default:
2681                 pr_err("ar8216: Unknown Atheros device [ver=%d, rev=%d]\n",
2682                        priv->chip_ver, priv->chip_rev);
2683
2684                 return -ENODEV;
2685         }
2686
2687         return 0;
2688 }
2689
2690 static void
2691 ar8xxx_mib_work_func(struct work_struct *work)
2692 {
2693         struct ar8xxx_priv *priv;
2694         int err;
2695
2696         priv = container_of(work, struct ar8xxx_priv, mib_work.work);
2697
2698         mutex_lock(&priv->mib_lock);
2699
2700         err = ar8xxx_mib_capture(priv);
2701         if (err)
2702                 goto next_port;
2703
2704         ar8xxx_mib_fetch_port_stat(priv, priv->mib_next_port, false);
2705
2706 next_port:
2707         priv->mib_next_port++;
2708         if (priv->mib_next_port >= priv->dev.ports)
2709                 priv->mib_next_port = 0;
2710
2711         mutex_unlock(&priv->mib_lock);
2712         schedule_delayed_work(&priv->mib_work,
2713                               msecs_to_jiffies(AR8XXX_MIB_WORK_DELAY));
2714 }
2715
2716 static int
2717 ar8xxx_mib_init(struct ar8xxx_priv *priv)
2718 {
2719         unsigned int len;
2720
2721         if (!ar8xxx_has_mib_counters(priv))
2722                 return 0;
2723
2724         BUG_ON(!priv->chip->mib_decs || !priv->chip->num_mibs);
2725
2726         len = priv->dev.ports * priv->chip->num_mibs *
2727               sizeof(*priv->mib_stats);
2728         priv->mib_stats = kzalloc(len, GFP_KERNEL);
2729
2730         if (!priv->mib_stats)
2731                 return -ENOMEM;
2732
2733         return 0;
2734 }
2735
2736 static void
2737 ar8xxx_mib_start(struct ar8xxx_priv *priv)
2738 {
2739         if (!ar8xxx_has_mib_counters(priv))
2740                 return;
2741
2742         schedule_delayed_work(&priv->mib_work,
2743                               msecs_to_jiffies(AR8XXX_MIB_WORK_DELAY));
2744 }
2745
2746 static void
2747 ar8xxx_mib_stop(struct ar8xxx_priv *priv)
2748 {
2749         if (!ar8xxx_has_mib_counters(priv))
2750                 return;
2751
2752         cancel_delayed_work(&priv->mib_work);
2753 }
2754
2755 static struct ar8xxx_priv *
2756 ar8xxx_create(void)
2757 {
2758         struct ar8xxx_priv *priv;
2759
2760         priv = kzalloc(sizeof(struct ar8xxx_priv), GFP_KERNEL);
2761         if (priv == NULL)
2762                 return NULL;
2763
2764         mutex_init(&priv->reg_mutex);
2765         mutex_init(&priv->mib_lock);
2766         INIT_DELAYED_WORK(&priv->mib_work, ar8xxx_mib_work_func);
2767
2768         return priv;
2769 }
2770
2771 static void
2772 ar8xxx_free(struct ar8xxx_priv *priv)
2773 {
2774         if (priv->chip && priv->chip->cleanup)
2775                 priv->chip->cleanup(priv);
2776
2777         kfree(priv->chip_data);
2778         kfree(priv->mib_stats);
2779         kfree(priv);
2780 }
2781
2782 static struct ar8xxx_priv *
2783 ar8xxx_create_mii(struct mii_bus *bus)
2784 {
2785         struct ar8xxx_priv *priv;
2786
2787         priv = ar8xxx_create();
2788         if (priv) {
2789                 priv->mii_bus = bus;
2790                 priv->read = ar8xxx_mii_read;
2791                 priv->write = ar8xxx_mii_write;
2792                 priv->rmw = ar8xxx_mii_rmw;
2793         }
2794
2795         return priv;
2796 }
2797
2798 static int
2799 ar8xxx_probe_switch(struct ar8xxx_priv *priv)
2800 {
2801         const struct ar8xxx_chip *chip;
2802         struct switch_dev *swdev;
2803         int ret;
2804
2805         ret = ar8xxx_id_chip(priv);
2806         if (ret)
2807                 return ret;
2808
2809         chip = priv->chip;
2810
2811         swdev = &priv->dev;
2812         swdev->cpu_port = AR8216_PORT_CPU;
2813         swdev->name = chip->name;
2814         swdev->vlans = chip->vlans;
2815         swdev->ports = chip->ports;
2816         swdev->ops = chip->swops;
2817
2818         ret = ar8xxx_mib_init(priv);
2819         if (ret)
2820                 return ret;
2821
2822         return 0;
2823 }
2824
2825 static int
2826 ar8xxx_start(struct ar8xxx_priv *priv)
2827 {
2828         int ret;
2829
2830         priv->init = true;
2831
2832         ret = priv->chip->hw_init(priv);
2833         if (ret)
2834                 return ret;
2835
2836         ret = ar8xxx_sw_reset_switch(&priv->dev);
2837         if (ret)
2838                 return ret;
2839
2840         priv->init = false;
2841
2842         ar8xxx_mib_start(priv);
2843
2844         return 0;
2845 }
2846
2847 static int
2848 ar8xxx_phy_config_init(struct phy_device *phydev)
2849 {
2850         struct ar8xxx_priv *priv = phydev->priv;
2851         struct net_device *dev = phydev->attached_dev;
2852         int ret;
2853
2854         if (WARN_ON(!priv))
2855                 return -ENODEV;
2856
2857         if (priv->chip->config_at_probe)
2858                 return ar8xxx_phy_check_aneg(phydev);
2859
2860         priv->phy = phydev;
2861
2862         if (phydev->addr != 0) {
2863                 if (chip_is_ar8316(priv)) {
2864                         /* switch device has been initialized, reinit */
2865                         priv->dev.ports = (AR8216_NUM_PORTS - 1);
2866                         priv->initialized = false;
2867                         priv->port4_phy = true;
2868                         ar8316_hw_init(priv);
2869                         return 0;
2870                 }
2871
2872                 return 0;
2873         }
2874
2875         ret = ar8xxx_start(priv);
2876         if (ret)
2877                 return ret;
2878
2879         /* VID fixup only needed on ar8216 */
2880         if (chip_is_ar8216(priv)) {
2881                 dev->phy_ptr = priv;
2882                 dev->priv_flags |= IFF_NO_IP_ALIGN;
2883                 dev->eth_mangle_rx = ar8216_mangle_rx;
2884                 dev->eth_mangle_tx = ar8216_mangle_tx;
2885         }
2886
2887         return 0;
2888 }
2889
2890 static int
2891 ar8xxx_phy_read_status(struct phy_device *phydev)
2892 {
2893         struct ar8xxx_priv *priv = phydev->priv;
2894         struct switch_port_link link;
2895         int ret;
2896
2897         if (phydev->addr != 0)
2898                 return genphy_read_status(phydev);
2899
2900         ar8216_read_port_link(priv, phydev->addr, &link);
2901         phydev->link = !!link.link;
2902         if (!phydev->link)
2903                 return 0;
2904
2905         switch (link.speed) {
2906         case SWITCH_PORT_SPEED_10:
2907                 phydev->speed = SPEED_10;
2908                 break;
2909         case SWITCH_PORT_SPEED_100:
2910                 phydev->speed = SPEED_100;
2911                 break;
2912         case SWITCH_PORT_SPEED_1000:
2913                 phydev->speed = SPEED_1000;
2914                 break;
2915         default:
2916                 phydev->speed = 0;
2917         }
2918         phydev->duplex = link.duplex ? DUPLEX_FULL : DUPLEX_HALF;
2919
2920         /* flush the address translation unit */
2921         mutex_lock(&priv->reg_mutex);
2922         ret = priv->chip->atu_flush(priv);
2923         mutex_unlock(&priv->reg_mutex);
2924
2925         phydev->state = PHY_RUNNING;
2926         netif_carrier_on(phydev->attached_dev);
2927         phydev->adjust_link(phydev->attached_dev);
2928
2929         return ret;
2930 }
2931
2932 static int
2933 ar8xxx_phy_config_aneg(struct phy_device *phydev)
2934 {
2935         if (phydev->addr == 0)
2936                 return 0;
2937
2938         return genphy_config_aneg(phydev);
2939 }
2940
2941 static const u32 ar8xxx_phy_ids[] = {
2942         0x004dd033,
2943         0x004dd034, /* AR8327 */
2944         0x004dd036, /* AR8337 */
2945         0x004dd041,
2946         0x004dd042,
2947         0x004dd043, /* AR8236 */
2948 };
2949
2950 static bool
2951 ar8xxx_phy_match(u32 phy_id)
2952 {
2953         int i;
2954
2955         for (i = 0; i < ARRAY_SIZE(ar8xxx_phy_ids); i++)
2956                 if (phy_id == ar8xxx_phy_ids[i])
2957                         return true;
2958
2959         return false;
2960 }
2961
2962 static bool
2963 ar8xxx_is_possible(struct mii_bus *bus)
2964 {
2965         unsigned i;
2966
2967         for (i = 0; i < 4; i++) {
2968                 u32 phy_id;
2969
2970                 phy_id = mdiobus_read(bus, i, MII_PHYSID1) << 16;
2971                 phy_id |= mdiobus_read(bus, i, MII_PHYSID2);
2972                 if (!ar8xxx_phy_match(phy_id)) {
2973                         pr_debug("ar8xxx: unknown PHY at %s:%02x id:%08x\n",
2974                                  dev_name(&bus->dev), i, phy_id);
2975                         return false;
2976                 }
2977         }
2978
2979         return true;
2980 }
2981
2982 static int
2983 ar8xxx_phy_probe(struct phy_device *phydev)
2984 {
2985         struct ar8xxx_priv *priv;
2986         struct switch_dev *swdev;
2987         int ret;
2988
2989         /* skip PHYs at unused adresses */
2990         if (phydev->addr != 0 && phydev->addr != 4)
2991                 return -ENODEV;
2992
2993         if (!ar8xxx_is_possible(phydev->bus))
2994                 return -ENODEV;
2995
2996         mutex_lock(&ar8xxx_dev_list_lock);
2997         list_for_each_entry(priv, &ar8xxx_dev_list, list)
2998                 if (priv->mii_bus == phydev->bus)
2999                         goto found;
3000
3001         priv = ar8xxx_create_mii(phydev->bus);
3002         if (priv == NULL) {
3003                 ret = -ENOMEM;
3004                 goto unlock;
3005         }
3006
3007         ret = ar8xxx_probe_switch(priv);
3008         if (ret)
3009                 goto free_priv;
3010
3011         swdev = &priv->dev;
3012         swdev->alias = dev_name(&priv->mii_bus->dev);
3013         ret = register_switch(swdev, NULL);
3014         if (ret)
3015                 goto free_priv;
3016
3017         pr_info("%s: %s rev. %u switch registered on %s\n",
3018                 swdev->devname, swdev->name, priv->chip_rev,
3019                 dev_name(&priv->mii_bus->dev));
3020
3021 found:
3022         priv->use_count++;
3023
3024         if (phydev->addr == 0) {
3025                 if (ar8xxx_has_gige(priv)) {
3026                         phydev->supported = SUPPORTED_1000baseT_Full;
3027                         phydev->advertising = ADVERTISED_1000baseT_Full;
3028                 } else {
3029                         phydev->supported = SUPPORTED_100baseT_Full;
3030                         phydev->advertising = ADVERTISED_100baseT_Full;
3031                 }
3032
3033                 if (priv->chip->config_at_probe) {
3034                         priv->phy = phydev;
3035
3036                         ret = ar8xxx_start(priv);
3037                         if (ret)
3038                                 goto err_unregister_switch;
3039                 }
3040         } else {
3041                 if (ar8xxx_has_gige(priv)) {
3042                         phydev->supported |= SUPPORTED_1000baseT_Full;
3043                         phydev->advertising |= ADVERTISED_1000baseT_Full;
3044                 }
3045         }
3046
3047         phydev->priv = priv;
3048
3049         list_add(&priv->list, &ar8xxx_dev_list);
3050
3051         mutex_unlock(&ar8xxx_dev_list_lock);
3052
3053         return 0;
3054
3055 err_unregister_switch:
3056         if (--priv->use_count)
3057                 goto unlock;
3058
3059         unregister_switch(&priv->dev);
3060
3061 free_priv:
3062         ar8xxx_free(priv);
3063 unlock:
3064         mutex_unlock(&ar8xxx_dev_list_lock);
3065         return ret;
3066 }
3067
3068 static void
3069 ar8xxx_phy_detach(struct phy_device *phydev)
3070 {
3071         struct net_device *dev = phydev->attached_dev;
3072
3073         if (!dev)
3074                 return;
3075
3076         dev->phy_ptr = NULL;
3077         dev->priv_flags &= ~IFF_NO_IP_ALIGN;
3078         dev->eth_mangle_rx = NULL;
3079         dev->eth_mangle_tx = NULL;
3080 }
3081
3082 static void
3083 ar8xxx_phy_remove(struct phy_device *phydev)
3084 {
3085         struct ar8xxx_priv *priv = phydev->priv;
3086
3087         if (WARN_ON(!priv))
3088                 return;
3089
3090         phydev->priv = NULL;
3091         if (--priv->use_count > 0)
3092                 return;
3093
3094         mutex_lock(&ar8xxx_dev_list_lock);
3095         list_del(&priv->list);
3096         mutex_unlock(&ar8xxx_dev_list_lock);
3097
3098         unregister_switch(&priv->dev);
3099         ar8xxx_mib_stop(priv);
3100         ar8xxx_free(priv);
3101 }
3102
3103 #if LINUX_VERSION_CODE >= KERNEL_VERSION(3,14,0)
3104 static int
3105 ar8xxx_phy_soft_reset(struct phy_device *phydev)
3106 {
3107         /* we don't need an extra reset */
3108         return 0;
3109 }
3110 #endif
3111
3112 static struct phy_driver ar8xxx_phy_driver = {
3113         .phy_id         = 0x004d0000,
3114         .name           = "Atheros AR8216/AR8236/AR8316",
3115         .phy_id_mask    = 0xffff0000,
3116         .features       = PHY_BASIC_FEATURES,
3117         .probe          = ar8xxx_phy_probe,
3118         .remove         = ar8xxx_phy_remove,
3119         .detach         = ar8xxx_phy_detach,
3120         .config_init    = ar8xxx_phy_config_init,
3121         .config_aneg    = ar8xxx_phy_config_aneg,
3122         .read_status    = ar8xxx_phy_read_status,
3123 #if LINUX_VERSION_CODE >= KERNEL_VERSION(3,14,0)
3124         .soft_reset     = ar8xxx_phy_soft_reset,
3125 #endif
3126         .driver         = { .owner = THIS_MODULE },
3127 };
3128
3129 int __init
3130 ar8xxx_init(void)
3131 {
3132         return phy_driver_register(&ar8xxx_phy_driver);
3133 }
3134
3135 void __exit
3136 ar8xxx_exit(void)
3137 {
3138         phy_driver_unregister(&ar8xxx_phy_driver);
3139 }
3140
3141 module_init(ar8xxx_init);
3142 module_exit(ar8xxx_exit);
3143 MODULE_LICENSE("GPL");
3144