net: dsa: microchip: Remove ksz_{get,set}()
[linux-2.6-microblaze.git] / drivers / net / dsa / microchip / ksz_common.h
1 /* SPDX-License-Identifier: GPL-2.0
2  * Microchip switch driver common header
3  *
4  * Copyright (C) 2017-2019 Microchip Technology Inc.
5  */
6
7 #ifndef __KSZ_COMMON_H
8 #define __KSZ_COMMON_H
9
10 void ksz_port_cleanup(struct ksz_device *dev, int port);
11 void ksz_update_port_member(struct ksz_device *dev, int port);
12 void ksz_init_mib_timer(struct ksz_device *dev);
13
14 /* Common DSA access functions */
15
16 int ksz_phy_read16(struct dsa_switch *ds, int addr, int reg);
17 int ksz_phy_write16(struct dsa_switch *ds, int addr, int reg, u16 val);
18 void ksz_adjust_link(struct dsa_switch *ds, int port,
19                      struct phy_device *phydev);
20 int ksz_sset_count(struct dsa_switch *ds, int port, int sset);
21 void ksz_get_ethtool_stats(struct dsa_switch *ds, int port, uint64_t *buf);
22 int ksz_port_bridge_join(struct dsa_switch *ds, int port,
23                          struct net_device *br);
24 void ksz_port_bridge_leave(struct dsa_switch *ds, int port,
25                            struct net_device *br);
26 void ksz_port_fast_age(struct dsa_switch *ds, int port);
27 int ksz_port_vlan_prepare(struct dsa_switch *ds, int port,
28                           const struct switchdev_obj_port_vlan *vlan);
29 int ksz_port_fdb_dump(struct dsa_switch *ds, int port, dsa_fdb_dump_cb_t *cb,
30                       void *data);
31 int ksz_port_mdb_prepare(struct dsa_switch *ds, int port,
32                          const struct switchdev_obj_port_mdb *mdb);
33 void ksz_port_mdb_add(struct dsa_switch *ds, int port,
34                       const struct switchdev_obj_port_mdb *mdb);
35 int ksz_port_mdb_del(struct dsa_switch *ds, int port,
36                      const struct switchdev_obj_port_mdb *mdb);
37 int ksz_enable_port(struct dsa_switch *ds, int port, struct phy_device *phy);
38 void ksz_disable_port(struct dsa_switch *ds, int port);
39
40 /* Common register access functions */
41
42 static inline int ksz_read8(struct ksz_device *dev, u32 reg, u8 *val)
43 {
44         int ret;
45
46         mutex_lock(&dev->reg_mutex);
47         ret = dev->ops->read8(dev, reg, val);
48         mutex_unlock(&dev->reg_mutex);
49
50         return ret;
51 }
52
53 static inline int ksz_read16(struct ksz_device *dev, u32 reg, u16 *val)
54 {
55         int ret;
56
57         mutex_lock(&dev->reg_mutex);
58         ret = dev->ops->read16(dev, reg, val);
59         mutex_unlock(&dev->reg_mutex);
60
61         return ret;
62 }
63
64 static inline int ksz_read32(struct ksz_device *dev, u32 reg, u32 *val)
65 {
66         int ret;
67
68         mutex_lock(&dev->reg_mutex);
69         ret = dev->ops->read32(dev, reg, val);
70         mutex_unlock(&dev->reg_mutex);
71
72         return ret;
73 }
74
75 static inline int ksz_write8(struct ksz_device *dev, u32 reg, u8 value)
76 {
77         int ret;
78
79         mutex_lock(&dev->reg_mutex);
80         ret = dev->ops->write8(dev, reg, value);
81         mutex_unlock(&dev->reg_mutex);
82
83         return ret;
84 }
85
86 static inline int ksz_write16(struct ksz_device *dev, u32 reg, u16 value)
87 {
88         int ret;
89
90         mutex_lock(&dev->reg_mutex);
91         ret = dev->ops->write16(dev, reg, value);
92         mutex_unlock(&dev->reg_mutex);
93
94         return ret;
95 }
96
97 static inline int ksz_write32(struct ksz_device *dev, u32 reg, u32 value)
98 {
99         int ret;
100
101         mutex_lock(&dev->reg_mutex);
102         ret = dev->ops->write32(dev, reg, value);
103         mutex_unlock(&dev->reg_mutex);
104
105         return ret;
106 }
107
108 static inline void ksz_pread8(struct ksz_device *dev, int port, int offset,
109                               u8 *data)
110 {
111         ksz_read8(dev, dev->dev_ops->get_port_addr(port, offset), data);
112 }
113
114 static inline void ksz_pread16(struct ksz_device *dev, int port, int offset,
115                                u16 *data)
116 {
117         ksz_read16(dev, dev->dev_ops->get_port_addr(port, offset), data);
118 }
119
120 static inline void ksz_pread32(struct ksz_device *dev, int port, int offset,
121                                u32 *data)
122 {
123         ksz_read32(dev, dev->dev_ops->get_port_addr(port, offset), data);
124 }
125
126 static inline void ksz_pwrite8(struct ksz_device *dev, int port, int offset,
127                                u8 data)
128 {
129         ksz_write8(dev, dev->dev_ops->get_port_addr(port, offset), data);
130 }
131
132 static inline void ksz_pwrite16(struct ksz_device *dev, int port, int offset,
133                                 u16 data)
134 {
135         ksz_write16(dev, dev->dev_ops->get_port_addr(port, offset), data);
136 }
137
138 static inline void ksz_pwrite32(struct ksz_device *dev, int port, int offset,
139                                 u32 data)
140 {
141         ksz_write32(dev, dev->dev_ops->get_port_addr(port, offset), data);
142 }
143
144 static void ksz_cfg(struct ksz_device *dev, u32 addr, u8 bits, bool set)
145 {
146         u8 data;
147
148         ksz_read8(dev, addr, &data);
149         if (set)
150                 data |= bits;
151         else
152                 data &= ~bits;
153         ksz_write8(dev, addr, data);
154 }
155
156 static void ksz_port_cfg(struct ksz_device *dev, int port, int offset, u8 bits,
157                          bool set)
158 {
159         u32 addr;
160         u8 data;
161
162         addr = dev->dev_ops->get_port_addr(port, offset);
163         ksz_read8(dev, addr, &data);
164
165         if (set)
166                 data |= bits;
167         else
168                 data &= ~bits;
169
170         ksz_write8(dev, addr, data);
171 }
172
173 struct ksz_poll_ctx {
174         struct ksz_device *dev;
175         int port;
176         int offset;
177 };
178
179 static inline u32 ksz_pread32_poll(struct ksz_poll_ctx *ctx)
180 {
181         u32 data;
182
183         ksz_pread32(ctx->dev, ctx->port, ctx->offset, &data);
184         return data;
185 }
186
187 #endif