From f80b1fa5b588ca611fea1ab142dbaba6b9eaa733 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Axel=20D=C3=B6rfler?= Date: Tue, 12 Apr 2005 06:09:13 +0000 Subject: [PATCH] Moved the kernel_startup variable declaration from int.h to kernel.h (it's defined in main.c). Some cleanup. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@12327 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- headers/private/kernel/int.h | 19 +++++++------- headers/private/kernel/kernel.h | 8 ++++-- src/kernel/core/int.c | 33 +++++++++++++------------ src/kernel/core/lock.c | 15 +++++++---- src/kernel/libroot/os/driver_settings.c | 2 +- 5 files changed, 44 insertions(+), 33 deletions(-) diff --git a/headers/private/kernel/int.h b/headers/private/kernel/int.h index 2d61b6ecab..cdc007dcf7 100644 --- a/headers/private/kernel/int.h +++ b/headers/private/kernel/int.h @@ -1,22 +1,23 @@ /* -** Copyright 2001-2002, Travis Geiselbrecht. All rights reserved. -** Distributed under the terms of the NewOS License. -*/ + * Copyright 2003-2005, Axel Dörfler, axeld@pinc-software.de. All rights reserved. + * Distributed under the terms of the MIT License. + * + * Copyright 2001-2002, Travis Geiselbrecht. All rights reserved. + * Distributed under the terms of the NewOS License. + */ #ifndef _KERNEL_INT_H #define _KERNEL_INT_H -#include +#include #include struct kernel_args; + /* adds the handler but don't change whether or not the interrupt is currently enabled */ #define B_NO_ENABLE_COUNTER 1 -/* during kernel startup, interrupts are disabled */ -extern bool kernel_startup; - #ifdef __cplusplus extern "C" { @@ -25,8 +26,8 @@ extern "C" { status_t int_init(struct kernel_args *args); status_t int_init_post_vm(struct kernel_args *args); int int_io_interrupt_handler(int vector); -long install_interrupt_handler(long, interrupt_handler, void *); -long remove_interrupt_handler (long, interrupt_handler, void *); +status_t install_interrupt_handler(long vector, interrupt_handler, void *data); +status_t remove_interrupt_handler(long vector, interrupt_handler, void *data); static inline void enable_interrupts(void) diff --git a/headers/private/kernel/kernel.h b/headers/private/kernel/kernel.h index a209696fea..eb77a88350 100644 --- a/headers/private/kernel/kernel.h +++ b/headers/private/kernel/kernel.h @@ -1,5 +1,5 @@ /* - * Copyright 2002-2004, Axel Dörfler, axeld@pinc-software.de. + * Copyright 2002-2005, Axel Dörfler, axeld@pinc-software.de. * Distributed under the terms of the MIT License. * * Copyright 2001-2002, Travis Geiselbrecht. All rights reserved. @@ -23,7 +23,7 @@ //#define DEBUG_KERNEL_STACKS // Note, debugging kernel stacks doesn't really work yet. Since the // interrupt will also try to use the stack on a page fault, all - // you get is a reboot. + // you get is a double fault. // At least, you then know that the stack overflows in this case :) /** Size of the kernel stack */ @@ -51,6 +51,10 @@ #define SET_BIT(a, b) ((a) | (1 << (b))) #define CLEAR_BIT(a, b) ((a) & (~(1 << (b)))) +/* during kernel startup, interrupts are disabled (among other things) */ +extern bool kernel_startup; + + #ifdef __cplusplus extern "C" { #endif diff --git a/src/kernel/core/int.c b/src/kernel/core/int.c index e24156478e..7e2ac03c33 100644 --- a/src/kernel/core/int.c +++ b/src/kernel/core/int.c @@ -34,8 +34,9 @@ struct io_vector { static struct io_vector *io_vectors = NULL; + cpu_status -disable_interrupts() +disable_interrupts(void) { return arch_int_disable_interrupts(); } @@ -82,11 +83,11 @@ int_init_post_vm(kernel_args *args) * arch_int_enable_io_interrupt() as it only works for IRQ values */ -long +status_t install_interrupt_handler(long vector, interrupt_handler handler, void *data) { struct io_handler *io = NULL; - int state; + cpu_status state; if (vector < 0 || vector >= NUM_IO_VECTORS) return B_BAD_VALUE; @@ -98,7 +99,7 @@ install_interrupt_handler(long vector, interrupt_handler handler, void *data) */ io = (struct io_handler *)malloc(sizeof(struct io_handler)); if (io == NULL) - return ENOMEM; + return B_NO_MEMORY; io->func = handler; io->data = data; @@ -113,7 +114,7 @@ install_interrupt_handler(long vector, interrupt_handler handler, void *data) release_spinlock(&io_vectors[vector].vector_lock); restore_interrupts(state); - return 0; + return B_OK; } @@ -124,11 +125,12 @@ install_interrupt_handler(long vector, interrupt_handler handler, void *data) long install_io_interrupt_handler(long irq, interrupt_handler handler, void *data, ulong flags) { + // ToDo: this is x86 specific long vector = irq + 0x20; - long rv = install_interrupt_handler(vector, handler, data); - if (rv != 0) - return rv; + status_t status = install_interrupt_handler(vector, handler, data); + if (status != B_OK) + return status; /* If we were passed the bit-flag B_NO_ENABLE_COUNTER then * we're being asked to not alter whether the interrupt is set @@ -137,7 +139,7 @@ install_io_interrupt_handler(long irq, interrupt_handler handler, void *data, ul if ((flags & B_NO_ENABLE_COUNTER) == 0) arch_int_enable_io_interrupt(irq); - return 0; + return B_OK; } @@ -145,11 +147,11 @@ install_io_interrupt_handler(long irq, interrupt_handler handler, void *data, ul * Read the notes for install_interrupt_handler! */ -long +status_t remove_interrupt_handler(long vector, interrupt_handler handler, void *data) { struct io_handler *io = NULL; - long status = EINVAL; + status_t status = B_BAD_VALUE; int state; if (vector < 0 || vector >= NUM_IO_VECTORS) @@ -194,16 +196,15 @@ long remove_io_interrupt_handler(long irq, interrupt_handler handler, void *data) { long vector = irq + 0x20; - long rv = remove_interrupt_handler(vector, handler, data); - - if (rv < 0) - return rv; + status_t status = remove_interrupt_handler(vector, handler, data); + if (status < B_OK) + return status; /* Check if we need to disable interrupts... */ if (io_vectors[vector].handler_list.next != &io_vectors[vector].handler_list) arch_int_disable_io_interrupt(irq); - return 0; + return B_OK; } diff --git a/src/kernel/core/lock.c b/src/kernel/core/lock.c index b76559b28e..34c1db56e5 100644 --- a/src/kernel/core/lock.c +++ b/src/kernel/core/lock.c @@ -1,13 +1,18 @@ -/* Mutex and recursive_lock code */ +/* + * Copyright 2002-2005, Axel Dörfler, axeld@pinc-software.de. All rights reserved. + * Distributed under the terms of the MIT License. + * + * Copyright 2001-2002, Travis Geiselbrecht. All rights reserved. + * Distributed under the terms of the NewOS License. + */ -/* -** Copyright 2001-2002, Travis Geiselbrecht. All rights reserved. -** Distributed under the terms of the NewOS License. -*/ +/* Mutex and recursive_lock code */ #include + #include +#include #include #include #include diff --git a/src/kernel/libroot/os/driver_settings.c b/src/kernel/libroot/os/driver_settings.c index 2b051c7d85..3ee814e663 100644 --- a/src/kernel/libroot/os/driver_settings.c +++ b/src/kernel/libroot/os/driver_settings.c @@ -37,7 +37,7 @@ # include # include # include -# include +# include # include #endif #ifdef _BOOT_MODE