1 /****************************************************************************** 2 * 3 * Module Name: dtcompiler.h - header for data table compiler 4 * 5 *****************************************************************************/ 6 7 /* 8 * Copyright (C) 2000 - 2011, 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 #define __DTCOMPILER_H__ 45 46 #ifndef _DTCOMPILER 47 #define _DTCOMPILER 48 49 #include <stdio.h> 50 #include <contrib/dev/acpica/include/acdisasm.h> 51 52 53 #undef DT_EXTERN 54 55 #ifdef _DECLARE_DT_GLOBALS 56 #define DT_EXTERN 57 #define DT_INIT_GLOBAL(a,b) (a)=(b) 58 #else 59 #define DT_EXTERN extern 60 #define DT_INIT_GLOBAL(a,b) (a) 61 #endif 62 63 64 /* Types for individual fields (one per input line) */ 65 66 #define DT_FIELD_TYPE_STRING 0 67 #define DT_FIELD_TYPE_INTEGER 1 68 #define DT_FIELD_TYPE_BUFFER 2 69 #define DT_FIELD_TYPE_PCI_PATH 3 70 #define DT_FIELD_TYPE_FLAG 4 71 #define DT_FIELD_TYPE_FLAGS_INTEGER 5 72 #define DT_FIELD_TYPE_INLINE_SUBTABLE 6 73 #define DT_FIELD_TYPE_UUID 7 74 #define DT_FIELD_TYPE_UNICODE 8 75 #define DT_FIELD_TYPE_DEVICE_PATH 9 76 77 78 /* 79 * Structure used for each individual field within an ACPI table 80 */ 81 typedef struct dt_field 82 { 83 char *Name; 84 char *Value; 85 struct dt_field *Next; 86 UINT32 Line; /* Line number for this field */ 87 UINT32 ByteOffset; /* Offset in source file for field */ 88 UINT32 NameColumn; /* Start column for field name */ 89 UINT32 Column; /* Start column for field value */ 90 UINT8 Flags; 91 92 } DT_FIELD; 93 94 /* Flags for above */ 95 96 #define DT_FIELD_NOT_ALLOCATED 1 97 98 99 /* 100 * Structure used for individual subtables within an ACPI table 101 */ 102 typedef struct dt_subtable 103 { 104 struct dt_subtable *Parent; 105 struct dt_subtable *Child; 106 struct dt_subtable *Peer; 107 struct dt_subtable *StackTop; 108 UINT8 *Buffer; 109 UINT8 *LengthField; 110 UINT32 Length; 111 UINT32 TotalLength; 112 UINT32 SizeOfLengthField; 113 UINT8 Flags; 114 115 } DT_SUBTABLE; 116 117 118 /* 119 * Globals 120 */ 121 122 /* List of all field names and values from the input source */ 123 124 DT_EXTERN DT_FIELD DT_INIT_GLOBAL (*Gbl_FieldList, NULL); 125 126 /* List of all compiled tables and subtables */ 127 128 DT_EXTERN DT_SUBTABLE DT_INIT_GLOBAL (*Gbl_RootTable, NULL); 129 130 /* Stack for subtables */ 131 132 DT_EXTERN DT_SUBTABLE DT_INIT_GLOBAL (*Gbl_SubtableStack, NULL); 133 134 135 /* dtcompiler - main module */ 136 137 ACPI_STATUS 138 DtCompileTable ( 139 DT_FIELD **Field, 140 ACPI_DMTABLE_INFO *Info, 141 DT_SUBTABLE **RetSubtable, 142 BOOLEAN Required); 143 144 145 /* dtio - binary and text input/output */ 146 147 DT_FIELD * 148 DtScanFile ( 149 FILE *Handle); 150 151 void 152 DtOutputBinary ( 153 DT_SUBTABLE *RootTable); 154 155 void 156 DtWriteFieldToListing ( 157 UINT8 *Buffer, 158 DT_FIELD *Field, 159 UINT32 Length); 160 161 void 162 DtWriteTableToListing ( 163 void); 164 165 166 /* dtsubtable - compile subtables */ 167 168 void 169 DtCreateSubtable ( 170 UINT8 *Buffer, 171 UINT32 Length, 172 DT_SUBTABLE **RetSubtable); 173 174 UINT32 175 DtGetSubtableLength ( 176 DT_FIELD *Field, 177 ACPI_DMTABLE_INFO *Info); 178 179 void 180 DtSetSubtableLength ( 181 DT_SUBTABLE *Subtable); 182 183 void 184 DtPushSubtable ( 185 DT_SUBTABLE *Subtable); 186 187 void 188 DtPopSubtable ( 189 void); 190 191 DT_SUBTABLE * 192 DtPeekSubtable ( 193 void); 194 195 void 196 DtInsertSubtable ( 197 DT_SUBTABLE *ParentTable, 198 DT_SUBTABLE *Subtable); 199 200 DT_SUBTABLE * 201 DtGetNextSubtable ( 202 DT_SUBTABLE *ParentTable, 203 DT_SUBTABLE *ChildTable); 204 205 DT_SUBTABLE * 206 DtGetParentSubtable ( 207 DT_SUBTABLE *Subtable); 208 209 210 /* dtfield - Compile individual fields within a table */ 211 212 void 213 DtCompileOneField ( 214 UINT8 *Buffer, 215 DT_FIELD *Field, 216 UINT32 ByteLength, 217 UINT8 Type, 218 UINT8 Flags); 219 220 void 221 DtCompileInteger ( 222 UINT8 *Buffer, 223 DT_FIELD *Field, 224 UINT32 ByteLength, 225 UINT8 Flags); 226 227 UINT32 228 DtCompileBuffer ( 229 UINT8 *Buffer, 230 char *Value, 231 DT_FIELD *Field, 232 UINT32 ByteLength); 233 234 void 235 DtCompileFlag ( 236 UINT8 *Buffer, 237 DT_FIELD *Field, 238 ACPI_DMTABLE_INFO *Info); 239 240 241 /* dtutils - Miscellaneous utilities */ 242 243 typedef 244 void (*DT_WALK_CALLBACK) ( 245 DT_SUBTABLE *Subtable, 246 void *Context, 247 void *ReturnValue); 248 249 void 250 DtWalkTableTree ( 251 DT_SUBTABLE *StartTable, 252 DT_WALK_CALLBACK UserFunction, 253 void *Context, 254 void *ReturnValue); 255 256 void 257 DtError ( 258 UINT8 Level, 259 UINT8 MessageId, 260 DT_FIELD *FieldObject, 261 char *ExtraMessage); 262 263 void 264 DtNameError ( 265 UINT8 Level, 266 UINT8 MessageId, 267 DT_FIELD *FieldObject, 268 char *ExtraMessage); 269 270 void 271 DtFatal ( 272 UINT8 MessageId, 273 DT_FIELD *FieldObject, 274 char *ExtraMessage); 275 276 ACPI_STATUS 277 DtStrtoul64 ( 278 char *String, 279 UINT64 *ReturnInteger); 280 281 UINT32 282 DtGetFileSize ( 283 FILE *Handle); 284 285 char* 286 DtGetFieldValue ( 287 DT_FIELD *Field, 288 char *Name); 289 290 UINT8 291 DtGetFieldType ( 292 ACPI_DMTABLE_INFO *Info); 293 294 UINT32 295 DtGetBufferLength ( 296 char *Buffer); 297 298 UINT32 299 DtGetFieldLength ( 300 DT_FIELD *Field, 301 ACPI_DMTABLE_INFO *Info); 302 303 void 304 DtSetTableChecksum ( 305 UINT8 *ChecksumPointer); 306 307 void 308 DtSetTableLength( 309 void); 310 311 void 312 DtFreeFieldList ( 313 void); 314 315 316 /* dttable - individual table compilation */ 317 318 ACPI_STATUS 319 DtCompileFacs ( 320 DT_FIELD **PFieldList); 321 322 ACPI_STATUS 323 DtCompileRsdp ( 324 DT_FIELD **PFieldList); 325 326 ACPI_STATUS 327 DtCompileAsf ( 328 void **PFieldList); 329 330 ACPI_STATUS 331 DtCompileCpep ( 332 void **PFieldList); 333 334 ACPI_STATUS 335 DtCompileDmar ( 336 void **PFieldList); 337 338 ACPI_STATUS 339 DtCompileEinj ( 340 void **PFieldList); 341 342 ACPI_STATUS 343 DtCompileErst ( 344 void **PFieldList); 345 346 ACPI_STATUS 347 DtCompileFadt ( 348 void **PFieldList); 349 350 ACPI_STATUS 351 DtCompileHest ( 352 void **PFieldList); 353 354 ACPI_STATUS 355 DtCompileIvrs ( 356 void **PFieldList); 357 358 ACPI_STATUS 359 DtCompileMadt ( 360 void **PFieldList); 361 362 ACPI_STATUS 363 DtCompileMcfg ( 364 void **PFieldList); 365 366 ACPI_STATUS 367 DtCompileMsct ( 368 void **PFieldList); 369 370 ACPI_STATUS 371 DtCompileRsdt ( 372 void **PFieldList); 373 374 ACPI_STATUS 375 DtCompileSlit ( 376 void **PFieldList); 377 378 ACPI_STATUS 379 DtCompileSrat ( 380 void **PFieldList); 381 382 ACPI_STATUS 383 DtCompileUefi ( 384 void **PFieldList); 385 386 ACPI_STATUS 387 DtCompileWdat ( 388 void **PFieldList); 389 390 ACPI_STATUS 391 DtCompileXsdt ( 392 void **PFieldList); 393 394 /* ACPI Table templates */ 395 396 extern const unsigned char TemplateAsf[]; 397 extern const unsigned char TemplateBoot[]; 398 extern const unsigned char TemplateBert[]; 399 extern const unsigned char TemplateCpep[]; 400 extern const unsigned char TemplateDbgp[]; 401 extern const unsigned char TemplateDmar[]; 402 extern const unsigned char TemplateEcdt[]; 403 extern const unsigned char TemplateEinj[]; 404 extern const unsigned char TemplateErst[]; 405 extern const unsigned char TemplateFadt[]; 406 extern const unsigned char TemplateHest[]; 407 extern const unsigned char TemplateHpet[]; 408 extern const unsigned char TemplateIvrs[]; 409 extern const unsigned char TemplateMadt[]; 410 extern const unsigned char TemplateMcfg[]; 411 extern const unsigned char TemplateMchi[]; 412 extern const unsigned char TemplateMsct[]; 413 extern const unsigned char TemplateRsdt[]; 414 extern const unsigned char TemplateSbst[]; 415 extern const unsigned char TemplateSlic[]; 416 extern const unsigned char TemplateSlit[]; 417 extern const unsigned char TemplateSpcr[]; 418 extern const unsigned char TemplateSpmi[]; 419 extern const unsigned char TemplateSrat[]; 420 extern const unsigned char TemplateTcpa[]; 421 extern const unsigned char TemplateUefi[]; 422 extern const unsigned char TemplateWaet[]; 423 extern const unsigned char TemplateWdat[]; 424 extern const unsigned char TemplateWddt[]; 425 extern const unsigned char TemplateWdrt[]; 426 extern const unsigned char TemplateXsdt[]; 427 428 #endif 429