1ec561276SVivien Didelot /*
2ec561276SVivien Didelot  * Marvell 88E6xxx Switch Global 2 Registers support (device address 0x1C)
3ec561276SVivien Didelot  *
4ec561276SVivien Didelot  * Copyright (c) 2008 Marvell Semiconductor
5ec561276SVivien Didelot  *
6ec561276SVivien Didelot  * Copyright (c) 2016 Vivien Didelot <vivien.didelot@savoirfairelinux.com>
7ec561276SVivien Didelot  *
8ec561276SVivien Didelot  * This program is free software; you can redistribute it and/or modify
9ec561276SVivien Didelot  * it under the terms of the GNU General Public License as published by
10ec561276SVivien Didelot  * the Free Software Foundation; either version 2 of the License, or
11ec561276SVivien Didelot  * (at your option) any later version.
12ec561276SVivien Didelot  */
13ec561276SVivien Didelot 
14ec561276SVivien Didelot #ifndef _MV88E6XXX_GLOBAL2_H
15ec561276SVivien Didelot #define _MV88E6XXX_GLOBAL2_H
16ec561276SVivien Didelot 
17ec561276SVivien Didelot #include "mv88e6xxx.h"
18ec561276SVivien Didelot 
19ca070c10SVivien Didelot #ifdef CONFIG_NET_DSA_MV88E6XXX_GLOBAL2
20ca070c10SVivien Didelot 
21ca070c10SVivien Didelot static inline int mv88e6xxx_g2_require(struct mv88e6xxx_chip *chip)
22ca070c10SVivien Didelot {
23ca070c10SVivien Didelot 	return 0;
24ca070c10SVivien Didelot }
25ca070c10SVivien Didelot 
26ec561276SVivien Didelot int mv88e6xxx_g2_smi_phy_read(struct mv88e6xxx_chip *chip, int addr, int reg,
27ec561276SVivien Didelot 			      u16 *val);
28ec561276SVivien Didelot int mv88e6xxx_g2_smi_phy_write(struct mv88e6xxx_chip *chip, int addr, int reg,
29ec561276SVivien Didelot 			       u16 val);
30ec561276SVivien Didelot int mv88e6xxx_g2_set_switch_mac(struct mv88e6xxx_chip *chip, u8 *addr);
3198fc3c6fSVivien Didelot 
3298fc3c6fSVivien Didelot int mv88e6xxx_g2_get_eeprom8(struct mv88e6xxx_chip *chip,
3398fc3c6fSVivien Didelot 			     struct ethtool_eeprom *eeprom, u8 *data);
3498fc3c6fSVivien Didelot int mv88e6xxx_g2_set_eeprom8(struct mv88e6xxx_chip *chip,
3598fc3c6fSVivien Didelot 			     struct ethtool_eeprom *eeprom, u8 *data);
3698fc3c6fSVivien Didelot 
37ec561276SVivien Didelot int mv88e6xxx_g2_get_eeprom16(struct mv88e6xxx_chip *chip,
38ec561276SVivien Didelot 			      struct ethtool_eeprom *eeprom, u8 *data);
39ec561276SVivien Didelot int mv88e6xxx_g2_set_eeprom16(struct mv88e6xxx_chip *chip,
40ec561276SVivien Didelot 			      struct ethtool_eeprom *eeprom, u8 *data);
4198fc3c6fSVivien Didelot 
42ec561276SVivien Didelot int mv88e6xxx_g2_setup(struct mv88e6xxx_chip *chip);
43dc30c35bSAndrew Lunn int mv88e6xxx_g2_irq_setup(struct mv88e6xxx_chip *chip);
44dc30c35bSAndrew Lunn void mv88e6xxx_g2_irq_free(struct mv88e6xxx_chip *chip);
456e55f698SAndrew Lunn int mv88e6095_g2_mgmt_rsvd2cpu(struct mv88e6xxx_chip *chip);
46ec561276SVivien Didelot 
47ca070c10SVivien Didelot #else /* !CONFIG_NET_DSA_MV88E6XXX_GLOBAL2 */
48ca070c10SVivien Didelot 
49ca070c10SVivien Didelot static inline int mv88e6xxx_g2_require(struct mv88e6xxx_chip *chip)
50ca070c10SVivien Didelot {
51ca070c10SVivien Didelot 	if (mv88e6xxx_has(chip, MV88E6XXX_FLAG_GLOBAL2)) {
52ca070c10SVivien Didelot 		dev_err(chip->dev, "this chip requires CONFIG_NET_DSA_MV88E6XXX_GLOBAL2 enabled\n");
53ca070c10SVivien Didelot 		return -EOPNOTSUPP;
54ca070c10SVivien Didelot 	}
55ca070c10SVivien Didelot 
56ca070c10SVivien Didelot 	return 0;
57ca070c10SVivien Didelot }
58ca070c10SVivien Didelot 
59ca070c10SVivien Didelot static inline int mv88e6xxx_g2_smi_phy_read(struct mv88e6xxx_chip *chip,
60ca070c10SVivien Didelot 					    int addr, int reg, u16 *val)
61ca070c10SVivien Didelot {
62ca070c10SVivien Didelot 	return -EOPNOTSUPP;
63ca070c10SVivien Didelot }
64ca070c10SVivien Didelot 
65ca070c10SVivien Didelot static inline int mv88e6xxx_g2_smi_phy_write(struct mv88e6xxx_chip *chip,
66ca070c10SVivien Didelot 					     int addr, int reg, u16 val)
67ca070c10SVivien Didelot {
68ca070c10SVivien Didelot 	return -EOPNOTSUPP;
69ca070c10SVivien Didelot }
70ca070c10SVivien Didelot 
71ca070c10SVivien Didelot static inline int mv88e6xxx_g2_set_switch_mac(struct mv88e6xxx_chip *chip,
72ca070c10SVivien Didelot 					      u8 *addr)
73ca070c10SVivien Didelot {
74ca070c10SVivien Didelot 	return -EOPNOTSUPP;
75ca070c10SVivien Didelot }
76ca070c10SVivien Didelot 
7798fc3c6fSVivien Didelot static inline int mv88e6xxx_g2_get_eeprom8(struct mv88e6xxx_chip *chip,
7898fc3c6fSVivien Didelot 					   struct ethtool_eeprom *eeprom,
7998fc3c6fSVivien Didelot 					   u8 *data)
8098fc3c6fSVivien Didelot {
8198fc3c6fSVivien Didelot 	return -EOPNOTSUPP;
8298fc3c6fSVivien Didelot }
8398fc3c6fSVivien Didelot 
8498fc3c6fSVivien Didelot static inline int mv88e6xxx_g2_set_eeprom8(struct mv88e6xxx_chip *chip,
8598fc3c6fSVivien Didelot 					   struct ethtool_eeprom *eeprom,
8698fc3c6fSVivien Didelot 					   u8 *data)
8798fc3c6fSVivien Didelot {
8898fc3c6fSVivien Didelot 	return -EOPNOTSUPP;
8998fc3c6fSVivien Didelot }
9098fc3c6fSVivien Didelot 
91ca070c10SVivien Didelot static inline int mv88e6xxx_g2_get_eeprom16(struct mv88e6xxx_chip *chip,
92ca070c10SVivien Didelot 					    struct ethtool_eeprom *eeprom,
93ca070c10SVivien Didelot 					    u8 *data)
94ca070c10SVivien Didelot {
95ca070c10SVivien Didelot 	return -EOPNOTSUPP;
96ca070c10SVivien Didelot }
97ca070c10SVivien Didelot 
98ca070c10SVivien Didelot static inline int mv88e6xxx_g2_set_eeprom16(struct mv88e6xxx_chip *chip,
99ca070c10SVivien Didelot 					    struct ethtool_eeprom *eeprom,
100ca070c10SVivien Didelot 					    u8 *data)
101ca070c10SVivien Didelot {
102ca070c10SVivien Didelot 	return -EOPNOTSUPP;
103ca070c10SVivien Didelot }
104ca070c10SVivien Didelot 
105ca070c10SVivien Didelot static inline int mv88e6xxx_g2_setup(struct mv88e6xxx_chip *chip)
106ca070c10SVivien Didelot {
107ca070c10SVivien Didelot 	return -EOPNOTSUPP;
108ca070c10SVivien Didelot }
109ca070c10SVivien Didelot 
110dc30c35bSAndrew Lunn static inline int mv88e6xxx_g2_irq_setup(struct mv88e6xxx_chip *chip)
111dc30c35bSAndrew Lunn {
112dc30c35bSAndrew Lunn 	return -EOPNOTSUPP;
113dc30c35bSAndrew Lunn }
114dc30c35bSAndrew Lunn 
115dc30c35bSAndrew Lunn static inline void mv88e6xxx_g2_irq_free(struct mv88e6xxx_chip *chip)
116dc30c35bSAndrew Lunn {
117dc30c35bSAndrew Lunn }
118dc30c35bSAndrew Lunn 
1196e55f698SAndrew Lunn static inline int mv88e6095_g2_mgmt_rsvd2cpu(struct mv88e6xxx_chip *chip)
1206e55f698SAndrew Lunn {
1216e55f698SAndrew Lunn 	return -EOPNOTSUPP;
1226e55f698SAndrew Lunn }
1236e55f698SAndrew Lunn 
124ca070c10SVivien Didelot #endif /* CONFIG_NET_DSA_MV88E6XXX_GLOBAL2 */
125ca070c10SVivien Didelot 
126ec561276SVivien Didelot #endif /* _MV88E6XXX_GLOBAL2_H */
127