- Timestamp:
- 2007-06-08T15:02:49Z (18 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- c03ee1c
- Parents:
- 3ee8a075
- Location:
- uspace
- Files:
-
- 1 added
- 21 edited
- 1 moved
Legend:
- Unmodified
- Added
- Removed
-
uspace/kbd/Makefile
r3ee8a075 r6b781c0 33 33 SOFTINT_PREFIX = ../softint 34 34 include $(LIBC_PREFIX)/Makefile.toolchain 35 include ../../Makefile.config 35 36 36 37 CFLAGS += -Iinclude -I../libadt/include … … 71 72 genarch/src/kbd.c 72 73 endif 74 ifeq ($(ARCH), arm32) 75 ifeq ($(MACHINE), gxemul_testarm) 76 ARCH_SOURCES += \ 77 arch/$(ARCH)/src/kbd_gxemul.c 78 endif 79 endif 73 80 74 81 -
uspace/kbd/arch/arm32/include/kbd.h
r3ee8a075 r6b781c0 1 1 /* 2 * Copyright (c) 200 6 Josef Cejka2 * Copyright (c) 2007 Michal Kebrt 3 3 * All rights reserved. 4 4 * … … 27 27 */ 28 28 29 /** @addtogroup kbdarm32 arm32 30 * @brief HelenOS arm32 arch dependent parts of uspace keyboard handler. 31 * @ingroup kbd 29 /** @addtogroup kbdarm32 32 30 * @{ 33 31 */ 34 32 /** @file 33 * @brief Empty. 35 34 */ 36 35 -
uspace/kbd/arch/arm32/src/kbd.c
r3ee8a075 r6b781c0 1 1 /* 2 * Copyright (c) 200 6 Martin Decky2 * Copyright (c) 2007 Michal Kebrt 3 3 * All rights reserved. 4 4 * … … 33 33 */ 34 34 /** @file 35 * @brief Empty, required by generic Makefile. 35 36 */ 36 37 37 #include <arch/kbd.h>38 #include <ipc/ipc.h>39 #include <sysinfo.h>40 #include <kbd.h>41 #include <keys.h>42 43 int kbd_arch_init(void)44 {45 return 0;46 }47 48 49 int kbd_arch_process(keybuffer_t *keybuffer, ipc_call_t *call)50 {51 return 1;52 }53 38 54 39 /** @} -
uspace/libc/arch/arm32/Makefile.inc
r3ee8a075 r6b781c0 1 1 # 2 # Copyright (c) 200 5 Martin Decky2 # Copyright (c) 2007 Michal Kebrt, Pavel Jancik 3 3 # All rights reserved. 4 4 # … … 32 32 TARGET = arm-linux-gnu 33 33 TOOLCHAIN_DIR = /usr/local/arm/bin 34 CFLAGS += 34 CFLAGS += -ffixed-r9 -mtp=soft 35 35 LFLAGS += -N ../softint/libsoftint.a 36 36 AFLAGS += … … 39 39 arch/$(ARCH)/src/psthread.S \ 40 40 arch/$(ARCH)/src/thread.c \ 41 arch/$(ARCH)/src/ dummy.S41 arch/$(ARCH)/src/eabi.S 42 42 43 43 BFD_NAME = elf32-little -
uspace/libc/arch/arm32/_link.ld.in
r3ee8a075 r6b781c0 8 8 9 9 SECTIONS { 10 . = 0x 2000;10 . = 0x1000; 11 11 12 .init ALIGN(0x 2000): SUBALIGN(0x2000) {12 .init ALIGN(0x1000): SUBALIGN(0x1000) { 13 13 *(.init); 14 14 } : text 15 15 .text : { 16 16 *(.text); 17 17 *(.rodata*); 18 18 } :text 19 20 .got ALIGN(0x2000) : SUBALIGN(0x2000) { 21 _gp = .; 22 *(.got*); 23 } :data 24 .data : { 19 20 .data ALIGN(0x1000) : SUBALIGN(0x1000) { 25 21 *(.opd); 26 22 *(.data .data.*); 27 23 *(.sdata); 28 24 } :data 25 29 26 .tdata : { 30 27 _tdata_start = .; … … 32 29 _tdata_end = .; 33 30 } :data 31 34 32 .tbss : { 35 33 _tbss_start = .; … … 37 35 _tbss_end = .; 38 36 } :data 37 39 38 .bss : { 40 39 *(.sbss); 41 40 *(.scommon); 42 43 41 *(COMMON); 42 *(.bss); 44 43 } :data 45 46 . = ALIGN(0x 2000);44 45 . = ALIGN(0x1000); 47 46 _heap = .; 48 47 49 48 /DISCARD/ : { 50 49 *(*); 51 } 50 } 51 52 52 } -
uspace/libc/arch/arm32/include/atomic.h
r3ee8a075 r6b781c0 1 1 /* 2 * Copyright (c) 200 5 Jakub Jermar2 * Copyright (c) 2007 Michal Kebrt 3 3 * All rights reserved. 4 4 * … … 31 31 */ 32 32 /** @file 33 * @brief Atomic operations. 33 34 */ 34 35 … … 38 39 /** Atomic addition. 39 40 * 40 * @param val Atomic value.41 * @param i mm Value to add.41 * @param val Where to add. 42 * @param i Value to be added. 42 43 * 43 44 * @return Value after addition. 44 45 */ 45 static inline long atomic_add(atomic_t *val, int i mm)46 static inline long atomic_add(atomic_t *val, int i) 46 47 { 47 /* TODO */ 48 return (val->count += imm); 48 int ret; 49 volatile long * mem = &(val->count); 50 51 asm volatile ( 52 "1: \n" 53 "ldr r2, [%1] \n" 54 "add r3, r2, %2 \n" 55 "str r3, %0 \n" 56 "swp r3, r3, [%1] \n" 57 "cmp r3, r2 \n" 58 "bne 1b \n" 59 60 : "=m" (ret) 61 : "r" (mem), "r" (i) 62 : "r3", "r2" 63 ); 64 65 return ret; 49 66 } 50 67 68 69 /** Atomic increment. 70 * 71 * @param val Variable to be incremented. 72 */ 51 73 static inline void atomic_inc(atomic_t *val) { atomic_add(val, 1); } 74 75 76 /** Atomic decrement. 77 * 78 * @param val Variable to be decremented. 79 */ 52 80 static inline void atomic_dec(atomic_t *val) { atomic_add(val, -1); } 53 81 54 static inline long atomic_preinc(atomic_t *val) { return atomic_add(val, 1) + 1; }55 static inline long atomic_predec(atomic_t *val) { return atomic_add(val, -1) - 1; }56 82 57 static inline long atomic_postinc(atomic_t *val) { return atomic_add(val, 1); } 58 static inline long atomic_postdec(atomic_t *val) { return atomic_add(val, -1); } 83 /** Atomic pre-increment. 84 * 85 * @param val Variable to be incremented. 86 * @return Value after incrementation. 87 */ 88 static inline long atomic_preinc(atomic_t *val) { return atomic_add(val, 1); } 89 90 91 /** Atomic pre-decrement. 92 * 93 * @param val Variable to be decremented. 94 * @return Value after decrementation. 95 */ 96 static inline long atomic_predec(atomic_t *val) { return atomic_add(val, -1); } 97 98 99 /** Atomic post-increment. 100 * 101 * @param val Variable to be incremented. 102 * @return Value before incrementation. 103 */ 104 static inline long atomic_postinc(atomic_t *val) { return atomic_add(val, 1) - 1; } 105 106 107 /** Atomic post-decrement. 108 * 109 * @param val Variable to be decremented. 110 * @return Value before decrementation. 111 */ 112 static inline long atomic_postdec(atomic_t *val) { return atomic_add(val, -1) + 1; } 113 59 114 60 115 #endif -
uspace/libc/arch/arm32/include/config.h
r3ee8a075 r6b781c0 30 30 * @{ 31 31 */ 32 /** @file 32 /** @file 33 * @brief Configuration constants. 33 34 */ 34 35 -
uspace/libc/arch/arm32/include/endian.h
r3ee8a075 r6b781c0 30 30 * @{ 31 31 */ 32 /** @file 32 /** @file 33 * @brief Endianness definition. 33 34 */ 34 35 -
uspace/libc/arch/arm32/include/faddr.h
r3ee8a075 r6b781c0 1 1 /* 2 * Copyright (c) 200 5 Jakub Jermar2 * Copyright (c) 2007 Michal Kebrt 3 3 * All rights reserved. 4 4 * … … 30 30 * @{ 31 31 */ 32 /** @file 32 /** @file 33 * @brief Function address conversion. 33 34 */ 34 35 … … 38 39 #include <libarch/types.h> 39 40 40 /** 41 * 42 * Calculate absolute address of function 43 * referenced by fptr pointer. 41 /** Calculate absolute address of function referenced by fptr pointer. 44 42 * 45 43 * @param f Function pointer. 46 *47 44 */ 48 45 #define FADDR(f) (f) -
uspace/libc/arch/arm32/include/limits.h
r3ee8a075 r6b781c0 1 1 /* 2 * Copyright (c) 200 6 Josef Cejka2 * Copyright (c) 2007 Michal Kebrt 3 3 * All rights reserved. 4 4 * … … 30 30 * @{ 31 31 */ 32 /** @file 33 * @ingroup libcarm3232 /** @file 33 * @brief Limits declarations. 34 34 */ 35 35 … … 37 37 #define LIBC_arm32__LIMITS_H_ 38 38 39 # 40 # 41 # 42 # 39 #define LONG_MIN MIN_INT32 40 #define LONG_MAX MAX_INT32 41 #define ULONG_MIN MIN_UINT32 42 #define ULONG_MAX MAX_UINT32 43 43 44 44 #endif -
uspace/libc/arch/arm32/include/psthread.h
r3ee8a075 r6b781c0 1 1 /* 2 * Copyright (c) 200 6 Ondrej Palkovsky2 * Copyright (c) 2007 Michal Kebrt 3 3 * All rights reserved. 4 4 * … … 30 30 * @{ 31 31 */ 32 /** @file 33 * @ingroup libcarm3232 /** @file 33 * @brief psthread related declarations. 34 34 */ 35 35 … … 38 38 39 39 #include <types.h> 40 #include <align.h> 41 #include "thread.h" 40 42 41 #define SP_DELTA 0 /* TODO */ 43 /** Size of a stack item */ 44 #define STACK_ITEM_SIZE 4 42 45 46 /** Stack alignment - see <a href="http://www.arm.com/support/faqdev/14269.html">ABI</a> for details */ 47 #define STACK_ALIGNMENT 8 48 49 #define SP_DELTA (0 + ALIGN_UP(STACK_ITEM_SIZE, STACK_ALIGNMENT)) 50 51 52 /** Sets data to the context. 53 * 54 * @param c Context (#context_t). 55 * @param _pc Program counter. 56 * @param stack Stack address. 57 * @param size Stack size. 58 * @param ptls Pointer to the TCB. 59 */ 60 #define context_set(c, _pc, stack, size, ptls) \ 61 (c)->pc = (sysarg_t) (_pc); \ 62 (c)->sp = ((sysarg_t) (stack)) + (size) - SP_DELTA; \ 63 (c)->tls = ((sysarg_t)(ptls)) + sizeof(tcb_t) + ARM_TP_OFFSET; 64 65 66 /** Thread context. 67 * 68 * Only registers preserved accross function calls are included. r9 is used 69 * to store a TLS address. -ffixed-r9 gcc forces gcc not to use this 70 * register. -mtp=soft forces gcc to use #__aeabi_read_tp to obtain 71 * TLS address. 72 */ 43 73 typedef struct { 44 74 uint32_t sp; 45 75 uint32_t pc; 76 uint32_t r4; 77 uint32_t r5; 78 uint32_t r6; 79 uint32_t r7; 80 uint32_t r8; 46 81 uint32_t tls; 82 uint32_t r10; 83 uint32_t r11; 47 84 } context_t; 85 48 86 49 87 #endif -
uspace/libc/arch/arm32/include/stackarg.h
r3ee8a075 r6b781c0 1 1 /* 2 * Copyright (c) 200 6 Josef Cejka2 * Copyright (c) 2007 Michal Kebrt 3 3 * All rights reserved. 4 4 * … … 31 31 */ 32 32 /** @file 33 * @brief Empty. 33 34 */ 34 35 -
uspace/libc/arch/arm32/include/syscall.h
r3ee8a075 r6b781c0 1 1 /* 2 * Copyright (c) 200 5 Martin Decky2 * Copyright (c) 2007 Michal Kebrt 3 3 * All rights reserved. 4 4 * … … 27 27 */ 28 28 29 /** @addtogroup libc 29 /** @addtogroup libcarm32 30 30 * @{ 31 31 */ 32 /** 33 * @file32 /** @file 33 * @brief Empty. 34 34 */ 35 35 -
uspace/libc/arch/arm32/include/thread.h
r3ee8a075 r6b781c0 1 1 /* 2 * Copyright (c) 200 6 Jakub Jermar2 * Copyright (c) 2007 Pavel Jancik, Michal Kebrt 3 3 * All rights reserved. 4 4 * … … 27 27 */ 28 28 29 /** @addtogroup libc ia6429 /** @addtogroup libcarm32 30 30 * @{ 31 31 */ 32 32 /** @file 33 * @brief Uspace threads and TLS. 33 34 */ 34 35 … … 38 39 #include <unistd.h> 39 40 41 /** Stack initial size. */ 40 42 #define THREAD_INITIAL_STACK_PAGES_NO 1 41 43 44 /** Offsets for accessing __thread variables are shifted 8 bytes higher. */ 45 #define ARM_TP_OFFSET (-8) 46 47 /** TCB (Thread Control Block) struct. 48 * 49 * TLS starts just after this struct. 50 */ 42 51 typedef struct { 52 /** psthread data. */ 43 53 void *pst_data; 44 /* TODO */45 54 } tcb_t; 46 55 56 57 /** Sets TLS address to the r9 register. 58 * 59 * @param tcb TCB (TLS starts behind) 60 */ 47 61 static inline void __tcb_set(tcb_t *tcb) 48 62 { 49 /* TODO */ 63 void *tls = (void *)tcb; 64 tls += sizeof(tcb_t) + ARM_TP_OFFSET; 65 asm volatile ( 66 "mov r9, %0" 67 : 68 : "r"(tls) 69 ); 50 70 } 51 71 72 73 /** Returns TCB address. 74 * 75 * @return TCB address (starts before TLS which address is stored in r9 register). 76 */ 52 77 static inline tcb_t *__tcb_get(void) 53 78 { 54 /* TODO */ 55 return NULL; 79 void *ret; 80 asm volatile ( 81 "mov %0, r9" 82 : "=r"(ret) 83 ); 84 return (tcb_t *)(ret - ARM_TP_OFFSET - sizeof(tcb_t)); 56 85 } 86 87 88 /** Returns TLS address stored. 89 * 90 * Implemented in assembly. 91 * 92 * @return TLS address stored in r9 register 93 */ 94 extern uintptr_t __aeabi_read_tp(void); 57 95 58 96 #endif -
uspace/libc/arch/arm32/include/types.h
r3ee8a075 r6b781c0 30 30 * @{ 31 31 */ 32 /** @file 33 * @ingroup libcarm3232 /** @file 33 * @brief Definitions of basic types like #uintptr_t. 34 34 */ 35 35 -
uspace/libc/arch/arm32/src/eabi.S
r3ee8a075 r6b781c0 1 1 # 2 # Copyright (c) 2007 Jakub Jermar2 # Copyright (c) 2007 Pavel Jancik 3 3 # All rights reserved. 4 4 # … … 30 30 31 31 .global __aeabi_read_tp 32 32 33 __aeabi_read_tp: 33 34 0: 35 b 0b 34 mov r0, r9 35 mov pc, lr -
uspace/libc/arch/arm32/src/entry.s
r3ee8a075 r6b781c0 1 1 # 2 # Copyright (c) 200 6 Jakub Jermar2 # Copyright (c) 2007 Michal Kebrt, Pavel Jancik 3 3 # All rights reserved. 4 4 # … … 29 29 .section .init, "ax" 30 30 31 .org 0 32 31 33 .global __entry 32 34 .global __entry_driver … … 36 38 # 37 39 __entry: 40 bl __main 41 bl __io_init 42 bl main 43 bl __exit 38 44 39 # 40 # TODO 41 # 45 __entry_driver: 46 bl __main 47 bl main 48 bl __exit 49 -
uspace/libc/arch/arm32/src/psthread.S
r3ee8a075 r6b781c0 1 1 # 2 # Copyright (c) 200 5 Jakub Jermar2 # Copyright (c) 2007 Michal Kebrt 3 3 # All rights reserved. 4 4 # … … 33 33 34 34 context_save: 35 /* TODO */ 35 stmia r0!, {sp, lr} 36 stmia r0!, {r4-r11} 37 38 # return 1 39 mov r0, #1 40 mov pc, lr 36 41 37 42 context_restore: 38 /* TODO */ 43 ldmia r0!, {sp, lr} 44 ldmia r0!, {r4-r11} 45 46 #return 0 47 mov r0, #0 48 mov pc, lr 49 -
uspace/libc/arch/arm32/src/syscall.c
r3ee8a075 r6b781c0 1 1 /* 2 * Copyright (c) 200 5 Martin Decky2 * Copyright (c) 2007 Pavel Jancik 3 3 * All rights reserved. 4 4 * … … 31 31 */ 32 32 /** @file 33 * @ingroup libcarm3233 * @brief Syscall routine. 34 34 */ 35 35 36 36 #include <libc.h> 37 37 38 39 /** Syscall routine. 40 * 41 * Stores p1-p4, id to r0-r4 registers and calls <code>swi</code> 42 * instruction. Returned value is read from r0 register. 43 * 44 * @param p1 Parameter 1. 45 * @param p2 Parameter 2. 46 * @param p3 Parameter 3. 47 * @param p4 Parameter 4. 48 * @param id Number of syscall. 49 * 50 * @return Syscall return value. 51 */ 38 52 sysarg_t __syscall(const sysarg_t p1, const sysarg_t p2, const sysarg_t p3, 39 53 const sysarg_t p4, const syscall_t id) 40 54 { 41 /* TODO */ 42 return 0; 55 register sysarg_t __arm_reg_r0 asm("r0") = p1; 56 register sysarg_t __arm_reg_r1 asm("r1") = p2; 57 register sysarg_t __arm_reg_r2 asm("r2") = p3; 58 register sysarg_t __arm_reg_r3 asm("r3") = p4; 59 register sysarg_t __arm_reg_r4 asm("r4") = id; 60 61 asm volatile ( "swi" 62 : "=r" (__arm_reg_r0) 63 : "r" (__arm_reg_r0), 64 "r" (__arm_reg_r1), 65 "r" (__arm_reg_r2), 66 "r" (__arm_reg_r3), 67 "r" (__arm_reg_r4) 68 ); 69 70 return __arm_reg_r0; 43 71 } 44 72 -
uspace/libc/arch/arm32/src/thread.c
r3ee8a075 r6b781c0 1 1 /* 2 * Copyright (c) 200 6 Ondrej Palkovsky2 * Copyright (c) 2007 Pavel Jancik 3 3 * All rights reserved. 4 4 * … … 33 33 */ 34 34 /** @file 35 * @brief Uspace threads and TLS. 35 36 */ 36 37 … … 38 39 #include <malloc.h> 39 40 40 /** Allocate TLS & TCB for initial module threads41 /** Allocates TLS & TCB. 41 42 * 42 * @param data Start of data section 43 * @return pointer to tcb_t structure 43 * @param data Start of data section (output parameter). 44 * @param size Size of (tbss + tdata) sections. 45 * @return Pointer to the allocated #tcb_t structure. 44 46 */ 45 47 tcb_t * __alloc_tls(void **data, size_t size) 46 48 { 47 /* TODO */ 48 return NULL; 49 tcb_t *result; 50 51 result = malloc(sizeof(tcb_t) + size); 52 *data = ((void *)result) + sizeof(tcb_t); 53 return result; 49 54 } 50 55 56 /** Deallocates TLS & TCB. 57 * 58 * @param tcb TCB structure to be deallocated (along with corresponding TLS). 59 * @param size Not used. 60 */ 51 61 void __free_tls_arch(tcb_t *tcb, size_t size) 52 62 { 53 /* TODO */63 free(tcb); 54 64 } 55 65 -
uspace/libc/arch/arm32/src/thread_entry.s
r3ee8a075 r6b781c0 35 35 # 36 36 __thread_entry: 37 38 # 39 # TODO 40 # 37 b __thread_main -
uspace/softfloat/arch/arm32/include/functions.h
r3ee8a075 r6b781c0 29 29 /** @addtogroup softfloatarm32 arm32 30 30 * @ingroup sfl 31 * @brief softfloat architecture dependent definitions31 * @brief Softfloat architecture dependent definitions. 32 32 * @{ 33 33 */ 34 /** @file 34 /** @file 35 * @brief Softfloat architecture dependent definitions. 35 36 */ 36 37
Note:
See TracChangeset
for help on using the changeset viewer.