aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/ethernet/rocker/rocker.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/net/ethernet/rocker/rocker.c')
-rw-r--r--drivers/net/ethernet/rocker/rocker.c64
1 files changed, 36 insertions, 28 deletions
diff --git a/drivers/net/ethernet/rocker/rocker.c b/drivers/net/ethernet/rocker/rocker.c
index 223348d8cc07..bc5f27aa3131 100644
--- a/drivers/net/ethernet/rocker/rocker.c
+++ b/drivers/net/ethernet/rocker/rocker.c
@@ -4131,8 +4131,26 @@ static int rocker_port_bridge_getlink(struct sk_buff *skb, u32 pid, u32 seq,
4131 rocker_port->brport_flags, mask); 4131 rocker_port->brport_flags, mask);
4132} 4132}
4133 4133
4134static int rocker_port_switch_parent_id_get(struct net_device *dev, 4134static const struct net_device_ops rocker_port_netdev_ops = {
4135 struct netdev_phys_item_id *psid) 4135 .ndo_open = rocker_port_open,
4136 .ndo_stop = rocker_port_stop,
4137 .ndo_start_xmit = rocker_port_xmit,
4138 .ndo_set_mac_address = rocker_port_set_mac_address,
4139 .ndo_vlan_rx_add_vid = rocker_port_vlan_rx_add_vid,
4140 .ndo_vlan_rx_kill_vid = rocker_port_vlan_rx_kill_vid,
4141 .ndo_fdb_add = rocker_port_fdb_add,
4142 .ndo_fdb_del = rocker_port_fdb_del,
4143 .ndo_fdb_dump = rocker_port_fdb_dump,
4144 .ndo_bridge_setlink = rocker_port_bridge_setlink,
4145 .ndo_bridge_getlink = rocker_port_bridge_getlink,
4146};
4147
4148/********************
4149 * swdev interface
4150 ********************/
4151
4152static int rocker_port_swdev_parent_id_get(struct net_device *dev,
4153 struct netdev_phys_item_id *psid)
4136{ 4154{
4137 struct rocker_port *rocker_port = netdev_priv(dev); 4155 struct rocker_port *rocker_port = netdev_priv(dev);
4138 struct rocker *rocker = rocker_port->rocker; 4156 struct rocker *rocker = rocker_port->rocker;
@@ -4142,18 +4160,18 @@ static int rocker_port_switch_parent_id_get(struct net_device *dev,
4142 return 0; 4160 return 0;
4143} 4161}
4144 4162
4145static int rocker_port_switch_port_stp_update(struct net_device *dev, u8 state) 4163static int rocker_port_swdev_port_stp_update(struct net_device *dev, u8 state)
4146{ 4164{
4147 struct rocker_port *rocker_port = netdev_priv(dev); 4165 struct rocker_port *rocker_port = netdev_priv(dev);
4148 4166
4149 return rocker_port_stp_update(rocker_port, state); 4167 return rocker_port_stp_update(rocker_port, state);
4150} 4168}
4151 4169
4152static int rocker_port_switch_fib_ipv4_add(struct net_device *dev, 4170static int rocker_port_swdev_fib_ipv4_add(struct net_device *dev,
4153 __be32 dst, int dst_len, 4171 __be32 dst, int dst_len,
4154 struct fib_info *fi, 4172 struct fib_info *fi,
4155 u8 tos, u8 type, 4173 u8 tos, u8 type,
4156 u32 nlflags, u32 tb_id) 4174 u32 nlflags, u32 tb_id)
4157{ 4175{
4158 struct rocker_port *rocker_port = netdev_priv(dev); 4176 struct rocker_port *rocker_port = netdev_priv(dev);
4159 int flags = 0; 4177 int flags = 0;
@@ -4162,10 +4180,10 @@ static int rocker_port_switch_fib_ipv4_add(struct net_device *dev,
4162 fi, tb_id, flags); 4180 fi, tb_id, flags);
4163} 4181}
4164 4182
4165static int rocker_port_switch_fib_ipv4_del(struct net_device *dev, 4183static int rocker_port_swdev_fib_ipv4_del(struct net_device *dev,
4166 __be32 dst, int dst_len, 4184 __be32 dst, int dst_len,
4167 struct fib_info *fi, 4185 struct fib_info *fi,
4168 u8 tos, u8 type, u32 tb_id) 4186 u8 tos, u8 type, u32 tb_id)
4169{ 4187{
4170 struct rocker_port *rocker_port = netdev_priv(dev); 4188 struct rocker_port *rocker_port = netdev_priv(dev);
4171 int flags = ROCKER_OP_FLAG_REMOVE; 4189 int flags = ROCKER_OP_FLAG_REMOVE;
@@ -4174,22 +4192,11 @@ static int rocker_port_switch_fib_ipv4_del(struct net_device *dev,
4174 fi, tb_id, flags); 4192 fi, tb_id, flags);
4175} 4193}
4176 4194
4177static const struct net_device_ops rocker_port_netdev_ops = { 4195static const struct swdev_ops rocker_port_swdev_ops = {
4178 .ndo_open = rocker_port_open, 4196 .swdev_parent_id_get = rocker_port_swdev_parent_id_get,
4179 .ndo_stop = rocker_port_stop, 4197 .swdev_port_stp_update = rocker_port_swdev_port_stp_update,
4180 .ndo_start_xmit = rocker_port_xmit, 4198 .swdev_fib_ipv4_add = rocker_port_swdev_fib_ipv4_add,
4181 .ndo_set_mac_address = rocker_port_set_mac_address, 4199 .swdev_fib_ipv4_del = rocker_port_swdev_fib_ipv4_del,
4182 .ndo_vlan_rx_add_vid = rocker_port_vlan_rx_add_vid,
4183 .ndo_vlan_rx_kill_vid = rocker_port_vlan_rx_kill_vid,
4184 .ndo_fdb_add = rocker_port_fdb_add,
4185 .ndo_fdb_del = rocker_port_fdb_del,
4186 .ndo_fdb_dump = rocker_port_fdb_dump,
4187 .ndo_bridge_setlink = rocker_port_bridge_setlink,
4188 .ndo_bridge_getlink = rocker_port_bridge_getlink,
4189 .ndo_switch_parent_id_get = rocker_port_switch_parent_id_get,
4190 .ndo_switch_port_stp_update = rocker_port_switch_port_stp_update,
4191 .ndo_switch_fib_ipv4_add = rocker_port_switch_fib_ipv4_add,
4192 .ndo_switch_fib_ipv4_del = rocker_port_switch_fib_ipv4_del,
4193}; 4200};
4194 4201
4195/******************** 4202/********************
@@ -4544,6 +4551,7 @@ static int rocker_probe_port(struct rocker *rocker, unsigned int port_number)
4544 rocker_port_dev_addr_init(rocker, rocker_port); 4551 rocker_port_dev_addr_init(rocker, rocker_port);
4545 dev->netdev_ops = &rocker_port_netdev_ops; 4552 dev->netdev_ops = &rocker_port_netdev_ops;
4546 dev->ethtool_ops = &rocker_port_ethtool_ops; 4553 dev->ethtool_ops = &rocker_port_ethtool_ops;
4554 dev->swdev_ops = &rocker_port_swdev_ops;
4547 netif_napi_add(dev, &rocker_port->napi_tx, rocker_port_poll_tx, 4555 netif_napi_add(dev, &rocker_port->napi_tx, rocker_port_poll_tx,
4548 NAPI_POLL_WEIGHT); 4556 NAPI_POLL_WEIGHT);
4549 netif_napi_add(dev, &rocker_port->napi_rx, rocker_port_poll_rx, 4557 netif_napi_add(dev, &rocker_port->napi_rx, rocker_port_poll_rx,