mirror of https://github.com/lianthony/NT4.0
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
259 lines
5.3 KiB
259 lines
5.3 KiB
|
|
#include <stdio.h>
|
|
#include <malloc.h>
|
|
#include <stdlib.h>
|
|
#include <process.h>
|
|
#include <windows.h>
|
|
#include "terms.h"
|
|
#include "misc.h"
|
|
|
|
|
|
//
|
|
// Name & Data types of structures
|
|
//
|
|
|
|
typedef enum {
|
|
TypeUnkown,
|
|
|
|
// Name types for compiling
|
|
TypeTerm, // ASL Term
|
|
TypeDefine,
|
|
TypeRoot,
|
|
|
|
// Data types for building ASM name space
|
|
TypeScope, // Scope with no datatype defined
|
|
TypeAlias, // Alias in name space
|
|
TypeName,
|
|
TypeCodePackage,
|
|
TypeIf,
|
|
TypeMethod,
|
|
TypeRegion,
|
|
TypeField,
|
|
TypeSync,
|
|
TypeDevice,
|
|
TypeProcessor,
|
|
TypePowerResource,
|
|
TypeThermalZone,
|
|
|
|
TypeMaximum
|
|
} DATATYPE, *PDATATYPE;
|
|
|
|
//
|
|
// AML name space
|
|
//
|
|
|
|
typedef struct s_name {
|
|
ULONG NameSeg;
|
|
LIST_ENTRY Next;
|
|
struct s_name *Parent;
|
|
struct s_name *Child;
|
|
struct s_data *Al;
|
|
} AML_NAME, *PAML_NAME;
|
|
|
|
|
|
//
|
|
// Structures to build AML encodings
|
|
//
|
|
|
|
typedef struct {
|
|
UCHAR Length;
|
|
UCHAR Data[7];
|
|
} AML_DATA, *PAML_DATA;
|
|
|
|
#define MAX_AML_DATA_LEN 7
|
|
|
|
typedef struct {
|
|
USHORT Length;
|
|
USHORT MaxLength;
|
|
PUCHAR Data;
|
|
} AML_IDATA, *PAML_IDATA;
|
|
|
|
//
|
|
// Structures to maniplate AML name space.
|
|
//
|
|
|
|
#define F_AMLENCODE 0x01 // contains AML encoding information
|
|
#define F_AMLIENCODE 0x02 // contains AML indirect encoding information
|
|
#define F_AMLPACKAGE 0x04 // length field at this aml encoding location
|
|
#define F_VERIFYREF 0x08 // verify reference
|
|
#define F_CREATENAME 0x10 // this field creates a name
|
|
#define F_ISNUMERIC 0x20 // numeric is a value or string
|
|
#define F_PFIXED 0x40 // Parsing fixed list
|
|
#define F_PVARIABLE 0x80 // Parsing variable list
|
|
|
|
|
|
typedef struct s_data {
|
|
DATATYPE DataType; // must be first element of structure
|
|
|
|
struct s_asl_source *Source; // source module & lineno which created
|
|
ULONG LineNo; // this data
|
|
|
|
//
|
|
// Name space
|
|
//
|
|
|
|
PAML_NAME Name; // if named object
|
|
|
|
//
|
|
// Data compent content
|
|
//
|
|
|
|
struct s_data *Parent; // Parent
|
|
|
|
UCHAR Flags;
|
|
UCHAR VArgs; // For F_NAMEREF
|
|
UCHAR FLCount;
|
|
UCHAR Spare;
|
|
|
|
union { // for DataType of:
|
|
struct s_data *Alias; // TypeAlias
|
|
|
|
AML_DATA Data; // F_AMLENCODE
|
|
AML_IDATA IData; // F_AMLIENCODE
|
|
} u;
|
|
|
|
PASL_TERM Term;
|
|
|
|
//
|
|
// List of data components
|
|
//
|
|
|
|
LIST_ENTRY Link;
|
|
|
|
//
|
|
// If child components (e.g., anonomous package)
|
|
//
|
|
|
|
LIST_ENTRY FixedList; // Fixed portion of ASL term
|
|
|
|
union {
|
|
LIST_ENTRY VariableList; // Varible portion of ASL term
|
|
LIST_ENTRY VerifyRef;
|
|
} u1;
|
|
|
|
} AL_DATA, *PAL_DATA;
|
|
|
|
|
|
// //
|
|
// //
|
|
// //
|
|
//
|
|
// typedef struct s_asl_scope {
|
|
// UCHAR ScopeType; // paran or brace
|
|
// PAL_DATA Current;
|
|
// struct s_asl_scope *Previous;
|
|
// } ASL_SCOPE, *PASL_SCOPE;
|
|
//
|
|
// #define SCOPE_ROOT 0
|
|
// #define SCOPE_BRACE 1
|
|
// #define SCOPE_PARAN 2
|
|
|
|
|
|
typedef struct s_asl_source {
|
|
PUCHAR Name;
|
|
HANDLE FileHandle;
|
|
HANDLE MapHandle;
|
|
ULONG FileSize;
|
|
PUCHAR Image;
|
|
PUCHAR EndOfData;
|
|
|
|
PUCHAR Position;
|
|
ULONG LineNo;
|
|
|
|
UCHAR BraceLevel;
|
|
|
|
struct s_asl_source *Previous;
|
|
} ASL_SOURCE, *PASL_SOURCE;
|
|
|
|
//
|
|
// Prototypes
|
|
//
|
|
|
|
// asl.c
|
|
VOID Terminate(VOID);
|
|
|
|
// debug.c
|
|
VOID DumpImage(VOID);
|
|
VOID
|
|
DumpNameSpace(
|
|
PAL_DATA Al,
|
|
ULONG Level
|
|
);
|
|
|
|
// defdata.c
|
|
ULONG
|
|
ArgToValue (
|
|
IN PAL_DATA Arg,
|
|
IN ULONG ArgNo,
|
|
IN PUCHAR Msg,
|
|
IN ULONG MaxValue
|
|
);
|
|
|
|
// parse.c
|
|
VOID IncludeSource (PUCHAR);
|
|
|
|
// parseop.c
|
|
VOID IsZeroOp (VOID);
|
|
VOID IsNullOp (VOID);
|
|
VOID Vnone (VOID);
|
|
|
|
BOOLEAN
|
|
VAlArgs (
|
|
IN PUCHAR Types,
|
|
OUT PAL_DATA *Args
|
|
);
|
|
|
|
BOOLEAN
|
|
VAlArg (
|
|
IN PUCHAR Msg,
|
|
IN PAL_DATA Arg,
|
|
IN UCHAR Type
|
|
);
|
|
|
|
VOID
|
|
__cdecl SetAlData (
|
|
IN PAL_DATA Al,
|
|
IN PUCHAR Fmt,
|
|
...
|
|
);
|
|
|
|
// name.c
|
|
|
|
BOOLEAN
|
|
VAlArgsAndNameArg0 (
|
|
DATATYPE ObjType,
|
|
PUCHAR ArgTypes,
|
|
PAL_DATA *Args
|
|
);
|
|
|
|
// misc.c
|
|
PVOID AllocMem(ULONG);
|
|
VOID FreeMem(PVOID);
|
|
PVOID AllocZMem(ULONG);
|
|
PUCHAR StrDup(PUCHAR);
|
|
PAML_NAME AllocName (VOID);
|
|
PAL_DATA AllocAl(VOID);
|
|
VOID FreeAl (PAL_DATA);
|
|
VOID GetAlData (PAL_DATA, PUCHAR *, PULONG);
|
|
PASL_TERM GlobalToken (PUCHAR, ULONG, PDATATYPE);
|
|
|
|
VOID VPRINT(ULONG, PUCHAR fmt, ...);
|
|
VOID ErrorW32(PUCHAR fmt, ...);
|
|
VOID _ASSERT(PUCHAR msg);
|
|
VOID AERROR(PUCHAR msg);
|
|
VOID ERRORAL (PAL_DATA, PUCHAR fmt, ...);
|
|
|
|
|
|
//
|
|
// Globals
|
|
//
|
|
|
|
extern PAL_DATA DataImage;
|
|
extern PASL_SOURCE Source;
|
|
extern PAL_DATA AlLoc;
|
|
extern LIST_ENTRY VerifyRef;
|
|
extern ULONG Verbose;
|
|
extern ULONG Errors;
|
|
extern ULONG Warnings;
|
|
extern ULONG MemAllocated;
|
|
extern ULONG SourceLines;
|