#define __DTCOMPILER_H__
#ifndef _DTCOMPILER
#define _DTCOMPILER
#include "acdisasm.h"
#define ASL_FIELD_CACHE_SIZE 512
#define ASL_SUBTABLE_CACHE_SIZE 128
#undef DT_EXTERN
#ifdef _DECLARE_DT_GLOBALS
#define DT_EXTERN
#define DT_INIT_GLOBAL(a,b) (a)=(b)
#else
#define DT_EXTERN extern
#define DT_INIT_GLOBAL(a,b) (a)
#endif
#define DT_FIELD_TYPE_STRING 0
#define DT_FIELD_TYPE_INTEGER 1
#define DT_FIELD_TYPE_BUFFER 2
#define DT_FIELD_TYPE_PCI_PATH 3
#define DT_FIELD_TYPE_FLAG 4
#define DT_FIELD_TYPE_FLAGS_INTEGER 5
#define DT_FIELD_TYPE_INLINE_SUBTABLE 6
#define DT_FIELD_TYPE_UUID 7
#define DT_FIELD_TYPE_UNICODE 8
#define DT_FIELD_TYPE_DEVICE_PATH 9
#define DT_FIELD_TYPE_LABEL 10
typedef struct dt_field
{
char *Name;
char *Value;
UINT32 StringLength;
struct dt_field *Next;
struct dt_field *NextLabel;
UINT32 Line;
UINT32 ByteOffset;
UINT32 NameColumn;
UINT32 Column;
UINT32 TableOffset;
UINT8 Flags;
} DT_FIELD;
#define DT_FIELD_NOT_ALLOCATED 1
typedef struct dt_subtable
{
struct dt_subtable *Parent;
struct dt_subtable *Child;
struct dt_subtable *Peer;
struct dt_subtable *StackTop;
UINT8 *Buffer;
UINT8 *LengthField;
char *Name;
UINT32 Length;
UINT32 TotalLength;
UINT32 SizeOfLengthField;
UINT16 Depth;
UINT8 Flags;
} DT_SUBTABLE;
DT_EXTERN DT_FIELD DT_INIT_GLOBAL (*Gbl_FieldList, NULL);
DT_EXTERN DT_SUBTABLE DT_INIT_GLOBAL (*Gbl_RootTable, NULL);
DT_EXTERN DT_SUBTABLE DT_INIT_GLOBAL (*Gbl_SubtableStack, NULL);
DT_EXTERN DT_FIELD DT_INIT_GLOBAL (*Gbl_LabelList, NULL);
DT_EXTERN UINT32 DT_INIT_GLOBAL (Gbl_CurrentTableOffset, 0);
DT_EXTERN UINT32 DT_INIT_GLOBAL (Gbl_SubtableCount, 0);
DT_EXTERN ASL_CACHE_INFO DT_INIT_GLOBAL (*Gbl_SubtableCacheList, NULL);
DT_EXTERN DT_SUBTABLE DT_INIT_GLOBAL (*Gbl_SubtableCacheNext, NULL);
DT_EXTERN DT_SUBTABLE DT_INIT_GLOBAL (*Gbl_SubtableCacheLast, NULL);
DT_EXTERN UINT32 DT_INIT_GLOBAL (Gbl_FieldCount, 0);
DT_EXTERN ASL_CACHE_INFO DT_INIT_GLOBAL (*Gbl_FieldCacheList, NULL);
DT_EXTERN DT_FIELD DT_INIT_GLOBAL (*Gbl_FieldCacheNext, NULL);
DT_EXTERN DT_FIELD DT_INIT_GLOBAL (*Gbl_FieldCacheLast, NULL);
ACPI_STATUS
DtCompileTable (
DT_FIELD **Field,
ACPI_DMTABLE_INFO *Info,
DT_SUBTABLE **RetSubtable);
ACPI_STATUS
DtCompileTwoSubtables (
void **List,
ACPI_DMTABLE_INFO *TableInfo1,
ACPI_DMTABLE_INFO *TableInfo2);
ACPI_STATUS
DtCompilePadding (
UINT32 Length,
DT_SUBTABLE **RetSubtable);
UINT32
DtGetNextLine (
FILE *Handle,
UINT32 Flags);
#define DT_ALLOW_MULTILINE_QUOTES 0x01
DT_FIELD *
DtScanFile (
FILE *Handle);
void
DtOutputBinary (
DT_SUBTABLE *RootTable);
void
DtDumpSubtableList (
void);
void
DtDumpFieldList (
DT_FIELD *Field);
void
DtWriteFieldToListing (
UINT8 *Buffer,
DT_FIELD *Field,
UINT32 Length);
void
DtWriteTableToListing (
void);
void
DtCreateSubtable (
UINT8 *Buffer,
UINT32 Length,
DT_SUBTABLE **RetSubtable);
UINT32
DtGetSubtableLength (
DT_FIELD *Field,
ACPI_DMTABLE_INFO *Info);
void
DtSetSubtableLength (
DT_SUBTABLE *Subtable);
void
DtPushSubtable (
DT_SUBTABLE *Subtable);
void
DtPopSubtable (
void);
DT_SUBTABLE *
DtPeekSubtable (
void);
void
DtInsertSubtable (
DT_SUBTABLE *ParentTable,
DT_SUBTABLE *Subtable);
DT_SUBTABLE *
DtGetNextSubtable (
DT_SUBTABLE *ParentTable,
DT_SUBTABLE *ChildTable);
DT_SUBTABLE *
DtGetParentSubtable (
DT_SUBTABLE *Subtable);
ACPI_STATUS
DtResolveIntegerExpression (
DT_FIELD *Field,
UINT64 *ReturnValue);
UINT64
DtDoOperator (
UINT64 LeftValue,
UINT32 Operator,
UINT64 RightValue);
UINT64
DtResolveLabel (
char *LabelString);
void
DtDetectAllLabels (
DT_FIELD *FieldList);
void
DtCompileOneField (
UINT8 *Buffer,
DT_FIELD *Field,
UINT32 ByteLength,
UINT8 Type,
UINT8 Flags);
void
DtCompileInteger (
UINT8 *Buffer,
DT_FIELD *Field,
UINT32 ByteLength,
UINT8 Flags);
UINT32
DtCompileBuffer (
UINT8 *Buffer,
char *Value,
DT_FIELD *Field,
UINT32 ByteLength);
void
DtCompileFlag (
UINT8 *Buffer,
DT_FIELD *Field,
ACPI_DMTABLE_INFO *Info);
UINT64
DtEvaluateExpression (
char *ExprString);
int
DtInitLexer (
char *String);
void
DtTerminateLexer (
void);
char *
DtGetOpName (
UINT32 ParseOpcode);
typedef
void (*DT_WALK_CALLBACK) (
DT_SUBTABLE *Subtable,
void *Context,
void *ReturnValue);
void
DtWalkTableTree (
DT_SUBTABLE *StartTable,
DT_WALK_CALLBACK UserFunction,
void *Context,
void *ReturnValue);
void
DtError (
UINT8 Level,
UINT16 MessageId,
DT_FIELD *FieldObject,
char *ExtraMessage);
void
DtNameError (
UINT8 Level,
UINT16 MessageId,
DT_FIELD *FieldObject,
char *ExtraMessage);
void
DtFatal (
UINT16 MessageId,
DT_FIELD *FieldObject,
char *ExtraMessage);
UINT64
DtDoConstant (
char *String);
char*
DtGetFieldValue (
DT_FIELD *Field);
UINT8
DtGetFieldType (
ACPI_DMTABLE_INFO *Info);
UINT32
DtGetBufferLength (
char *Buffer);
UINT32
DtGetFieldLength (
DT_FIELD *Field,
ACPI_DMTABLE_INFO *Info);
void
DtSetTableChecksum (
UINT8 *ChecksumPointer);
void
DtSetTableLength(
void);
ACPI_STATUS
DtCompileFacs (
DT_FIELD **PFieldList);
ACPI_STATUS
DtCompileRsdp (
DT_FIELD **PFieldList);
ACPI_STATUS
DtCompileAsf (
void **PFieldList);
ACPI_STATUS
DtCompileCpep (
void **PFieldList);
ACPI_STATUS
DtCompileCsrt (
void **PFieldList);
ACPI_STATUS
DtCompileDbg2 (
void **PFieldList);
ACPI_STATUS
DtCompileDmar (
void **PFieldList);
ACPI_STATUS
DtCompileDrtm (
void **PFieldList);
ACPI_STATUS
DtCompileEinj (
void **PFieldList);
ACPI_STATUS
DtCompileErst (
void **PFieldList);
ACPI_STATUS
DtCompileFadt (
void **PFieldList);
ACPI_STATUS
DtCompileFpdt (
void **PFieldList);
ACPI_STATUS
DtCompileGtdt (
void **PFieldList);
ACPI_STATUS
DtCompileHest (
void **PFieldList);
ACPI_STATUS
DtCompileHmat (
void **PFieldList);
ACPI_STATUS
DtCompileIort (
void **PFieldList);
ACPI_STATUS
DtCompileIvrs (
void **PFieldList);
ACPI_STATUS
DtCompileLpit (
void **PFieldList);
ACPI_STATUS
DtCompileMadt (
void **PFieldList);
ACPI_STATUS
DtCompileMcfg (
void **PFieldList);
ACPI_STATUS
DtCompileMpst (
void **PFieldList);
ACPI_STATUS
DtCompileMsct (
void **PFieldList);
ACPI_STATUS
DtCompileMtmr (
void **PFieldList);
ACPI_STATUS
DtCompileNfit (
void **PFieldList);
ACPI_STATUS
DtCompilePcct (
void **PFieldList);
ACPI_STATUS
DtCompilePdtt (
void **PFieldList);
ACPI_STATUS
DtCompilePmtt (
void **PFieldList);
ACPI_STATUS
DtCompilePptt (
void **PFieldList);
ACPI_STATUS
DtCompileRsdt (
void **PFieldList);
ACPI_STATUS
DtCompileS3pt (
DT_FIELD **PFieldList);
ACPI_STATUS
DtCompileSdev (
void **PFieldList);
ACPI_STATUS
DtCompileSlic (
void **PFieldList);
ACPI_STATUS
DtCompileSlit (
void **PFieldList);
ACPI_STATUS
DtCompileSrat (
void **PFieldList);
ACPI_STATUS
DtCompileStao (
void **PFieldList);
ACPI_STATUS
DtCompileTcpa (
void **PFieldList);
ACPI_STATUS
DtCompileTpm2 (
void **PFieldList);
ACPI_STATUS
DtCompileUefi (
void **PFieldList);
ACPI_STATUS
DtCompileVrtc (
void **PFieldList);
ACPI_STATUS
DtCompileWdat (
void **PFieldList);
ACPI_STATUS
DtCompileWpbt (
void **PFieldList);
ACPI_STATUS
DtCompileXsdt (
void **PFieldList);
ACPI_STATUS
DtCompileGeneric (
void **PFieldList,
char *TermFieldName,
UINT32 *PFieldLength);
ACPI_DMTABLE_INFO *
DtGetGenericTableInfo (
char *Name);
extern const unsigned char TemplateAsf[];
extern const unsigned char TemplateBoot[];
extern const unsigned char TemplateBert[];
extern const unsigned char TemplateBgrt[];
extern const unsigned char TemplateCpep[];
extern const unsigned char TemplateCsrt[];
extern const unsigned char TemplateDbg2[];
extern const unsigned char TemplateDbgp[];
extern const unsigned char TemplateDmar[];
extern const unsigned char TemplateDrtm[];
extern const unsigned char TemplateEcdt[];
extern const unsigned char TemplateEinj[];
extern const unsigned char TemplateErst[];
extern const unsigned char TemplateFadt[];
extern const unsigned char TemplateFpdt[];
extern const unsigned char TemplateGtdt[];
extern const unsigned char TemplateHest[];
extern const unsigned char TemplateHmat[];
extern const unsigned char TemplateHpet[];
extern const unsigned char TemplateIort[];
extern const unsigned char TemplateIvrs[];
extern const unsigned char TemplateLpit[];
extern const unsigned char TemplateMadt[];
extern const unsigned char TemplateMcfg[];
extern const unsigned char TemplateMchi[];
extern const unsigned char TemplateMpst[];
extern const unsigned char TemplateMsct[];
extern const unsigned char TemplateMsdm[];
extern const unsigned char TemplateMtmr[];
extern const unsigned char TemplateNfit[];
extern const unsigned char TemplatePcct[];
extern const unsigned char TemplatePdtt[];
extern const unsigned char TemplatePmtt[];
extern const unsigned char TemplatePptt[];
extern const unsigned char TemplateRasf[];
extern const unsigned char TemplateRsdt[];
extern const unsigned char TemplateS3pt[];
extern const unsigned char TemplateSbst[];
extern const unsigned char TemplateSdei[];
extern const unsigned char TemplateSdev[];
extern const unsigned char TemplateSlic[];
extern const unsigned char TemplateSlit[];
extern const unsigned char TemplateSpcr[];
extern const unsigned char TemplateSpmi[];
extern const unsigned char TemplateSrat[];
extern const unsigned char TemplateStao[];
extern const unsigned char TemplateTcpa[];
extern const unsigned char TemplateTpm2[];
extern const unsigned char TemplateUefi[];
extern const unsigned char TemplateVrtc[];
extern const unsigned char TemplateWaet[];
extern const unsigned char TemplateWdat[];
extern const unsigned char TemplateWddt[];
extern const unsigned char TemplateWdrt[];
extern const unsigned char TemplateWpbt[];
extern const unsigned char TemplateWsmt[];
extern const unsigned char TemplateXenv[];
extern const unsigned char TemplateXsdt[];
#endif