本文整理匯總了C++中ACPI_COMPARE_NAME函數的典型用法代碼示例。如果您正苦於以下問題:C++ ACPI_COMPARE_NAME函數的具體用法?C++ ACPI_COMPARE_NAME怎麽用?C++ ACPI_COMPARE_NAME使用的例子?那麽, 這裏精選的函數代碼示例或許可以為您提供幫助。
在下文中一共展示了ACPI_COMPARE_NAME函數的15個代碼示例,這些例子默認根據受歡迎程度排序。您可以為喜歡或者感覺有用的代碼點讚,您的評價將有助於係統推薦出更棒的C++代碼示例。
示例1: AdCreateTableHeader
static void
AdCreateTableHeader (
char *Filename,
ACPI_TABLE_HEADER *Table)
{
char *NewFilename;
UINT8 Checksum;
/*
* Print file header and dump original table header
*/
AdDisassemblerHeader (Filename);
AcpiOsPrintf (" * Original Table Header:\n");
AcpiOsPrintf (" * Signature \"%4.4s\"\n", Table->Signature);
AcpiOsPrintf (" * Length 0x%8.8X (%u)\n", Table->Length, Table->Length);
/* Print and validate the revision */
AcpiOsPrintf (" * Revision 0x%2.2X", Table->Revision);
switch (Table->Revision)
{
case 0:
AcpiOsPrintf (" **** Invalid Revision");
break;
case 1:
/* Revision of DSDT controls the ACPI integer width */
if (ACPI_COMPARE_NAME (Table->Signature, ACPI_SIG_DSDT))
{
AcpiOsPrintf (" **** 32-bit table (V1), no 64-bit math support");
}
break;
default:
break;
}
AcpiOsPrintf ("\n");
/* Print and validate the table checksum */
AcpiOsPrintf (" * Checksum 0x%2.2X", Table->Checksum);
Checksum = AcpiTbChecksum (ACPI_CAST_PTR (UINT8, Table), Table->Length);
if (Checksum)
{
AcpiOsPrintf (" **** Incorrect checksum, should be 0x%2.2X",
(UINT8) (Table->Checksum - Checksum));
}
AcpiOsPrintf ("\n");
AcpiOsPrintf (" * OEM ID \"%.6s\"\n", Table->OemId);
AcpiOsPrintf (" * OEM Table ID \"%.8s\"\n", Table->OemTableId);
AcpiOsPrintf (" * OEM Revision 0x%8.8X (%u)\n", Table->OemRevision, Table->OemRevision);
AcpiOsPrintf (" * Compiler ID \"%.4s\"\n", Table->AslCompilerId);
AcpiOsPrintf (" * Compiler Version 0x%8.8X (%u)\n", Table->AslCompilerRevision, Table->AslCompilerRevision);
AcpiOsPrintf (" */\n");
/* Create AML output filename based on input filename */
if (Filename)
{
NewFilename = FlGenerateFilename (Filename, "aml");
}
else
{
NewFilename = ACPI_ALLOCATE_ZEROED (9);
if (NewFilename)
{
strncat (NewFilename, Table->Signature, 4);
strcat (NewFilename, ".aml");
}
}
if (!NewFilename)
{
AcpiOsPrintf (" **** Could not generate AML output filename\n");
return;
}
/* Open the ASL definition block */
AcpiOsPrintf (
"DefinitionBlock (\"%s\", \"%4.4s\", %hu, \"%.6s\", \"%.8s\", 0x%8.8X)\n",
NewFilename, Table->Signature, Table->Revision,
Table->OemId, Table->OemTableId, Table->OemRevision);
ACPI_FREE (NewFilename);
}
示例2: OslAddTablesToList
static ACPI_STATUS
OslAddTablesToList(
void)
{
ACPI_PHYSICAL_ADDRESS TableAddress;
OSL_TABLE_INFO *Info = NULL;
OSL_TABLE_INFO *NewInfo;
ACPI_TABLE_HEADER *Table;
UINT8 Instance;
UINT8 NumberOfTables;
int i;
/* Initialize the table list on first invocation */
if (Gbl_TableListInitialized)
{
return (AE_OK);
}
/* Add mandatory tables to global table list first */
for (i = 0; i < 4; i++)
{
NewInfo = calloc (1, sizeof (*NewInfo));
if (!NewInfo)
{
return (AE_NO_MEMORY);
}
switch (i) {
case 0:
Gbl_TableListHead = Info = NewInfo;
continue;
case 1:
ACPI_MOVE_NAME (NewInfo->Signature,
Gbl_Revision ? ACPI_SIG_XSDT : ACPI_SIG_RSDT);
break;
case 2:
ACPI_MOVE_NAME (NewInfo->Signature, ACPI_SIG_FACS);
break;
default:
ACPI_MOVE_NAME (NewInfo->Signature, ACPI_SIG_DSDT);
}
Info->Next = NewInfo;
Info = NewInfo;
Gbl_TableListHead->Instance++;
}
/* Add normal tables from RSDT/XSDT to global list */
if (Gbl_Revision)
{
NumberOfTables =
(Gbl_Xsdt->Header.Length - sizeof (Gbl_Xsdt->Header))
/ sizeof (Gbl_Xsdt->TableOffsetEntry[0]);
}
else
{
NumberOfTables =
(Gbl_Rsdt->Header.Length - sizeof (Gbl_Rsdt->Header))
/ sizeof (Gbl_Rsdt->TableOffsetEntry[0]);
}
for (i = 0; i < NumberOfTables; i++)
{
if (Gbl_Revision)
{
TableAddress = Gbl_Xsdt->TableOffsetEntry[i];
}
else
{
TableAddress = Gbl_Rsdt->TableOffsetEntry[i];
}
Table = AcpiOsMapMemory (TableAddress, sizeof (*Table));
if (!Table)
{
return (AE_BAD_ADDRESS);
}
Instance = 0;
NewInfo = Gbl_TableListHead;
while (NewInfo->Next != NULL)
{
NewInfo = NewInfo->Next;
if (ACPI_COMPARE_NAME (Table->Signature, NewInfo->Signature))
{
Instance++;
}
}
//.........這裏部分代碼省略.........
示例3: AcpiTbLoadNamespace
static ACPI_STATUS
AcpiTbLoadNamespace (
void)
{
ACPI_STATUS Status;
UINT32 i;
ACPI_TABLE_HEADER *NewDsdt;
ACPI_FUNCTION_TRACE (TbLoadNamespace);
(void) AcpiUtAcquireMutex (ACPI_MTX_TABLES);
/*
* Load the namespace. The DSDT is required, but any SSDT and
* PSDT tables are optional. Verify the DSDT.
*/
if (!AcpiGbl_RootTableList.CurrentTableCount ||
!ACPI_COMPARE_NAME (
&(AcpiGbl_RootTableList.Tables[ACPI_TABLE_INDEX_DSDT].Signature),
ACPI_SIG_DSDT) ||
ACPI_FAILURE (AcpiTbVerifyTable (
&AcpiGbl_RootTableList.Tables[ACPI_TABLE_INDEX_DSDT])))
{
Status = AE_NO_ACPI_TABLES;
goto UnlockAndExit;
}
/*
* Save the DSDT pointer for simple access. This is the mapped memory
* address. We must take care here because the address of the .Tables
* array can change dynamically as tables are loaded at run-time. Note:
* .Pointer field is not validated until after call to AcpiTbVerifyTable.
*/
AcpiGbl_DSDT = AcpiGbl_RootTableList.Tables[ACPI_TABLE_INDEX_DSDT].Pointer;
/*
* Optionally copy the entire DSDT to local memory (instead of simply
* mapping it.) There are some BIOSs that corrupt or replace the original
* DSDT, creating the need for this option. Default is FALSE, do not copy
* the DSDT.
*/
if (AcpiGbl_CopyDsdtLocally)
{
NewDsdt = AcpiTbCopyDsdt (ACPI_TABLE_INDEX_DSDT);
if (NewDsdt)
{
AcpiGbl_DSDT = NewDsdt;
}
}
/*
* Save the original DSDT header for detection of table corruption
* and/or replacement of the DSDT from outside the OS.
*/
ACPI_MEMCPY (&AcpiGbl_OriginalDsdtHeader, AcpiGbl_DSDT,
sizeof (ACPI_TABLE_HEADER));
(void) AcpiUtReleaseMutex (ACPI_MTX_TABLES);
/* Load and parse tables */
Status = AcpiNsLoadTable (ACPI_TABLE_INDEX_DSDT, AcpiGbl_RootNode);
if (ACPI_FAILURE (Status))
{
return_ACPI_STATUS (Status);
}
/* Load any SSDT or PSDT tables. Note: Loop leaves tables locked */
(void) AcpiUtAcquireMutex (ACPI_MTX_TABLES);
for (i = 0; i < AcpiGbl_RootTableList.CurrentTableCount; ++i)
{
if ((!ACPI_COMPARE_NAME (&(AcpiGbl_RootTableList.Tables[i].Signature),
ACPI_SIG_SSDT) &&
!ACPI_COMPARE_NAME (&(AcpiGbl_RootTableList.Tables[i].Signature),
ACPI_SIG_PSDT)) ||
ACPI_FAILURE (AcpiTbVerifyTable (
&AcpiGbl_RootTableList.Tables[i])))
{
continue;
}
/* Ignore errors while loading tables, get as many as possible */
(void) AcpiUtReleaseMutex (ACPI_MTX_TABLES);
(void) AcpiNsLoadTable (i, AcpiGbl_RootNode);
(void) AcpiUtAcquireMutex (ACPI_MTX_TABLES);
}
ACPI_DEBUG_PRINT ((ACPI_DB_INIT, "ACPI Tables successfully acquired\n"));
UnlockAndExit:
(void) AcpiUtReleaseMutex (ACPI_MTX_TABLES);
return_ACPI_STATUS (Status);
}
示例4: AcpiDbExecute
//.........這裏部分代碼省略.........
if (*Name == '*')
{
(void) AcpiWalkNamespace (ACPI_TYPE_METHOD, ACPI_ROOT_OBJECT,
ACPI_UINT32_MAX, AcpiDbExecutionWalk, NULL, NULL, NULL);
return;
}
else
{
NameString = ACPI_ALLOCATE (strlen (Name) + 1);
if (!NameString)
{
return;
}
memset (&AcpiGbl_DbMethodInfo, 0, sizeof (ACPI_DB_METHOD_INFO));
strcpy (NameString, Name);
AcpiUtStrupr (NameString);
AcpiGbl_DbMethodInfo.Name = NameString;
AcpiGbl_DbMethodInfo.Args = Args;
AcpiGbl_DbMethodInfo.Types = Types;
AcpiGbl_DbMethodInfo.Flags = Flags;
ReturnObj.Pointer = NULL;
ReturnObj.Length = ACPI_ALLOCATE_BUFFER;
Status = AcpiDbExecuteSetup (&AcpiGbl_DbMethodInfo);
if (ACPI_FAILURE (Status))
{
ACPI_FREE (NameString);
return;
}
/* Get the NS node, determines existence also */
Status = AcpiGetHandle (NULL, AcpiGbl_DbMethodInfo.Pathname,
&AcpiGbl_DbMethodInfo.Method);
if (ACPI_SUCCESS (Status))
{
Status = AcpiDbExecuteMethod (&AcpiGbl_DbMethodInfo, &ReturnObj);
}
ACPI_FREE (NameString);
}
/*
* Allow any handlers in separate threads to complete.
* (Such as Notify handlers invoked from AML executed above).
*/
AcpiOsSleep ((UINT64) 10);
#ifdef ACPI_DEBUG_OUTPUT
/* Memory allocation tracking */
Allocations = AcpiDbGetOutstandingAllocations () - PreviousAllocations;
AcpiDbSetOutputDestination (ACPI_DB_DUPLICATE_OUTPUT);
if (Allocations > 0)
{
AcpiOsPrintf ("0x%X Outstanding allocations after evaluation of %s\n",
Allocations, AcpiGbl_DbMethodInfo.Pathname);
}
#endif
if (ACPI_FAILURE (Status))
{
AcpiOsPrintf ("Evaluation of %s failed with status %s\n",
AcpiGbl_DbMethodInfo.Pathname, AcpiFormatException (Status));
}
else
{
/* Display a return object, if any */
if (ReturnObj.Length)
{
AcpiOsPrintf (
"Evaluation of %s returned object %p, external buffer length %X\n",
AcpiGbl_DbMethodInfo.Pathname, ReturnObj.Pointer,
(UINT32) ReturnObj.Length);
AcpiDbDumpExternalObject (ReturnObj.Pointer, 1);
/* Dump a _PLD buffer if present */
if (ACPI_COMPARE_NAME ((ACPI_CAST_PTR (ACPI_NAMESPACE_NODE,
AcpiGbl_DbMethodInfo.Method)->Name.Ascii), METHOD_NAME__PLD))
{
AcpiDbDumpPldBuffer (ReturnObj.Pointer);
}
}
else
{
AcpiOsPrintf ("No object was returned from evaluation of %s\n",
AcpiGbl_DbMethodInfo.Pathname);
}
}
AcpiDbSetOutputDestination (ACPI_DB_CONSOLE_OUTPUT);
}
示例5: AcpiOsGetTableByName
ACPI_STATUS
AcpiOsGetTableByName (
char *Signature,
UINT32 Instance,
ACPI_TABLE_HEADER **Table,
ACPI_PHYSICAL_ADDRESS *Address)
{
ACPI_STATUS Status;
/* Instance is only valid for SSDT/UEFI tables */
if (Instance &&
!ACPI_COMPARE_NAME (Signature, ACPI_SIG_SSDT) &&
!ACPI_COMPARE_NAME (Signature, ACPI_SIG_UEFI))
{
return (AE_LIMIT);
}
/* Initialize main tables */
Status = OslTableInitialize ();
if (ACPI_FAILURE (Status))
{
return (Status);
}
/*
* If one of the main ACPI tables was requested (RSDT/XSDT/FADT),
* simply return it immediately.
*/
if (ACPI_COMPARE_NAME (Signature, ACPI_SIG_XSDT))
{
if (!Gbl_Revision)
{
return (AE_NOT_FOUND);
}
*Address = Gbl_Rsdp.XsdtPhysicalAddress;
*Table = (ACPI_TABLE_HEADER *) Gbl_Xsdt;
return (AE_OK);
}
if (ACPI_COMPARE_NAME (Signature, ACPI_SIG_RSDT))
{
if (!Gbl_Rsdp.RsdtPhysicalAddress)
{
return (AE_NOT_FOUND);
}
*Address = Gbl_Rsdp.RsdtPhysicalAddress;
*Table = (ACPI_TABLE_HEADER *) Gbl_Rsdt;
return (AE_OK);
}
if (ACPI_COMPARE_NAME (Signature, ACPI_SIG_FADT))
{
*Address = Gbl_FadtAddress;
*Table = (ACPI_TABLE_HEADER *) Gbl_Fadt;
return (AE_OK);
}
/* Not a main ACPI table, attempt to extract it from the RSDT/XSDT */
Status = OslGetTableViaRoot (Signature, Instance, Table, Address);
if (ACPI_FAILURE (Status))
{
return (Status);
}
return (AE_OK);
}
示例6: AcpiUnloadParentTable
ACPI_STATUS
AcpiUnloadParentTable (
ACPI_HANDLE Object)
{
ACPI_NAMESPACE_NODE *Node = ACPI_CAST_PTR (ACPI_NAMESPACE_NODE, Object);
ACPI_STATUS Status = AE_NOT_EXIST;
ACPI_OWNER_ID OwnerId;
UINT32 i;
ACPI_FUNCTION_TRACE (AcpiUnloadParentTable);
/* Parameter validation */
if (!Object)
{
return_ACPI_STATUS (AE_BAD_PARAMETER);
}
/*
* The node OwnerId is currently the same as the parent table ID.
* However, this could change in the future.
*/
OwnerId = Node->OwnerId;
if (!OwnerId)
{
/* OwnerId==0 means DSDT is the owner. DSDT cannot be unloaded */
return_ACPI_STATUS (AE_TYPE);
}
/* Must acquire the interpreter lock during this operation */
Status = AcpiUtAcquireMutex (ACPI_MTX_INTERPRETER);
if (ACPI_FAILURE (Status))
{
return_ACPI_STATUS (Status);
}
/* Find the table in the global table list */
for (i = 0; i < AcpiGbl_RootTableList.CurrentTableCount; i++)
{
if (OwnerId != AcpiGbl_RootTableList.Tables[i].OwnerId)
{
continue;
}
/*
* Allow unload of SSDT and OEMx tables only. Do not allow unload
* of the DSDT. No other types of tables should get here, since
* only these types can contain AML and thus are the only types
* that can create namespace objects.
*/
if (ACPI_COMPARE_NAME (
AcpiGbl_RootTableList.Tables[i].Signature.Ascii,
ACPI_SIG_DSDT))
{
Status = AE_TYPE;
break;
}
/* Ensure the table is actually loaded */
if (!AcpiTbIsTableLoaded (i))
{
Status = AE_NOT_EXIST;
break;
}
/* Invoke table handler if present */
if (AcpiGbl_TableHandler)
{
(void) AcpiGbl_TableHandler (ACPI_TABLE_EVENT_UNLOAD,
AcpiGbl_RootTableList.Tables[i].Pointer,
AcpiGbl_TableHandlerContext);
}
/*
* Delete all namespace objects owned by this table. Note that
* these objects can appear anywhere in the namespace by virtue
* of the AML "Scope" operator. Thus, we need to track ownership
* by an ID, not simply a position within the hierarchy.
*/
Status = AcpiTbDeleteNamespaceByOwner (i);
if (ACPI_FAILURE (Status))
{
break;
}
Status = AcpiTbReleaseOwnerId (i);
AcpiTbSetTableLoadedFlag (i, FALSE);
break;
}
(void) AcpiUtReleaseMutex (ACPI_MTX_INTERPRETER);
return_ACPI_STATUS (Status);
}
示例7: AcpiDbReadTable
static ACPI_STATUS
AcpiDbReadTable (
FILE *fp,
ACPI_TABLE_HEADER **Table,
UINT32 *TableLength)
{
ACPI_TABLE_HEADER TableHeader;
UINT32 Actual;
ACPI_STATUS Status;
UINT32 FileSize;
BOOLEAN StandardHeader = TRUE;
/* Get the file size */
FileSize = CmGetFileSize (fp);
if (FileSize == ACPI_UINT32_MAX)
{
return (AE_ERROR);
}
if (FileSize < 4)
{
return (AE_BAD_HEADER);
}
/* Read the signature */
if (fread (&TableHeader, 1, 4, fp) != 4)
{
AcpiOsPrintf ("Could not read the table signature\n");
return (AE_BAD_HEADER);
}
fseek (fp, 0, SEEK_SET);
/* The RSDP table does not have standard ACPI header */
if (ACPI_COMPARE_NAME (TableHeader.Signature, "RSD "))
{
*TableLength = FileSize;
StandardHeader = FALSE;
}
else
{
/* Read the table header */
if (fread (&TableHeader, 1, sizeof (ACPI_TABLE_HEADER), fp) !=
sizeof (ACPI_TABLE_HEADER))
{
AcpiOsPrintf ("Could not read the table header\n");
return (AE_BAD_HEADER);
}
#if 0
/* Validate the table header/length */
Status = AcpiTbValidateTableHeader (&TableHeader);
if (ACPI_FAILURE (Status))
{
AcpiOsPrintf ("Table header is invalid!\n");
return (Status);
}
#endif
/* File size must be at least as long as the Header-specified length */
if (TableHeader.Length > FileSize)
{
AcpiOsPrintf (
"TableHeader length [0x%X] greater than the input file size [0x%X]\n",
TableHeader.Length, FileSize);
#ifdef ACPI_ASL_COMPILER
Status = FlCheckForAscii (fp, NULL, FALSE);
if (ACPI_SUCCESS (Status))
{
AcpiOsPrintf ("File appears to be ASCII only, must be binary\n",
TableHeader.Length, FileSize);
}
#endif
return (AE_BAD_HEADER);
}
#ifdef ACPI_OBSOLETE_CODE
/* We only support a limited number of table types */
if (!ACPI_COMPARE_NAME ((char *) TableHeader.Signature, ACPI_SIG_DSDT) &&
!ACPI_COMPARE_NAME ((char *) TableHeader.Signature, ACPI_SIG_PSDT) &&
!ACPI_COMPARE_NAME ((char *) TableHeader.Signature, ACPI_SIG_SSDT))
{
AcpiOsPrintf ("Table signature [%4.4s] is invalid or not supported\n",
(char *) TableHeader.Signature);
ACPI_DUMP_BUFFER (&TableHeader, sizeof (ACPI_TABLE_HEADER));
return (AE_ERROR);
}
#endif
*TableLength = TableHeader.Length;
}
//.........這裏部分代碼省略.........
示例8: AxExtractTables
int
AxExtractTables (
char *InputPathname,
char *Signature,
unsigned int MinimumInstances)
{
FILE *InputFile;
FILE *OutputFile = NULL;
size_t BytesWritten;
size_t TotalBytesWritten = 0;
size_t BytesConverted;
unsigned int State = AX_STATE_FIND_HEADER;
unsigned int FoundTable = 0;
unsigned int Instances = 0;
unsigned int ThisInstance;
char ThisSignature[4];
int Status = 0;
/* Open input in text mode, output is in binary mode */
InputFile = fopen (InputPathname, "rt");
if (!InputFile)
{
printf ("Could not open %s\n", InputPathname);
return (-1);
}
if (Signature)
{
/* Are there enough instances of the table to continue? */
AxNormalizeSignature (Signature);
Instances = AxCountTableInstances (InputPathname, Signature);
if (Instances < MinimumInstances)
{
printf ("Table %s was not found in %s\n", Signature, InputPathname);
Status = -1;
goto CleanupAndExit;
}
if (Instances == 0)
{
goto CleanupAndExit;
}
}
/* Convert all instances of the table to binary */
while (fgets (LineBuffer, AX_LINE_BUFFER_SIZE, InputFile))
{
switch (State)
{
case AX_STATE_FIND_HEADER:
/* Ignore lines that are too short to be header lines */
if (strlen (LineBuffer) < AX_MIN_TABLE_NAME_LENGTH)
{
continue;
}
/* Ignore empty lines and lines that start with a space */
if ((LineBuffer[0] == ' ') ||
(LineBuffer[0] == '\n'))
{
continue;
}
/*
* Ignore lines that are not of the form <sig> @ <addr>.
* Examples of lines that must be supported:
*
* DSDT @ 0x737e4000
* XSDT @ 0x737f2fff
* RSD PTR @ 0xf6cd0
* SSDT @ (nil)
*/
if (!strstr (LineBuffer, " @ "))
{
continue;
}
AxNormalizeSignature (LineBuffer);
ACPI_MOVE_NAME (ThisSignature, LineBuffer);
if (Signature)
{
/* Ignore signatures that don't match */
if (!ACPI_COMPARE_NAME (ThisSignature, Signature))
{
continue;
}
}
/*
* Get the instance number for this signature. Only the
//.........這裏部分代碼省略.........
示例9: AxListTables
int
AxListTables (
char *InputPathname)
{
FILE *InputFile;
size_t HeaderSize;
unsigned char Header[48];
int TableCount = 0;
ACPI_TABLE_HEADER *TableHeader = (ACPI_TABLE_HEADER *) (void *) Header;
/* Open input in text mode, output is in binary mode */
InputFile = fopen (InputPathname, "rt");
if (!InputFile)
{
printf ("Could not open %s\n", InputPathname);
return (-1);
}
/* Dump the headers for all tables found in the input file */
printf ("\nSignature Length Revision OemId OemTableId"
" OemRevision CompilerId CompilerRevision\n\n");
while (fgets (LineBuffer, AX_LINE_BUFFER_SIZE, InputFile))
{
/* Ignore empty lines and lines that start with a space */
if ((LineBuffer[0] == ' ') ||
(LineBuffer[0] == '\n'))
{
continue;
}
/* Get the 36 byte header and display the fields */
HeaderSize = AxGetTableHeader (InputFile, Header);
if (HeaderSize < 16)
{
continue;
}
/* RSDP has an oddball signature and header */
if (!strncmp (TableHeader->Signature, "RSD PTR ", 8))
{
AxCheckAscii ((char *) &Header[9], 6);
printf ("%8.4s \"%6.6s\"\n", "RSDP", &Header[9]);
TableCount++;
continue;
}
/* Minimum size for table with standard header */
if (HeaderSize < sizeof (ACPI_TABLE_HEADER))
{
continue;
}
/* Signature and Table length */
TableCount++;
printf ("%8.4s % 7d", TableHeader->Signature, TableHeader->Length);
/* FACS has only signature and length */
if (ACPI_COMPARE_NAME (TableHeader->Signature, "FACS"))
{
printf ("\n");
continue;
}
/* OEM IDs and Compiler IDs */
AxCheckAscii (TableHeader->OemId, 6);
AxCheckAscii (TableHeader->OemTableId, 8);
AxCheckAscii (TableHeader->AslCompilerId, 4);
printf (" %2.2X \"%6.6s\" \"%8.8s\" %8.8X \"%4.4s\" %8.8X\n",
TableHeader->Revision, TableHeader->OemId,
TableHeader->OemTableId, TableHeader->OemRevision,
TableHeader->AslCompilerId, TableHeader->AslCompilerRevision);
}
printf ("\nFound %u ACPI tables\n", TableCount);
fclose (InputFile);
return (0);
}
示例10: AeBuildLocalTables
ACPI_STATUS
AeBuildLocalTables (
ACPI_NEW_TABLE_DESC *ListHead)
{
UINT32 TableCount = 1;
ACPI_PHYSICAL_ADDRESS DsdtAddress = 0;
UINT32 XsdtSize;
ACPI_NEW_TABLE_DESC *NextTable;
UINT32 NextIndex;
ACPI_TABLE_FADT *ExternalFadt = NULL;
/*
* Update the table count. For the DSDT, it is not put into the XSDT.
* For the FADT, this table is already accounted for since we usually
* install a local FADT.
*/
NextTable = ListHead;
while (NextTable)
{
if (!ACPI_COMPARE_NAME (NextTable->Table->Signature, ACPI_SIG_DSDT) &&
!ACPI_COMPARE_NAME (NextTable->Table->Signature, ACPI_SIG_FADT))
{
TableCount++;
}
NextTable = NextTable->Next;
}
XsdtSize = (((TableCount + 1) * sizeof (UINT64)) +
sizeof (ACPI_TABLE_HEADER));
if (AcpiGbl_LoadTestTables)
{
XsdtSize += BASE_XSDT_SIZE;
}
/* Build an XSDT */
LocalXSDT = AcpiOsAllocate (XsdtSize);
if (!LocalXSDT)
{
return (AE_NO_MEMORY);
}
memset (LocalXSDT, 0, XsdtSize);
LocalXSDT->TableOffsetEntry[0] = ACPI_PTR_TO_PHYSADDR (&LocalFADT);
NextIndex = 1;
/*
* Install the user tables. The DSDT must be installed in the FADT.
* All other tables are installed directly into the XSDT.
*/
NextTable = ListHead;
while (NextTable)
{
/*
* Incoming DSDT or FADT are special cases. All other tables are
* just immediately installed into the XSDT.
*/
if (ACPI_COMPARE_NAME (NextTable->Table->Signature, ACPI_SIG_DSDT))
{
if (DsdtAddress)
{
printf ("Already found a DSDT, only one allowed\n");
return (AE_ALREADY_EXISTS);
}
/* The incoming user table is a DSDT */
DsdtAddress = ACPI_PTR_TO_PHYSADDR (NextTable->Table);
DsdtToInstallOverride = NextTable->Table;
}
else if (ACPI_COMPARE_NAME (NextTable->Table->Signature, ACPI_SIG_FADT))
{
ExternalFadt = ACPI_CAST_PTR (ACPI_TABLE_FADT, NextTable->Table);
LocalXSDT->TableOffsetEntry[0] = ACPI_PTR_TO_PHYSADDR (NextTable->Table);
}
else
{
/* Install the table in the XSDT */
LocalXSDT->TableOffsetEntry[NextIndex] =
ACPI_PTR_TO_PHYSADDR (NextTable->Table);
NextIndex++;
}
NextTable = NextTable->Next;
}
/* Install the optional extra local tables */
if (AcpiGbl_LoadTestTables)
{
LocalXSDT->TableOffsetEntry[NextIndex++] = ACPI_PTR_TO_PHYSADDR (&LocalTEST);
LocalXSDT->TableOffsetEntry[NextIndex++] = ACPI_PTR_TO_PHYSADDR (&LocalBADTABLE);
/* Install two SSDTs to test multiple table support */
LocalXSDT->TableOffsetEntry[NextIndex++] = ACPI_PTR_TO_PHYSADDR (&Ssdt1Code);
LocalXSDT->TableOffsetEntry[NextIndex++] = ACPI_PTR_TO_PHYSADDR (&Ssdt2Code);
//.........這裏部分代碼省略.........
示例11: AxExtractTables
int
AxExtractTables (
char *InputPathname,
char *Signature,
unsigned int MinimumInstances)
{
FILE *InputFile;
FILE *OutputFile = NULL;
unsigned int BytesConverted;
unsigned int ThisTableBytesWritten = 0;
unsigned int FoundTable = 0;
unsigned int Instances = 0;
unsigned int ThisInstance;
char ThisSignature[5];
char UpperSignature[5];
int Status = 0;
unsigned int State = AX_STATE_FIND_HEADER;
/* Open input in text mode, output is in binary mode */
InputFile = fopen (InputPathname, "rt");
if (!InputFile)
{
printf ("Could not open input file %s\n", InputPathname);
return (-1);
}
if (!AxIsFileAscii (InputFile))
{
fclose (InputFile);
return (-1);
}
if (Signature)
{
strncpy (UpperSignature, Signature, 4);
UpperSignature[4] = 0;
AcpiUtStrupr (UpperSignature);
/* Are there enough instances of the table to continue? */
AxNormalizeSignature (UpperSignature);
Instances = AxCountTableInstances (InputPathname, UpperSignature);
if (Instances < MinimumInstances)
{
printf ("Table [%s] was not found in %s\n",
UpperSignature, InputPathname);
fclose (InputFile);
return (-1);
}
if (Instances == 0)
{
fclose (InputFile);
return (-1);
}
}
/* Convert all instances of the table to binary */
while (fgets (Gbl_LineBuffer, AX_LINE_BUFFER_SIZE, InputFile))
{
switch (State)
{
case AX_STATE_FIND_HEADER:
if (!AxIsDataBlockHeader ())
{
continue;
}
ACPI_MOVE_NAME (ThisSignature, Gbl_LineBuffer);
if (Signature)
{
/* Ignore signatures that don't match */
if (!ACPI_COMPARE_NAME (ThisSignature, UpperSignature))
{
continue;
}
}
/*
* Get the instance number for this signature. Only the
* SSDT and PSDT tables can have multiple instances.
*/
ThisInstance = AxGetNextInstance (InputPathname, ThisSignature);
/* Build an output filename and create/open the output file */
if (ThisInstance > 0)
{
/* Add instance number to the output filename */
sprintf (Gbl_OutputFilename, "%4.4s%u.dat",
ThisSignature, ThisInstance);
}
else
//.........這裏部分代碼省略.........
示例12: AxExtractToMultiAmlFile
int
AxExtractToMultiAmlFile (
char *InputPathname)
{
FILE *InputFile;
FILE *OutputFile;
int Status = 0;
unsigned int TotalBytesWritten = 0;
unsigned int ThisTableBytesWritten = 0;
unsigned int BytesConverted;
char ThisSignature[4];
unsigned int State = AX_STATE_FIND_HEADER;
strcpy (Gbl_OutputFilename, AX_MULTI_TABLE_FILENAME);
/* Open the input file in text mode */
InputFile = fopen (InputPathname, "rt");
if (!InputFile)
{
printf ("Could not open input file %s\n", InputPathname);
return (-1);
}
if (!AxIsFileAscii (InputFile))
{
fclose (InputFile);
return (-1);
}
/* Open the output file in binary mode */
OutputFile = fopen (Gbl_OutputFilename, "w+b");
if (!OutputFile)
{
printf ("Could not open output file %s\n", Gbl_OutputFilename);
fclose (InputFile);
return (-1);
}
/* Convert the DSDT and all SSDTs to binary */
while (fgets (Gbl_LineBuffer, AX_LINE_BUFFER_SIZE, InputFile))
{
switch (State)
{
case AX_STATE_FIND_HEADER:
if (!AxIsDataBlockHeader ())
{
continue;
}
ACPI_MOVE_NAME (ThisSignature, Gbl_LineBuffer);
/* Only want DSDT and SSDTs */
if (!ACPI_COMPARE_NAME (ThisSignature, ACPI_SIG_DSDT) &&
!ACPI_COMPARE_NAME (ThisSignature, ACPI_SIG_SSDT))
{
continue;
}
/*
* Toss this block header of the form "<sig> @ <addr>" line
* and move on to the actual data block
*/
Gbl_TableCount++;
ThisTableBytesWritten = 0;
State = AX_STATE_EXTRACT_DATA;
continue;
case AX_STATE_EXTRACT_DATA:
/* Empty line or non-data line terminates the data block */
BytesConverted = AxProcessOneTextLine (
OutputFile, ThisSignature, ThisTableBytesWritten);
switch (BytesConverted)
{
case 0:
State = AX_STATE_FIND_HEADER; /* No more data block lines */
continue;
case -1:
goto CleanupAndExit; /* There was a write error */
default: /* Normal case, get next line */
ThisTableBytesWritten += BytesConverted;
TotalBytesWritten += BytesConverted;
continue;
}
default:
Status = -1;
//.........這裏部分代碼省略.........
示例13: DtCreateOneTemplate
static ACPI_STATUS
DtCreateOneTemplate (
char *Signature,
UINT32 TableCount,
const ACPI_DMTABLE_DATA *TableData)
{
char *DisasmFilename;
FILE *File;
ACPI_STATUS Status = AE_OK;
int Actual;
UINT32 i;
/* New file will have a .asl suffix */
DisasmFilename = FlGenerateFilename (
Signature, FILE_SUFFIX_ASL_CODE);
if (!DisasmFilename)
{
fprintf (stderr, "Could not generate output filename\n");
return (AE_ERROR);
}
AcpiUtStrlwr (DisasmFilename);
if (!UtQueryForOverwrite (DisasmFilename))
{
return (AE_ERROR);
}
File = fopen (DisasmFilename, "w+");
if (!File)
{
fprintf (stderr, "Could not open output file %s\n",
DisasmFilename);
return (AE_ERROR);
}
/* Emit the common file header */
AcpiOsRedirectOutput (File);
AcpiOsPrintf ("/*\n");
AcpiOsPrintf (ACPI_COMMON_HEADER ("iASL Compiler/Disassembler", " * "));
if (TableCount == 0)
{
AcpiOsPrintf (" * Template for [%4.4s] ACPI Table",
Signature);
}
else
{
AcpiOsPrintf (" * Template for [%4.4s] and %u [SSDT] ACPI Tables",
Signature, TableCount);
}
/* Dump the actual ACPI table */
if (TableData)
{
/* Normal case, tables that appear in AcpiDmTableData */
AcpiOsPrintf (" (static data table)\n");
if (Gbl_VerboseTemplates)
{
AcpiOsPrintf (" * Format: [HexOffset DecimalOffset ByteLength]"
" FieldName : HexFieldValue\n */\n\n");
}
else
{
AcpiOsPrintf (" * Format: [ByteLength]"
" FieldName : HexFieldValue\n */\n");
}
AcpiDmDumpDataTable (ACPI_CAST_PTR (ACPI_TABLE_HEADER,
TableData->Template));
}
else
{
/* Special ACPI tables - DSDT, SSDT, OSDT, FACS, RSDP */
AcpiOsPrintf (" (AML byte code table)\n");
AcpiOsPrintf (" */\n");
if (ACPI_COMPARE_NAME (Signature, ACPI_SIG_DSDT))
{
Actual = DtEmitDefinitionBlock (
File, DisasmFilename, ACPI_SIG_DSDT, 1);
if (Actual < 0)
{
Status = AE_ERROR;
goto Cleanup;
}
/* Emit any requested SSDTs into the same file */
for (i = 1; i <= TableCount; i++)
{
Actual = DtEmitDefinitionBlock (
File, DisasmFilename, ACPI_SIG_SSDT, i + 1);
//.........這裏部分代碼省略.........
示例14: AcpiOsGetTableByName
ACPI_STATUS
AcpiOsGetTableByName (
char *Signature,
UINT32 Instance,
ACPI_TABLE_HEADER **Table,
ACPI_PHYSICAL_ADDRESS *Address)
{
HKEY Handle = NULL;
LONG WinStatus;
ULONG Type;
ULONG NameSize;
ULONG DataSize;
HKEY SubKey;
ULONG i;
ACPI_TABLE_HEADER *ReturnTable;
ACPI_STATUS Status = AE_OK;
/*
* Windows has no SSDTs in the registry, so multiple instances are
* not supported.
*/
if (Instance > 0)
{
return (AE_LIMIT);
}
/* Get a handle to the table key */
while (1)
{
strcpy (KeyBuffer, "HARDWARE\\ACPI\\");
if (AcpiUtSafeStrcat (KeyBuffer, sizeof (KeyBuffer), Signature))
{
return (AE_BUFFER_OVERFLOW);
}
WinStatus = RegOpenKeyEx (HKEY_LOCAL_MACHINE, KeyBuffer,
0L, KEY_READ, &Handle);
if (WinStatus != ERROR_SUCCESS)
{
/*
* Somewhere along the way, MS changed the registry entry for
* the FADT from
* HARDWARE/ACPI/FACP to
* HARDWARE/ACPI/FADT.
*
* This code allows for both.
*/
if (ACPI_COMPARE_NAME (Signature, "FACP"))
{
Signature = "FADT";
}
else if (ACPI_COMPARE_NAME (Signature, "XSDT"))
{
Signature = "RSDT";
}
else
{
fprintf (stderr,
"Could not find %s in registry at %s: %s (WinStatus=0x%X)\n",
Signature, KeyBuffer, WindowsFormatException (WinStatus), WinStatus);
return (AE_NOT_FOUND);
}
}
else
{
break;
}
}
/* Actual data for the table is down a couple levels */
for (i = 0; ;)
{
WinStatus = RegEnumKey (Handle, i, KeyBuffer, sizeof (KeyBuffer));
i++;
if (WinStatus == ERROR_NO_MORE_ITEMS)
{
break;
}
WinStatus = RegOpenKey (Handle, KeyBuffer, &SubKey);
if (WinStatus != ERROR_SUCCESS)
{
fprintf (stderr, "Could not open %s entry: %s\n",
Signature, WindowsFormatException (WinStatus));
Status = AE_ERROR;
goto Cleanup;
}
RegCloseKey (Handle);
Handle = SubKey;
i = 0;
}
/* Find the (binary) table entry */
for (i = 0; ; i++)
//.........這裏部分代碼省略.........
示例15: acpi_tb_load_namespace
/*******************************************************************************
*
* FUNCTION: acpi_tb_load_namespace
*
* PARAMETERS: None
*
* RETURN: Status
*
* DESCRIPTION: Load the namespace from the DSDT and all SSDTs/PSDTs found in
* the RSDT/XSDT.
*
******************************************************************************/
acpi_status acpi_tb_load_namespace(void)
{
acpi_status status;
u32 i;
struct acpi_table_header *new_dsdt;
struct acpi_table_desc *table;
u32 tables_loaded = 0;
u32 tables_failed = 0;
ACPI_FUNCTION_TRACE(tb_load_namespace);
(void)acpi_ut_acquire_mutex(ACPI_MTX_TABLES);
/*
* Load the namespace. The DSDT is required, but any SSDT and
* PSDT tables are optional. Verify the DSDT.
*/
table = &acpi_gbl_root_table_list.tables[acpi_gbl_dsdt_index];
if (!acpi_gbl_root_table_list.current_table_count ||
!ACPI_COMPARE_NAME(table->signature.ascii, ACPI_SIG_DSDT) ||
ACPI_FAILURE(acpi_tb_validate_table(table))) {
status = AE_NO_ACPI_TABLES;
goto unlock_and_exit;
}
/*
* Save the DSDT pointer for simple access. This is the mapped memory
* address. We must take care here because the address of the .Tables
* array can change dynamically as tables are loaded at run-time. Note:
* .Pointer field is not validated until after call to acpi_tb_validate_table.
*/
acpi_gbl_DSDT = table->pointer;
/*
* Optionally copy the entire DSDT to local memory (instead of simply
* mapping it.) There are some BIOSs that corrupt or replace the original
* DSDT, creating the need for this option. Default is FALSE, do not copy
* the DSDT.
*/
if (acpi_gbl_copy_dsdt_locally) {
new_dsdt = acpi_tb_copy_dsdt(acpi_gbl_dsdt_index);
if (new_dsdt) {
acpi_gbl_DSDT = new_dsdt;
}
}
/*
* Save the original DSDT header for detection of table corruption
* and/or replacement of the DSDT from outside the OS.
*/
memcpy(&acpi_gbl_original_dsdt_header, acpi_gbl_DSDT,
sizeof(struct acpi_table_header));
/* Load and parse tables */
(void)acpi_ut_release_mutex(ACPI_MTX_TABLES);
status = acpi_ns_load_table(acpi_gbl_dsdt_index, acpi_gbl_root_node);
(void)acpi_ut_acquire_mutex(ACPI_MTX_TABLES);
if (ACPI_FAILURE(status)) {
ACPI_EXCEPTION((AE_INFO, status, "[DSDT] table load failed"));
tables_failed++;
} else {
tables_loaded++;
}
/* Load any SSDT or PSDT tables. Note: Loop leaves tables locked */
for (i = 0; i < acpi_gbl_root_table_list.current_table_count; ++i) {
table = &acpi_gbl_root_table_list.tables[i];
if (!acpi_gbl_root_table_list.tables[i].address ||
(!ACPI_COMPARE_NAME(table->signature.ascii, ACPI_SIG_SSDT)
&& !ACPI_COMPARE_NAME(table->signature.ascii,
ACPI_SIG_PSDT)
&& !ACPI_COMPARE_NAME(table->signature.ascii,
ACPI_SIG_OSDT))
|| ACPI_FAILURE(acpi_tb_validate_table(table))) {
continue;
}
/* Ignore errors while loading tables, get as many as possible */
(void)acpi_ut_release_mutex(ACPI_MTX_TABLES);
status = acpi_ns_load_table(i, acpi_gbl_root_node);
(void)acpi_ut_acquire_mutex(ACPI_MTX_TABLES);
if (ACPI_FAILURE(status)) {
ACPI_EXCEPTION((AE_INFO, status,
//.........這裏部分代碼省略.........