xref: /dflybsd-src/sys/platform/pc64/include/intr_machdep.h (revision 451af8d98a4c80b84e525152873b3cc74b9d2775)
157a9c56bSSepherosa Ziehau /*-
257a9c56bSSepherosa Ziehau  * Copyright (c) 1991 The Regents of the University of California.
357a9c56bSSepherosa Ziehau  * Copyright (c) 2008 The DragonFly Project.
457a9c56bSSepherosa Ziehau  * All rights reserved.
557a9c56bSSepherosa Ziehau  *
657a9c56bSSepherosa Ziehau  * Redistribution and use in source and binary forms, with or without
757a9c56bSSepherosa Ziehau  * modification, are permitted provided that the following conditions
857a9c56bSSepherosa Ziehau  * are met:
957a9c56bSSepherosa Ziehau  * 1. Redistributions of source code must retain the above copyright
1057a9c56bSSepherosa Ziehau  *    notice, this list of conditions and the following disclaimer.
1157a9c56bSSepherosa Ziehau  * 2. Redistributions in binary form must reproduce the above copyright
1257a9c56bSSepherosa Ziehau  *    notice, this list of conditions and the following disclaimer in the
1357a9c56bSSepherosa Ziehau  *    documentation and/or other materials provided with the distribution.
1457a9c56bSSepherosa Ziehau  * 3. All advertising materials mentioning features or use of this software
1557a9c56bSSepherosa Ziehau  *    must display the following acknowledgement:
1657a9c56bSSepherosa Ziehau  *	This product includes software developed by the University of
1757a9c56bSSepherosa Ziehau  *	California, Berkeley and its contributors.
1857a9c56bSSepherosa Ziehau  * 4. Neither the name of the University nor the names of its contributors
1957a9c56bSSepherosa Ziehau  *    may be used to endorse or promote products derived from this software
2057a9c56bSSepherosa Ziehau  *    without specific prior written permission.
2157a9c56bSSepherosa Ziehau  *
2257a9c56bSSepherosa Ziehau  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
2357a9c56bSSepherosa Ziehau  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
2457a9c56bSSepherosa Ziehau  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
2557a9c56bSSepherosa Ziehau  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
2657a9c56bSSepherosa Ziehau  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
2757a9c56bSSepherosa Ziehau  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
2857a9c56bSSepherosa Ziehau  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
2957a9c56bSSepherosa Ziehau  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
3057a9c56bSSepherosa Ziehau  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
3157a9c56bSSepherosa Ziehau  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
3257a9c56bSSepherosa Ziehau  * SUCH DAMAGE.
3357a9c56bSSepherosa Ziehau  *
3457a9c56bSSepherosa Ziehau  * $FreeBSD: src/sys/i386/isa/intr_machdep.h,v 1.19.2.2 2001/10/14 20:05:50 luigi Exp $
3557a9c56bSSepherosa Ziehau  * $DragonFly: src/sys/platform/pc64/isa/intr_machdep.h,v 1.1 2008/08/29 17:07:19 dillon Exp $
3657a9c56bSSepherosa Ziehau  */
3757a9c56bSSepherosa Ziehau 
3857a9c56bSSepherosa Ziehau #ifndef _ARCH_INTR_MACHDEP_H_
3957a9c56bSSepherosa Ziehau #define	_ARCH_INTR_MACHDEP_H_
4057a9c56bSSepherosa Ziehau 
4157a9c56bSSepherosa Ziehau #ifndef LOCORE
4257a9c56bSSepherosa Ziehau #ifndef _SYS_TYPES_H_
4357a9c56bSSepherosa Ziehau #include <sys/types.h>
4457a9c56bSSepherosa Ziehau #endif
4557a9c56bSSepherosa Ziehau #endif
4657a9c56bSSepherosa Ziehau 
4757a9c56bSSepherosa Ziehau /*
4857a9c56bSSepherosa Ziehau  * Low level interrupt code.
4957a9c56bSSepherosa Ziehau  */
5057a9c56bSSepherosa Ziehau 
5157a9c56bSSepherosa Ziehau #ifdef _KERNEL
5257a9c56bSSepherosa Ziehau 
5357a9c56bSSepherosa Ziehau #define IDT_OFFSET		0x20
5457a9c56bSSepherosa Ziehau #define IDT_OFFSET_SYSCALL	0x80
5557a9c56bSSepherosa Ziehau #define IDT_OFFSET_IPI		0xe0
5657a9c56bSSepherosa Ziehau 
57*451af8d9SSepherosa Ziehau #define IDT_HWI_VECTORS		(IDT_OFFSET_IPI - IDT_OFFSET)
58*451af8d9SSepherosa Ziehau 
5957a9c56bSSepherosa Ziehau /*
6057a9c56bSSepherosa Ziehau  * Local APIC TPR priority vector levels:
6157a9c56bSSepherosa Ziehau  *
6257a9c56bSSepherosa Ziehau  *	0xff (255) +-------------+
6357a9c56bSSepherosa Ziehau  *		   |             | 15 (IPIs: Xcpustop, Xspuriousint)
6457a9c56bSSepherosa Ziehau  *	0xf0 (240) +-------------+
6557a9c56bSSepherosa Ziehau  *		   |             | 14 (IPIs: Xinvltlb, Xipiq, Xtimer)
6657a9c56bSSepherosa Ziehau  *	0xe0 (224) +-------------+
6757a9c56bSSepherosa Ziehau  *		   |             | 13
6857a9c56bSSepherosa Ziehau  *	0xd0 (208) +-------------+
6957a9c56bSSepherosa Ziehau  *		   |             | 12
7057a9c56bSSepherosa Ziehau  *	0xc0 (192) +-------------+
7157a9c56bSSepherosa Ziehau  *		   |             | 11
7257a9c56bSSepherosa Ziehau  *	0xb0 (176) +-------------+
7357a9c56bSSepherosa Ziehau  *		   |             | 10
7457a9c56bSSepherosa Ziehau  *	0xa0 (160) +-------------+
7557a9c56bSSepherosa Ziehau  *		   |             |  9
7657a9c56bSSepherosa Ziehau  *	0x90 (144) +-------------+
7757a9c56bSSepherosa Ziehau  *		   |             |  8 (syscall at 0x80)
7857a9c56bSSepherosa Ziehau  *	0x80 (128) +-------------+
7957a9c56bSSepherosa Ziehau  *		   |             |  7
8057a9c56bSSepherosa Ziehau  *	0x70 (112) +-------------+
8157a9c56bSSepherosa Ziehau  *		   |             |  6
8257a9c56bSSepherosa Ziehau  *	0x60 (96)  +-------------+
8357a9c56bSSepherosa Ziehau  *		   |             |  5
8457a9c56bSSepherosa Ziehau  *	0x50 (80)  +-------------+
8557a9c56bSSepherosa Ziehau  *		   |             |  4
8657a9c56bSSepherosa Ziehau  *	0x40 (64)  +-------------+
8757a9c56bSSepherosa Ziehau  *		   |             |  3
8857a9c56bSSepherosa Ziehau  *	0x30 (48)  +-------------+
8957a9c56bSSepherosa Ziehau  *		   |             |  2 (hardware INTs)
9057a9c56bSSepherosa Ziehau  *	0x20 (32)  +-------------+
9157a9c56bSSepherosa Ziehau  *		   |             |  1 (exceptions, traps, etc.)
9257a9c56bSSepherosa Ziehau  *	0x10 (16)  +-------------+
9357a9c56bSSepherosa Ziehau  *		   |             |  0 (exceptions, traps, etc.)
9457a9c56bSSepherosa Ziehau  *	0x00 (0)   +-------------+
9557a9c56bSSepherosa Ziehau  */
9657a9c56bSSepherosa Ziehau #define TPR_STEP		0x10
9757a9c56bSSepherosa Ziehau 
9857a9c56bSSepherosa Ziehau /* Local APIC Task Priority Register */
9957a9c56bSSepherosa Ziehau #define TPR_IPI			(IDT_OFFSET_IPI - 1)
10057a9c56bSSepherosa Ziehau 
10157a9c56bSSepherosa Ziehau 
10257a9c56bSSepherosa Ziehau /*
10357a9c56bSSepherosa Ziehau  * IPI group1
10457a9c56bSSepherosa Ziehau  */
10557a9c56bSSepherosa Ziehau #define IDT_OFFSET_IPIG1	IDT_OFFSET_IPI
10657a9c56bSSepherosa Ziehau 
10757a9c56bSSepherosa Ziehau /* TLB shootdowns */
10857a9c56bSSepherosa Ziehau #define XINVLTLB_OFFSET		(IDT_OFFSET_IPIG1 + 0)
10957a9c56bSSepherosa Ziehau 
11057a9c56bSSepherosa Ziehau /* IPI group1 1: unused (was inter-cpu clock handling) */
11157a9c56bSSepherosa Ziehau /* IPI group1 2: unused (was inter-cpu rendezvous) */
11257a9c56bSSepherosa Ziehau 
11357a9c56bSSepherosa Ziehau /* IPIQ rendezvous */
11457a9c56bSSepherosa Ziehau #define XIPIQ_OFFSET		(IDT_OFFSET_IPIG1 + 3)
11557a9c56bSSepherosa Ziehau 
11657a9c56bSSepherosa Ziehau /* TIMER rendezvous */
11757a9c56bSSepherosa Ziehau #define XTIMER_OFFSET		(IDT_OFFSET_IPIG1 + 4)
11857a9c56bSSepherosa Ziehau 
11957a9c56bSSepherosa Ziehau /* IPI group1 5 ~ 15: unused */
12057a9c56bSSepherosa Ziehau 
12157a9c56bSSepherosa Ziehau 
12257a9c56bSSepherosa Ziehau /*
12357a9c56bSSepherosa Ziehau  * IPI group2
12457a9c56bSSepherosa Ziehau  */
12557a9c56bSSepherosa Ziehau #define IDT_OFFSET_IPIG2	(IDT_OFFSET_IPIG1 + TPR_STEP)
12657a9c56bSSepherosa Ziehau 
12757a9c56bSSepherosa Ziehau /* IPI to signal CPUs to stop and wait for another CPU to restart them */
12857a9c56bSSepherosa Ziehau #define XCPUSTOP_OFFSET		(IDT_OFFSET_IPIG2 + 0)
12957a9c56bSSepherosa Ziehau 
13057a9c56bSSepherosa Ziehau /* IPI group2 1 ~ 14: unused */
13157a9c56bSSepherosa Ziehau 
13257a9c56bSSepherosa Ziehau /* NOTE: this vector MUST be xxxx1111 */
13357a9c56bSSepherosa Ziehau #define XSPURIOUSINT_OFFSET	(IDT_OFFSET_IPIG2 + 15)
13457a9c56bSSepherosa Ziehau 
13557a9c56bSSepherosa Ziehau #ifndef	LOCORE
13657a9c56bSSepherosa Ziehau 
13757a9c56bSSepherosa Ziehau /*
13857a9c56bSSepherosa Ziehau  * Type of the first (asm) part of an interrupt handler.
13957a9c56bSSepherosa Ziehau  */
14057a9c56bSSepherosa Ziehau #ifndef JG_defined_inthand_t
14157a9c56bSSepherosa Ziehau #define JG_defined_inthand_t
14257a9c56bSSepherosa Ziehau typedef void inthand_t(u_int cs, u_int ef, u_int esp, u_int ss);
14357a9c56bSSepherosa Ziehau #endif
14457a9c56bSSepherosa Ziehau 
14557a9c56bSSepherosa Ziehau #define	IDTVEC(name)	__CONCAT(X,name)
14657a9c56bSSepherosa Ziehau 
1479a4bd8f3SSepherosa Ziehau inthand_t
1489a4bd8f3SSepherosa Ziehau 	Xspuriousint,	/* handle APIC "spurious INTs" */
1499a4bd8f3SSepherosa Ziehau 	Xtimer;		/* handle LAPIC timer INT */
1509a4bd8f3SSepherosa Ziehau 
1519a4bd8f3SSepherosa Ziehau #ifdef SMP
15257a9c56bSSepherosa Ziehau inthand_t
15357a9c56bSSepherosa Ziehau 	Xinvltlb,	/* TLB shootdowns */
15457a9c56bSSepherosa Ziehau 	Xcpustop,	/* CPU stops & waits for another CPU to restart it */
15557a9c56bSSepherosa Ziehau 	Xipiq;		/* handle lwkt_send_ipiq() requests */
1569a4bd8f3SSepherosa Ziehau #endif
15757a9c56bSSepherosa Ziehau 
15857a9c56bSSepherosa Ziehau #endif /* LOCORE */
15957a9c56bSSepherosa Ziehau 
16057a9c56bSSepherosa Ziehau #endif /* _KERNEL */
16157a9c56bSSepherosa Ziehau 
16257a9c56bSSepherosa Ziehau #endif /* !_ARCH_INTR_MACHDEP_H_ */
163