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
This commit is contained in:
Axel Dörfler 2003-05-13 15:20:47 +00:00
parent dd22481e7a
commit 8f048d2b40
4 changed files with 132 additions and 44 deletions

View File

@ -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:

View File

@ -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 <kernel.h>
#include <arch/cpu.h>
#include <malloc.h>
#include <vm.h>
#include <debug.h>
#include <smp.h>
#include <Errors.h>
#include <kerrors.h>
#include <tls.h>
#include <boot/stage2.h>
#include <string.h>
#include <stdio.h>
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;
}
}

View File

@ -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 <arch/debug.h>
// 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;
}

View File

@ -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)
{
}