|
|
@@ -4015,7 +4015,8 @@ static int rocker_port_open(struct net_device *dev)
|
|
|
|
|
|
napi_enable(&rocker_port->napi_tx);
|
|
|
napi_enable(&rocker_port->napi_rx);
|
|
|
- rocker_port_set_enable(rocker_port, true);
|
|
|
+ if (!dev->proto_down)
|
|
|
+ rocker_port_set_enable(rocker_port, true);
|
|
|
netif_start_queue(dev);
|
|
|
return 0;
|
|
|
|
|
|
@@ -4227,6 +4228,17 @@ static int rocker_port_get_phys_port_name(struct net_device *dev,
|
|
|
return err ? -EOPNOTSUPP : 0;
|
|
|
}
|
|
|
|
|
|
+static int rocker_port_change_proto_down(struct net_device *dev,
|
|
|
+ bool proto_down)
|
|
|
+{
|
|
|
+ struct rocker_port *rocker_port = netdev_priv(dev);
|
|
|
+
|
|
|
+ if (rocker_port->dev->flags & IFF_UP)
|
|
|
+ rocker_port_set_enable(rocker_port, !proto_down);
|
|
|
+ rocker_port->dev->proto_down = proto_down;
|
|
|
+ return 0;
|
|
|
+}
|
|
|
+
|
|
|
static const struct net_device_ops rocker_port_netdev_ops = {
|
|
|
.ndo_open = rocker_port_open,
|
|
|
.ndo_stop = rocker_port_stop,
|
|
|
@@ -4240,6 +4252,7 @@ static const struct net_device_ops rocker_port_netdev_ops = {
|
|
|
.ndo_fdb_del = switchdev_port_fdb_del,
|
|
|
.ndo_fdb_dump = switchdev_port_fdb_dump,
|
|
|
.ndo_get_phys_port_name = rocker_port_get_phys_port_name,
|
|
|
+ .ndo_change_proto_down = rocker_port_change_proto_down,
|
|
|
};
|
|
|
|
|
|
/********************
|