source: mainline/kernel/genarch/include/acpi/madt.h@ 86018c1

lfn serial ticket/834-toolchain-update topic/msim-upgrade topic/simplify-dev-export
Last change on this file since 86018c1 was df4ed85, checked in by Jakub Jermar <jakub@…>, 18 years ago

© versus ©

  • Property mode set to 100644
File size: 3.9 KB
Line 
1/*
2 * Copyright (c) 2005 Jakub Jermar
3 * All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
7 * are met:
8 *
9 * - Redistributions of source code must retain the above copyright
10 * notice, this list of conditions and the following disclaimer.
11 * - Redistributions in binary form must reproduce the above copyright
12 * notice, this list of conditions and the following disclaimer in the
13 * documentation and/or other materials provided with the distribution.
14 * - The name of the author may not be used to endorse or promote products
15 * derived from this software without specific prior written permission.
16 *
17 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
18 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
19 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
20 * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
21 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
22 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
23 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
24 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
26 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27 */
28
29/** @addtogroup genarch
30 * @{
31 */
32/** @file
33 */
34
35#ifndef KERN_MADT_H_
36#define KERN_MADT_H_
37
38#include <genarch/acpi/acpi.h>
39#include <arch/smp/apic.h>
40#include <arch/smp/smp.h>
41
42#define MADT_L_APIC 0
43#define MADT_IO_APIC 1
44#define MADT_INTR_SRC_OVRD 2
45#define MADT_NMI_SRC 3
46#define MADT_L_APIC_NMI 4
47#define MADT_L_APIC_ADDR_OVRD 5
48#define MADT_IO_SAPIC 6
49#define MADT_L_SAPIC 7
50#define MADT_PLATFORM_INTR_SRC 8
51#define MADT_RESERVED_SKIP_BEGIN 9
52#define MADT_RESERVED_SKIP_END 127
53#define MADT_RESERVED_OEM_BEGIN 128
54
55struct madt_apic_header {
56 uint8_t type;
57 uint8_t length;
58} __attribute__ ((packed));
59
60
61/* Multiple APIC Description Table */
62struct acpi_madt {
63 struct acpi_sdt_header header;
64 uint32_t l_apic_address;
65 uint32_t flags;
66 struct madt_apic_header apic_header[];
67} __attribute__ ((packed));
68
69struct madt_l_apic {
70 struct madt_apic_header header;
71 uint8_t acpi_id;
72 uint8_t apic_id;
73 uint32_t flags;
74} __attribute__ ((packed));
75
76struct madt_io_apic {
77 struct madt_apic_header header;
78 uint8_t io_apic_id;
79 uint8_t reserved;
80 uint32_t io_apic_address;
81 uint32_t global_intr_base;
82} __attribute__ ((packed));
83
84struct madt_intr_src_ovrd {
85 struct madt_apic_header header;
86 uint8_t bus;
87 uint8_t source;
88 uint32_t global_int;
89 uint16_t flags;
90} __attribute__ ((packed));
91
92struct madt_nmi_src {
93 struct madt_apic_header header;
94 uint16_t flags;
95 uint32_t global_intr;
96} __attribute__ ((packed));
97
98struct madt_l_apic_nmi {
99 struct madt_apic_header header;
100 uint8_t acpi_id;
101 uint16_t flags;
102 uint8_t l_apic_lint;
103} __attribute__ ((packed));
104
105struct madt_l_apic_addr_ovrd {
106 struct madt_apic_header header;
107 uint16_t reserved;
108 uint64_t l_apic_address;
109} __attribute__ ((packed));
110
111struct madt_io_sapic {
112 struct madt_apic_header header;
113 uint8_t io_apic_id;
114 uint8_t reserved;
115 uint32_t global_intr_base;
116 uint64_t io_apic_address;
117} __attribute__ ((packed));
118
119struct madt_l_sapic {
120 struct madt_apic_header header;
121 uint8_t acpi_id;
122 uint8_t sapic_id;
123 uint8_t sapic_eid;
124 uint8_t reserved[3];
125 uint32_t flags;
126 uint32_t acpi_processor_uid_value;
127 uint8_t acpi_processor_uid_str[1];
128} __attribute__ ((packed));
129
130struct madt_platform_intr_src {
131 struct madt_apic_header header;
132 uint16_t flags;
133 uint8_t intr_type;
134 uint8_t processor_id;
135 uint8_t processor_eid;
136 uint8_t io_sapic_vector;
137 uint32_t global_intr;
138 uint32_t platform_intr_src_flags;
139} __attribute__ ((packed));
140
141extern struct acpi_madt *acpi_madt;
142extern struct smp_config_operations madt_config_operations;
143
144extern void acpi_madt_parse(void);
145
146#endif /* KERN_MADT_H_ */
147
148/** @}
149 */
Note: See TracBrowser for help on using the repository browser.