From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from EUR05-VI1-obe.outbound.protection.outlook.com (EUR05-VI1-obe.outbound.protection.outlook.com [40.107.21.45]) by mx.groups.io with SMTP id smtpd.web12.7197.1592919817711753510 for ; Tue, 23 Jun 2020 06:43:38 -0700 Authentication-Results: mx.groups.io; dkim=pass header.i=@armh.onmicrosoft.com header.s=selector2-armh-onmicrosoft-com header.b=KE7wC+73; spf=pass (domain: arm.com, ip: 40.107.21.45, mailfrom: tomas.pilar@arm.com) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com; s=selector2-armh-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=myMYj4TNYgLfwXzec+gZX/2vUHojrDz6qpGBSuEHd+I=; b=KE7wC+73KDs2ImapmNfJrBSAReKF6Ed8pwnkFuNDuxvdjYOS+pjyW17JyxQ75pdW6wAWP9ANwqXWAkIbPJ0x+IKHjOHW9lmk3kR3dy82NxrR2/lnyAiNbXW27sXmTyLyE8hYIVS1NV2w6y/HSRRcapS235f9z2WCKwdqckVDivo= Received: from AM6P194CA0064.EURP194.PROD.OUTLOOK.COM (2603:10a6:209:84::41) by AM0PR08MB3553.eurprd08.prod.outlook.com (2603:10a6:208:de::32) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3109.22; Tue, 23 Jun 2020 13:43:34 +0000 Received: from VE1EUR03FT037.eop-EUR03.prod.protection.outlook.com (2603:10a6:209:84:cafe::5d) by AM6P194CA0064.outlook.office365.com (2603:10a6:209:84::41) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3109.22 via Frontend Transport; Tue, 23 Jun 2020 13:43:34 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 63.35.35.123) smtp.mailfrom=arm.com; edk2.groups.io; dkim=pass (signature was verified) header.d=armh.onmicrosoft.com;edk2.groups.io; dmarc=bestguesspass action=none header.from=arm.com; Received-SPF: Pass (protection.outlook.com: domain of arm.com designates 63.35.35.123 as permitted sender) receiver=protection.outlook.com; client-ip=63.35.35.123; helo=64aa7808-outbound-1.mta.getcheckrecipient.com; Received: from 64aa7808-outbound-1.mta.getcheckrecipient.com (63.35.35.123) by VE1EUR03FT037.mail.protection.outlook.com (10.152.19.70) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3109.22 via Frontend Transport; Tue, 23 Jun 2020 13:43:33 +0000 Received: ("Tessian outbound f44be76249db:v59"); Tue, 23 Jun 2020 13:43:33 +0000 X-CheckRecipientChecked: true X-CR-MTA-CID: f04fe14048f53718 X-CR-MTA-TID: 64aa7808 Received: from a02c9f8f2f95.1 by 64aa7808-outbound-1.mta.getcheckrecipient.com id E35E2058-9853-4D06-A6F1-9338DB59AD72.1; Tue, 23 Jun 2020 13:43:27 +0000 Received: from EUR02-HE1-obe.outbound.protection.outlook.com by 64aa7808-outbound-1.mta.getcheckrecipient.com with ESMTPS id a02c9f8f2f95.1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384); Tue, 23 Jun 2020 13:43:27 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=dkthsU1BOwpsYzLXNPnWlQtxAZ0LlEwRrNM5jsqb2m63cOq1CW7XVR6DGS8O0SAZ/UzpnjDXIdXjUT7iO9MFoXCUr2WhEhD7fZK0woS31L+rW8dHsnMpKhF99WgIFgKX7Ot+1DeSy1RlbJp0yiYZkY1mcabvXzfQo1H8FE2Se1KsZngLvs1VHbTjDGG6P+4nv94I+CtdJ2zHtts1Cr1g6Spk1t43JqFTB9jRAnCq3Oa0CMVdl8mxtrvraRKReZn4akgruE2vurvo23CWUcknmMjXQj9XretK8BGifpo/R80FxzSrHzr+dh/gTCZcHA/Rzxp+bMKUNnvCg2FImKBfDA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=myMYj4TNYgLfwXzec+gZX/2vUHojrDz6qpGBSuEHd+I=; b=PpNQ0mD2rlO19nmpCVmQ2/Kpz2RuI+lWfXVi8Rp40c7yfTLVwB4J8+nXBHd0Nbz1pEGL+eA8EkmvYm6ca+2a2c5SWeo5OqnfAQ+FO4Ee+ZdU+OKEMxvM6YiDyLaFvLUaxtupBFz5uOBPjrKV0qBQusmxpRwmpOj98p0hGfWHRgBKh5WMisKXofDzJZ7tMPfRUWe6jWdENZGStG4Wnyvhsvx1cBdbdGlrw2dLGu3xg3fwbnjajGns0IXtp+7vCZjyYJ18glm/XOL23BTAAvxSSUZMvCm5Zte+rrk2QNc9ia21FRGD64pbvWh1gd9PmO2ipp4QTUcEOEBSVoiGwIb1OA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 40.67.248.234) smtp.rcpttodomain=edk2.groups.io smtp.mailfrom=arm.com; dmarc=bestguesspass action=none header.from=arm.com; dkim=none (message not signed); arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com; s=selector2-armh-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=myMYj4TNYgLfwXzec+gZX/2vUHojrDz6qpGBSuEHd+I=; b=KE7wC+73KDs2ImapmNfJrBSAReKF6Ed8pwnkFuNDuxvdjYOS+pjyW17JyxQ75pdW6wAWP9ANwqXWAkIbPJ0x+IKHjOHW9lmk3kR3dy82NxrR2/lnyAiNbXW27sXmTyLyE8hYIVS1NV2w6y/HSRRcapS235f9z2WCKwdqckVDivo= Received: from DB6PR0201CA0026.eurprd02.prod.outlook.com (2603:10a6:4:3f::36) by DB8PR08MB5050.eurprd08.prod.outlook.com (2603:10a6:10:e2::18) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3109.23; Tue, 23 Jun 2020 13:43:25 +0000 Received: from DB5EUR03FT003.eop-EUR03.prod.protection.outlook.com (2603:10a6:4:3f:cafe::c8) by DB6PR0201CA0026.outlook.office365.com (2603:10a6:4:3f::36) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3109.22 via Frontend Transport; Tue, 23 Jun 2020 13:43:25 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 40.67.248.234) smtp.mailfrom=arm.com; edk2.groups.io; dkim=none (message not signed) header.d=none;edk2.groups.io; dmarc=bestguesspass action=none header.from=arm.com; Received-SPF: Pass (protection.outlook.com: domain of arm.com designates 40.67.248.234 as permitted sender) receiver=protection.outlook.com; client-ip=40.67.248.234; helo=nebula.arm.com; Received: from nebula.arm.com (40.67.248.234) by DB5EUR03FT003.mail.protection.outlook.com (10.152.20.157) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.20.3109.22 via Frontend Transport; Tue, 23 Jun 2020 13:43:25 +0000 Received: from AZ-NEU-EX03.Arm.com (10.251.24.31) by AZ-NEU-EX03.Arm.com (10.251.24.31) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1415.2; Tue, 23 Jun 2020 13:43:23 +0000 Received: from localhost.localdomain (10.57.20.205) by mail.arm.com (10.251.24.31) with Microsoft SMTP Server id 15.1.1415.2 via Frontend Transport; Tue, 23 Jun 2020 13:43:23 +0000 From: "Tomas Pilar (tpilar)" To: CC: , , Ray Ni , "Zhichao Gao" Subject: [PATCH v4 4/7] ShellPkg/AcpiView: Move parameter parsing Date: Tue, 23 Jun 2020 14:43:01 +0100 Message-ID: <20200623134304.2619-5-Tomas.Pilar@arm.com> X-Mailer: git-send-email 2.24.1.windows.2 In-Reply-To: <20200623134304.2619-1-Tomas.Pilar@arm.com> References: <20200623134304.2619-1-Tomas.Pilar@arm.com> MIME-Version: 1.0 X-EOPAttributedMessage: 1 X-MS-Office365-Filtering-HT: Tenant X-Forefront-Antispam-Report-Untrusted: CIP:40.67.248.234;CTRY:IE;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:nebula.arm.com;PTR:InfoDomainNonexistent;CAT:NONE;SFTY:;SFS:(4636009)(376002)(346002)(136003)(39860400002)(396003)(46966005)(356005)(2616005)(82310400002)(8676002)(81166007)(5660300002)(30864003)(86362001)(6916009)(8936002)(1076003)(47076004)(82740400003)(336012)(426003)(70586007)(70206006)(6666004)(83380400001)(4326008)(186003)(2906002)(26005)(478600001)(36756003)(316002)(54906003);DIR:OUT;SFP:1101; X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 5419a46e-9604-46b9-3d3c-08d8177b6c7d X-MS-TrafficTypeDiagnostic: DB8PR08MB5050:|AM0PR08MB3553: X-Microsoft-Antispam-PRVS: x-checkrecipientrouted: true NoDisclaimer: true X-MS-Oob-TLC-OOBClassifiers: OLM:3044;OLM:3044; X-Forefront-PRVS: 04433051BF X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam-Untrusted: BCL:0; X-Microsoft-Antispam-Message-Info-Original: n9KQYuvgWDmDHNfYVSXkEgK1gkZGkx/bRjoeXqU/3A/UKz/seWbny6+CBb9cIda3zGfpLUf6VmhSZdVs/dFASO69InGgTY1IKYUBZGJ1GszL2QaRdfG5fcDl6rCPwwNBk588bOxR1Cw7txbCHFTGsrAYTX/ck7GmSQBwGb0nx9NjvUjLL2u4v6u45qnuIcCQiguMVR9Nf/k7a4IZJGyx4yfrXWY/oIs1Bwh/lmXxvFflfQifiXBGKSd4q8CopNj/jOEN9nhGzjbc7ikmQGSsm+rIQEOTrbhzDyFAwJFJY1t4GPw6Vc8OKGNR9JOJfylIxYlh9GErMf1bBPDAe68Dsy2R+1MI9inx3f0OPrEUp1O6Tks8gyXusqHNuOx/KqkKYLut9eEwOrHhfRNYf192nw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB8PR08MB5050 Return-Path: Tomas.Pilar@arm.com X-MS-Exchange-Transport-CrossTenantHeadersStripped: VE1EUR03FT037.eop-EUR03.prod.protection.outlook.com X-Forefront-Antispam-Report: CIP:63.35.35.123;CTRY:IE;LANG:en;SCL:1;SRV:;IPV:CAL;SFV:NSPM;H:64aa7808-outbound-1.mta.getcheckrecipient.com;PTR:ec2-63-35-35-123.eu-west-1.compute.amazonaws.com;CAT:NONE;SFTY:;SFS:(4636009)(396003)(136003)(346002)(376002)(39860400002)(46966005)(86362001)(8936002)(82740400003)(186003)(82310400002)(8676002)(47076004)(54906003)(5660300002)(70586007)(4326008)(36756003)(107886003)(70206006)(316002)(336012)(36906005)(478600001)(2906002)(6666004)(30864003)(83380400001)(1076003)(2616005)(81166007)(26005)(6916009)(426003);DIR:OUT;SFP:1101; X-MS-Office365-Filtering-Correlation-Id-Prvs: b6dd7d2b-6d4f-437a-41f9-08d8177b677c X-Forefront-PRVS: 04433051BF X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: DZ6ToEKc5yIIqs5B9Pw8LlTe/LHlx41Ji7pQt55NgefBkAb5sPVrFNQw19d2rPTxvaPpLoZcUuQ6vaNPvISUFMKNmurEGd7mbRPUdl9CPP6AVpj3juq/Ajs5Xej28j4exvEth3JNDE+c3ELO1djyNfd1C6DaOL4DfY9Ievx50/uvs190XzZyJeaWGStpoQxweClRnEeL/BZ2XjBMBScjYQFPN988VN4wbqFRU7F6kQJ13OATv0gD21j0aJ2rmLxh2Qmzv3Yy/TJJ3Nzl7uSmWS3GurxA9lQRKHbO6G8556VIqPXbBznr8XMTPU6uXHZv4VvayxZQXX2XYvvV8A0y2uGllj6xNzHFMmaeUlYKYLOCoOHIg0lo+LJ/GyV+XWZu/zF2TasxAG3uVRUe+QSY8g== X-OriginatorOrg: arm.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 23 Jun 2020 13:43:33.9979 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 5419a46e-9604-46b9-3d3c-08d8177b6c7d X-MS-Exchange-CrossTenant-Id: f34e5979-57d9-4aaa-ad4d-b122a662184d X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=f34e5979-57d9-4aaa-ad4d-b122a662184d;Ip=[63.35.35.123];Helo=[64aa7808-outbound-1.mta.getcheckrecipient.com] X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM0PR08MB3553 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain Parsing command line parameters is done in the shell=0D command wrapper. This declutters the core code and improves=0D modular design.=0D =0D Cc: Ray Ni =0D Cc: Zhichao Gao =0D Reviewed-by: Zhichao Gao =0D Signed-off-by: Tomas Pilar =0D ---=0D .../UefiShellAcpiViewCommandLib/AcpiView.c | 205 ----------------=0D .../UefiShellAcpiViewCommandLib/AcpiView.h | 18 +-=0D .../UefiShellAcpiViewCommandLib.c | 218 +++++++++++++++++-=0D .../UefiShellAcpiViewCommandLib.h | 10 +-=0D 4 files changed, 240 insertions(+), 211 deletions(-)=0D =0D diff --git a/ShellPkg/Library/UefiShellAcpiViewCommandLib/AcpiView.c b/Shel= lPkg/Library/UefiShellAcpiViewCommandLib/AcpiView.c=0D index 40778374af45..e524fcb0b27a 100644=0D --- a/ShellPkg/Library/UefiShellAcpiViewCommandLib/AcpiView.c=0D +++ b/ShellPkg/Library/UefiShellAcpiViewCommandLib/AcpiView.c=0D @@ -32,19 +32,6 @@ EFI_HII_HANDLE gShellAcpiViewHiiHandle =3D NULL;=0D STATIC UINT32 mTableCount;=0D STATIC UINT32 mBinTableCount;=0D =0D -/**=0D - An array of acpiview command line parameters.=0D -**/=0D -STATIC CONST SHELL_PARAM_ITEM ParamList[] =3D {=0D - {L"-q", TypeFlag},=0D - {L"-d", TypeFlag},=0D - {L"-h", TypeFlag},=0D - {L"-l", TypeFlag},=0D - {L"-s", TypeValue},=0D - {L"-r", TypeValue},=0D - {NULL, TypeMax}=0D -};=0D -=0D /**=0D This function dumps the ACPI table to a file.=0D =0D @@ -228,7 +215,6 @@ ProcessTableReportOptions (=0D Returns EFI_UNSUPPORTED if the RSDP version is less than 2.=0D Returns EFI_SUCCESS if successful.=0D **/=0D -STATIC=0D EFI_STATUS=0D EFIAPI=0D AcpiView (=0D @@ -372,194 +358,3 @@ AcpiView (=0D }=0D return EFI_SUCCESS;=0D }=0D -=0D -/**=0D - Function for 'acpiview' command.=0D -=0D - @param[in] ImageHandle Handle to the Image (NULL if Internal).=0D - @param[in] SystemTable Pointer to the System Table (NULL if Internal).= =0D -**/=0D -SHELL_STATUS=0D -EFIAPI=0D -ShellCommandRunAcpiView (=0D - IN EFI_HANDLE ImageHandle,=0D - IN EFI_SYSTEM_TABLE* SystemTable=0D - )=0D -{=0D - EFI_STATUS Status;=0D - SHELL_STATUS ShellStatus;=0D - LIST_ENTRY* Package;=0D - CHAR16* ProblemParam;=0D - SHELL_FILE_HANDLE TmpDumpFileHandle;=0D - CONST CHAR16* MandatoryTableSpecStr;=0D - CONST CHAR16 *SelectedTableName;=0D -=0D - // Set configuration defaults=0D - AcpiConfigSetDefaults ();=0D -=0D - ShellStatus =3D SHELL_SUCCESS;=0D - Package =3D NULL;=0D - TmpDumpFileHandle =3D NULL;=0D -=0D - Status =3D ShellCommandLineParse (ParamList, &Package, &ProblemParam, TR= UE);=0D - if (EFI_ERROR (Status)) {=0D - if (Status =3D=3D EFI_VOLUME_CORRUPTED && ProblemParam !=3D NULL) {=0D - ShellPrintHiiEx (=0D - -1,=0D - -1,=0D - NULL,=0D - STRING_TOKEN (STR_GEN_PROBLEM),=0D - gShellAcpiViewHiiHandle,=0D - L"acpiview",=0D - ProblemParam=0D - );=0D - FreePool (ProblemParam);=0D - } else {=0D - Print (L"acpiview: Error processing input parameter(s)\n");=0D - }=0D - ShellStatus =3D SHELL_INVALID_PARAMETER;=0D - } else {=0D - if (ShellCommandLineGetCount (Package) > 1) {=0D - ShellPrintHiiEx (=0D - -1,=0D - -1,=0D - NULL,=0D - STRING_TOKEN (STR_GEN_TOO_MANY),=0D - gShellAcpiViewHiiHandle,=0D - L"acpiview"=0D - );=0D - ShellStatus =3D SHELL_INVALID_PARAMETER;=0D - } else if (ShellCommandLineGetFlag (Package, L"-?")) {=0D - ShellPrintHiiEx (=0D - -1,=0D - -1,=0D - NULL,=0D - STRING_TOKEN (STR_GET_HELP_ACPIVIEW),=0D - gShellAcpiViewHiiHandle,=0D - L"acpiview"=0D - );=0D - } else if (ShellCommandLineGetFlag (Package, L"-s") &&=0D - ShellCommandLineGetValue (Package, L"-s") =3D=3D NULL) {=0D - ShellPrintHiiEx (=0D - -1,=0D - -1,=0D - NULL,=0D - STRING_TOKEN (STR_GEN_NO_VALUE),=0D - gShellAcpiViewHiiHandle,=0D - L"acpiview",=0D - L"-s"=0D - );=0D - ShellStatus =3D SHELL_INVALID_PARAMETER;=0D - } else if (ShellCommandLineGetFlag (Package, L"-r") &&=0D - ShellCommandLineGetValue (Package, L"-r") =3D=3D NULL) {=0D - ShellPrintHiiEx (=0D - -1,=0D - -1,=0D - NULL,=0D - STRING_TOKEN (STR_GEN_NO_VALUE),=0D - gShellAcpiViewHiiHandle,=0D - L"acpiview",=0D - L"-r"=0D - );=0D - ShellStatus =3D SHELL_INVALID_PARAMETER;=0D - } else if ((ShellCommandLineGetFlag (Package, L"-s") &&=0D - ShellCommandLineGetFlag (Package, L"-l"))) {=0D - ShellPrintHiiEx (=0D - -1,=0D - -1,=0D - NULL,=0D - STRING_TOKEN (STR_GEN_TOO_MANY),=0D - gShellAcpiViewHiiHandle,=0D - L"acpiview"=0D - );=0D - ShellStatus =3D SHELL_INVALID_PARAMETER;=0D - } else if (ShellCommandLineGetFlag (Package, L"-d") &&=0D - !ShellCommandLineGetFlag (Package, L"-s")) {=0D - ShellPrintHiiEx (=0D - -1,=0D - -1,=0D - NULL,=0D - STRING_TOKEN (STR_GEN_MISSING_OPTION),=0D - gShellAcpiViewHiiHandle,=0D - L"acpiview",=0D - L"-s",=0D - L"-d"=0D - );=0D - ShellStatus =3D SHELL_INVALID_PARAMETER;=0D - } else {=0D - // Turn on colour highlighting if requested=0D - SetColourHighlighting (ShellCommandLineGetFlag (Package, L"-h"));=0D -=0D - // Surpress consistency checking if requested=0D - SetConsistencyChecking (!ShellCommandLineGetFlag (Package, L"-q"));= =0D -=0D - // Evaluate the parameters for mandatory ACPI table presence checks= =0D - SetMandatoryTableValidate (ShellCommandLineGetFlag (Package, L"-r"))= ;=0D - MandatoryTableSpecStr =3D ShellCommandLineGetValue (Package, L"-r");= =0D -=0D - if (MandatoryTableSpecStr !=3D NULL) {=0D - SetMandatoryTableSpec (ShellHexStrToUintn (MandatoryTableSpecStr))= ;=0D - }=0D -=0D - if (ShellCommandLineGetFlag (Package, L"-l")) {=0D - SetReportOption (ReportTableList);=0D - } else {=0D - SelectedTableName =3D ShellCommandLineGetValue (Package, L"-s");=0D - if (SelectedTableName !=3D NULL) {=0D - SelectAcpiTable (SelectedTableName);=0D - SetReportOption (ReportSelected);=0D -=0D - if (ShellCommandLineGetFlag (Package, L"-d")) {=0D - // Create a temporary file to check if the media is writable.= =0D - CHAR16 FileNameBuffer[MAX_FILE_NAME_LEN];=0D - SetReportOption (ReportDumpBinFile);=0D -=0D - UnicodeSPrint (=0D - FileNameBuffer,=0D - sizeof (FileNameBuffer),=0D - L".\\%s%04d.tmp",=0D - SelectedTableName,=0D - mBinTableCount=0D - );=0D -=0D - Status =3D ShellOpenFileByName (=0D - FileNameBuffer,=0D - &TmpDumpFileHandle,=0D - EFI_FILE_MODE_READ | EFI_FILE_MODE_WRITE |=0D - EFI_FILE_MODE_CREATE,=0D - 0=0D - );=0D -=0D - if (EFI_ERROR (Status)) {=0D - ShellStatus =3D SHELL_INVALID_PARAMETER;=0D - TmpDumpFileHandle =3D NULL;=0D - ShellPrintHiiEx (=0D - -1,=0D - -1,=0D - NULL,=0D - STRING_TOKEN (STR_GEN_READONLY_MEDIA),=0D - gShellAcpiViewHiiHandle,=0D - L"acpiview"=0D - );=0D - goto Done;=0D - }=0D - // Delete Temporary file.=0D - ShellDeleteFile (&TmpDumpFileHandle);=0D - } // -d=0D - } // -s=0D - }=0D -=0D - // Parse ACPI Table information=0D - Status =3D AcpiView (SystemTable);=0D - if (EFI_ERROR (Status)) {=0D - ShellStatus =3D SHELL_NOT_FOUND;=0D - }=0D - }=0D - }=0D -=0D -Done:=0D - if (Package !=3D NULL) {=0D - ShellCommandLineFreeVarList (Package);=0D - }=0D - return ShellStatus;=0D -}=0D diff --git a/ShellPkg/Library/UefiShellAcpiViewCommandLib/AcpiView.h b/Shel= lPkg/Library/UefiShellAcpiViewCommandLib/AcpiView.h=0D index 92d64a88814d..d5b95f5ee707 100644=0D --- a/ShellPkg/Library/UefiShellAcpiViewCommandLib/AcpiView.h=0D +++ b/ShellPkg/Library/UefiShellAcpiViewCommandLib/AcpiView.h=0D @@ -64,7 +64,7 @@ GetWarningCount (=0D =0D @param [in] Signature The ACPI table Signature.=0D @param [in] TablePtr Pointer to the ACPI table data.=0D - @param [in] Length The length fo the ACPI table.=0D + @param [in] Length The length of the ACPI table.=0D =0D @retval Returns TRUE if the ACPI table should be traced.=0D **/=0D @@ -75,4 +75,20 @@ ProcessTableReportOptions (=0D IN CONST UINT32 Length=0D );=0D =0D +/**=0D + This function iterates the configuration table entries in the=0D + system table, retrieves the RSDP pointer and starts parsing the ACPI tab= les.=0D +=0D + @param [in] SystemTable Pointer to the EFI system table.=0D +=0D + @retval EFI_NOT_FOUND The RSDP pointer was not found.=0D + @retval EFI_UNSUPPORTED The RSDP version was less than 2.=0D + @retval EFI_SUCCESS The command was successful.=0D +**/=0D +EFI_STATUS=0D +EFIAPI=0D +AcpiView (=0D + IN EFI_SYSTEM_TABLE* SystemTable=0D + );=0D +=0D #endif // ACPIVIEW_H_=0D diff --git a/ShellPkg/Library/UefiShellAcpiViewCommandLib/UefiShellAcpiView= CommandLib.c b/ShellPkg/Library/UefiShellAcpiViewCommandLib/UefiShellAcpiVi= ewCommandLib.c=0D index e0d5a8108552..c3942ad24e5b 100644=0D --- a/ShellPkg/Library/UefiShellAcpiViewCommandLib/UefiShellAcpiViewCommand= Lib.c=0D +++ b/ShellPkg/Library/UefiShellAcpiViewCommandLib/UefiShellAcpiViewCommand= Lib.c=0D @@ -1,24 +1,44 @@=0D /** @file=0D Main file for 'acpiview' Shell command function.=0D =0D - Copyright (c) 2016 - 2019, ARM Limited. All rights reserved.
=0D + Copyright (c) 2016 - 2020, ARM Limited. All rights reserved.
=0D SPDX-License-Identifier: BSD-2-Clause-Patent=0D **/=0D =0D #include =0D #include =0D +=0D +#include =0D #include =0D +#include =0D +#include =0D #include =0D -#include =0D +#include =0D #include =0D +#include =0D #include =0D +=0D #include "AcpiParser.h"=0D #include "AcpiTableParser.h"=0D #include "AcpiView.h"=0D +#include "AcpiViewConfig.h"=0D #include "UefiShellAcpiViewCommandLib.h"=0D =0D CONST CHAR16 gShellAcpiViewFileName[] =3D L"ShellCommand";=0D =0D +/**=0D + An array of acpiview command line parameters.=0D +**/=0D +STATIC CONST SHELL_PARAM_ITEM ParamList[] =3D {=0D + {L"-q", TypeFlag},=0D + {L"-d", TypeFlag},=0D + {L"-h", TypeFlag},=0D + {L"-l", TypeFlag},=0D + {L"-s", TypeValue},=0D + {L"-r", TypeValue},=0D + {NULL, TypeMax}=0D +};=0D +=0D /**=0D A list of available table parsers.=0D */=0D @@ -92,6 +112,200 @@ ShellCommandGetManFileNameAcpiView (=0D return gShellAcpiViewFileName;=0D }=0D =0D +/**=0D + Function for 'acpiview' command.=0D +=0D + @param[in] ImageHandle Handle to the Image (NULL if internal).=0D + @param[in] SystemTable Pointer to the System Table (NULL if internal).= =0D +=0D + @retval SHELL_INVALID_PARAMETER The command line invocation could not be= parsed=0D + @retval SHELL_NOT_FOUND The command failed=0D + @retval SHELL_SUCCESS The command was successful=0D +**/=0D +SHELL_STATUS=0D +EFIAPI=0D +ShellCommandRunAcpiView (=0D + IN EFI_HANDLE ImageHandle,=0D + IN EFI_SYSTEM_TABLE* SystemTable=0D + )=0D +{=0D + EFI_STATUS Status;=0D + SHELL_STATUS ShellStatus;=0D + LIST_ENTRY* Package;=0D + CHAR16* ProblemParam;=0D + SHELL_FILE_HANDLE TmpDumpFileHandle;=0D + CONST CHAR16* MandatoryTableSpecStr;=0D + CONST CHAR16* SelectedTableName;=0D +=0D + // Set configuration defaults=0D + AcpiConfigSetDefaults ();=0D +=0D + ShellStatus =3D SHELL_SUCCESS;=0D + Package =3D NULL;=0D + TmpDumpFileHandle =3D NULL;=0D +=0D + Status =3D ShellCommandLineParse (ParamList, &Package, &ProblemParam, TR= UE);=0D + if (EFI_ERROR (Status)) {=0D + if (Status =3D=3D EFI_VOLUME_CORRUPTED && ProblemParam !=3D NULL) {=0D + ShellPrintHiiEx (=0D + -1,=0D + -1,=0D + NULL,=0D + STRING_TOKEN (STR_GEN_PROBLEM),=0D + gShellAcpiViewHiiHandle,=0D + L"acpiview",=0D + ProblemParam=0D + );=0D + FreePool (ProblemParam);=0D + } else {=0D + Print (L"acpiview: Error processing input parameter(s)\n");=0D + }=0D + ShellStatus =3D SHELL_INVALID_PARAMETER;=0D + } else {=0D + if (ShellCommandLineGetCount (Package) > 1) {=0D + ShellPrintHiiEx (=0D + -1,=0D + -1,=0D + NULL,=0D + STRING_TOKEN (STR_GEN_TOO_MANY),=0D + gShellAcpiViewHiiHandle,=0D + L"acpiview"=0D + );=0D + ShellStatus =3D SHELL_INVALID_PARAMETER;=0D + } else if (ShellCommandLineGetFlag (Package, L"-?")) {=0D + ShellPrintHiiEx (=0D + -1,=0D + -1,=0D + NULL,=0D + STRING_TOKEN (STR_GET_HELP_ACPIVIEW),=0D + gShellAcpiViewHiiHandle,=0D + L"acpiview"=0D + );=0D + } else if (ShellCommandLineGetFlag (Package, L"-s") &&=0D + ShellCommandLineGetValue (Package, L"-s") =3D=3D NULL) {=0D + ShellPrintHiiEx (=0D + -1,=0D + -1,=0D + NULL,=0D + STRING_TOKEN (STR_GEN_NO_VALUE),=0D + gShellAcpiViewHiiHandle,=0D + L"acpiview",=0D + L"-s"=0D + );=0D + ShellStatus =3D SHELL_INVALID_PARAMETER;=0D + } else if (ShellCommandLineGetFlag (Package, L"-r") &&=0D + ShellCommandLineGetValue (Package, L"-r") =3D=3D NULL) {=0D + ShellPrintHiiEx (=0D + -1,=0D + -1,=0D + NULL,=0D + STRING_TOKEN (STR_GEN_NO_VALUE),=0D + gShellAcpiViewHiiHandle,=0D + L"acpiview",=0D + L"-r"=0D + );=0D + ShellStatus =3D SHELL_INVALID_PARAMETER;=0D + } else if ((ShellCommandLineGetFlag (Package, L"-s") &&=0D + ShellCommandLineGetFlag (Package, L"-l"))) {=0D + ShellPrintHiiEx (=0D + -1,=0D + -1,=0D + NULL,=0D + STRING_TOKEN (STR_GEN_TOO_MANY),=0D + gShellAcpiViewHiiHandle,=0D + L"acpiview"=0D + );=0D + ShellStatus =3D SHELL_INVALID_PARAMETER;=0D + } else if (ShellCommandLineGetFlag (Package, L"-d") &&=0D + !ShellCommandLineGetFlag (Package, L"-s")) {=0D + ShellPrintHiiEx (=0D + -1,=0D + -1,=0D + NULL,=0D + STRING_TOKEN (STR_GEN_MISSING_OPTION),=0D + gShellAcpiViewHiiHandle,=0D + L"acpiview",=0D + L"-s",=0D + L"-d"=0D + );=0D + ShellStatus =3D SHELL_INVALID_PARAMETER;=0D + } else {=0D + // Turn on colour highlighting if requested=0D + SetColourHighlighting (ShellCommandLineGetFlag (Package, L"-h"));=0D +=0D + // Surpress consistency checking if requested=0D + SetConsistencyChecking (!ShellCommandLineGetFlag (Package, L"-q"));= =0D +=0D + // Evaluate the parameters for mandatory ACPI table presence checks= =0D + SetMandatoryTableValidate (ShellCommandLineGetFlag (Package, L"-r"))= ;=0D + MandatoryTableSpecStr =3D ShellCommandLineGetValue (Package, L"-r");= =0D +=0D + if (MandatoryTableSpecStr !=3D NULL) {=0D + SetMandatoryTableSpec (ShellHexStrToUintn (MandatoryTableSpecStr))= ;=0D + }=0D +=0D + if (ShellCommandLineGetFlag (Package, L"-l")) {=0D + SetReportOption (ReportTableList);=0D + } else {=0D + SelectedTableName =3D ShellCommandLineGetValue (Package, L"-s");=0D + if (SelectedTableName !=3D NULL) {=0D + SelectAcpiTable (SelectedTableName);=0D + SetReportOption (ReportSelected);=0D +=0D + if (ShellCommandLineGetFlag (Package, L"-d")) {=0D + // Create a temporary file to check if the media is writable.= =0D + CHAR16 FileNameBuffer[MAX_FILE_NAME_LEN];=0D + SetReportOption (ReportDumpBinFile);=0D +=0D + UnicodeSPrint (=0D + FileNameBuffer,=0D + sizeof (FileNameBuffer),=0D + L".\\%s0000.tmp",=0D + SelectedTableName=0D + );=0D +=0D + Status =3D ShellOpenFileByName (=0D + FileNameBuffer,=0D + &TmpDumpFileHandle,=0D + EFI_FILE_MODE_READ | EFI_FILE_MODE_WRITE |=0D + EFI_FILE_MODE_CREATE,=0D + 0=0D + );=0D +=0D + if (EFI_ERROR (Status)) {=0D + ShellStatus =3D SHELL_INVALID_PARAMETER;=0D + TmpDumpFileHandle =3D NULL;=0D + ShellPrintHiiEx (=0D + -1,=0D + -1,=0D + NULL,=0D + STRING_TOKEN (STR_GEN_READONLY_MEDIA),=0D + gShellAcpiViewHiiHandle,=0D + L"acpiview"=0D + );=0D + goto Done;=0D + }=0D + // Delete Temporary file.=0D + ShellDeleteFile (&TmpDumpFileHandle);=0D + } // -d=0D + } // -s=0D + }=0D +=0D + // Parse ACPI Table information=0D + Status =3D AcpiView (SystemTable);=0D + if (EFI_ERROR (Status)) {=0D + ShellStatus =3D SHELL_NOT_FOUND;=0D + }=0D + }=0D + }=0D +=0D +Done:=0D + if (Package !=3D NULL) {=0D + ShellCommandLineFreeVarList (Package);=0D + }=0D + return ShellStatus;=0D +}=0D +=0D /**=0D Constructor for the Shell AcpiView Command library.=0D =0D diff --git a/ShellPkg/Library/UefiShellAcpiViewCommandLib/UefiShellAcpiView= CommandLib.h b/ShellPkg/Library/UefiShellAcpiViewCommandLib/UefiShellAcpiVi= ewCommandLib.h=0D index c1cf7a57af7a..a3a29164004d 100644=0D --- a/ShellPkg/Library/UefiShellAcpiViewCommandLib/UefiShellAcpiViewCommand= Lib.h=0D +++ b/ShellPkg/Library/UefiShellAcpiViewCommandLib/UefiShellAcpiViewCommand= Lib.h=0D @@ -1,7 +1,7 @@=0D /** @file=0D Header file for 'acpiview' Shell command functions.=0D =0D - Copyright (c) 2016 - 2017, ARM Limited. All rights reserved.
=0D + Copyright (c) 2016 - 2020, ARM Limited. All rights reserved.
=0D SPDX-License-Identifier: BSD-2-Clause-Patent=0D **/=0D =0D @@ -13,8 +13,12 @@ extern EFI_HII_HANDLE gShellAcpiViewHiiHandle;=0D /**=0D Function for 'acpiview' command.=0D =0D - @param[in] ImageHandle Handle to the Image (NULL if Internal).=0D - @param[in] SystemTable Pointer to the System Table (NULL if Internal).= =0D + @param[in] ImageHandle Handle to the Image (NULL if internal).=0D + @param[in] SystemTable Pointer to the System Table (NULL if internal).= =0D +=0D + @retval SHELL_INVALID_PARAMETER The command line invocation could not be= parsed=0D + @retval SHELL_NOT_FOUND The command failed=0D + @retval SHELL_SUCCESS The command was successful=0D **/=0D SHELL_STATUS=0D EFIAPI=0D -- =0D 2.24.1.windows.2=0D =0D