From a16cae2b74cc65f76c9cd9d2befa2b667b84609e Mon Sep 17 00:00:00 2001 From: Andrew Webster Date: Thu, 21 Jan 2016 18:40:52 -0600 Subject: [PATCH] Kinetis enet: support multiple transmits between interrupts. Accounts for the unlikely event that more than one packet has been transmitted before the tx done is processed --- arch/arm/src/kinetis/kinetis_enet.c | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/arch/arm/src/kinetis/kinetis_enet.c b/arch/arm/src/kinetis/kinetis_enet.c index 7bb17466687..d2281fdfa55 100644 --- a/arch/arm/src/kinetis/kinetis_enet.c +++ b/arch/arm/src/kinetis/kinetis_enet.c @@ -651,13 +651,12 @@ static void kinetis_receive(FAR struct kinetis_driver_s *priv) static void kinetis_txdone(FAR struct kinetis_driver_s *priv) { - struct enet_desc_s *txdesc; uint32_t regval; /* Verify that the oldest descriptor descriptor completed */ - txdesc = &priv->txdesc[priv->txtail]; - if ((txdesc->status1 & TXDESC_R) == 0) + while (((priv->txdesc[priv->txtail].status1 & TXDESC_R) == 0) && + (priv->txtail != priv->txhead)) { /* Yes.. bump up the tail pointer, making space for a new TX descriptor */