diff --git a/drivers/net/e1000.c b/drivers/net/e1000.c index 4750c007e03..c87ae3a5f4f 100644 --- a/drivers/net/e1000.c +++ b/drivers/net/e1000.c @@ -144,10 +144,6 @@ struct e1000_driver_s struct netdev_lowerhalf_s dev; struct work_s work; - /* Driver state */ - - bool bifup; - /* Packets list */ FAR netpkt_t **tx_pkt; @@ -985,13 +981,17 @@ static int e1000_ifup(FAR struct netdev_lowerhalf_s *dev) dev->netdev.d_ipv6addr[6], dev->netdev.d_ipv6addr[7]); #endif + flags = enter_critical_section(); + /* Enable the Ethernet */ - flags = enter_critical_section(); e1000_enable(priv); - priv->bifup = true; leave_critical_section(flags); + /* Update link status in case link status interrupt is missing */ + + e1000_link_work(priv); + return OK; } @@ -1028,7 +1028,6 @@ static int e1000_ifdown(FAR struct netdev_lowerhalf_s *dev) /* Mark the device "down" */ - priv->bifup = false; leave_critical_section(flags); return OK; } diff --git a/drivers/net/igc.c b/drivers/net/igc.c index 4da6c11af68..778c513af29 100644 --- a/drivers/net/igc.c +++ b/drivers/net/igc.c @@ -125,10 +125,6 @@ struct igc_driver_s struct netdev_lowerhalf_s dev; struct work_s work; - /* Driver state */ - - bool bifup; - /* Packets list */ FAR netpkt_t **tx_pkt; @@ -580,7 +576,7 @@ static int igc_transmit(FAR struct netdev_lowerhalf_s *dev, * *****************************************************************************/ -static FAR netpkt_t * igc_receive(FAR struct netdev_lowerhalf_s *dev) +static FAR netpkt_t *igc_receive(FAR struct netdev_lowerhalf_s *dev) { FAR struct igc_driver_s *priv = (FAR struct igc_driver_s *)dev; FAR netpkt_t *pkt = NULL; @@ -866,13 +862,17 @@ static int igc_ifup(FAR struct netdev_lowerhalf_s *dev) dev->netdev.d_ipv6addr[6], dev->netdev.d_ipv6addr[7]); #endif + flags = enter_critical_section(); + /* Enable the Ethernet */ - flags = enter_critical_section(); igc_enable(priv); - priv->bifup = true; leave_critical_section(flags); + /* Update link status in case link status interrupt is missing */ + + igc_link_work(priv); + return OK; } @@ -909,7 +909,6 @@ static int igc_ifdown(FAR struct netdev_lowerhalf_s *dev) /* Mark the device "down" */ - priv->bifup = false; leave_critical_section(flags); return OK; }