xref: /openbsd-src/sys/arch/amd64/include/mpbiosreg.h (revision 9bec9e437814d912a96fbd6178318d8771001434)
1*9bec9e43Sjsg /*	$OpenBSD: mpbiosreg.h,v 1.5 2023/04/10 04:21:20 jsg Exp $	*/
2f5df1827Smickey /* 	$NetBSD: mpbiosreg.h,v 1.3 2003/03/04 23:27:32 fvdl Exp $ */
3f5df1827Smickey 
4f5df1827Smickey /*-
5f5df1827Smickey  * Copyright (c) 2000 The NetBSD Foundation, Inc.
6f5df1827Smickey  * All rights reserved.
7f5df1827Smickey  *
8f5df1827Smickey  * This code is derived from software contributed to The NetBSD Foundation
9f5df1827Smickey  * by RedBack Networks Inc.
10f5df1827Smickey  *
11f5df1827Smickey  * Author: Bill Sommerfeld
12f5df1827Smickey  *
13f5df1827Smickey  * Redistribution and use in source and binary forms, with or without
14f5df1827Smickey  * modification, are permitted provided that the following conditions
15f5df1827Smickey  * are met:
16f5df1827Smickey  * 1. Redistributions of source code must retain the above copyright
17f5df1827Smickey  *    notice, this list of conditions and the following disclaimer.
18f5df1827Smickey  * 2. Redistributions in binary form must reproduce the above copyright
19f5df1827Smickey  *    notice, this list of conditions and the following disclaimer in the
20f5df1827Smickey  *    documentation and/or other materials provided with the distribution.
21f5df1827Smickey  *
22f5df1827Smickey  * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
23f5df1827Smickey  * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
24f5df1827Smickey  * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
25f5df1827Smickey  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
26f5df1827Smickey  * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
27f5df1827Smickey  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
28f5df1827Smickey  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
29f5df1827Smickey  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
30f5df1827Smickey  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
31f5df1827Smickey  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
32f5df1827Smickey  * POSSIBILITY OF SUCH DAMAGE.
33f5df1827Smickey  */
34f5df1827Smickey 
352fa72412Spirofti #ifndef _MACHINE_MPBIOSREG_H_
362fa72412Spirofti #define _MACHINE_MPBIOSREG_H_
37f5df1827Smickey 
38f5df1827Smickey #define BIOS_BASE		(0xf0000)
39f5df1827Smickey #define BIOS_SIZE		(0x10000)
40f5df1827Smickey #define BIOS_COUNT		(BIOS_SIZE)
41f5df1827Smickey 
42f5df1827Smickey /*
43f5df1827Smickey  * Multiprocessor config table entry types.
44f5df1827Smickey  */
45f5df1827Smickey 
46f5df1827Smickey #define MPS_MCT_CPU	0
47f5df1827Smickey #define MPS_MCT_BUS	1
48f5df1827Smickey #define MPS_MCT_IOAPIC	2
49f5df1827Smickey #define MPS_MCT_IOINT	3
50f5df1827Smickey #define MPS_MCT_LINT	4
51f5df1827Smickey 
52f5df1827Smickey #define MPS_MCT_NTYPES	5
53f5df1827Smickey 
542b8325a4Skettenis /*
55*9bec9e43Sjsg  * Interrupt types
562b8325a4Skettenis  */
572b8325a4Skettenis 
582b8325a4Skettenis #define MPS_INTTYPE_INT		0
592b8325a4Skettenis #define MPS_INTTYPE_NMI		1
602b8325a4Skettenis #define MPS_INTTYPE_SMI		2
612b8325a4Skettenis #define MPS_INTTYPE_ExtINT	3
622b8325a4Skettenis 
632b8325a4Skettenis #define MPS_INTPO_DEF		0
642b8325a4Skettenis #define MPS_INTPO_ACTHI		1
652b8325a4Skettenis #define MPS_INTPO_ACTLO		3
662b8325a4Skettenis #define MPS_INTPO_SHIFT		0
672b8325a4Skettenis #define MPS_INTPO_MASK		3
682b8325a4Skettenis 
692b8325a4Skettenis #define MPS_INTTR_DEF		0
702b8325a4Skettenis #define MPS_INTTR_EDGE		1
712b8325a4Skettenis #define MPS_INTTR_LEVEL		3
722b8325a4Skettenis #define MPS_INTTR_SHIFT		2
732b8325a4Skettenis #define MPS_INTTR_MASK		3
742b8325a4Skettenis 
752b8325a4Skettenis #define MPS_INT(p,t) \
762b8325a4Skettenis     ((((p) & MPS_INTPO_MASK) << MPS_INTPO_SHIFT) | \
772b8325a4Skettenis      (((t) & MPS_INTTR_MASK) << MPS_INTTR_SHIFT))
782b8325a4Skettenis 
79f5df1827Smickey /* MP Floating Pointer Structure */
80f5df1827Smickey struct mpbios_fps {
81f5df1827Smickey 	u_int32_t	signature;
82f5df1827Smickey /* string defined by the Intel MP Spec as identifying the MP table */
83f5df1827Smickey #define MP_FP_SIG		0x5f504d5f	/* _MP_ */
84f5df1827Smickey 
85f5df1827Smickey 	u_int32_t 	pap;
86f5df1827Smickey 	u_int8_t  	length;
87f5df1827Smickey 	u_int8_t  	spec_rev;
88f5df1827Smickey 	u_int8_t  	checksum;
89f5df1827Smickey 	u_int8_t  	mpfb1;	/* system configuration */
90f5df1827Smickey 	u_int8_t  	mpfb2;	/* flags */
91f5df1827Smickey #define MPFPS_FLAG_IMCR		0x80	/* IMCR present */
92f5df1827Smickey 	u_int8_t  	mpfb3;	/* unused */
93f5df1827Smickey 	u_int8_t  	mpfb4;	/* unused */
94f5df1827Smickey 	u_int8_t  	mpfb5;	/* unused */
95f5df1827Smickey };
96f5df1827Smickey 
97f5df1827Smickey /* MP Configuration Table Header */
98f5df1827Smickey struct mpbios_cth {
99f5df1827Smickey 	u_int32_t	signature;
100f5df1827Smickey #define MP_CT_SIG		0x504d4350 	/* PCMP */
101f5df1827Smickey 
102f5df1827Smickey 	u_int16_t 	base_len;
103f5df1827Smickey 	u_int8_t  	spec_rev;
104f5df1827Smickey 	u_int8_t  	checksum;
105f5df1827Smickey 	u_int8_t  	oem_id[8];
106f5df1827Smickey 	u_int8_t  	product_id[12];
107f5df1827Smickey 	u_int32_t	oem_table_pointer;
108f5df1827Smickey 	u_int16_t 	oem_table_size;
109f5df1827Smickey 	u_int16_t 	entry_count;
110f5df1827Smickey 	u_int32_t	apic_address;
111f5df1827Smickey 	u_int16_t	ext_len;
112f5df1827Smickey 	u_int8_t  	ext_cksum;
113f5df1827Smickey 	u_int8_t  	reserved;
114f5df1827Smickey };
115f5df1827Smickey 
116f5df1827Smickey struct mpbios_proc {
117f5df1827Smickey 	u_int8_t  type;
118f5df1827Smickey 	u_int8_t  apic_id;
119f5df1827Smickey 	u_int8_t  apic_version;
120f5df1827Smickey 	u_int8_t  cpu_flags;
121f5df1827Smickey #define PROCENTRY_FLAG_EN	0x01
122f5df1827Smickey #define PROCENTRY_FLAG_BP	0x02
123f5df1827Smickey 	u_int32_t  cpu_signature;
124f5df1827Smickey 	u_int32_t  feature_flags;
125f5df1827Smickey 	u_int32_t  reserved1;
126f5df1827Smickey 	u_int32_t  reserved2;
127f5df1827Smickey };
128f5df1827Smickey 
129f5df1827Smickey struct mpbios_bus {
130f5df1827Smickey 	u_int8_t  type;
131f5df1827Smickey 	u_int8_t  bus_id;
132f5df1827Smickey 	char    bus_type[6];
133f5df1827Smickey };
134f5df1827Smickey 
135f5df1827Smickey struct mpbios_ioapic {
136f5df1827Smickey 	u_int8_t  type;
137f5df1827Smickey 	u_int8_t  apic_id;
138f5df1827Smickey 	u_int8_t  apic_version;
139f5df1827Smickey 	u_int8_t  apic_flags;
140f5df1827Smickey #define IOAPICENTRY_FLAG_EN	0x01
141f5df1827Smickey 	u_int32_t   apic_address;
142f5df1827Smickey };
143f5df1827Smickey 
144f5df1827Smickey struct mpbios_int {
145f5df1827Smickey 	u_int8_t  type;
146f5df1827Smickey 	u_int8_t  int_type;
147f5df1827Smickey 	u_int16_t int_flags;
148f5df1827Smickey 	u_int8_t  src_bus_id;
149f5df1827Smickey 	u_int8_t  src_bus_irq;
150f5df1827Smickey 	u_int8_t  dst_apic_id;
151f5df1827Smickey #define MPS_ALL_APICS	0xff
152f5df1827Smickey 	u_int8_t  dst_apic_int;
153f5df1827Smickey };
154f5df1827Smickey 
155f5df1827Smickey 
1562fa72412Spirofti #endif /* !_MACHINE_MPBIOSREG_H_ */
157