Commit 00fc0c51 authored by Arkadi Sharshevsky's avatar Arkadi Sharshevsky Committed by David S. Miller

rocker: Change world_ops API and implementation to be switchdev independant

Currently the switchdev_trans struct is embedded in the world_ops API.
In order to add support for adding FDB via a notfication chain the API should
be switchdev independent.
Signed-off-by: default avatarArkadi Sharshevsky <arkadis@mellanox.com>
Signed-off-by: default avatarJiri Pirko <jiri@mellanox.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 96673a30
...@@ -105,8 +105,7 @@ struct rocker_world_ops { ...@@ -105,8 +105,7 @@ struct rocker_world_ops {
int (*port_open)(struct rocker_port *rocker_port); int (*port_open)(struct rocker_port *rocker_port);
void (*port_stop)(struct rocker_port *rocker_port); void (*port_stop)(struct rocker_port *rocker_port);
int (*port_attr_stp_state_set)(struct rocker_port *rocker_port, int (*port_attr_stp_state_set)(struct rocker_port *rocker_port,
u8 state, u8 state);
struct switchdev_trans *trans);
int (*port_attr_bridge_flags_set)(struct rocker_port *rocker_port, int (*port_attr_bridge_flags_set)(struct rocker_port *rocker_port,
unsigned long brport_flags, unsigned long brport_flags,
struct switchdev_trans *trans); struct switchdev_trans *trans);
...@@ -120,18 +119,16 @@ struct rocker_world_ops { ...@@ -120,18 +119,16 @@ struct rocker_world_ops {
u32 ageing_time, u32 ageing_time,
struct switchdev_trans *trans); struct switchdev_trans *trans);
int (*port_obj_vlan_add)(struct rocker_port *rocker_port, int (*port_obj_vlan_add)(struct rocker_port *rocker_port,
const struct switchdev_obj_port_vlan *vlan, const struct switchdev_obj_port_vlan *vlan);
struct switchdev_trans *trans);
int (*port_obj_vlan_del)(struct rocker_port *rocker_port, int (*port_obj_vlan_del)(struct rocker_port *rocker_port,
const struct switchdev_obj_port_vlan *vlan); const struct switchdev_obj_port_vlan *vlan);
int (*port_obj_vlan_dump)(const struct rocker_port *rocker_port, int (*port_obj_vlan_dump)(const struct rocker_port *rocker_port,
struct switchdev_obj_port_vlan *vlan, struct switchdev_obj_port_vlan *vlan,
switchdev_obj_dump_cb_t *cb); switchdev_obj_dump_cb_t *cb);
int (*port_obj_fdb_add)(struct rocker_port *rocker_port, int (*port_obj_fdb_add)(struct rocker_port *rocker_port,
const struct switchdev_obj_port_fdb *fdb, u16 vid, const unsigned char *addr);
struct switchdev_trans *trans);
int (*port_obj_fdb_del)(struct rocker_port *rocker_port, int (*port_obj_fdb_del)(struct rocker_port *rocker_port,
const struct switchdev_obj_port_fdb *fdb); u16 vid, const unsigned char *addr);
int (*port_obj_fdb_dump)(const struct rocker_port *rocker_port, int (*port_obj_fdb_dump)(const struct rocker_port *rocker_port,
struct switchdev_obj_port_fdb *fdb, struct switchdev_obj_port_fdb *fdb,
switchdev_obj_dump_cb_t *cb); switchdev_obj_dump_cb_t *cb);
......
...@@ -1557,7 +1557,11 @@ static int rocker_world_port_attr_stp_state_set(struct rocker_port *rocker_port, ...@@ -1557,7 +1557,11 @@ static int rocker_world_port_attr_stp_state_set(struct rocker_port *rocker_port,
if (!wops->port_attr_stp_state_set) if (!wops->port_attr_stp_state_set)
return -EOPNOTSUPP; return -EOPNOTSUPP;
return wops->port_attr_stp_state_set(rocker_port, state, trans);
if (switchdev_trans_ph_prepare(trans))
return 0;
return wops->port_attr_stp_state_set(rocker_port, state);
} }
static int static int
...@@ -1569,6 +1573,10 @@ rocker_world_port_attr_bridge_flags_set(struct rocker_port *rocker_port, ...@@ -1569,6 +1573,10 @@ rocker_world_port_attr_bridge_flags_set(struct rocker_port *rocker_port,
if (!wops->port_attr_bridge_flags_set) if (!wops->port_attr_bridge_flags_set)
return -EOPNOTSUPP; return -EOPNOTSUPP;
if (switchdev_trans_ph_prepare(trans))
return 0;
return wops->port_attr_bridge_flags_set(rocker_port, brport_flags, return wops->port_attr_bridge_flags_set(rocker_port, brport_flags,
trans); trans);
} }
...@@ -1608,6 +1616,10 @@ rocker_world_port_attr_bridge_ageing_time_set(struct rocker_port *rocker_port, ...@@ -1608,6 +1616,10 @@ rocker_world_port_attr_bridge_ageing_time_set(struct rocker_port *rocker_port,
if (!wops->port_attr_bridge_ageing_time_set) if (!wops->port_attr_bridge_ageing_time_set)
return -EOPNOTSUPP; return -EOPNOTSUPP;
if (switchdev_trans_ph_prepare(trans))
return 0;
return wops->port_attr_bridge_ageing_time_set(rocker_port, ageing_time, return wops->port_attr_bridge_ageing_time_set(rocker_port, ageing_time,
trans); trans);
} }
...@@ -1621,7 +1633,11 @@ rocker_world_port_obj_vlan_add(struct rocker_port *rocker_port, ...@@ -1621,7 +1633,11 @@ rocker_world_port_obj_vlan_add(struct rocker_port *rocker_port,
if (!wops->port_obj_vlan_add) if (!wops->port_obj_vlan_add)
return -EOPNOTSUPP; return -EOPNOTSUPP;
return wops->port_obj_vlan_add(rocker_port, vlan, trans);
if (switchdev_trans_ph_prepare(trans))
return 0;
return wops->port_obj_vlan_add(rocker_port, vlan);
} }
static int static int
...@@ -1656,7 +1672,11 @@ rocker_world_port_obj_fdb_add(struct rocker_port *rocker_port, ...@@ -1656,7 +1672,11 @@ rocker_world_port_obj_fdb_add(struct rocker_port *rocker_port,
if (!wops->port_obj_fdb_add) if (!wops->port_obj_fdb_add)
return -EOPNOTSUPP; return -EOPNOTSUPP;
return wops->port_obj_fdb_add(rocker_port, fdb, trans);
if (switchdev_trans_ph_prepare(trans))
return 0;
return wops->port_obj_fdb_add(rocker_port, fdb->vid, fdb->addr);
} }
static int static int
...@@ -1667,7 +1687,7 @@ rocker_world_port_obj_fdb_del(struct rocker_port *rocker_port, ...@@ -1667,7 +1687,7 @@ rocker_world_port_obj_fdb_del(struct rocker_port *rocker_port,
if (!wops->port_obj_fdb_del) if (!wops->port_obj_fdb_del)
return -EOPNOTSUPP; return -EOPNOTSUPP;
return wops->port_obj_fdb_del(rocker_port, fdb); return wops->port_obj_fdb_del(rocker_port, fdb->vid, fdb->addr);
} }
static int static int
......
This diff is collapsed.
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