From 8f048d2b40d84c0e7e8d18a9a6c4aaa0b0a07592 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Axel=20D=C3=B6rfler?= Date: Tue, 13 May 2003 15:20:47 +0000 Subject: [PATCH] Added missing arch_*() functions, removed the (empty) atomic_*() definitions, since they are implemented in the libroot's os/arch directory. git-svn-id: file:///srv/svn/repos/haiku/trunk/current@3235 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- src/kernel/core/arch/ppc/arch_asm.S | 15 ---- src/kernel/core/arch/ppc/arch_cpu.c | 101 ++++++++++++++++++------- src/kernel/core/arch/ppc/arch_debug.c | 21 ++++- src/kernel/core/arch/ppc/arch_thread.c | 39 ++++++++++ 4 files changed, 132 insertions(+), 44 deletions(-) diff --git a/src/kernel/core/arch/ppc/arch_asm.S b/src/kernel/core/arch/ppc/arch_asm.S index 14d76ac419..ddf7a06567 100755 --- a/src/kernel/core/arch/ppc/arch_asm.S +++ b/src/kernel/core/arch/ppc/arch_asm.S @@ -8,21 +8,6 @@ .globl reboot reboot: -.globl atomic_add -atomic_add: - -.globl atomic_and -atomic_and: - -.globl atomic_or -atomic_or: - -.globl atomic_set -atomic_set: - -.globl test_and_set -test_and_set: - .globl arch_int_restore_interrupts arch_int_restore_interrupts: diff --git a/src/kernel/core/arch/ppc/arch_cpu.c b/src/kernel/core/arch/ppc/arch_cpu.c index dbcaf5f064..d4482d874f 100755 --- a/src/kernel/core/arch/ppc/arch_cpu.c +++ b/src/kernel/core/arch/ppc/arch_cpu.c @@ -1,17 +1,36 @@ /* -** Copyright 2001, Travis Geiselbrecht. All rights reserved. +** Copyright 2001-2002, Travis Geiselbrecht. All rights reserved. ** Distributed under the terms of the NewOS License. */ - #include #include +#include +#include +#include +#include +#include +#include +#include + #include +#include +#include + + +int +arch_cpu_preboot_init(kernel_args *ka) +{ + return 0; +} + int arch_cpu_init(kernel_args *ka) { + //setup_system_time(ka->arch_args.system_time_cv_factor); + return 0; } @@ -26,12 +45,21 @@ arch_cpu_init2(kernel_args *ka) void arch_cpu_invalidate_TLB_range(addr start, addr end) { + int num_pages = end/PAGE_SIZE - start/PAGE_SIZE; + while (num_pages-- >= 0) { + //invalidate_TLB(start); + start += PAGE_SIZE; + } } void arch_cpu_invalidate_TLB_list(addr pages[], int num_pages) { + int i; + for (i = 0; i < num_pages; i++) { + //invalidate_TLB(pages[i]); + } } @@ -41,82 +69,93 @@ arch_cpu_global_TLB_invalidate(void) } -long long -system_time(void) -{ - return 0; -} - - int -arch_cpu_user_memcpy(void *to, const void *from, size_t size, addr *fault_handler) +arch_cpu_user_memcpy(void *to, const void *from, size_t size, addr *faultHandler) { char *tmp = (char *)to; char *s = (char *)from; - *fault_handler = (addr)&&error; + *faultHandler = (addr)&&error; while (size--) *tmp++ = *s++; - *fault_handler = 0; + *faultHandler = 0; return 0; error: - *fault_handler = 0; + *faultHandler = 0; return B_BAD_ADDRESS; } int -arch_cpu_user_strcpy(char *to, const char *from, addr *fault_handler) +arch_cpu_user_strcpy(char *to, const char *from, addr *faultHandler) { - *fault_handler = (addr)&&error; + *faultHandler = (addr)&&error; while ((*to++ = *from++) != '\0') ; - *fault_handler = 0; + *faultHandler = 0; return 0; error: - *fault_handler = 0; + *faultHandler = 0; return B_BAD_ADDRESS; } int -arch_cpu_user_strncpy(char *to, const char *from, size_t size, addr *fault_handler) +arch_cpu_user_strncpy(char *to, const char *from, size_t size, addr *faultHandler) { - *fault_handler = (addr)&&error; + *faultHandler = (addr)&&error; + while(size-- && (*to++ = *from++) != '\0') + ; + + *faultHandler = 0; + return 0; + +error: + *faultHandler = 0; + return B_BAD_ADDRESS; +} + + +int +arch_cpu_user_strlcpy(char *to, const char *from, size_t size, addr *faultHandler) +{ + *faultHandler = (addr)&&error; + + to[--size] = '\0'; while (size-- && (*to++ = *from++) != '\0') ; - *fault_handler = 0; + *faultHandler = 0; return 0; error: - *fault_handler = 0; + *faultHandler = 0; return B_BAD_ADDRESS; } int -arch_cpu_user_memset(void *s, char c, size_t count, addr *fault_handler) +arch_cpu_user_memset(void *s, char c, size_t count, addr *faultHandler) { - char *xs = (char *) s; + char *xs = (char *)s; - *fault_handler = (addr)&&error; + *faultHandler = (addr)&&error; while (count--) *xs++ = c; - *fault_handler = 0; + *faultHandler = 0; return 0; error: - *fault_handler = 0; + *faultHandler = 0; return B_BAD_ADDRESS; } @@ -124,4 +163,14 @@ error: void arch_cpu_idle(void) { + switch (smp_get_num_cpus()) { + case 0: + panic("You need at least 1 CPU to run OpenBeOS\n"); + case 1: + //hlt(); + break; + default: + break; + } } + diff --git a/src/kernel/core/arch/ppc/arch_debug.c b/src/kernel/core/arch/ppc/arch_debug.c index a739cd71aa..1433778b47 100755 --- a/src/kernel/core/arch/ppc/arch_debug.c +++ b/src/kernel/core/arch/ppc/arch_debug.c @@ -1,6 +1,6 @@ /* -** Copyright 2001, Travis Geiselbrecht. All rights reserved. -** Distributed under the terms of the NewOS License. +** Copyright 2003, Axel Dörfler, axeld@pinc-software.de. All rights reserved. +** Distributed under the terms of the OpenBeOS License. */ @@ -9,4 +9,19 @@ #include -// XXX will put stack trace and disassembly routines here +// ToDo: will put stack trace and disassembly routines here + + +void +arch_dbg_save_registers(int *regs) +{ +} + + +int +arch_dbg_init(kernel_args *ka) +{ + return 0; +} + + diff --git a/src/kernel/core/arch/ppc/arch_thread.c b/src/kernel/core/arch/ppc/arch_thread.c index 62b7f9d552..717bbb01c5 100755 --- a/src/kernel/core/arch/ppc/arch_thread.c +++ b/src/kernel/core/arch/ppc/arch_thread.c @@ -30,6 +30,25 @@ arch_thread_init_kthread_stack(struct thread *t, int (*start_func)(void), void ( } +struct thread * +arch_thread_get_current_thread(void) +{ + return NULL; +} + + +void +arch_thread_set_current_thread(struct thread *thread) +{ +} + + +void +arch_thread_init_tls(struct thread *thread) +{ +} + + void arch_thread_switch_kstack_and_call(struct thread *t, addr new_kstack, void (*func)(void *), void *arg) { @@ -53,3 +72,23 @@ arch_thread_enter_uspace(struct thread *thread, addr entry, void *arg1, void *ar { } + +void +arch_setup_signal_frame(struct thread *thread, struct sigaction *sa, int sig, int sigMask) +{ +} + + +int64 +arch_restore_signal_frame(void) +{ + return 0; +} + + +void +arch_check_syscall_restart(struct thread *thread) +{ +} + +