Commit 3117455d authored by Florian Fainelli's avatar Florian Fainelli Committed by David S. Miller

net: dsa: b53: Export most operations to other drivers

In preparation for making dsa_switch_ops const, export b53 operations
utilized by other drivers such as bcm_sf2.
Signed-off-by: default avatarFlorian Fainelli <f.fainelli@gmail.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 1940075b
...@@ -712,7 +712,7 @@ static unsigned int b53_get_mib_size(struct b53_device *dev) ...@@ -712,7 +712,7 @@ static unsigned int b53_get_mib_size(struct b53_device *dev)
return B53_MIBS_SIZE; return B53_MIBS_SIZE;
} }
static void b53_get_strings(struct dsa_switch *ds, int port, uint8_t *data) void b53_get_strings(struct dsa_switch *ds, int port, uint8_t *data)
{ {
struct b53_device *dev = ds->priv; struct b53_device *dev = ds->priv;
const struct b53_mib_desc *mibs = b53_get_mib(dev); const struct b53_mib_desc *mibs = b53_get_mib(dev);
...@@ -723,9 +723,9 @@ static void b53_get_strings(struct dsa_switch *ds, int port, uint8_t *data) ...@@ -723,9 +723,9 @@ static void b53_get_strings(struct dsa_switch *ds, int port, uint8_t *data)
memcpy(data + i * ETH_GSTRING_LEN, memcpy(data + i * ETH_GSTRING_LEN,
mibs[i].name, ETH_GSTRING_LEN); mibs[i].name, ETH_GSTRING_LEN);
} }
EXPORT_SYMBOL(b53_get_strings);
static void b53_get_ethtool_stats(struct dsa_switch *ds, int port, void b53_get_ethtool_stats(struct dsa_switch *ds, int port, uint64_t *data)
uint64_t *data)
{ {
struct b53_device *dev = ds->priv; struct b53_device *dev = ds->priv;
const struct b53_mib_desc *mibs = b53_get_mib(dev); const struct b53_mib_desc *mibs = b53_get_mib(dev);
...@@ -756,13 +756,15 @@ static void b53_get_ethtool_stats(struct dsa_switch *ds, int port, ...@@ -756,13 +756,15 @@ static void b53_get_ethtool_stats(struct dsa_switch *ds, int port,
mutex_unlock(&dev->stats_mutex); mutex_unlock(&dev->stats_mutex);
} }
EXPORT_SYMBOL(b53_get_ethtool_stats);
static int b53_get_sset_count(struct dsa_switch *ds) int b53_get_sset_count(struct dsa_switch *ds)
{ {
struct b53_device *dev = ds->priv; struct b53_device *dev = ds->priv;
return b53_get_mib_size(dev); return b53_get_mib_size(dev);
} }
EXPORT_SYMBOL(b53_get_sset_count);
static int b53_setup(struct dsa_switch *ds) static int b53_setup(struct dsa_switch *ds)
{ {
...@@ -921,15 +923,15 @@ static void b53_adjust_link(struct dsa_switch *ds, int port, ...@@ -921,15 +923,15 @@ static void b53_adjust_link(struct dsa_switch *ds, int port,
} }
} }
static int b53_vlan_filtering(struct dsa_switch *ds, int port, int b53_vlan_filtering(struct dsa_switch *ds, int port, bool vlan_filtering)
bool vlan_filtering)
{ {
return 0; return 0;
} }
EXPORT_SYMBOL(b53_vlan_filtering);
static int b53_vlan_prepare(struct dsa_switch *ds, int port, int b53_vlan_prepare(struct dsa_switch *ds, int port,
const struct switchdev_obj_port_vlan *vlan, const struct switchdev_obj_port_vlan *vlan,
struct switchdev_trans *trans) struct switchdev_trans *trans)
{ {
struct b53_device *dev = ds->priv; struct b53_device *dev = ds->priv;
...@@ -943,10 +945,11 @@ static int b53_vlan_prepare(struct dsa_switch *ds, int port, ...@@ -943,10 +945,11 @@ static int b53_vlan_prepare(struct dsa_switch *ds, int port,
return 0; return 0;
} }
EXPORT_SYMBOL(b53_vlan_prepare);
static void b53_vlan_add(struct dsa_switch *ds, int port, void b53_vlan_add(struct dsa_switch *ds, int port,
const struct switchdev_obj_port_vlan *vlan, const struct switchdev_obj_port_vlan *vlan,
struct switchdev_trans *trans) struct switchdev_trans *trans)
{ {
struct b53_device *dev = ds->priv; struct b53_device *dev = ds->priv;
bool untagged = vlan->flags & BRIDGE_VLAN_INFO_UNTAGGED; bool untagged = vlan->flags & BRIDGE_VLAN_INFO_UNTAGGED;
...@@ -977,9 +980,10 @@ static void b53_vlan_add(struct dsa_switch *ds, int port, ...@@ -977,9 +980,10 @@ static void b53_vlan_add(struct dsa_switch *ds, int port,
b53_fast_age_vlan(dev, vid); b53_fast_age_vlan(dev, vid);
} }
} }
EXPORT_SYMBOL(b53_vlan_add);
static int b53_vlan_del(struct dsa_switch *ds, int port, int b53_vlan_del(struct dsa_switch *ds, int port,
const struct switchdev_obj_port_vlan *vlan) const struct switchdev_obj_port_vlan *vlan)
{ {
struct b53_device *dev = ds->priv; struct b53_device *dev = ds->priv;
bool untagged = vlan->flags & BRIDGE_VLAN_INFO_UNTAGGED; bool untagged = vlan->flags & BRIDGE_VLAN_INFO_UNTAGGED;
...@@ -1015,10 +1019,11 @@ static int b53_vlan_del(struct dsa_switch *ds, int port, ...@@ -1015,10 +1019,11 @@ static int b53_vlan_del(struct dsa_switch *ds, int port,
return 0; return 0;
} }
EXPORT_SYMBOL(b53_vlan_del);
static int b53_vlan_dump(struct dsa_switch *ds, int port, int b53_vlan_dump(struct dsa_switch *ds, int port,
struct switchdev_obj_port_vlan *vlan, struct switchdev_obj_port_vlan *vlan,
int (*cb)(struct switchdev_obj *obj)) int (*cb)(struct switchdev_obj *obj))
{ {
struct b53_device *dev = ds->priv; struct b53_device *dev = ds->priv;
u16 vid, vid_start = 0, pvid; u16 vid, vid_start = 0, pvid;
...@@ -1057,6 +1062,7 @@ static int b53_vlan_dump(struct dsa_switch *ds, int port, ...@@ -1057,6 +1062,7 @@ static int b53_vlan_dump(struct dsa_switch *ds, int port,
return err; return err;
} }
EXPORT_SYMBOL(b53_vlan_dump);
/* Address Resolution Logic routines */ /* Address Resolution Logic routines */
static int b53_arl_op_wait(struct b53_device *dev) static int b53_arl_op_wait(struct b53_device *dev)
...@@ -1175,9 +1181,9 @@ static int b53_arl_op(struct b53_device *dev, int op, int port, ...@@ -1175,9 +1181,9 @@ static int b53_arl_op(struct b53_device *dev, int op, int port,
return b53_arl_rw_op(dev, 0); return b53_arl_rw_op(dev, 0);
} }
static int b53_fdb_prepare(struct dsa_switch *ds, int port, int b53_fdb_prepare(struct dsa_switch *ds, int port,
const struct switchdev_obj_port_fdb *fdb, const struct switchdev_obj_port_fdb *fdb,
struct switchdev_trans *trans) struct switchdev_trans *trans)
{ {
struct b53_device *priv = ds->priv; struct b53_device *priv = ds->priv;
...@@ -1189,24 +1195,27 @@ static int b53_fdb_prepare(struct dsa_switch *ds, int port, ...@@ -1189,24 +1195,27 @@ static int b53_fdb_prepare(struct dsa_switch *ds, int port,
return 0; return 0;
} }
EXPORT_SYMBOL(b53_fdb_prepare);
static void b53_fdb_add(struct dsa_switch *ds, int port, void b53_fdb_add(struct dsa_switch *ds, int port,
const struct switchdev_obj_port_fdb *fdb, const struct switchdev_obj_port_fdb *fdb,
struct switchdev_trans *trans) struct switchdev_trans *trans)
{ {
struct b53_device *priv = ds->priv; struct b53_device *priv = ds->priv;
if (b53_arl_op(priv, 0, port, fdb->addr, fdb->vid, true)) if (b53_arl_op(priv, 0, port, fdb->addr, fdb->vid, true))
pr_err("%s: failed to add MAC address\n", __func__); pr_err("%s: failed to add MAC address\n", __func__);
} }
EXPORT_SYMBOL(b53_fdb_add);
static int b53_fdb_del(struct dsa_switch *ds, int port, int b53_fdb_del(struct dsa_switch *ds, int port,
const struct switchdev_obj_port_fdb *fdb) const struct switchdev_obj_port_fdb *fdb)
{ {
struct b53_device *priv = ds->priv; struct b53_device *priv = ds->priv;
return b53_arl_op(priv, 0, port, fdb->addr, fdb->vid, false); return b53_arl_op(priv, 0, port, fdb->addr, fdb->vid, false);
} }
EXPORT_SYMBOL(b53_fdb_del);
static int b53_arl_search_wait(struct b53_device *dev) static int b53_arl_search_wait(struct b53_device *dev)
{ {
...@@ -1258,9 +1267,9 @@ static int b53_fdb_copy(struct net_device *dev, int port, ...@@ -1258,9 +1267,9 @@ static int b53_fdb_copy(struct net_device *dev, int port,
return cb(&fdb->obj); return cb(&fdb->obj);
} }
static int b53_fdb_dump(struct dsa_switch *ds, int port, int b53_fdb_dump(struct dsa_switch *ds, int port,
struct switchdev_obj_port_fdb *fdb, struct switchdev_obj_port_fdb *fdb,
int (*cb)(struct switchdev_obj *obj)) int (*cb)(struct switchdev_obj *obj))
{ {
struct b53_device *priv = ds->priv; struct b53_device *priv = ds->priv;
struct net_device *dev = ds->ports[port].netdev; struct net_device *dev = ds->ports[port].netdev;
...@@ -1297,9 +1306,9 @@ static int b53_fdb_dump(struct dsa_switch *ds, int port, ...@@ -1297,9 +1306,9 @@ static int b53_fdb_dump(struct dsa_switch *ds, int port,
return 0; return 0;
} }
EXPORT_SYMBOL(b53_fdb_dump);
static int b53_br_join(struct dsa_switch *ds, int port, int b53_br_join(struct dsa_switch *ds, int port, struct net_device *bridge)
struct net_device *bridge)
{ {
struct b53_device *dev = ds->priv; struct b53_device *dev = ds->priv;
s8 cpu_port = ds->dst->cpu_port; s8 cpu_port = ds->dst->cpu_port;
...@@ -1343,8 +1352,9 @@ static int b53_br_join(struct dsa_switch *ds, int port, ...@@ -1343,8 +1352,9 @@ static int b53_br_join(struct dsa_switch *ds, int port,
return 0; return 0;
} }
EXPORT_SYMBOL(b53_br_join);
static void b53_br_leave(struct dsa_switch *ds, int port) void b53_br_leave(struct dsa_switch *ds, int port)
{ {
struct b53_device *dev = ds->priv; struct b53_device *dev = ds->priv;
struct net_device *bridge = dev->ports[port].bridge_dev; struct net_device *bridge = dev->ports[port].bridge_dev;
...@@ -1393,8 +1403,9 @@ static void b53_br_leave(struct dsa_switch *ds, int port) ...@@ -1393,8 +1403,9 @@ static void b53_br_leave(struct dsa_switch *ds, int port)
b53_set_vlan_entry(dev, pvid, vl); b53_set_vlan_entry(dev, pvid, vl);
} }
} }
EXPORT_SYMBOL(b53_br_leave);
static void b53_br_set_stp_state(struct dsa_switch *ds, int port, u8 state) void b53_br_set_stp_state(struct dsa_switch *ds, int port, u8 state)
{ {
struct b53_device *dev = ds->priv; struct b53_device *dev = ds->priv;
u8 hw_state; u8 hw_state;
...@@ -1426,14 +1437,16 @@ static void b53_br_set_stp_state(struct dsa_switch *ds, int port, u8 state) ...@@ -1426,14 +1437,16 @@ static void b53_br_set_stp_state(struct dsa_switch *ds, int port, u8 state)
reg |= hw_state; reg |= hw_state;
b53_write8(dev, B53_CTRL_PAGE, B53_PORT_CTRL(port), reg); b53_write8(dev, B53_CTRL_PAGE, B53_PORT_CTRL(port), reg);
} }
EXPORT_SYMBOL(b53_br_set_stp_state);
static void b53_br_fast_age(struct dsa_switch *ds, int port) void b53_br_fast_age(struct dsa_switch *ds, int port)
{ {
struct b53_device *dev = ds->priv; struct b53_device *dev = ds->priv;
if (b53_fast_age_port(dev, port)) if (b53_fast_age_port(dev, port))
dev_err(ds->dev, "fast ageing failed\n"); dev_err(ds->dev, "fast ageing failed\n");
} }
EXPORT_SYMBOL(b53_br_fast_age);
static enum dsa_tag_protocol b53_get_tag_protocol(struct dsa_switch *ds) static enum dsa_tag_protocol b53_get_tag_protocol(struct dsa_switch *ds)
{ {
......
...@@ -374,4 +374,37 @@ static inline int b53_switch_get_reset_gpio(struct b53_device *dev) ...@@ -374,4 +374,37 @@ static inline int b53_switch_get_reset_gpio(struct b53_device *dev)
return -ENOENT; return -ENOENT;
} }
#endif #endif
/* Exported functions towards other drivers */
void b53_get_strings(struct dsa_switch *ds, int port, uint8_t *data);
void b53_get_ethtool_stats(struct dsa_switch *ds, int port, uint64_t *data);
int b53_get_sset_count(struct dsa_switch *ds);
int b53_br_join(struct dsa_switch *ds, int port, struct net_device *bridge);
void b53_br_leave(struct dsa_switch *ds, int port);
void b53_br_set_stp_state(struct dsa_switch *ds, int port, u8 state);
void b53_br_fast_age(struct dsa_switch *ds, int port);
int b53_vlan_filtering(struct dsa_switch *ds, int port, bool vlan_filtering);
int b53_vlan_prepare(struct dsa_switch *ds, int port,
const struct switchdev_obj_port_vlan *vlan,
struct switchdev_trans *trans);
void b53_vlan_add(struct dsa_switch *ds, int port,
const struct switchdev_obj_port_vlan *vlan,
struct switchdev_trans *trans);
int b53_vlan_del(struct dsa_switch *ds, int port,
const struct switchdev_obj_port_vlan *vlan);
int b53_vlan_dump(struct dsa_switch *ds, int port,
struct switchdev_obj_port_vlan *vlan,
int (*cb)(struct switchdev_obj *obj));
int b53_fdb_prepare(struct dsa_switch *ds, int port,
const struct switchdev_obj_port_fdb *fdb,
struct switchdev_trans *trans);
void b53_fdb_add(struct dsa_switch *ds, int port,
const struct switchdev_obj_port_fdb *fdb,
struct switchdev_trans *trans);
int b53_fdb_del(struct dsa_switch *ds, int port,
const struct switchdev_obj_port_fdb *fdb);
int b53_fdb_dump(struct dsa_switch *ds, int port,
struct switchdev_obj_port_fdb *fdb,
int (*cb)(struct switchdev_obj *obj));
#endif #endif
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment