diff --git a/nuttx/Makefile b/nuttx/Makefile index f9cb1b782..b203ebde3 100644 --- a/nuttx/Makefile +++ b/nuttx/Makefile @@ -105,6 +105,9 @@ endif # configuration specific files or creation of configurable symbolic links # USERDIRS - When NuttX is build is a monolithic kernel, this provides the # list of directories that must be built +# OTHERDIRS - These are directories that are not built but probably should +# be cleaned to prevent garbarge from collecting in them when changing +# configurations. NONFSDIRS = sched $(ARCH_SRC) $(NUTTX_ADDONS) FSDIRS = fs drivers binfmt @@ -118,11 +121,14 @@ CONTEXTDIRS += syscall USERDIRS += syscall lib mm $(USER_ADDONS) else NONFSDIRS += lib mm +OTHERDIRS += syscall $(USER_ADDONS) endif ifeq ($(CONFIG_NX),y) NONFSDIRS += graphics CONTEXTDIRS += graphics +else +OTHERDIRS += graphics endif # CLEANDIRS are the directories that will clean in. These are @@ -133,7 +139,7 @@ endif # USERDEPDIRS. If NuttX and applications are built separately (CONFIG_NUTTX_KERNEL), # then this holds only the directories containing user files. -CLEANDIRS = $(NONFSDIRS) $(FSDIRS) $(USERDIRS) +CLEANDIRS = $(NONFSDIRS) $(FSDIRS) $(USERDIRS) $(OTHERDIRS) KERNDEPDIRS = $(NONFSDIRS) USERDEPDIRS = $(USERDIRS) diff --git a/nuttx/arch/arm/src/sam3u/Make.defs b/nuttx/arch/arm/src/sam3u/Make.defs index 9da2eadb5..51e134d0b 100755 --- a/nuttx/arch/arm/src/sam3u/Make.defs +++ b/nuttx/arch/arm/src/sam3u/Make.defs @@ -57,6 +57,10 @@ CHIP_CSRCS = sam3u_allocateheap.c sam3u_clockconfig.c sam3u_gpioirq.c \ # Configuration-dependent SAM3U files +ifeq ($(CONFIG_NUTTX_KERNEL),y) +CHIP_CSRCS += sam3u_userspace.c sam3u_mpuinit.c +endif + ifeq ($(CONFIG_SAM3U_DMA),y) CHIP_CSRCS += sam3u_dmac.c endif @@ -64,3 +68,4 @@ endif ifeq ($(CONFIG_SAM3U_HSMCI),y) CHIP_CSRCS += sam3u_hsmci.c endif + diff --git a/nuttx/arch/arm/src/sam3u/sam3u_internal.h b/nuttx/arch/arm/src/sam3u/sam3u_internal.h index 757a8bb85..2d6bfcf4a 100755 --- a/nuttx/arch/arm/src/sam3u/sam3u_internal.h +++ b/nuttx/arch/arm/src/sam3u/sam3u_internal.h @@ -1,7 +1,7 @@ /************************************************************************************ * arch/arm/src/sam3u/sam3u_internal.h * - * Copyright (C) 2009-2010 Gregory Nutt. All rights reserved. + * Copyright (C) 2009-2011 Gregory Nutt. All rights reserved. * Author: Gregory Nutt * * Redistribution and use in source and binary forms, with or without @@ -437,6 +437,34 @@ EXTERN void sam3u_clockconfig(void); EXTERN void sam3u_lowsetup(void); +/**************************************************************************** + * Name: sam3u_userspace + * + * Description: + * For the case of the separate user-/kernel-space build, perform whatever + * platform specific initialization of the user memory is required. + * Normally this just means initializing the user space .data and .bss + * segements. + * + ****************************************************************************/ + +#ifndef CONFIG_NUTTX_KERNEL +EXTERN void sam3u_userspace(void); +#endif + +/**************************************************************************** + * Name: sam3u_mpuinitialize + * + * Description: + * Configure the MPU to permit user-space access to only restricted SAM3U + * resources. + * + ****************************************************************************/ + +#ifndef CONFIG_NUTTX_KERNEL +EXTERN void sam3u_mpuinitialize(void); +#endif + /************************************************************************************ * Name: sam3u_gpioirqinitialize * diff --git a/nuttx/arch/arm/src/sam3u/sam3u_mpuinit.c b/nuttx/arch/arm/src/sam3u/sam3u_mpuinit.c new file mode 100755 index 000000000..411fba9b1 --- /dev/null +++ b/nuttx/arch/arm/src/sam3u/sam3u_mpuinit.c @@ -0,0 +1,76 @@ +/**************************************************************************** + * arch/arm/src/common/sam3u_mpuinit.c + * + * Copyright (C) 2011 Gregory Nutt. All rights reserved. + * Author: Gregory Nutt + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * 3. Neither the name NuttX nor the names of its contributors may be + * used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + ****************************************************************************/ + +/**************************************************************************** + * Included Files + ****************************************************************************/ + +#include +#include + +#ifndef CONFIG_NUTTX_KERNEL + +/**************************************************************************** + * Private Definitions + ****************************************************************************/ + +/**************************************************************************** + * Private Data + ****************************************************************************/ + +/**************************************************************************** + * Private Functions + ****************************************************************************/ + +/**************************************************************************** + * Public Functions + ****************************************************************************/ + +/**************************************************************************** + * Name: sam3u_mpuinitialize + * + * Description: + * Configure the MPU to permit user-space access to only restricted SAM3U + * resources. + * + ****************************************************************************/ + +void sam3u_mpuinitialize(void) +{ +# warning "Not implemented" +} + +#endif /* CONFIG_NUTTX_KERNEL */ + diff --git a/nuttx/arch/arm/src/sam3u/sam3u_start.c b/nuttx/arch/arm/src/sam3u/sam3u_start.c index 71027be66..e090fdf55 100755 --- a/nuttx/arch/arm/src/sam3u/sam3u_start.c +++ b/nuttx/arch/arm/src/sam3u/sam3u_start.c @@ -134,6 +134,16 @@ void __start(void) #endif showprogress('D'); + /* For the case of the separate user-/kernel-space build, perform whatever + * platform specific initialization of the user memory is required. + * Normally this just means initializing the user space .data and .bss + * segements. + */ + +#ifndef CONFIG_NUTTX_KERNEL + sam3u_userspace(); +#endif + /* Initialize onboard resources */ sam3u_boardinitialize(); diff --git a/nuttx/arch/arm/src/sam3u/sam3u_userspace.c b/nuttx/arch/arm/src/sam3u/sam3u_userspace.c new file mode 100755 index 000000000..763c60027 --- /dev/null +++ b/nuttx/arch/arm/src/sam3u/sam3u_userspace.c @@ -0,0 +1,105 @@ +/**************************************************************************** + * arch/arm/src/common/sam3u_userspace.c + * + * Copyright (C) 2011 Gregory Nutt. All rights reserved. + * Author: Gregory Nutt + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * 3. Neither the name NuttX nor the names of its contributors may be + * used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + ****************************************************************************/ + +/**************************************************************************** + * Included Files + ****************************************************************************/ + +#include +#include + +#ifndef CONFIG_NUTTX_KERNEL + +/**************************************************************************** + * Private Definitions + ****************************************************************************/ + +/**************************************************************************** + * Private Data + ****************************************************************************/ + +/**************************************************************************** + * Private Functions + ****************************************************************************/ + +/**************************************************************************** + * Public Functions + ****************************************************************************/ + +/**************************************************************************** + * Name: sam3u_userspace + * + * Description: + * For the case of the separate user-/kernel-space build, perform whatever + * platform specific initialization of the user memory is required. + * Normally this just means initializing the user space .data and .bss + * segements. + * + ****************************************************************************/ + +void sam3u_userspace(void) +{ + uint8_t *src; + uint8_t *dest; + uint8_t *end; + + /* Clear all of user-space .bss */ + + DEBUGASSERT((uintptr_t)CONFIG_USER_DATADESTSTART <= CONFIG_USER_DATADESTEND); + + dest = (uint8_t*)CONFIG_USER_BSSSTART; + end = (uint8_t*)CONFIG_USER_BSSEND; + + while (dest != end) + { + *dest++ = 0; + } + + /* Initialize all of user-space .data */ + + DEBUGASSERT((uintptr_t)CONFIG_USER_DATADESTSTART <= CONFIG_USER_DATADESTEND); + + src = (uint8_t*)CONFIG_USER_DATASOURCE; + dest = (uint8_t*)CONFIG_USER_DATADESTSTART; + end = (uint8_t*)CONFIG_USER_DATADESTEND; + + while (dest != end) + { + *dest++ = *src++; + } +} + +#endif /* CONFIG_NUTTX_KERNEL */ + diff --git a/nuttx/configs/sam3u-ek/kernel/Makefile b/nuttx/configs/sam3u-ek/kernel/Makefile index 4c1810503..ded4bfac5 100755 --- a/nuttx/configs/sam3u-ek/kernel/Makefile +++ b/nuttx/configs/sam3u-ek/kernel/Makefile @@ -93,6 +93,8 @@ $(BOARD_INCLUDE)/user_map.h: $(TOPDIR)/User.map @echo "#define CONFIG_USER_DATASOURCE 0x`grep \" _eronly$\" $(TOPDIR)/User.map | cut -d' ' -f1`" >> $(BOARD_INCLUDE)/user_map.h @echo "#define CONFIG_USER_DATADESTSTART 0x`grep \" _sdata$\" $(TOPDIR)/User.map | cut -d' ' -f1`" >> $(BOARD_INCLUDE)/user_map.h @echo "#define CONFIG_USER_DATADESTEND 0x`grep \" _edata$\" $(TOPDIR)/User.map | cut -d' ' -f1`" >> $(BOARD_INCLUDE)/user_map.h + @echo "#define CONFIG_USER_BSSSTART 0x`grep \" _sbss\" $(TOPDIR)/User.map | cut -d' ' -f1`" >> $(BOARD_INCLUDE)/user_map.h + @echo "#define CONFIG_USER_BSSEND 0x`grep \" _ebss$\" $(TOPDIR)/User.map | cut -d' ' -f1`" >> $(BOARD_INCLUDE)/user_map.h @echo "" >> $(BOARD_INCLUDE)/user_map.h @echo "/* Memory manager entry points */" >> $(BOARD_INCLUDE)/user_map.h @echo "" >> $(BOARD_INCLUDE)/user_map.h diff --git a/nuttx/include/nuttx/arch.h b/nuttx/include/nuttx/arch.h index f81a497b8..df9f1e9ab 100644 --- a/nuttx/include/nuttx/arch.h +++ b/nuttx/include/nuttx/arch.h @@ -434,7 +434,6 @@ EXTERN void up_enable_irq(int irq); EXTERN void up_disable_irq(int irq); #endif - /**************************************************************************** * Name: up_prioritize_irq * @@ -462,51 +461,6 @@ EXTERN int up_prioritize_irq(int irq, int priority); EXTERN void up_mdelay(unsigned int milliseconds); EXTERN void up_udelay(useconds_t microseconds); -/**************************************************************************** - * Name: up_fbinitialize, up_fbuninitialize, up_fbgetvplane - * - * Description: - * If an architecture supports a framebuffer, then it must provide APIs - * to access the framebuffer as follows: - * - * up_fbinitialize - Initialize the framebuffer video hardware - * up_fbgetvplane - Return a a reference to the framebuffer object for - * the specified video plane. Most OSDs support - * multiple planes of video. - * up_fbuninitialize - Unitialize the framebuffer support - * - ***************************************************************************/ - -struct fb_vtable_s; /* See nuttx/fb.h */ - -EXTERN int up_fbinitialize(void); -EXTERN FAR struct fb_vtable_s *up_fbgetvplane(int vplane); -EXTERN void fb_uninitialize(void); - -/**************************************************************************** - * Name: up_lcdinitialize, up_lcdgetdev, up_lcduninitialize - * - * Description: - * If an architecture supports a parallel or serial LCD, then it must - * provide APIs to access the LCD as follows: - * - * up_lcdinitialize - Initialize the LCD video hardware. The initial - * state of the LCD is fully initialized, display - * memory cleared, and the LCD ready to use, but with - * the power setting at 0 (full off). - * up_lcdgetdev - Return a a reference to the LCD object for - * the specified LCD. This allows support for - * multiple LCD devices. - * up_lcduninitialize - Unitialize the LCD support - * - ***************************************************************************/ - -struct lcd_dev_s; /* See nuttx/lcd.h */ - -EXTERN int up_lcdinitialize(void); -EXTERN FAR struct lcd_dev_s *up_lcdgetdev(int lcddev); -EXTERN void up_lcduninitialize(void); - /**************************************************************************** * These are standard interfaces that are exported by the OS * for use by the architecture specific logic diff --git a/nuttx/include/nuttx/fb.h b/nuttx/include/nuttx/fb.h index b6f387083..773ef943e 100644 --- a/nuttx/include/nuttx/fb.h +++ b/nuttx/include/nuttx/fb.h @@ -315,4 +315,39 @@ struct fb_vtable_s #endif }; +/**************************************************************************** + * Public Function Prototypes + ****************************************************************************/ + +#ifdef __cplusplus +#define EXTERN extern "C" +extern "C" { +#else +#define EXTERN extern +#endif + +/**************************************************************************** + * Name: up_fbinitialize, up_fbuninitialize, up_fbgetvplane + * + * Description: + * If an architecture supports a framebuffer, then it must provide APIs + * to access the framebuffer as follows: + * + * up_fbinitialize - Initialize the framebuffer video hardware + * up_fbgetvplane - Return a a reference to the framebuffer object for + * the specified video plane. Most OSDs support + * multiple planes of video. + * up_fbuninitialize - Unitialize the framebuffer support + * + ***************************************************************************/ + +EXTERN int up_fbinitialize(void); +EXTERN FAR struct fb_vtable_s *up_fbgetvplane(int vplane); +EXTERN void fb_uninitialize(void); + +#undef EXTERN +#ifdef __cplusplus +} +#endif + #endif /* _INCLUDE_NUTTX_FB_H */ diff --git a/nuttx/include/nuttx/lcd/lcd.h b/nuttx/include/nuttx/lcd/lcd.h index 9595b89ae..790896c91 100755 --- a/nuttx/include/nuttx/lcd/lcd.h +++ b/nuttx/include/nuttx/lcd/lcd.h @@ -1,7 +1,7 @@ /**************************************************************************** * include/nuttx/lcd/lcd.h * - * Copyright (C) 2010 Gregory Nutt. All rights reserved. + * Copyright (C) 2010-2011 Gregory Nutt. All rights reserved. * Author: Gregory Nutt * * Redistribution and use in source and binary forms, with or without @@ -189,6 +189,28 @@ extern "C" { #define EXTERN extern #endif +/**************************************************************************** + * Name: up_lcdinitialize, up_lcdgetdev, up_lcduninitialize + * + * Description: + * If an architecture supports a parallel or serial LCD, then it must + * provide APIs to access the LCD as follows: + * + * up_lcdinitialize - Initialize the LCD video hardware. The initial + * state of the LCD is fully initialized, display + * memory cleared, and the LCD ready to use, but with + * the power setting at 0 (full off). + * up_lcdgetdev - Return a a reference to the LCD object for + * the specified LCD. This allows support for + * multiple LCD devices. + * up_lcduninitialize - Unitialize the LCD support + * + ***************************************************************************/ + +EXTERN int up_lcdinitialize(void); +EXTERN FAR struct lcd_dev_s *up_lcdgetdev(int lcddev); +EXTERN void up_lcduninitialize(void); + #undef EXTERN #ifdef __cplusplus } diff --git a/nuttx/sched/os_bringup.c b/nuttx/sched/os_bringup.c index 7cdd06dcb..eb1875a69 100644 --- a/nuttx/sched/os_bringup.c +++ b/nuttx/sched/os_bringup.c @@ -134,9 +134,9 @@ int os_bringup(void) #endif int init_taskid; - /* Start the page fill worker thread that will resolve page faults. - * This should always be the first thread started because it may - * have to resolve page faults in other threads + /* Start the page fill worker kernel thread that will resolve page faults. + * This should always be the first thread started because it may have to + * resolve page faults in other threads */ #ifdef CONFIG_PAGING @@ -148,7 +148,9 @@ int os_bringup(void) ASSERT(g_pgworker != ERROR); #endif - /* Start the worker thread that will perform misc garbage clean-up */ + /* Start the worker thread that will serve as the device driver "bottom- + * half" and will perform misc garbage clean-up. + */ #ifdef CONFIG_SCHED_WORKQUEUE svdbg("Starting worker thread\n"); @@ -160,7 +162,8 @@ int os_bringup(void) #endif /* Once the operating system has been initialized, the system must be - * started by spawning the user init thread of execution. + * started by spawning the user init thread of execution. This is the + * first user-mode thead. */ svdbg("Starting init thread\n");