diff --git a/arch/arm/src/c5471/c5471_ethernet.c b/arch/arm/src/c5471/c5471_ethernet.c index ffbc5ae7f83..d7d686866e3 100644 --- a/arch/arm/src/c5471/c5471_ethernet.c +++ b/arch/arm/src/c5471/c5471_ethernet.c @@ -1778,7 +1778,7 @@ static void c5471_poll_work(FAR void *arg) { /* If so, update TCP timing states and poll the network for new XMIT data */ - (void)devif_timer(&priv->c_dev, c5471_txpoll); + (void)devif_timer(&priv->c_dev, C5471_WDDELAY, c5471_txpoll); } /* Setup the watchdog poll timer again */ diff --git a/arch/arm/src/imxrt/imxrt_enet.c b/arch/arm/src/imxrt/imxrt_enet.c index 396edba0df9..423080f5b2c 100644 --- a/arch/arm/src/imxrt/imxrt_enet.c +++ b/arch/arm/src/imxrt/imxrt_enet.c @@ -1231,7 +1231,7 @@ static void imxrt_poll_work(FAR void *arg) * transmit in progress, we will missing TCP time state updates? */ - (void)devif_timer(&priv->dev, imxrt_txpoll); + (void)devif_timer(&priv->dev, IMXRT_WDDELAY, imxrt_txpoll); } /* Setup the watchdog poll timer again in any case */ diff --git a/arch/arm/src/kinetis/kinetis_enet.c b/arch/arm/src/kinetis/kinetis_enet.c index 50361424b11..f90ac64ae69 100644 --- a/arch/arm/src/kinetis/kinetis_enet.c +++ b/arch/arm/src/kinetis/kinetis_enet.c @@ -1083,7 +1083,7 @@ static void kinetis_poll_work(FAR void *arg) * in progress, we will missing TCP time state updates? */ - (void)devif_timer(&priv->dev, kinetis_txpoll); + (void)devif_timer(&priv->dev, KINETIS_WDDELAY, kinetis_txpoll); } /* Setup the watchdog poll timer again in any case */ diff --git a/arch/arm/src/lpc17xx_40xx/lpc17_40_ethernet.c b/arch/arm/src/lpc17xx_40xx/lpc17_40_ethernet.c index ac1e39f3036..6e8f02d3c0b 100644 --- a/arch/arm/src/lpc17xx_40xx/lpc17_40_ethernet.c +++ b/arch/arm/src/lpc17xx_40xx/lpc17_40_ethernet.c @@ -1480,7 +1480,7 @@ static void lpc17_40_poll_work(FAR void *arg) * transmit in progress, we will missing TCP time state updates? */ - (void)devif_timer(&priv->lp_dev, lpc17_40_txpoll); + (void)devif_timer(&priv->lp_dev, LPC17_40_WDDELAY, lpc17_40_txpoll); } /* Simulate a fake receive to relaunch the data exchanges when a receive diff --git a/arch/arm/src/lpc43xx/lpc43_ethernet.c b/arch/arm/src/lpc43xx/lpc43_ethernet.c index 520ea4953fe..76ada7c4302 100644 --- a/arch/arm/src/lpc43xx/lpc43_ethernet.c +++ b/arch/arm/src/lpc43xx/lpc43_ethernet.c @@ -2169,7 +2169,7 @@ static void lpc43_poll_work(FAR void *arg) /* Update TCP timing states and poll for new XMIT data. */ - (void)devif_timer(dev, lpc43_txpoll); + (void)devif_timer(dev, LPC43_WDDELAY, lpc43_txpoll); /* We will, most likely end up with a buffer to be freed. But it * might not be the same one that we allocated above. diff --git a/arch/arm/src/lpc54xx/lpc54_ethernet.c b/arch/arm/src/lpc54xx/lpc54_ethernet.c index bc453793538..7fb2d68d2c9 100644 --- a/arch/arm/src/lpc54xx/lpc54_ethernet.c +++ b/arch/arm/src/lpc54xx/lpc54_ethernet.c @@ -1731,7 +1731,7 @@ static void lpc54_eth_dotimer(struct lpc54_ethdriver_s *priv) priv->eth_dev.d_buf = (uint8_t *)lpc54_pktbuf_alloc(priv); if (priv->eth_dev.d_buf != NULL) { - (void)devif_timer(&priv->eth_dev, lpc54_eth_txpoll); + (void)devif_timer(&priv->eth_dev, LPC54_WDDELAY, lpc54_eth_txpoll); /* Make sure that the Tx buffer remaining after the poll is * freed. diff --git a/arch/arm/src/s32k1xx/s32k1xx_enet.c b/arch/arm/src/s32k1xx/s32k1xx_enet.c index e991e79968a..3fd10641bdd 100644 --- a/arch/arm/src/s32k1xx/s32k1xx_enet.c +++ b/arch/arm/src/s32k1xx/s32k1xx_enet.c @@ -1230,7 +1230,7 @@ static void s32k1xx_poll_work(FAR void *arg) * transmit in progress, we will missing TCP time state updates? */ - (void)devif_timer(&priv->dev, s32k1xx_txpoll); + (void)devif_timer(&priv->dev, S32K1XX_WDDELAY, s32k1xx_txpoll); } /* Setup the watchdog poll timer again in any case */ diff --git a/arch/arm/src/sam34/sam_emac.c b/arch/arm/src/sam34/sam_emac.c index 1d3f4f6f9c5..dc0e4a45761 100644 --- a/arch/arm/src/sam34/sam_emac.c +++ b/arch/arm/src/sam34/sam_emac.c @@ -1773,7 +1773,7 @@ static void sam_poll_work(FAR void *arg) { /* Update TCP timing states and poll the network for new XMIT data. */ - (void)devif_timer(dev, sam_txpoll); + (void)devif_timer(dev, SAM_WDDELAY, sam_txpoll); } /* Setup the watchdog poll timer again */ diff --git a/arch/arm/src/sama5/sam_emaca.c b/arch/arm/src/sama5/sam_emaca.c index 500d7e28c29..7adbd832d36 100644 --- a/arch/arm/src/sama5/sam_emaca.c +++ b/arch/arm/src/sama5/sam_emaca.c @@ -1808,7 +1808,7 @@ static void sam_poll_work(FAR void *arg) { /* Update TCP timing states and poll the network for new XMIT data. */ - (void)devif_timer(dev, sam_txpoll); + (void)devif_timer(dev, SAM_WDDELAY, sam_txpoll); } /* Setup the watchdog poll timer again */ diff --git a/arch/arm/src/sama5/sam_emacb.c b/arch/arm/src/sama5/sam_emacb.c index ff39f84ab51..cd15d048dcf 100644 --- a/arch/arm/src/sama5/sam_emacb.c +++ b/arch/arm/src/sama5/sam_emacb.c @@ -2169,7 +2169,7 @@ static void sam_poll_work(FAR void *arg) { /* Update TCP timing states and poll the network for new XMIT data. */ - (void)devif_timer(dev, sam_txpoll); + (void)devif_timer(dev, SAM_WDDELAY, sam_txpoll); } /* Setup the watchdog poll timer again */ diff --git a/arch/arm/src/sama5/sam_gmac.c b/arch/arm/src/sama5/sam_gmac.c index fe48935eaed..a05cac8c462 100644 --- a/arch/arm/src/sama5/sam_gmac.c +++ b/arch/arm/src/sama5/sam_gmac.c @@ -1760,7 +1760,7 @@ static void sam_poll_work(FAR void *arg) { /* Update TCP timing states and poll the network for new XMIT data. */ - (void)devif_timer(dev, sam_txpoll); + (void)devif_timer(dev, SAM_WDDELAY, sam_txpoll); } /* Setup the watchdog poll timer again */ diff --git a/arch/arm/src/samv7/sam_emac.c b/arch/arm/src/samv7/sam_emac.c index 28e6781bce9..2e817732441 100644 --- a/arch/arm/src/samv7/sam_emac.c +++ b/arch/arm/src/samv7/sam_emac.c @@ -2636,7 +2636,7 @@ static void sam_poll_work(FAR void *arg) { /* Update TCP timing states and poll the network for new XMIT data. */ - (void)devif_timer(dev, sam_txpoll); + (void)devif_timer(dev, SAM_WDDELAY, sam_txpoll); } /* Setup the watchdog poll timer again */ diff --git a/arch/arm/src/stm32/stm32_eth.c b/arch/arm/src/stm32/stm32_eth.c index 2f670b9f8be..929d32a4f16 100644 --- a/arch/arm/src/stm32/stm32_eth.c +++ b/arch/arm/src/stm32/stm32_eth.c @@ -2275,7 +2275,7 @@ static void stm32_poll_work(FAR void *arg) /* Update TCP timing states and poll the network for new XMIT data. */ - (void)devif_timer(dev, stm32_txpoll); + (void)devif_timer(dev, STM32_WDDELAY, stm32_txpoll); /* We will, most likely end up with a buffer to be freed. But it * might not be the same one that we allocated above. diff --git a/arch/arm/src/stm32f7/stm32_ethernet.c b/arch/arm/src/stm32f7/stm32_ethernet.c index dfbf4fb5e27..c35d05d3dff 100644 --- a/arch/arm/src/stm32f7/stm32_ethernet.c +++ b/arch/arm/src/stm32f7/stm32_ethernet.c @@ -2380,7 +2380,7 @@ static void stm32_poll_work(void *arg) /* Update TCP timing states and poll the network for new XMIT data. */ - (void)devif_timer(dev, stm32_txpoll); + (void)devif_timer(dev, STM32_WDDELAY, stm32_txpoll); /* We will, most likely end up with a buffer to be freed. But it * might not be the same one that we allocated above. diff --git a/arch/arm/src/stm32h7/stm32_ethernet.c b/arch/arm/src/stm32h7/stm32_ethernet.c index 974fb90db35..4e445c5e370 100644 --- a/arch/arm/src/stm32h7/stm32_ethernet.c +++ b/arch/arm/src/stm32h7/stm32_ethernet.c @@ -2469,7 +2469,7 @@ static void stm32_poll_work(void *arg) * data. */ - (void)devif_timer(dev, stm32_txpoll); + (void)devif_timer(dev, STM32_WDDELAY, stm32_txpoll); /* We will, most likely end up with a buffer to be freed. But it * might not be the same one that we allocated above. diff --git a/arch/arm/src/tiva/lm/lm3s_ethernet.c b/arch/arm/src/tiva/lm/lm3s_ethernet.c index a895259b201..ae73343e294 100644 --- a/arch/arm/src/tiva/lm/lm3s_ethernet.c +++ b/arch/arm/src/tiva/lm/lm3s_ethernet.c @@ -1218,7 +1218,7 @@ static void tiva_poll_work(void *arg) * data. */ - (void)devif_timer(&priv->ld_dev, tiva_txpoll); + (void)devif_timer(&priv->ld_dev, TIVA_WDDELAY, tiva_txpoll); /* Setup the watchdog poll timer again */ diff --git a/arch/arm/src/tiva/tm4c/tm4c_ethernet.c b/arch/arm/src/tiva/tm4c/tm4c_ethernet.c index 68d83f475e3..87cc2d9d0eb 100644 --- a/arch/arm/src/tiva/tm4c/tm4c_ethernet.c +++ b/arch/arm/src/tiva/tm4c/tm4c_ethernet.c @@ -2283,7 +2283,7 @@ static void tiva_poll_work(FAR void *arg) /* Update TCP timing states and poll the network for new XMIT data. */ - (void)devif_timer(dev, tiva_txpoll); + (void)devif_timer(dev, TIVA_WDDELAY, tiva_txpoll); /* We will, most likely end up with a buffer to be freed. But it * might not be the same one that we allocated above. diff --git a/arch/hc/src/m9s12/m9s12_ethernet.c b/arch/hc/src/m9s12/m9s12_ethernet.c index 0ccb7cb083d..daeb76a5412 100644 --- a/arch/hc/src/m9s12/m9s12_ethernet.c +++ b/arch/hc/src/m9s12/m9s12_ethernet.c @@ -530,7 +530,7 @@ static void emac_polltimer(int argc, uint32_t arg, ...) * we will missing TCP time state updates? */ - (void)devif_timer(&priv->d_dev, emac_txpoll); + (void)devif_timer(&priv->d_dev, HCS12_WDDELAY, emac_txpoll); /* Setup the watchdog poll timer again */ diff --git a/arch/mips/src/pic32mx/pic32mx-ethernet.c b/arch/mips/src/pic32mx/pic32mx-ethernet.c index a2861146f7f..a5be54f309b 100644 --- a/arch/mips/src/pic32mx/pic32mx-ethernet.c +++ b/arch/mips/src/pic32mx/pic32mx-ethernet.c @@ -81,7 +81,9 @@ /**************************************************************************** * Pre-processor Definitions ****************************************************************************/ + /* Configuration ************************************************************/ + /* If processing is not done at the interrupt level, then work queue support * is required. */ @@ -155,6 +157,7 @@ #define PIC32MX_NBUFFERS (CONFIG_PIC32MX_ETH_NRXDESC + CONFIG_PIC32MX_ETH_NTXDESC + 1) /* Debug Configuration *****************************************************/ + /* CONFIG_NET_DUMPPACKET will dump the contents of each packet to the * console. */ @@ -224,6 +227,7 @@ #define BUF ((struct eth_hdr_s *)priv->pd_dev.d_buf) /* PHYs *********************************************************************/ + /* Select PHY-specific values. Add more PHYs as needed. */ #if defined(CONFIG_ETH0_PHY_KS8721) @@ -1278,7 +1282,7 @@ static void pic32mx_timerpoll(struct pic32mx_driver_s *priv) /* And perform the poll */ priv->pd_polling = true; - (void)devif_timer(&priv->pd_dev, pic32mx_txpoll); + (void)devif_timer(&priv->pd_dev, PIC32MX_WDDELAY, pic32mx_txpoll); /* Free any buffer left attached after the poll */ @@ -1717,7 +1721,9 @@ static void pic32mx_interrupt_work(void *arg) pic32mx_putreg(status, PIC32MX_ETH_IRQCLR); /* Handle each pending interrupt **************************************/ + /* Receive Errors *****************************************************/ + /* RXOVFLW: Receive FIFO Over Flow Error. RXOVFLW is set by the RXBM * Logic for an RX FIFO Overflow condition. It is cleared by either a * Reset or CPU write of a ‘1’ to the CLR register. @@ -1752,6 +1758,7 @@ static void pic32mx_interrupt_work(void *arg) } /* Receive Normal Events **********************************************/ + /* RXACT: Receive Activity Interrupt. This bit is set whenever RX * packet data is stored in the RXBM FIFO. It is cleared by either * a Reset or CPU write of a "1" to the CLR register. @@ -1776,6 +1783,7 @@ static void pic32mx_interrupt_work(void *arg) } /* Transmit Errors ****************************************************/ + /* TXABORT: Transmit Abort Condition Interrupt. This bit is set when * the MAC aborts the transmission of a TX packet for one of the * following reasons: @@ -1822,6 +1830,7 @@ static void pic32mx_interrupt_work(void *arg) } /* Watermark Events ***************************************************/ + /* EWMARK: Empty Watermark Interrupt. This bit is set when the RX * Descriptor Buffer Count is less than or equal to the value in the * RXEWM bit (ETHRXWM:0-7) value. It is cleared by BUFCNT bit @@ -2101,6 +2110,7 @@ static int pic32mx_ifup(struct net_driver_s *dev) pic32mx_ethreset(priv); /* MAC Initialization *****************************************************/ + /* Configuration: * - Use the configuration fuse setting FETHIO bit (DEVCFG3:25) to detect * the alternate/default I/O configuration @@ -2178,6 +2188,7 @@ static int pic32mx_ifup(struct net_driver_s *dev) pic32mx_putreg(regval, PIC32MX_EMAC1_MCFG); /* PHY Initialization *****************************************************/ + /* Initialize the PHY and wait for the link to be established */ ret = pic32mx_phyinit(priv); @@ -2188,6 +2199,7 @@ static int pic32mx_ifup(struct net_driver_s *dev) } /* MAC Configuration ******************************************************/ + /* Set other misc configuration-related registers to default values */ pic32mx_putreg(0, PIC32MX_EMAC1_CFG2); @@ -2209,6 +2221,7 @@ static int pic32mx_ifup(struct net_driver_s *dev) */ /* Program EMAC1IPGT with the back-to-back inter-packet gap */ + /* Use EMAC1IPGR for setting the non back-to-back inter-packet gap */ pic32mx_putreg(((12 << EMAC1_IPGR_GAP1_SHIFT) | @@ -2264,6 +2277,7 @@ static int pic32mx_ifup(struct net_driver_s *dev) #endif /* Continue Ethernet Controller Initialization ****************************/ + /* If planning to turn on the flow control, update the PTV value * (ETHCON1:16-31). */ @@ -2915,6 +2929,7 @@ static inline int pic32mx_phyinit(struct pic32mx_driver_s *priv) * the strap option, since it requires a 50 MHz clock instead of the normal * 25 Mhz. */ + #endif #else @@ -3267,6 +3282,7 @@ static void pic32mx_ethreset(struct pic32mx_driver_s *priv) flags = enter_critical_section(); /* Ethernet Controller Initialization *************************************/ + /* Disable Ethernet interrupts in the EVIC */ #if CONFIG_PIC32MX_NINTERFACES > 1 @@ -3315,6 +3331,7 @@ static void pic32mx_ethreset(struct pic32mx_driver_s *priv) pic32mx_putreg(0xffffffff, PIC32MX_ETH_RXSTCLR); /* MAC Initialization *****************************************************/ + /* Put the MAC into the reset state */ pic32mx_putreg((EMAC1_CFG1_TXRST | EMAC1_CFG1_MCSTXRST | diff --git a/arch/mips/src/pic32mz/pic32mz-ethernet.c b/arch/mips/src/pic32mz/pic32mz-ethernet.c index 61c34c65d37..cf99a0b81f1 100644 --- a/arch/mips/src/pic32mz/pic32mz-ethernet.c +++ b/arch/mips/src/pic32mz/pic32mz-ethernet.c @@ -1396,7 +1396,7 @@ static void pic32mz_timerpoll(struct pic32mz_driver_s *priv) /* And perform the poll */ priv->pd_polling = true; - (void)devif_timer(&priv->pd_dev, pic32mz_txpoll); + (void)devif_timer(&priv->pd_dev, PIC32MZ_WDDELAY, pic32mz_txpoll); /* Free any buffer left attached after the poll */ diff --git a/arch/misoc/src/common/misoc_net.c b/arch/misoc/src/common/misoc_net.c index 6a0dcde8f18..e815b152b92 100644 --- a/arch/misoc/src/common/misoc_net.c +++ b/arch/misoc/src/common/misoc_net.c @@ -119,15 +119,11 @@ struct misoc_net_driver_s WDOG_ID misoc_net_txtimeout; /* TX timeout timer */ struct work_s misoc_net_irqwork; /* For deferring interrupt work to the work queue */ struct work_s misoc_net_pollwork; /* For deferring poll work to the work queue */ - uint8_t *rx0_buf; /* 2 RX and 2 TX buffer */ uint8_t *rx1_buf; uint8_t *tx0_buf; uint8_t *tx1_buf; - uint8_t *tx_buf; - - uint8_t tx_slot; /* The slot from which we send packet (tx0/tx1) */ /* This holds the information visible to the NuttX network */ @@ -257,7 +253,7 @@ static int misoc_net_transmit(FAR struct misoc_net_driver_s *priv) /* switch tx slot */ - priv->tx_slot = (priv->tx_slot+1)%2; + priv->tx_slot = (priv->tx_slot + 1) % 2; if (priv->tx_slot) { priv->tx_buf = priv->tx1_buf; @@ -304,7 +300,8 @@ static int misoc_net_transmit(FAR struct misoc_net_driver_s *priv) static int misoc_net_txpoll(FAR struct net_driver_s *dev) { - FAR struct misoc_net_driver_s *priv = (FAR struct misoc_net_driver_s *)dev->d_private; + FAR struct misoc_net_driver_s *priv = + (FAR struct misoc_net_driver_s *)dev->d_private; /* If the polling resulted in data that should be sent out on the network, * the field d_len is set to a value > 0. @@ -724,12 +721,14 @@ static void misoc_net_txtimeout_expiry(int argc, wdparm_t arg, ...) { FAR struct misoc_net_driver_s *priv = (FAR struct misoc_net_driver_s *)arg; +#if 0 /* REVISIT */ /* Disable further Ethernet interrupts. This will prevent some race * conditions with interrupt work. There is still a potential race * condition with interrupt work that is already queued and in progress. */ - //up_disable_irq(ETHMAC_INTERRUPT); + up_disable_irq(ETHMAC_INTERRUPT); +#endif /* Schedule to perform the TX timeout processing on the worker thread. */ @@ -770,7 +769,7 @@ static void misoc_net_poll_work(FAR void *arg) * progress, we will missing TCP time state updates? */ - (void)devif_timer(&priv->misoc_net_dev, misoc_net_txpoll); + (void)devif_timer(&priv->misoc_net_dev, MISOC_NET_WDDELAY, misoc_net_txpoll); /* Setup the watchdog poll timer again */ @@ -827,7 +826,8 @@ static void misoc_net_poll_expiry(int argc, wdparm_t arg, ...) static int misoc_net_ifup(FAR struct net_driver_s *dev) { irqstate_t flags; - FAR struct misoc_net_driver_s *priv = (FAR struct misoc_net_driver_s *)dev->d_private; + FAR struct misoc_net_driver_s *priv = + (FAR struct misoc_net_driver_s *)dev->d_private; #ifdef CONFIG_NET_IPv4 ninfo("Bringing up: %d.%d.%d.%d\n", @@ -855,8 +855,8 @@ static int misoc_net_ifup(FAR struct net_driver_s *dev) /* Set and activate a timer process */ - (void)wd_start(priv->misoc_net_txpoll, MISOC_NET_WDDELAY, misoc_net_poll_expiry, 1, - (wdparm_t)priv); + (void)wd_start(priv->misoc_net_txpoll, MISOC_NET_WDDELAY, + misoc_net_poll_expiry, 1, (wdparm_t)priv); priv->misoc_net_bifup = true; up_enable_irq(ETHMAC_INTERRUPT); @@ -886,7 +886,8 @@ static int misoc_net_ifup(FAR struct net_driver_s *dev) static int misoc_net_ifdown(FAR struct net_driver_s *dev) { - FAR struct misoc_net_driver_s *priv = (FAR struct misoc_net_driver_s *)dev->d_private; + FAR struct misoc_net_driver_s *priv = + (FAR struct misoc_net_driver_s *)dev->d_private; irqstate_t flags; /* Disable the Ethernet interrupt */ @@ -933,7 +934,8 @@ static int misoc_net_ifdown(FAR struct net_driver_s *dev) static void misoc_net_txavail_work(FAR void *arg) { - FAR struct misoc_net_driver_s *priv = (FAR struct misoc_net_driver_s *)arg; + FAR struct misoc_net_driver_s *priv = + (FAR struct misoc_net_driver_s *)arg; /* Ignore the notification if the interface is not yet up */ @@ -974,7 +976,8 @@ static void misoc_net_txavail_work(FAR void *arg) static int misoc_net_txavail(FAR struct net_driver_s *dev) { - FAR struct misoc_net_driver_s *priv = (FAR struct misoc_net_driver_s *)dev->d_private; + FAR struct misoc_net_driver_s *priv = + (FAR struct misoc_net_driver_s *)dev->d_private; /* Is our single work structure available? It may not be if there are * pending interrupt actions and we will have to ignore the Tx @@ -1012,7 +1015,8 @@ static int misoc_net_txavail(FAR struct net_driver_s *dev) #if defined(CONFIG_NET_MCASTGROUP) || defined(CONFIG_NET_ICMPv6) static int misoc_net_addmac(FAR struct net_driver_s *dev, FAR const uint8_t *mac) { - FAR struct misoc_net_driver_s *priv = (FAR struct misoc_net_driver_s *)dev->d_private; + FAR struct misoc_net_driver_s *priv = + (FAR struct misoc_net_driver_s *)dev->d_private; /* Add the MAC address to the hardware multicast routing table */ @@ -1041,7 +1045,8 @@ static int misoc_net_addmac(FAR struct net_driver_s *dev, FAR const uint8_t *mac #ifdef CONFIG_NET_MCASTGROUP static int misoc_net_rmmac(FAR struct net_driver_s *dev, FAR const uint8_t *mac) { - FAR struct misoc_net_driver_s *priv = (FAR struct misoc_net_driver_s *)dev->d_private; + FAR struct misoc_net_driver_s *priv = + (FAR struct misoc_net_driver_s *)dev->d_private; /* Add the MAC address to the hardware multicast routing table */ @@ -1175,8 +1180,8 @@ int misoc_net_initialize(int intf) priv->rx1_buf = (uint8_t *)ETHMAC_RX1_BASE; priv->tx0_buf = (uint8_t *)ETHMAC_TX0_BASE; priv->tx1_buf = (uint8_t *)ETHMAC_TX1_BASE; - priv->tx_buf = priv->tx0_buf; - priv->tx_slot=0; + priv->tx_buf = priv->tx0_buf; + priv->tx_slot = 0; priv->misoc_net_dev.d_buf = g_pktbuf; /* Single packet buffer */ priv->misoc_net_dev.d_ifup = misoc_net_ifup; /* I/F up (new IP address) callback */ diff --git a/arch/renesas/src/rx65n/rx65n_eth.c b/arch/renesas/src/rx65n/rx65n_eth.c index 6ccec8acfd9..de3adc48fc7 100644 --- a/arch/renesas/src/rx65n/rx65n_eth.c +++ b/arch/renesas/src/rx65n/rx65n_eth.c @@ -169,6 +169,7 @@ * be used, however, if time stamping and/or IPv4 checksum offload is * supported. */ + #undef CONFIG_RX65N_ETH_ENHANCEDDESC #undef CONFIG_RX65N_ETH_HWCHECKSUM @@ -257,7 +258,7 @@ * interrupt. */ -#define ETHER_CFG_AL1_INT_PRIORTY (15) +#define ETHER_CFG_AL1_INT_PRIORTY (15) /* Use LINKSTA signal for detect link status changes * 0 = unused (use PHY-LSI status register) @@ -380,6 +381,10 @@ #define TFS1_CD (0x00000002) #define TFS0_TRO (0x00000001) +/* DMA descriptor buffer alignment to 32 bytes */ + +#define NX_ALIGN32 __attribute__((aligned(32))) + /**************************************************************************** * Public Types ****************************************************************************/ @@ -401,12 +406,12 @@ struct eth_txdesc_s struct eth_rxdesc_s { volatile uint32_t rdes0; /* Indicates receive frame status */ - - /* Indicates receive buffer length when reception is completed, - * the receive frame length is return back + + /* Indicates receive buffer length when reception is completed, + * the receive frame length is return back */ - - volatile uint32_t rdes1; + + volatile uint32_t rdes1; volatile uint32_t rdes2; /* Indicates the start address of the receive buffer */ volatile uint32_t rdes3; /* next descriptor address pointer */ }; @@ -457,7 +462,7 @@ struct rx65n_ethmac_s /**************************************************************************** * Private Data ****************************************************************************/ -#define NX_ALIGN32 __attribute__((aligned(32))) /* DMA descriptor buffer alignment to 32 bytes */ + NX_ALIGN32 static struct rx65n_ethmac_s g_rx65nethmac[RX65N_NETHERNET]; /**************************************************************************** @@ -1090,6 +1095,7 @@ static int rx65n_transmit(FAR struct rx65n_ethmac_s *priv) * interrupt handling logic. * ****************************************************************************/ + static int rx65n_txpoll(struct net_driver_s *dev) { FAR struct rx65n_ethmac_s *priv = (FAR struct rx65n_ethmac_s *)dev-> @@ -1201,6 +1207,7 @@ static int rx65n_txpoll(struct net_driver_s *dev) * Global interrupts are disabled by interrupt handling logic. * ****************************************************************************/ + static void rx65n_dopoll(FAR struct rx65n_ethmac_s *priv) { FAR struct net_driver_s *dev = &priv->dev; @@ -1257,6 +1264,7 @@ static void rx65n_dopoll(FAR struct rx65n_ethmac_s *priv) * Returned Value: * None ****************************************************************************/ + static void rx65n_enableint(FAR struct rx65n_ethmac_s *priv, uint32_t ierbit) { uint32_t regval; @@ -1325,16 +1333,17 @@ static void rx65n_freesegment(FAR struct rx65n_ethmac_s *priv, rxdesc = rxfirst; for (i = 0; i < segments; i++) { - /* Check last descriptor */ + /* Check last descriptor */ + + if (rxdesc->rdes0 & RDLE) + { + rxdesc->rdes0 |= RACT; + } + else + { + rxdesc->rdes0 = RACT; + } - if (rxdesc->rdes0 & RDLE) - { - rxdesc->rdes0 |= RACT; - } - else - { - rxdesc->rdes0 = RACT; - } rxdesc = (struct eth_rxdesc_s *)rxdesc->rdes3; } @@ -1457,7 +1466,8 @@ static int rx65n_recvframe(FAR struct rx65n_ethmac_s *priv) /* Get the Frame Length of the received packet: substruct 4 * bytes of the CRC */ - dev->d_len = ((rxdesc->rdes1 & 0x0000ffff)); + + dev->d_len = ((rxdesc->rdes1 & 0x0000ffff)); /* Get a buffer from the free list. We don't even check if * this is successful because we already assure the free @@ -1841,6 +1851,7 @@ static void rx65n_freeframe(FAR struct rx65n_ethmac_s *priv) * Global interrupts are disabled by the watchdog logic. * ****************************************************************************/ + static void rx65n_txdone(FAR struct rx65n_ethmac_s *priv) { DEBUGASSERT(priv->txtail != NULL); @@ -1883,6 +1894,7 @@ static void rx65n_txdone(FAR struct rx65n_ethmac_s *priv) * Ethernet interrupts are disabled * ****************************************************************************/ + static void rx65n_interrupt_work(FAR void *arg) { FAR struct rx65n_ethmac_s *priv = (FAR struct rx65n_ethmac_s *)arg; @@ -2176,7 +2188,7 @@ static void rx65n_poll_work(FAR void *arg) /* Update TCP timing states and poll the network for new XMIT data. */ - (void)devif_timer(dev, rx65n_txpoll); + (void)devif_timer(dev, CLK_TCK, rx65n_txpoll); /* We will, most likely end up with a buffer to be freed. But it * might not be the same one that we allocated above. @@ -2469,6 +2481,7 @@ static uint32_t rx65n_calcethcrc(const uint8_t *data, size_t length) * Assumptions: * ****************************************************************************/ + #if defined(CONFIG_NET_MCASTGROUP) || defined(CONFIG_NET_ICMPv6) /* Currently Not supported, Need to update this code when support added */ @@ -2758,6 +2771,7 @@ static int rx65n_ioctl(struct net_driver_s *dev, int cmd, unsigned long arg) ret = -ENOTTY; break; } + return ret; } #endif /* CONFIG_NETDEV_IOCTL */ @@ -3807,8 +3821,10 @@ static int rx65n_phyinit(FAR struct rx65n_ethmac_s *priv) } #endif #endif - error_with_reset_timeout: - error_with_auto_neg_timeout: + +error_with_reset_timeout: +error_with_auto_neg_timeout: + return ret; } diff --git a/arch/sim/src/sim/up_netdriver.c b/arch/sim/src/sim/up_netdriver.c index aaa96312279..263e458e203 100644 --- a/arch/sim/src/sim/up_netdriver.c +++ b/arch/sim/src/sim/up_netdriver.c @@ -263,7 +263,7 @@ void netdriver_loop(void) */ if (g_sim_dev.d_len > 0) - { + { /* Update the Ethernet header with the correct MAC address */ #ifdef CONFIG_NET_IPv4 @@ -306,10 +306,10 @@ void netdriver_loop(void) } else #endif - { - NETDEV_RXDROPPED(&g_sim_dev); - nwarn("WARNING: Unsupported Ethernet type %u\n", eth->type); - } + { + NETDEV_RXDROPPED(&g_sim_dev); + nwarn("WARNING: Unsupported Ethernet type %u\n", eth->type); + } } else { @@ -322,7 +322,7 @@ void netdriver_loop(void) else if (timer_expired(&g_periodic_timer)) { timer_reset(&g_periodic_timer); - devif_timer(&g_sim_dev, sim_txpoll); + devif_timer(&g_sim_dev, MSEC2TICK(g_periodic_timer.interval), sim_txpoll); } sched_unlock(); diff --git a/arch/z80/src/ez80/ez80_emac.c b/arch/z80/src/ez80/ez80_emac.c index da40aa55de0..8bb32ab5d52 100644 --- a/arch/z80/src/ez80/ez80_emac.c +++ b/arch/z80/src/ez80/ez80_emac.c @@ -222,7 +222,8 @@ * this bit is cleared by software. */ -#define EMAC_ISTAT_SYSEVENTS (EMAC_ISTAT_TXFSMERR|EMAC_ISTAT_MGTDONE|EMAC_ISTAT_RXOVR) +#define EMAC_ISTAT_SYSEVENTS \ + (EMAC_ISTAT_TXFSMERR | EMAC_ISTAT_MGTDONE | EMAC_ISTAT_RXOVR) /* EMAC Tx interrupts: * @@ -232,7 +233,7 @@ * Denotes when control frame transmission is complete. */ -#define EMAC_ISTAT_TXEVENTS (EMAC_ISTAT_TXDONE|EMAC_ISTAT_TXCF) +#define EMAC_ISTAT_TXEVENTS (EMAC_ISTAT_TXDONE | EMAC_ISTAT_TXCF) /* EMAC Rx interrupts: * @@ -244,8 +245,10 @@ * Denotes when control frame reception is complete. */ -#define EMAC_ISTAT_RXEVENTS (EMAC_ISTAT_RXDONE|EMAC_ISTAT_RXPCF|EMAC_ISTAT_RXCF) -#define EMAC_EIN_HANDLED (EMAC_ISTAT_RXEVENTS|EMAC_ISTAT_TXEVENTS|EMAC_ISTAT_SYSEVENTS) +#define EMAC_ISTAT_RXEVENTS \ + (EMAC_ISTAT_RXDONE | EMAC_ISTAT_RXPCF | EMAC_ISTAT_RXCF) +#define EMAC_EIN_HANDLED \ + (EMAC_ISTAT_RXEVENTS | EMAC_ISTAT_TXEVENTS | EMAC_ISTAT_SYSEVENTS) /* TX poll deley = 1 seconds. CLK_TCK is the number of clock ticks per second */ @@ -307,12 +310,13 @@ struct ez80emac_driver_s * Tx/Rx memory). * txhead: Points to the oldest Tx descriptor queued for output (but for * which output has not yet completed. Initialized to NULL; set - * by ez80emac_transmit() when Tx is started and by ez80emac_txinterrupt() - * when Tx processing completes. txhead == NULL is also a sure + * by ez80emac_transmit() when Tx is started and by + * ez80emac_txinterrupt() when Tx processing completes. txhead == + * NULL is also a sure * indication that there is no Tx in progress. - * txnext: Points to the next free Tx descriptor. Initialized to txstart; set - * when ez80emac_transmit() adds the descriptor; reset to txstart when the - * last Tx packet is sent. + * txnext: Points to the next free Tx descriptor. Initialized to txstart; + * set when ez80emac_transmit() adds the descriptor; reset to + * txstart when the last Tx packet is sent. */ FAR struct ez80emac_desc_s *txstart; @@ -475,7 +479,8 @@ static void ez80emac_waitmiibusy(void) * ****************************************************************************/ -static void ez80emac_miiwrite(FAR struct ez80emac_driver_s *priv, uint8_t offset, uint16_t value) +static void ez80emac_miiwrite(FAR struct ez80emac_driver_s *priv, + uint8_t offset, uint16_t value) { uint8_t regval; @@ -495,7 +500,7 @@ static void ez80emac_miiwrite(FAR struct ez80emac_driver_s *priv, uint8_t offset /* Send control data to PHY */ - regval = inp(EZ80_EMAC_MIIMGT); + regval = inp(EZ80_EMAC_MIIMGT); regval |= EMAC_MIIMGMT_LCTLD; outp(EZ80_EMAC_MIIMGT, regval); } @@ -530,7 +535,7 @@ static uint16_t ez80emac_miiread(FAR struct ez80emac_driver_s *priv, uint32_t of /* Read status from PHY */ - regval = inp(EZ80_EMAC_MIIMGT); + regval = inp(EZ80_EMAC_MIIMGT); regval |= EMAC_MIIMGMT_RSTAT; outp(EZ80_EMAC_MIIMGT, regval); @@ -572,7 +577,7 @@ static bool ez80emac_miipoll(FAR struct ez80emac_driver_s *priv, uint32_t offset { if ((value & bits) == 0) { - return true; + return true; } } else @@ -583,6 +588,7 @@ static bool ez80emac_miipoll(FAR struct ez80emac_driver_s *priv, uint32_t offset } } } + return false; } @@ -618,7 +624,8 @@ static int ez80emac_miiconfigure(FAR struct ez80emac_driver_s *priv) phyval = ez80emac_miiread(priv, MII_PHYID1); if (phyval != MII_PHYID1_AM79C874) { - nerr("ERROR: Not an Am79c874 PHY: PHY1=%04x vs %04x\n", phyval, MII_PHYID1_AM79C874); + nerr("ERROR: Not an Am79c874 PHY: PHY1=%04x vs %04x\n", + phyval, MII_PHYID1_AM79C874); ret = -ENODEV; goto dumpregs; } @@ -626,7 +633,8 @@ static int ez80emac_miiconfigure(FAR struct ez80emac_driver_s *priv) phyval = ez80emac_miiread(priv, MII_PHYID2); if (phyval != MII_PHYID2_AM79C874) { - nerr("ERROR: Not an Am79c874 PHY: PHY2=%04x vs %04x\n", phyval, MII_PHYID2_AM79C874); + nerr("ERROR: Not an Am79c874 PHY: PHY2=%04x vs %04x\n", + phyval, MII_PHYID2_AM79C874); ret = -ENODEV; goto dumpregs; } @@ -651,19 +659,18 @@ static int ez80emac_miiconfigure(FAR struct ez80emac_driver_s *priv) * CRCEN - Append CRC to every frame regardless of padding options. */ - outp(EZ80_EMAC_CFG1, EMAC_CFG1_PADEN|EMAC_CFG1_CRCEN); + outp(EZ80_EMAC_CFG1, EMAC_CFG1_PADEN | EMAC_CFG1_CRCEN); } +#if CONFIG_EZ80_PHYCONFIG == EZ80_EMAC_AUTONEG /* Set the configured link capabilities */ -#if CONFIG_EZ80_PHYCONFIG == EZ80_EMAC_AUTONEG - - ninfo("Configure autonegotiation\n"); - if (bauto) + ninfo("Configure autonegotiation\n"); + if (bauto) { ez80emac_miiwrite(priv, MII_ADVERTISE, - MII_ADVERTISE_100BASETXFULL|MII_ADVERTISE_100BASETXHALF| - MII_ADVERTISE_10BASETXFULL|MII_ADVERTISE_10BASETXHALF| + MII_ADVERTISE_100BASETXFULL | MII_ADVERTISE_100BASETXHALF | + MII_ADVERTISE_10BASETXFULL | MII_ADVERTISE_10BASETXHALF | MII_ADVERTISE_CSMA); } else @@ -676,8 +683,8 @@ static int ez80emac_miiconfigure(FAR struct ez80emac_driver_s *priv) ninfo("100BASETX full duplex\n"); phyval |= MII_MCR_SPEED100 | MII_MCR_FULLDPLX; ez80emac_miiwrite(priv, MII_ADVERTISE, - MII_ADVERTISE_100BASETXFULL|MII_ADVERTISE_100BASETXHALF| - MII_ADVERTISE_10BASETXFULL|MII_ADVERTISE_10BASETXHALF| + MII_ADVERTISE_100BASETXFULL | MII_ADVERTISE_100BASETXHALF | + MII_ADVERTISE_10BASETXFULL | MII_ADVERTISE_10BASETXHALF | MII_ADVERTISE_CSMA); #elif CONFIG_EZ80_PHYCONFIG == EZ80_EMAC_100BHD @@ -685,21 +692,22 @@ static int ez80emac_miiconfigure(FAR struct ez80emac_driver_s *priv) ninfo("100BASETX half duplex\n"); phyval |= MII_MCR_SPEED100; ez80emac_miiwrite(priv, MII_ADVERTISE, - MII_ADVERTISE_100BASETXHALF|MII_ADVERTISE_10BASETXFULL| - MII_ADVERTISE_10BASETXHALF|MII_ADVERTISE_CSMA); + MII_ADVERTISE_100BASETXHALF | MII_ADVERTISE_10BASETXFULL | + MII_ADVERTISE_10BASETXHALF | MII_ADVERTISE_CSMA); #elif CONFIG_EZ80_PHYCONFIG == EZ80_EMAC_10BFD ninfo("10BASETX full duplex\n"); phyval |= MII_MCR_FULLDPLX; ez80emac_miiwrite(priv, MII_ADVERTISE, - MII_ADVERTISE_10BASETXFULL|MII_ADVERTISE_10BASETXHALF|MII_ADVERTISE_CSMA); + MII_ADVERTISE_10BASETXFULL | MII_ADVERTISE_10BASETXHALF | + MII_ADVERTISE_CSMA); #elif CONFIG_EZ80_PHYCONFIG == EZ80_EMAC_10BHD ninfo("10BASETX half duplex\n"); ez80emac_miiwrite(priv, MII_ADVERTISE, - MII_ADVERTISE_10BASETXHALF|MII_ADVERTISE_CSMA); + MII_ADVERTISE_10BASETXHALF | MII_ADVERTISE_CSMA); #else # error "No recognized value of CONFIG_EZ80_PHYCONFIG" @@ -716,6 +724,7 @@ static int ez80emac_miiconfigure(FAR struct ez80emac_driver_s *priv) { break; } + up_mdelay(10); } @@ -731,11 +740,12 @@ static int ez80emac_miiconfigure(FAR struct ez80emac_driver_s *priv) phyval = ez80emac_miiread(priv, MII_AM79C874_DIAGNOSTIC); if (phyval & AM79C874_DIAG_FULLDPLX) { - outp(EZ80_EMAC_CFG1, EMAC_CFG1_PADEN|EMAC_CFG1_CRCEN|EMAC_CFG1_FULLHD); + outp(EZ80_EMAC_CFG1, EMAC_CFG1_PADEN | EMAC_CFG1_CRCEN | + EMAC_CFG1_FULLHD); } else { - outp(EZ80_EMAC_CFG1, EMAC_CFG1_PADEN|EMAC_CFG1_CRCEN); + outp(EZ80_EMAC_CFG1, EMAC_CFG1_PADEN | EMAC_CFG1_CRCEN); } } @@ -765,7 +775,8 @@ static int ez80emac_miiconfigure(FAR struct ez80emac_driver_s *priv) ez80emac_miiwrite(priv, MII_MCR, 0); ez80emac_miiwrite(priv, MII_MCR, - MII_MCR_ANENABLE | MII_MCR_ANRESTART | MII_MCR_FULLDPLX | MII_MCR_SPEED100); + MII_MCR_ANENABLE | MII_MCR_ANRESTART | MII_MCR_FULLDPLX | + MII_MCR_SPEED100); /* Wait for auto-negotiation to start */ @@ -867,6 +878,7 @@ static int ez80emac_miiconfigure(FAR struct ez80emac_driver_s *priv) { mcr &= ~MII_MCR_FULLDPLX; } + if (priv->b100mbs) { mcr |= MII_MCR_SPEED100; @@ -875,6 +887,7 @@ static int ez80emac_miiconfigure(FAR struct ez80emac_driver_s *priv) { mcr &= ~MII_MCR_SPEED100; } + mcr |= MII_MCR_ANENABLE; ez80emac_miiwrite(priv, MII_MCR, mcr); @@ -1023,14 +1036,14 @@ static int ez80emac_transmit(struct ez80emac_driver_s *priv) txdesc = priv->txnext; len = EMAC_PKTBUF_ALIGN(priv->dev.d_len + SIZEOF_EMACSDESC); - txnext = (FAR struct ez80emac_desc_s *)((uint8_t*)txdesc + len); + txnext = (FAR struct ez80emac_desc_s *)((uint8_t *)txdesc + len); /* Handle wraparound to the beginning of the TX region */ - if ((uint8_t*)txnext + SIZEOF_EMACSDESC >= (uint8_t*)priv->rxstart) + if ((uint8_t *)txnext + SIZEOF_EMACSDESC >= (uint8_t *)priv->rxstart) { txnext = (FAR struct ez80emac_desc_s *) - ((uint8_t*)priv->txstart + ((uint8_t*)txnext - (uint8_t*)priv->rxstart)); + ((uint8_t *)priv->txstart + ((uint8_t *)txnext - (uint8_t *)priv->rxstart)); } priv->txnext = txnext; @@ -1041,8 +1054,8 @@ static int ez80emac_transmit(struct ez80emac_driver_s *priv) /* Copy the data to the next packet in the Tx buffer (handling wraparound) */ psrc = priv->dev.d_buf; - pdest = (uint8_t*)txdesc + SIZEOF_EMACSDESC; - len = (uint8_t*)priv->rxstart - pdest; + pdest = (uint8_t *)txdesc + SIZEOF_EMACSDESC; + len = (uint8_t *)priv->rxstart - pdest; if (len >= priv->dev.d_len) { /* The entire packet will fit into the EMAC SRAM without wrapping */ @@ -1182,7 +1195,8 @@ static int ez80emac_txpoll(struct net_driver_s *dev) static inline FAR struct ez80emac_desc_s *ez80emac_rwp(void) { return (FAR struct ez80emac_desc_s *) - (CONFIG_EZ80_RAMADDR + ((uint24_t)inp(EZ80_EMAC_RWP_H) << 8) + (uint24_t)inp(EZ80_EMAC_RWP_L)); + (CONFIG_EZ80_RAMADDR + + ((uint24_t)inp(EZ80_EMAC_RWP_H) << 8) + (uint24_t)inp(EZ80_EMAC_RWP_L)); } /**************************************************************************** @@ -1202,7 +1216,8 @@ static inline FAR struct ez80emac_desc_s *ez80emac_rwp(void) static inline FAR struct ez80emac_desc_s *ez80emac_rrp(void) { return (FAR struct ez80emac_desc_s *) - (CONFIG_EZ80_RAMADDR + ((uint24_t)inp(EZ80_EMAC_RRP_H) << 8) + (uint24_t)inp(EZ80_EMAC_RRP_L)); + (CONFIG_EZ80_RAMADDR + + ((uint24_t)inp(EZ80_EMAC_RRP_H) << 8) + (uint24_t)inp(EZ80_EMAC_RRP_L)); } /**************************************************************************** @@ -1278,7 +1293,8 @@ static int ez80emac_receive(struct ez80emac_driver_s *priv) if (rxdesc->pktsize > CONFIG_NET_ETH_PKTSIZE) { - ninfo("Truncated oversize RX pkt: %d->%d\n", rxdesc->pktsize, CONFIG_NET_ETH_PKTSIZE); + ninfo("Truncated oversize RX pkt: %d->%d\n", + rxdesc->pktsize, CONFIG_NET_ETH_PKTSIZE); pktlen = CONFIG_NET_ETH_PKTSIZE; } else @@ -1288,14 +1304,14 @@ static int ez80emac_receive(struct ez80emac_driver_s *priv) /* Copy the data data from the hardware to priv->dev.d_buf */ - psrc = (FAR uint8_t*)priv->rxnext + SIZEOF_EMACSDESC; + psrc = (FAR uint8_t *)priv->rxnext + SIZEOF_EMACSDESC; pdest = priv->dev.d_buf; /* Check for wraparound */ - if ((FAR uint8_t*)(psrc + pktlen) > (FAR uint8_t*)priv->rxendp1) + if ((FAR uint8_t *)(psrc + pktlen) > (FAR uint8_t *)priv->rxendp1) { - int nbytes = (int)((FAR uint8_t*)priv->rxendp1 - (FAR uint8_t*)psrc); + int nbytes = (int)((FAR uint8_t *)priv->rxendp1 - (FAR uint8_t *)psrc); ninfo("RX wraps after %d bytes\n", nbytes + SIZEOF_EMACSDESC); memcpy(pdest, psrc, nbytes); @@ -1401,7 +1417,7 @@ static int ez80emac_receive(struct ez80emac_driver_s *priv) */ if (priv->dev.d_len > 0) - { + { /* Update the Ethernet header with the correct MAC address */ #ifdef CONFIG_NET_IPv4 @@ -1450,6 +1466,7 @@ static int ez80emac_receive(struct ez80emac_driver_s *priv) npackets++; } + return npackets; } @@ -1549,7 +1566,7 @@ static void ez80emac_txinterrupt_work(FAR void *arg) #if 0 // Seems to reset RWP as well ??? priv->txnext = priv->txstart; - regval = inp(EZ80_EMAC_RST); + regval = inp(EZ80_EMAC_RST); regval |= EMAC_RST_HRTFN; outp(EZ80_EMAC_RST, regval); regval &= ~EMAC_RST_HRTFN; @@ -1771,8 +1788,10 @@ static void ez80emac_sysinterrupt_work(FAR void *arg) if ((istat & EMAC_ISTAT_RXOVR) != 0) { - nwarn("WARNING: Rx OVR rxnext=%p {%06x, %u, %04x} rrp=%02x%02x rwp=%02x%02x blkslft=%02x istat=%02x\n", - priv->rxnext, priv->rxnext->np, priv->rxnext->pktsize, priv->rxnext->stat, + nwarn("WARNING: Rx OVR rxnext=%p {%06x, %u, %04x} " + "rrp=%02x%02x rwp=%02x%02x blkslft=%02x istat=%02x\n", + priv->rxnext, priv->rxnext->np, priv->rxnext->pktsize, + priv->rxnext->stat, inp(EZ80_EMAC_RRP_H), inp(EZ80_EMAC_RRP_L), inp(EZ80_EMAC_RWP_H), inp(EZ80_EMAC_RWP_L), inp(EZ80_EMAC_BLKSLFT_H), inp(EZ80_EMAC_BLKSLFT_L), @@ -1928,7 +1947,7 @@ static void ez80emac_poll_work(FAR void *arg) /* Poll the network for new XMIT data */ net_lock(); - (void)devif_timer(&priv->dev, ez80emac_txpoll); + (void)devif_timer(&priv->dev, EMAC_WDDELAY, ez80emac_txpoll); /* Setup the watchdog poll timer again */ @@ -2025,9 +2044,9 @@ static int ez80emac_ifup(FAR struct net_driver_s *dev) */ #ifdef CONFIG_EZ80_MCFILTER - outp(EZ80_EMAC_AFR, EMAC_AFR_BC|EMAC_AFR_QMC|EMAC_AFR_MC); + outp(EZ80_EMAC_AFR, EMAC_AFR_BC | EMAC_AFR_QMC | EMAC_AFR_MC); #else - outp(EZ80_EMAC_AFR, EMAC_AFR_BC|EMAC_AFR_MC); + outp(EZ80_EMAC_AFR, EMAC_AFR_BC | EMAC_AFR_MC); #endif /* Set the MAC address */ @@ -2073,6 +2092,7 @@ static int ez80emac_ifup(FAR struct net_driver_s *dev) up_enable_irq(EZ80_EMACSYS_IRQ); ret = OK; } + return ret; } @@ -2220,9 +2240,11 @@ static int ez80emac_txavail(FAR struct net_driver_s *dev) #ifdef CONFIG_NET_MCASTGROUP static int ez80emac_addmac(struct net_driver_s *dev, FAR const uint8_t *mac) { - FAR struct ez80emac_driver_s *priv = (FAR struct ez80emac_driver_s *)dev->d_private; + FAR struct ez80emac_driver_s *priv = + (FAR struct ez80emac_driver_s *)dev->d_private; /* Add the MAC address to the hardware multicast routing table */ + /* MISSING LOGIC!!! */ return OK; @@ -2250,9 +2272,11 @@ static int ez80emac_addmac(struct net_driver_s *dev, FAR const uint8_t *mac) #ifdef CONFIG_NET_MCASTGROUP static int ez80emac_rmmac(struct net_driver_s *dev, FAR const uint8_t *mac) { - FAR struct ez80emac_driver_s *priv = (FAR struct ez80emac_driver_s *)dev->d_private; + FAR struct ez80emac_driver_s *priv = + (FAR struct ez80emac_driver_s *)dev->d_private; /* Add the MAC address to the hardware multicast routing table */ + /* MISSING LOGIC!!! */ return OK; @@ -2292,7 +2316,7 @@ static int ez80_emacinitialize(void) * Configure the GP and EMAC SRAM */ - outp(EZ80_RAM_CTL, (RAMCTL_ERAMEN|RAMCTL_GPRAMEN)); + outp(EZ80_RAM_CTL, (RAMCTL_ERAMEN | RAMCTL_GPRAMEN)); outp(EZ80_RAM_ADDR_U, (CONFIG_EZ80_RAMADDR >> 16)); outp(EZ80_EMAC_BP_U, (CONFIG_EZ80_RAMADDR >> 16)); @@ -2418,14 +2442,15 @@ static int ez80_emacinitialize(void) * EMAC_CFG4_RXFC - Act on received pause control frames */ - outp(EZ80_EMAC_CFG4, EMAC_CFG4_TXFC|EMAC_CFG4_RXFC); + outp(EZ80_EMAC_CFG4, EMAC_CFG4_TXFC | EMAC_CFG4_RXFC); /* EMAC_CFG1_CRCEN + EMAC_CFG1_PADEN + EMAC_CFG1_VLPAD + EMAC_CFG1_ADPADN = * if VLAN not detected, pad to 60, add CRC * if VLAN detected, pad to 64, add CRC */ - outp(EZ80_EMAC_CFG1, EMAC_CFG1_CRCEN|EMAC_CFG1_PADEN|EMAC_CFG1_ADPADN|EMAC_CFG1_VLPAD); + outp(EZ80_EMAC_CFG1, EMAC_CFG1_CRCEN | EMAC_CFG1_PADEN | EMAC_CFG1_ADPADN | + EMAC_CFG1_VLPAD); outp(EZ80_EMAC_IPGT, EMAC_IPGT); outp(EZ80_EMAC_IPGR1, EMAC_IPGR1); @@ -2531,20 +2556,20 @@ int up_netinitialize(void) /* Initialize the driver structure */ memset(&g_emac, 0, sizeof(struct ez80emac_driver_s)); - priv->dev.d_buf = g_pktbuf; /* Single packet buffer */ - priv->dev.d_ifup = ez80emac_ifup; /* I/F down callback */ - priv->dev.d_ifdown = ez80emac_ifdown; /* I/F up (new IP address) callback */ - priv->dev.d_txavail = ez80emac_txavail; /* New TX data callback */ + priv->dev.d_buf = g_pktbuf; /* Single packet buffer */ + priv->dev.d_ifup = ez80emac_ifup; /* I/F down callback */ + priv->dev.d_ifdown = ez80emac_ifdown; /* I/F up (new IP address) callback */ + priv->dev.d_txavail = ez80emac_txavail; /* New TX data callback */ #ifdef CONFIG_NET_MCASTGROUP - priv->dev.d_addmac = ez80emac_addmac; /* Add multicast MAC address */ - priv->dev.d_rmmac = ez80emac_rmmac; /* Remove multicast MAC address */ + priv->dev.d_addmac = ez80emac_addmac; /* Add multicast MAC address */ + priv->dev.d_rmmac = ez80emac_rmmac; /* Remove multicast MAC address */ #endif - priv->dev.d_private = (FAR void*)&g_emac; /* Used to recover private state from dev */ + priv->dev.d_private = (FAR void *)&g_emac; /* Used to recover private state from dev */ /* Create a watchdog for timing polling for and timing of transmissions */ - priv->txpoll = wd_create(); /* Create periodic poll timer */ - priv->txtimeout = wd_create(); /* Create TX timeout timer */ + priv->txpoll = wd_create(); /* Create periodic poll timer */ + priv->txtimeout = wd_create(); /* Create TX timeout timer */ /* Read the MAC address from the hardware into priv->dev.d_mac.ether.ether_addr_octet */ @@ -2608,6 +2633,7 @@ int up_multicastfilter(FAR struct net_driver_s *dev, FAR uint8_t *mac, bool enab { regval &= ~(1 << bit); } + outp(EZ80_EMAC_HTBL_0 + ndx, regval); return OK; } @@ -2635,7 +2661,9 @@ void up_netuninitialize(void) int i; ez80emac_ifdown(&priv->dev); - /* netdev_unregister(priv->dev); No such API yet */ +#if 0 + netdev_unregister(priv->dev); /* No such interface yet */ +#endif priv->txnext = priv->txstart; priv->txhead = NULL; diff --git a/drivers/net/dm90x0.c b/drivers/net/dm90x0.c index f5598617052..fed10442e95 100644 --- a/drivers/net/dm90x0.c +++ b/drivers/net/dm90x0.c @@ -1416,7 +1416,7 @@ static void dm9x_poll_work(FAR void *arg) { /* If so, update TCP timing states and poll the network for new XMIT data */ - (void)devif_timer(&priv->dm_dev, dm9x_txpoll); + (void)devif_timer(&priv->dm_dev, DM9X_WDDELAY, dm9x_txpoll); } /* Setup the watchdog poll timer again */ diff --git a/drivers/net/enc28j60.c b/drivers/net/enc28j60.c index 299febe90f1..857e893f74c 100644 --- a/drivers/net/enc28j60.c +++ b/drivers/net/enc28j60.c @@ -2005,7 +2005,7 @@ static void enc_pollworker(FAR void *arg) * is a transmit in progress, we will missing TCP time state updates? */ - (void)devif_timer(&priv->dev, enc_txpoll); + (void)devif_timer(&priv->dev, ENC_WDDELAY, enc_txpoll); } /* Release lock on the SPI bus and the network */ diff --git a/drivers/net/encx24j600.c b/drivers/net/encx24j600.c index e1d5f6a04be..6f69f72c3cb 100644 --- a/drivers/net/encx24j600.c +++ b/drivers/net/encx24j600.c @@ -2157,7 +2157,7 @@ static void enc_pollworker(FAR void *arg) * is a transmit in progress, we will missing TCP time state updates? */ - (void)devif_timer(&priv->dev, enc_txpoll); + (void)devif_timer(&priv->dev, ENC_WDDELAY, enc_txpoll); } /* Release lock on the SPI bus and the network */ diff --git a/drivers/net/ftmac100.c b/drivers/net/ftmac100.c index 45d230a3852..978b3ac633c 100644 --- a/drivers/net/ftmac100.c +++ b/drivers/net/ftmac100.c @@ -1130,7 +1130,7 @@ static void ftmac100_poll_work(FAR void *arg) * progress, we will missing TCP time state updates? */ - (void)devif_timer(&priv->ft_dev, ftmac100_txpoll); + (void)devif_timer(&priv->ft_dev, FTMAC100_WDDELAY, ftmac100_txpoll); /* Setup the watchdog poll timer again */ diff --git a/drivers/net/lan91c111.c b/drivers/net/lan91c111.c index d80bfe6e6c4..80ccd2fcc41 100644 --- a/drivers/net/lan91c111.c +++ b/drivers/net/lan91c111.c @@ -1027,7 +1027,7 @@ static void lan91c111_poll_work(FAR void *arg) * transmit in progress, we will missing TCP time state updates? */ - devif_timer(dev, lan91c111_txpoll); + devif_timer(dev, LAN91C111_WDDELAY, lan91c111_txpoll); } /* Setup the watchdog poll timer again */ diff --git a/drivers/net/loopback.c b/drivers/net/loopback.c index 30c2183ceb7..c90f70c7c89 100644 --- a/drivers/net/loopback.c +++ b/drivers/net/loopback.c @@ -234,7 +234,7 @@ static void lo_poll_work(FAR void *arg) net_lock(); priv->lo_txdone = false; - (void)devif_timer(&priv->lo_dev, lo_txpoll); + (void)devif_timer(&priv->lo_dev, LO_WDDELAY, lo_txpoll); /* Was something received and looped back? */ diff --git a/drivers/net/rpmsgdrv.c b/drivers/net/rpmsgdrv.c index 4346b1c47f3..8bb3f38572c 100644 --- a/drivers/net/rpmsgdrv.c +++ b/drivers/net/rpmsgdrv.c @@ -847,7 +847,7 @@ static void net_rpmsg_drv_poll_work(FAR void *arg) * progress, we will missing TCP time state updates? */ - devif_timer(dev, net_rpmsg_drv_txpoll); + devif_timer(dev, NET_RPMSG_DRV_WDDELAY, net_rpmsg_drv_txpoll); } /* Setup the watchdog poll timer again */ diff --git a/drivers/net/skeleton.c b/drivers/net/skeleton.c index 33bf32b59ac..4933a5a745f 100644 --- a/drivers/net/skeleton.c +++ b/drivers/net/skeleton.c @@ -740,7 +740,7 @@ static void skel_poll_work(FAR void *arg) * progress, we will missing TCP time state updates? */ - (void)devif_timer(&priv->sk_dev, skel_txpoll); + (void)devif_timer(&priv->sk_dev, skeleton_WDDELAY, skel_txpoll); /* Setup the watchdog poll timer again */ diff --git a/drivers/net/slip.c b/drivers/net/slip.c index 1b85ff93db6..39fc1ca1bc6 100644 --- a/drivers/net/slip.c +++ b/drivers/net/slip.c @@ -494,7 +494,7 @@ static void slip_txtask(int argc, FAR char *argv[]) { /* Yes, perform the timer poll */ - (void)devif_timer(&priv->dev, slip_txpoll); + (void)devif_timer(&priv->dev, hsec * TICK_PER_HSEC, slip_txpoll); start_ticks += hsec * TICK_PER_HSEC; } else diff --git a/drivers/net/tun.c b/drivers/net/tun.c index 43b8e61bd9c..d3205a707ce 100644 --- a/drivers/net/tun.c +++ b/drivers/net/tun.c @@ -846,7 +846,7 @@ static void tun_poll_work(FAR void *arg) /* If so, poll the network for new XMIT data. */ priv->dev.d_buf = priv->read_buf; - (void)devif_timer(&priv->dev, tun_txpoll); + (void)devif_timer(&priv->dev, TUN_WDDELAY, tun_txpoll); } /* Setup the watchdog poll timer again */ diff --git a/drivers/usbdev/cdcecm.c b/drivers/usbdev/cdcecm.c index d769f5288fa..3ba11a89316 100644 --- a/drivers/usbdev/cdcecm.c +++ b/drivers/usbdev/cdcecm.c @@ -699,7 +699,7 @@ static void cdcecm_poll_work(FAR void *arg) * become available. */ - (void)devif_timer(&self->dev, cdcecm_txpoll); + (void)devif_timer(&self->dev, CDCECM_WDDELAY, cdcecm_txpoll); /* Setup the watchdog poll timer again */ @@ -1158,7 +1158,8 @@ static void cdcecm_wrcomplete(FAR struct usbdev_ep_s *ep, req->buf, req->flags, req->len, req->xfrd, req->result); /* The single USB device write request is available for upcoming - * transmissions again. */ + * transmissions again. + */ rc = nxsem_post(&self->wrreq_idle); @@ -1420,25 +1421,25 @@ static int cdcecm_mkstrdesc(uint8_t id, FAR struct usb_strdesc_s *strdesc) return -EINVAL; } - /* The string is utf16-le. The poor man's utf-8 to utf16-le - * conversion below will only handle 7-bit en-us ascii - */ + /* The string is utf16-le. The poor man's utf-8 to utf16-le + * conversion below will only handle 7-bit en-us ascii + */ - len = strlen(str); - if (len > (CDCECM_MAXSTRLEN / 2)) - { - len = (CDCECM_MAXSTRLEN / 2); - } + len = strlen(str); + if (len > (CDCECM_MAXSTRLEN / 2)) + { + len = (CDCECM_MAXSTRLEN / 2); + } - for (i = 0, ndata = 0; i < len; i++, ndata += 2) - { - strdesc->data[ndata] = str[i]; - strdesc->data[ndata + 1] = 0; - } + for (i = 0, ndata = 0; i < len; i++, ndata += 2) + { + strdesc->data[ndata] = str[i]; + strdesc->data[ndata + 1] = 0; + } - strdesc->len = ndata + 2; - strdesc->type = USB_DESC_TYPE_STRING; - return strdesc->len; + strdesc->len = ndata + 2; + strdesc->type = USB_DESC_TYPE_STRING; + return strdesc->len; } /**************************************************************************** @@ -1476,7 +1477,8 @@ static void cdcecm_mkepdesc(int epidx, { case CDCECM_EP_INTIN_IDX: /* Interrupt IN endpoint */ { - epdesc->addr = USB_DIR_IN | devinfo->epno[CDCECM_EP_INTIN_IDX]; + epdesc->addr = USB_DIR_IN | + devinfo->epno[CDCECM_EP_INTIN_IDX]; epdesc->attr = USB_EP_ATTR_XFER_INT; epdesc->mxpacketsize[0] = LSBYTE(intin_mxpktsz); epdesc->mxpacketsize[1] = MSBYTE(intin_mxpktsz); @@ -1486,7 +1488,8 @@ static void cdcecm_mkepdesc(int epidx, case CDCECM_EP_BULKIN_IDX: { - epdesc->addr = USB_DIR_IN | devinfo->epno[CDCECM_EP_BULKIN_IDX]; + epdesc->addr = USB_DIR_IN | + devinfo->epno[CDCECM_EP_BULKIN_IDX]; epdesc->attr = USB_EP_ATTR_XFER_BULK; epdesc->mxpacketsize[0] = LSBYTE(bulkin_mxpktsz); epdesc->mxpacketsize[1] = MSBYTE(bulkin_mxpktsz); @@ -1496,7 +1499,8 @@ static void cdcecm_mkepdesc(int epidx, case CDCECM_EP_BULKOUT_IDX: { - epdesc->addr = USB_DIR_OUT | devinfo->epno[CDCECM_EP_BULKOUT_IDX]; + epdesc->addr = USB_DIR_OUT | + devinfo->epno[CDCECM_EP_BULKOUT_IDX]; epdesc->attr = USB_EP_ATTR_XFER_BULK; epdesc->mxpacketsize[0] = LSBYTE(bulkout_mxpktsz); epdesc->mxpacketsize[1] = MSBYTE(bulkout_mxpktsz); @@ -1813,11 +1817,17 @@ static int cdcecm_bind(FAR struct usbdevclass_driver_s *driver, self->ctrlreq->callback = cdcecm_ep0incomplete; - self->epint = DEV_ALLOCEP(dev, USB_DIR_IN | self->devinfo.epno[CDCECM_EP_INTIN_IDX], + self->epint = DEV_ALLOCEP(dev, + USB_DIR_IN | + self->devinfo.epno[CDCECM_EP_INTIN_IDX], true, USB_EP_ATTR_XFER_INT); - self->epbulkin = DEV_ALLOCEP(dev, USB_DIR_IN | self->devinfo.epno[CDCECM_EP_BULKIN_IDX], + self->epbulkin = DEV_ALLOCEP(dev, + USB_DIR_IN | + self->devinfo.epno[CDCECM_EP_BULKIN_IDX], true, USB_EP_ATTR_XFER_BULK); - self->epbulkout = DEV_ALLOCEP(dev, USB_DIR_OUT | self->devinfo.epno[CDCECM_EP_BULKOUT_IDX], + self->epbulkout = DEV_ALLOCEP(dev, + USB_DIR_OUT | + self->devinfo.epno[CDCECM_EP_BULKOUT_IDX], false, USB_EP_ATTR_XFER_BULK); if (!self->epint || !self->epbulkin || !self->epbulkout) @@ -1899,7 +1909,7 @@ static void cdcecm_unbind(FAR struct usbdevclass_driver_s *driver, { usbtrace(TRACE_CLSERROR(USBSER_TRACEERR_INVALIDARG), 0); return; - } + } #endif /* Make sure that the endpoints have been unconfigured. If @@ -1992,7 +2002,8 @@ static int cdcecm_setup(FAR struct usbdevclass_driver_s *driver, uint8_t descindex = ctrl->value[0]; uint8_t desctype = ctrl->value[1]; - ret = cdcecm_getdescriptor(self, desctype, descindex, self->ctrlreq->buf); + ret = cdcecm_getdescriptor(self, desctype, descindex, + self->ctrlreq->buf); } break; @@ -2128,7 +2139,8 @@ static int cdcecm_classobject(int minor, FAR struct usbdev_devinfo_s *devinfo, cdcecm_ifdown(&self->dev); - /* Read the MAC address from the hardware into priv->dev.d_mac.ether.ether_addr_octet + /* Read the MAC address from the hardware into + * priv->dev.d_mac.ether.ether_addr_octet * Applies only if the Ethernet MAC has its own internal address. */ diff --git a/drivers/usbdev/rndis.c b/drivers/usbdev/rndis.c index a185f802d68..62b7237e160 100644 --- a/drivers/usbdev/rndis.c +++ b/drivers/usbdev/rndis.c @@ -292,7 +292,10 @@ const static struct rndis_cfgdesc_s g_rndis_cfgdesc = { .len = USB_SIZEOF_CFGDESC, .type = USB_DESC_TYPE_CONFIG, - .totallen = {0, 0}, + .totallen = + { + 0, 0 + }, .ninterfaces = RNDIS_NINTERFACES, .cfgvalue = RNDIS_CONFIGID, .icfg = 0, @@ -326,7 +329,10 @@ const static struct rndis_cfgdesc_s g_rndis_cfgdesc = .type = USB_DESC_TYPE_ENDPOINT, .addr = RNDIS_EPINTIN_ADDR, .attr = USB_EP_ATTR_XFER_INT, - .mxpacketsize = { LSBYTE(16), MSBYTE(16) }, + .mxpacketsize = + { + LSBYTE(16), MSBYTE(16) + }, .interval = 1 }, { @@ -346,10 +352,16 @@ const static struct rndis_cfgdesc_s g_rndis_cfgdesc = .addr = RNDIS_EPBULKIN_ADDR, .attr = USB_EP_ATTR_XFER_BULK, #ifdef CONFIG_USBDEV_DUALSPEED - .mxpacketsize = { LSBYTE(512), MSBYTE(512) }, + .mxpacketsize = + { + LSBYTE(512), MSBYTE(512) + }, .interval = 0 #else - .mxpacketsize = { LSBYTE(64), MSBYTE(64) }, + .mxpacketsize = + { + LSBYTE(64), MSBYTE(64) + }, .interval = 1 #endif }, @@ -359,10 +371,16 @@ const static struct rndis_cfgdesc_s g_rndis_cfgdesc = .addr = RNDIS_EPBULKOUT_ADDR, .attr = USB_EP_ATTR_XFER_BULK, #ifdef CONFIG_USBDEV_DUALSPEED - .mxpacketsize = { LSBYTE(512), MSBYTE(512) }, + .mxpacketsize = + { + LSBYTE(512), MSBYTE(512) + }, .interval = 0 #else - .mxpacketsize = { LSBYTE(64), MSBYTE(64) }, + .mxpacketsize = + { + LSBYTE(64), MSBYTE(64) + }, .interval = 1 #endif } @@ -414,7 +432,11 @@ static const uint32_t g_rndis_supported_oids[] = static const struct rndis_oid_value_s g_rndis_oid_values[] = { - {RNDIS_OID_GEN_SUPPORTED_LIST, sizeof(g_rndis_supported_oids), 0, g_rndis_supported_oids}, + { + RNDIS_OID_GEN_SUPPORTED_LIST, + sizeof(g_rndis_supported_oids), 0, + g_rndis_supported_oids + }, {RNDIS_OID_GEN_MAXIMUM_FRAME_SIZE, 4, CONFIG_NET_ETH_PKTSIZE, NULL}, #ifdef CONFIG_USBDEV_DUALSPEED {RNDIS_OID_GEN_LINK_SPEED, 4, 100000, NULL}, @@ -423,7 +445,7 @@ static const struct rndis_oid_value_s g_rndis_oid_values[] = #endif {RNDIS_OID_GEN_TRANSMIT_BLOCK_SIZE, 4, CONFIG_NET_ETH_PKTSIZE, NULL}, {RNDIS_OID_GEN_RECEIVE_BLOCK_SIZE, 4, CONFIG_NET_ETH_PKTSIZE, NULL}, - {RNDIS_OID_GEN_VENDOR_ID, 4, 0x00FFFFFF, NULL}, + {RNDIS_OID_GEN_VENDOR_ID, 4, 0x00ffffff, NULL}, {RNDIS_OID_GEN_VENDOR_DESCRIPTION, 6, 0, "RNDIS"}, {RNDIS_OID_GEN_CURRENT_PACKET_FILTER, 4, 0, NULL}, {RNDIS_OID_GEN_MAXIMUM_TOTAL_SIZE, 4, 2048, NULL}, @@ -431,7 +453,7 @@ static const struct rndis_oid_value_s g_rndis_oid_values[] = {RNDIS_OID_GEN_RCV_OK, 4, 0, NULL}, {RNDIS_OID_802_3_PERMANENT_ADDRESS, 6, 0, NULL}, {RNDIS_OID_802_3_CURRENT_ADDRESS, 6, 0, NULL}, - {RNDIS_OID_802_3_MULTICAST_LIST, 4, 0xE0000000, NULL}, + {RNDIS_OID_802_3_MULTICAST_LIST, 4, 0xe0000000, NULL}, {RNDIS_OID_802_3_MAXIMUM_LIST_SIZE, 4, 1, NULL}, {0x0, 4, 0, NULL}, /* Default fallback */ }; @@ -919,7 +941,6 @@ static void rndis_rxdispatch(FAR void *arg) rndis_transmit(priv); } - } else #endif @@ -934,7 +955,7 @@ static void rndis_rxdispatch(FAR void *arg) { rndis_transmit(priv); } - } + } else #endif { @@ -1064,7 +1085,7 @@ static void rndis_pollworker(FAR void *arg) if (rndis_allocnetreq(priv)) { - devif_timer(&priv->netdev, rndis_txpoll); + devif_timer(&priv->netdev, RNDIS_WDDELAY, rndis_txpoll); if (priv->net_req != NULL) { @@ -1393,7 +1414,8 @@ static int rndis_handle_control_message(FAR struct rndis_dev_s *priv, { FAR struct rndis_initialize_cmplt *resp; - rndis_prepare_response(priv, sizeof(struct rndis_initialize_cmplt), cmd_hdr); + rndis_prepare_response(priv, sizeof(struct rndis_initialize_cmplt), + cmd_hdr); resp = (FAR struct rndis_initialize_cmplt *)priv->ctrlreq->buf; resp->major = RNDIS_MAJOR_VERSION; @@ -1431,7 +1453,7 @@ static int rndis_handle_control_message(FAR struct rndis_dev_s *priv, resp->hdr.status = RNDIS_STATUS_NOT_SUPPORTED; for (i = 0; - i < sizeof(g_rndis_oid_values)/sizeof(g_rndis_oid_values[0]); + i < sizeof(g_rndis_oid_values) / sizeof(g_rndis_oid_values[0]); i++) { bool match = (g_rndis_oid_values[i].objid == req->objid); @@ -1442,7 +1464,9 @@ static int rndis_handle_control_message(FAR struct rndis_dev_s *priv, /* Check whether to apply the fallback entry */ - for (j = 0; j < sizeof(g_rndis_supported_oids)/sizeof(uint32_t); j++) + for (j = 0; + j < sizeof(g_rndis_supported_oids) / sizeof(uint32_t); + j++) { if (g_rndis_supported_oids[j] == req->objid) { @@ -1591,7 +1615,7 @@ static void rndis_rdcomplete(FAR struct usbdev_ep_s *ep, { usbtrace(TRACE_CLSERROR(USBSER_TRACEERR_INVALIDARG), 0); return; - } + } #endif /* Extract references to private data */ @@ -1653,7 +1677,7 @@ static void rndis_wrcomplete(FAR struct usbdev_ep_s *ep, { usbtrace(TRACE_CLSERROR(USBSER_TRACEERR_INVALIDARG), 0); return; - } + } #endif /* Extract references to our private data */ @@ -1826,25 +1850,25 @@ static int usbclass_mkstrdesc(uint8_t id, FAR struct usb_strdesc_s *strdesc) return -EINVAL; } - /* The string is utf16-le. The poor man's utf-8 to utf16-le - * conversion below will only handle 7-bit en-us ascii - */ + /* The string is utf16-le. The poor man's utf-8 to utf16-le + * conversion below will only handle 7-bit en-us ascii + */ - len = strlen(str); - if (len > (RNDIS_MAXSTRLEN / 2)) - { - len = (RNDIS_MAXSTRLEN / 2); - } + len = strlen(str); + if (len > (RNDIS_MAXSTRLEN / 2)) + { + len = (RNDIS_MAXSTRLEN / 2); + } - for (i = 0, ndata = 0; i < len; i++, ndata += 2) - { - strdesc->data[ndata] = str[i]; - strdesc->data[ndata+1] = 0; - } + for (i = 0, ndata = 0; i < len; i++, ndata += 2) + { + strdesc->data[ndata] = str[i]; + strdesc->data[ndata + 1] = 0; + } - strdesc->len = ndata+2; - strdesc->type = USB_DESC_TYPE_STRING; - return strdesc->len; + strdesc->len = ndata + 2; + strdesc->type = USB_DESC_TYPE_STRING; + return strdesc->len; } /**************************************************************************** @@ -2061,7 +2085,8 @@ static int usbclass_bind(FAR struct usbdevclass_driver_s *driver, priv->epintin->priv = priv; - priv->epintin_req = usbclass_allocreq(priv->epintin, sizeof(struct rndis_notification)); + priv->epintin_req = + usbclass_allocreq(priv->epintin, sizeof(struct rndis_notification)); if (priv->epintin_req == NULL) { usbtrace(TRACE_CLSERROR(USBSER_TRACEERR_RDALLOCREQ), -ENOMEM); @@ -2086,8 +2111,9 @@ static int usbclass_bind(FAR struct usbdevclass_driver_s *driver, /* Pre-allocate the OUT bulk endpoint */ - priv->epbulkout = DEV_ALLOCEP(dev, USB_EPOUT(priv->devinfo.epno[RNDIS_EP_BULKOUT_IDX]), - false, USB_EP_ATTR_XFER_BULK); + priv->epbulkout = + DEV_ALLOCEP(dev, USB_EPOUT(priv->devinfo.epno[RNDIS_EP_BULKOUT_IDX]), + false, USB_EP_ATTR_XFER_BULK); if (!priv->epbulkout) { usbtrace(TRACE_CLSERROR(USBSER_TRACEERR_EPBULKOUTALLOCFAIL), 0); @@ -2108,11 +2134,11 @@ static int usbclass_bind(FAR struct usbdevclass_driver_s *driver, priv->rdreq = usbclass_allocreq(priv->epbulkout, reqlen); if (priv->rdreq == NULL) - { - usbtrace(TRACE_CLSERROR(USBSER_TRACEERR_RDALLOCREQ), -ENOMEM); - ret = -ENOMEM; - goto errout; - } + { + usbtrace(TRACE_CLSERROR(USBSER_TRACEERR_RDALLOCREQ), -ENOMEM); + ret = -ENOMEM; + goto errout; + } priv->rdreq->callback = rndis_rdcomplete; @@ -2192,7 +2218,7 @@ static void usbclass_unbind(FAR struct usbdevclass_driver_s *driver, { usbtrace(TRACE_CLSERROR(USBSER_TRACEERR_INVALIDARG), 0); return; - } + } #endif /* Extract reference to private data */ @@ -2313,7 +2339,7 @@ static int usbclass_setup(FAR struct usbdevclass_driver_s *driver, { usbtrace(TRACE_CLSERROR(USBSER_TRACEERR_INVALIDARG), 0); return -EIO; - } + } #endif /* Extract reference to private data */ @@ -2496,7 +2522,7 @@ static void usbclass_disconnect(FAR struct usbdevclass_driver_s *driver, { usbtrace(TRACE_CLSERROR(USBSER_TRACEERR_INVALIDARG), 0); return; - } + } #endif /* Extract reference to private data */ diff --git a/drivers/wireless/ieee80211/bcm43xxx/bcmf_netdev.c b/drivers/wireless/ieee80211/bcm43xxx/bcmf_netdev.c index 01f0abd1dff..33b10e4e955 100644 --- a/drivers/wireless/ieee80211/bcm43xxx/bcmf_netdev.c +++ b/drivers/wireless/ieee80211/bcm43xxx/bcmf_netdev.c @@ -618,7 +618,7 @@ static void bcmf_poll_work(FAR void *arg) priv->bc_dev.d_buf = priv->cur_tx_frame->data; priv->bc_dev.d_len = 0; - (void)devif_timer(&priv->bc_dev, bcmf_txpoll); + (void)devif_timer(&priv->bc_dev, BCMF_WDDELAY, bcmf_txpoll); /* Setup the watchdog poll timer again */ diff --git a/drivers/wireless/ieee802154/xbee/xbee_netdev.c b/drivers/wireless/ieee802154/xbee/xbee_netdev.c index e04505786c0..913efbd81c4 100644 --- a/drivers/wireless/ieee802154/xbee/xbee_netdev.c +++ b/drivers/wireless/ieee802154/xbee/xbee_netdev.c @@ -611,7 +611,7 @@ static void xbeenet_txpoll_work(FAR void *arg) /* Then perform the poll */ - (void)devif_timer(&priv->xd_dev.r_dev, xbeenet_txpoll_callback); + (void)devif_timer(&priv->xd_dev.r_dev, TXPOLL_WDDELAY, xbeenet_txpoll_callback); /* Setup the watchdog poll timer again */ diff --git a/drivers/wireless/spirit/drivers/spirit_netdev.c b/drivers/wireless/spirit/drivers/spirit_netdev.c index f7274d8ebd8..a06e522cddc 100644 --- a/drivers/wireless/spirit/drivers/spirit_netdev.c +++ b/drivers/wireless/spirit/drivers/spirit_netdev.c @@ -1812,7 +1812,7 @@ static void spirit_txpoll_work(FAR void *arg) /* Perform the periodic poll */ priv->needpoll = false; - (void)devif_timer(&priv->radio.r_dev, spirit_txpoll_callback); + (void)devif_timer(&priv->radio.r_dev, SPIRIT_WDDELAY, spirit_txpoll_callback); /* Setup the watchdog poll timer again */ diff --git a/include/nuttx/net/netdev.h b/include/nuttx/net/netdev.h index c1afccc6147..6c67c56352a 100644 --- a/include/nuttx/net/netdev.h +++ b/include/nuttx/net/netdev.h @@ -544,7 +544,8 @@ int sixlowpan_input(FAR struct radio_driver_s *ieee, ****************************************************************************/ int devif_poll(FAR struct net_driver_s *dev, devif_poll_callback_t callback); -int devif_timer(FAR struct net_driver_s *dev, devif_poll_callback_t callback); +int devif_timer(FAR struct net_driver_s *dev, int delay, + devif_poll_callback_t callback); /**************************************************************************** * Name: neighbor_out diff --git a/net/devif/devif.h b/net/devif/devif.h index 8890ec5d295..f3aef4e4dce 100644 --- a/net/devif/devif.h +++ b/net/devif/devif.h @@ -281,10 +281,6 @@ extern "C" EXTERN uint8_t g_reassembly_timer; #endif -/* Time of last poll */ - -EXTERN clock_t g_polltime; - /**************************************************************************** * Public Function Prototypes ****************************************************************************/ diff --git a/net/devif/devif_initialize.c b/net/devif/devif_initialize.c index 864baa64b85..edd8bdd6a3f 100644 --- a/net/devif/devif_initialize.c +++ b/net/devif/devif_initialize.c @@ -44,9 +44,6 @@ #include #ifdef CONFIG_NET -#include - -#include #include #include "devif/devif.h" @@ -95,10 +92,6 @@ uint8_t g_reassembly_timer; void devif_initialize(void) { - /* Initialize the time of the last timer poll */ - - g_polltime = clock_systimer(); - /* Initialize callback support */ devif_callback_init(); diff --git a/net/devif/devif_poll.c b/net/devif/devif_poll.c index 4fb74ff36b1..75b0ff287ee 100644 --- a/net/devif/devif_poll.c +++ b/net/devif/devif_poll.c @@ -76,14 +76,6 @@ enum devif_packet_type DEVIF_ICMP6 }; -/**************************************************************************** - * Public Data - ****************************************************************************/ - -/* Time of last poll */ - -clock_t g_polltime; - /**************************************************************************** * Private Functions ****************************************************************************/ @@ -770,55 +762,29 @@ int devif_poll(FAR struct net_driver_s *dev, devif_poll_callback_t callback) * ****************************************************************************/ -int devif_timer(FAR struct net_driver_s *dev, devif_poll_callback_t callback) +int devif_timer(FAR struct net_driver_s *dev, int delay, + devif_poll_callback_t callback) { - clock_t now; - clock_t elapsed; + int hsec = TICK2HSEC(delay); int bstop = false; - /* Get the elapsed time since the last poll in units of half seconds - * (truncating). - */ - - now = clock_systimer(); - elapsed = now - g_polltime; - - /* Process time-related events only when more than one half second elapses. */ - - if (elapsed >= TICK_PER_HSEC) - { - /* Calculate the elpased time in units of half seconds (truncating to - * number of whole half seconds). - */ - - int hsec = (int)(elapsed / TICK_PER_HSEC); - - /* Update the current poll time (truncating to the last half second - * boundary to avoid error build-up). - */ - - g_polltime += (TICK_PER_HSEC * (clock_t)hsec); - - /* Perform periodic activitives that depend on hsec > 0 */ - #ifdef CONFIG_NET_IPv4_REASSEMBLY - /* Increment the timer used by the IP reassembly logic */ + /* Increment the timer used by the IP reassembly logic */ - if (g_reassembly_timer != 0 && - g_reassembly_timer < CONFIG_NET_IPv4_REASS_MAXAGE) - { - g_reassembly_timer += hsec; - } + if (g_reassembly_timer != 0 && + g_reassembly_timer < CONFIG_NET_IPv4_REASS_MAXAGE) + { + g_reassembly_timer += hsec; + } #endif #ifdef NET_TCP_HAVE_STACK - /* Traverse all of the active TCP connections and perform the - * timer action. - */ + /* Traverse all of the active TCP connections and perform the + * timer action. + */ - bstop = devif_poll_tcp_timer(dev, callback, hsec); + bstop = devif_poll_tcp_timer(dev, callback, hsec); #endif - } /* If possible, continue with a normal poll checking for pending * network driver actions. diff --git a/wireless/bluetooth/bt_netdev.c b/wireless/bluetooth/bt_netdev.c index 3f9536673b8..0d1660b132a 100644 --- a/wireless/bluetooth/bt_netdev.c +++ b/wireless/bluetooth/bt_netdev.c @@ -157,6 +157,7 @@ static void btnet_hci_disconnected(FAR struct bt_conn_s *conn, FAR void *context); /* Network interface support ************************************************/ + /* Common TX logic */ static int btnet_txpoll_callback(FAR struct net_driver_s *netdev); @@ -542,7 +543,7 @@ static void btnet_txpoll_work(FAR void *arg) /* Then perform the poll */ - (void)devif_timer(&priv->bd_dev.r_dev, btnet_txpoll_callback); + (void)devif_timer(&priv->bd_dev.r_dev, TXPOLL_WDDELAY, btnet_txpoll_callback); /* Setup the watchdog poll timer again */ @@ -1132,6 +1133,7 @@ int bt_netdev_register(FAR const struct bt_driver_s *btdev) nerr("ERROR: netdev_register() failed: %d\n", ret); errout: + /* Release wdog timers */ wd_delete(priv->bd_txpoll); diff --git a/wireless/ieee802154/mac802154_loopback.c b/wireless/ieee802154/mac802154_loopback.c index 84c3cd332a6..b50db1bf7ad 100644 --- a/wireless/ieee802154/mac802154_loopback.c +++ b/wireless/ieee802154/mac802154_loopback.c @@ -476,7 +476,7 @@ static void lo_poll_work(FAR void *arg) /* Then perform the poll */ - (void)devif_timer(&priv->lo_radio.r_dev, lo_loopback); + (void)devif_timer(&priv->lo_radio.r_dev, LO_WDDELAY, lo_loopback); /* Setup the watchdog poll timer again */ @@ -1034,6 +1034,7 @@ static int lo_properties(FAR struct radio_driver_s *netdev, #ifdef CONFIG_NET_STARPOINT /* Star hub node address -- Not supported*/ + #endif return OK; diff --git a/wireless/ieee802154/mac802154_netdev.c b/wireless/ieee802154/mac802154_netdev.c index c3becd7378c..97b12b2d46c 100644 --- a/wireless/ieee802154/mac802154_netdev.c +++ b/wireless/ieee802154/mac802154_netdev.c @@ -193,6 +193,7 @@ static int macnet_rxframe(FAR struct macnet_driver_s *maccb, FAR struct ieee802154_data_ind_s *ind); /* Network interface support ************************************************/ + /* Common TX logic */ static int macnet_txpoll_callback(FAR struct net_driver_s *dev); @@ -579,7 +580,7 @@ static void macnet_txpoll_work(FAR void *arg) /* Then perform the poll */ - (void)devif_timer(&priv->md_dev.r_dev, macnet_txpoll_callback); + (void)devif_timer(&priv->md_dev.r_dev, TXPOLL_WDDELAY, macnet_txpoll_callback); /* Setup the watchdog poll timer again */ @@ -1438,6 +1439,7 @@ int mac802154netdev_register(MACHANDLE mac) return macnet_ifdown(&priv->md_dev.r_dev); errout: + /* Release wdog timers */ wd_delete(priv->md_txpoll); diff --git a/wireless/pktradio/pktradio_loopback.c b/wireless/pktradio/pktradio_loopback.c index 79b5b51e1da..96e043d83d4 100644 --- a/wireless/pktradio/pktradio_loopback.c +++ b/wireless/pktradio/pktradio_loopback.c @@ -434,7 +434,7 @@ static void lo_poll_work(FAR void *arg) /* And perform the poll */ - (void)devif_timer(&priv->lo_radio.r_dev, lo_loopback); + (void)devif_timer(&priv->lo_radio.r_dev, LO_WDDELAY, lo_loopback); /* Setup the watchdog poll timer again */