blob: a8b2f9486a4abad1227030f57ce00b6d8cbb1fbb [file] [log] [blame]
Vivien Didelotec561272016-09-02 14:45:33 -04001/*
2 * Marvell 88E6xxx Switch Global 2 Registers support (device address 0x1C)
3 *
4 * Copyright (c) 2008 Marvell Semiconductor
5 *
6 * Copyright (c) 2016 Vivien Didelot <vivien.didelot@savoirfairelinux.com>
7 *
8 * This program is free software; you can redistribute it and/or modify
9 * it under the terms of the GNU General Public License as published by
10 * the Free Software Foundation; either version 2 of the License, or
11 * (at your option) any later version.
12 */
13
14#ifndef _MV88E6XXX_GLOBAL2_H
15#define _MV88E6XXX_GLOBAL2_H
16
17#include "mv88e6xxx.h"
18
Vivien Didelotca070c12016-09-02 14:45:34 -040019#ifdef CONFIG_NET_DSA_MV88E6XXX_GLOBAL2
20
21static inline int mv88e6xxx_g2_require(struct mv88e6xxx_chip *chip)
22{
23 return 0;
24}
25
Andrew Lunnee26a222017-01-24 14:53:48 +010026int mv88e6xxx_g2_smi_phy_read(struct mv88e6xxx_chip *chip,
27 struct mii_bus *bus,
28 int addr, int reg, u16 *val);
29int mv88e6xxx_g2_smi_phy_write(struct mv88e6xxx_chip *chip,
30 struct mii_bus *bus,
31 int addr, int reg, u16 val);
Vivien Didelotec561272016-09-02 14:45:33 -040032int mv88e6xxx_g2_set_switch_mac(struct mv88e6xxx_chip *chip, u8 *addr);
Vivien Didelot98fc3c62017-01-12 18:07:16 -050033
34int mv88e6xxx_g2_get_eeprom8(struct mv88e6xxx_chip *chip,
35 struct ethtool_eeprom *eeprom, u8 *data);
36int mv88e6xxx_g2_set_eeprom8(struct mv88e6xxx_chip *chip,
37 struct ethtool_eeprom *eeprom, u8 *data);
38
Vivien Didelotec561272016-09-02 14:45:33 -040039int mv88e6xxx_g2_get_eeprom16(struct mv88e6xxx_chip *chip,
40 struct ethtool_eeprom *eeprom, u8 *data);
41int mv88e6xxx_g2_set_eeprom16(struct mv88e6xxx_chip *chip,
42 struct ethtool_eeprom *eeprom, u8 *data);
Vivien Didelot98fc3c62017-01-12 18:07:16 -050043
Vivien Didelotec561272016-09-02 14:45:33 -040044int mv88e6xxx_g2_setup(struct mv88e6xxx_chip *chip);
Andrew Lunndc30c352016-10-16 19:56:49 +020045int mv88e6xxx_g2_irq_setup(struct mv88e6xxx_chip *chip);
46void mv88e6xxx_g2_irq_free(struct mv88e6xxx_chip *chip);
Andrew Lunn6e55f692016-12-03 04:45:16 +010047int mv88e6095_g2_mgmt_rsvd2cpu(struct mv88e6xxx_chip *chip);
Vivien Didelotec561272016-09-02 14:45:33 -040048
Andrew Lunnfcd25162017-02-09 00:03:42 +010049extern const struct mv88e6xxx_irq_ops mv88e6097_watchdog_ops;
Andrew Lunn61303732017-02-09 00:03:43 +010050extern const struct mv88e6xxx_irq_ops mv88e6390_watchdog_ops;
Andrew Lunnfcd25162017-02-09 00:03:42 +010051
Vivien Didelotca070c12016-09-02 14:45:34 -040052#else /* !CONFIG_NET_DSA_MV88E6XXX_GLOBAL2 */
53
54static inline int mv88e6xxx_g2_require(struct mv88e6xxx_chip *chip)
55{
56 if (mv88e6xxx_has(chip, MV88E6XXX_FLAG_GLOBAL2)) {
57 dev_err(chip->dev, "this chip requires CONFIG_NET_DSA_MV88E6XXX_GLOBAL2 enabled\n");
58 return -EOPNOTSUPP;
59 }
60
61 return 0;
62}
63
64static inline int mv88e6xxx_g2_smi_phy_read(struct mv88e6xxx_chip *chip,
Andrew Lunnee26a222017-01-24 14:53:48 +010065 struct mii_bus *bus,
Vivien Didelotca070c12016-09-02 14:45:34 -040066 int addr, int reg, u16 *val)
67{
68 return -EOPNOTSUPP;
69}
70
71static inline int mv88e6xxx_g2_smi_phy_write(struct mv88e6xxx_chip *chip,
Andrew Lunnee26a222017-01-24 14:53:48 +010072 struct mii_bus *bus,
Vivien Didelotca070c12016-09-02 14:45:34 -040073 int addr, int reg, u16 val)
74{
75 return -EOPNOTSUPP;
76}
77
78static inline int mv88e6xxx_g2_set_switch_mac(struct mv88e6xxx_chip *chip,
79 u8 *addr)
80{
81 return -EOPNOTSUPP;
82}
83
Vivien Didelot98fc3c62017-01-12 18:07:16 -050084static inline int mv88e6xxx_g2_get_eeprom8(struct mv88e6xxx_chip *chip,
85 struct ethtool_eeprom *eeprom,
86 u8 *data)
87{
88 return -EOPNOTSUPP;
89}
90
91static inline int mv88e6xxx_g2_set_eeprom8(struct mv88e6xxx_chip *chip,
92 struct ethtool_eeprom *eeprom,
93 u8 *data)
94{
95 return -EOPNOTSUPP;
96}
97
Vivien Didelotca070c12016-09-02 14:45:34 -040098static inline int mv88e6xxx_g2_get_eeprom16(struct mv88e6xxx_chip *chip,
99 struct ethtool_eeprom *eeprom,
100 u8 *data)
101{
102 return -EOPNOTSUPP;
103}
104
105static inline int mv88e6xxx_g2_set_eeprom16(struct mv88e6xxx_chip *chip,
106 struct ethtool_eeprom *eeprom,
107 u8 *data)
108{
109 return -EOPNOTSUPP;
110}
111
112static inline int mv88e6xxx_g2_setup(struct mv88e6xxx_chip *chip)
113{
114 return -EOPNOTSUPP;
115}
116
Andrew Lunndc30c352016-10-16 19:56:49 +0200117static inline int mv88e6xxx_g2_irq_setup(struct mv88e6xxx_chip *chip)
118{
119 return -EOPNOTSUPP;
120}
121
122static inline void mv88e6xxx_g2_irq_free(struct mv88e6xxx_chip *chip)
123{
124}
125
Andrew Lunn6e55f692016-12-03 04:45:16 +0100126static inline int mv88e6095_g2_mgmt_rsvd2cpu(struct mv88e6xxx_chip *chip)
127{
128 return -EOPNOTSUPP;
129}
130
Andrew Lunnfcd25162017-02-09 00:03:42 +0100131static const struct mv88e6xxx_irq_ops mv88e6097_watchdog_ops = {};
Andrew Lunn61303732017-02-09 00:03:43 +0100132static const struct mv88e6xxx_irq_ops mv88e6390_watchdog_ops = {};
Andrew Lunnfcd25162017-02-09 00:03:42 +0100133
Vivien Didelotca070c12016-09-02 14:45:34 -0400134#endif /* CONFIG_NET_DSA_MV88E6XXX_GLOBAL2 */
135
Vivien Didelotec561272016-09-02 14:45:33 -0400136#endif /* _MV88E6XXX_GLOBAL2_H */