arch/: Add option to use low-priority work queue to all Ethernet drivers in arch that support CONFIG_NET_NOINTS.

This commit is contained in:
Gregory Nutt 2016-11-19 09:20:01 -06:00
parent 5ca9128c38
commit 0804286ad3
21 changed files with 407 additions and 143 deletions

View File

@ -629,6 +629,25 @@ config KINETIS_ENET_NORXER
If selected, then the MII/RMII RXER output will be configured as a
GPIO and pulled low.
choice
prompt "Work queue"
default KINETIS_EMAC_LPWORK if SCHED_LPWORK
default KINETIS_EMAC_HPWORK if !SCHED_LPWORK && SCHED_HPWORK
depends on SCHED_WORKQUEUE
---help---
Work queue support is required to use the Ethernet driver. If the
low priority work queue is available, then it should be used by the
driver.
config KINETIS_EMAC_HPWORK
bool "High priority"
depends on SCHED_HPWORK
config KINETIS_EMAC_LPWORK
bool "Low priority"
depends on SCHED_LPWORK
endchoice # Work queue
endmenu # Kinetis Ethernet Configuration
menu "Kinetis SDHC Configuration"

View File

@ -80,12 +80,24 @@
* Pre-processor Definitions
****************************************************************************/
/* If processing is not done at the interrupt level, then high priority
* work queue support is required.
/* If processing is not done at the interrupt level, then work queue support
* is required.
*/
#if defined(CONFIG_NET_NOINTS) && !defined(CONFIG_SCHED_HPWORK)
# error High priority work queue support is required
#if defined(CONFIG_NET_NOINTS) && !defined(CONFIG_SCHED_WORKQUEUE)
# error Work queue support is required
#endif
/* Select work queue */
#if defined(CONFIG_SCHED_WORKQUEUE)
# if defined(CONFIG_KINETIS_EMAC_HPWORK)
# define ETHWORK HPWORK
# elif defined(CONFIG_KINETIS_EMAC_LPWORK)
# define ETHWORK LPWORK
# else
# error Neither CONFIG_KINETIS_EMAC_HPWORK nor CONFIG_KINETIS_EMAC_LPWORK defined
# endif
#endif
/* CONFIG_KINETIS_ENETNETHIFS determines the number of physical interfaces
@ -974,11 +986,11 @@ static int kinetis_interrupt(int irq, FAR void *context)
/* Cancel any pending poll work */
work_cancel(HPWORK, &priv->work);
work_cancel(ETHWORK, &priv->work);
/* Schedule to perform the interrupt processing on the worker thread. */
work_queue(HPWORK, &priv->work, kinetis_interrupt_work, priv, 0);
work_queue(ETHWORK, &priv->work, kinetis_interrupt_work, priv, 0);
#else
/* Process the interrupt now */
@ -1093,11 +1105,11 @@ static void kinetis_txtimeout_expiry(int argc, uint32_t arg, ...)
* on work that has already been started.
*/
work_cancel(HPWORK, &priv->work);
work_cancel(ETHWORK, &priv->work);
/* Schedule to perform the TX timeout processing on the worker thread. */
work_queue(HPWORK, &priv->work, kinetis_txtimeout_work, priv, 0);
work_queue(ETHWORK, &priv->work, kinetis_txtimeout_work, priv, 0);
#else
/* Process the timeout now */
@ -1206,7 +1218,7 @@ static void kinetis_polltimer_expiry(int argc, uint32_t arg, ...)
{
/* Schedule to perform the interrupt processing on the worker thread. */
work_queue(HPWORK, &priv->work, kinetis_poll_work, priv, 0);
work_queue(ETHWORK, &priv->work, kinetis_poll_work, priv, 0);
}
else
{
@ -1513,7 +1525,7 @@ static int kinetis_txavail(struct net_driver_s *dev)
{
/* Schedule to serialize the poll on the worker thread. */
work_queue(HPWORK, &priv->work, kinetis_txavail_work, priv, 0);
work_queue(ETHWORK, &priv->work, kinetis_txavail_work, priv, 0);
}
#else

View File

@ -724,6 +724,26 @@ config LPC17_MULTICAST
---help---
Enable receipt of multicast (and unicast) frames. Automatically set
if NET_IGMP is selected.
choice
prompt "Work queue"
default LPC17_ETHERNET_LPWORK if SCHED_LPWORK
default LPC17_ETHERNET_HPWORK if !SCHED_LPWORK && SCHED_HPWORK
depends on SCHED_WORKQUEUE
---help---
Work queue support is required to use the Ethernet driver. If the
low priority work queue is available, then it should be used by the
driver.
config LPC17_ETHERNET_HPWORK
bool "High priority"
depends on SCHED_HPWORK
config LPC17_ETHERNET_LPWORK
bool "Low priority"
depends on SCHED_LPWORK
endchoice # Work queue
endmenu
menu "LCD device driver options"

View File

@ -83,12 +83,24 @@
* Pre-processor Definitions
****************************************************************************/
/* Configuration ************************************************************/
/* If processing is not done at the interrupt level, then high priority
* work queue support is required.
/* If processing is not done at the interrupt level, then work queue support
* is required.
*/
#if defined(CONFIG_NET_NOINTS) && !defined(CONFIG_SCHED_HPWORK)
# error High priority work queue support is required
#if defined(CONFIG_NET_NOINTS) && !defined(CONFIG_SCHED_WORKQUEUE)
# error Work queue support is required
#endif
/* Select work queue */
#if defined(CONFIG_SCHED_WORKQUEUE)
# if defined(CONFIG_LPC17_ETHERNET_HPWORK)
# define ETHWORK HPWORK
# elif defined(CONFIG_LPC17_ETHERNET_LPWORK)
# define ETHWORK LPWORK
# else
# error Neither CONFIG_LPC17_ETHERNET_HPWORK nor CONFIG_LPC17_ETHERNET_LPWORK defined
# endif
#endif
/* CONFIG_LPC17_NINTERFACES determines the number of physical interfaces
@ -1259,11 +1271,11 @@ static int lpc17_interrupt(int irq, void *context)
/* Cancel any pending RX done work */
work_cancel(HPWORK, &priv->lp_rxwork);
work_cancel(ETHWORK, &priv->lp_rxwork);
/* Schedule RX-related work to be performed on the work thread */
work_queue(HPWORK, &priv->lp_rxwork, (worker_t)lpc17_rxdone_work,
work_queue(ETHWORK, &priv->lp_rxwork, (worker_t)lpc17_rxdone_work,
priv, 0);
#else /* CONFIG_NET_NOINTS */
@ -1323,7 +1335,7 @@ static int lpc17_interrupt(int irq, void *context)
* to avoid race conditions with the TX timeout work)
*/
work_cancel(HPWORK, &priv->lp_txwork);
work_cancel(ETHWORK, &priv->lp_txwork);
/* Then make sure that the TX poll timer is running (if it is
* already running, the following would restart it). This is
@ -1336,7 +1348,7 @@ static int lpc17_interrupt(int irq, void *context)
/* Schedule TX-related work to be performed on the work thread */
work_queue(HPWORK, &priv->lp_txwork, (worker_t)lpc17_txdone_work,
work_queue(ETHWORK, &priv->lp_txwork, (worker_t)lpc17_txdone_work,
priv, 0);
#else /* CONFIG_NET_NOINTS */
@ -1468,7 +1480,7 @@ static void lpc17_txtimeout_expiry(int argc, uint32_t arg, ...)
{
/* Schedule to perform the interrupt processing on the worker thread. */
work_queue(HPWORK, &priv->lp_txwork, lpc17_txtimeout_work, priv, 0);
work_queue(ETHWORK, &priv->lp_txwork, lpc17_txtimeout_work, priv, 0);
}
#else
@ -1526,7 +1538,7 @@ static void lpc17_poll_process(FAR struct lpc17_driver_s *priv)
if (considx != prodidx)
{
#ifdef CONFIG_NET_NOINTS
work_queue(HPWORK, &priv->lp_rxwork, (worker_t)lpc17_rxdone_work,
work_queue(ETHWORK, &priv->lp_rxwork, (worker_t)lpc17_rxdone_work,
priv, 0);
#else /* CONFIG_NET_NOINTS */
@ -1606,7 +1618,7 @@ static void lpc17_poll_expiry(int argc, uint32_t arg, ...)
{
/* Schedule to perform the interrupt processing on the worker thread. */
work_queue(HPWORK, &priv->lp_pollwork, lpc17_poll_work, priv, 0);
work_queue(ETHWORK, &priv->lp_pollwork, lpc17_poll_work, priv, 0);
}
else
{
@ -2013,7 +2025,7 @@ static int lpc17_txavail(struct net_driver_s *dev)
{
/* Schedule to serialize the poll on the worker thread. */
work_queue(HPWORK, &priv->lp_pollwork, lpc17_txavail_work, priv, 0);
work_queue(ETHWORK, &priv->lp_pollwork, lpc17_txavail_work, priv, 0);
}
#else

View File

@ -485,8 +485,8 @@ endif # LCP43_EXTSDRAM3
endmenu # External Memory Configuration
if LPC43_ETHERNET
menu "Ethernet MAC configuration"
depends on LPC43_ETHERNET
config LPC43_PHYADDR
int "PHY address"
@ -619,6 +619,26 @@ config LPC43_RMII
bool
default y if !LPC43_MII
choice
prompt "Work queue"
default LPC43_ETHERNET_LPWORK if SCHED_LPWORK
default LPC43_ETHERNET_HPWORK if !SCHED_LPWORK && SCHED_HPWORK
depends on SCHED_WORKQUEUE
---help---
Work queue support is required to use the Ethernet driver. If the
low priority work queue is available, then it should be used by the
driver.
config LPC43_ETHERNET_HPWORK
bool "High priority"
depends on SCHED_HPWORK
config LPC43_ETHERNET_LPWORK
bool "Low priority"
depends on SCHED_LPWORK
endchoice # Work queue
config LPC43_ETHERNET_REGDEBUG
bool "Register-Level Debug"
default n
@ -627,7 +647,6 @@ config LPC43_ETHERNET_REGDEBUG
Enable very low-level register access debug. Depends on CONFIG_DEBUG_NET_INFO.
endmenu # Ethernet MAC configuration
endif # LPC43_ETHERNET
menu "RS-485 Configuration"
if LPC43_USART0

View File

@ -83,12 +83,24 @@
****************************************************************************/
/* Configuration ************************************************************/
/* If processing is not done at the interrupt level, then high priority
* work queue support is required.
/* If processing is not done at the interrupt level, then work queue support
* is required.
*/
#if defined(CONFIG_NET_NOINTS) && !defined(CONFIG_SCHED_HPWORK)
# error High priority work queue support is required
#if defined(CONFIG_NET_NOINTS) && !defined(CONFIG_SCHED_WORKQUEUE)
# error Work queue support is required
#endif
/* Select work queue */
#if defined(CONFIG_SCHED_WORKQUEUE)
# if defined(CONFIG_LPC43_ETHERNET_HPWORK)
# define ETHWORK HPWORK
# elif defined(CONFIG_LPC43_ETHERNET_LPWORK)
# define ETHWORK LPWORK
# else
# error Neither CONFIG_LPC43_ETHERNET_HPWORK nor CONFIG_LPC43_ETHERNET_LPWORK defined
# endif
#endif
#ifndef CONFIG_LPC43_PHYADDR
@ -2075,11 +2087,11 @@ static int lpc43_interrupt(int irq, FAR void *context)
/* Cancel any pending poll work */
work_cancel(HPWORK, &priv->work);
work_cancel(ETHWORK, &priv->work);
/* Schedule to perform the interrupt processing on the worker thread. */
work_queue(HPWORK, &priv->work, lpc43_interrupt_work, priv, 0);
work_queue(ETHWORK, &priv->work, lpc43_interrupt_work, priv, 0);
}
#else
@ -2195,11 +2207,11 @@ static void lpc43_txtimeout_expiry(int argc, uint32_t arg, ...)
* on work that has already been started.
*/
work_cancel(HPWORK, &priv->work);
work_cancel(ETHWORK, &priv->work);
/* Schedule to perform the TX timeout processing on the worker thread. */
work_queue(HPWORK, &priv->work, lpc43_txtimeout_work, priv, 0);
work_queue(ETHWORK, &priv->work, lpc43_txtimeout_work, priv, 0);
#else
/* Process the timeout now */
@ -2339,7 +2351,7 @@ static void lpc43_poll_expiry(int argc, uint32_t arg, ...)
{
/* Schedule to perform the interrupt processing on the worker thread. */
work_queue(HPWORK, &priv->work, lpc43_poll_work, priv, 0);
work_queue(ETHWORK, &priv->work, lpc43_poll_work, priv, 0);
}
else
{
@ -2556,7 +2568,7 @@ static int lpc43_txavail(struct net_driver_s *dev)
{
/* Schedule to serialize the poll on the worker thread. */
work_queue(HPWORK, &priv->work, lpc43_txavail_work, priv, 0);
work_queue(ETHWORK, &priv->work, lpc43_txavail_work, priv, 0);
}
#else

View File

@ -1136,9 +1136,8 @@ config SAM34_SPI_REGDEBUG
endmenu # AT91SAM3/4 SPI device driver options
endif # SAM34_SPI0 || SAM34_SPI1
if SAM34_EMAC
menu "AT91SAM3/4 EMAC device driver options"
depends on SAM34_EMAC
config SAM34_EMAC_NRXBUFFERS
int "Number of RX buffers"
@ -1332,6 +1331,30 @@ config SAM34_EMAC_PHYSR_100FD
This must be provided if SAM34_EMAC_AUTONEG is defined. This is the value
under the bit mask that represents the 100Mbps, full duplex setting.
config SAM34_EMAC_ISETH0
bool
default y
choice
prompt "Work queue"
default SAM34_EMAC_LPWORK if SCHED_LPWORK
default SAM34_EMAC_HPWORK if !SCHED_LPWORK && SCHED_HPWORK
depends on SCHED_WORKQUEUE
---help---
Work queue support is required to use the Ethernet driver. If the
low priority work queue is available, then it should be used by the
driver.
config SAM34_EMAC_HPWORK
bool "High priority"
depends on SCHED_HPWORK
config SAM34_EMAC_LPWORK
bool "Low priority"
depends on SCHED_LPWORK
endchoice # Work queue
config SAM34_EMAC_REGDEBUG
bool "Register-Level Debug"
default n
@ -1339,13 +1362,7 @@ config SAM34_EMAC_REGDEBUG
---help---
Enable very low-level register access debug. Depends on CONFIG_DEBUG_NET_INFO.
config SAM34_EMAC_ISETH0
bool
default y if !SAM34_EMAC || !SAM34_GMAC_ISETH0
default n if SAM34_EMAC && SAM34_GMAC_ISETH0
endmenu # EMAC device driver options
endif # SAM34_EMAC
if SAM34_HSMCI
menu "AT91SAM3/4 HSMCI device driver options"

View File

@ -97,12 +97,24 @@
****************************************************************************/
/* Configuration ************************************************************/
/* If processing is not done at the interrupt level, then high priority
* work queue support is required.
/* If processing is not done at the interrupt level, then work queue support
* is required.
*/
#if defined(CONFIG_NET_NOINTS) && !defined(CONFIG_SCHED_HPWORK)
# error High priority work queue support is required
#if defined(CONFIG_NET_NOINTS) && !defined(CONFIG_SCHED_WORKQUEUE)
# error Work queue support is required
#endif
/* Select work queue */
#if defined(CONFIG_SCHED_WORKQUEUE)
# if defined(CONFIG_SAM34_EMAC_HPWORK)
# define ETHWORK HPWORK
# elif defined(CONFIG_SAM34_EMAC_LPWORK)
# define ETHWORK LPWORK
# else
# error Neither CONFIG_SAM34_EMAC_HPWORK nor CONFIG_SAM34_EMAC_LPWORK defined
# endif
#endif
/* Number of buffer for RX */
@ -1690,11 +1702,11 @@ static int sam_emac_interrupt(int irq, void *context)
/* Cancel any pending poll work */
work_cancel(HPWORK, &priv->work);
work_cancel(ETHWORK, &priv->work);
/* Schedule to perform the interrupt processing on the worker thread. */
work_queue(HPWORK, &priv->work, sam_interrupt_work, priv, 0);
work_queue(ETHWORK, &priv->work, sam_interrupt_work, priv, 0);
#else
/* Process the interrupt now */
@ -1807,11 +1819,11 @@ static void sam_txtimeout_expiry(int argc, uint32_t arg, ...)
* on work that has already been started.
*/
work_cancel(HPWORK, &priv->work);
work_cancel(ETHWORK, &priv->work);
/* Schedule to perform the TX timeout processing on the worker thread. */
work_queue(HPWORK, &priv->work, sam_txtimeout_work, priv, 0);
work_queue(ETHWORK, &priv->work, sam_txtimeout_work, priv, 0);
#else
/* Process the timeout now */
@ -1918,7 +1930,7 @@ static void sam_poll_expiry(int argc, uint32_t arg, ...)
{
/* Schedule to perform the interrupt processing on the worker thread. */
work_queue(HPWORK, &priv->work, sam_poll_work, priv, 0);
work_queue(ETHWORK, &priv->work, sam_poll_work, priv, 0);
}
else
{
@ -2155,7 +2167,7 @@ static int sam_txavail(struct net_driver_s *dev)
{
/* Schedule to serialize the poll on the worker thread. */
work_queue(HPWORK, &priv->work, sam_txavail_work, priv, 0);
work_queue(ETHWORK, &priv->work, sam_txavail_work, priv, 0);
}
#else

View File

@ -1685,13 +1685,11 @@ config SAMA5_EMACA_REGDEBUG
endmenu # EMAC device driver options
endif # SAMA5_EMACA
if SAMA5_EMACB
menu "EMAC device driver options"
if SAMA5_EMAC0
depends on SAMA5_EMACB
menu "EMAC0 device driver options"
depends on SAMA5_EMAC0
config SAMA5_EMAC0_NRXBUFFERS
int "Number of RX buffers"
@ -1871,11 +1869,9 @@ config SAMA5_EMAC0_PHYSR_FULLDUPLEX
endif # !SAMA5_EMAC0_PHYSR_ALTCONFIG
endif # SAMA5_EMAC0_AUTONEG
endmenu # EMAC0 device driver options
endif # SAMA5_EMAC0
if SAMA5_EMAC1
menu "EMAC1 device driver options"
depends on SAMA5_EMAC1
config SAMA5_EMAC1_NRXBUFFERS
int "Number of RX buffers"
@ -2055,7 +2051,6 @@ config SAMA5_EMAC1_PHYSR_FULLDUPLEX
endif # !SAMA5_EMAC1_PHYSR_ALTCONFIG
endif # SAMA5_EMAC1_AUTONEG
endmenu # EMAC1 device driver options
endif # SAMA5_EMAC1
# These apply to both EMAC0 and EMAC1
@ -2073,6 +2068,26 @@ config SAMA5_EMACB_NBC
---help---
Select to disable receipt of broadcast packets.
choice
prompt "Work queue"
default SAMA5_EMACB_LPWORK if SCHED_LPWORK
default SAMA5_EMACB_HPWORK if !SCHED_LPWORK && SCHED_HPWORK
depends on SCHED_WORKQUEUE
---help---
Work queue support is required to use the Ethernet driver. If the
low priority work queue is available, then it should be used by the
driver.
config SAMA5_EMACB_HPWORK
bool "High priority"
depends on SCHED_HPWORK
config SAMA5_EMACB_LPWORK
bool "Low priority"
depends on SCHED_LPWORK
endchoice # Work queue
config SAMA5_EMACB_DEBUG
bool "Force EMAC0/1 DEBUG"
default n
@ -2092,7 +2107,6 @@ config SAMA5_EMACB_REGDEBUG
Enable very low-level register access debug. Depends on CONFIG_DEBUG_NET_INFO.
endmenu # EMAC device driver options
endif # SAMA5_EMACB
if SAMA5_EMACA || SAMA5_EMAC0 || SAMA5_EMAC1 || SAMA5_GMAC
choice

View File

@ -113,12 +113,24 @@
****************************************************************************/
/* Configuration ************************************************************/
/* If processing is not done at the interrupt level, then high priority
* work queue support is required.
/* If processing is not done at the interrupt level, then work queue support
* is required.
*/
#if defined(CONFIG_NET_NOINTS) && !defined(CONFIG_SCHED_HPWORK)
# error High priority work queue support is required
#if defined(CONFIG_NET_NOINTS) && !defined(CONFIG_SCHED_WORKQUEUE)
# error Work queue support is required
#endif
/* Select work queue */
#if defined(CONFIG_SCHED_WORKQUEUE)
# if defined(CONFIG_SAMA5_EMACB_HPWORK)
# define ETHWORK HPWORK
# elif defined(CONFIG_SAMA5_EMACB_LPWORK)
# define ETHWORK LPWORK
# else
# error Neither CONFIG_SAMA5_EMACB_HPWORK nor CONFIG_SAMA5_EMACB_LPWORK defined
# endif
#endif
/* EMAC0 Configuration ******************************************************/
@ -2098,11 +2110,11 @@ static int sam_emac_interrupt(struct sam_emac_s *priv)
/* Cancel any pending poll work */
work_cancel(HPWORK, &priv->work);
work_cancel(ETHWORK, &priv->work);
/* Schedule to perform the interrupt processing on the worker thread. */
work_queue(HPWORK, &priv->work, sam_interrupt_work, priv, 0);
work_queue(ETHWORK, &priv->work, sam_interrupt_work, priv, 0);
#else
/* Process the interrupt now */
@ -2244,11 +2256,11 @@ static void sam_txtimeout_expiry(int argc, uint32_t arg, ...)
* on work that has already been started.
*/
work_cancel(HPWORK, &priv->work);
work_cancel(ETHWORK, &priv->work);
/* Schedule to perform the TX timeout processing on the worker thread. */
work_queue(HPWORK, &priv->work, sam_txtimeout_work, priv, 0);
work_queue(ETHWORK, &priv->work, sam_txtimeout_work, priv, 0);
#else
/* Process the timeout now */
@ -2355,7 +2367,7 @@ static void sam_poll_expiry(int argc, uint32_t arg, ...)
{
/* Schedule to perform the interrupt processing on the worker thread. */
work_queue(HPWORK, &priv->work, sam_poll_work, priv, 0);
work_queue(ETHWORK, &priv->work, sam_poll_work, priv, 0);
}
else
{
@ -2600,7 +2612,7 @@ static int sam_txavail(struct net_driver_s *dev)
{
/* Schedule to serialize the poll on the worker thread. */
work_queue(HPWORK, &priv->work, sam_txavail_work, priv, 0);
work_queue(ETHWORK, &priv->work, sam_txavail_work, priv, 0);
}
#else

View File

@ -1998,6 +1998,26 @@ config SAMV7_EMAC_NBC
---help---
Select to disable receipt of broadcast packets.
choice
prompt "Work queue"
default SAMV7_EMAC_LPWORK if SCHED_LPWORK
default SAMV7_EMAC_HPWORK if !SCHED_LPWORK && SCHED_HPWORK
depends on SCHED_WORKQUEUE
---help---
Work queue support is required to use the Ethernet driver. If the
low priority work queue is available, then it should be used by the
driver.
config SAMV7_EMAC_HPWORK
bool "High priority"
depends on SCHED_HPWORK
config SAMV7_EMAC_LPWORK
bool "Low priority"
depends on SCHED_LPWORK
endchoice # Work queue
config SAMV7_EMAC_DEBUG
bool "Force EMAC0/1 DEBUG"
default n

View File

@ -103,12 +103,24 @@
****************************************************************************/
/* Configuration ************************************************************/
/* If processing is not done at the interrupt level, then high priority
* work queue support is required.
/* If processing is not done at the interrupt level, then work queue support
* is required.
*/
#if defined(CONFIG_NET_NOINTS) && !defined(CONFIG_SCHED_HPWORK)
# error High priority work queue support is required
#if defined(CONFIG_NET_NOINTS) && !defined(CONFIG_SCHED_WORKQUEUE)
# error Work queue support is required
#endif
/* Select work queue */
#if defined(CONFIG_SCHED_WORKQUEUE)
# if defined(CONFIG_SAMV7_EMAC_HPWORK)
# define ETHWORK HPWORK
# elif defined(CONFIG_SAMV7_EMAC_LPWORK)
# define ETHWORK LPWORK
# else
# error Neither CONFIG_SAMV7_EMAC_HPWORK nor CONFIG_SAMV7_EMAC_LPWORK defined
# endif
#endif
/* EMAC0 Configuration ******************************************************/
@ -2544,11 +2556,11 @@ static int sam_emac_interrupt(struct sam_emac_s *priv)
/* Cancel any pending poll work */
work_cancel(HPWORK, &priv->work);
work_cancel(ETHWORK, &priv->work);
/* Schedule to perform the interrupt processing on the worker thread. */
work_queue(HPWORK, &priv->work, sam_interrupt_work, priv, 0);
work_queue(ETHWORK, &priv->work, sam_interrupt_work, priv, 0);
#else
/* Process the interrupt now */
@ -2691,11 +2703,11 @@ static void sam_txtimeout_expiry(int argc, uint32_t arg, ...)
* on work that has already been started.
*/
work_cancel(HPWORK, &priv->work);
work_cancel(ETHWORK, &priv->work);
/* Schedule to perform the TX timeout processing on the worker thread. */
work_queue(HPWORK, &priv->work, sam_txtimeout_work, priv, 0);
work_queue(ETHWORK, &priv->work, sam_txtimeout_work, priv, 0);
#else
/* Process the timeout now */
@ -2802,7 +2814,7 @@ static void sam_poll_expiry(int argc, uint32_t arg, ...)
{
/* Schedule to perform the interrupt processing on the worker thread. */
work_queue(HPWORK, &priv->work, sam_poll_work, priv, 0);
work_queue(ETHWORK, &priv->work, sam_poll_work, priv, 0);
}
else
{
@ -3050,7 +3062,7 @@ static int sam_txavail(struct net_driver_s *dev)
{
/* Schedule to serialize the poll on the worker thread. */
work_queue(HPWORK, &priv->work, sam_txavail_work, priv, 0);
work_queue(ETHWORK, &priv->work, sam_txavail_work, priv, 0);
}
#else

View File

@ -44,26 +44,6 @@
#ifdef CONFIG_NET
/****************************************************************************
* Pre-processor Definitions
****************************************************************************/
/****************************************************************************
* Private Types
****************************************************************************/
/****************************************************************************
* Private Data
****************************************************************************/
/****************************************************************************
* Private Function Prototypes
****************************************************************************/
/****************************************************************************
* Private Functions
****************************************************************************/
/****************************************************************************
* Public Functions
****************************************************************************/

View File

@ -6146,8 +6146,8 @@ config RTC_HSECLOCK
endchoice
if STM32_ETHMAC
menu "Ethernet MAC configuration"
depends on STM32_ETHMAC
config STM32_PHYADDR
int "PHY address"
@ -6351,6 +6351,26 @@ config STM32_RMII_EXTCLK
endchoice
choice
prompt "Work queue"
default STM32_ETHMAC_LPWORK if SCHED_LPWORK
default STM32_ETHMAC_HPWORK if !SCHED_LPWORK && SCHED_HPWORK
depends on SCHED_WORKQUEUE
---help---
Work queue support is required to use the Ethernet driver. If the
low priority work queue is available, then it should be used by the
driver.
config STM32_ETHMAC_HPWORK
bool "High priority"
depends on SCHED_HPWORK
config STM32_ETHMAC_LPWORK
bool "Low priority"
depends on SCHED_LPWORK
endchoice # Work queue
config STM32_ETHMAC_REGDEBUG
bool "Register-Level Debug"
default n
@ -6358,8 +6378,7 @@ config STM32_ETHMAC_REGDEBUG
---help---
Enable very low-level register access debug. Depends on CONFIG_DEBUG_FEATURES.
endmenu
endif
endmenu # Ethernet MAC configuration
menu "USB FS Host Configuration"

View File

@ -93,12 +93,24 @@
# error "Logic to support multiple Ethernet interfaces is incomplete"
#endif
/* If processing is not done at the interrupt level, then high priority
* work queue support is required.
/* If processing is not done at the interrupt level, then work queue support
* is required.
*/
#if defined(CONFIG_NET_NOINTS) && !defined(CONFIG_SCHED_HPWORK)
# error High priority work queue support is required
#if defined(CONFIG_NET_NOINTS) && !defined(CONFIG_SCHED_WORKQUEUE)
# error Work queue support is required
#endif
/* Select work queue */
#if defined(CONFIG_SCHED_WORKQUEUE)
# if defined(CONFIG_STM32_ETHMAC_HPWORK)
# define ETHWORK HPWORK
# elif defined(CONFIG_STM32_ETHMAC_LPWORK)
# define ETHWORK LPWORK
# else
# error Neither CONFIG_STM32_ETHMAC_HPWORK nor CONFIG_STM32_ETHMAC_LPWORK defined
# endif
#endif
#if !defined(CONFIG_STM32_SYSCFG) && !defined(CONFIG_STM32_CONNECTIVITYLINE)
@ -2139,11 +2151,11 @@ static int stm32_interrupt(int irq, FAR void *context)
/* Cancel any pending poll work */
work_cancel(HPWORK, &priv->work);
work_cancel(ETHWORK, &priv->work);
/* Schedule to perform the interrupt processing on the worker thread. */
work_queue(HPWORK, &priv->work, stm32_interrupt_work, priv, 0);
work_queue(ETHWORK, &priv->work, stm32_interrupt_work, priv, 0);
}
#else
@ -2259,11 +2271,11 @@ static void stm32_txtimeout_expiry(int argc, uint32_t arg, ...)
* on work that has already been started.
*/
work_cancel(HPWORK, &priv->work);
work_cancel(ETHWORK, &priv->work);
/* Schedule to perform the TX timeout processing on the worker thread. */
work_queue(HPWORK, &priv->work, stm32_txtimeout_work, priv, 0);
work_queue(ETHWORK, &priv->work, stm32_txtimeout_work, priv, 0);
#else
/* Process the timeout now */
@ -2403,7 +2415,7 @@ static void stm32_poll_expiry(int argc, uint32_t arg, ...)
{
/* Schedule to perform the interrupt processing on the worker thread. */
work_queue(HPWORK, &priv->work, stm32_poll_work, priv, 0);
work_queue(ETHWORK, &priv->work, stm32_poll_work, priv, 0);
}
else
{
@ -2618,7 +2630,7 @@ static int stm32_txavail(struct net_driver_s *dev)
{
/* Schedule to serialize the poll on the worker thread. */
work_queue(HPWORK, &priv->work, stm32_txavail_work, priv, 0);
work_queue(ETHWORK, &priv->work, stm32_txavail_work, priv, 0);
}
#else

View File

@ -4436,8 +4436,8 @@ config STM32F7_ADC3_DMA
endmenu # "ADC Configuration"
if STM32F7_ETHMAC
menu "Ethernet MAC configuration"
depends on STM32F7_ETHMAC
config STM32F7_PHYADDR
int "PHY address"
@ -4619,7 +4619,27 @@ config STM32F7_RMII_EXTCLK
---help---
Clocking is provided by external logic.
endchoice
endchoice # RMII clock configuration
choice
prompt "Work queue"
default STM32F7_ETHMAC_LPWORK if SCHED_LPWORK
default STM32F7_ETHMAC_HPWORK if !SCHED_LPWORK && SCHED_HPWORK
depends on SCHED_WORKQUEUE
---help---
Work queue support is required to use the Ethernet driver. If the
low priority work queue is available, then it should be used by the
driver.
config STM32F7_ETHMAC_HPWORK
bool "High priority"
depends on SCHED_HPWORK
config STM32F7_ETHMAC_LPWORK
bool "Low priority"
depends on SCHED_LPWORK
endchoice # Work queue
config STM32F7_ETHMAC_REGDEBUG
bool "Register-Level Debug"
@ -4628,6 +4648,5 @@ config STM32F7_ETHMAC_REGDEBUG
---help---
Enable very low-level register access debug. Depends on CONFIG_DEBUG_FEATURES.
endmenu
endif # STM32F7_ETHMAC
endmenu # Ethernet MAC configuration
endif # ARCH_CHIP_STM32F7

View File

@ -94,12 +94,24 @@
# error "Logic to support multiple Ethernet interfaces is incomplete"
#endif
/* If processing is not done at the interrupt level, then high priority
* work queue support is required.
/* If processing is not done at the interrupt level, then work queue support
* is required.
*/
#if defined(CONFIG_NET_NOINTS) && !defined(CONFIG_SCHED_HPWORK)
# error High priority work queue support is required
#if defined(CONFIG_NET_NOINTS) && !defined(CONFIG_SCHED_WORKQUEUE)
# error Work queue support is required
#endif
/* Select work queue */
#if defined(CONFIG_SCHED_WORKQUEUE)
# if defined(CONFIG_STM32F7_ETHMAC_HPWORK)
# define ETHWORK HPWORK
# elif defined(CONFIG_STM32F7_ETHMAC_LPWORK)
# define ETHWORK LPWORK
# else
# error Neither CONFIG_STM32F7_ETHMAC_HPWORK nor CONFIG_STM32F7_ETHMAC_LPWORK defined
# endif
#endif
#ifndef CONFIG_STM32F7_PHYADDR
@ -2252,11 +2264,11 @@ static int stm32_interrupt(int irq, void *context)
/* Cancel any pending poll work */
work_cancel(HPWORK, &priv->work);
work_cancel(ETHWORK, &priv->work);
/* Schedule to perform the interrupt processing on the worker thread. */
work_queue(HPWORK, &priv->work, stm32_interrupt_work, priv, 0);
work_queue(ETHWORK, &priv->work, stm32_interrupt_work, priv, 0);
}
#else
@ -2372,11 +2384,11 @@ static void stm32_txtimeout_expiry(int argc, uint32_t arg, ...)
* on work that has already been started.
*/
work_cancel(HPWORK, &priv->work);
work_cancel(ETHWORK, &priv->work);
/* Schedule to perform the TX timeout processing on the worker thread. */
work_queue(HPWORK, &priv->work, stm32_txtimeout_work, priv, 0);
work_queue(ETHWORK, &priv->work, stm32_txtimeout_work, priv, 0);
#else
/* Process the timeout now */
@ -2516,7 +2528,7 @@ static void stm32_poll_expiry(int argc, uint32_t arg, ...)
{
/* Schedule to perform the interrupt processing on the worker thread. */
work_queue(HPWORK, &priv->work, stm32_poll_work, priv, 0);
work_queue(ETHWORK, &priv->work, stm32_poll_work, priv, 0);
}
else
{
@ -2732,7 +2744,7 @@ static int stm32_txavail(struct net_driver_s *dev)
{
/* Schedule to serialize the poll on the worker thread. */
work_queue(HPWORK, &priv->work, stm32_txavail_work, priv, 0);
work_queue(ETHWORK, &priv->work, stm32_txavail_work, priv, 0);
}
#else

View File

@ -1100,6 +1100,25 @@ config TIVA_EMAC_HWCHECKSUM
---help---
Use the hardware checksum capabilities of the Tiva chip
choice
prompt "Work queue"
default TIVA_ETHERNET_LPWORK if SCHED_LPWORK
default TIVA_ETHERNET_HPWORK if !SCHED_LPWORK && SCHED_HPWORK
depends on SCHED_WORKQUEUE
---help---
Work queue support is required to use the Ethernet driver. If the
low priority work queue is available, then it should be used by the
driver.
config TIVA_ETHERNET_HPWORK
bool "High priority"
depends on SCHED_HPWORK
config TIVA_ETHERNET_LPWORK
bool "Low priority"
depends on SCHED_LPWORK
endchoice # Work queue
config TIVA_ETHERNET_REGDEBUG
bool "Register-Level Debug"
default n

View File

@ -98,12 +98,24 @@
# error Logic to support multiple Ethernet interfaces is incomplete
#endif
/* If processing is not done at the interrupt level, then high priority
* work queue support is required.
/* If processing is not done at the interrupt level, then work queue support
* is required.
*/
#if defined(CONFIG_NET_NOINTS) && !defined(CONFIG_SCHED_HPWORK)
# error High priority work queue support is required
#if defined(CONFIG_NET_NOINTS) && !defined(CONFIG_SCHED_WORKQUEUE)
# error Work queue support is required
#endif
/* Select work queue */
#if defined(CONFIG_SCHED_WORKQUEUE)
# if defined(CONFIG_TIVA_ETHERNET_HPWORK)
# define ETHWORK HPWORK
# elif defined(CONFIG_TIVA_ETHERNET_LPWORK)
# define ETHWORK LPWORK
# else
# error Neither CONFIG_TIVA_ETHERNET_HPWORK nor CONFIG_TIVA_ETHERNET_LPWORK defined
# endif
#endif
/* Are we using the internal PHY or an external PHY? */
@ -2167,11 +2179,11 @@ static int tiva_interrupt(int irq, FAR void *context)
/* Cancel any pending poll work */
work_cancel(HPWORK, &priv->work);
work_cancel(ETHWORK, &priv->work);
/* Schedule to perform the interrupt processing on the worker thread. */
work_queue(HPWORK, &priv->work, tiva_interrupt_work, priv, 0);
work_queue(ETHWORK, &priv->work, tiva_interrupt_work, priv, 0);
}
#else
@ -2303,11 +2315,11 @@ static void tiva_txtimeout_expiry(int argc, uint32_t arg, ...)
* on work that has already been started.
*/
work_cancel(HPWORK, &priv->work);
work_cancel(ETHWORK, &priv->work);
/* Schedule to perform the TX timeout processing on the worker thread. */
work_queue(HPWORK, &priv->work, tiva_txtimeout_work, priv, 0);
work_queue(ETHWORK, &priv->work, tiva_txtimeout_work, priv, 0);
#else
/* Process the timeout now */
@ -2447,7 +2459,7 @@ static void tiva_poll_expiry(int argc, uint32_t arg, ...)
{
/* Schedule to perform the interrupt processing on the worker thread. */
work_queue(HPWORK, &priv->work, tiva_poll_work, priv, 0);
work_queue(ETHWORK, &priv->work, tiva_poll_work, priv, 0);
}
else
{
@ -2662,7 +2674,7 @@ static int tiva_txavail(struct net_driver_s *dev)
{
/* Schedule to serialize the poll on the worker thread. */
work_queue(HPWORK, &priv->work, tiva_txavail_work, priv, 0);
work_queue(ETHWORK, &priv->work, tiva_txavail_work, priv, 0);
}
#else

View File

@ -24,7 +24,9 @@ choice
default LOOPBACK_HPWORK if !SCHED_LPWORK && SCHED_HPWORK
depends on SCHED_WORKQUEUE
---help---
Work queue support is required to use the LOOPBACK driver. If the low priority work queue is available, then it should be used by the LOOPBACK.
Work queue support is required to use the loopback driver. If the
low priority work queue is available, then it should be used by the
loopback driver.
config LOOPBACK_HPWORK
bool "High priority"
@ -245,7 +247,9 @@ choice
default ENC28J60_HPWORK if !SCHED_LPWORK && SCHED_HPWORK
depends on SCHED_WORKQUEUE
---help---
Work queue support is required to use the ENC28J60 driver. If the low priority work queue is available, then it should be used by the ENC28J60.
Work queue support is required to use the ENC28J60 driver. If the
low priority work queue is available, then it should be used by the
ENC28J60 driver.
config ENC28J60_HPWORK
bool "High priority"
@ -332,7 +336,9 @@ choice
default ENCX24J600_HPWORK if !SCHED_LPWORK && SCHED_HPWORK
depends on SCHED_WORKQUEUE
---help---
Work queue support is required to use the ENCX24J600 driver. If the low priority work queue is available, then it should be used by the ENCX24J600.
Work queue support is required to use the ENCX24J600 driver. If the
low priority work queue is available, then it should be used by the
ENCX24J600 driver.
config ENCX24J600_HPWORK
bool "High priority"
@ -444,7 +450,9 @@ choice
default FTMAC100_HPWORK if !SCHED_LPWORK && SCHED_HPWORK
depends on SCHED_WORKQUEUE
---help---
Work queue support is required to use the FTMAC100 driver. If the low priority work queue is available, then it should be used by the FTMAC100.
Work queue support is required to use the FTMAC100 driver. If the
low priority work queue is available, then it should be used by the
FTMAC100 driver.
config FTMAC100_HPWORK
bool "High priority"

View File

@ -247,7 +247,9 @@ choice
default TUN_HPWORK if !SCHED_LPWORK && SCHED_HPWORK
depends on SCHED_WORKQUEUE
---help---
Work queue support is required to use the TUN driver. If the low priority work queue is available, then it should be used by the TUN.
Work queue support is required to use the TUN driver. If the
low priority work queue is available, then it should be used by the
TUN driver.
config TUN_HPWORK
bool "High priority"