mirror of
https://github.com/PX4/PX4-Autopilot.git
synced 2026-06-05 14:17:20 +08:00
Merge branch 'NuttX/master'
Conflicts: apps/netutils/thttpd/thttpd_cgi.c nuttx/Documentation/NuttX.html nuttx/arch/8051/src/Makefile nuttx/arch/arm/src/lpc17xx/lpc17_usbhost.c nuttx/arch/avr/Kconfig nuttx/arch/avr/src/atmega/atmega_lowinit.c nuttx/arch/mips/Kconfig nuttx/arch/z80/src/Makefile.sdcc nuttx/configs/amber/README.txt nuttx/configs/amber/hello/defconfig nuttx/configs/avr32dev1/README.txt nuttx/configs/avr32dev1/nsh/defconfig nuttx/configs/avr32dev1/ostest/defconfig nuttx/configs/c5471evm/README.txt nuttx/configs/c5471evm/httpd/defconfig nuttx/configs/c5471evm/nettest/defconfig nuttx/configs/c5471evm/nsh/defconfig nuttx/configs/c5471evm/ostest/defconfig nuttx/configs/compal_e88/nsh_highram/defconfig nuttx/configs/compal_e99/nsh_compalram/defconfig nuttx/configs/compal_e99/nsh_highram/defconfig nuttx/configs/demo9s12ne64/README.txt nuttx/configs/demo9s12ne64/ostest/defconfig nuttx/configs/ea3131/nsh/defconfig nuttx/configs/ea3131/ostest/defconfig nuttx/configs/ea3131/pgnsh/defconfig nuttx/configs/ea3131/usbserial/defconfig nuttx/configs/ea3131/usbstorage/defconfig nuttx/configs/ea3152/ostest/defconfig nuttx/configs/eagle100/README.txt nuttx/configs/eagle100/httpd/defconfig nuttx/configs/eagle100/nettest/defconfig nuttx/configs/eagle100/nsh/defconfig nuttx/configs/eagle100/nxflat/defconfig nuttx/configs/eagle100/ostest/defconfig nuttx/configs/eagle100/thttpd/defconfig nuttx/configs/ekk-lm3s9b96/README.txt nuttx/configs/ekk-lm3s9b96/nsh/defconfig nuttx/configs/ekk-lm3s9b96/ostest/defconfig nuttx/configs/ez80f910200kitg/ostest/defconfig nuttx/configs/ez80f910200zco/dhcpd/defconfig nuttx/configs/ez80f910200zco/httpd/defconfig nuttx/configs/ez80f910200zco/nettest/defconfig nuttx/configs/ez80f910200zco/nsh/defconfig nuttx/configs/ez80f910200zco/ostest/defconfig nuttx/configs/ez80f910200zco/poll/defconfig nuttx/configs/hymini-stm32v/README.txt nuttx/configs/hymini-stm32v/buttons/defconfig nuttx/configs/hymini-stm32v/nsh/defconfig nuttx/configs/hymini-stm32v/nsh2/defconfig nuttx/configs/hymini-stm32v/nx/defconfig nuttx/configs/hymini-stm32v/nxlines/defconfig nuttx/configs/hymini-stm32v/usbserial/defconfig nuttx/configs/hymini-stm32v/usbstorage/defconfig nuttx/configs/kwikstik-k40/README.txt nuttx/configs/kwikstik-k40/ostest/defconfig nuttx/configs/lincoln60/README.txt nuttx/configs/lincoln60/nsh/defconfig nuttx/configs/lincoln60/ostest/defconfig nuttx/configs/lm3s6432-s2e/README.txt nuttx/configs/lm3s6432-s2e/nsh/defconfig nuttx/configs/lm3s6432-s2e/ostest/defconfig nuttx/configs/lm3s6965-ek/README.txt nuttx/configs/lm3s6965-ek/nsh/defconfig nuttx/configs/lm3s6965-ek/nx/defconfig nuttx/configs/lm3s6965-ek/ostest/defconfig nuttx/configs/lm3s8962-ek/README.txt nuttx/configs/lm3s8962-ek/nsh/defconfig nuttx/configs/lm3s8962-ek/nx/defconfig nuttx/configs/lm3s8962-ek/ostest/defconfig nuttx/configs/lpc4330-xplorer/README.txt nuttx/configs/lpc4330-xplorer/nsh/defconfig nuttx/configs/lpc4330-xplorer/ostest/defconfig nuttx/configs/lpcxpresso-lpc1768/README.txt nuttx/configs/lpcxpresso-lpc1768/dhcpd/defconfig nuttx/configs/lpcxpresso-lpc1768/nsh/defconfig nuttx/configs/lpcxpresso-lpc1768/nx/defconfig nuttx/configs/lpcxpresso-lpc1768/ostest/defconfig nuttx/configs/lpcxpresso-lpc1768/thttpd/defconfig nuttx/configs/lpcxpresso-lpc1768/usbstorage/defconfig nuttx/configs/m68332evb/defconfig nuttx/configs/mbed/README.txt nuttx/configs/mbed/hidkbd/defconfig nuttx/configs/mbed/nsh/defconfig nuttx/configs/mcu123-lpc214x/README.txt nuttx/configs/mcu123-lpc214x/composite/defconfig nuttx/configs/mcu123-lpc214x/nsh/defconfig nuttx/configs/mcu123-lpc214x/ostest/defconfig nuttx/configs/mcu123-lpc214x/usbserial/defconfig nuttx/configs/mcu123-lpc214x/usbstorage/defconfig nuttx/configs/micropendous3/README.txt nuttx/configs/micropendous3/hello/defconfig nuttx/configs/mirtoo/README.txt nuttx/configs/mirtoo/nsh/defconfig nuttx/configs/mirtoo/nxffs/defconfig nuttx/configs/mirtoo/ostest/defconfig nuttx/configs/mx1ads/ostest/defconfig nuttx/configs/ne64badge/README.txt nuttx/configs/ne64badge/ostest/defconfig nuttx/configs/ntosd-dm320/nettest/defconfig nuttx/configs/ntosd-dm320/nsh/defconfig nuttx/configs/ntosd-dm320/ostest/defconfig nuttx/configs/ntosd-dm320/poll/defconfig nuttx/configs/ntosd-dm320/thttpd/defconfig nuttx/configs/ntosd-dm320/udp/defconfig nuttx/configs/ntosd-dm320/uip/defconfig nuttx/configs/nucleus2g/README.txt nuttx/configs/nucleus2g/nsh/defconfig nuttx/configs/nucleus2g/ostest/defconfig nuttx/configs/nucleus2g/usbserial/defconfig nuttx/configs/nucleus2g/usbstorage/defconfig nuttx/configs/olimex-lpc1766stk/README.txt nuttx/configs/olimex-lpc1766stk/ftpc/defconfig nuttx/configs/olimex-lpc1766stk/hidkbd/defconfig nuttx/configs/olimex-lpc1766stk/nettest/defconfig nuttx/configs/olimex-lpc1766stk/nsh/defconfig nuttx/configs/olimex-lpc1766stk/nx/defconfig nuttx/configs/olimex-lpc1766stk/ostest/defconfig nuttx/configs/olimex-lpc1766stk/slip-httpd/defconfig nuttx/configs/olimex-lpc1766stk/thttpd/defconfig nuttx/configs/olimex-lpc1766stk/usbserial/defconfig nuttx/configs/olimex-lpc1766stk/usbstorage/defconfig nuttx/configs/olimex-lpc1766stk/wlan/defconfig nuttx/configs/olimex-lpc2378/nsh/defconfig nuttx/configs/olimex-lpc2378/ostest/defconfig nuttx/configs/olimex-stm32-p107/nsh/defconfig nuttx/configs/olimex-stm32-p107/ostest/defconfig nuttx/configs/olimex-strp711/nettest/defconfig nuttx/configs/olimex-strp711/nsh/defconfig nuttx/configs/olimex-strp711/ostest/defconfig nuttx/configs/pcblogic-pic32mx/README.txt nuttx/configs/pcblogic-pic32mx/nsh/defconfig nuttx/configs/pcblogic-pic32mx/ostest/defconfig nuttx/configs/pic32-starterkit/README.txt nuttx/configs/pic32-starterkit/nsh/defconfig nuttx/configs/pic32-starterkit/nsh2/defconfig nuttx/configs/pic32-starterkit/ostest/defconfig nuttx/configs/pic32mx7mmb/README.txt nuttx/configs/pic32mx7mmb/nsh/defconfig nuttx/configs/pic32mx7mmb/ostest/defconfig nuttx/configs/pjrc-8051/defconfig nuttx/configs/qemu-i486/nsh/defconfig nuttx/configs/qemu-i486/ostest/defconfig nuttx/configs/rgmp/arm/default/defconfig nuttx/configs/rgmp/arm/nsh/defconfig nuttx/configs/rgmp/x86/default/defconfig nuttx/configs/rgmp/x86/nsh/defconfig nuttx/configs/sam3u-ek/README.txt nuttx/configs/sam3u-ek/knsh/defconfig nuttx/configs/sam3u-ek/nsh/defconfig nuttx/configs/sam3u-ek/nx/defconfig nuttx/configs/sam3u-ek/ostest/defconfig nuttx/configs/sam3u-ek/touchscreen/defconfig nuttx/configs/sim/mount/defconfig nuttx/configs/sim/nettest/defconfig nuttx/configs/sim/nsh/defconfig nuttx/configs/sim/nsh2/defconfig nuttx/configs/sim/nx/defconfig nuttx/configs/sim/nx11/defconfig nuttx/configs/sim/nxffs/defconfig nuttx/configs/sim/nxwm/defconfig nuttx/configs/sim/ostest/defconfig nuttx/configs/sim/pashello/defconfig nuttx/configs/sim/touchscreen/defconfig nuttx/configs/skp16c26/ostest/defconfig nuttx/configs/stm3210e-eval/Kconfig nuttx/configs/stm3210e-eval/README.txt nuttx/configs/stm3210e-eval/RIDE/defconfig nuttx/configs/stm3210e-eval/buttons/defconfig nuttx/configs/stm3210e-eval/composite/defconfig nuttx/configs/stm3210e-eval/nsh/defconfig nuttx/configs/stm3210e-eval/nsh2/defconfig nuttx/configs/stm3210e-eval/nx/defconfig nuttx/configs/stm3210e-eval/nxconsole/defconfig nuttx/configs/stm3210e-eval/nxlines/defconfig nuttx/configs/stm3210e-eval/nxtext/defconfig nuttx/configs/stm3210e-eval/ostest/defconfig nuttx/configs/stm3210e-eval/pm/defconfig nuttx/configs/stm3210e-eval/src/up_idle.c nuttx/configs/stm3210e-eval/usbserial/defconfig nuttx/configs/stm3210e-eval/usbstorage/defconfig nuttx/configs/stm3220g-eval/Kconfig nuttx/configs/stm3220g-eval/README.txt nuttx/configs/stm3220g-eval/dhcpd/defconfig nuttx/configs/stm3220g-eval/include/board.h nuttx/configs/stm3220g-eval/nettest/defconfig nuttx/configs/stm3220g-eval/nsh/defconfig nuttx/configs/stm3220g-eval/nsh2/defconfig nuttx/configs/stm3220g-eval/nxwm/defconfig nuttx/configs/stm3220g-eval/ostest/defconfig nuttx/configs/stm3220g-eval/src/Makefile nuttx/configs/stm3220g-eval/src/stm3220g-internal.h nuttx/configs/stm3220g-eval/src/up_boot.c nuttx/configs/stm3220g-eval/src/up_nsh.c nuttx/configs/stm3220g-eval/telnetd/defconfig nuttx/configs/stm3240g-eval/Kconfig nuttx/configs/stm3240g-eval/README.txt nuttx/configs/stm3240g-eval/dhcpd/defconfig nuttx/configs/stm3240g-eval/include/board.h nuttx/configs/stm3240g-eval/nettest/defconfig nuttx/configs/stm3240g-eval/nsh/defconfig nuttx/configs/stm3240g-eval/nsh2/defconfig nuttx/configs/stm3240g-eval/nxconsole/defconfig nuttx/configs/stm3240g-eval/nxwm/defconfig nuttx/configs/stm3240g-eval/ostest/defconfig nuttx/configs/stm3240g-eval/telnetd/defconfig nuttx/configs/stm32f4discovery/README.txt nuttx/configs/stm32f4discovery/include/board.h nuttx/configs/stm32f4discovery/nsh/defconfig nuttx/configs/stm32f4discovery/nxlines/defconfig nuttx/configs/stm32f4discovery/ostest/defconfig nuttx/configs/stm32f4discovery/pm/defconfig nuttx/configs/sure-pic32mx/README.txt nuttx/configs/sure-pic32mx/nsh/defconfig nuttx/configs/sure-pic32mx/ostest/defconfig nuttx/configs/sure-pic32mx/usbnsh/defconfig nuttx/configs/teensy/README.txt nuttx/configs/teensy/hello/defconfig nuttx/configs/teensy/nsh/defconfig nuttx/configs/teensy/src/up_spi.c nuttx/configs/teensy/usbstorage/defconfig nuttx/configs/twr-k60n512/README.txt nuttx/configs/twr-k60n512/nsh/defconfig nuttx/configs/twr-k60n512/ostest/defconfig nuttx/configs/ubw32/README.txt nuttx/configs/ubw32/nsh/defconfig nuttx/configs/ubw32/ostest/defconfig nuttx/configs/us7032evb1/nsh/defconfig nuttx/configs/us7032evb1/ostest/defconfig nuttx/configs/vsn/README.txt nuttx/configs/vsn/nsh/defconfig nuttx/configs/xtrs/nsh/defconfig nuttx/configs/xtrs/ostest/defconfig nuttx/configs/xtrs/pashello/defconfig nuttx/configs/z16f2800100zcog/ostest/defconfig nuttx/configs/z16f2800100zcog/pashello/defconfig nuttx/configs/z80sim/nsh/defconfig nuttx/configs/z80sim/ostest/defconfig nuttx/configs/z80sim/pashello/defconfig nuttx/configs/z8encore000zco/ostest/defconfig nuttx/configs/z8f64200100kit/ostest/defconfig
This commit is contained in:
+10
-4
@@ -248,7 +248,7 @@
|
|||||||
being set to the priority of the parent thread; losing its configured
|
being set to the priority of the parent thread; losing its configured
|
||||||
priority. Reported by Mike Smith.
|
priority. Reported by Mike Smith.
|
||||||
|
|
||||||
6.21 2012-xx-xx Gregory Nutt <gnutt@nuttx.org>
|
6.21 2012-08-25 Gregory Nutt <gnutt@nuttx.org>
|
||||||
|
|
||||||
* apps/include/: Stylistic clean-up of all header files.
|
* apps/include/: Stylistic clean-up of all header files.
|
||||||
* apps/modbus and apps/include/modbus: A port of freemodbus-v1.5.0
|
* apps/modbus and apps/include/modbus: A port of freemodbus-v1.5.0
|
||||||
@@ -259,9 +259,9 @@
|
|||||||
* apps/modbus: Add CONFIG_MB_TERMIOS. If the driver doesn't support
|
* apps/modbus: Add CONFIG_MB_TERMIOS. If the driver doesn't support
|
||||||
termios ioctls, then don't bother trying to configure the baud, parity
|
termios ioctls, then don't bother trying to configure the baud, parity
|
||||||
etc.
|
etc.
|
||||||
* apps/nslib: If waitpid() is supported, then NSH not catches the
|
* apps/nshlib: If waitpid() is supported, then NSH now catches the
|
||||||
return value from spawned applications (provided by Mike Smith)
|
return value from spawned applications (provided by Mike Smith)
|
||||||
* apps/nslib: Lock the schedule while starting built-in applications
|
* apps/nshlib: Lock the scheduler while starting built-in applications
|
||||||
in order to eliminate race conditions (also from Mike Smith).
|
in order to eliminate race conditions (also from Mike Smith).
|
||||||
* apps/examples/adc, pwm, and qencoder: Add support for testing
|
* apps/examples/adc, pwm, and qencoder: Add support for testing
|
||||||
devices with multiple ADC, PWM, and QE devices.
|
devices with multiple ADC, PWM, and QE devices.
|
||||||
@@ -272,9 +272,15 @@
|
|||||||
properties of mounted file systems.
|
properties of mounted file systems.
|
||||||
* apps/nshlib/nsh_parse.c: Extend help command options. 'help' with
|
* apps/nshlib/nsh_parse.c: Extend help command options. 'help' with
|
||||||
no arguments outputs a short list of commands. With -v lists all
|
no arguments outputs a short list of commands. With -v lists all
|
||||||
command line details. And command name can be added to just get
|
command line details. A command name can be added to just get
|
||||||
help on one command.
|
help on one command.
|
||||||
* system/readline.c: If character input/output is interrupted by a
|
* system/readline.c: If character input/output is interrupted by a
|
||||||
signal, then readline() will try the read/write again.
|
signal, then readline() will try the read/write again.
|
||||||
* apps/*/Make.defs: Numerous fixes needed to use the automated
|
* apps/*/Make.defs: Numerous fixes needed to use the automated
|
||||||
configuration (from Richard Cochran).
|
configuration (from Richard Cochran).
|
||||||
|
|
||||||
|
6.22 2012-xx-xx Gregory Nutt <gnutt@nuttx.org>
|
||||||
|
|
||||||
|
* apps/netutils/thttpd/thttpd_cgi.c: Missing NULL in argv[]
|
||||||
|
list (contributed by Kate).
|
||||||
|
|
||||||
|
|||||||
@@ -58,12 +58,22 @@
|
|||||||
#ifndef CONFIG_SEM_PREALLOCHOLDERS
|
#ifndef CONFIG_SEM_PREALLOCHOLDERS
|
||||||
# define CONFIG_SEM_PREALLOCHOLDERS 0
|
# define CONFIG_SEM_PREALLOCHOLDERS 0
|
||||||
#endif
|
#endif
|
||||||
#define NLOWPRI_THREADS (CONFIG_SEM_PREALLOCHOLDERS+1)
|
|
||||||
|
#if CONFIG_SEM_PREALLOCHOLDERS > 3
|
||||||
|
# define NLOWPRI_THREADS 3
|
||||||
|
#else
|
||||||
|
# define NLOWPRI_THREADS (CONFIG_SEM_PREALLOCHOLDERS+1)
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifndef CONFIG_SEM_NNESTPRIO
|
#ifndef CONFIG_SEM_NNESTPRIO
|
||||||
# define CONFIG_SEM_NNESTPRIO 0
|
# define CONFIG_SEM_NNESTPRIO 0
|
||||||
#endif
|
#endif
|
||||||
#define NHIGHPRI_THREADS (CONFIG_SEM_NNESTPRIO+1)
|
|
||||||
|
#if CONFIG_SEM_NNESTPRIO > 3
|
||||||
|
# define NHIGHPRI_THREADS 3
|
||||||
|
#else
|
||||||
|
# define NHIGHPRI_THREADS (CONFIG_SEM_NNESTPRIO+1)
|
||||||
|
#endif
|
||||||
|
|
||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
* Private Data
|
* Private Data
|
||||||
|
|||||||
+28
-11
@@ -2280,7 +2280,7 @@
|
|||||||
the particular condition that revealed the bug occurred. My impression is
|
the particular condition that revealed the bug occurred. My impression is
|
||||||
that this latter bugfix also fixes some STM32 USB performance problems.
|
that this latter bugfix also fixes some STM32 USB performance problems.
|
||||||
* configs/hymini-stm32v: A configuration for the HY-Mini STM32v board contributed
|
* configs/hymini-stm32v: A configuration for the HY-Mini STM32v board contributed
|
||||||
by Laurent Latil. Theses changes also include support for the STM32F103VCT6.
|
by Laurent Latil. These changes also include support for the STM32F103VCT6.
|
||||||
* arch/configs/stm3240g-eval/src/up_pwm.c: Add hooks needed to use the new
|
* arch/configs/stm3240g-eval/src/up_pwm.c: Add hooks needed to use the new
|
||||||
apps/examples/pwm test of the STM32 PWM driver.
|
apps/examples/pwm test of the STM32 PWM driver.
|
||||||
* drivers/mtd/mp25x.c: Add ability to use different SPI modes and different
|
* drivers/mtd/mp25x.c: Add ability to use different SPI modes and different
|
||||||
@@ -2977,7 +2977,7 @@
|
|||||||
* configs/lpc4330-xplorer/nsh: Add an NSH configuration for the LPC4330
|
* configs/lpc4330-xplorer/nsh: Add an NSH configuration for the LPC4330
|
||||||
Xplorer board.
|
Xplorer board.
|
||||||
|
|
||||||
6.21 2012-xx-xx Gregory Nutt <gnutt@nuttx.org>
|
6.21 2012-08-25 Gregory Nutt <gnutt@nuttx.org>
|
||||||
|
|
||||||
* configs/lpc4330-xplorer/up_nsh.c: Add support for a basic SPIFI block
|
* configs/lpc4330-xplorer/up_nsh.c: Add support for a basic SPIFI block
|
||||||
driver for use by NSH. Does not work! Crashes on first SPIFI write.
|
driver for use by NSH. Does not work! Crashes on first SPIFI write.
|
||||||
@@ -3024,7 +3024,7 @@
|
|||||||
but the driver still does not work.
|
but the driver still does not work.
|
||||||
* arch/arm/src/stm32 and arch/arm/include/stm32: Make name of RTC ALARM interrupt
|
* arch/arm/src/stm32 and arch/arm/include/stm32: Make name of RTC ALARM interrupt
|
||||||
common on STM32 F1,2,4
|
common on STM32 F1,2,4
|
||||||
* arch/arm/src/stm32 and arch/arm/include/stm32: Add add support for the
|
* arch/arm/src/stm32 and arch/arm/include/stm32: Add support for the
|
||||||
STM32F100x "Value Line" devices. This includes changes to stm32F10xx_rcc.c that
|
STM32F100x "Value Line" devices. This includes changes to stm32F10xx_rcc.c that
|
||||||
add the ability to run the chip off the internal oscillator. There is no open
|
add the ability to run the chip off the internal oscillator. There is no open
|
||||||
board configuration for this part yet (the STM32VLDiscovery would be a candidate).
|
board configuration for this part yet (the STM32VLDiscovery would be a candidate).
|
||||||
@@ -3050,7 +3050,7 @@
|
|||||||
* include/termios.h and lib/termios/*: Redesigned yet again (this is getting
|
* include/termios.h and lib/termios/*: Redesigned yet again (this is getting
|
||||||
painful. NuttX now supports the BOTHER baud setting just as Linux does. termios
|
painful. NuttX now supports the BOTHER baud setting just as Linux does. termios
|
||||||
Bxxx definitions are again encoded; cf[set|get][o|i]speed now deal with only the
|
Bxxx definitions are again encoded; cf[set|get][o|i]speed now deal with only the
|
||||||
encoded values. If the encode baud is set to BOTHER, then the values in the (non-
|
encoded values. If the encoded baud is set to BOTHER, then the values in the (non-
|
||||||
standard) c_ispeed and c_ospeed baud values may be accessed directly.
|
standard) c_ispeed and c_ospeed baud values may be accessed directly.
|
||||||
* arch/arm/src/stm32/stm32_serial.c: Add minimal termios support for the STM32
|
* arch/arm/src/stm32/stm32_serial.c: Add minimal termios support for the STM32
|
||||||
(BOTHER style baud settings only). Contributed by Mike Smith.
|
(BOTHER style baud settings only). Contributed by Mike Smith.
|
||||||
@@ -3063,8 +3063,7 @@
|
|||||||
* arch/arm/src/stm32/stm32_sdio.c and chip/stm32f20xx_pinmap.h: STM32 F2 SDIO
|
* arch/arm/src/stm32/stm32_sdio.c and chip/stm32f20xx_pinmap.h: STM32 F2 SDIO
|
||||||
fixes from Gary Teravskis and Scott Rondestvedt.
|
fixes from Gary Teravskis and Scott Rondestvedt.
|
||||||
* include/termios.h and lib/termios/*: Replace cfsetispeed and cfsetospeed with
|
* include/termios.h and lib/termios/*: Replace cfsetispeed and cfsetospeed with
|
||||||
cfsetspeed (with definitions for the input/outputs in termios.h). Same for
|
cfsetspeed (with definitions for the input/outputs in termios.h).
|
||||||
cfgetispeed and cfgetospeed.
|
|
||||||
* configs/stm32f4discovery/src and configs/stm32f4discovery/pm: Add a power
|
* configs/stm32f4discovery/src and configs/stm32f4discovery/pm: Add a power
|
||||||
management configuration for the STM32F4Discovery and supporting logic. This
|
management configuration for the STM32F4Discovery and supporting logic. This
|
||||||
check-in also includes some fixes for the F4 RTC alarm logic.
|
check-in also includes some fixes for the F4 RTC alarm logic.
|
||||||
@@ -3090,10 +3089,10 @@
|
|||||||
* arch/mips/src/pic32mx/pic32mx-gpio.c: Now supports the PIC32MX1/2 ANSEL
|
* arch/mips/src/pic32mx/pic32mx-gpio.c: Now supports the PIC32MX1/2 ANSEL
|
||||||
IOPORT register.
|
IOPORT register.
|
||||||
* lib/string/lib_memchr.c: Add support for memchr() (contributed by Mike Smith)
|
* lib/string/lib_memchr.c: Add support for memchr() (contributed by Mike Smith)
|
||||||
* lib/string/lib_memccpy.c: Add support for memcpy()
|
* lib/string/lib_memccpy.c: Add support for memccpy()
|
||||||
* arch/arm/src/lpc17xx/lpc17_serial.c: Now supports ioctl commands to change
|
* arch/arm/src/lpc17xx/lpc17_serial.c: Now supports ioctl commands to change
|
||||||
the baud using tcsetattr() (contributed by Chris Taglia).
|
the baud using tcsetattr() (contributed by Chris Taglia).
|
||||||
* arch/*/src/*_serial.c: Fix ioctl method return values. Theses methods
|
* arch/*/src/*_serial.c: Fix ioctl method return values. These methods
|
||||||
should return a negated errno value; they should not set the errno
|
should return a negated errno value; they should not set the errno
|
||||||
variable.
|
variable.
|
||||||
* sched/on_exit.c, sched/task_exithook.c, and include/nuttx/sched.c: Add
|
* sched/on_exit.c, sched/task_exithook.c, and include/nuttx/sched.c: Add
|
||||||
@@ -3118,7 +3117,7 @@
|
|||||||
* arch/arm/src/stm32/stm32*_rcc.c and .h: If CONFIG_PM is defined, add a
|
* arch/arm/src/stm32/stm32*_rcc.c and .h: If CONFIG_PM is defined, add a
|
||||||
function called stm32_clockenable() that can be used by PM logic to re-start
|
function called stm32_clockenable() that can be used by PM logic to re-start
|
||||||
the PLL after re-awakening from deep sleep modes.
|
the PLL after re-awakening from deep sleep modes.
|
||||||
* fs/fs_foreachinode.c and fs/fs_foreachmountpoint.c: All logic to traverse
|
* fs/fs_foreachinode.c and fs/fs_foreachmountpoint.c: Add logic to traverse
|
||||||
inodes and mountpoints in the NuttX pseudo-file system.
|
inodes and mountpoints in the NuttX pseudo-file system.
|
||||||
* fs/fat/fs_fat32.c: Max. filename length reported by statfs() was wrong
|
* fs/fat/fs_fat32.c: Max. filename length reported by statfs() was wrong
|
||||||
if FAT long file names were enabled.
|
if FAT long file names were enabled.
|
||||||
@@ -3137,7 +3136,7 @@
|
|||||||
LPC31xx has the same USB IP, but will require some additional initialization
|
LPC31xx has the same USB IP, but will require some additional initialization
|
||||||
(and lots of testing) before it can be used with the LPC43xx.
|
(and lots of testing) before it can be used with the LPC43xx.
|
||||||
* nuttx/Documentation/NuttShell.html: Added a section covering ways to
|
* nuttx/Documentation/NuttShell.html: Added a section covering ways to
|
||||||
customize the behavior or NSH.
|
customize the behavior of NSH.
|
||||||
* arch/arm/src/stm32/chip/stm32f1*_pinmap.h: STM32 CAN TX/RX pins reversed;
|
* arch/arm/src/stm32/chip/stm32f1*_pinmap.h: STM32 CAN TX/RX pins reversed;
|
||||||
inconsistent conditional compilation. Reported by Max Holtzberg.
|
inconsistent conditional compilation. Reported by Max Holtzberg.
|
||||||
* arch/arm/*/stm32: Add support for STM32 F107 "Connectivity Line"
|
* arch/arm/*/stm32: Add support for STM32 F107 "Connectivity Line"
|
||||||
@@ -3166,5 +3165,23 @@
|
|||||||
for all 8-bit AVR platforms (Thanks Richard Cochran).
|
for all 8-bit AVR platforms (Thanks Richard Cochran).
|
||||||
* lib/stdio/lib_*stream.c: Revised to handle new error return values from
|
* lib/stdio/lib_*stream.c: Revised to handle new error return values from
|
||||||
serial.c.
|
serial.c.
|
||||||
* arch/arm/src/stm32/stm32_spi.c: SPI driver can now survice re-
|
* arch/arm/src/stm32/stm32_spi.c: SPI driver can now service re-
|
||||||
initialization (Mike Smith).
|
initialization (Mike Smith).
|
||||||
|
* tools/mkconfig.c: If CONFIG_DRAM_END is not specified, this tool
|
||||||
|
will provide default definition of (CONFIG_DRAM_START + CONFIG_DRAM_SIZE)
|
||||||
|
* arch/arm/src/stm32/stm32_otgfshost.c: Renamed from stm32_usbhost.c.
|
||||||
|
This is nearly code complete and, with any luck, will be available
|
||||||
|
in NuttX-6.21.
|
||||||
|
* configs/*/defconfig: Update all defconfig files to remove syntax
|
||||||
|
that is incompatible with the mconf configuration tool.
|
||||||
|
* arch/arm/src/stm32/stm32_otgfshost.c: This driver now appears to be
|
||||||
|
functional (although more testing is necesary).
|
||||||
|
|
||||||
|
6.22 2012-xx-xx Gregory Nutt <gnutt@nuttx.org>
|
||||||
|
|
||||||
|
* include/semaphore.h, sched/sem_holders.c, and lib/semaphore/sem_init.c:
|
||||||
|
Fix some strange (and probably wrong) list handling when
|
||||||
|
CONFIG_PRIORITY_INHERITANCE and CONFIG_SEM_PREALLOCHOLDERS are defined.
|
||||||
|
This list handling was probably causing errors reported by Mike Smith
|
||||||
|
* sched/sched_waitpid.c: Fix a possible issue with logic logic that
|
||||||
|
should be brought into a critical section (suggested by Mike Smith)
|
||||||
|
|||||||
+4
-4
@@ -276,8 +276,8 @@ include/stdarg.h:
|
|||||||
endif
|
endif
|
||||||
|
|
||||||
# Targets used to build include/nuttx/version.h. Creation of version.h is
|
# Targets used to build include/nuttx/version.h. Creation of version.h is
|
||||||
# part of the overall NuttX configuration sequency. Notice that the
|
# part of the overall NuttX configuration sequence. Notice that the
|
||||||
# tools/mkversion tool is cuilt and used to create include/nuttx/version.h
|
# tools/mkversion tool is built and used to create include/nuttx/version.h
|
||||||
|
|
||||||
tools/mkversion:
|
tools/mkversion:
|
||||||
@$(MAKE) -C tools -f Makefile.host TOPDIR="$(TOPDIR)" mkversion
|
@$(MAKE) -C tools -f Makefile.host TOPDIR="$(TOPDIR)" mkversion
|
||||||
@@ -293,8 +293,8 @@ include/nuttx/version.h: $(TOPDIR)/.version tools/mkversion
|
|||||||
@tools/mkversion $(TOPDIR) > include/nuttx/version.h
|
@tools/mkversion $(TOPDIR) > include/nuttx/version.h
|
||||||
|
|
||||||
# Targets used to build include/nuttx/config.h. Creation of config.h is
|
# Targets used to build include/nuttx/config.h. Creation of config.h is
|
||||||
# part of the overall NuttX configuration sequency. Notice that the
|
# part of the overall NuttX configuration sequence. Notice that the
|
||||||
# tools/mkconfig tool is cuilt and used to create include/nuttx/config.h
|
# tools/mkconfig tool is built and used to create include/nuttx/config.h
|
||||||
|
|
||||||
tools/mkconfig:
|
tools/mkconfig:
|
||||||
@$(MAKE) -C tools -f Makefile.host TOPDIR="$(TOPDIR)" mkconfig
|
@$(MAKE) -C tools -f Makefile.host TOPDIR="$(TOPDIR)" mkconfig
|
||||||
|
|||||||
@@ -2999,3 +2999,67 @@ Bugfixes (see the change log for details) :
|
|||||||
on Z80.
|
on Z80.
|
||||||
|
|
||||||
As well as other, less critical bugs (see the ChangeLog for details)
|
As well as other, less critical bugs (see the ChangeLog for details)
|
||||||
|
|
||||||
|
NuttX-6.21
|
||||||
|
^^^^^^^^^^
|
||||||
|
|
||||||
|
The 88th release of NuttX, Version 6.21, was made on August 25, 2012,
|
||||||
|
and is available for download from the SourceForge website. Note
|
||||||
|
that release consists of two tarballs: nuttx-6.21.tar.gz and
|
||||||
|
apps-6.21.tar.gz. Both may be needed (see the top-level nuttx/README.txt
|
||||||
|
file for build information).
|
||||||
|
|
||||||
|
This release corresponds with SVN release number: r5052
|
||||||
|
|
||||||
|
Additional new features and extended functionality:
|
||||||
|
|
||||||
|
* Core: Add support for multiple registered atexit() functions. Syslog
|
||||||
|
extended: Now any character driver may be used for the debug logging
|
||||||
|
device. Mountpoint traversal logic.
|
||||||
|
* Drivers: Added support for the TI PGA112-7 amplifier/multiplexor.
|
||||||
|
* LPC43xx: Added clock ramp-up logic to run at 204 MHz
|
||||||
|
* LPC43xx Drivers: SPIFI block driver, RS-485 support, Minimal termios
|
||||||
|
support. Framework for USB0 device controller driver.
|
||||||
|
* LPC17xx Drivers: Minimal termios support
|
||||||
|
* STM32: Support for STM32 F1 "Value Line" (contributed by Mike Smith).
|
||||||
|
Add support for STM32 F107 "Connectivity Line" (contributed by Max
|
||||||
|
Holtzberg).
|
||||||
|
Clock restart logic needed for recovery from low power modes.
|
||||||
|
* STM32 Drivers: RTC alarm support. Usable for wakeup from sleep mode,
|
||||||
|
Minimal serial termios support. USB OTG FS host driver (alpha).
|
||||||
|
* STM32 Boards: Add power management hooks for the STM32F4Discovery,
|
||||||
|
Add support for the Olimex STM32-P107 (contributed by Max Holtzberg).
|
||||||
|
* PIC32: Add support for the Pinguino MIPS toolchain.
|
||||||
|
* PIC32 Drivers: GPIO driver now supports F1 analog regiaters (ANSEL).
|
||||||
|
* PIC32 Boards: Add support for the PGA117 on the Mirtoo module.
|
||||||
|
* Calypso: Add support for the SSD1783 LCD on the Compal E99.
|
||||||
|
* Library: cfsetispeed(), cfsetospeed(), tcflush(), memchr(), and
|
||||||
|
memccpy().
|
||||||
|
* Applications: Port of freemodbus-v1.5.0. Add support for testing
|
||||||
|
devices with multiple ADC, PWM, and QE devices.
|
||||||
|
NSH: NSH 'mount' command (with no arguments) will now show mounted
|
||||||
|
volumes. Add new NSH 'df' command. Extended 'help' support. NSH
|
||||||
|
now catches the return value from spawned applications (provided
|
||||||
|
by Mike Smith).
|
||||||
|
* Build System: mkconfig will not define CONFIG_DRAM_END. A lot of
|
||||||
|
progress has been made on the automated NuttX configuration logic
|
||||||
|
(Thanks go to Richard Cochran).
|
||||||
|
* Documentation: Document ways to customize the behavior of NSH.
|
||||||
|
|
||||||
|
Bugfixes (see the change log for details) :
|
||||||
|
|
||||||
|
* Serial drivers (all): Fix ioctl return value. Common "upper half"
|
||||||
|
serial driver will now return with EINTR if a serial wait is
|
||||||
|
interrupted by a signal.
|
||||||
|
* FAT: Fix statfs() file name length.
|
||||||
|
* LPC43xx: Clock configuration.
|
||||||
|
* STM32: Pinmap fixes, SPI driver re-initialization
|
||||||
|
* STM32 Boards: Correct and lower SDIO frequency for F2 and f4 boards.
|
||||||
|
* AVR: C++ build issues.
|
||||||
|
* PM: Fix a place where interrupts were not be re-enabled.
|
||||||
|
* Applications: NSH application start-up race conditions.
|
||||||
|
* Library: Fieldwidth and justification for %s format. Fixed several
|
||||||
|
issues with presenting floating point numbers. NULL definition
|
||||||
|
for C++
|
||||||
|
|
||||||
|
As well as other, less critical bugs (see the ChangeLog for details)
|
||||||
|
|||||||
+36
-1
@@ -19,11 +19,13 @@ config ARCH_ARM
|
|||||||
|
|
||||||
config ARCH_AVR
|
config ARCH_AVR
|
||||||
bool "AVR"
|
bool "AVR"
|
||||||
|
select ARCH_NOINTC
|
||||||
---help---
|
---help---
|
||||||
Atmel 8-bit bit AVR and 32-bit AVR32 architectures
|
Atmel 8-bit bit AVR and 32-bit AVR32 architectures
|
||||||
|
|
||||||
config ARCH_HC
|
config ARCH_HC
|
||||||
bool "Freescale HC"
|
bool "Freescale HC"
|
||||||
|
select ARCH_NOINTC
|
||||||
---help---
|
---help---
|
||||||
Freescale HC architectures (M9S12)
|
Freescale HC architectures (M9S12)
|
||||||
|
|
||||||
@@ -39,7 +41,8 @@ config ARCH_RGMP
|
|||||||
http://rgmp.sourceforge.net/wiki/index.php/Main_Page.
|
http://rgmp.sourceforge.net/wiki/index.php/Main_Page.
|
||||||
|
|
||||||
config ARCH_SH
|
config ARCH_SH
|
||||||
bool "Rensas"
|
bool "Renesas"
|
||||||
|
select ARCH_NOINTC
|
||||||
---help---
|
---help---
|
||||||
Renesas architectures (SH and M16C).
|
Renesas architectures (SH and M16C).
|
||||||
|
|
||||||
@@ -90,3 +93,35 @@ source arch/sim/Kconfig
|
|||||||
source arch/x86/Kconfig
|
source arch/x86/Kconfig
|
||||||
source arch/z16/Kconfig
|
source arch/z16/Kconfig
|
||||||
source arch/z80/Kconfig
|
source arch/z80/Kconfig
|
||||||
|
|
||||||
|
comment "Architecture Options"
|
||||||
|
|
||||||
|
config ARCH_NOINTC
|
||||||
|
bool
|
||||||
|
default n
|
||||||
|
|
||||||
|
config ARCH_STACKDUMP
|
||||||
|
bool "Dump stack on assertions"
|
||||||
|
default n
|
||||||
|
---help---
|
||||||
|
Enable to do stack dumps after assertions
|
||||||
|
|
||||||
|
comment "Board Settings"
|
||||||
|
|
||||||
|
config BOARD_LOOPSPERMSEC
|
||||||
|
int "Loops per millisecond"
|
||||||
|
help
|
||||||
|
Must be calibrated for correct operation of delay loops.
|
||||||
|
You simply use a stop watch to measure the 100 second delay
|
||||||
|
then adjust CONFIG_BOARD_LOOPSPERMSEC until it is actually
|
||||||
|
is 100 seconds.
|
||||||
|
|
||||||
|
config DRAM_START
|
||||||
|
hex "DRAM start address"
|
||||||
|
help
|
||||||
|
The physical start address of installed RAM.
|
||||||
|
|
||||||
|
config DRAM_SIZE
|
||||||
|
int "DRAM size"
|
||||||
|
help
|
||||||
|
The size in bytes of the installed RAM.
|
||||||
|
|||||||
@@ -118,12 +118,6 @@ config ARCH_CHIP
|
|||||||
default "stm32" if ARCH_CHIP_STM32
|
default "stm32" if ARCH_CHIP_STM32
|
||||||
default "str71x" if ARCH_CHIP_STR71X
|
default "str71x" if ARCH_CHIP_STR71X
|
||||||
|
|
||||||
config ARCH_STACKDUMP
|
|
||||||
bool "Dump stack on assertions"
|
|
||||||
default n
|
|
||||||
---help---
|
|
||||||
Enable to do stack dumps after assertions
|
|
||||||
|
|
||||||
config ARCH_LEDS
|
config ARCH_LEDS
|
||||||
bool "Use board LEDs to show state"
|
bool "Use board LEDs to show state"
|
||||||
default y
|
default y
|
||||||
|
|||||||
@@ -1910,3 +1910,56 @@ config STM32_MII_MCO1
|
|||||||
bool
|
bool
|
||||||
default y if !STM32_MII_MCO2
|
default y if !STM32_MII_MCO2
|
||||||
depends on STM32_MII
|
depends on STM32_MII
|
||||||
|
|
||||||
|
menu "USB Host Configuration"
|
||||||
|
|
||||||
|
config STM32_OTGFS_RXFIFO_SIZE
|
||||||
|
int "Rx Packet Size"
|
||||||
|
default 128
|
||||||
|
depends on USBHOST && STM32_OTGFS
|
||||||
|
---help---
|
||||||
|
Size of the RX FIFO in 32-bit words. Default 128 (512 bytes)
|
||||||
|
|
||||||
|
config STM32_OTGFS_NPTXFIFO_SIZE
|
||||||
|
int "Non-periodic Tx FIFO Size"
|
||||||
|
default 96
|
||||||
|
depends on USBHOST && STM32_OTGFS
|
||||||
|
---help---
|
||||||
|
Size of the non-periodic Tx FIFO in 32-bit words. Default 96 (384 bytes)
|
||||||
|
|
||||||
|
config STM32_OTGFS_PTXFIFO_SIZE
|
||||||
|
int "Periodic Tx FIFO size"
|
||||||
|
default 128
|
||||||
|
depends on USBHOST && STM32_OTGFS
|
||||||
|
---help---
|
||||||
|
Size of the periodic Tx FIFO in 32-bit words. Default 96 (384 bytes)
|
||||||
|
|
||||||
|
config STM32_OTGFS_DESCSIZE
|
||||||
|
int "Descriptor Size"
|
||||||
|
default 128
|
||||||
|
depends on USBHOST && STM32_OTGFS
|
||||||
|
---help---
|
||||||
|
Maximum size to allocate for descriptor memory descriptor. Default: 128
|
||||||
|
|
||||||
|
config STM32_OTGFS_SOFINTR
|
||||||
|
bool "Enable SOF interrupts"
|
||||||
|
default n
|
||||||
|
depends on USBHOST && STM32_OTGFS
|
||||||
|
---help---
|
||||||
|
Enable SOF interrupts. Why would you ever want to do that?
|
||||||
|
|
||||||
|
config STM32_USBHOST_REGDEBUG
|
||||||
|
bool "Register-Level Debug"
|
||||||
|
default n
|
||||||
|
depends on USBHOST && STM32_OTGFS
|
||||||
|
---help---
|
||||||
|
Enable very low-level register access debug. Depends on CONFIG_DEBUG.
|
||||||
|
|
||||||
|
config STM32_USBHOST_PKTDUMP
|
||||||
|
bool "Packet Dump Debug"
|
||||||
|
default n
|
||||||
|
depends on USBHOST && STM32_OTGFS
|
||||||
|
---help---
|
||||||
|
Dump all incoming and outgoing USB packets. Depends on CONFIG_DEBUG.
|
||||||
|
|
||||||
|
endmenu
|
||||||
|
|||||||
@@ -81,6 +81,12 @@ CMN_CSRCS += stm32_otgfsdev.c
|
|||||||
endif
|
endif
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
ifeq ($(CONFIG_USBHOST),y)
|
||||||
|
ifeq ($(CONFIG_STM32_OTGFS),y)
|
||||||
|
CMN_CSRCS += stm32_otgfshost.c
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
|
||||||
ifeq ($(CONFIG_ARMV7M_CMNVECTOR),y)
|
ifeq ($(CONFIG_ARMV7M_CMNVECTOR),y)
|
||||||
CHIP_ASRCS += stm32_vectors.S
|
CHIP_ASRCS += stm32_vectors.S
|
||||||
endif
|
endif
|
||||||
|
|||||||
@@ -46,6 +46,18 @@
|
|||||||
/****************************************************************************************************
|
/****************************************************************************************************
|
||||||
* Pre-processor Definitions
|
* Pre-processor Definitions
|
||||||
****************************************************************************************************/
|
****************************************************************************************************/
|
||||||
|
/* General definitions */
|
||||||
|
|
||||||
|
#define OTGFS_EPTYPE_CTRL (0) /* Control */
|
||||||
|
#define OTGFS_EPTYPE_ISOC (1) /* Isochronous */
|
||||||
|
#define OTGFS_EPTYPE_BULK (2) /* Bulk */
|
||||||
|
#define OTGFS_EPTYPE_INTR (3) /* Interrupt */
|
||||||
|
|
||||||
|
#define OTGFS_PID_DATA0 (0)
|
||||||
|
#define OTGFS_PID_DATA2 (1)
|
||||||
|
#define OTGFS_PID_DATA1 (2)
|
||||||
|
#define OTGFS_PID_MDATA (3) /* Non-control */
|
||||||
|
#define OTGFS_PID_SETUP (3) /* Control */
|
||||||
|
|
||||||
/* Register Offsets *********************************************************************************/
|
/* Register Offsets *********************************************************************************/
|
||||||
/* Core global control and status registers */
|
/* Core global control and status registers */
|
||||||
@@ -125,8 +137,8 @@
|
|||||||
#define STM32_OTGFS_HCTSIZ3_OFFSET 0x0570 /* Host channel-3 interrupt register */
|
#define STM32_OTGFS_HCTSIZ3_OFFSET 0x0570 /* Host channel-3 interrupt register */
|
||||||
#define STM32_OTGFS_HCTSIZ4_OFFSET 0x0590 /* Host channel-4 interrupt register */
|
#define STM32_OTGFS_HCTSIZ4_OFFSET 0x0590 /* Host channel-4 interrupt register */
|
||||||
#define STM32_OTGFS_HCTSIZ5_OFFSET 0x05b0 /* Host channel-5 interrupt register */
|
#define STM32_OTGFS_HCTSIZ5_OFFSET 0x05b0 /* Host channel-5 interrupt register */
|
||||||
#define STM32_OTGFS_HCTSIZ6_OFFSET 0x05d9 /* Host channel-6 interrupt register */
|
#define STM32_OTGFS_HCTSIZ6_OFFSET 0x05d0 /* Host channel-6 interrupt register */
|
||||||
#define STM32_OTGFS_HCTSIZ7_OFFSET 0x05f9 /* Host channel-7 interrupt register */
|
#define STM32_OTGFS_HCTSIZ7_OFFSET 0x05f0 /* Host channel-7 interrupt register */
|
||||||
|
|
||||||
/* Device-mode control and status registers */
|
/* Device-mode control and status registers */
|
||||||
|
|
||||||
@@ -193,6 +205,10 @@
|
|||||||
#define STM32_OTGFS_DOEPTSIZ2_OFFSET 0x00b50 /* Device OUT endpoint-2 transfer size register */
|
#define STM32_OTGFS_DOEPTSIZ2_OFFSET 0x00b50 /* Device OUT endpoint-2 transfer size register */
|
||||||
#define STM32_OTGFS_DOEPTSIZ3_OFFSET 0x00b70 /* Device OUT endpoint-3 transfer size register */
|
#define STM32_OTGFS_DOEPTSIZ3_OFFSET 0x00b70 /* Device OUT endpoint-3 transfer size register */
|
||||||
|
|
||||||
|
/* Power and clock gating registers */
|
||||||
|
|
||||||
|
#define STM32_OTGFS_PCGCCTL_OFFSET 0x0e00 /* Power and clock gating control register */
|
||||||
|
|
||||||
/* Data FIFO (DFIFO) access registers */
|
/* Data FIFO (DFIFO) access registers */
|
||||||
|
|
||||||
#define STM32_OTGFS_DFIFO_DEP_OFFSET(n) (0x1000 + ((n) << 12))
|
#define STM32_OTGFS_DFIFO_DEP_OFFSET(n) (0x1000 + ((n) << 12))
|
||||||
@@ -204,15 +220,11 @@
|
|||||||
#define STM32_OTGFS_DFIFO_DEP1_OFFSET 0x2000 /* 0x2000-0x2ffc Device IN/OUT Endpoint 1 DFIFO Write/Read Access */
|
#define STM32_OTGFS_DFIFO_DEP1_OFFSET 0x2000 /* 0x2000-0x2ffc Device IN/OUT Endpoint 1 DFIFO Write/Read Access */
|
||||||
#define STM32_OTGFS_DFIFO_HCH1_OFFSET 0x2000 /* 0x2000-0x2ffc Host OUT/IN Channel 1 DFIFO Read/Write Access */
|
#define STM32_OTGFS_DFIFO_HCH1_OFFSET 0x2000 /* 0x2000-0x2ffc Host OUT/IN Channel 1 DFIFO Read/Write Access */
|
||||||
|
|
||||||
#define STM32_OTGFS_DFIFO_DEP2_OFFSET 0x3000 /* 0x3000-0x3ffc Device IN/OUT Endpoint 1 DFIFO Write/Read Access */
|
#define STM32_OTGFS_DFIFO_DEP2_OFFSET 0x3000 /* 0x3000-0x3ffc Device IN/OUT Endpoint 2 DFIFO Write/Read Access */
|
||||||
#define STM32_OTGFS_DFIFO_HCH2_OFFSET 0x3000 /* 0x3000-0x3ffc Host OUT/IN Channel 1 DFIFO Read/Write Access */
|
#define STM32_OTGFS_DFIFO_HCH2_OFFSET 0x3000 /* 0x3000-0x3ffc Host OUT/IN Channel 2 DFIFO Read/Write Access */
|
||||||
|
|
||||||
#define STM32_OTGFS_DFIFO_DEP3_OFFSET 0x4000 /* 0x4000-0x4ffc Device IN/OUT Endpoint 1 DFIFO Write/Read Access */
|
#define STM32_OTGFS_DFIFO_DEP3_OFFSET 0x4000 /* 0x4000-0x4ffc Device IN/OUT Endpoint 3 DFIFO Write/Read Access */
|
||||||
#define STM32_OTGFS_DFIFO_HCH3_OFFSET 0x4000 /* 0x4000-0x4ffc Host OUT/IN Channel 1 DFIFO Read/Write Access */
|
#define STM32_OTGFS_DFIFO_HCH3_OFFSET 0x4000 /* 0x4000-0x4ffc Host OUT/IN Channel 3 DFIFO Read/Write Access */
|
||||||
|
|
||||||
/* Power and clock gating registers */
|
|
||||||
|
|
||||||
#define STM32_OTGFS_PCGCCTL_OFFSET 0x0e00 /* Power and clock gating control register */
|
|
||||||
|
|
||||||
/* Register Addresses *******************************************************************************/
|
/* Register Addresses *******************************************************************************/
|
||||||
|
|
||||||
@@ -349,6 +361,10 @@
|
|||||||
#define STM32_OTGFS_DOEPTSIZ2 (STM32_OTGFS_BASE+STM32_OTGFS_DOEPTSIZ2_OFFSET)
|
#define STM32_OTGFS_DOEPTSIZ2 (STM32_OTGFS_BASE+STM32_OTGFS_DOEPTSIZ2_OFFSET)
|
||||||
#define STM32_OTGFS_DOEPTSIZ3 (STM32_OTGFS_BASE+STM32_OTGFS_DOEPTSIZ3_OFFSET)
|
#define STM32_OTGFS_DOEPTSIZ3 (STM32_OTGFS_BASE+STM32_OTGFS_DOEPTSIZ3_OFFSET)
|
||||||
|
|
||||||
|
/* Power and clock gating registers */
|
||||||
|
|
||||||
|
#define STM32_OTGFS_PCGCCTL (STM32_OTGFS_BASE+STM32_OTGFS_PCGCCTL_OFFSET)
|
||||||
|
|
||||||
/* Data FIFO (DFIFO) access registers */
|
/* Data FIFO (DFIFO) access registers */
|
||||||
|
|
||||||
#define STM32_OTGFS_DFIFO_DEP(n) (STM32_OTGFS_BASE+STM32_OTGFS_DFIFO_DEP_OFFSET(n))
|
#define STM32_OTGFS_DFIFO_DEP(n) (STM32_OTGFS_BASE+STM32_OTGFS_DFIFO_DEP_OFFSET(n))
|
||||||
@@ -366,10 +382,6 @@
|
|||||||
#define STM32_OTGFS_DFIFO_DEP3 (STM32_OTGFS_BASE+STM32_OTGFS_DFIFO_DEP3_OFFSET)
|
#define STM32_OTGFS_DFIFO_DEP3 (STM32_OTGFS_BASE+STM32_OTGFS_DFIFO_DEP3_OFFSET)
|
||||||
#define STM32_OTGFS_DFIFO_HCH3 (STM32_OTGFS_BASE+STM32_OTGFS_DFIFO_HCH3_OFFSET)
|
#define STM32_OTGFS_DFIFO_HCH3 (STM32_OTGFS_BASE+STM32_OTGFS_DFIFO_HCH3_OFFSET)
|
||||||
|
|
||||||
/* Power and clock gating registers */
|
|
||||||
|
|
||||||
#define STM32_OTGFS_PCGCCTL (STM32_OTGFS_BASE+STM32_OTGFS_PCGCCTL_OFFSET)
|
|
||||||
|
|
||||||
/* Register Bitfield Definitions ********************************************************************/
|
/* Register Bitfield Definitions ********************************************************************/
|
||||||
/* Core global control and status registers */
|
/* Core global control and status registers */
|
||||||
|
|
||||||
@@ -411,7 +423,9 @@
|
|||||||
|
|
||||||
#define OTGFS_GUSBCFG_TOCAL_SHIFT (0) /* Bits 0-2: FS timeout calibration */
|
#define OTGFS_GUSBCFG_TOCAL_SHIFT (0) /* Bits 0-2: FS timeout calibration */
|
||||||
#define OTGFS_GUSBCFG_TOCAL_MASK (7 << OTGFS_GUSBCFG_TOCAL_SHIFT)
|
#define OTGFS_GUSBCFG_TOCAL_MASK (7 << OTGFS_GUSBCFG_TOCAL_SHIFT)
|
||||||
/* Bits 3-6: Reserved, must be kept at reset value */
|
/* Bits 3-5: Reserved, must be kept at reset value */
|
||||||
|
#define OTGFS_GUSBCFG_PHYSEL (1 << 6) /* Bit 6: Full Speed serial transceiver select */
|
||||||
|
/* Bit 7: Reserved, must be kept at reset value */
|
||||||
#define OTGFS_GUSBCFG_SRPCAP (1 << 8) /* Bit 8: SRP-capable */
|
#define OTGFS_GUSBCFG_SRPCAP (1 << 8) /* Bit 8: SRP-capable */
|
||||||
#define OTGFS_GUSBCFG_HNPCAP (1 << 9) /* Bit 9: HNP-capable */
|
#define OTGFS_GUSBCFG_HNPCAP (1 << 9) /* Bit 9: HNP-capable */
|
||||||
#define OTGFS_GUSBCFG_TRDT_SHIFT (10) /* Bits 10-13: USB turnaround time */
|
#define OTGFS_GUSBCFG_TRDT_SHIFT (10) /* Bits 10-13: USB turnaround time */
|
||||||
@@ -491,7 +505,7 @@
|
|||||||
#define OTGFS_GRXSTSH_PKTSTS_MASK (15 << OTGFS_GRXSTSH_PKTSTS_SHIFT)
|
#define OTGFS_GRXSTSH_PKTSTS_MASK (15 << OTGFS_GRXSTSH_PKTSTS_SHIFT)
|
||||||
# define OTGFS_GRXSTSH_PKTSTS_INRECVD (2 << OTGFS_GRXSTSH_PKTSTS_SHIFT) /* IN data packet received */
|
# define OTGFS_GRXSTSH_PKTSTS_INRECVD (2 << OTGFS_GRXSTSH_PKTSTS_SHIFT) /* IN data packet received */
|
||||||
# define OTGFS_GRXSTSH_PKTSTS_INDONE (3 << OTGFS_GRXSTSH_PKTSTS_SHIFT) /* IN transfer completed */
|
# define OTGFS_GRXSTSH_PKTSTS_INDONE (3 << OTGFS_GRXSTSH_PKTSTS_SHIFT) /* IN transfer completed */
|
||||||
# define OTGFS_GRXSTSH_PKTSTS_DTOGERR (2 << OTGFS_GRXSTSH_PKTSTS_SHIFT) /* Data toggle error */
|
# define OTGFS_GRXSTSH_PKTSTS_DTOGERR (5 << OTGFS_GRXSTSH_PKTSTS_SHIFT) /* Data toggle error */
|
||||||
# define OTGFS_GRXSTSH_PKTSTS_HALTED (7 << OTGFS_GRXSTSH_PKTSTS_SHIFT) /* Channel halted */
|
# define OTGFS_GRXSTSH_PKTSTS_HALTED (7 << OTGFS_GRXSTSH_PKTSTS_SHIFT) /* Channel halted */
|
||||||
/* Bits 21-31: Reserved, must be kept at reset value */
|
/* Bits 21-31: Reserved, must be kept at reset value */
|
||||||
/* Receive status debug read/OTG status read and pop registers (device mode) */
|
/* Receive status debug read/OTG status read and pop registers (device mode) */
|
||||||
@@ -559,7 +573,7 @@
|
|||||||
# define OTGFS_HNPTXSTS_EPNUM_SHIFT (27) /* Bits 27-30: Endpoint number */
|
# define OTGFS_HNPTXSTS_EPNUM_SHIFT (27) /* Bits 27-30: Endpoint number */
|
||||||
# define OTGFS_HNPTXSTS_EPNUM_MASK (15 << OTGFS_HNPTXSTS_EPNUM_SHIFT)
|
# define OTGFS_HNPTXSTS_EPNUM_MASK (15 << OTGFS_HNPTXSTS_EPNUM_SHIFT)
|
||||||
/* Bit 31 Reserved, must be kept at reset value */
|
/* Bit 31 Reserved, must be kept at reset value */
|
||||||
/* general core configuration register */
|
/* General core configuration register */
|
||||||
/* Bits 15:0 Reserved, must be kept at reset value */
|
/* Bits 15:0 Reserved, must be kept at reset value */
|
||||||
#define OTGFS_GCCFG_PWRDWN (1 << 16) /* Bit 16: Power down */
|
#define OTGFS_GCCFG_PWRDWN (1 << 16) /* Bit 16: Power down */
|
||||||
/* Bit 17 Reserved, must be kept at reset value */
|
/* Bit 17 Reserved, must be kept at reset value */
|
||||||
@@ -625,9 +639,11 @@
|
|||||||
# define OTGFS_HPTXSTS_TYPE_HALT (3 << OTGFS_HPTXSTS_TYPE_SHIFT) /* Disable channel command */
|
# define OTGFS_HPTXSTS_TYPE_HALT (3 << OTGFS_HPTXSTS_TYPE_SHIFT) /* Disable channel command */
|
||||||
# define OTGFS_HPTXSTS_EPNUM_SHIFT (27) /* Bits 27-30: Endpoint number */
|
# define OTGFS_HPTXSTS_EPNUM_SHIFT (27) /* Bits 27-30: Endpoint number */
|
||||||
# define OTGFS_HPTXSTS_EPNUM_MASK (15 << OTGFS_HPTXSTS_EPNUM_SHIFT)
|
# define OTGFS_HPTXSTS_EPNUM_MASK (15 << OTGFS_HPTXSTS_EPNUM_SHIFT)
|
||||||
|
# define OTGFS_HPTXSTS_CHNUM_SHIFT (27) /* Bits 27-30: Channel number */
|
||||||
|
# define OTGFS_HPTXSTS_CHNUM_MASK (15 << OTGFS_HPTXSTS_CHNUM_SHIFT)
|
||||||
# define OTGFS_HPTXSTS_ODD (1 << 24) /* Bit 31: Send in odd (vs even) frame */
|
# define OTGFS_HPTXSTS_ODD (1 << 24) /* Bit 31: Send in odd (vs even) frame */
|
||||||
|
|
||||||
/* Host all channels interrupt and all channels interrupt mask registers */
|
/* Host all channels interrupt and all channels interrupt mask registers */
|
||||||
|
|
||||||
#define OTGFS_HAINT(n) (1 << (n)) /* Bits 15:0 HAINTM: Channel interrupt */
|
#define OTGFS_HAINT(n) (1 << (n)) /* Bits 15:0 HAINTM: Channel interrupt */
|
||||||
|
|
||||||
@@ -664,7 +680,7 @@
|
|||||||
|
|
||||||
/* Host channel-n characteristics register */
|
/* Host channel-n characteristics register */
|
||||||
|
|
||||||
#define OTGFS_HCCHAR0_MPSIZ_SHIFT (0) /* Bits 0-10: Maximum packet size */
|
#define OTGFS_HCCHAR_MPSIZ_SHIFT (0) /* Bits 0-10: Maximum packet size */
|
||||||
#define OTGFS_HCCHAR_MPSIZ_MASK (0x7ff << OTGFS_HCCHAR_MPSIZ_SHIFT)
|
#define OTGFS_HCCHAR_MPSIZ_MASK (0x7ff << OTGFS_HCCHAR_MPSIZ_SHIFT)
|
||||||
#define OTGFS_HCCHAR_EPNUM_SHIFT (11) /* Bits 11-14: Endpoint number */
|
#define OTGFS_HCCHAR_EPNUM_SHIFT (11) /* Bits 11-14: Endpoint number */
|
||||||
#define OTGFS_HCCHAR_EPNUM_MASK (15 << OTGFS_HCCHAR_EPNUM_SHIFT)
|
#define OTGFS_HCCHAR_EPNUM_MASK (15 << OTGFS_HCCHAR_EPNUM_SHIFT)
|
||||||
@@ -695,7 +711,7 @@
|
|||||||
#define OTGFS_HCINT_STALL (1 << 3) /* Bit 3: STALL response received interrupt */
|
#define OTGFS_HCINT_STALL (1 << 3) /* Bit 3: STALL response received interrupt */
|
||||||
#define OTGFS_HCINT_NAK (1 << 4) /* Bit 4: NAK response received interrupt */
|
#define OTGFS_HCINT_NAK (1 << 4) /* Bit 4: NAK response received interrupt */
|
||||||
#define OTGFS_HCINT_ACK (1 << 5) /* Bit 5: ACK response received/transmitted interrupt */
|
#define OTGFS_HCINT_ACK (1 << 5) /* Bit 5: ACK response received/transmitted interrupt */
|
||||||
#define OTGFS_HCINTMSK_NYET (1 << 6) /* Bit 6: response received interrupt mask */
|
#define OTGFS_HCINT_NYET (1 << 6) /* Bit 6: Response received interrupt */
|
||||||
#define OTGFS_HCINT_TXERR (1 << 7) /* Bit 7: Transaction error */
|
#define OTGFS_HCINT_TXERR (1 << 7) /* Bit 7: Transaction error */
|
||||||
#define OTGFS_HCINT_BBERR (1 << 8) /* Bit 8: Babble error */
|
#define OTGFS_HCINT_BBERR (1 << 8) /* Bit 8: Babble error */
|
||||||
#define OTGFS_HCINT_FRMOR (1 << 9) /* Bit 9: Frame overrun */
|
#define OTGFS_HCINT_FRMOR (1 << 9) /* Bit 9: Frame overrun */
|
||||||
@@ -712,7 +728,8 @@
|
|||||||
# define OTGFS_HCTSIZ_DPID_DATA0 (0 << OTGFS_HCTSIZ_DPID_SHIFT)
|
# define OTGFS_HCTSIZ_DPID_DATA0 (0 << OTGFS_HCTSIZ_DPID_SHIFT)
|
||||||
# define OTGFS_HCTSIZ_DPID_DATA2 (1 << OTGFS_HCTSIZ_DPID_SHIFT)
|
# define OTGFS_HCTSIZ_DPID_DATA2 (1 << OTGFS_HCTSIZ_DPID_SHIFT)
|
||||||
# define OTGFS_HCTSIZ_DPID_DATA1 (2 << OTGFS_HCTSIZ_DPID_SHIFT)
|
# define OTGFS_HCTSIZ_DPID_DATA1 (2 << OTGFS_HCTSIZ_DPID_SHIFT)
|
||||||
# define OTGFS_HCTSIZ_DPID_MDATA (3 << OTGFS_HCTSIZ_DPID_SHIFT)
|
# define OTGFS_HCTSIZ_DPID_MDATA (3 << OTGFS_HCTSIZ_DPID_SHIFT) /* Non-control */
|
||||||
|
# define OTGFS_HCTSIZ_PID_SETUP (3 << OTGFS_HCTSIZ_DPID_SHIFT) /* Control */
|
||||||
/* Bit 31 Reserved, must be kept at reset value */
|
/* Bit 31 Reserved, must be kept at reset value */
|
||||||
/* Device-mode control and status registers */
|
/* Device-mode control and status registers */
|
||||||
|
|
||||||
@@ -989,8 +1006,6 @@
|
|||||||
# define OTGFS_DOEPTSIZ_RXDPID_DATA1 (2 << OTGFS_DOEPTSIZ_RXDPID_SHIFT)
|
# define OTGFS_DOEPTSIZ_RXDPID_DATA1 (2 << OTGFS_DOEPTSIZ_RXDPID_SHIFT)
|
||||||
# define OTGFS_DOEPTSIZ_RXDPID_MDATA (3 << OTGFS_DOEPTSIZ_RXDPID_SHIFT)
|
# define OTGFS_DOEPTSIZ_RXDPID_MDATA (3 << OTGFS_DOEPTSIZ_RXDPID_SHIFT)
|
||||||
/* Bit 31: Reserved, must be kept at reset value */
|
/* Bit 31: Reserved, must be kept at reset value */
|
||||||
/* Power and clock gating registers */
|
|
||||||
|
|
||||||
/* Power and clock gating control register */
|
/* Power and clock gating control register */
|
||||||
|
|
||||||
#define OTGFS_PCGCCTL_STPPCLK (1 << 0) /* Bit 0: Stop PHY clock */
|
#define OTGFS_PCGCCTL_STPPCLK (1 << 0) /* Bit 0: Stop PHY clock */
|
||||||
|
|||||||
@@ -365,7 +365,7 @@
|
|||||||
#define GPIO_JTMS_SWDIO (GPIO_ALT|GPIO_AF0|GPIO_PORTA|GPIO_PIN13)
|
#define GPIO_JTMS_SWDIO (GPIO_ALT|GPIO_AF0|GPIO_PORTA|GPIO_PIN13)
|
||||||
#define GPIO_JTRST (GPIO_ALT|GPIO_AF0|GPIO_PORTB|GPIO_PIN4)
|
#define GPIO_JTRST (GPIO_ALT|GPIO_AF0|GPIO_PORTB|GPIO_PIN4)
|
||||||
|
|
||||||
/* OTG FS/HS */
|
/* OTG FS/HS (VBUS PA9 is not an alternate configuration) */
|
||||||
|
|
||||||
#define GPIO_OTGFS_DM (GPIO_ALT|GPIO_FLOAT|GPIO_AF10|GPIO_SPEED_100MHz|GPIO_PUSHPULL|GPIO_PORTA|GPIO_PIN11)
|
#define GPIO_OTGFS_DM (GPIO_ALT|GPIO_FLOAT|GPIO_AF10|GPIO_SPEED_100MHz|GPIO_PUSHPULL|GPIO_PORTA|GPIO_PIN11)
|
||||||
#define GPIO_OTGFS_DP (GPIO_ALT|GPIO_FLOAT|GPIO_AF10|GPIO_SPEED_100MHz|GPIO_PUSHPULL|GPIO_PORTA|GPIO_PIN12)
|
#define GPIO_OTGFS_DP (GPIO_ALT|GPIO_FLOAT|GPIO_AF10|GPIO_SPEED_100MHz|GPIO_PUSHPULL|GPIO_PORTA|GPIO_PIN12)
|
||||||
|
|||||||
@@ -365,7 +365,7 @@
|
|||||||
#define GPIO_JTMS_SWDIO (GPIO_ALT|GPIO_AF0|GPIO_PORTA|GPIO_PIN13)
|
#define GPIO_JTMS_SWDIO (GPIO_ALT|GPIO_AF0|GPIO_PORTA|GPIO_PIN13)
|
||||||
#define GPIO_JTRST (GPIO_ALT|GPIO_AF0|GPIO_PORTB|GPIO_PIN4)
|
#define GPIO_JTRST (GPIO_ALT|GPIO_AF0|GPIO_PORTB|GPIO_PIN4)
|
||||||
|
|
||||||
/* OTG FS/HS */
|
/* OTG FS/HS (VBUS PA9 is not an alternate configuration) */
|
||||||
|
|
||||||
#define GPIO_OTGFS_DM (GPIO_ALT|GPIO_FLOAT|GPIO_AF10|GPIO_SPEED_100MHz|GPIO_PUSHPULL|GPIO_PORTA|GPIO_PIN11)
|
#define GPIO_OTGFS_DM (GPIO_ALT|GPIO_FLOAT|GPIO_AF10|GPIO_SPEED_100MHz|GPIO_PUSHPULL|GPIO_PORTA|GPIO_PIN11)
|
||||||
#define GPIO_OTGFS_DP (GPIO_ALT|GPIO_FLOAT|GPIO_AF10|GPIO_SPEED_100MHz|GPIO_PUSHPULL|GPIO_PORTA|GPIO_PIN12)
|
#define GPIO_OTGFS_DP (GPIO_ALT|GPIO_FLOAT|GPIO_AF10|GPIO_SPEED_100MHz|GPIO_PUSHPULL|GPIO_PORTA|GPIO_PIN12)
|
||||||
|
|||||||
@@ -4086,7 +4086,7 @@ static void *stm32_ep_allocbuffer(FAR struct usbdev_ep_s *ep, unsigned bytes)
|
|||||||
*
|
*
|
||||||
*******************************************************************************/
|
*******************************************************************************/
|
||||||
|
|
||||||
#ifdef CONFIG_LPC313x_USBDEV_DMA
|
#ifdef CONFIG_STM32_USBDEV_DMA
|
||||||
static void stm32_ep_freebuffer(FAR struct usbdev_ep_s *ep, FAR void *buf)
|
static void stm32_ep_freebuffer(FAR struct usbdev_ep_s *ep, FAR void *buf)
|
||||||
{
|
{
|
||||||
usbtrace(TRACE_EPFREEBUFFER, privep->epphy);
|
usbtrace(TRACE_EPFREEBUFFER, privep->epphy);
|
||||||
@@ -4645,7 +4645,6 @@ static int stm32_wakeup(struct usbdev_s *dev)
|
|||||||
regval &= ~(OTGFS_PCGCCTL_STPPCLK | OTGFS_PCGCCTL_GATEHCLK);
|
regval &= ~(OTGFS_PCGCCTL_STPPCLK | OTGFS_PCGCCTL_GATEHCLK);
|
||||||
stm32_putreg(regval, STM32_OTGFS_PCGCCTL);
|
stm32_putreg(regval, STM32_OTGFS_PCGCCTL);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* Activate Remote wakeup signaling */
|
/* Activate Remote wakeup signaling */
|
||||||
|
|
||||||
regval = stm32_getreg(STM32_OTGFS_DCTL);
|
regval = stm32_getreg(STM32_OTGFS_DCTL);
|
||||||
@@ -4971,7 +4970,7 @@ static void stm32_hwinitialize(FAR struct stm32_usbdev_s *priv)
|
|||||||
#ifndef CONFIG_USBDEV_VBUSSENSING
|
#ifndef CONFIG_USBDEV_VBUSSENSING
|
||||||
regval |= OTGFS_GCCFG_NOVBUSSENS;
|
regval |= OTGFS_GCCFG_NOVBUSSENS;
|
||||||
#endif
|
#endif
|
||||||
#ifdef CONFIG_USBDEV_SOFOUTPUT
|
#ifdef CONFIG_STM32_OTGFS_SOFOUTPUT
|
||||||
regval |= OTGFS_GCCFG_SOFOUTEN;
|
regval |= OTGFS_GCCFG_SOFOUTEN;
|
||||||
#endif
|
#endif
|
||||||
stm32_putreg(regval, STM32_OTGFS_GCCFG);
|
stm32_putreg(regval, STM32_OTGFS_GCCFG);
|
||||||
@@ -5173,12 +5172,29 @@ void up_usbinitialize(void)
|
|||||||
* current detection.
|
* current detection.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/* Configure OTG FS alternate function pins */
|
/* Configure OTG FS alternate function pins
|
||||||
|
*
|
||||||
|
* PIN* SIGNAL DIRECTION
|
||||||
|
* ---- ----------- ----------
|
||||||
|
* PA8 OTG_FS_SOF SOF clock output
|
||||||
|
* PA9 OTG_FS_VBUS VBUS input for device, Driven by external regulator by
|
||||||
|
* host (not an alternate function)
|
||||||
|
* PA10 OTG_FS_ID OTG ID pin (only needed in Dual mode)
|
||||||
|
* PA11 OTG_FS_DM D- I/O
|
||||||
|
* PA12 OTG_FS_DP D+ I/O
|
||||||
|
*
|
||||||
|
* *Pins may vary from device-to-device.
|
||||||
|
*/
|
||||||
|
|
||||||
stm32_configgpio(GPIO_OTGFS_DM);
|
stm32_configgpio(GPIO_OTGFS_DM);
|
||||||
stm32_configgpio(GPIO_OTGFS_DP);
|
stm32_configgpio(GPIO_OTGFS_DP);
|
||||||
stm32_configgpio(GPIO_OTGFS_ID);
|
stm32_configgpio(GPIO_OTGFS_ID); /* Only needed for OTG */
|
||||||
|
|
||||||
|
/* SOF output pin configuration is configurable. */
|
||||||
|
|
||||||
|
#ifdef CONFIG_STM32_OTGFS_SOFOUTPUT
|
||||||
stm32_configgpio(GPIO_OTGFS_SOF);
|
stm32_configgpio(GPIO_OTGFS_SOF);
|
||||||
|
#endif
|
||||||
|
|
||||||
/* Uninitialize the hardware so that we know that we are starting from a
|
/* Uninitialize the hardware so that we know that we are starting from a
|
||||||
* known state. */
|
* known state. */
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -47,6 +47,34 @@
|
|||||||
#include "chip.h"
|
#include "chip.h"
|
||||||
#include "chip/stm32_otgfs.h"
|
#include "chip/stm32_otgfs.h"
|
||||||
|
|
||||||
|
#if defined(CONFIG_STM32_OTGFS) && defined(CONFIG_USBHOST)
|
||||||
|
|
||||||
|
/************************************************************************************
|
||||||
|
* Public Functions
|
||||||
|
************************************************************************************/
|
||||||
|
/*
|
||||||
|
* STM32 USB OTG FS Host Driver Support
|
||||||
|
*
|
||||||
|
* Pre-requisites
|
||||||
|
*
|
||||||
|
* CONFIG_USBHOST - Enable general USB host support
|
||||||
|
* CONFIG_STM32_OTGFS - Enable the STM32 USB OTG FS block
|
||||||
|
* CONFIG_STM32_SYSCFG - Needed
|
||||||
|
*
|
||||||
|
* Options:
|
||||||
|
*
|
||||||
|
* CONFIG_STM32_OTGFS_RXFIFO_SIZE - Size of the RX FIFO in 32-bit words.
|
||||||
|
* Default 128 (512 bytes)
|
||||||
|
* CONFIG_STM32_OTGFS_NPTXFIFO_SIZE - Size of the non-periodic Tx FIFO
|
||||||
|
* in 32-bit words. Default 96 (384 bytes)
|
||||||
|
* CONFIG_STM32_OTGFS_PTXFIFO_SIZE - Size of the periodic Tx FIFO in 32-bit
|
||||||
|
* words. Default 96 (384 bytes)
|
||||||
|
* CONFIG_STM32_OTGFS_SOFINTR - Enable SOF interrupts. Why would you ever
|
||||||
|
* want to do that?
|
||||||
|
* CONFIG_STM32_USBHOST_REGDEBUG - Enable very low-level register access
|
||||||
|
* debug. Depends on CONFIG_DEBUG.
|
||||||
|
*/
|
||||||
|
|
||||||
/************************************************************************************
|
/************************************************************************************
|
||||||
* Public Functions
|
* Public Functions
|
||||||
************************************************************************************/
|
************************************************************************************/
|
||||||
@@ -61,11 +89,40 @@ extern "C" {
|
|||||||
#define EXTERN extern
|
#define EXTERN extern
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/***********************************************************************************
|
||||||
|
* Name: stm32_usbhost_vbusdrive
|
||||||
|
*
|
||||||
|
* Description:
|
||||||
|
* Enable/disable driving of VBUS 5V output. This function must be provided be
|
||||||
|
* each platform that implements the STM32 OTG FS host interface
|
||||||
|
*
|
||||||
|
* "On-chip 5 V VBUS generation is not supported. For this reason, a charge pump
|
||||||
|
* or, if 5 V are available on the application board, a basic power switch, must
|
||||||
|
* be added externally to drive the 5 V VBUS line. The external charge pump can
|
||||||
|
* be driven by any GPIO output. When the application decides to power on VBUS
|
||||||
|
* using the chosen GPIO, it must also set the port power bit in the host port
|
||||||
|
* control and status register (PPWR bit in OTG_FS_HPRT).
|
||||||
|
*
|
||||||
|
* "The application uses this field to control power to this port, and the core
|
||||||
|
* clears this bit on an overcurrent condition."
|
||||||
|
*
|
||||||
|
* Input Parameters:
|
||||||
|
* iface - For future growth to handle multiple USB host interface. Should be zero.
|
||||||
|
* enable - true: enable VBUS power; false: disable VBUS power
|
||||||
|
*
|
||||||
|
* Returned Value:
|
||||||
|
* None
|
||||||
|
*
|
||||||
|
***********************************************************************************/
|
||||||
|
|
||||||
|
EXTERN void stm32_usbhost_vbusdrive(int iface, bool enable);
|
||||||
|
|
||||||
#undef EXTERN
|
#undef EXTERN
|
||||||
#if defined(__cplusplus)
|
#if defined(__cplusplus)
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#endif /* __ASSEMBLY__ */
|
#endif /* __ASSEMBLY__ */
|
||||||
|
#endif /* CONFIG_STM32_OTGFS && CONFIG_USBHOST */
|
||||||
#endif /* __ARCH_ARM_SRC_STM32_STM32_USBHOST_H */
|
#endif /* __ARCH_ARM_SRC_STM32_STM32_USBHOST_H */
|
||||||
|
|
||||||
|
|||||||
@@ -616,7 +616,7 @@ static void stm32_stdclockconfig(void)
|
|||||||
/* Set the PLL dividers and multiplers to configure the main PLL */
|
/* Set the PLL dividers and multiplers to configure the main PLL */
|
||||||
|
|
||||||
regval = (STM32_PLLCFG_PLLM | STM32_PLLCFG_PLLN |STM32_PLLCFG_PLLP |
|
regval = (STM32_PLLCFG_PLLM | STM32_PLLCFG_PLLN |STM32_PLLCFG_PLLP |
|
||||||
RCC_PLLCFG_PLLSRC_HSE | STM32_PLLCFG_PPQ);
|
RCC_PLLCFG_PLLSRC_HSE | STM32_PLLCFG_PLLQ);
|
||||||
putreg32(regval, STM32_RCC_PLLCFG);
|
putreg32(regval, STM32_RCC_PLLCFG);
|
||||||
|
|
||||||
/* Enable the main PLL */
|
/* Enable the main PLL */
|
||||||
|
|||||||
@@ -618,7 +618,7 @@ static void stm32_stdclockconfig(void)
|
|||||||
/* Set the PLL dividers and multiplers to configure the main PLL */
|
/* Set the PLL dividers and multiplers to configure the main PLL */
|
||||||
|
|
||||||
regval = (STM32_PLLCFG_PLLM | STM32_PLLCFG_PLLN |STM32_PLLCFG_PLLP |
|
regval = (STM32_PLLCFG_PLLM | STM32_PLLCFG_PLLN |STM32_PLLCFG_PLLP |
|
||||||
RCC_PLLCFG_PLLSRC_HSE | STM32_PLLCFG_PPQ);
|
RCC_PLLCFG_PLLSRC_HSE | STM32_PLLCFG_PLLQ);
|
||||||
putreg32(regval, STM32_RCC_PLLCFG);
|
putreg32(regval, STM32_RCC_PLLCFG);
|
||||||
|
|
||||||
/* Enable the main PLL */
|
/* Enable the main PLL */
|
||||||
|
|||||||
@@ -194,7 +194,7 @@ config ARCH_BOARD_MCU123
|
|||||||
lpc214x development board. This OS is also built with the arm-elf
|
lpc214x development board. This OS is also built with the arm-elf
|
||||||
toolchain*. The port supports serial, timer0, spi, and usb.
|
toolchain*. The port supports serial, timer0, spi, and usb.
|
||||||
|
|
||||||
config ARCH_BOARD_MICROPENDOUS
|
config ARCH_BOARD_MICROPENDOUS3
|
||||||
bool "Opendous Micropendous 3 board"
|
bool "Opendous Micropendous 3 board"
|
||||||
depends on ARCH_CHIP_AT90USB646 || ARCH_CHIP_AT90USB647 || ARCH_CHIP_AT90USB1286 || ARCH_CHIP_AT90USB1287
|
depends on ARCH_CHIP_AT90USB646 || ARCH_CHIP_AT90USB647 || ARCH_CHIP_AT90USB1286 || ARCH_CHIP_AT90USB1287
|
||||||
---help---
|
---help---
|
||||||
@@ -509,7 +509,7 @@ config ARCH_BOARD
|
|||||||
default "m68322evb" if ARCH_BOARD_M68332EVB
|
default "m68322evb" if ARCH_BOARD_M68332EVB
|
||||||
default "mbed" if ARCH_BOARD_MBED
|
default "mbed" if ARCH_BOARD_MBED
|
||||||
default "mcu123-lpc214x" if ARCH_BOARD_MCU123
|
default "mcu123-lpc214x" if ARCH_BOARD_MCU123
|
||||||
default "micropendous3" if ARCH_BOARD_MICROPENDOUS
|
default "micropendous3" if ARCH_BOARD_MICROPENDOUS3
|
||||||
default "mirtoo" if ARCH_BOARD_MIRTOO
|
default "mirtoo" if ARCH_BOARD_MIRTOO
|
||||||
default "mx1ads" if ARCH_BOARD_MX1ADS
|
default "mx1ads" if ARCH_BOARD_MX1ADS
|
||||||
default "ne64badge" if ARCH_BOARD_NE64BADGE
|
default "ne64badge" if ARCH_BOARD_NE64BADGE
|
||||||
@@ -613,7 +613,7 @@ endif
|
|||||||
if ARCH_BOARD_MCU123
|
if ARCH_BOARD_MCU123
|
||||||
source "configs/mcu123-lpc214x/Kconfig"
|
source "configs/mcu123-lpc214x/Kconfig"
|
||||||
endif
|
endif
|
||||||
if ARCH_BOARD_MICROPENDOUS
|
if ARCH_BOARD_MICROPENDOUS3
|
||||||
source "configs/micropendous3/Kconfig"
|
source "configs/micropendous3/Kconfig"
|
||||||
endif
|
endif
|
||||||
if ARCH_BOARD_MIRTOO
|
if ARCH_BOARD_MIRTOO
|
||||||
|
|||||||
@@ -182,6 +182,10 @@ menuconfig LCD
|
|||||||
Drivers for parallel and serial LCD and OLED type devices. These
|
Drivers for parallel and serial LCD and OLED type devices. These
|
||||||
drivers support interfaces as defined in include/nuttx/lcd/lcd.h
|
drivers support interfaces as defined in include/nuttx/lcd/lcd.h
|
||||||
|
|
||||||
|
This selection is necessary to enable support for LCD drivers in
|
||||||
|
drivers/lcd as well as for board-specific LCD drivers in the configs/
|
||||||
|
subdirectories.
|
||||||
|
|
||||||
if LCD
|
if LCD
|
||||||
source drivers/lcd/Kconfig
|
source drivers/lcd/Kconfig
|
||||||
endif
|
endif
|
||||||
|
|||||||
@@ -173,3 +173,42 @@ config LCD_UG9664HSWAG01
|
|||||||
ug-9664hswag01.c. OLED Display Module, UG-9664HSWAG01", Univision
|
ug-9664hswag01.c. OLED Display Module, UG-9664HSWAG01", Univision
|
||||||
Technology Inc. Used with the LPC Xpresso and Embedded Artists
|
Technology Inc. Used with the LPC Xpresso and Embedded Artists
|
||||||
base board.
|
base board.
|
||||||
|
|
||||||
|
choice
|
||||||
|
prompt "LCD Orientation"
|
||||||
|
default LCD_LANDSCAPE
|
||||||
|
depends on LCD
|
||||||
|
---help---
|
||||||
|
Some LCD drivers may support displays in different orientations.
|
||||||
|
If the LCD driver supports this capability, than these are configuration
|
||||||
|
options to select that display orientation.
|
||||||
|
|
||||||
|
config LCD_LANDSCAPE
|
||||||
|
bool "Landscape orientation"
|
||||||
|
---help---
|
||||||
|
Define for "landscape" orientation support. Landscape mode refers one
|
||||||
|
of two orientations where the the display is wider than it is tall
|
||||||
|
(LCD_RLANDSCAPE is the other). This is the default orientation.
|
||||||
|
|
||||||
|
config LCD_PORTRAIT
|
||||||
|
bool "Portrait orientation"
|
||||||
|
---help---
|
||||||
|
Define for "portrait" orientation support. Portrait mode refers one
|
||||||
|
of two orientations where the the display is taller than it is wide
|
||||||
|
(LCD_RPORTAIT is the other).
|
||||||
|
|
||||||
|
config LCD_RPORTRAIT
|
||||||
|
bool "Reverse portrait display"
|
||||||
|
---help---
|
||||||
|
Define for "reverse portrait" orientation support. Reverse portrait mode
|
||||||
|
refers one of two orientations where the the display is taller than it is
|
||||||
|
wide (LCD_PORTAIT is the other).
|
||||||
|
|
||||||
|
config LCD_RLANDSCAPE
|
||||||
|
bool "Reverse landscape orientation"
|
||||||
|
---help---
|
||||||
|
Define for "reverse landscape" orientation support. Reverse landscape mode
|
||||||
|
refers one of two orientations where the the display is wider than it is
|
||||||
|
tall (LCD_LANDSCAPE is the other).
|
||||||
|
|
||||||
|
endchoice
|
||||||
|
|||||||
@@ -37,7 +37,10 @@
|
|||||||
# These drivers depend on I2C support
|
# These drivers depend on I2C support
|
||||||
|
|
||||||
ifeq ($(CONFIG_I2C),y)
|
ifeq ($(CONFIG_I2C),y)
|
||||||
|
|
||||||
|
ifeq ($(CONFIG_I2C_TRANSFER),y)
|
||||||
CSRCS += lis331dl.c
|
CSRCS += lis331dl.c
|
||||||
|
endif
|
||||||
|
|
||||||
ifeq ($(CONFIG_I2C_LM75),y)
|
ifeq ($(CONFIG_I2C_LM75),y)
|
||||||
CSRCS += lm75.c
|
CSRCS += lm75.c
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
/*******************************************************************************
|
/*******************************************************************************
|
||||||
* drivers/usbhost/usbhost_enumerate.c
|
* drivers/usbhost/usbhost_enumerate.c
|
||||||
*
|
*
|
||||||
* Copyright (C) 2011 Gregory Nutt. All rights reserved.
|
* Copyright (C) 2011-2012 Gregory Nutt. All rights reserved.
|
||||||
* Authors: Gregory Nutt <spudmonkey@racsa.co.cr>
|
* Authors: Gregory Nutt <gnutt@nuttx.org>
|
||||||
*
|
*
|
||||||
* Redistribution and use in source and binary forms, with or without
|
* Redistribution and use in source and binary forms, with or without
|
||||||
* modification, are permitted provided that the following conditions
|
* modification, are permitted provided that the following conditions
|
||||||
@@ -122,8 +122,8 @@ static void usbhost_putle16(uint8_t *dest, uint16_t val)
|
|||||||
*
|
*
|
||||||
*******************************************************************************/
|
*******************************************************************************/
|
||||||
|
|
||||||
static inline int usbhost_devdesc(const struct usb_devdesc_s *devdesc,
|
static inline int usbhost_devdesc(FAR const struct usb_devdesc_s *devdesc,
|
||||||
struct usbhost_id_s *id)
|
FAR struct usbhost_id_s *id)
|
||||||
{
|
{
|
||||||
/* Clear the ID info */
|
/* Clear the ID info */
|
||||||
|
|
||||||
@@ -131,7 +131,7 @@ static inline int usbhost_devdesc(const struct usb_devdesc_s *devdesc,
|
|||||||
|
|
||||||
/* Pick off the class ID info */
|
/* Pick off the class ID info */
|
||||||
|
|
||||||
id->base = devdesc->class;
|
id->base = devdesc->classid;
|
||||||
id->subclass = devdesc->subclass;
|
id->subclass = devdesc->subclass;
|
||||||
id->proto = devdesc->protocol;
|
id->proto = devdesc->protocol;
|
||||||
|
|
||||||
@@ -194,7 +194,7 @@ static inline int usbhost_configdesc(const uint8_t *configdesc, int cfglen,
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
DEBUGASSERT(remaining >= sizeof(struct usb_ifdesc_s));
|
DEBUGASSERT(remaining >= sizeof(struct usb_ifdesc_s));
|
||||||
id->base = ifdesc->class;
|
id->base = ifdesc->classid;
|
||||||
id->subclass = ifdesc->subclass;
|
id->subclass = ifdesc->subclass;
|
||||||
id->proto = ifdesc->protocol;
|
id->proto = ifdesc->protocol;
|
||||||
uvdbg("class:%d subclass:%d protocol:%d\n",
|
uvdbg("class:%d subclass:%d protocol:%d\n",
|
||||||
|
|||||||
@@ -255,7 +255,9 @@ static inline int usbhost_devinit(FAR struct usbhost_state_s *priv);
|
|||||||
static inline uint16_t usbhost_getle16(const uint8_t *val);
|
static inline uint16_t usbhost_getle16(const uint8_t *val);
|
||||||
static inline void usbhost_putle16(uint8_t *dest, uint16_t val);
|
static inline void usbhost_putle16(uint8_t *dest, uint16_t val);
|
||||||
static inline uint32_t usbhost_getle32(const uint8_t *val);
|
static inline uint32_t usbhost_getle32(const uint8_t *val);
|
||||||
|
#if 0 /* Not used */
|
||||||
static void usbhost_putle32(uint8_t *dest, uint32_t val);
|
static void usbhost_putle32(uint8_t *dest, uint32_t val);
|
||||||
|
#endif
|
||||||
|
|
||||||
/* Transfer descriptor memory management */
|
/* Transfer descriptor memory management */
|
||||||
|
|
||||||
@@ -701,7 +703,7 @@ static int usbhost_kbdpoll(int argc, char *argv[])
|
|||||||
#if defined(CONFIG_DEBUG_USB) && defined(CONFIG_DEBUG_VERBOSE)
|
#if defined(CONFIG_DEBUG_USB) && defined(CONFIG_DEBUG_VERBOSE)
|
||||||
unsigned int npolls = 0;
|
unsigned int npolls = 0;
|
||||||
#endif
|
#endif
|
||||||
unsigned int nerrors;
|
unsigned int nerrors = 0;
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
uvdbg("Started\n");
|
uvdbg("Started\n");
|
||||||
@@ -1381,6 +1383,7 @@ static inline uint32_t usbhost_getle32(const uint8_t *val)
|
|||||||
*
|
*
|
||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
|
|
||||||
|
#if 0 /* Not used */
|
||||||
static void usbhost_putle32(uint8_t *dest, uint32_t val)
|
static void usbhost_putle32(uint8_t *dest, uint32_t val)
|
||||||
{
|
{
|
||||||
/* Little endian means LS halfword first in byte stream */
|
/* Little endian means LS halfword first in byte stream */
|
||||||
@@ -1388,6 +1391,7 @@ static void usbhost_putle32(uint8_t *dest, uint32_t val)
|
|||||||
usbhost_putle16(dest, (uint16_t)(val & 0xffff));
|
usbhost_putle16(dest, (uint16_t)(val & 0xffff));
|
||||||
usbhost_putle16(dest+2, (uint16_t)(val >> 16));
|
usbhost_putle16(dest+2, (uint16_t)(val >> 16));
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
* Name: usbhost_tdalloc
|
* Name: usbhost_tdalloc
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
* drivers/usbhost/usbhost_storage.c
|
* drivers/usbhost/usbhost_storage.c
|
||||||
*
|
*
|
||||||
* Copyright (C) 2010-2011 Gregory Nutt. All rights reserved.
|
* Copyright (C) 2010-2012 Gregory Nutt. All rights reserved.
|
||||||
* Author: Gregory Nutt <spudmonkey@racsa.co.cr>
|
* Author: Gregory Nutt <gnutt@nuttx.org>
|
||||||
*
|
*
|
||||||
* Redistribution and use in source and binary forms, with or without
|
* Redistribution and use in source and binary forms, with or without
|
||||||
* modification, are permitted provided that the following conditions
|
* modification, are permitted provided that the following conditions
|
||||||
@@ -1949,41 +1949,48 @@ static ssize_t usbhost_read(FAR struct inode *inode, unsigned char *buffer,
|
|||||||
cbw = usbhost_cbwalloc(priv);
|
cbw = usbhost_cbwalloc(priv);
|
||||||
if (cbw)
|
if (cbw)
|
||||||
{
|
{
|
||||||
/* Assume some device failure */
|
/* Loop in the event that EAGAIN is returned (mean that the
|
||||||
|
* transaction was NAKed and we should try again.
|
||||||
|
*/
|
||||||
|
|
||||||
ret = -ENODEV;
|
do
|
||||||
|
|
||||||
/* Construct and send the CBW */
|
|
||||||
|
|
||||||
usbhost_readcbw(startsector, priv->blocksize, nsectors, cbw);
|
|
||||||
result = DRVR_TRANSFER(priv->drvr, priv->bulkout,
|
|
||||||
(uint8_t*)cbw, USBMSC_CBW_SIZEOF);
|
|
||||||
if (result == OK)
|
|
||||||
{
|
{
|
||||||
/* Receive the user data */
|
/* Assume some device failure */
|
||||||
|
|
||||||
result = DRVR_TRANSFER(priv->drvr, priv->bulkin,
|
ret = -ENODEV;
|
||||||
buffer, priv->blocksize * nsectors);
|
|
||||||
|
/* Construct and send the CBW */
|
||||||
|
|
||||||
|
usbhost_readcbw(startsector, priv->blocksize, nsectors, cbw);
|
||||||
|
result = DRVR_TRANSFER(priv->drvr, priv->bulkout,
|
||||||
|
(uint8_t*)cbw, USBMSC_CBW_SIZEOF);
|
||||||
if (result == OK)
|
if (result == OK)
|
||||||
{
|
{
|
||||||
/* Receive the CSW */
|
/* Receive the user data */
|
||||||
|
|
||||||
result = DRVR_TRANSFER(priv->drvr, priv->bulkin,
|
result = DRVR_TRANSFER(priv->drvr, priv->bulkin,
|
||||||
priv->tbuffer, USBMSC_CSW_SIZEOF);
|
buffer, priv->blocksize * nsectors);
|
||||||
if (result == OK)
|
if (result == OK)
|
||||||
{
|
{
|
||||||
FAR struct usbmsc_csw_s *csw;
|
/* Receive the CSW */
|
||||||
|
|
||||||
/* Check the CSW status */
|
result = DRVR_TRANSFER(priv->drvr, priv->bulkin,
|
||||||
|
priv->tbuffer, USBMSC_CSW_SIZEOF);
|
||||||
csw = (FAR struct usbmsc_csw_s *)priv->tbuffer;
|
if (result == OK)
|
||||||
if (csw->status == 0)
|
|
||||||
{
|
{
|
||||||
ret = nsectors;
|
FAR struct usbmsc_csw_s *csw;
|
||||||
|
|
||||||
|
/* Check the CSW status */
|
||||||
|
|
||||||
|
csw = (FAR struct usbmsc_csw_s *)priv->tbuffer;
|
||||||
|
if (csw->status == 0)
|
||||||
|
{
|
||||||
|
ret = nsectors;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
} while (result == -EAGAIN);
|
||||||
}
|
}
|
||||||
|
|
||||||
usbhost_givesem(&priv->exclsem);
|
usbhost_givesem(&priv->exclsem);
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
/************************************************************************************
|
/************************************************************************************
|
||||||
* include/nuttx/usb/usbhost.h
|
* include/nuttx/usb/usbhost.h
|
||||||
*
|
*
|
||||||
* Copyright (C) 2010-2011 Gregory Nutt. All rights reserved.
|
* Copyright (C) 2010-2012 Gregory Nutt. All rights reserved.
|
||||||
* Author: Gregory Nutt <gnutt@nuttx.org>
|
* Author: Gregory Nutt <gnutt@nuttx.org>
|
||||||
*
|
*
|
||||||
* References:
|
* References:
|
||||||
@@ -284,7 +284,7 @@
|
|||||||
* Some hardware supports special memory in which request and descriptor data can
|
* Some hardware supports special memory in which request and descriptor data can
|
||||||
* be accessed more efficiently. This method provides a mechanism to allocate
|
* be accessed more efficiently. This method provides a mechanism to allocate
|
||||||
* the request/descriptor memory. If the underlying hardware does not support
|
* the request/descriptor memory. If the underlying hardware does not support
|
||||||
* such "special" memory, this functions may simply map to malloc.
|
* such "special" memory, this functions may simply map to kmalloc.
|
||||||
*
|
*
|
||||||
* This interface was optimized under a particular assumption. It was assumed
|
* This interface was optimized under a particular assumption. It was assumed
|
||||||
* that the driver maintains a pool of small, pre-allocated buffers for descriptor
|
* that the driver maintains a pool of small, pre-allocated buffers for descriptor
|
||||||
@@ -317,7 +317,7 @@
|
|||||||
* Some hardware supports special memory in which request and descriptor data can
|
* Some hardware supports special memory in which request and descriptor data can
|
||||||
* be accessed more efficiently. This method provides a mechanism to free that
|
* be accessed more efficiently. This method provides a mechanism to free that
|
||||||
* request/descriptor memory. If the underlying hardware does not support
|
* request/descriptor memory. If the underlying hardware does not support
|
||||||
* such "special" memory, this functions may simply map to free().
|
* such "special" memory, this functions may simply map to kfree().
|
||||||
*
|
*
|
||||||
* Input Parameters:
|
* Input Parameters:
|
||||||
* drvr - The USB host driver instance obtained as a parameter from the call to
|
* drvr - The USB host driver instance obtained as a parameter from the call to
|
||||||
@@ -342,7 +342,7 @@
|
|||||||
* Some hardware supports special memory in which larger IO buffers can
|
* Some hardware supports special memory in which larger IO buffers can
|
||||||
* be accessed more efficiently. This method provides a mechanism to allocate
|
* be accessed more efficiently. This method provides a mechanism to allocate
|
||||||
* the request/descriptor memory. If the underlying hardware does not support
|
* the request/descriptor memory. If the underlying hardware does not support
|
||||||
* such "special" memory, this functions may simply map to malloc.
|
* such "special" memory, this functions may simply map to kmalloc.
|
||||||
*
|
*
|
||||||
* This interface differs from DRVR_ALLOC in that the buffers are variable-sized.
|
* This interface differs from DRVR_ALLOC in that the buffers are variable-sized.
|
||||||
*
|
*
|
||||||
@@ -371,7 +371,7 @@
|
|||||||
* Some hardware supports special memory in which IO data can be accessed more
|
* Some hardware supports special memory in which IO data can be accessed more
|
||||||
* efficiently. This method provides a mechanism to free that IO buffer
|
* efficiently. This method provides a mechanism to free that IO buffer
|
||||||
* memory. If the underlying hardware does not support such "special" memory,
|
* memory. If the underlying hardware does not support such "special" memory,
|
||||||
* this functions may simply map to free().
|
* this functions may simply map to kfree().
|
||||||
*
|
*
|
||||||
* Input Parameters:
|
* Input Parameters:
|
||||||
* drvr - The USB host driver instance obtained as a parameter from the call to
|
* drvr - The USB host driver instance obtained as a parameter from the call to
|
||||||
@@ -448,7 +448,13 @@
|
|||||||
*
|
*
|
||||||
* Returned Values:
|
* Returned Values:
|
||||||
* On success, zero (OK) is returned. On a failure, a negated errno value is
|
* On success, zero (OK) is returned. On a failure, a negated errno value is
|
||||||
* returned indicating the nature of the failure
|
* returned indicating the nature of the failure:
|
||||||
|
*
|
||||||
|
* EAGAIN - If devices NAKs the transfer (or NYET or other error where
|
||||||
|
* it may be appropriate to restart the entire transaction).
|
||||||
|
* EPERM - If the endpoint stalls
|
||||||
|
* EIO - On a TX or data toggle error
|
||||||
|
* EPIPE - Overrun errors
|
||||||
*
|
*
|
||||||
* Assumptions:
|
* Assumptions:
|
||||||
* This function will *not* be called from an interrupt handler.
|
* This function will *not* be called from an interrupt handler.
|
||||||
@@ -553,7 +559,7 @@ struct usbhost_class_s
|
|||||||
};
|
};
|
||||||
|
|
||||||
/* This structure describes one endpoint. It is used as an input to the
|
/* This structure describes one endpoint. It is used as an input to the
|
||||||
* allocep() method. Most of this information comes from the endpoint
|
* epalloc() method. Most of this information comes from the endpoint
|
||||||
* descriptor.
|
* descriptor.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@@ -562,12 +568,12 @@ struct usbhost_epdesc_s
|
|||||||
uint8_t addr; /* Endpoint address */
|
uint8_t addr; /* Endpoint address */
|
||||||
bool in; /* Direction: true->IN */
|
bool in; /* Direction: true->IN */
|
||||||
uint8_t funcaddr; /* USB address of function containing endpoint */
|
uint8_t funcaddr; /* USB address of function containing endpoint */
|
||||||
uint8_t xfrtype; /* Transfer type. See SB_EP_ATTR_XFER_* in usb.h */
|
uint8_t xfrtype; /* Transfer type. See USB_EP_ATTR_XFER_* in usb.h */
|
||||||
uint8_t interval; /* Polling interval */
|
uint8_t interval; /* Polling interval */
|
||||||
uint16_t mxpacketsize; /* Max packetsize */
|
uint16_t mxpacketsize; /* Max packetsize */
|
||||||
};
|
};
|
||||||
|
|
||||||
/* This type represents one endpoint configured by the allocep() method.
|
/* This type represents one endpoint configured by the epalloc() method.
|
||||||
* The actual form is know only internally to the USB host controller
|
* The actual form is know only internally to the USB host controller
|
||||||
* (for example, for an OHCI driver, this would probably be a pointer
|
* (for example, for an OHCI driver, this would probably be a pointer
|
||||||
* to an endpoint descriptor).
|
* to an endpoint descriptor).
|
||||||
@@ -615,7 +621,7 @@ struct usbhost_driver_s
|
|||||||
* be accessed more efficiently. The following methods provide a mechanism
|
* be accessed more efficiently. The following methods provide a mechanism
|
||||||
* to allocate and free the transfer descriptor memory. If the underlying
|
* to allocate and free the transfer descriptor memory. If the underlying
|
||||||
* hardware does not support such "special" memory, these functions may
|
* hardware does not support such "special" memory, these functions may
|
||||||
* simply map to malloc and free.
|
* simply map to kmalloc and kfree.
|
||||||
*
|
*
|
||||||
* This interface was optimized under a particular assumption. It was assumed
|
* This interface was optimized under a particular assumption. It was assumed
|
||||||
* that the driver maintains a pool of small, pre-allocated buffers for descriptor
|
* that the driver maintains a pool of small, pre-allocated buffers for descriptor
|
||||||
@@ -630,7 +636,7 @@ struct usbhost_driver_s
|
|||||||
/* Some hardware supports special memory in which larger IO buffers can
|
/* Some hardware supports special memory in which larger IO buffers can
|
||||||
* be accessed more efficiently. This method provides a mechanism to allocate
|
* be accessed more efficiently. This method provides a mechanism to allocate
|
||||||
* the request/descriptor memory. If the underlying hardware does not support
|
* the request/descriptor memory. If the underlying hardware does not support
|
||||||
* such "special" memory, this functions may simply map to malloc.
|
* such "special" memory, this functions may simply map to kmalloc.
|
||||||
*
|
*
|
||||||
* This interface differs from DRVR_ALLOC in that the buffers are variable-sized.
|
* This interface differs from DRVR_ALLOC in that the buffers are variable-sized.
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -60,16 +60,16 @@ extern "C" {
|
|||||||
* Public Type Declarations
|
* Public Type Declarations
|
||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
|
|
||||||
/* This structure contains the holder of a semaphore */
|
/* This structure contains information about the holder of a semaphore */
|
||||||
|
|
||||||
#ifdef CONFIG_PRIORITY_INHERITANCE
|
#ifdef CONFIG_PRIORITY_INHERITANCE
|
||||||
struct semholder_s
|
struct semholder_s
|
||||||
{
|
{
|
||||||
#if CONFIG_SEM_PREALLOCHOLDERS > 0
|
#if CONFIG_SEM_PREALLOCHOLDERS > 0
|
||||||
struct semholder_s *flink; /* Implements singly linked list */
|
struct semholder_s *flink; /* Implements singly linked list */
|
||||||
#endif
|
#endif
|
||||||
void *holder; /* Holder TCB (actual type is _TCB) */
|
void *htcb; /* Holder TCB (actual type is _TCB) */
|
||||||
int16_t counts; /* Number of counts owned by this holder */
|
int16_t counts; /* Number of counts owned by this holder */
|
||||||
};
|
};
|
||||||
|
|
||||||
#if CONFIG_SEM_PREALLOCHOLDERS > 0
|
#if CONFIG_SEM_PREALLOCHOLDERS > 0
|
||||||
@@ -83,12 +83,21 @@ struct semholder_s
|
|||||||
|
|
||||||
struct sem_s
|
struct sem_s
|
||||||
{
|
{
|
||||||
int16_t semcount; /* >0 -> Num counts available */
|
int16_t semcount; /* >0 -> Num counts available */
|
||||||
/* <0 -> Num tasks waiting for semaphore */
|
/* <0 -> Num tasks waiting for semaphore */
|
||||||
|
/* If priority inheritance is enabled, then we have to keep track of which
|
||||||
|
* tasks hold references to the semaphore.
|
||||||
|
*/
|
||||||
|
|
||||||
#ifdef CONFIG_PRIORITY_INHERITANCE
|
#ifdef CONFIG_PRIORITY_INHERITANCE
|
||||||
struct semholder_s hlist; /* List of holders of semaphore counts */
|
# if CONFIG_SEM_PREALLOCHOLDERS > 0
|
||||||
|
FAR struct semholder_s *hhead; /* List of holders of semaphore counts */
|
||||||
|
# else
|
||||||
|
struct semholder_s holder; /* Single holder */
|
||||||
|
# endif
|
||||||
#endif
|
#endif
|
||||||
};
|
};
|
||||||
|
|
||||||
typedef struct sem_s sem_t;
|
typedef struct sem_s sem_t;
|
||||||
|
|
||||||
/* Initializers */
|
/* Initializers */
|
||||||
|
|||||||
@@ -103,16 +103,17 @@ int sem_init(FAR sem_t *sem, int pshared, unsigned int value)
|
|||||||
{
|
{
|
||||||
/* Initialize the seamphore count */
|
/* Initialize the seamphore count */
|
||||||
|
|
||||||
sem->semcount = (int16_t)value;
|
sem->semcount = (int16_t)value;
|
||||||
|
|
||||||
/* Initialize to support priority inheritance */
|
/* Initialize to support priority inheritance */
|
||||||
|
|
||||||
#ifdef CONFIG_PRIORITY_INHERITANCE
|
#ifdef CONFIG_PRIORITY_INHERITANCE
|
||||||
# if CONFIG_SEM_PREALLOCHOLDERS > 0
|
# if CONFIG_SEM_PREALLOCHOLDERS > 0
|
||||||
sem->hlist.flink = NULL;
|
sem->hhead = NULL;
|
||||||
|
# else
|
||||||
|
sem->holder.htcb = NULL;
|
||||||
|
sem->holder.counts = 0;
|
||||||
# endif
|
# endif
|
||||||
sem->hlist.holder = NULL;
|
|
||||||
sem->hlist.counts = 0;
|
|
||||||
#endif
|
#endif
|
||||||
return OK;
|
return OK;
|
||||||
}
|
}
|
||||||
|
|||||||
+1
-1
@@ -204,7 +204,7 @@ config SCHED_ONEXIT_MAX
|
|||||||
|
|
||||||
config DISABLE_OS_API
|
config DISABLE_OS_API
|
||||||
bool "Disable NuttX interfaces"
|
bool "Disable NuttX interfaces"
|
||||||
default n
|
default y
|
||||||
---help---
|
---help---
|
||||||
The following can be used to disable categories of
|
The following can be used to disable categories of
|
||||||
APIs supported by the OS. If the compiler supports
|
APIs supported by the OS. If the compiler supports
|
||||||
|
|||||||
+12
-9
@@ -289,6 +289,18 @@ void os_start(void)
|
|||||||
g_idletcb.flags = TCB_FLAG_TTYPE_KERNEL;
|
g_idletcb.flags = TCB_FLAG_TTYPE_KERNEL;
|
||||||
up_initial_state(&g_idletcb);
|
up_initial_state(&g_idletcb);
|
||||||
|
|
||||||
|
/* Initialize the semaphore facility(if in link). This has to be done
|
||||||
|
* very early because many subsystems depend upon fully functional
|
||||||
|
* semaphores.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifdef CONFIG_HAVE_WEAKFUNCTIONS
|
||||||
|
if (sem_initialize != NULL)
|
||||||
|
#endif
|
||||||
|
{
|
||||||
|
sem_initialize();
|
||||||
|
}
|
||||||
|
|
||||||
/* Initialize the memory manager */
|
/* Initialize the memory manager */
|
||||||
|
|
||||||
#ifndef CONFIG_HEAP_BASE
|
#ifndef CONFIG_HEAP_BASE
|
||||||
@@ -351,15 +363,6 @@ void os_start(void)
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* Initialize the semaphore facility. (if in link) */
|
|
||||||
|
|
||||||
#ifdef CONFIG_HAVE_WEAKFUNCTIONS
|
|
||||||
if (sem_initialize != NULL)
|
|
||||||
#endif
|
|
||||||
{
|
|
||||||
sem_initialize();
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Initialize the named message queue facility (if in link) */
|
/* Initialize the named message queue facility (if in link) */
|
||||||
|
|
||||||
#ifndef CONFIG_DISABLE_MQUEUE
|
#ifndef CONFIG_DISABLE_MQUEUE
|
||||||
|
|||||||
@@ -178,7 +178,7 @@
|
|||||||
|
|
||||||
pid_t waitpid(pid_t pid, int *stat_loc, int options)
|
pid_t waitpid(pid_t pid, int *stat_loc, int options)
|
||||||
{
|
{
|
||||||
_TCB *tcb = sched_gettcb(pid);
|
_TCB *tcb;
|
||||||
bool mystat;
|
bool mystat;
|
||||||
int err;
|
int err;
|
||||||
int ret;
|
int ret;
|
||||||
@@ -186,6 +186,7 @@ pid_t waitpid(pid_t pid, int *stat_loc, int options)
|
|||||||
/* Disable pre-emption so that nothing changes in the following tests */
|
/* Disable pre-emption so that nothing changes in the following tests */
|
||||||
|
|
||||||
sched_lock();
|
sched_lock();
|
||||||
|
tcb = sched_gettcb(pid);
|
||||||
if (!tcb)
|
if (!tcb)
|
||||||
{
|
{
|
||||||
err = ECHILD;
|
err = ECHILD;
|
||||||
|
|||||||
+61
-55
@@ -99,32 +99,31 @@ static inline FAR struct semholder_s *sem_allocholder(sem_t *sem)
|
|||||||
* used to implement mutexes.
|
* used to implement mutexes.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
if (!sem->hlist.holder)
|
#if CONFIG_SEM_PREALLOCHOLDERS > 0
|
||||||
|
pholder = g_freeholders;
|
||||||
|
if (pholder)
|
||||||
{
|
{
|
||||||
pholder = &sem->hlist;
|
/* Remove the holder from the free list an put it into the semaphore's holder list */
|
||||||
|
|
||||||
|
g_freeholders = pholder->flink;
|
||||||
|
pholder->flink = sem->hhead;
|
||||||
|
sem->hhead = pholder;
|
||||||
|
|
||||||
|
/* Make sure the initial count is zero */
|
||||||
|
|
||||||
pholder->counts = 0;
|
pholder->counts = 0;
|
||||||
}
|
}
|
||||||
|
#else
|
||||||
|
if (!sem->holder.htcb)
|
||||||
|
{
|
||||||
|
pholder = &sem->holder;
|
||||||
|
pholder->counts = 0;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
#if CONFIG_SEM_PREALLOCHOLDERS > 0
|
|
||||||
pholder = g_freeholders;
|
|
||||||
if (pholder)
|
|
||||||
{
|
|
||||||
/* Remove the holder from the free list an put it into the semaphore's holder list */
|
|
||||||
|
|
||||||
g_freeholders = pholder->flink;
|
|
||||||
pholder->flink = sem->hlist.flink;
|
|
||||||
sem->hlist.flink = pholder;
|
|
||||||
|
|
||||||
/* Make sure the initial count is zero */
|
|
||||||
|
|
||||||
pholder->counts = 0;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
#else
|
|
||||||
pholder = NULL;
|
|
||||||
#endif
|
|
||||||
sdbg("Insufficient pre-allocated holders\n");
|
sdbg("Insufficient pre-allocated holders\n");
|
||||||
|
pholder = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
return pholder;
|
return pholder;
|
||||||
@@ -140,12 +139,13 @@ static FAR struct semholder_s *sem_findholder(sem_t *sem, FAR _TCB *htcb)
|
|||||||
|
|
||||||
/* Try to find the holder in the list of holders associated with this semaphore */
|
/* Try to find the holder in the list of holders associated with this semaphore */
|
||||||
|
|
||||||
pholder = &sem->hlist;
|
|
||||||
#if CONFIG_SEM_PREALLOCHOLDERS > 0
|
#if CONFIG_SEM_PREALLOCHOLDERS > 0
|
||||||
for (; pholder; pholder = pholder->flink)
|
for (pholder = sem->hhead; pholder; pholder = pholder->flink)
|
||||||
|
#else
|
||||||
|
pholder = &sem->holder;
|
||||||
#endif
|
#endif
|
||||||
{
|
{
|
||||||
if (pholder->holder == htcb)
|
if (pholder->htcb == htcb)
|
||||||
{
|
{
|
||||||
/* Got it! */
|
/* Got it! */
|
||||||
|
|
||||||
@@ -186,31 +186,33 @@ static inline void sem_freeholder(sem_t *sem, FAR struct semholder_s *pholder)
|
|||||||
|
|
||||||
/* Release the holder and counts */
|
/* Release the holder and counts */
|
||||||
|
|
||||||
pholder->holder = 0;
|
pholder->htcb = NULL;
|
||||||
pholder->counts = 0;
|
pholder->counts = 0;
|
||||||
|
|
||||||
#if CONFIG_SEM_PREALLOCHOLDERS > 0
|
#if CONFIG_SEM_PREALLOCHOLDERS > 0
|
||||||
/* If this is the holder inside the semaphore, then do nothing more */
|
/* Search the list for the matching holder */
|
||||||
|
|
||||||
if (pholder != &sem->hlist)
|
for (prev = NULL, curr = sem->hhead;
|
||||||
|
curr && curr != pholder;
|
||||||
|
prev = curr, curr = curr->flink);
|
||||||
|
|
||||||
|
if (curr)
|
||||||
{
|
{
|
||||||
/* Otherwise, search the list for the matching holder */
|
/* Remove the holder from the list */
|
||||||
|
|
||||||
for (prev = &sem->hlist, curr = sem->hlist.flink;
|
if (prev)
|
||||||
curr && curr != pholder;
|
|
||||||
prev = curr, curr = curr->flink);
|
|
||||||
|
|
||||||
if (curr)
|
|
||||||
{
|
{
|
||||||
/* Remove the holder from the list */
|
|
||||||
|
|
||||||
prev->flink = pholder->flink;
|
prev->flink = pholder->flink;
|
||||||
|
|
||||||
/* And put it in the free list */
|
|
||||||
|
|
||||||
pholder->flink = g_freeholders;
|
|
||||||
g_freeholders = pholder;
|
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
sem->hhead = pholder->flink;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* And put it in the free list */
|
||||||
|
|
||||||
|
pholder->flink = g_freeholders;
|
||||||
|
g_freeholders = pholder;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
@@ -221,14 +223,16 @@ static inline void sem_freeholder(sem_t *sem, FAR struct semholder_s *pholder)
|
|||||||
|
|
||||||
static int sem_foreachholder(FAR sem_t *sem, holderhandler_t handler, FAR void *arg)
|
static int sem_foreachholder(FAR sem_t *sem, holderhandler_t handler, FAR void *arg)
|
||||||
{
|
{
|
||||||
FAR struct semholder_s *pholder = &sem->hlist;
|
FAR struct semholder_s *pholder;
|
||||||
#if CONFIG_SEM_PREALLOCHOLDERS > 0
|
#if CONFIG_SEM_PREALLOCHOLDERS > 0
|
||||||
FAR struct semholder_s *next;
|
FAR struct semholder_s *next;
|
||||||
#endif
|
#endif
|
||||||
int ret = 0;
|
int ret = 0;
|
||||||
|
|
||||||
#if CONFIG_SEM_PREALLOCHOLDERS > 0
|
#if CONFIG_SEM_PREALLOCHOLDERS > 0
|
||||||
for (; pholder && ret == 0; pholder = next)
|
for (pholder = sem->hhead; pholder && ret == 0; pholder = next)
|
||||||
|
#else
|
||||||
|
pholder = &sem->holder;
|
||||||
#endif
|
#endif
|
||||||
{
|
{
|
||||||
#if CONFIG_SEM_PREALLOCHOLDERS > 0
|
#if CONFIG_SEM_PREALLOCHOLDERS > 0
|
||||||
@@ -238,7 +242,7 @@ static int sem_foreachholder(FAR sem_t *sem, holderhandler_t handler, FAR void *
|
|||||||
#endif
|
#endif
|
||||||
/* The initial "built-in" container may hold a NULL holder */
|
/* The initial "built-in" container may hold a NULL holder */
|
||||||
|
|
||||||
if (pholder->holder)
|
if (pholder->htcb)
|
||||||
{
|
{
|
||||||
/* Call the handler */
|
/* Call the handler */
|
||||||
|
|
||||||
@@ -268,7 +272,7 @@ static int sem_recoverholders(FAR struct semholder_s *pholder, FAR sem_t *sem, F
|
|||||||
static int sem_boostholderprio(FAR struct semholder_s *pholder,
|
static int sem_boostholderprio(FAR struct semholder_s *pholder,
|
||||||
FAR sem_t *sem, FAR void *arg)
|
FAR sem_t *sem, FAR void *arg)
|
||||||
{
|
{
|
||||||
FAR _TCB *htcb = (FAR _TCB *)pholder->holder;
|
FAR _TCB *htcb = (FAR _TCB *)pholder->htcb;
|
||||||
FAR _TCB *rtcb = (FAR _TCB*)arg;
|
FAR _TCB *rtcb = (FAR _TCB*)arg;
|
||||||
|
|
||||||
/* Make sure that the thread is still active. If it exited without releasing
|
/* Make sure that the thread is still active. If it exited without releasing
|
||||||
@@ -371,7 +375,7 @@ static int sem_boostholderprio(FAR struct semholder_s *pholder,
|
|||||||
static int sem_verifyholder(FAR struct semholder_s *pholder, FAR sem_t *sem, FAR void *arg)
|
static int sem_verifyholder(FAR struct semholder_s *pholder, FAR sem_t *sem, FAR void *arg)
|
||||||
{
|
{
|
||||||
#if 0 // Need to revisit this, but these assumptions seem to be untrue -- OR there is a bug???
|
#if 0 // Need to revisit this, but these assumptions seem to be untrue -- OR there is a bug???
|
||||||
FAR _TCB *htcb = (FAR _TCB *)pholder->holder;
|
FAR _TCB *htcb = (FAR _TCB *)pholder->htcb;
|
||||||
|
|
||||||
/* Called after a semaphore has been released (incremented), the semaphore
|
/* Called after a semaphore has been released (incremented), the semaphore
|
||||||
* could is non-negative, and there is no thread waiting for the count.
|
* could is non-negative, and there is no thread waiting for the count.
|
||||||
@@ -396,9 +400,9 @@ static int sem_dumpholder(FAR struct semholder_s *pholder, FAR sem_t *sem, FAR v
|
|||||||
{
|
{
|
||||||
#if CONFIG_SEM_PREALLOCHOLDERS > 0
|
#if CONFIG_SEM_PREALLOCHOLDERS > 0
|
||||||
dbg(" %08x: %08x %08x %04x\n",
|
dbg(" %08x: %08x %08x %04x\n",
|
||||||
pholder, pholder->flink, pholder->holder, pholder->counts);
|
pholder, pholder->flink, pholder->htcb, pholder->counts);
|
||||||
#else
|
#else
|
||||||
dbg(" %08x: %08x %04x\n", pholder, pholder->holder, pholder->counts);
|
dbg(" %08x: %08x %04x\n", pholder, pholder->htcb, pholder->counts);
|
||||||
#endif
|
#endif
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@@ -410,7 +414,7 @@ static int sem_dumpholder(FAR struct semholder_s *pholder, FAR sem_t *sem, FAR v
|
|||||||
|
|
||||||
static int sem_restoreholderprio(FAR struct semholder_s *pholder, FAR sem_t *sem, FAR void *arg)
|
static int sem_restoreholderprio(FAR struct semholder_s *pholder, FAR sem_t *sem, FAR void *arg)
|
||||||
{
|
{
|
||||||
FAR _TCB *htcb = (FAR _TCB *)pholder->holder;
|
FAR _TCB *htcb = (FAR _TCB *)pholder->htcb;
|
||||||
#if CONFIG_SEM_NNESTPRIO > 0
|
#if CONFIG_SEM_NNESTPRIO > 0
|
||||||
FAR _TCB *stcb = (FAR _TCB *)arg;
|
FAR _TCB *stcb = (FAR _TCB *)arg;
|
||||||
int rpriority;
|
int rpriority;
|
||||||
@@ -510,6 +514,7 @@ static int sem_restoreholderprio(FAR struct semholder_s *pholder, FAR sem_t *sem
|
|||||||
{
|
{
|
||||||
htcb->pend_reprios[i] = htcb->pend_reprios[j];
|
htcb->pend_reprios[i] = htcb->pend_reprios[j];
|
||||||
}
|
}
|
||||||
|
|
||||||
htcb->npend_reprio = j;
|
htcb->npend_reprio = j;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -534,7 +539,7 @@ static int sem_restoreholderprio(FAR struct semholder_s *pholder, FAR sem_t *sem
|
|||||||
static int sem_restoreholderprioA(FAR struct semholder_s *pholder, FAR sem_t *sem, FAR void *arg)
|
static int sem_restoreholderprioA(FAR struct semholder_s *pholder, FAR sem_t *sem, FAR void *arg)
|
||||||
{
|
{
|
||||||
FAR _TCB *rtcb = (FAR _TCB*)g_readytorun.head;
|
FAR _TCB *rtcb = (FAR _TCB*)g_readytorun.head;
|
||||||
if (pholder->holder != rtcb)
|
if (pholder->htcb != rtcb)
|
||||||
{
|
{
|
||||||
return sem_restoreholderprio(pholder, sem, arg);
|
return sem_restoreholderprio(pholder, sem, arg);
|
||||||
}
|
}
|
||||||
@@ -545,7 +550,7 @@ static int sem_restoreholderprioA(FAR struct semholder_s *pholder, FAR sem_t *se
|
|||||||
static int sem_restoreholderprioB(FAR struct semholder_s *pholder, FAR sem_t *sem, FAR void *arg)
|
static int sem_restoreholderprioB(FAR struct semholder_s *pholder, FAR sem_t *sem, FAR void *arg)
|
||||||
{
|
{
|
||||||
FAR _TCB *rtcb = (FAR _TCB*)g_readytorun.head;
|
FAR _TCB *rtcb = (FAR _TCB*)g_readytorun.head;
|
||||||
if (pholder->holder == rtcb)
|
if (pholder->htcb == rtcb)
|
||||||
{
|
{
|
||||||
(void)sem_restoreholderprio(pholder, sem, arg);
|
(void)sem_restoreholderprio(pholder, sem, arg);
|
||||||
return 1;
|
return 1;
|
||||||
@@ -586,6 +591,7 @@ void sem_initholders(void)
|
|||||||
{
|
{
|
||||||
g_holderalloc[i].flink = &g_holderalloc[i+1];
|
g_holderalloc[i].flink = &g_holderalloc[i+1];
|
||||||
}
|
}
|
||||||
|
|
||||||
g_holderalloc[CONFIG_SEM_PREALLOCHOLDERS-1].flink = NULL;
|
g_holderalloc[CONFIG_SEM_PREALLOCHOLDERS-1].flink = NULL;
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
@@ -609,8 +615,8 @@ void sem_initholders(void)
|
|||||||
|
|
||||||
void sem_destroyholder(FAR sem_t *sem)
|
void sem_destroyholder(FAR sem_t *sem)
|
||||||
{
|
{
|
||||||
/* It is an error is a semaphore is destroyed while there are any holders
|
/* It is an error if a semaphore is destroyed while there are any holders
|
||||||
* (except perhaps the thread releas the semaphore itself). Hmmm.. but
|
* (except perhaps the thread release the semaphore itself). Hmmm.. but
|
||||||
* we actually have to assume that the caller knows what it is doing because
|
* we actually have to assume that the caller knows what it is doing because
|
||||||
* could have killed another thread that is the actual holder of the semaphore.
|
* could have killed another thread that is the actual holder of the semaphore.
|
||||||
* We cannot make any assumptions about the state of the semaphore or the
|
* We cannot make any assumptions about the state of the semaphore or the
|
||||||
@@ -621,18 +627,18 @@ void sem_destroyholder(FAR sem_t *sem)
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#if CONFIG_SEM_PREALLOCHOLDERS > 0
|
#if CONFIG_SEM_PREALLOCHOLDERS > 0
|
||||||
if (sem->hlist.holder || sem->hlist.flink)
|
if (sem->hhead)
|
||||||
{
|
{
|
||||||
sdbg("Semaphore destroyed with holders\n");
|
sdbg("Semaphore destroyed with holders\n");
|
||||||
(void)sem_foreachholder(sem, sem_recoverholders, NULL);
|
(void)sem_foreachholder(sem, sem_recoverholders, NULL);
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
if (sem->hlist.holder)
|
if (sem->holder.htcb)
|
||||||
{
|
{
|
||||||
sdbg("Semaphore destroyed with holder\n");
|
sdbg("Semaphore destroyed with holder\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
sem->hlist.holder = NULL;
|
sem->holder.htcb = NULL;
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -664,7 +670,7 @@ void sem_addholder(FAR sem_t *sem)
|
|||||||
{
|
{
|
||||||
/* Then set the holder and increment the number of counts held by this holder */
|
/* Then set the holder and increment the number of counts held by this holder */
|
||||||
|
|
||||||
pholder->holder = rtcb;
|
pholder->htcb = rtcb;
|
||||||
pholder->counts++;
|
pholder->counts++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -174,6 +174,12 @@ int main(int argc, char **argv, char **envp)
|
|||||||
printf("#ifndef CONFIG_MM_REGIONS\n");
|
printf("#ifndef CONFIG_MM_REGIONS\n");
|
||||||
printf("# define CONFIG_MM_REGIONS 1\n");
|
printf("# define CONFIG_MM_REGIONS 1\n");
|
||||||
printf("#endif\n\n");
|
printf("#endif\n\n");
|
||||||
|
printf("/* If the end of RAM is not specified then it is assumed to be the beginning\n");
|
||||||
|
printf(" * of RAM plus the RAM size.\n");
|
||||||
|
printf(" */\n\n");
|
||||||
|
printf("#ifndef CONFIG_DRAM_END\n");
|
||||||
|
printf("# define CONFIG_DRAM_END (CONFIG_DRAM_START+CONFIG_DRAM_SIZE)\n");
|
||||||
|
printf("#endif\n\n");
|
||||||
printf("/* If no file streams are configured, then make certain that buffered I/O\n");
|
printf("/* If no file streams are configured, then make certain that buffered I/O\n");
|
||||||
printf(" * support is disabled\n");
|
printf(" * support is disabled\n");
|
||||||
printf(" */\n\n");
|
printf(" */\n\n");
|
||||||
@@ -256,6 +262,7 @@ int main(int argc, char **argv, char **envp)
|
|||||||
printf("# undef CONFIG_DEBUG_USB\n");
|
printf("# undef CONFIG_DEBUG_USB\n");
|
||||||
printf("# undef CONFIG_DEBUG_GRAPHICS\n");
|
printf("# undef CONFIG_DEBUG_GRAPHICS\n");
|
||||||
printf("# undef CONFIG_DEBUG_GPIO\n");
|
printf("# undef CONFIG_DEBUG_GPIO\n");
|
||||||
|
printf("# undef CONFIG_DEBUG_SPI\n");
|
||||||
printf("# undef CONFIG_DEBUG_STACK\n");
|
printf("# undef CONFIG_DEBUG_STACK\n");
|
||||||
printf("#endif\n\n");
|
printf("#endif\n\n");
|
||||||
printf("#endif /* __INCLUDE_NUTTX_CONFIG_H */\n");
|
printf("#endif /* __INCLUDE_NUTTX_CONFIG_H */\n");
|
||||||
|
|||||||
Reference in New Issue
Block a user