16 EFI_ACPI_TABLE_VERSION_NONE,
66 StartLink = &AcpiTableInstance->TableList;
67 CurrentLink = StartLink->ForwardLink;
69 while (CurrentLink != StartLink) {
70 CurrentTableList = EFI_ACPI_TABLE_LIST_FROM_LINK (CurrentLink);
71 if (((
UINTN)CurrentTableList->Table <= (
UINTN)Buffer) &&
72 ((
UINTN)CurrentTableList->Table + CurrentTableList->TableSize > (
UINTN)Buffer))
77 return CurrentTableList;
80 CurrentLink = CurrentLink->ForwardLink;
103 if (CurrentTableList ==
NULL) {
104 return EFI_NOT_FOUND;
108 (
VOID *)CurrentTableList->Table,
109 CurrentTableList->Table->Length,
134 if (CurrentTableList ==
NULL) {
135 return EFI_NOT_FOUND;
138 *MaxSize = (
UINTN)CurrentTableList->Table + CurrentTableList->Table->Length - (
UINTN)Buffer;
152 IN EFI_ACPI_TABLE_VERSION Version,
167 &AcpiTableInstance->TableList,
175 StartLink = &AcpiTableInstance->NotifyList;
176 CurrentLink = StartLink->ForwardLink;
178 while (CurrentLink != StartLink) {
179 CurrentNotifyList = EFI_ACPI_NOTIFY_LIST_FROM_LINK (CurrentLink);
186 CurrentLink = CurrentLink->ForwardLink;
222 OUT EFI_ACPI_TABLE_VERSION *Version,
234 StartLink = &AcpiTableInstance->TableList;
235 CurrentLink = StartLink->ForwardLink;
238 while (CurrentLink != StartLink) {
239 if (TableIndex == Index) {
246 CurrentLink = CurrentLink->ForwardLink;
250 if ((TableIndex != Index) || (CurrentLink == StartLink)) {
251 return EFI_NOT_FOUND;
257 CurrentTable = EFI_ACPI_TABLE_LIST_FROM_LINK (CurrentLink);
258 *TableKey = CurrentTable->Handle;
259 *Version = CurrentTable->Version;
295 OUT EFI_ACPI_TABLE_VERSION *Version,
301 ASSERT (Table !=
NULL);
302 ASSERT (Version !=
NULL);
303 ASSERT (TableKey !=
NULL);
310 return SdtGetAcpiTable (AcpiTableInstance, Index, Table, Version, TableKey);
337 if (CurrentNotifyList ==
NULL) {
338 ASSERT (CurrentNotifyList !=
NULL);
339 DEBUG ((DEBUG_ERROR,
"%a Failed to allocate pool\n", __func__));
346 CurrentNotifyList->Signature = EFI_ACPI_NOTIFY_LIST_SIGNATURE;
347 CurrentNotifyList->Notification = Notification;
352 InsertTailList (&AcpiTableInstance->NotifyList, &CurrentNotifyList->Link);
385 StartLink = &AcpiTableInstance->NotifyList;
386 CurrentLink = StartLink->ForwardLink;
388 while (CurrentLink != StartLink) {
389 CurrentNotifyList = EFI_ACPI_NOTIFY_LIST_FROM_LINK (CurrentLink);
390 if (CurrentNotifyList->Notification == Notification) {
401 CurrentLink = CurrentLink->ForwardLink;
407 return EFI_INVALID_PARAMETER;
434 if (Notification ==
NULL) {
435 return EFI_INVALID_PARAMETER;
464 OUT EFI_ACPI_HANDLE *Handle
482 &AcpiTableInstance->TableList,
485 if (EFI_ERROR (Status)) {
486 return EFI_NOT_FOUND;
490 if (AmlHandle ==
NULL) {
491 ASSERT (AmlHandle !=
NULL);
492 return EFI_NOT_FOUND;
495 AmlHandle->Signature = EFI_AML_ROOT_HANDLE_SIGNATURE;
498 AmlHandle->AmlByteEncoding =
NULL;
499 AmlHandle->Modified =
FALSE;
504 *Handle = (EFI_ACPI_HANDLE)AmlHandle;
522 OUT EFI_ACPI_HANDLE *Handle
525 if (Handle ==
NULL) {
526 return EFI_INVALID_PARAMETER;
549 OUT EFI_ACPI_HANDLE *Handle
556 if (AmlByteEncoding ==
NULL) {
557 return EFI_INVALID_PARAMETER;
564 return EFI_INVALID_PARAMETER;
571 if (AmlHandle ==
NULL) {
572 ASSERT (AmlHandle !=
NULL);
573 return EFI_OUT_OF_RESOURCES;
576 AmlHandle->Signature = EFI_AML_HANDLE_SIGNATURE;
577 AmlHandle->Buffer = Buffer;
578 AmlHandle->AmlByteEncoding = AmlByteEncoding;
579 AmlHandle->Modified =
FALSE;
582 if (AmlHandle->Size == 0) {
584 return EFI_INVALID_PARAMETER;
587 *Handle = (EFI_ACPI_HANDLE)AmlHandle;
607 OUT EFI_ACPI_HANDLE *Handle
618 if ((Buffer ==
NULL) || (Handle ==
NULL)) {
619 return EFI_INVALID_PARAMETER;
623 if (EFI_ERROR (Status)) {
624 return EFI_INVALID_PARAMETER;
627 return SdtOpenEx (Buffer, MaxSize, Handle);
641 IN EFI_ACPI_HANDLE Handle
650 if (Handle ==
NULL) {
651 return EFI_INVALID_PARAMETER;
655 if ((AmlHandle->Signature != EFI_AML_ROOT_HANDLE_SIGNATURE) &&
656 (AmlHandle->Signature != EFI_AML_HANDLE_SIGNATURE))
658 return EFI_INVALID_PARAMETER;
664 if (AmlHandle->Modified) {
666 if (EFI_ERROR (Status)) {
667 return EFI_INVALID_PARAMETER;
693 IN EFI_ACPI_HANDLE Handle,
695 OUT EFI_ACPI_DATA_TYPE *DataType,
704 ASSERT (DataType !=
NULL);
705 ASSERT (Data !=
NULL);
706 ASSERT (DataSize !=
NULL);
711 if (Handle ==
NULL) {
712 return EFI_INVALID_PARAMETER;
719 if (AmlHandle->Signature != EFI_AML_HANDLE_SIGNATURE) {
720 return EFI_INVALID_PARAMETER;
723 AmlByteEncoding = AmlHandle->AmlByteEncoding;
724 if (Index > AmlByteEncoding->
MaxIndex) {
725 *DataType = EFI_ACPI_DATA_TYPE_NONE;
733 if (EFI_ERROR (Status)) {
734 return EFI_INVALID_PARAMETER;
758 IN EFI_ACPI_HANDLE Handle,
767 EFI_ACPI_DATA_TYPE DataType;
771 ASSERT (Data !=
NULL);
776 if (Handle ==
NULL) {
777 return EFI_INVALID_PARAMETER;
784 if (AmlHandle->Signature != EFI_AML_HANDLE_SIGNATURE) {
785 return EFI_INVALID_PARAMETER;
788 AmlByteEncoding = AmlHandle->AmlByteEncoding;
790 if (Index > AmlByteEncoding->
MaxIndex) {
791 return EFI_INVALID_PARAMETER;
798 if (EFI_ERROR (Status)) {
799 return EFI_INVALID_PARAMETER;
802 if (DataType == EFI_ACPI_DATA_TYPE_NONE) {
803 return EFI_INVALID_PARAMETER;
806 if (DataSize > OrgDataSize) {
807 return EFI_BAD_BUFFER_SIZE;
813 CopyMem (OrgData, Data, DataSize);
814 AmlHandle->Modified =
TRUE;
833 IN EFI_ACPI_HANDLE ParentHandle,
834 IN OUT EFI_ACPI_HANDLE *Handle
842 ASSERT (Handle !=
NULL);
847 if (ParentHandle ==
NULL) {
848 return EFI_INVALID_PARAMETER;
852 if ((AmlHandle !=
NULL) && (AmlHandle->Signature != EFI_AML_HANDLE_SIGNATURE)) {
853 return EFI_INVALID_PARAMETER;
857 if (AmlParentHandle->Signature == EFI_AML_ROOT_HANDLE_SIGNATURE) {
862 }
else if (AmlParentHandle->Signature == EFI_AML_HANDLE_SIGNATURE) {
871 return EFI_INVALID_PARAMETER;
874 if (EFI_ERROR (Status)) {
875 return EFI_INVALID_PARAMETER;
878 if (Buffer ==
NULL) {
883 return SdtOpenEx (Buffer, (
UINTN)AmlParentHandle->Buffer + AmlParentHandle->Size - (
UINTN)Buffer, Handle);
899 IN EFI_ACPI_HANDLE HandleIn,
901 OUT EFI_ACPI_HANDLE *HandleOut
915 if (EFI_ERROR (Status)) {
916 return EFI_INVALID_PARAMETER;
919 if (Buffer ==
NULL) {
924 return SdtOpenEx (Buffer, (
UINTN)AmlHandle->Buffer + AmlHandle->Size - (
UINTN)Buffer, HandleOut);
942 ASSERT (DstAmlHandle !=
NULL);
943 if (DstAmlHandle ==
NULL) {
947 CopyMem (DstAmlHandle, (
VOID *)AmlHandle,
sizeof (*DstAmlHandle));
966 IN EFI_ACPI_HANDLE HandleIn,
968 OUT EFI_ACPI_HANDLE *HandleOut
971 EFI_ACPI_HANDLE ChildHandle;
987 if (*HandleOut ==
NULL) {
988 return EFI_OUT_OF_RESOURCES;
999 Status =
GetChild (HandleIn, &ChildHandle);
1000 if (EFI_ERROR (Status)) {
1001 return EFI_INVALID_PARAMETER;
1004 if (ChildHandle ==
NULL) {
1017 if (EFI_ERROR (Status)) {
1018 return EFI_INVALID_PARAMETER;
1021 if (Buffer !=
NULL) {
1025 Status =
SdtOpenEx (Buffer, (
UINTN)AmlHandle->Buffer + AmlHandle->Size - (
UINTN)Buffer, HandleOut);
1026 if (!EFI_ERROR (Status)) {
1055 IN EFI_ACPI_HANDLE HandleIn,
1057 OUT EFI_ACPI_HANDLE *HandleOut
1067 if (HandleIn ==
NULL) {
1068 return EFI_INVALID_PARAMETER;
1077 if (AmlPath ==
NULL) {
1078 return EFI_INVALID_PARAMETER;
1082 DEBUG ((DEBUG_ERROR,
"AcpiSdt: FindPath - "));
1084 DEBUG ((DEBUG_ERROR,
"\n"));
1087 if (AmlHandle->Signature == EFI_AML_ROOT_HANDLE_SIGNATURE) {
1092 }
else if (AmlHandle->Signature == EFI_AML_HANDLE_SIGNATURE) {
1098 Status = EFI_INVALID_PARAMETER;
1117 CopyMem (&AcpiTableInstance->AcpiSdtProtocol, &mAcpiSdtProtocolTemplate, sizeof (mAcpiSdtProtocolTemplate));
1118 AcpiTableInstance->AcpiSdtProtocol.AcpiVersion = (EFI_ACPI_TABLE_VERSION)
PcdGet32 (PcdAcpiExposedTableVersions);
EFI_STATUS SdtUnregisterNotify(IN EFI_ACPI_NOTIFICATION_FN Notification)
EFI_STATUS SdtUpdateAmlChecksum(IN VOID *Buffer)
VOID SdtAcpiTableAcpiSdtConstructor(IN EFI_ACPI_TABLE_INSTANCE *AcpiTableInstance)
EFI_STATUS EFIAPI OpenSdt(IN UINTN TableKey, OUT EFI_ACPI_HANDLE *Handle)
EFI_STATUS SdtGetMaxAmlBufferSize(IN VOID *Buffer, OUT UINTN *MaxSize)
EFI_STATUS EFIAPI GetAcpiTable2(IN UINTN Index, OUT EFI_ACPI_SDT_HEADER **Table, OUT EFI_ACPI_TABLE_VERSION *Version, OUT UINTN *TableKey)
EFI_STATUS EFIAPI RegisterNotify(IN BOOLEAN Register, IN EFI_ACPI_NOTIFICATION_FN Notification)
EFI_STATUS EFIAPI Open(IN VOID *Buffer, OUT EFI_ACPI_HANDLE *Handle)
EFI_STATUS EFIAPI FindPath(IN EFI_ACPI_HANDLE HandleIn, IN VOID *AcpiPath, OUT EFI_ACPI_HANDLE *HandleOut)
VOID SdtRegisterNotify(IN EFI_ACPI_NOTIFICATION_FN Notification)
EFI_ACPI_TABLE_INSTANCE * SdtGetAcpiTableInstance(VOID)
EFI_STATUS EFIAPI SetOption(IN EFI_ACPI_HANDLE Handle, IN UINTN Index, IN CONST VOID *Data, IN UINTN DataSize)
EFI_STATUS EFIAPI GetChild(IN EFI_ACPI_HANDLE ParentHandle, IN OUT EFI_ACPI_HANDLE *Handle)
EFI_STATUS EFIAPI GetOption(IN EFI_ACPI_HANDLE Handle, IN UINTN Index, OUT EFI_ACPI_DATA_TYPE *DataType, OUT CONST VOID **Data, OUT UINTN *DataSize)
EFI_STATUS SdtOpenEx(IN VOID *Buffer, IN UINTN BufferSize, OUT EFI_ACPI_HANDLE *Handle)
VOID SdtNotifyAcpiList(IN EFI_ACPI_TABLE_INSTANCE *AcpiTableInstance, IN EFI_ACPI_TABLE_VERSION Version, IN UINTN Handle)
EFI_STATUS SdtFindPathFromNonRoot(IN EFI_ACPI_HANDLE HandleIn, IN UINT8 *AmlPath, OUT EFI_ACPI_HANDLE *HandleOut)
EFI_AML_HANDLE * SdtDuplicateHandle(IN EFI_AML_HANDLE *AmlHandle)
EFI_STATUS SdtOpenSdtTable(IN UINTN TableKey, OUT EFI_ACPI_HANDLE *Handle)
EFI_STATUS SdtGetAcpiTable(IN EFI_ACPI_TABLE_INSTANCE *AcpiTableInstance, IN UINTN Index, OUT EFI_ACPI_SDT_HEADER **Table, OUT EFI_ACPI_TABLE_VERSION *Version, OUT UINTN *TableKey)
EFI_ACPI_TABLE_LIST * FindTableByBuffer(IN VOID *Buffer)
EFI_STATUS SdtFindPathFromRoot(IN EFI_ACPI_HANDLE HandleIn, IN UINT8 *AmlPath, OUT EFI_ACPI_HANDLE *HandleOut)
EFI_STATUS EFIAPI Close(IN EFI_ACPI_HANDLE Handle)
EFI_STATUS AmlFindPath(IN EFI_AML_HANDLE *AmlHandle, IN UINT8 *AmlPath, OUT VOID **Buffer, IN BOOLEAN FromRoot)
UINTN AmlGetObjectSize(IN AML_BYTE_ENCODING *AmlByteEncoding, IN UINT8 *Buffer, IN UINTN MaxBufferSize)
VOID AmlPrintNameString(IN UINT8 *Buffer)
EFI_STATUS AmlGetChildFromRoot(IN EFI_AML_HANDLE *AmlParentHandle, IN EFI_AML_HANDLE *AmlHandle, OUT VOID **Buffer)
EFI_STATUS AmlParseOptionHandleCommon(IN EFI_AML_HANDLE *AmlHandle, IN AML_OP_PARSE_INDEX Index, OUT EFI_ACPI_DATA_TYPE *DataType, OUT VOID **Data, OUT UINTN *DataSize)
UINT8 * AmlNameFromAslName(IN UINT8 *AslPath)
AML_BYTE_ENCODING * AmlSearchByOpByte(IN UINT8 *OpByteBuffer)
EFI_STATUS AmlGetChildFromNonRoot(IN EFI_AML_HANDLE *AmlParentHandle, IN EFI_AML_HANDLE *AmlHandle, OUT VOID **Buffer)
EFI_STATUS(EFIAPI * EFI_ACPI_NOTIFICATION_FN)(IN EFI_ACPI_SDT_HEADER *Table, IN EFI_ACPI_TABLE_VERSION Version, IN UINTN TableKey)
EFI_STATUS EFIAPI AcpiPlatformChecksum(IN EFI_ACPI_DESCRIPTION_HEADER *AcpiTable)
LIST_ENTRY *EFIAPI RemoveEntryList(IN CONST LIST_ENTRY *Entry)
LIST_ENTRY *EFIAPI InitializeListHead(IN OUT LIST_ENTRY *ListHead)
LIST_ENTRY *EFIAPI InsertTailList(IN OUT LIST_ENTRY *ListHead, IN OUT LIST_ENTRY *Entry)
VOID *EFIAPI CopyMem(OUT VOID *DestinationBuffer, IN CONST VOID *SourceBuffer, IN UINTN Length)
BOOLEAN EFIAPI AmlIsRootPath(IN CONST CHAR8 *Buffer)
VOID EFIAPI FreePool(IN VOID *Buffer)
EFI_STATUS FindTableByHandle(IN UINTN Handle, IN LIST_ENTRY *TableList, OUT EFI_ACPI_TABLE_LIST **Table)
#define OFFSET_OF(TYPE, Field)
#define GLOBAL_REMOVE_IF_UNREFERENCED
#define ASSERT_EFI_ERROR(StatusParameter)
#define DEBUG_CODE_BEGIN()
#define DEBUG(Expression)
#define PcdGet32(TokenName)
VOID *EFIAPI AllocatePool(IN UINTN AllocationSize)
EFI_STATUS EFIAPI Register(IN EFI_PEI_RSC_HANDLER_CALLBACK Callback)
AML_OP_ATTRIBUTE Attribute
Additional information on the AML object.
EAML_PARSE_INDEX MaxIndex