summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rwxr-xr-xmisc/tools/kconfig-frontends-3.3.0-1.tar.xzbin0 -> 317488 bytes
-rw-r--r--nuttx/ChangeLog5
-rw-r--r--nuttx/Kconfig478
-rw-r--r--nuttx/Makefile5
-rwxr-xr-xnuttx/arch/arm/src/stm32/stm32_otgfsdev.c248
-rw-r--r--nuttx/arch/sim/Kconfig45
6 files changed, 705 insertions, 76 deletions
diff --git a/misc/tools/kconfig-frontends-3.3.0-1.tar.xz b/misc/tools/kconfig-frontends-3.3.0-1.tar.xz
new file mode 100755
index 0000000000..ffe30991e9
--- /dev/null
+++ b/misc/tools/kconfig-frontends-3.3.0-1.tar.xz
Binary files differ
diff --git a/nuttx/ChangeLog b/nuttx/ChangeLog
index 1a8a34b00e..780b874602 100644
--- a/nuttx/ChangeLog
+++ b/nuttx/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/nuttx/Kconfig b/nuttx/Kconfig
new file mode 100644
index 0000000000..79b318f463
--- /dev/null
+++ b/nuttx/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/nuttx/Makefile b/nuttx/Makefile
index 1f1e4f8b04..a413fb7a29 100644
--- a/nuttx/Makefile
+++ b/nuttx/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/nuttx/arch/arm/src/stm32/stm32_otgfsdev.c b/nuttx/arch/arm/src/stm32/stm32_otgfsdev.c
index 2fe7582a1a..227489bb59 100755
--- a/nuttx/arch/arm/src/stm32/stm32_otgfsdev.c
+++ b/nuttx/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,
@@ -1066,23 +1074,6 @@ static int stm32_dispatchrequest(struct stm32_usbdev_s *priv,
}
/*******************************************************************************
- * 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
*
* Description:
@@ -2226,6 +2217,30 @@ static inline void stm32_rxinterrupt(FAR struct stm32_usbdev_s *priv)
}
/*******************************************************************************
+ * 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
*
* Description:
@@ -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;
}
@@ -2483,10 +2498,10 @@ static int stm32_usbinterrupt(int irq, FAR void *context)
*******************************************************************************/
/*******************************************************************************
- * Name: stm32_epconfigure
+ * Name: stm32_epoutconfigure
*
* Description:
- * Configure endpoint, making it usable
+ * Configure an OUT endpoint, making it usable
*
* Input Parameters:
* ep - the struct usbdev_ep_s instance obtained from allocep()
@@ -2497,63 +2512,86 @@ 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)
+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;
- uint16_t maxsize;
usbtrace(TRACE_EPCONFIGURE, privep->epphy);
DEBUGASSERT(desc->addr == ep->eplog);
- /* Initialise EP capabilities */
-
- maxsize = GETUINT16(desc->mxpacketsize);
-#warning "Missing Logic"
-
/* Setup Endpoint Control Register */
- if (privep->isin)
- {
- /* Reset the data toggles */
+ /* Reset the data toggles */
#warning "Missing logic"
- /* Set the endpoint type */
+ /* 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"
- }
- else
+ switch (eptype)
{
- /* Reset the data toggles */
+ 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"
- /* Set the endpoint type */
+ /* Reset endpoint status */
+
+ privep->stalled = false;
- 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;
- }
+ /* 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 */
@@ -2561,16 +2599,74 @@ static int stm32_epconfigure(FAR struct usbdev_ep_s *ep,
/* Enable the endpoint */
+#warning "Missing logic"
+
+ return OK;
+}
+
+/*******************************************************************************
+ * Name: stm32_epconfigure
+ *
+ * Description:
+ * Configure 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_epconfigure(FAR struct usbdev_ep_s *ep,
+ FAR const struct usb_epdesc_s *desc,
+ bool last)
+{
+ FAR struct stm32_ep_s *privep = (FAR struct stm32_ep_s *)ep;
+ uint16_t maxpacket;
+ uint8_t eptype;
+ int ret;
+
+ usbtrace(TRACE_EPCONFIGURE, privep->epphy);
+ DEBUGASSERT(desc->addr == ep->eplog);
+
+ /* Initialize EP capabilities */
+
+ maxpacket = GETUINT16(desc->mxpacketsize);
+ eptype = desc->attr & USB_EP_ATTR_XFERTYPE_MASK;
+#warning "Missing Logic"
+
+ /* Setup Endpoint Control Register */
+
if (privep->isin)
{
-#warning "Missing logic"
+ ret = stm32_epinconfigure(privep, eptype, maxpacket);
}
else
{
-#warning "Missing logic"
+ ret = stm32_epoutconfigure(privep, eptype, maxpackt);
}
-
- return OK;
+
+ return ret;
+}
+
+/*******************************************************************************
+ * Name: stm32_ep0configure
+ *
+ * Description:
+ * Reset Usb engine
+ *
+ *******************************************************************************/
+
+static void stm32_ep0configure(FAR struct stm32_usbdev_s *priv)
+{
+ /* Enable EP0 IN and OUT */
+
+ (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/nuttx/arch/sim/Kconfig b/nuttx/arch/sim/Kconfig
new file mode 100644
index 0000000000..99650dcbbd
--- /dev/null
+++ b/nuttx/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
+
+