e6b447bc096c3941688544b7b1fa4b13886ce0e3
[barrelfish] / schemas / acpimadt.sks
1 /*
2   ACPI MADT Facts
3    
4   Copyright (c) 2017, ETH Zurich.
5   All rights reserved.
6   
7   This file is distributed under the terms in the attached LICENSE file.
8   If you do not find this file, copies can be found by writing to:
9   ETH Zurich D-INFK, Universit\"atstr. 6, CH-8092 Zurich. Attn: Systems Group.
10  */
11
12 schema acpimadt "ACPI Multiple APIC Description Table (MADT)" {
13     
14     section "Introduction" {
15
16     text "The ACPI interrupt model describes all interrupts for the entire "
17     text "system in a uniform interrupt model implementation. Supported  "
18     text "interrupt models include the PC-AT-compatible dual 8259 interrupt "
19     text "controller, for Intel processor-based systems, the Intel Advanced  "
20     text "programmable Interrupt Controller (APIC) and Intel Streamlined  "
21     text "Advanced Programmable Interrupt Controller (SAPIC), and, for ARM "
22     text "processor-based systems, the Generic Interrupt Controller (GIC) "
23
24     text "ACPI represents all interrupts as 'flat' values known as global  "
25     text "system interrupts. Therefore to support APICs, SAPICs or GICs on an " 
26     text "ACPI-enabled system, each used interrupt input must be mapped to the  "
27     text "global system interrupt value used by ACPI. "
28     };
29
30
31     /*
32      * MADT Subtables, correspond to Type in ACPI_SUBTABLE_HEADER
33      */
34     
35     /* 0: Processor Local APIC */
36
37     namespace local "x86 Local Namespace" {
38     
39         fact apic "Processor Local APIC" {
40             uint8   ProcessorId  "ACPI processor id";
41             uint8   Id           "Processor's local APIC id";
42             flag apic_flags  LapicFlags   "Local APIC flags";
43         };
44
45         flags apic_flags 32 "Local APIC Flags" {
46             enabled = 1 "If zero, this processor is unusable";
47         };
48
49         /* 4: Local APIC NMI */
50
51         fact apic_nmi "Local APIC NMI" {
52             uint8   ProcessorId "ACPI processor id";
53             uint16  IntiFlags   "Interrupt Flags";
54             uint8   Lint        "LINTn to which NMI is connected";
55         };
56         
57         
58         /* 5: Address Override */
59         
60         fact apic_override "Address Override" {
61             uint16                  Reserved;
62             uint64                  Address;            /* APIC physical address */
63         };
64         
65     
66         /* 7: Local Sapic */
67         
68         fact sapic "Local Sapic" {
69             uint8                   ProcessorId;        /* ACPI processor id */
70             uint8                   Id;                 /* SAPIC ID */
71             uint8                   Eid;                /* SAPIC EID */
72             uint8                   Reserved;
73             uint16                  Reserved2;
74             uint32                  LapicFlags;
75             uint32                  Uid;                /* Numeric UID - ACPI 3.0 */
76            /* char                    UidString[1]; */      /* String UID  - ACPI 3.0 */
77         };
78
79     
80         /* 9: Processor Local X2APIC (ACPI 4.0) */
81
82
83         fact x2apic "Processor Local X2APIC (ACPI 4.0)" {
84             uint16                  Reserved;
85             uint32                  LocalApicId;        /* Processor x2APIC ID  */
86             uint32                  LapicFlags;
87             uint32                  Uid;                /* ACPI processor UID */
88         };
89         
90         
91         /* 10: Local X2APIC NMI (ACPI 4.0) */
92         
93         fact x2apic_nmi "Local X2APIC NMI (ACPI 4.0)" {
94             uint16                  IntiFlags;
95             uint32                  Uid;                /* ACPI processor UID */
96             uint8                   Lint;               /* LINTn to which NMI is connected */
97         };        
98         
99     };
100
101     namespace io "x86 IO Nanespace" {
102         /* 1: IO APIC */
103
104         text "In an APIC implementation, there are one or more I/O APICs. Each I/O APIC has a series of interrupt inputs, referred to as INTIn, where the value of n is from 0 to the number of the last interrupt input on the I/O APIC"
105         
106         fact apic "I/O APIC Structure" {
107             uint8    Id              "The I/O APIC’s ID.";  
108             uint8    Reserved       "Reserved. Must be zero.";
109             uint32   Address        "The 32-bit unique physical address to access this I/O APIC";
110             uint32   GlobalIrqBase "The global system interrupt number where this I/O APIC’s interrupt inputs start.";        
111         };
112
113             /* 6: I/O Sapic */
114     
115         fact sapic "I/O Sapic" {
116             uint8                   Id;                 /* I/O SAPIC ID */
117             uint8                   Reserved;
118             uint32                  GlobalIrqBase;      /* Global interrupt for SAPIC start */
119             uint64                  Address;            /* SAPIC physical address */
120         };
121
122     };
123     
124     namespace interrupt "Interrupt Namespace" {
125
126         /* 2: Interrupt Override */
127         
128         fact override "Interrupt Override" {
129             uint8                   Bus;                /* 0 - ISA */
130             uint8                   SourceIrq;          /* Interrupt source (IRQ) */
131             uint32                  GlobalIrq;          /* Global system interrupt */
132             uint16                  IntiFlags;
133         };
134
135             /* 8: Platform Interrupt Source */
136         
137         fact source "Platform Interrupt Source " {
138             uint16                  IntiFlags;
139             uint8                   Type;               /* 1=PMI, 2=INIT, 3=corrected */
140             uint8                   Id;                 /* Processor ID */
141             uint8                   Eid;                /* Processor EID */
142             uint8                   IoSapicVector;      /* Vector value for PMI interrupts */
143             uint32                  GlobalIrq;          /* Global system interrupt */
144             uint32                  Flags;              /* Interrupt Source Flags */
145         };
146
147     };
148     
149     namespace nmi "NMI" {
150         /* 3: NMI Source */
151         
152         fact source "NMI Source" {
153             uint16                  IntiFlags;
154             uint32                  GlobalIrq;          /* Global system interrupt */
155         };  
156     };
157     
158
159     namespace generic "ARM Generic Interrupt Controllers" {
160  
161         /* 11: Generic Interrupt (ACPI 5.0 + ACPI 6.0 changes) */
162         
163         fact interrupt "Generic Interrupt (ACPI 5.0 + ACPI 6.0 changes)" {
164             uint32                  CpuInterfaceNumber;
165             uint32                  Uid;
166             uint32                  Flags;
167             uint32                  ParkingVersion;
168             uint32                  PerformanceInterrupt;
169             uint64                  ParkedAddress;
170             uint64                  BaseAddress;
171             uint64                  GicvBaseAddress;
172             uint64                  GichBaseAddress;
173             uint32                  VgicInterrupt;
174             uint64                  GicrBaseAddress;
175             uint64                  ArmMpidr;
176             uint8                   EfficiencyClass;
177         };
178         
179         
180         /* 12: Generic Distributor (ACPI 5.0 + ACPI 6.0 changes) */
181         
182         fact distributor "Generic Distributor (ACPI 5.0 + ACPI 6.0 changes)" {
183             uint32                  GicId;
184             uint64                  BaseAddress;
185             uint32                  GlobalIrqBase;
186             uint8                   Version;
187         };
188         
189            
190         
191         /* 13: Generic MSI Frame (ACPI 5.1) */
192         
193         fact msi_frame "Generic MSI Frame (ACPI 5.1)" {
194             uint32                  MsiFrameId;
195             uint64                  BaseAddress;
196             uint32                  Flags;
197             uint16                  SpiCount;
198             uint16                  SpiBase;
199         } ;
200         
201         /* Masks for Flags field above */
202         
203             
204         /* 14: Generic Redistributor (ACPI 5.1) */
205         
206         fact redistributor "Generic Redistributor (ACPI 5.1)" {
207             uint64                  BaseAddress;
208             uint32                  Length;
209         } ;
210         
211         
212         /* 15: Generic Translator (ACPI 6.0) */
213         
214         fact translator "Generic Translator (ACPI 6.0)" {
215             uint32                  TranslationId;
216             uint64                  BaseAddress;
217         } ;
218     
219     };
220 };