Network local loopback: Another structural simplication

This commit is contained in:
Gregory Nutt 2015-08-24 16:08:17 -06:00
parent 9d5a86753e
commit 3018dc31e5
2 changed files with 29 additions and 91 deletions

View File

@ -113,10 +113,6 @@ static struct lo_driver_s g_loopback;
* Private Function Prototypes
****************************************************************************/
/* Loop back logic */
static void lo_loopback(FAR struct lo_driver_s *priv);
/* Polling logic */
static int lo_txpoll(FAR struct net_driver_s *dev);
@ -127,7 +123,6 @@ static void lo_poll_expiry(int argc, wdparm_t arg, ...);
static int lo_ifup(FAR struct net_driver_s *dev);
static int lo_ifdown(FAR struct net_driver_s *dev);
static inline void lo_txavail_process(FAR struct lo_driver_s *priv);
static void lo_txavail_work(FAR void *arg);
static int lo_txavail(FAR struct net_driver_s *dev);
#if defined(CONFIG_NET_IGMP) || defined(CONFIG_NET_ICMPv6)
@ -142,24 +137,29 @@ static int lo_rmmac(FAR struct net_driver_s *dev, FAR const uint8_t *mac);
****************************************************************************/
/****************************************************************************
* Function: lo_loopback
* Function: lo_txpoll
*
* Description:
* An interrupt was received indicating the availability of a new RX packet
* Check if the network has any outgoing packets ready to send. This is
* a callback from devif_poll(). devif_poll() will be called only during
* normal TX polling.
*
* Parameters:
* priv - Reference to the driver state structure
* dev - Reference to the NuttX driver state structure
*
* Returned Value:
* None
* OK on success; a negated errno on failure
*
* Assumptions:
* Global interrupts are disabled by interrupt handling logic.
* May or may not be called from an interrupt handler. In either case,
* the network is locked.
*
****************************************************************************/
static void lo_loopback(FAR struct lo_driver_s *priv)
static int lo_txpoll(FAR struct net_driver_s *dev)
{
FAR struct lo_driver_s *priv = (FAR struct lo_driver_s *)dev->d_private;
/* Loop while there is data "sent", i.e., while d_len > 0. That should be
* the case upon entry here and while the processing of the IPv4/6 packet
* generates a new packet to be sent. Sending, of course, just means
@ -197,43 +197,6 @@ static void lo_loopback(FAR struct lo_driver_s *priv)
priv->lo_dev.d_len = 0;
}
}
}
/****************************************************************************
* Function: lo_txpoll
*
* Description:
* Check if the network has any outgoing packets ready to send. This is
* a callback from devif_poll(). devif_poll() will be called only during
* normal TX polling.
*
* Parameters:
* dev - Reference to the NuttX driver state structure
*
* Returned Value:
* OK on success; a negated errno on failure
*
* Assumptions:
* May or may not be called from an interrupt handler. In either case,
* global interrupts are disabled, either explicitly or indirectly through
* interrupt handling logic.
*
****************************************************************************/
static int lo_txpoll(FAR struct net_driver_s *dev)
{
FAR struct lo_driver_s *priv = (FAR struct lo_driver_s *)dev->d_private;
/* Check if the polling resulted in data that should be sent, i.e., tht
* the field d_len is set to a value > 0.
*/
if (priv->lo_dev.d_len > 0)
{
/* Loop the packet back to the host */
lo_loopback(priv);
}
return 0;
}
@ -251,7 +214,7 @@ static int lo_txpoll(FAR struct net_driver_s *dev)
* OK on success
*
* Assumptions:
* Ethernet interrupts are disabled
* The network is locked
*
****************************************************************************/
@ -285,7 +248,7 @@ static void lo_poll_work(FAR void *arg)
* None
*
* Assumptions:
* Global interrupts are disabled by the watchdog logic.
* The network is locked.
*
****************************************************************************/
@ -384,35 +347,6 @@ static int lo_ifdown(FAR struct net_driver_s *dev)
return OK;
}
/****************************************************************************
* Function: lo_txavail_process
*
* Description:
* Perform an out-of-cycle poll.
*
* Parameters:
* dev - Reference to the NuttX driver state structure
*
* Returned Value:
* None
*
* Assumptions:
* Called in normal user mode
*
****************************************************************************/
static inline void lo_txavail_process(FAR struct lo_driver_s *priv)
{
/* Ignore the notification if the interface is not yet up */
if (priv->lo_bifup)
{
/* If so, then poll the network for new XMIT data */
(void)devif_poll(&priv->lo_dev, lo_txpoll);
}
}
/****************************************************************************
* Function: lo_txavail_work
*
@ -435,10 +369,16 @@ static void lo_txavail_work(FAR void *arg)
FAR struct lo_driver_s *priv = (FAR struct lo_driver_s *)arg;
net_lock_t state;
/* Perform the poll */
/* Ignore the notification if the interface is not yet up */
state = net_lock();
lo_txavail_process(priv);
if (priv->lo_bifup)
{
/* If so, then poll the network for new XMIT data */
(void)devif_poll(&priv->lo_dev, lo_txpoll);
}
net_unlock(state);
}

View File

@ -195,8 +195,7 @@ static void skel_ipv6multicast(FAR struct skel_driver_s *priv);
*
* Assumptions:
* May or may not be called from an interrupt handler. In either case,
* global interrupts are disabled, either explicitly or indirectly through
* interrupt handling logic.
* the network is locked.
*
****************************************************************************/
@ -240,8 +239,7 @@ static int skel_transmit(FAR struct skel_driver_s *priv)
*
* Assumptions:
* May or may not be called from an interrupt handler. In either case,
* global interrupts are disabled, either explicitly or indirectly through
* interrupt handling logic.
* the network is locked.
*
****************************************************************************/
@ -306,7 +304,7 @@ static int skel_txpoll(FAR struct net_driver_s *dev)
* None
*
* Assumptions:
* Global interrupts are disabled by interrupt handling logic.
* The network is locked.
*
****************************************************************************/
@ -441,7 +439,7 @@ static void skel_receive(FAR struct skel_driver_s *priv)
* None
*
* Assumptions:
* Global interrupts are disabled by the watchdog logic.
* The network is locked.
*
****************************************************************************/
@ -474,7 +472,7 @@ static void skel_txdone(FAR struct skel_driver_s *priv)
* None
*
* Assumptions:
* Ethernet interrupts are disabled
* The network is locked.
*
****************************************************************************/
@ -509,7 +507,7 @@ static inline void skel_interrupt_process(FAR struct skel_driver_s *priv)
* OK on success
*
* Assumptions:
* Ethernet interrupts are disabled
* The network is locked.
*
****************************************************************************/
@ -629,7 +627,7 @@ static inline void skel_txtimeout_process(FAR struct skel_driver_s *priv)
* OK on success
*
* Assumptions:
* Ethernet interrupts are disabled
* The network is locked.
*
****************************************************************************/
@ -743,7 +741,7 @@ static inline void skel_poll_process(FAR struct skel_driver_s *priv)
* OK on success
*
* Assumptions:
* Ethernet interrupts are disabled
* The network is locked.
*
****************************************************************************/