1 /******************************************************************************
2  *
3  * Name: actables.h - ACPI table management
4  *
5  *****************************************************************************/
6 
7 /*
8  * Copyright (C) 2000 - 2017, Intel Corp.
9  * All rights reserved.
10  *
11  * Redistribution and use in source and binary forms, with or without
12  * modification, are permitted provided that the following conditions
13  * are met:
14  * 1. Redistributions of source code must retain the above copyright
15  *    notice, this list of conditions, and the following disclaimer,
16  *    without modification.
17  * 2. Redistributions in binary form must reproduce at minimum a disclaimer
18  *    substantially similar to the "NO WARRANTY" disclaimer below
19  *    ("Disclaimer") and any redistribution must be conditioned upon
20  *    including a substantially similar Disclaimer requirement for further
21  *    binary redistribution.
22  * 3. Neither the names of the above-listed copyright holders nor the names
23  *    of any contributors may be used to endorse or promote products derived
24  *    from this software without specific prior written permission.
25  *
26  * Alternatively, this software may be distributed under the terms of the
27  * GNU General Public License ("GPL") version 2 as published by the Free
28  * Software Foundation.
29  *
30  * NO WARRANTY
31  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
32  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
33  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR
34  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
35  * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
36  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
37  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
38  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
39  * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
40  * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
41  * POSSIBILITY OF SUCH DAMAGES.
42  */
43 
44 #ifndef __ACTABLES_H__
45 #define __ACTABLES_H__
46 
47 
48 ACPI_STATUS
49 AcpiAllocateRootTable (
50     UINT32                  InitialTableCount);
51 
52 /*
53  * tbxfroot - Root pointer utilities
54  */
55 UINT32
56 AcpiTbGetRsdpLength (
57     ACPI_TABLE_RSDP         *Rsdp);
58 
59 ACPI_STATUS
60 AcpiTbValidateRsdp (
61     ACPI_TABLE_RSDP         *Rsdp);
62 
63 UINT8 *
64 AcpiTbScanMemoryForRsdp (
65     UINT8                   *StartAddress,
66     UINT32                  Length);
67 
68 
69 /*
70  * tbdata - table data structure management
71  */
72 ACPI_STATUS
73 AcpiTbGetNextTableDescriptor (
74     UINT32                  *TableIndex,
75     ACPI_TABLE_DESC         **TableDesc);
76 
77 void
78 AcpiTbInitTableDescriptor (
79     ACPI_TABLE_DESC         *TableDesc,
80     ACPI_PHYSICAL_ADDRESS   Address,
81     UINT8                   Flags,
82     ACPI_TABLE_HEADER       *Table);
83 
84 ACPI_STATUS
85 AcpiTbAcquireTempTable (
86     ACPI_TABLE_DESC         *TableDesc,
87     ACPI_PHYSICAL_ADDRESS   Address,
88     UINT8                   Flags);
89 
90 void
91 AcpiTbReleaseTempTable (
92     ACPI_TABLE_DESC         *TableDesc);
93 
94 ACPI_STATUS
95 AcpiTbValidateTempTable (
96     ACPI_TABLE_DESC         *TableDesc);
97 
98 ACPI_STATUS
99 AcpiTbVerifyTempTable (
100     ACPI_TABLE_DESC         *TableDesc,
101     char                    *Signature,
102     UINT32                  *TableIndex);
103 
104 BOOLEAN
105 AcpiTbIsTableLoaded (
106     UINT32                  TableIndex);
107 
108 void
109 AcpiTbSetTableLoadedFlag (
110     UINT32                  TableIndex,
111     BOOLEAN                 IsLoaded);
112 
113 
114 /*
115  * tbfadt - FADT parse/convert/validate
116  */
117 void
118 AcpiTbParseFadt (
119     void);
120 
121 void
122 AcpiTbCreateLocalFadt (
123     ACPI_TABLE_HEADER       *Table,
124     UINT32                  Length);
125 
126 
127 /*
128  * tbfind - find ACPI table
129  */
130 ACPI_STATUS
131 AcpiTbFindTable (
132     char                    *Signature,
133     char                    *OemId,
134     char                    *OemTableId,
135     UINT32                  *TableIndex);
136 
137 
138 /*
139  * tbinstal - Table removal and deletion
140  */
141 ACPI_STATUS
142 AcpiTbResizeRootTableList (
143     void);
144 
145 ACPI_STATUS
146 AcpiTbValidateTable (
147     ACPI_TABLE_DESC         *TableDesc);
148 
149 void
150 AcpiTbInvalidateTable (
151     ACPI_TABLE_DESC         *TableDesc);
152 
153 void
154 AcpiTbOverrideTable (
155     ACPI_TABLE_DESC         *OldTableDesc);
156 
157 ACPI_STATUS
158 AcpiTbAcquireTable (
159     ACPI_TABLE_DESC         *TableDesc,
160     ACPI_TABLE_HEADER       **TablePtr,
161     UINT32                  *TableLength,
162     UINT8                   *TableFlags);
163 
164 void
165 AcpiTbReleaseTable (
166     ACPI_TABLE_HEADER       *Table,
167     UINT32                  TableLength,
168     UINT8                   TableFlags);
169 
170 ACPI_STATUS
171 AcpiTbInstallStandardTable (
172     ACPI_PHYSICAL_ADDRESS   Address,
173     UINT8                   Flags,
174     BOOLEAN                 Reload,
175     BOOLEAN                 Override,
176     UINT32                  *TableIndex);
177 
178 void
179 AcpiTbUninstallTable (
180     ACPI_TABLE_DESC        *TableDesc);
181 
182 ACPI_STATUS
183 AcpiTbLoadTable (
184     UINT32                  TableIndex,
185     ACPI_NAMESPACE_NODE     *ParentNode);
186 
187 ACPI_STATUS
188 AcpiTbInstallAndLoadTable (
189     ACPI_PHYSICAL_ADDRESS   Address,
190     UINT8                   Flags,
191     BOOLEAN                 Override,
192     UINT32                  *TableIndex);
193 
194 ACPI_STATUS
195 AcpiTbUnloadTable (
196     UINT32                  TableIndex);
197 
198 void
199 AcpiTbNotifyTable (
200     UINT32                          Event,
201     void                            *Table);
202 
203 void
204 AcpiTbTerminate (
205     void);
206 
207 ACPI_STATUS
208 AcpiTbDeleteNamespaceByOwner (
209     UINT32                  TableIndex);
210 
211 ACPI_STATUS
212 AcpiTbAllocateOwnerId (
213     UINT32                  TableIndex);
214 
215 ACPI_STATUS
216 AcpiTbReleaseOwnerId (
217     UINT32                  TableIndex);
218 
219 ACPI_STATUS
220 AcpiTbGetOwnerId (
221     UINT32                  TableIndex,
222     ACPI_OWNER_ID           *OwnerId);
223 
224 
225 /*
226  * tbutils - table manager utilities
227  */
228 ACPI_STATUS
229 AcpiTbInitializeFacs (
230     void);
231 
232 void
233 AcpiTbPrintTableHeader(
234     ACPI_PHYSICAL_ADDRESS   Address,
235     ACPI_TABLE_HEADER       *Header);
236 
237 UINT8
238 AcpiTbChecksum (
239     UINT8                   *Buffer,
240     UINT32                  Length);
241 
242 ACPI_STATUS
243 AcpiTbVerifyChecksum (
244     ACPI_TABLE_HEADER       *Table,
245     UINT32                  Length);
246 
247 void
248 AcpiTbCheckDsdtHeader (
249     void);
250 
251 ACPI_TABLE_HEADER *
252 AcpiTbCopyDsdt (
253     UINT32                  TableIndex);
254 
255 void
256 AcpiTbInstallTableWithOverride (
257     ACPI_TABLE_DESC         *NewTableDesc,
258     BOOLEAN                 Override,
259     UINT32                  *TableIndex);
260 
261 ACPI_STATUS
262 AcpiTbParseRootTable (
263     ACPI_PHYSICAL_ADDRESS   RsdpAddress);
264 
265 ACPI_STATUS
266 AcpiTbGetTable (
267     ACPI_TABLE_DESC        *TableDesc,
268     ACPI_TABLE_HEADER      **OutTable);
269 
270 void
271 AcpiTbPutTable (
272     ACPI_TABLE_DESC        *TableDesc);
273 
274 
275 /*
276  * tbxfload
277  */
278 ACPI_STATUS
279 AcpiTbLoadNamespace (
280     void);
281 
282 #endif /* __ACTABLES_H__ */
283