source: mainline/genarch/include/acpi/madt.h@ 9149135

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

SMP cleanup continued.
Add nice type for IO APIC ID register.
Replace some magic numbers with more descriptive macros.

  • Property mode set to 100644
File size: 3.8 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#ifndef __MADT_H__
30#define __MADT_H__
31
32#include <genarch/acpi/acpi.h>
33#include <arch/smp/apic.h>
34#include <arch/smp/smp.h>
35
36#define MADT_L_APIC 0
37#define MADT_IO_APIC 1
38#define MADT_INTR_SRC_OVRD 2
39#define MADT_NMI_SRC 3
40#define MADT_L_APIC_NMI 4
41#define MADT_L_APIC_ADDR_OVRD 5
42#define MADT_IO_SAPIC 6
43#define MADT_L_SAPIC 7
44#define MADT_PLATFORM_INTR_SRC 8
45#define MADT_RESERVED_SKIP_BEGIN 9
46#define MADT_RESERVED_SKIP_END 127
47#define MADT_RESERVED_OEM_BEGIN 128
48
49struct madt_apic_header {
50 __u8 type;
51 __u8 length;
52} __attribute__ ((packed));
53
54
55/* Multiple APIC Description Table */
56struct acpi_madt {
57 struct acpi_sdt_header header;
58 __u32 l_apic_address;
59 __u32 flags;
60 struct madt_apic_header apic_header[];
61} __attribute__ ((packed));
62
63struct madt_l_apic {
64 struct madt_apic_header header;
65 __u8 acpi_id;
66 __u8 apic_id;
67 __u32 flags;
68} __attribute__ ((packed));
69
70struct madt_io_apic {
71 struct madt_apic_header header;
72 __u8 io_apic_id;
73 __u8 reserved;
74 __u32 io_apic_address;
75 __u32 global_intr_base;
76} __attribute__ ((packed));
77
78struct madt_intr_src_ovrd {
79 struct madt_apic_header header;
80 __u8 bus;
81 __u8 source;
82 __u32 global_int;
83 __u16 flags;
84} __attribute__ ((packed));
85
86struct madt_nmi_src {
87 struct madt_apic_header header;
88 __u16 flags;
89 __u32 global_intr;
90} __attribute__ ((packed));
91
92struct madt_l_apic_nmi {
93 struct madt_apic_header header;
94 __u8 acpi_id;
95 __u16 flags;
96 __u8 l_apic_lint;
97} __attribute__ ((packed));
98
99struct madt_l_apic_addr_ovrd {
100 struct madt_apic_header header;
101 __u16 reserved;
102 __u64 l_apic_address;
103} __attribute__ ((packed));
104
105struct madt_io_sapic {
106 struct madt_apic_header header;
107 __u8 io_apic_id;
108 __u8 reserved;
109 __u32 global_intr_base;
110 __u64 io_apic_address;
111} __attribute__ ((packed));
112
113struct madt_l_sapic {
114 struct madt_apic_header header;
115 __u8 acpi_id;
116 __u8 sapic_id;
117 __u8 sapic_eid;
118 __u8 reserved[3];
119 __u32 flags;
120 __u32 acpi_processor_uid_value;
121 __u8 acpi_processor_uid_str[1];
122} __attribute__ ((packed));
123
124struct madt_platform_intr_src {
125 struct madt_apic_header header;
126 __u16 flags;
127 __u8 intr_type;
128 __u8 processor_id;
129 __u8 processor_eid;
130 __u8 io_sapic_vector;
131 __u32 global_intr;
132 __u32 platform_intr_src_flags;
133} __attribute__ ((packed));
134
135extern struct acpi_madt *acpi_madt;
136extern struct smp_config_operations madt_config_operations;
137
138extern void acpi_madt_parse(void);
139
140#endif /* __MADT_H__ */
Note: See TracBrowser for help on using the repository browser.