diff --git a/drivers/net/Kconfig b/drivers/net/Kconfig index adf7aa5f1a9..9bb451ab3af 100644 --- a/drivers/net/Kconfig +++ b/drivers/net/Kconfig @@ -16,6 +16,27 @@ config NETDEV_LOOPBACK networking devices that are enabled must be compatible with CONFIG_NET_NOINTS. +if NETDEV_LOOPBACK + +choice + prompt "Work queue" + default LOOPBACK_LPWORK if SCHED_LPWORK + 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. + +config LOOPBACK_HPWORK + bool "High priority" + depends on SCHED_HPWORK + +config LOOPBACK_LPWORK + bool "Low priority" + depends on SCHED_LPWORK + +endchoice # Work queue +endif # NETDEV_LOOPBACK + config NETDEV_TELNET bool "Telnet driver" default n @@ -305,6 +326,24 @@ config ENCX24J600_NRXDESCR The ENC has a relative large packet buffer of 24kB which can be used to buffer multiple packets silmutaneously +choice + prompt "Work queue" + default ENCX24J600_LPWORK if SCHED_LPWORK + 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. + +config ENCX24J600_HPWORK + bool "High priority" + depends on SCHED_HPWORK + +config ENCX24J600_LPWORK + bool "Low priority" + depends on SCHED_LPWORK + +endchoice # Work queue + config ENCX24J600_DUMPPACKET bool "Dump Packets" default n @@ -399,6 +438,24 @@ config FTMAC100_MAC0_ENV_ADDR hex "MAC0 address location" default 0 +choice + prompt "Work queue" + default FTMAC100_LPWORK if SCHED_LPWORK + 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. + +config FTMAC100_HPWORK + bool "High priority" + depends on SCHED_HPWORK + +config FTMAC100_LPWORK + bool "Low priority" + depends on SCHED_LPWORK + +endchoice # Work queue + endif # NET_FTMAC100 menuconfig NET_VNET diff --git a/drivers/net/enc28j60.c b/drivers/net/enc28j60.c index 78da85e04ca..a1c052f73da 100644 --- a/drivers/net/enc28j60.c +++ b/drivers/net/enc28j60.c @@ -138,7 +138,7 @@ /* The ENC28J60 will not do interrupt level processing */ #ifndef CONFIG_NET_NOINTS -# warrning "CONFIG_NET_NOINTS should be set" +# warning "CONFIG_NET_NOINTS should be set" #endif /* Low-level register debug */ diff --git a/drivers/net/encx24j600.c b/drivers/net/encx24j600.c index b829d9cd97e..af415ac6d37 100644 --- a/drivers/net/encx24j600.c +++ b/drivers/net/encx24j600.c @@ -120,8 +120,16 @@ /* We need to have the work queue to handle SPI interrupts */ -#ifndef CONFIG_SCHED_WORKQUEUE +#if !defined(CONFIG_SCHED_WORKQUEUE) # error "Worker thread support is required (CONFIG_SCHED_WORKQUEUE)" +#else +# if defined(CONFIG_ENCX24J600_HPWORK) +# define ENCWORK HPWORK +# elif defined(CONFIG_ENCX24J600_LPWORK) +# define ENCWORK LPWORK +# else +# error "Neither CONFIG_ENCX24J600_HPWORK nor CONFIG_ENCX24J600_LPWORK defined" +# endif #endif /* CONFIG_ENCX24J600_DUMPPACKET will dump the contents of each packet to the console. */ @@ -482,7 +490,7 @@ static inline void enc_setethrst(FAR struct enc_driver_s *priv) { DEBUGASSERT(priv && priv->spi); - /* Select ENC28J60 chip */ + /* Select ENCX24J600 chip */ SPI_SELECT(priv->spi, SPIDEV_ETHERNET, true); @@ -492,7 +500,7 @@ static inline void enc_setethrst(FAR struct enc_driver_s *priv) up_udelay(25); - /* De-select ENC28J60 chip. */ + /* De-select ENCX24J600 chip. */ SPI_SELECT(priv->spi, SPIDEV_ETHERNET, false); enc_cmddump(ENC_SETETHRST); @@ -2017,7 +2025,7 @@ static int enc_interrupt(int irq, FAR void *context) */ priv->lower->disable(priv->lower); - return work_queue(HPWORK, &priv->irqwork, enc_irqworker, (FAR void *)priv, 0); + return work_queue(ENCWORK, &priv->irqwork, enc_irqworker, (FAR void *)priv, 0); } /**************************************************************************** @@ -2109,7 +2117,7 @@ static void enc_txtimeout(int argc, uint32_t arg, ...) * can occur until we restart the Tx timeout watchdog. */ - ret = work_queue(HPWORK, &priv->towork, enc_toworker, (FAR void *)priv, 0); + ret = work_queue(ENCWORK, &priv->towork, enc_toworker, (FAR void *)priv, 0); (void)ret; DEBUGASSERT(ret == OK); } @@ -2204,7 +2212,7 @@ static void enc_polltimer(int argc, uint32_t arg, ...) * occur until we restart the poll timeout watchdog. */ - ret = work_queue(HPWORK, &priv->pollwork, enc_pollworker, (FAR void *)priv, 0); + ret = work_queue(ENCWORK, &priv->pollwork, enc_pollworker, (FAR void *)priv, 0); (void)ret; DEBUGASSERT(ret == OK); } diff --git a/drivers/net/ftmac100.c b/drivers/net/ftmac100.c index 32890af9069..c1fbec650ad 100644 --- a/drivers/net/ftmac100.c +++ b/drivers/net/ftmac100.c @@ -72,12 +72,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 in this configuration (CONFIG_SCHED_WORKQUEUE) +#endif + +/* Use the low priority work queue if possible */ + +#if defined(CONFIG_SCHED_WORKQUEUE) +# if defined(CONFIG_FTMAC100_HPWORK) +# define FTMAWORK HPWORK +# elif defined(CONFIG_FTMAC100_LPWORK) +# define FTMAWORK LPWORK +# else +# error Neither CONFIG_FTMAC100_HPWORK nor CONFIG_FTMAC100_LPWORK defined +# endif #endif /* CONFIG_FTMAC100_NINTERFACES determines the number of physical interfaces @@ -1049,11 +1061,11 @@ static int ftmac100_interrupt(int irq, FAR void *context) /* Cancel any pending poll work */ - work_cancel(HPWORK, &priv->ft_work); + work_cancel(FTMAWORK, &priv->ft_work); /* Schedule to perform the interrupt processing on the worker thread. */ - work_queue(HPWORK, &priv->ft_work, ftmac100_interrupt_work, priv, 0); + work_queue(FTMAWORK, &priv->ft_work, ftmac100_interrupt_work, priv, 0); leave_critical_section(flags); #else @@ -1160,11 +1172,11 @@ static void ftmac100_txtimeout_expiry(int argc, uint32_t arg, ...) * on work that has already been started. */ - work_cancel(HPWORK, &priv->ft_work); + work_cancel(FTMAWORK, &priv->ft_work); /* Schedule to perform the TX timeout processing on the worker thread. */ - work_queue(HPWORK, &priv->ft_work, ftmac100_txtimeout_work, priv, 0); + work_queue(FTMAWORK, &priv->ft_work, ftmac100_txtimeout_work, priv, 0); #else /* Process the timeout now */ @@ -1270,7 +1282,7 @@ static void ftmac100_poll_expiry(int argc, uint32_t arg, ...) { /* Schedule to perform the interrupt processing on the worker thread. */ - work_queue(HPWORK, &priv->ft_work, ftmac100_poll_work, priv, 0); + work_queue(FTMAWORK, &priv->ft_work, ftmac100_poll_work, priv, 0); } else { @@ -1491,7 +1503,7 @@ static int ftmac100_txavail(struct net_driver_s *dev) { /* Schedule to serialize the poll on the worker thread. */ - work_queue(HPWORK, &priv->ft_work, ftmac100_txavail_work, priv, 0); + work_queue(FTMAWORK, &priv->ft_work, ftmac100_txavail_work, priv, 0); } #else diff --git a/drivers/net/loopback.c b/drivers/net/loopback.c index f0aa532a016..a9c1b6a819c 100644 --- a/drivers/net/loopback.c +++ b/drivers/net/loopback.c @@ -67,12 +67,24 @@ * Pre-processor Definitions ****************************************************************************/ +/* Non-network-driven configuration is required */ + #ifndef CONFIG_NET_NOINTS # error CONFIG_NET_NOINTS must be selected #endif -#ifndef CONFIG_SCHED_HPWORK -# error High priority work queue support is required (CONFIG_SCHED_HPWORK) +/* We need to have the work queue to handle SPI interrupts */ + +#if !defined(CONFIG_SCHED_WORKQUEUE) +# error Worker thread support is required (CONFIG_SCHED_WORKQUEUE) +#else +# if defined(CONFIG_LOOPBACK_HPWORK) +# define LPBKWORK HPWORK +# elif defined(CONFIG_LOOPBACK_LPWORK) +# define LPBKWORK LPWORK +# else +# error Neither CONFIG_LOOPBACK_HPWORK nor CONFIG_LOOPBACK_LPWORK defined +# endif #endif /* TX poll delay = 1 seconds. CLK_TCK is the number of clock ticks per second */ @@ -289,7 +301,7 @@ static void lo_poll_expiry(int argc, wdparm_t arg, ...) { /* Schedule to perform the interrupt processing on the worker thread. */ - work_queue(HPWORK, &priv->lo_work, lo_poll_work, priv, 0); + work_queue(LPBKWORK, &priv->lo_work, lo_poll_work, priv, 0); } else { @@ -444,7 +456,7 @@ static int lo_txavail(FAR struct net_driver_s *dev) { /* Schedule to serialize the poll on the worker thread. */ - work_queue(HPWORK, &priv->lo_work, lo_txavail_work, priv, 0); + work_queue(LPBKWORK, &priv->lo_work, lo_txavail_work, priv, 0); } return OK; diff --git a/drivers/net/skeleton.c b/drivers/net/skeleton.c index 82568cb0915..ea24cf688c2 100644 --- a/drivers/net/skeleton.c +++ b/drivers/net/skeleton.c @@ -67,12 +67,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 in this configuration (CONFIG_SCHED_WORKQUEUE) +#endif + +/* Use the low priority work queue if possible */ + +#if defined(CONFIG_SCHED_WORKQUEUE) +# if defined(CONFIG_skeleton_HPWORK) +# define skelWORK HPWORK +# elif defined(CONFIG_skeleton_LPWORK) +# define skelWORK LPWORK +# else +# error Neither CONFIG_skeleton_HPWORK nor CONFIG_skeleton_LPWORK defined +# endif #endif /* CONFIG_skeleton_NINTERFACES determines the number of physical interfaces @@ -598,7 +610,7 @@ static int skel_interrupt(int irq, FAR void *context) /* Schedule to perform the interrupt processing on the worker thread. */ - work_queue(HPWORK, &priv->sk_work, skel_interrupt_work, priv, 0); + work_queue(skelWORK, &priv->sk_work, skel_interrupt_work, priv, 0); #else /* Process the interrupt now */ @@ -705,11 +717,11 @@ static void skel_txtimeout_expiry(int argc, wdparm_t arg, ...) * on work that has already been started. */ - work_cancel(HPWORK, &priv->sk_work); + work_cancel(skelWORK, &priv->sk_work); /* Schedule to perform the TX timeout processing on the worker thread. */ - work_queue(HPWORK, &priv->sk_work, skel_txtimeout_work, priv, 0); + work_queue(skelWORK, &priv->sk_work, skel_txtimeout_work, priv, 0); #else /* Process the timeout now */ @@ -815,7 +827,7 @@ static void skel_poll_expiry(int argc, wdparm_t arg, ...) { /* Schedule to perform the interrupt processing on the worker thread. */ - work_queue(HPWORK, &priv->sk_work, skel_poll_work, priv, 0); + work_queue(skelWORK, &priv->sk_work, skel_poll_work, priv, 0); } else { @@ -1026,7 +1038,7 @@ static int skel_txavail(FAR struct net_driver_s *dev) { /* Schedule to serialize the poll on the worker thread. */ - work_queue(HPWORK, &priv->sk_work, skel_txavail_work, priv, 0); + work_queue(skelWORK, &priv->sk_work, skel_txavail_work, priv, 0); } #else diff --git a/drivers/net/tun.c b/drivers/net/tun.c index b4938c4e506..aaa411a613c 100644 --- a/drivers/net/tun.c +++ b/drivers/net/tun.c @@ -79,8 +79,18 @@ * 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 in this configuration (CONFIG_SCHED_WORKQUEUE) +#endif + +#if defined(CONFIG_SCHED_WORKQUEUE) +# if defined(CONFIG_TUN_HPWORK) +# define TUNWORK HPWORK +# elif defined(CONFIG_TUN_LPWORK) +# define TUNWORK LPWORK +# else +# error "Neither CONFIG_TUN_HPWORK nor CONFIG_TUN_LPWORK defined" +# endif #endif /* CONFIG_TUN_NINTERFACES determines the number of physical interfaces @@ -622,9 +632,9 @@ static void tun_poll_expiry(int argc, wdparm_t arg, ...) if (work_available(&priv->work)) { - /* Schedule to perform the interrupt processing on the worker thread. */ + /* Schedule to perform the timer expiration on the worker thread. */ - work_queue(HPWORK, &priv->work, tun_poll_work, priv, 0); + work_queue(TUNWORK, &priv->work, tun_poll_work, priv, 0); } else { diff --git a/net/Kconfig b/net/Kconfig index 733e993f9dc..2c1aecd2911 100644 --- a/net/Kconfig +++ b/net/Kconfig @@ -117,17 +117,6 @@ config NET_SLIP_TCP_RECVWNDO incoming data, or high (32768 bytes) if the application processes data quickly. -config NET_TUN_MTU - int "TUN packet buffer size (MTU)" - default 296 - depends on NET_TUN - range 296 1518 - -config NET_TUN_TCP_RECVWNDO - int "TUN TCP receive window size" - default 256 - depends on NET_TUN && NET_TCP - config NET_GUARDSIZE int "Driver I/O guard size" default 2 @@ -242,6 +231,33 @@ config TUN_NINTERFACES interfaces to support. Default: 1 +config NET_TUN_MTU + int "TUN packet buffer size (MTU)" + default 296 + range 296 1518 + +config NET_TUN_TCP_RECVWNDO + int "TUN TCP receive window size" + default 256 + depends on NET_TCP + +choice + prompt "Work queue" + default LOOPBACK_LPWORK if SCHED_LPWORK + 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. + +config TUN_HPWORK + bool "High priority" + depends on SCHED_HPWORK + +config TUN_LPWORK + bool "Low priority" + depends on SCHED_LPWORK + +endchoice # Work queue endif # NET_TUN endmenu # Data link support