From 6871cc66ad53a7b8d5c9b3285c455b2a70261aa7 Mon Sep 17 00:00:00 2001 From: patacongo Date: Thu, 5 Apr 2012 17:44:04 +0000 Subject: [PATCH] Beginning of a NuttX configuration tool git-svn-id: svn://svn.code.sf.net/p/nuttx/code/trunk@4560 42af7a65-404d-4744-a932-0658087f49c3 --- ChangeLog | 5 + Kconfig | 478 ++++++++++++++++++++++++++++ Makefile | 5 + arch/arm/src/stm32/stm32_otgfsdev.c | 260 ++++++++++----- arch/sim/Kconfig | 45 +++ 5 files changed, 711 insertions(+), 82 deletions(-) create mode 100644 Kconfig create mode 100644 arch/sim/Kconfig diff --git a/ChangeLog b/ChangeLog index 1a8a34b00e..780b874602 100644 --- a/ChangeLog +++ b/ChangeLog @@ -2615,3 +2615,8 @@ * fs/fs_read.c: Fix read() return value for attempt to read from write-only file or device. Was returning EBADF, should return EACCES. * graphics/nxconsole.c: NxConsole now supports backspace and a cursor. + * Kconfig and arch/sim/Kconfig: Beginnings of support for a NuttX + configuration tool. Currently using the kconfig parser 'kconfig-frontend' + available at http://ymorin.is-a-geek.org/projects/kconfig-frontends + (version 3.3.0-1 is also available in the NuttX SVN at + trunk/misc/tools/kconfig-frontends-3.3.0-1.tar.xz diff --git a/Kconfig b/Kconfig new file mode 100644 index 0000000000..79b318f463 --- /dev/null +++ b/Kconfig @@ -0,0 +1,478 @@ +# +# For a description of the syntax of this configuration file, +# see Documentation/kbuild/kconfig-language.txt. +# +mainmenu "Nuttx/$ARCH Configuration" + +config SRCARCH + string + option env="SRCARCH" + +menu "General setup" +config EXPERIMENTAL + bool "Prompt for development and/or incomplete code/drivers" + +comment "General build options" + +config RRLOAD_BINARY + bool "rrload binary format" + default "n" +config INTELHEX_BINARY + bool "Intel HEX binary format" + default "n" +config MOTOROLA_SREC + bool "Motorola S-Record binary format" + default "n" +config RAW_BINARY + bool "raw binary format" + default "n" +config HAVE_LIBM + bool "supports libm.a" + default "n" + +comment "General debug options" + +config DEBUG + bool "enable debug" + default "n" +config DEBUG_VERBOSE + bool "enable verbose debug output" + depends on DEBUG + default "n" +config DEBUG_SYMBOLS + bool "build with debug symbols" + default "n" + +endmenu + +menu "System Type" +source "arch/$SRCARCH/Kconfig" + +config ARCH_LOWPUTC + bool "low-level console output" + default "y" + ---help--- + architecture supports low-level, boot time console output + +comment "Architecture optimized function" + +config ARCH_MEMCPY + bool "memcpy" + default n +config ARCH_MEMCMP + bool "memcmp" + default n +config ARCH_MEMMOVE + bool "memmove" + default n +config ARCH_MEMSET + bool "memset" + default n +config ARCH_STRCMP + bool "strcmp" + default n +config ARCH_STRCPY + bool "strcpy" + default n +config ARCH_STRNCPY + bool "strncpy" + default n +config ARCH_STRLEN + bool "strlen" + default n +config ARCH_STRNLEN + bool "strlen" + default n +config ARCH_BZERO + bool "bzero" + default n + +endmenu + +menu "Kernel Features" +config MM_REGIONS + int "number of memory regions" + default 1 + ---help--- + If the architecture includes multiple + regions of memory to allocate from, this specifies the + number of memory regions that the memory manager must + handle and enables the API mm_addregion(start, end); + +config MSEC_PER_TICK + int "tick timer" + default 10 + ---help--- + The default system timer is 100Hz + or MSEC_PER_TICK=10. This setting may be defined to + inform NuttX that the processor hardware is providing + system timer interrupts at some interrupt interval other + than 10 msec. + +config RR_INTERVAL + int "round robin timeslice" + default 0 + ---help--- + The round robin timeslice will be set + this number of milliseconds; Round robin scheduling can + be disabled by setting this value to zero. + +config SCHED_INSTRUMENTATION + bool "monitor system performance" + default n + ---help--- + enables instrumentation in + scheduler to monitor system performance + +config TASK_NAME_SIZE + int "task name size" + default 32 + ---help--- + Spcifies that maximum size of a + task name to save in the TCB. Useful if scheduler + instrumentation is selected. Set to zero to disable. + +config JULIAN_TIME + bool "Enables Julian time conversions" + default n + ---help--- + Enables Julian time conversions + +config START_YEAR + int "start year" + default 2010 + +config START_MONTH + int "start month" + default 1 + +config START_DAY + int "start day" + default 1 + +config DEV_CONSOLE + bool "enable /dev/console" + default y + ---help--- + Set if architecture-specific logic + provides /dev/console. Enables stdout, stderr, stdin. + +config DEV_LOWCONSOLE + bool "enable low-level serial console" + default n + ---help--- + Use the simple, low-level serial console + driver (minimul support) + +config MUTEX_TYPES: + bool "enable mutex types" + default n + ---help--- + Set to enable support for recursive and + errorcheck mutexes. Enables pthread_mutexattr_settype(). + +config PRIORITY_INHERITANCE + bool "enable priority inheritance " + default n + ---help--- + Set to enable support for priority + inheritance on mutexes and semaphores. + +config SEM_PREALLOCHOLDERS + int "pre alloc holders" + default 16 + depends on PRIORITY_INHERITANCE + ---help--- + This setting is only used if priority + inheritance is enabled. It defines the maximum number of + different threads (minus one) that can take counts on a + semaphore with priority inheritance support. This may be + set to zero if priority inheritance is disabled OR if you + are only using semaphores as mutexes (only one holder) OR + if no more than two threads participate using a counting + semaphore. + +config SEM_NNESTPRIO + int "maximum number of higher priority threads" + default 16 + depends on PRIORITY_INHERITANCE + ---help--- + If priority inheritance is enabled, + then this setting is the maximum number of higher priority + threads (minus 1) than can be waiting for another thread + to release a count on a semaphore. This value may be set + to zero if no more than one thread is expected to wait for + a semaphore. + +config FDCLONE_DISABLE + bool "disable clone all file descriptors" + default n + ---help--- + Disable cloning of all file descriptors + by task_create() when a new task is started. If set, all + files/drivers will appear to be closed in the new task. + +config FDCLONE_STDIO + bool "disable clone file descriptors without stdio" + default n + ---help--- + Disable cloning of all but the first + three file descriptors (stdin, stdout, stderr) by task_create() + when a new task is started. If set, all files/drivers will + appear to be closed in the new task except for stdin, stdout, + and stderr. + +config SDCLONE_DISABLE + bool "disable cloning of all socket" + default n + ---help--- + Disable cloning of all socket + desciptors by task_create() when a new task is started. If + set, all sockets will appear to be closed in the new task. + +config DISABLE_OS_API + bool "disable os api" + default n + ---help--- + The following can be used to disable categories of + APIs supported by the OS. If the compiler supports + weak functions, then it should not be necessary to + disable functions unless you want to restrict usage + of those APIs. + + There are certain dependency relationships in these + features. + + o mq_notify logic depends on signals to awaken tasks + waiting for queues to become full or empty. + o pthread_condtimedwait() depends on signals to wake + up waiting tasks. + +config DISABLE_CLOCK + bool "disable clock" + depends on DISABLE_OS_API + default n + +config DISABLE_POSIX_TIMERS + bool "disable posix timers" + depends on DISABLE_OS_API + default n + +config DISABLE_PTHREAD + bool "disable pthread" + depends on DISABLE_OS_API + default n + +config DISABLE_SIGNALS + bool "disable signals" + depends on DISABLE_OS_API + default n + +config DISABLE_MQUEUE + bool "disable mqueue" + depends on DISABLE_OS_API + default n + +config DISABLE_MOUNTPOINT + bool "disable mount point" + depends on DISABLE_OS_API + default n + +config DISABLE_ENVIRON + bool "disable environ" + depends on DISABLE_OS_API + default n + +config DISABLE_POLL + bool "disable poll" + depends on DISABLE_OS_API + default n + +comment "Sizes of configurable things (0 disables)" + +config MAX_TASKS + int "max tasks" + default 32 + ---help--- + The maximum number of simultaneously + active tasks. This value must be a power of two. + +config MAX_TASK_ARGS + int "max task args" + default 4 + ---help--- + This controls the maximum number of + of parameters that a task may receive (i.e., maxmum value + of 'argc') + +config NPTHREAD_KEYS + int "number pthread keys" + default 4 + ---help--- + The number of items of thread- + specific data that can be retained + +config NFILE_DESCRIPTORS + int "max file descriptors" + default 16 + ---help--- + The maximum number of file + descriptors (one for each open) + +config NFILE_STREAMS + int "max file streams" + default 16 + ---help--- + The maximum number of streams that + can be fopen'ed + +config NAME_MAX + int "name max" + default 32 + ---help--- + The maximum size of a file name. + +config STDIO_BUFFER_SIZE + int "stdio buffer size" + default 256 + ---help--- + Size of the buffer to allocate + on fopen. (Only if config _NFILE_STREAMS > 0) + +config NUNGET_CHARS + int "number get chars" + default 2 + ---help--- + Number of characters that can be + buffered by ungetc() (Only if config _NFILE_STREAMS > 0) + +config PREALLOC_MQ_MSGS + int "pre alloc mq_msgs" + default 32 + ---help--- + The number of pre-allocated message + structures. The system manages a pool of preallocated + message structures to minimize dynamic allocations + +config MQ_MAXMSGSIZE + int "mq max message size" + default 32 + ---help--- + Message structures are allocated with + a fixed payload size given by this settin (does not include + other message structure overhead. + +config MAX_WDOGPARMS + int "max watchdog parms" + default 4 + ---help--- + Maximum number of parameters that + can be passed to a watchdog handler + +config PREALLOC_WDOGS + int "pre alloc watchdogs" + default 32 + ---help--- + The number of pre-allocated watchdog + structures. The system manages a pool of preallocated + watchdog structures to minimize dynamic allocations + +config PREALLOC_TIMERS + int "pre alloc timers" + default 8 + ---help--- + The number of pre-allocated POSIX + timer structures. The system manages a pool of preallocated + timer structures to minimize dynamic allocations. Set to + zero for all dynamic allocations. + + +comment "Stack and heap information" + +config BOOT_RUNFROMFLASH + bool "boot run from flash" + default n + ---help--- + Some configurations support XIP + operation from FLASH but must copy initialized .data sections to RAM. + (should also be =n for the LPC17xx which always runs from flash) + +config BOOT_COPYTORAM + bool "boot copy to ram" + default n + ---help--- + Some configurations boot in FLASH + but copy themselves entirely into RAM for better performance. + +config CUSTOM_STACK + bool "enable custom stack" + default n + ---help--- + The up_ implementation will handle + all stack operations outside of the nuttx model. + +config STACK_POINTER + hex "" + default 0 + ---help--- + The initial stack pointer (arm7tdmi only) + +config IDLETHREAD_STACKSIZE + int "idle thread stack size" + default 1024 + ---help--- + The size of the initial stack. + This is the thread that (1) performs the inital boot of the system up + to the point where user_start() is spawned, and (2) there after is the + IDLE thread that executes only when there is no other thread ready to + run. + +config USERMAIN_STACKSIZE + int "main thread stack size" + default 2048 + ---help--- + The size of the stack to allocate + for the main user thread that begins at the user_start() entry point. + +config PTHREAD_STACK_MIN + int "minimum thrad stack size" + default 256 + ---help--- + Minimum pthread stack size + +config PTHREAD_STACK_DEFAULT + int "default stack size" + default 2048 + ---help--- + Default pthread stack size + +endmenu + +menu "Device Drivers" +#source drivers/Kconfig +endmenu + +menuconfig NET + bool "Networking support" + default "m" +if NET +#source net/Kconfig +endif + +menu "File systems" +#source fs/Kconfig +endmenu + +menu "Library routines" +config NOPRINTF_FIELDWIDTH + bool "disable sprintf support fieldwidth" + default n + ---help--- + sprintf-related logic is a + little smaller if we do not support fieldwidthes + +endmenu + +menu "Application setup" + +endmenu diff --git a/Makefile b/Makefile index 1f1e4f8b04..a413fb7a29 100644 --- a/Makefile +++ b/Makefile @@ -589,3 +589,8 @@ ifneq ($(APPDIR),) @mv _SAVED_APPS_config "$(TOPDIR)/$(APPDIR)/.config" || \ { echo "Copy of _SAVED_APPS_config failed" ; exit 1 ; } endif + +ARCH ?=sim +menuconfig: + SRCARCH=${ARCH} mconf Kconfig + diff --git a/arch/arm/src/stm32/stm32_otgfsdev.c b/arch/arm/src/stm32/stm32_otgfsdev.c index 2fe7582a1a..227489bb59 100755 --- a/arch/arm/src/stm32/stm32_otgfsdev.c +++ b/arch/arm/src/stm32/stm32_otgfsdev.c @@ -365,20 +365,21 @@ static bool stm32_addlast(FAR struct stm32_ep_s *privep, /* Low level data transfers and request operations *****************************/ -static inline void stm32_ep0xfer(uint8_t epphy, uint8_t *data, uint32_t nbytes); +static inline void stm32_ep0xfer(uint8_t epphy, FAR uint8_t *data, uint32_t nbytes); static void stm32_ep0read(FAR uint8_t *dest, uint16_t len); -static void stm32_flushep(struct stm32_ep_s *privep); +static void stm32_flushep(FAR struct stm32_ep_s *privep); -static inline void stm32_abortrequest(struct stm32_ep_s *privep, - struct stm32_req_s *privreq, int16_t result); -static void stm32_reqcomplete(struct stm32_ep_s *privep, int16_t result); +static inline void stm32_abortrequest(FAR struct stm32_ep_s *privep, + FAR struct stm32_req_s *privreq, int16_t result); +static void stm32_reqcomplete(FAR struct stm32_ep_s *privep, int16_t result); -static int stm32_wrrequest(struct stm32_usbdev_s *priv, - struct stm32_ep_s *privep); -static int stm32_rdrequest(struct stm32_usbdev_s *priv, - struct stm32_ep_s *privep); -static void stm32_cancelrequests(struct stm32_ep_s *privep, int16_t status); +static int stm32_wrrequest(FAR struct stm32_usbdev_s *priv, + FAR struct stm32_ep_s *privep); +static int stm32_rdrequest(FAR struct stm32_usbdev_s *priv, + FAR struct stm32_ep_s *privep); +static void stm32_cancelrequests(FAR struct stm32_ep_s *privep, + int16_t status); /* Interrupt handling **********************************************************/ @@ -386,7 +387,6 @@ static struct stm32_ep_s *stm32_epfindbyaddr(struct stm32_usbdev_s *priv, uint16_t eplog); static int stm32_dispatchrequest(struct stm32_usbdev_s *priv, const struct usb_ctrlreq_s *ctrl); -static void stm32_ep0configure(struct stm32_usbdev_s *priv); static void stm32_usbreset(struct stm32_usbdev_s *priv); static void stm32_ep0complete(struct stm32_usbdev_s *priv, uint8_t epphy); @@ -416,6 +416,7 @@ static inline void stm32_epininterrupt(FAR struct stm32_usbdev_s *priv); static inline void stm32_resumeinterrupt(FAR struct stm32_usbdev_s *priv); static inline void stm32_suspendinterrupt(FAR struct stm32_usbdev_s *priv); static inline void stm32_rxinterrupt(FAR struct stm32_usbdev_s *priv); +static inline void stm32_resetinterrupt(FAR struct stm32_usbdev_s *priv); static inline void stm32_enuminterrupt(FAR struct stm32_usbdev_s *priv); #ifdef CONFIG_USBDEV_ISOCHRONOUS static inline void stm32_isocininterrupt(FAR struct stm32_usbdev_s *priv); @@ -431,9 +432,16 @@ static inline void stm32_otginterrupt(FAR struct stm32_usbdev_s *priv); static int stm32_usbinterrupt(int irq, FAR void *context); /* Endpoint operations *********************************************************/ +/* Endpoint configuration */ +static int stm32_epoutconfigure(FAR struct usbdev_ep_s *privep, + uint8_t eptype, uint16_t maxpacket); +static int stm32_epinconfigure(FAR struct usbdev_ep_s *privep, + uint8_t eptype, uint16_t maxpacket); static int stm32_epconfigure(FAR struct usbdev_ep_s *ep, - const struct usb_epdesc_s *desc, bool last); + FAR const struct usb_epdesc_s *desc, bool last); +static void stm32_ep0configure(FAR struct stm32_usbdev_s *priv); + static int stm32_epdisable(FAR struct usbdev_ep_s *ep); static FAR struct usbdev_req_s *stm32_epallocreq(FAR struct usbdev_ep_s *ep); static void stm32_epfreereq(FAR struct usbdev_ep_s *ep, @@ -1065,23 +1073,6 @@ static int stm32_dispatchrequest(struct stm32_usbdev_s *priv, return ret; } -/******************************************************************************* - * Name: stm32_ep0configure - * - * Description: - * Reset Usb engine - * - *******************************************************************************/ - -static void stm32_ep0configure(struct stm32_usbdev_s *priv) -{ - /* Enable ep0 IN and ep0 OUT */ -#warning "Missing Logic" - - /* Enable EP0 */ -#warning "Missing Logic" -} - /******************************************************************************* * Name: stm32_usbreset * @@ -2225,6 +2216,30 @@ static inline void stm32_rxinterrupt(FAR struct stm32_usbdev_s *priv) #warning "Missing logic" } +/******************************************************************************* + * Name: stm32_resetinterrupt + * + * Description: + * USB reset interrupt + * + *******************************************************************************/ + +static inline void stm32_resetinterrupt(FAR struct stm32_usbdev_s *priv) +{ + /* Perform the device reset */ +#warning "Reset hardware?" + + /* Re-configure EP0 */ + + stm32_ep0configure(priv); + + /* And put the device back in the initial state (no address, no + * configuration). + */ + + priv->devstate = DEVSTATE_DEFAULT; +} + /******************************************************************************* * Name: stm32_isocininterrupt * @@ -2420,7 +2435,7 @@ static int stm32_usbinterrupt(int irq, FAR void *context) if ((regval & OTGFS_GINT_USBRST) != 0) { usbtrace(TRACE_INTDECODE(STM32_TRACEINTID_DEVRESET), (uint16_t)regval); - stm32_usbreset(priv); + stm32_resetinterrupt(priv); usbtrace(TRACE_INTEXIT(STM32_TRACEINTID_USB), 0); return OK; } @@ -2482,6 +2497,113 @@ static int stm32_usbinterrupt(int irq, FAR void *context) * Endpoint operations *******************************************************************************/ +/******************************************************************************* + * Name: stm32_epoutconfigure + * + * Description: + * Configure an OUT endpoint, making it usable + * + * Input Parameters: + * ep - the struct usbdev_ep_s instance obtained from allocep() + * desc - A struct usb_epdesc_s instance describing the endpoint + * last - true if this this last endpoint to be configured. Some hardware + * needs to take special action when all of the endpoints have been + * configured. + * + *******************************************************************************/ + +static int stm32_epoutconfigure(FAR struct usbdev_ep_s *privep, uint8_t eptype, + uint16_t maxpacket) +{ + FAR struct stm32_ep_s *privep = (FAR struct stm32_ep_s *)ep; + + usbtrace(TRACE_EPCONFIGURE, privep->epphy); + DEBUGASSERT(desc->addr == ep->eplog); + + /* Setup Endpoint Control Register */ + + /* Reset the data toggles */ +#warning "Missing logic" + + /* Set the endpoint type */ + + switch (eptype) + { + case USB_EP_ATTR_XFER_CONTROL: + break; + case USB_EP_ATTR_XFER_ISOC: + break; + case USB_EP_ATTR_XFER_BULK: + break; + case USB_EP_ATTR_XFER_INT: + break; + } +#warning "Missing logic" + + /* Reset endpoint status */ + + privep->stalled = false; + + /* Enable the endpoint */ + +#warning "Missing logic" + return OK; +} + +/******************************************************************************* + * Name: stm32_epinconfigure + * + * Description: + * Configure an IN endpoint, making it usable + * + * Input Parameters: + * ep - the struct usbdev_ep_s instance obtained from allocep() + * desc - A struct usb_epdesc_s instance describing the endpoint + * last - true if this this last endpoint to be configured. Some hardware + * needs to take special action when all of the endpoints have been + * configured. + * + *******************************************************************************/ + +static int stm32_epinconfigure(FAR struct usbdev_ep_s *privep, uint8_t eptype, + uint16_t maxpacket) +{ + FAR struct stm32_ep_s *privep = (FAR struct stm32_ep_s *)ep; + + usbtrace(TRACE_EPCONFIGURE, privep->epphy); + DEBUGASSERT(desc->addr == ep->eplog); + + /* Setup Endpoint Control Register */ + + /* Reset the data toggles */ +#warning "Missing logic" + + /* Set the endpoint type */ + + switch (eptype) + { + case USB_EP_ATTR_XFER_CONTROL: + break; + case USB_EP_ATTR_XFER_ISOC: + break; + case USB_EP_ATTR_XFER_BULK: + break; + case USB_EP_ATTR_XFER_INT: + break; + } +#warning "Missing logic" + + /* Reset endpoint status */ + + privep->stalled = false; + + /* Enable the endpoint */ + +#warning "Missing logic" + + return OK; +} + /******************************************************************************* * Name: stm32_epconfigure * @@ -2498,79 +2620,53 @@ static int stm32_usbinterrupt(int irq, FAR void *context) *******************************************************************************/ static int stm32_epconfigure(FAR struct usbdev_ep_s *ep, - FAR const struct usb_epdesc_s *desc, - bool last) + FAR const struct usb_epdesc_s *desc, + bool last) { FAR struct stm32_ep_s *privep = (FAR struct stm32_ep_s *)ep; - uint16_t maxsize; + uint16_t maxpacket; + uint8_t eptype; + int ret; usbtrace(TRACE_EPCONFIGURE, privep->epphy); DEBUGASSERT(desc->addr == ep->eplog); - /* Initialise EP capabilities */ + /* Initialize EP capabilities */ - maxsize = GETUINT16(desc->mxpacketsize); + maxpacket = GETUINT16(desc->mxpacketsize); + eptype = desc->attr & USB_EP_ATTR_XFERTYPE_MASK; #warning "Missing Logic" /* Setup Endpoint Control Register */ if (privep->isin) { - /* Reset the data toggles */ -#warning "Missing logic" - - /* Set the endpoint type */ - - switch (desc->attr & USB_EP_ATTR_XFERTYPE_MASK) - { - case USB_EP_ATTR_XFER_CONTROL: - break; - case USB_EP_ATTR_XFER_ISOC: - break; - case USB_EP_ATTR_XFER_BULK: - break; - case USB_EP_ATTR_XFER_INT: - break; - } -#warning "Missing logic" + ret = stm32_epinconfigure(privep, eptype, maxpacket); } else { - /* Reset the data toggles */ -#warning "Missing logic" - - /* Set the endpoint type */ - - switch (desc->attr & USB_EP_ATTR_XFERTYPE_MASK) - { - case USB_EP_ATTR_XFER_CONTROL: - break; - case USB_EP_ATTR_XFER_ISOC: - break; - case USB_EP_ATTR_XFER_BULK: - break; - case USB_EP_ATTR_XFER_INT: - break; - } -#warning "Missing logic" + ret = stm32_epoutconfigure(privep, eptype, maxpackt); } - /* Reset endpoint status */ + return ret; +} - privep->stalled = false; +/******************************************************************************* + * Name: stm32_ep0configure + * + * Description: + * Reset Usb engine + * + *******************************************************************************/ - /* Enable the endpoint */ +static void stm32_ep0configure(FAR struct stm32_usbdev_s *priv) +{ + /* Enable EP0 IN and OUT */ - if (privep->isin) - { -#warning "Missing logic" - } - else - { -#warning "Missing logic" - } - - return OK; + (void)stm32_epinconfigure(&priv->epin[EP0], USB_EP_ATTR_XFER_CONTROL, + CONFIG_USBDEV_EP0_MAXSIZE); + (void)stm32_epoutconfigure(&priv->epout[EP0], USB_EP_ATTR_XFER_CONTROL, + CONFIG_USBDEV_EP0_MAXSIZE); } /******************************************************************************* diff --git a/arch/sim/Kconfig b/arch/sim/Kconfig new file mode 100644 index 0000000000..99650dcbbd --- /dev/null +++ b/arch/sim/Kconfig @@ -0,0 +1,45 @@ +choice + prompt "Simulator system type" + default ARCH_SIM + +config ARCH_SIM + bool "x86 Linux user-mode" + ---help--- + A user-mode port of NuttX to the x86 Linux platform is available. + The purpose of this port is primarily to support OS feature development. + This port does not support interrupts or a real timer (and hence no + round robin scheduler) Otherwise, it is complete. + +endchoice + +config ARCH + string + default "sim" if ARCH_SIM + +choice + prompt "Simulator board type" + default ARCH_BOARD_SIM + +config ARCH_BOARD_SIM + bool "x86 Linux user-mode" + ---help--- + A user-mode port of NuttX to the x86 Linux platform is available. + The purpose of this port is primarily to support OS feature development. + This port does not support interrupts or a real timer (and hence no + round robin scheduler) Otherwise, it is complete. + +endchoice + +config ARCH_BOARD + string + default "sim" if ARCH_BOARD_SIM + +comment "OMAP Board Type" + depends on ARCH_OMAP2PLUS + +config MACH_OMAP_GENERIC + bool "Generic OMAP board" + depends on ARCH_OMAP2 + default y + +