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
This commit is contained in:
parent
c46e419bc5
commit
f80b1fa5b5
@ -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 <KernelExport.h>
|
||||
|
||||
#include <KernelExport.h>
|
||||
#include <arch/int.h>
|
||||
|
||||
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)
|
||||
|
@ -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
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
|
||||
|
@ -1,13 +1,18 @@
|
||||
/* Mutex and recursive_lock code */
|
||||
|
||||
/*
|
||||
** Copyright 2001-2002, Travis Geiselbrecht. All rights reserved.
|
||||
** Distributed under the terms of the NewOS License.
|
||||
* 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.
|
||||
*/
|
||||
|
||||
/* Mutex and recursive_lock code */
|
||||
|
||||
|
||||
#include <OS.h>
|
||||
|
||||
#include <lock.h>
|
||||
#include <kernel.h>
|
||||
#include <int.h>
|
||||
#include <debug.h>
|
||||
#include <thread.h>
|
||||
|
@ -37,7 +37,7 @@
|
||||
# include <util/list.h>
|
||||
# include <lock.h>
|
||||
# include <kdriver_settings.h>
|
||||
# include <int.h>
|
||||
# include <kernel.h>
|
||||
# include <boot/kernel_args.h>
|
||||
#endif
|
||||
#ifdef _BOOT_MODE
|
||||
|
Loading…
Reference in New Issue
Block a user