1997-06-02 08:19:06 +00:00
|
|
|
/*-
|
|
|
|
* Copyright (c) 1991 The Regents of the University of California.
|
|
|
|
* All rights reserved.
|
|
|
|
*
|
|
|
|
* Redistribution and use in source and binary forms, with or without
|
|
|
|
* modification, are permitted provided that the following conditions
|
|
|
|
* are met:
|
|
|
|
* 1. Redistributions of source code must retain the above copyright
|
|
|
|
* notice, this list of conditions and the following disclaimer.
|
|
|
|
* 2. Redistributions in binary form must reproduce the above copyright
|
|
|
|
* notice, this list of conditions and the following disclaimer in the
|
|
|
|
* documentation and/or other materials provided with the distribution.
|
|
|
|
* 3. All advertising materials mentioning features or use of this software
|
|
|
|
* must display the following acknowledgement:
|
|
|
|
* This product includes software developed by the University of
|
|
|
|
* California, Berkeley and its contributors.
|
|
|
|
* 4. Neither the name of the University nor the names of its contributors
|
|
|
|
* may be used to endorse or promote products derived from this software
|
|
|
|
* without specific prior written permission.
|
|
|
|
*
|
|
|
|
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
|
|
|
|
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
|
|
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
|
|
|
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
|
|
|
|
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
|
|
|
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
|
|
|
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
|
|
|
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
|
|
|
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
|
|
|
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
|
|
|
* SUCH DAMAGE.
|
|
|
|
*
|
1999-08-28 01:08:13 +00:00
|
|
|
* $FreeBSD$
|
1997-06-02 08:19:06 +00:00
|
|
|
*/
|
|
|
|
|
|
|
|
#ifndef _I386_ISA_INTR_MACHDEP_H_
|
|
|
|
#define _I386_ISA_INTR_MACHDEP_H_
|
|
|
|
|
|
|
|
/*
|
|
|
|
* Low level interrupt code.
|
|
|
|
*/
|
|
|
|
|
1999-12-29 04:46:21 +00:00
|
|
|
#ifdef _KERNEL
|
1997-06-02 08:19:06 +00:00
|
|
|
|
2001-12-20 23:48:31 +00:00
|
|
|
#ifdef LOCORE
|
|
|
|
|
|
|
|
/*
|
|
|
|
* Protects the IO APIC, 8259 PIC, imen, and apic_imen
|
|
|
|
*/
|
|
|
|
#define ICU_LOCK MTX_LOCK_SPIN(icu_lock, 0)
|
|
|
|
#define ICU_UNLOCK MTX_UNLOCK_SPIN(icu_lock)
|
|
|
|
|
|
|
|
#else /* LOCORE */
|
1997-07-13 01:18:51 +00:00
|
|
|
|
1997-06-02 08:19:06 +00:00
|
|
|
/*
|
|
|
|
* Type of the first (asm) part of an interrupt handler.
|
|
|
|
*/
|
2002-03-20 07:51:46 +00:00
|
|
|
typedef void inthand_t(u_int cs, u_int ef, u_int esp, u_int ss);
|
2002-06-29 02:32:34 +00:00
|
|
|
typedef void unpendhand_t(void);
|
1997-06-02 08:19:06 +00:00
|
|
|
|
|
|
|
#define IDTVEC(name) __CONCAT(X,name)
|
|
|
|
|
|
|
|
extern u_long *intr_countp[]; /* pointers into intrcnt[] */
|
2000-09-13 18:33:25 +00:00
|
|
|
extern driver_intr_t *intr_handler[]; /* C entry points of intr handlers */
|
|
|
|
extern struct ithd *ithds[];
|
1998-06-18 15:32:09 +00:00
|
|
|
extern void *intr_unit[]; /* cookies to pass to intr handlers */
|
2001-12-20 23:48:31 +00:00
|
|
|
extern struct mtx icu_lock;
|
1997-06-02 08:19:06 +00:00
|
|
|
|
|
|
|
inthand_t
|
|
|
|
IDTVEC(fastintr0), IDTVEC(fastintr1),
|
|
|
|
IDTVEC(fastintr2), IDTVEC(fastintr3),
|
|
|
|
IDTVEC(fastintr4), IDTVEC(fastintr5),
|
|
|
|
IDTVEC(fastintr6), IDTVEC(fastintr7),
|
|
|
|
IDTVEC(fastintr8), IDTVEC(fastintr9),
|
|
|
|
IDTVEC(fastintr10), IDTVEC(fastintr11),
|
|
|
|
IDTVEC(fastintr12), IDTVEC(fastintr13),
|
|
|
|
IDTVEC(fastintr14), IDTVEC(fastintr15);
|
|
|
|
inthand_t
|
|
|
|
IDTVEC(intr0), IDTVEC(intr1), IDTVEC(intr2), IDTVEC(intr3),
|
|
|
|
IDTVEC(intr4), IDTVEC(intr5), IDTVEC(intr6), IDTVEC(intr7),
|
|
|
|
IDTVEC(intr8), IDTVEC(intr9), IDTVEC(intr10), IDTVEC(intr11),
|
|
|
|
IDTVEC(intr12), IDTVEC(intr13), IDTVEC(intr14), IDTVEC(intr15);
|
2002-03-27 05:39:23 +00:00
|
|
|
unpendhand_t
|
|
|
|
IDTVEC(fastunpend0), IDTVEC(fastunpend1), IDTVEC(fastunpend2),
|
|
|
|
IDTVEC(fastunpend3), IDTVEC(fastunpend4), IDTVEC(fastunpend5),
|
|
|
|
IDTVEC(fastunpend6), IDTVEC(fastunpend7), IDTVEC(fastunpend8),
|
|
|
|
IDTVEC(fastunpend9), IDTVEC(fastunpend10), IDTVEC(fastunpend11),
|
|
|
|
IDTVEC(fastunpend12), IDTVEC(fastunpend13), IDTVEC(fastunpend14),
|
|
|
|
IDTVEC(fastunpend15), IDTVEC(fastunpend16), IDTVEC(fastunpend17),
|
|
|
|
IDTVEC(fastunpend18), IDTVEC(fastunpend19), IDTVEC(fastunpend20),
|
|
|
|
IDTVEC(fastunpend21), IDTVEC(fastunpend22), IDTVEC(fastunpend23),
|
|
|
|
IDTVEC(fastunpend24), IDTVEC(fastunpend25), IDTVEC(fastunpend26),
|
|
|
|
IDTVEC(fastunpend27), IDTVEC(fastunpend28), IDTVEC(fastunpend29),
|
|
|
|
IDTVEC(fastunpend30), IDTVEC(fastunpend31);
|
1997-06-02 08:19:06 +00:00
|
|
|
|
2000-09-07 01:33:02 +00:00
|
|
|
#define NR_INTRNAMES (1 + ICU_LEN + 2 * ICU_LEN)
|
|
|
|
|
2002-03-20 07:51:46 +00:00
|
|
|
void isa_defaultirq(void);
|
|
|
|
int isa_nmi(int cd);
|
|
|
|
int icu_setup(int intr, driver_intr_t *func, void *arg, int flags);
|
|
|
|
int icu_unset(int intr, driver_intr_t *handler);
|
2001-07-20 06:07:34 +00:00
|
|
|
void icu_reinit(void);
|
1997-06-02 08:19:06 +00:00
|
|
|
|
2000-04-29 07:48:37 +00:00
|
|
|
/*
|
|
|
|
* WARNING: These are internal functions and not to be used by device drivers!
|
|
|
|
* They are subject to change without notice.
|
|
|
|
*/
|
2001-02-09 17:47:44 +00:00
|
|
|
int inthand_add(const char *name, int irq, driver_intr_t handler, void *arg,
|
|
|
|
enum intr_type flags, void **cookiep);
|
|
|
|
int inthand_remove(void *cookie);
|
|
|
|
void sched_ithd(void *dummy);
|
2002-03-27 05:39:23 +00:00
|
|
|
void call_fast_unpend(int irq);
|
1999-04-21 07:26:30 +00:00
|
|
|
|
1997-07-13 01:18:51 +00:00
|
|
|
#endif /* LOCORE */
|
|
|
|
|
1999-12-29 04:46:21 +00:00
|
|
|
#endif /* _KERNEL */
|
1997-06-02 08:19:06 +00:00
|
|
|
|
|
|
|
#endif /* !_I386_ISA_INTR_MACHDEP_H_ */
|