*** empty log message ***

This commit is contained in:
Thomas Doerfler
2008-09-22 11:49:50 +00:00
parent e97e0e0886
commit 8dcfc0a88e
6 changed files with 722 additions and 0 deletions

View File

@@ -1,3 +1,16 @@
2008-09-22 Sebastian Huber <sebastian.huber@embedded-brains.de>
* c/src/libchip/rtc/icm7170.c, c/src/libchip/rtc/m48t08.c,
c/src/libchip/rtc/rtc.h: Include required header files. Some internal
functions have now static linkage type. Added constant qualifier to
operations table and read-only function parameters.
* c/src/libchip/serial/ns16550.c, c/src/libchip/serial/ns16550_p.h,
c/src/libchip/serial/serial.h: Include required header files. Removed
support for old PowerPC exception handling. Various fixes for
interrupt related routines. Added support for BSPs with IRQ extension
API.
2008-09-20 Joel Sherrill <joel.sherrill@oarcorp.com>
* libchip/network/dec21140.c, libchip/network/elnk.c: Detect when there

View File

@@ -0,0 +1,13 @@
/**
* @file
*
* LPC2478 (QVGA Base Board from Embedded Artists).
*/
MEMORY {
RAM_INT (AIW) : ORIGIN = 0x40000000, LENGTH = 64k
RAM_EXT (AIW) : ORIGIN = 0xa0000000, LENGTH = 32M
NIRVANA : ORIGIN = 0, LENGTH = 0
}
INCLUDE linkcmds.base

View File

@@ -0,0 +1,80 @@
/**
* @file
*
* @brief Symbols defined in linker command base file.
*/
/*
* Copyright (c) 2008
* Embedded Brains GmbH
* Obere Lagerstr. 30
* D-82178 Puchheim
* Germany
* rtems@embedded-brains.de
*
* The license and distribution terms for this file may be found in the file
* LICENSE in this distribution or at http://www.rtems.com/license/LICENSE.
*/
#ifndef LIBBSP_ARM_SHARED_LINKER_SYMBOLS_H
#define LIBBSP_ARM_SHARED_LINKER_SYMBOLS_H
#ifndef ASM
#define LINKER_SYMBOL( sym) extern char sym [];
#else
#define LINKER_SYMBOL( sym) .extern sym
#endif
LINKER_SYMBOL( bsp_stack_irq_size)
LINKER_SYMBOL( bsp_stack_irq_start)
LINKER_SYMBOL( bsp_stack_irq_size)
LINKER_SYMBOL( bsp_stack_fiq_start)
LINKER_SYMBOL( bsp_stack_abt_size)
LINKER_SYMBOL( bsp_stack_abt_start)
LINKER_SYMBOL( bsp_stack_undef_size)
LINKER_SYMBOL( bsp_stack_undef_start)
LINKER_SYMBOL( bsp_stack_svc_size)
LINKER_SYMBOL( bsp_stack_svc_start)
LINKER_SYMBOL( bsp_ram_int_start)
LINKER_SYMBOL( bsp_ram_int_end)
LINKER_SYMBOL( bsp_ram_int_size)
LINKER_SYMBOL( bsp_ram_ext_start)
LINKER_SYMBOL( bsp_ram_ext_load_start)
LINKER_SYMBOL( bsp_ram_ext_end)
LINKER_SYMBOL( bsp_ram_ext_size)
LINKER_SYMBOL( bsp_rom_start)
LINKER_SYMBOL( bsp_rom_end)
LINKER_SYMBOL( bsp_rom_size)
LINKER_SYMBOL( bsp_section_vector_start)
LINKER_SYMBOL( bsp_section_vector_end)
LINKER_SYMBOL( bsp_section_vector_size)
LINKER_SYMBOL( bsp_section_text_start)
LINKER_SYMBOL( bsp_section_text_end)
LINKER_SYMBOL( bsp_section_text_size)
LINKER_SYMBOL( bsp_section_data_start)
LINKER_SYMBOL( bsp_section_data_end)
LINKER_SYMBOL( bsp_section_data_size)
LINKER_SYMBOL( bsp_section_bss_start)
LINKER_SYMBOL( bsp_section_bss_end)
LINKER_SYMBOL( bsp_section_bss_size)
LINKER_SYMBOL( bsp_section_stack_start)
LINKER_SYMBOL( bsp_section_stack_end)
LINKER_SYMBOL( bsp_section_stack_size)
LINKER_SYMBOL( bsp_section_work_area_start)
LINKER_SYMBOL( bsp_section_work_area_end)
LINKER_SYMBOL( bsp_section_work_area_size)
#endif /* LIBBSP_ARM_SHARED_LINKER_SYMBOLS_H */

View File

@@ -0,0 +1,49 @@
/**
* @file
*
* @brief Start entry functions.
*/
/*
* Copyright (c) 2008
* Embedded Brains GmbH
* Obere Lagerstr. 30
* D-82178 Puchheim
* Germany
* rtems@embedded-brains.de
*
* The license and distribution terms for this file may be found in the file
* LICENSE in this distribution or at http://www.rtems.com/license/LICENSE.
*/
#ifndef LIBBSP_ARM_SHARED_START_H
#define LIBBSP_ARM_SHARED_START_H
#ifndef ASM
/**
* @brief Start entry hook 0.
*
* This hook will be called from the start entry code after all modes and
* stack pointers are initialized but before the copying of the exception
* vectors.
*/
void bsp_start_hook_0( void);
/**
* @brief Start entry hook 1.
*
* This hook will be called from the start entry code after copying of the
* exception vectors but before the call to boot card.
*/
void bsp_start_hook_1( void);
#else
.extern bsp_start_hook_0
.extern bsp_start_hook_1
#endif
#endif /* LIBBSP_ARM_SHARED_START_H */

View File

@@ -0,0 +1,182 @@
/**
* @file
*
* @brief Boot and system start code.
*/
/*
* Copyright (c) 2008
* Embedded Brains GmbH
* Obere Lagerstr. 30
* D-82178 Puchheim
* Germany
* rtems@embedded-brains.de
*
* The license and distribution terms for this file may be found in the file
* LICENSE in this distribution or at http://www.rtems.com/license/LICENSE.
*/
#include <bsp/linker-symbols.h>
#include <bsp/start.h>
/* External symbols */
.extern bsp_reset
.extern boot_card
/* Global symbols */
.globl start
.globl Reset_Handler
.globl Undefined_Handler
.globl SWI_Handler
.globl Prefetch_Handler
.globl Abort_Handler
.globl IRQ_Handler
.globl FIQ_Handler
/* Program Status Register definitions */
.equ PSR_MODE_USR, 0x10
.equ PSR_MODE_FIQ, 0x11
.equ PSR_MODE_IRQ, 0x12
.equ PSR_MODE_SVC, 0x13
.equ PSR_MODE_ABT, 0x17
.equ PSR_MODE_UNDEF, 0x1b
.equ PSR_MODE_SYS, 0x1f
.equ PSR_I, 0x80
.equ PSR_F, 0x40
.equ PSR_T, 0x20
/* Start entry */
.section ".entry"
start:
/*
* We do not save the context since we do not return to the boot
* loader.
*/
/*
* Set SVC mode, disable interrupts and enable ARM instructions.
*/
mov r0, #(PSR_MODE_SVC | PSR_I | PSR_F)
msr cpsr, r0
/* Initialize stack pointer registers for the various modes */
/* Enter IRQ mode and set up the IRQ stack pointer */
mov r0, #(PSR_MODE_IRQ | PSR_I | PSR_F)
msr cpsr, r0
ldr r1, =bsp_stack_irq_size
ldr sp, =bsp_stack_irq_start
add sp, sp, r1
/* Enter FIQ mode and set up the FIQ stack pointer */
mov r0, #(PSR_MODE_FIQ | PSR_I | PSR_F)
msr cpsr, r0
ldr r1, =bsp_stack_fiq_size
ldr sp, =bsp_stack_fiq_start
add sp, sp, r1
/* Enter ABT mode and set up the ABT stack pointer */
mov r0, #(PSR_MODE_ABT | PSR_I | PSR_F)
msr cpsr, r0
ldr r1, =bsp_stack_abt_size
ldr sp, =bsp_stack_abt_start
add sp, sp, r1
/* Enter UNDEF mode and set up the UNDEF stack pointer */
mov r0, #(PSR_MODE_UNDEF | PSR_I | PSR_F)
msr cpsr, r0
ldr r1, =bsp_stack_undef_size
ldr sp, =bsp_stack_undef_start
add sp, sp, r1
/* Enter SVC mode and set up the SVC stack pointer */
mov r0, #(PSR_MODE_SVC | PSR_I | PSR_F)
msr cpsr, r0
ldr r1, =bsp_stack_svc_size
ldr sp, =bsp_stack_svc_start
add sp, sp, r1
/* Stay in SVC mode */
/* Brach to start hook 0 */
bl bsp_start_hook_0
/*
* Initialize the exception vectors. This includes the exceptions
* vectors and the pointers to the default exception handlers.
*/
mov r0, #0
adr r1, vector_block
ldmia r1!, {r2-r9}
stmia r0!, {r2-r9}
ldmia r1!, {r2-r9}
stmia r0!, {r2-r9}
/* Brach to start hook 1 */
bl bsp_start_hook_1
/* Brach to boot card */
bl boot_card
/* Branch to reset function */
bl bsp_reset
/* Spin forever */
twiddle:
b twiddle
/*
* This is the exception vector table and the pointers to the default
* exceptions handlers.
*/
vector_block:
ldr pc, Reset_Handler
ldr pc, Undefined_Handler
ldr pc, SWI_Handler
ldr pc, Prefetch_Handler
ldr pc, Abort_Handler
nop
ldr pc, IRQ_Handler
ldr pc, FIQ_Handler
Reset_Handler:
b bsp_reset
Undefined_Handler:
b Undefined_Handler
SWI_Handler:
b SWI_Handler
Prefetch_Handler:
b Prefetch_Handler
Abort_Handler:
b Abort_Handler
nop
IRQ_Handler:
b IRQ_Handler
FIQ_Handler:
b FIQ_Handler

View File

@@ -0,0 +1,385 @@
/**
* @file
*
* @brief Linker command base file for configuration with internal and external
* RAM and optional ROM load.
*
* You need to add a linker command file to your board support package that
* includes this file at the end and provides the following definitions.
*
* Compulsory are the memory regions RAM_INT, RAM_EXT and NIRVANA.
* <pre>
* MEMORY {
* RAM_INT (AIW) : ORIGIN = 0x40000000, LENGTH = 64k
* RAM_EXT (AIW) : ORIGIN = 0xa0000000, LENGTH = 32M
* NIRVANA : ORIGIN = 0, LENGTH = 0
* }
* </pre>
*
* You may optionally provide ROM start and size values.
* <pre>
* bsp_rom_start = 0x80000000;
* bsp_rom_size = 0x01000000;
* </pre>
*
* Optionally you can enable the load to ROM. It is enabled then
* bsp_enable_rom_load is defined. The value is arbitrary.
* <pre>
* bsp_enable_rom_load = 1;
* </pre>
*
* Include the linker command base file. This file has to be installed in the
* same directory than your linker command file.
* <pre>
* INCLUDE linkcmds.base
* </pre>
*
* You may define optionally values for the following sizes:
* - bsp_ram_int_size
* - bsp_ram_ext_size
* - bsp_stack_abt_size
* - bsp_stack_fiq_size
* - bsp_stack_irq_size
* - bsp_stack_svc_size
* - bsp_stack_undef_size
*/
/*
* Copyright (c) 2008
* Embedded Brains GmbH
* Obere Lagerstr. 30
* D-82178 Puchheim
* Germany
* rtems@embedded-brains.de
*
* The license and distribution terms for this file may be found in the file
* LICENSE in this distribution or at http://www.rtems.com/license/LICENSE.
*/
OUTPUT_FORMAT ("elf32-littlearm", "elf32-bigarm", "elf32-littlearm")
OUTPUT_ARCH (arm)
ENTRY (start)
/*
* BSP: Symbols that may be defined externally. The minimum alignment
* requirement for regions is bsp_section_align.
*/
bsp_ram_int_size = DEFINED (bsp_ram_int_size) ? bsp_ram_int_size : LENGTH (RAM_INT);
bsp_ram_ext_size = DEFINED (bsp_ram_ext_size) ? bsp_ram_ext_size : LENGTH (RAM_EXT);
bsp_rom_start = DEFINED (bsp_rom_start) ? bsp_rom_start : 0;
bsp_rom_size = DEFINED (bsp_rom_size) ? bsp_rom_size : 0;
bsp_ram_ext_load_start = DEFINED (bsp_enable_rom_load) ? bsp_rom_start : bsp_ram_ext_start;
bsp_stack_abt_size = DEFINED (bsp_stack_abt_size) ? bsp_stack_abt_size : 128;
bsp_stack_fiq_size = DEFINED (bsp_stack_fiq_size) ? bsp_stack_fiq_size : 128;
bsp_stack_irq_size = DEFINED (bsp_stack_irq_size) ? bsp_stack_irq_size : 256;
bsp_stack_svc_size = DEFINED (bsp_stack_svc_size) ? bsp_stack_svc_size : 256;
bsp_stack_undef_size = DEFINED (bsp_stack_undef_size) ? bsp_stack_undef_size : 128;
/*
* BSP: Global symbols
*/
bsp_ram_int_start = ORIGIN (RAM_INT);
bsp_ram_int_end = bsp_ram_int_start + bsp_ram_int_size;
bsp_ram_ext_start = ORIGIN (RAM_EXT);
bsp_ram_ext_end = bsp_ram_ext_start + bsp_ram_ext_size;
bsp_rom_end = bsp_rom_start + bsp_rom_size;
bsp_section_align = 16;
bsp_stack_align = 16;
SECTIONS {
.vector : {
/*
* BSP: Start of vector section
*/
bsp_section_vector_start = .;
/*
* BSP: Reserve space for the the exception vector table and
* the pointers to the default exceptions handlers.
*/
. = . + 64;
. = ALIGN (bsp_section_align);
/*
* BSP: End of vector section
*/
bsp_section_vector_end = .;
} > RAM_INT
bsp_section_vector_size = bsp_section_vector_end - bsp_section_vector_start;
.text : AT (bsp_ram_ext_load_start) {
/*
* BSP: Start of text section
*/
bsp_section_text_start = .;
/*
* BSP: System startup entry
*/
KEEP (*(.entry))
/*
* BSP: Moved into .text from .init
*/
KEEP (*(.init))
*(.text .stub .text.* .gnu.linkonce.t.*)
KEEP (*(.text.*personality*))
/* .gnu.warning sections are handled specially by elf32.em. */
*(.gnu.warning)
/*
* BSP: Magic ARM stuff
*/
*(.ARM.*)
*(.glue_7)
*(.glue_7t)
*(.vfp11_veneer)
/*
* BSP: Special FreeBSD sysctl sections
*/
. = ALIGN (16);
__start_set_sysctl_set = .;
*(set_sysctl_*);
__stop_set_sysctl_set = ABSOLUTE(.);
*(set_domain_*);
*(set_pseudo_*);
/*
* BSP: Moved into .text from .*
*/
*(.rodata .rodata.* .gnu.linkonce.r.*)
*(.rodata1)
*(.eh_frame_hdr)
/*
* BSP: Required by cpukit/score/src/threadhandler.c
*/
PROVIDE (_fini = .);
/*
* BSP: Moved into .text from .fini
*/
KEEP (*(.fini))
. = ALIGN (bsp_section_align);
/*
* BSP: End of text section
*/
bsp_section_text_end = .;
} > RAM_EXT
bsp_section_text_size = bsp_section_text_end - bsp_section_text_start;
.data : {
/*
* BSP: Start of data section
*/
bsp_section_data_start = .;
/*
* BSP: Moved into .data from .ctors
*/
/* gcc uses crtbegin.o to find the start of
the constructors, so we make sure it is
first. Because this is a wildcard, it
doesn't matter if the user does not
actually link against crtbegin.o; the
linker won't look for a file to match a
wildcard. The wildcard also means that it
doesn't matter which directory crtbegin.o
is in. */
KEEP (*crtbegin.o(.ctors))
KEEP (*crtbegin?.o(.ctors))
/* We don't want to include the .ctor section from
the crtend.o file until after the sorted ctors.
The .ctor section from the crtend file contains the
end of ctors marker and it must be last */
KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .ctors))
KEEP (*(SORT(.ctors.*)))
KEEP (*(.ctors))
/*
* BSP: Moved into .data from .dtors
*/
KEEP (*crtbegin.o(.dtors))
KEEP (*crtbegin?.o(.dtors))
KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .dtors))
KEEP (*(SORT(.dtors.*)))
KEEP (*(.dtors))
/*
* BSP: Moved into .data from .*
*/
*(.data1)
KEEP (*(.eh_frame))
*(.gcc_except_table .gcc_except_table.*)
KEEP (*(.jcr))
*(.data .data.* .gnu.linkonce.d.*)
KEEP (*(.gnu.linkonce.d.*personality*))
SORT(CONSTRUCTORS)
. = ALIGN (bsp_section_align);
/*
* BSP: End of data section
*/
bsp_section_data_end = .;
} > RAM_EXT
bsp_section_data_size = bsp_section_data_end - bsp_section_data_start;
.bss : {
/*
* BSP: Start of bss section
*/
bsp_section_bss_start = .;
*(COMMON)
*(.dynbss)
*(.bss .bss.* .gnu.linkonce.b.*)
. = ALIGN (bsp_section_align);
/*
* BSP: End of bss section
*/
bsp_section_bss_end = .;
} > RAM_EXT
bsp_section_bss_size = bsp_section_bss_end - bsp_section_bss_start;
.stack : {
/*
* BSP: Start of stack section
*/
bsp_section_stack_start = .;
. = ALIGN (bsp_stack_align);
bsp_stack_abt_start = .;
. = . + bsp_stack_abt_size;
. = ALIGN (bsp_stack_align);
bsp_stack_fiq_start = .;
. = . + bsp_stack_fiq_size;
. = ALIGN (bsp_stack_align);
bsp_stack_irq_start = .;
. = . + bsp_stack_irq_size;
. = ALIGN (bsp_stack_align);
bsp_stack_svc_start = .;
. = . + bsp_stack_svc_size;
. = ALIGN (bsp_stack_align);
bsp_stack_undef_start = .;
. = . + bsp_stack_undef_size;
. = ALIGN (bsp_section_align);
/*
* BSP: End of stack section
*/
bsp_section_stack_end = .;
} > RAM_INT
bsp_section_stack_size = bsp_section_stack_end - bsp_section_stack_start;
.work_area : {
/*
* BSP: Start of work area. The work area will occupy the remaining
* RAM_EXT region and contains the RTEMS work space and heap. We cannot
* assign the region end directly since this leads to a region full
* warning.
*/
bsp_section_work_area_start = .;
. = bsp_ram_ext_end - 4;
. = ALIGN (bsp_section_align);
/*
* BSP: End of work area
*/
bsp_section_work_area_end = .;
} > RAM_EXT
bsp_section_work_area_size = bsp_section_work_area_end - bsp_section_work_area_start;
/*
* BSP: External symbols (FIXME)
*/
RamBase = bsp_ram_ext_start;
RamSize = bsp_ram_ext_size;
WorkAreaBase = bsp_section_work_area_start;
HeapSize = 0;
/* Stabs debugging sections. */
.stab 0 : { *(.stab) }
.stabstr 0 : { *(.stabstr) }
.stab.excl 0 : { *(.stab.excl) }
.stab.exclstr 0 : { *(.stab.exclstr) }
.stab.index 0 : { *(.stab.index) }
.stab.indexstr 0 : { *(.stab.indexstr) }
.comment 0 : { *(.comment) }
/* DWARF debug sections.
Symbols in the DWARF debugging sections are relative to the beginning
of the section so we begin them at 0. */
/* DWARF 1 */
.debug 0 : { *(.debug) }
.line 0 : { *(.line) }
/* GNU DWARF 1 extensions */
.debug_srcinfo 0 : { *(.debug_srcinfo) }
.debug_sfnames 0 : { *(.debug_sfnames) }
/* DWARF 1.1 and DWARF 2 */
.debug_aranges 0 : { *(.debug_aranges) }
.debug_pubnames 0 : { *(.debug_pubnames) }
/* DWARF 2 */
.debug_info 0 : { *(.debug_info .gnu.linkonce.wi.*) }
.debug_abbrev 0 : { *(.debug_abbrev) }
.debug_line 0 : { *(.debug_line) }
.debug_frame 0 : { *(.debug_frame) }
.debug_str 0 : { *(.debug_str) }
.debug_loc 0 : { *(.debug_loc) }
.debug_macinfo 0 : { *(.debug_macinfo) }
/* SGI/MIPS DWARF 2 extensions */
.debug_weaknames 0 : { *(.debug_weaknames) }
.debug_funcnames 0 : { *(.debug_funcnames) }
.debug_typenames 0 : { *(.debug_typenames) }
.debug_varnames 0 : { *(.debug_varnames) }
/* DWARF 3 */
.debug_pubtypes 0 : { *(.debug_pubtypes) }
.debug_ranges 0 : { *(.debug_ranges) }
.gnu.attributes 0 : { KEEP (*(.gnu.attributes)) }
/DISCARD/ : {
*(.note.GNU-stack) *(.gnu_debuglink)
}
/*
* BSP: Catch all unknown sections
*/
.nirvana : {
*(*)
} > NIRVANA
}