3684e40bb8
It causes the interrupt handler to be inserted at the very end of the list instead of at the top. It is intended to be used as a workaround when a interrupt handler cannot know if it actually handled the interrupt. This should never be used by native drivers. Also if we know that the result is not valid because of this flag we won't disable the vector in case we count many unhandled interrupts as those numbers are then unreliable. * Moved B_NO_LOCK_VECTOR to be a private flag as well. * Made the interrupt handler list a simple manually maintaned singly linked list instead of the doubly linked one used with insque and remque as it greatly simplifies things for such an easy use case and is more compact. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@29241 a95241bf-73f2-0310-859d-f6bbb57e9c96
56 lines
1.2 KiB
C
56 lines
1.2 KiB
C
/*
|
|
* Copyright 2003-2006, 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 <arch/int.h>
|
|
|
|
// private install_io_interrupt_handler() flags
|
|
#define B_NO_LOCK_VECTOR 0x100
|
|
#define B_NO_HANDLED_INFO 0x200
|
|
|
|
struct kernel_args;
|
|
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
status_t int_init(struct kernel_args *args);
|
|
status_t int_init_post_vm(struct kernel_args *args);
|
|
status_t int_init_post_device_manager(struct kernel_args *args);
|
|
int int_io_interrupt_handler(int vector, bool levelTriggered);
|
|
|
|
bool interrupts_enabled(void);
|
|
|
|
static inline void
|
|
enable_interrupts(void)
|
|
{
|
|
arch_int_enable_interrupts();
|
|
}
|
|
|
|
static inline bool
|
|
are_interrupts_enabled(void)
|
|
{
|
|
return arch_int_are_interrupts_enabled();
|
|
}
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
|
|
// map those directly to the arch versions, so they can be inlined
|
|
#define disable_interrupts() arch_int_disable_interrupts()
|
|
#define restore_interrupts(status) arch_int_restore_interrupts(status)
|
|
|
|
|
|
#endif /* _KERNEL_INT_H */
|