From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received-SPF: Pass (sender SPF authorized) identity=mailfrom; client-ip=134.134.136.20; helo=mga02.intel.com; envelope-from=jiewen.yao@intel.com; receiver=edk2-devel@lists.01.org Received: from mga02.intel.com (mga02.intel.com [134.134.136.20]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ml01.01.org (Postfix) with ESMTPS id 805EA21B02822 for ; Tue, 25 Sep 2018 07:36:16 -0700 (PDT) X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from fmsmga005.fm.intel.com ([10.253.24.32]) by orsmga101.jf.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 25 Sep 2018 07:36:15 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.54,302,1534834800"; d="scan'208";a="265577450" Received: from fmsmsx108.amr.corp.intel.com ([10.18.124.206]) by fmsmga005.fm.intel.com with ESMTP; 25 Sep 2018 07:35:25 -0700 Received: from fmsmsx116.amr.corp.intel.com (10.18.116.20) by FMSMSX108.amr.corp.intel.com (10.18.124.206) with Microsoft SMTP Server (TLS) id 14.3.319.2; Tue, 25 Sep 2018 07:35:24 -0700 Received: from shsmsx101.ccr.corp.intel.com (10.239.4.153) by fmsmsx116.amr.corp.intel.com (10.18.116.20) with Microsoft SMTP Server (TLS) id 14.3.319.2; Tue, 25 Sep 2018 07:35:24 -0700 Received: from shsmsx102.ccr.corp.intel.com ([169.254.2.140]) by SHSMSX101.ccr.corp.intel.com ([169.254.1.220]) with mapi id 14.03.0319.002; Tue, 25 Sep 2018 22:35:22 +0800 From: "Yao, Jiewen" To: "Zeng, Star" , "edk2-devel@lists.01.org" CC: Younas khan , "Kinney, Michael D" , "Gao, Liming" , "Wang, Jian J" Thread-Topic: [PATCH V3 3/6] MdeModulePkg S3SaveStateDxe: Use new EfiLocateFirstAcpiTable() Thread-Index: AQHUTmX/vMAnQQbesEG8FNqA+JyfKKUBHSFw Date: Tue, 25 Sep 2018 14:35:21 +0000 Message-ID: <74D8A39837DF1E4DA445A8C0B3885C503AD97105@shsmsx102.ccr.corp.intel.com> References: <1537175295-37508-1-git-send-email-star.zeng@intel.com> <1537175295-37508-4-git-send-email-star.zeng@intel.com> In-Reply-To: <1537175295-37508-4-git-send-email-star.zeng@intel.com> Accept-Language: zh-CN, en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-titus-metadata-40: eyJDYXRlZ29yeUxhYmVscyI6IiIsIk1ldGFkYXRhIjp7Im5zIjoiaHR0cDpcL1wvd3d3LnRpdHVzLmNvbVwvbnNcL0ludGVsMyIsImlkIjoiNzQxYmVjZDQtZmNiYS00MGY3LTgwNTUtODQxNzg3ZWI4NzJhIiwicHJvcHMiOlt7Im4iOiJDVFBDbGFzc2lmaWNhdGlvbiIsInZhbHMiOlt7InZhbHVlIjoiQ1RQX05UIn1dfV19LCJTdWJqZWN0TGFiZWxzIjpbXSwiVE1DVmVyc2lvbiI6IjE3LjEwLjE4MDQuNDkiLCJUcnVzdGVkTGFiZWxIYXNoIjoiOU9DVkRTUVRoUHFIdlNvZlJZVFM3eTc2aVE0dm4rU2ZocWFaSkd3YTV6V3RCT3o1U0tTeHREaW9YRm44VDlNeCJ9 x-ctpclassification: CTP_NT dlp-product: dlpe-windows dlp-version: 11.0.400.15 dlp-reaction: no-action x-originating-ip: [10.239.127.40] MIME-Version: 1.0 Subject: Re: [PATCH V3 3/6] MdeModulePkg S3SaveStateDxe: Use new EfiLocateFirstAcpiTable() X-BeenThere: edk2-devel@lists.01.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: EDK II Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 25 Sep 2018 14:36:16 -0000 Content-Language: en-US Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable Reviewed-by: Jiewen.yao@intel.com > -----Original Message----- > From: Zeng, Star > Sent: Monday, September 17, 2018 5:08 PM > To: edk2-devel@lists.01.org > Cc: Zeng, Star ; Younas khan > ; Kinney, Michael D > ; Gao, Liming ; Yao, > Jiewen ; Wang, Jian J > Subject: [PATCH V3 3/6] MdeModulePkg S3SaveStateDxe: Use new > EfiLocateFirstAcpiTable() >=20 > https://bugzilla.tianocore.org/show_bug.cgi?id=3D967 > Request to add a library function for GetAcpiTable() in order > to get ACPI table using signature as input. >=20 > After evaluation, we found there are many duplicated code to > find ACPI table by signature in different modules. >=20 > This patch updates S3SaveStateDxe to use new > EfiLocateFirstAcpiTable() and remove the duplicated code. >=20 > Cc: Younas khan > Cc: Michael D Kinney > Cc: Liming Gao > Cc: Jiewen Yao > Cc: Jian J Wang > Contributed-under: TianoCore Contribution Agreement 1.1 > Signed-off-by: Star Zeng > --- > .../Acpi/S3SaveStateDxe/AcpiS3ContextSave.c | 208 > +-------------------- > .../Acpi/S3SaveStateDxe/S3SaveStateDxe.inf | 3 +- > 2 files changed, 5 insertions(+), 206 deletions(-) >=20 > diff --git > a/MdeModulePkg/Universal/Acpi/S3SaveStateDxe/AcpiS3ContextSave.c > b/MdeModulePkg/Universal/Acpi/S3SaveStateDxe/AcpiS3ContextSave.c > index 3f99023f110f..fadafd2b608b 100644 > --- a/MdeModulePkg/Universal/Acpi/S3SaveStateDxe/AcpiS3ContextSave.c > +++ b/MdeModulePkg/Universal/Acpi/S3SaveStateDxe/AcpiS3ContextSave.c > @@ -22,8 +22,8 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF > ANY KIND, EITHER EXPRESS OR IMPLIED. > #include > #include > #include > +#include > #include > -#include > #include > #include >=20 > @@ -76,208 +76,6 @@ AllocateMemoryBelow4G ( > } >=20 > /** > - > - This function scan ACPI table in RSDT. > - > - @param Rsdt ACPI RSDT > - @param Signature ACPI table signature > - > - @return ACPI table > - > -**/ > -VOID * > -ScanTableInRSDT ( > - IN EFI_ACPI_DESCRIPTION_HEADER *Rsdt, > - IN UINT32 Signature > - ) > -{ > - UINTN Index; > - UINT32 EntryCount; > - UINT32 *EntryPtr; > - EFI_ACPI_DESCRIPTION_HEADER *Table; > - > - if (Rsdt =3D=3D NULL) { > - return NULL; > - } > - > - EntryCount =3D (Rsdt->Length - sizeof (EFI_ACPI_DESCRIPTION_HEADER)) / > sizeof(UINT32); > - > - EntryPtr =3D (UINT32 *)(Rsdt + 1); > - for (Index =3D 0; Index < EntryCount; Index ++, EntryPtr ++) { > - Table =3D (EFI_ACPI_DESCRIPTION_HEADER *)((UINTN)(*EntryPtr)); > - if (Table->Signature =3D=3D Signature) { > - return Table; > - } > - } > - > - return NULL; > -} > - > -/** > - > - This function scan ACPI table in XSDT. > - > - @param Xsdt ACPI XSDT > - @param Signature ACPI table signature > - > - @return ACPI table > - > -**/ > -VOID * > -ScanTableInXSDT ( > - IN EFI_ACPI_DESCRIPTION_HEADER *Xsdt, > - IN UINT32 Signature > - ) > -{ > - UINTN Index; > - UINT32 EntryCount; > - UINT64 EntryPtr; > - UINTN BasePtr; > - EFI_ACPI_DESCRIPTION_HEADER *Table; > - > - if (Xsdt =3D=3D NULL) { > - return NULL; > - } > - > - EntryCount =3D (Xsdt->Length - sizeof (EFI_ACPI_DESCRIPTION_HEADER)) / > sizeof(UINT64); > - > - BasePtr =3D (UINTN)(Xsdt + 1); > - for (Index =3D 0; Index < EntryCount; Index ++) { > - CopyMem (&EntryPtr, (VOID *)(BasePtr + Index * sizeof(UINT64)), > sizeof(UINT64)); > - Table =3D (EFI_ACPI_DESCRIPTION_HEADER *)((UINTN)(EntryPtr)); > - if (Table->Signature =3D=3D Signature) { > - return Table; > - } > - } > - > - return NULL; > -} > - > -/** > - To find Facs in FADT. > - > - @param Fadt FADT table pointer > - > - @return Facs table pointer. > -**/ > -EFI_ACPI_2_0_FIRMWARE_ACPI_CONTROL_STRUCTURE * > -FindAcpiFacsFromFadt ( > - IN EFI_ACPI_2_0_FIXED_ACPI_DESCRIPTION_TABLE *Fadt > - ) > -{ > - EFI_ACPI_2_0_FIRMWARE_ACPI_CONTROL_STRUCTURE *Facs; > - UINT64 Data64; > - > - if (Fadt =3D=3D NULL) { > - return NULL; > - } > - > - if (Fadt->Header.Revision < > EFI_ACPI_2_0_FIXED_ACPI_DESCRIPTION_TABLE_REVISION) { > - Facs =3D (EFI_ACPI_2_0_FIRMWARE_ACPI_CONTROL_STRUCTURE > *)(UINTN)Fadt->FirmwareCtrl; > - } else { > - if (Fadt->FirmwareCtrl !=3D 0) { > - Facs =3D (EFI_ACPI_2_0_FIRMWARE_ACPI_CONTROL_STRUCTURE > *)(UINTN)Fadt->FirmwareCtrl; > - } else { > - CopyMem (&Data64, &Fadt->XFirmwareCtrl, sizeof(UINT64)); > - Facs =3D (EFI_ACPI_2_0_FIRMWARE_ACPI_CONTROL_STRUCTURE > *)(UINTN)Data64; > - } > - } > - return Facs; > -} > - > -/** > - To find Facs in Acpi tables. > - > - To find Firmware ACPI control strutcure in Acpi Tables since the S3 wa= king > vector is stored > - in the table. > - > - @param AcpiTableGuid The guid used to find ACPI table in UEFI > ConfigurationTable. > - > - @return Facs table pointer. > -**/ > -EFI_ACPI_2_0_FIRMWARE_ACPI_CONTROL_STRUCTURE * > -FindAcpiFacsTableByAcpiGuid ( > - IN EFI_GUID *AcpiTableGuid > - ) > -{ > - EFI_ACPI_2_0_ROOT_SYSTEM_DESCRIPTION_POINTER *Rsdp; > - EFI_ACPI_DESCRIPTION_HEADER *Rsdt; > - EFI_ACPI_DESCRIPTION_HEADER *Xsdt; > - EFI_ACPI_2_0_FIXED_ACPI_DESCRIPTION_TABLE *Fadt; > - EFI_ACPI_2_0_FIRMWARE_ACPI_CONTROL_STRUCTURE *Facs; > - UINTN Index; > - > - Rsdp =3D NULL; > - // > - // found ACPI table RSD_PTR from system table > - // > - for (Index =3D 0; Index < gST->NumberOfTableEntries; Index++) { > - if (CompareGuid (&(gST->ConfigurationTable[Index].VendorGuid), > AcpiTableGuid)) { > - // > - // A match was found. > - // > - Rsdp =3D gST->ConfigurationTable[Index].VendorTable; > - break; > - } > - } > - > - if (Rsdp =3D=3D NULL) { > - return NULL; > - } > - > - // > - // Search XSDT > - // > - if (Rsdp->Revision >=3D > EFI_ACPI_2_0_ROOT_SYSTEM_DESCRIPTION_POINTER_REVISION) { > - Xsdt =3D (EFI_ACPI_DESCRIPTION_HEADER *)(UINTN) > Rsdp->XsdtAddress; > - Fadt =3D ScanTableInXSDT (Xsdt, > EFI_ACPI_2_0_FIXED_ACPI_DESCRIPTION_TABLE_SIGNATURE); > - if (Fadt !=3D NULL) { > - Facs =3D FindAcpiFacsFromFadt (Fadt); > - if (Facs !=3D NULL) { > - return Facs; > - } > - } > - } > - > - // > - // Search RSDT > - // > - Rsdt =3D (EFI_ACPI_DESCRIPTION_HEADER *)(UINTN) Rsdp->RsdtAddress; > - Fadt =3D ScanTableInRSDT (Rsdt, > EFI_ACPI_2_0_FIXED_ACPI_DESCRIPTION_TABLE_SIGNATURE); > - if (Fadt !=3D NULL) { > - Facs =3D FindAcpiFacsFromFadt (Fadt); > - if (Facs !=3D NULL) { > - return Facs; > - } > - } > - > - return NULL; > -} > - > -/** > - To find Facs in Acpi tables. > - > - To find Firmware ACPI control strutcure in Acpi Tables since the S3 wa= king > vector is stored > - in the table. > - > - @return Facs table pointer. > -**/ > -EFI_ACPI_2_0_FIRMWARE_ACPI_CONTROL_STRUCTURE * > -FindAcpiFacsTable ( > - VOID > - ) > -{ > - EFI_ACPI_2_0_FIRMWARE_ACPI_CONTROL_STRUCTURE *Facs; > - > - Facs =3D FindAcpiFacsTableByAcpiGuid (&gEfiAcpi20TableGuid); > - if (Facs !=3D NULL) { > - return Facs; > - } > - > - return FindAcpiFacsTableByAcpiGuid (&gEfiAcpi10TableGuid); > -} > - > -/** > The function will check if long mode waking vector is supported. >=20 > @param[in] Facs Pointer to FACS table. > @@ -460,7 +258,9 @@ AcpiS3ContextSaveOnEndOfDxe ( > // > // Get ACPI Table because we will save its position to variable > // > - Facs =3D (EFI_ACPI_4_0_FIRMWARE_ACPI_CONTROL_STRUCTURE *) > FindAcpiFacsTable (); > + Facs =3D (EFI_ACPI_4_0_FIRMWARE_ACPI_CONTROL_STRUCTURE *) > EfiLocateFirstAcpiTable ( > + > EFI_ACPI_4_0_FIRMWARE_ACPI_CONTROL_STRUCTURE_SIGNATURE > + ); > AcpiS3Context->AcpiFacsTable =3D (EFI_PHYSICAL_ADDRESS) (UINTN) Facs; > ASSERT (AcpiS3Context->AcpiFacsTable !=3D 0); >=20 > diff --git > a/MdeModulePkg/Universal/Acpi/S3SaveStateDxe/S3SaveStateDxe.inf > b/MdeModulePkg/Universal/Acpi/S3SaveStateDxe/S3SaveStateDxe.inf > index 744cf8ab3270..e385356dee1b 100644 > --- a/MdeModulePkg/Universal/Acpi/S3SaveStateDxe/S3SaveStateDxe.inf > +++ b/MdeModulePkg/Universal/Acpi/S3SaveStateDxe/S3SaveStateDxe.inf > @@ -49,12 +49,11 @@ [LibraryClasses] > PcdLib > HobLib > LockBoxLib > + UefiLib >=20 > [Guids] > gEfiAcpiVariableGuid ## PRODUCES ## > UNDEFINED # LockBox Save Data. > gEfiAcpiS3ContextGuid ## PRODUCES ## > UNDEFINED # LockBox Save Data. > - gEfiAcpi20TableGuid ## > SOMETIMES_CONSUMES ## SystemTable > - gEfiAcpi10TableGuid ## > SOMETIMES_CONSUMES ## SystemTable > gEfiEndOfDxeEventGroupGuid ## CONSUMES ## > Event >=20 > [Protocols] > -- > 2.7.0.windows.1