| /* |
| * Copyright 1994-2000 Sun Microsystems, Inc. All Rights Reserved. |
| * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. |
| * |
| * This code is free software; you can redistribute it and/or modify it |
| * under the terms of the GNU General Public License version 2 only, as |
| * published by the Free Software Foundation. Sun designates this |
| * particular file as subject to the "Classpath" exception as provided |
| * by Sun in the LICENSE file that accompanied this code. |
| * |
| * This code is distributed in the hope that it will be useful, but WITHOUT |
| * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or |
| * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License |
| * version 2 for more details (a copy is included in the LICENSE file that |
| * accompanied this code). |
| * |
| * You should have received a copy of the GNU General Public License version |
| * 2 along with this work; if not, write to the Free Software Foundation, |
| * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. |
| * |
| * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, |
| * CA 95054 USA or visit www.sun.com if you need additional information or |
| * have any questions. |
| */ |
| |
| /* |
| * Interrupt dispatch interface |
| */ |
| |
| #ifndef _JAVASOFT_INTERRUPT_H_ |
| #define _JAVASOFT_INTERRUPT_H_ |
| |
| /* |
| * Type definitions. |
| */ |
| |
| /*- |
| * A function that handles interrupt dispatch requests is of type |
| * intr_handler_t. This type definition is mostly for convenience. |
| * A declaration of a handler function, should look like this: |
| * |
| * void myHandler(int interrupt, void *siginfo, void *context, void *arg); |
| * |
| * An intr_handler_t is constrained: |
| * |
| * - It runs on the exception stack. |
| * - It cannot yield. |
| * - It cannot allocate/free memory. |
| * - It can only call interrupt-safe routines. |
| * |
| * "arg" is set to the "handlerArg" specified in intrRegister(). |
| */ |
| typedef void (*intr_handler_t)(int interrupt, void *siginfo, |
| void *context, void *arg); |
| |
| /* |
| * Routines. |
| */ |
| |
| /* Initialize the interrupt system */ |
| void intrInit(void); |
| |
| /* Set a handler for a particular interrupt */ |
| signal_handler_t intrRegister(int interrupt, intr_handler_t handler, |
| void *handlerArg); |
| |
| /* Dispatch an interrupt (called from the low-level handlers) */ |
| void intrDispatch(int interrupt, void *siginfo, void *context); |
| |
| /*- |
| * The target specific header file should define the following |
| * |
| * Constants |
| * |
| * N_INTERRUPTS - The number of interrupt channels. These |
| * are numbered from 0 to (N_INTERRUPTS - 1). |
| */ |
| #ifdef __linux__ |
| #define N_INTERRUPTS NSIG /* 0 to NSIG - 1*/ |
| #else |
| #define N_INTERRUPTS 32 /* 0 to 31 */ |
| #endif |
| |
| /*- |
| * Routines/Macros that control whether interrupts are enabled or |
| * not. |
| * |
| * void intrLock(void) - Disable all interrupts. |
| * void intrUnlock(void) - Enable all interrupts. |
| * |
| * Note: intrLock()/intrUnlock() pairs can be nested. |
| * |
| */ |
| |
| void intrLock(void); |
| void intrUnlock(void); |
| |
| /*- |
| * intrInitMD() -- |
| * Initialize the machine-dependant interrupt software. |
| * |
| * This routine should leave the all interrupts disabled as if |
| * one (1) intrLock() had been called. At the end of the |
| * bootstrap, a single intrUnlock(), will be called to turn |
| * interrupts on. |
| */ |
| |
| void intrInitMD(void); |
| |
| #if defined(__solaris__) && !defined(SA_SIGINFO) |
| #error signal.h has not been included? |
| #endif |
| |
| #ifdef SA_SIGINFO |
| /* Thread implementation dependent interrupt dispatcher. */ |
| void intrDispatchMD(int sig, siginfo_t *info, void *uc); |
| #else |
| void intrDispatchMD(int sig); |
| #endif |
| |
| /* Whether the signal is used by the HPI implementation */ |
| bool_t intrInUse(int sig); |
| |
| #endif /* !_JAVASOFT_INTERRUPT_H_ */ |