Mike, Could you please check the updated patch which tries to use PciRootBridgeIo firstly, then CpuIo, then IO library for MMIO and IO access?
Regards, Ray -----Original Message----- From: edk2-devel [mailto:edk2-devel-boun...@lists.01.org] On Behalf Of Ruiyu Ni Sent: Wednesday, December 2, 2015 1:54 PM To: edk2-devel@lists.01.org Cc: Ni, Ruiyu <ruiyu...@intel.com>; Qiu, Shumin <shumin....@intel.com> Subject: [edk2] [Patch 2/2] ShellPkg/mm: Fix mm to support multiple root bridge platform In multiple root bridge platforms, different root bridges may share the same segment but occupy different range of buses, or may occupy different segments. The fix is to find the correct root bridge IO instance by comparing not only the segment but also the bus ranges. Directly use Cpu Io for MMIO and IO accesses because some MMIO or IO is not occupied by PCI devices so it doesn't make sense to use root bridge IO to access them. Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Ruiyu Ni <ruiyu...@intel.com> Cc: Shumin Qiu <shumin....@intel.com> --- ShellPkg/Library/UefiShellDebug1CommandsLib/Mm.c | 329 +++++++++++---------- .../UefiShellDebug1CommandsLib.h | 3 +- .../UefiShellDebug1CommandsLib.inf | 1 + .../UefiShellDebug1CommandsLib.uni | Bin 139696 -> 139768 bytes 4 files changed, 181 insertions(+), 152 deletions(-) diff --git a/ShellPkg/Library/UefiShellDebug1CommandsLib/Mm.c b/ShellPkg/Library/UefiShellDebug1CommandsLib/Mm.c index ca64f2c..fa1451c 100644 --- a/ShellPkg/Library/UefiShellDebug1CommandsLib/Mm.c +++ b/ShellPkg/Library/UefiShellDebug1CommandsLib/Mm.c @@ -2,7 +2,7 @@ Main file for Mm shell Debug1 function. (C) Copyright 2015 Hewlett-Packard Development Company, L.P.<BR> - Copyright (c) 2005 - 2014, Intel Corporation. All rights reserved.<BR> + Copyright (c) 2005 - 2015, Intel Corporation. All rights reserved.<BR> This program and the accompanying materials are licensed and made available under the terms and conditions of the BSD License which accompanies this distribution. The full text of the license may be found at @@ -19,12 +19,30 @@ #include <Protocol/DeviceIo.h> typedef enum { - EfiMemory, - EFIMemoryMappedIo, - EfiIo, - EfiPciConfig, - EfiPciEConfig -} EFI_ACCESS_TYPE; + ShellMmMemory, + ShellMmMemoryMappedIo, + ShellMmIo, + ShellMmPci, + ShellMmPciExpress +} SHELL_MM_ACCESS_TYPE; + +typedef struct { + UINT64 Register : 12; + UINT64 Function : 8; + UINT64 Device : 8; + UINT64 Bus : 8; + UINT64 Segment : 8; + UINT64 Reserved : 20; +} SHELL_MM_PCIE_ADDRESS; + +typedef struct { + UINT64 Register : 8; + UINT64 Function : 8; + UINT64 Device : 8; + UINT64 Bus : 8; + UINT64 Segment : 8; + UINT64 Reserved : 24; +} SHELL_MM_PCI_ADDRESS; STATIC CONST SHELL_PARAM_ITEM ParamList[] = { {L"-mmio", TypeFlag}, @@ -37,7 +55,7 @@ STATIC CONST SHELL_PARAM_ITEM ParamList[] = { {NULL, TypeMax} }; -STATIC CONST UINT64 MaxNum[9] = { 0xff, 0xffff, 0xffffffff, 0xffffffffffffffffULL }; +STATIC CONST UINT64 mShellMmMaxNumber[9] = { 0xff, 0xffff, 0xffffffff, 0xffffffffffffffffULL }; /** Read some data into a buffer from memory. @@ -176,22 +194,43 @@ GetHex ( } /** - Get the PCI-E Address from a PCI address format 0x0000ssbbddffrrr - where ss is SEGMENT, bb is BUS, dd is DEVICE, ff is FUNCTION - and rrr is REGISTER (extension format for PCI-E). - - @param[in] InputAddress PCI address format on input. - @param[out]PciEAddress PCI-E address extention format. + Extract the PCI segment, bus, device, function, register from + from a SHELL_MM_PCI or SHELL_MM_PCIE format of address.. + + @param[in] AccessType Access type. + @param[in] Address SHELL_MM_PCI or SHELL_MM_PCIE address. + @param[out] Segment PCI segment number. + @param[out] Bus PCI bus number. + @param[out] Device PCI device number. + @param[out] Function PCI function number. + @param[out] Register PCI register offset. **/ VOID EFIAPI -GetPciEAddressFromInputAddress ( - IN UINT64 InputAddress, - OUT UINT64 *PciEAddress +ShellMmDecodePciAddress ( + IN SHELL_MM_ACCESS_TYPE AccessType, + IN UINT64 Address, + OUT UINT32 *Segment, + OUT UINT8 *Bus, + OUT UINT8 *Device, + OUT UINT8 *Function, + OUT UINT32 *Register ) { - *PciEAddress = RShiftU64(InputAddress & ~(UINT64) 0xFFF, 4); - *PciEAddress += LShiftU64((UINT16) InputAddress & 0x0FFF, 32); + ASSERT ((AccessType == ShellMmPci) || (AccessType == ShellMmPciExpress)); + if (AccessType == ShellMmPci) { + *Segment = (UINT32) ((SHELL_MM_PCI_ADDRESS *) (&Address))->Segment; + *Bus = (UINT8) ((SHELL_MM_PCI_ADDRESS *) (&Address))->Bus; + *Device = (UINT8) ((SHELL_MM_PCI_ADDRESS *) (&Address))->Device; + *Function = (UINT8) ((SHELL_MM_PCI_ADDRESS *) (&Address))->Function; + *Register = (UINT32) ((SHELL_MM_PCI_ADDRESS *) (&Address))->Register; + } else { + *Segment = (UINT32) ((SHELL_MM_PCIE_ADDRESS *) (&Address))->Segment; + *Bus = (UINT8) ((SHELL_MM_PCIE_ADDRESS *) (&Address))->Bus; + *Device = (UINT8) ((SHELL_MM_PCIE_ADDRESS *) (&Address))->Device; + *Function = (UINT8) ((SHELL_MM_PCIE_ADDRESS *) (&Address))->Function; + *Register = (UINT32) ((SHELL_MM_PCIE_ADDRESS *) (&Address))->Register; + } } /** @@ -207,36 +246,38 @@ ShellCommandRunMm ( IN EFI_SYSTEM_TABLE *SystemTable ) { - EFI_STATUS Status; - EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL *IoDev; - UINT64 Address; - UINT64 PciEAddress; - UINT64 Value; - UINT32 SegmentNumber; - EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_WIDTH Width; - EFI_ACCESS_TYPE AccessType; - UINT64 Buffer; - UINTN Index; - UINTN Size; -// CHAR16 *ValueStr; - BOOLEAN Complete; - CHAR16 *InputStr; - BOOLEAN Interactive; - EFI_HANDLE *HandleBuffer; - UINTN BufferSize; - UINTN ItemValue; - LIST_ENTRY *Package; - CHAR16 *ProblemParam; - SHELL_STATUS ShellStatus; - CONST CHAR16 *Temp; + EFI_STATUS Status; + EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL *PciRootBridgeIo; + EFI_CPU_IO2_PROTOCOL *CpuIo; + UINT64 Address; + UINT64 Value; + UINT32 Segment; + UINT8 Bus; + UINT8 Device; + UINT8 Function; + UINT32 Register; + EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_WIDTH Width; + EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR *Descriptors; + SHELL_MM_ACCESS_TYPE AccessType; + UINT64 Buffer; + UINTN Index; + UINT32 Size; + BOOLEAN Complete; + CHAR16 *InputStr; + BOOLEAN Interactive; + EFI_HANDLE *HandleBuffer; + UINTN HandleCount; + UINTN ItemValue; + LIST_ENTRY *Package; + CHAR16 *ProblemParam; + SHELL_STATUS ShellStatus; + CONST CHAR16 *Temp; Value = 0; Address = 0; - PciEAddress = 0; - IoDev = NULL; + PciRootBridgeIo = NULL; HandleBuffer = NULL; - BufferSize = 0; - SegmentNumber = 0; + HandleCount = 0; ShellStatus = SHELL_SUCCESS; InputStr = NULL; @@ -245,8 +286,7 @@ ShellCommandRunMm ( // Width = EfiPciWidthUint8; Size = 1; - AccessType = EfiMemory; -// ValueStr = NULL; + AccessType = ShellMmMemory; Interactive = TRUE; Package = NULL; @@ -275,7 +315,7 @@ ShellCommandRunMm ( goto Done; } else { if (ShellCommandLineGetFlag(Package, L"-mmio")) { - AccessType = EFIMemoryMappedIo; + AccessType = ShellMmMemoryMappedIo; if (ShellCommandLineGetFlag(Package, L"-mem") ||ShellCommandLineGetFlag(Package, L"-io") ||ShellCommandLineGetFlag(Package, L"-pci") @@ -286,7 +326,7 @@ ShellCommandRunMm ( goto Done; } } else if (ShellCommandLineGetFlag(Package, L"-mem")) { - AccessType = EfiMemory; + AccessType = ShellMmMemory; if (ShellCommandLineGetFlag(Package, L"-io") ||ShellCommandLineGetFlag(Package, L"-pci") ||ShellCommandLineGetFlag(Package, L"-pcie") @@ -296,7 +336,7 @@ ShellCommandRunMm ( goto Done; } } else if (ShellCommandLineGetFlag(Package, L"-io")) { - AccessType = EfiIo; + AccessType = ShellMmIo; if (ShellCommandLineGetFlag(Package, L"-pci") ||ShellCommandLineGetFlag(Package, L"-pcie") ){ @@ -305,7 +345,7 @@ ShellCommandRunMm ( goto Done; } } else if (ShellCommandLineGetFlag(Package, L"-pci")) { - AccessType = EfiPciConfig; + AccessType = ShellMmPci; if (ShellCommandLineGetFlag(Package, L"-pcie") ){ ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_TOO_MANY), gShellDebug1HiiHandle, L"mm"); @@ -313,7 +353,7 @@ ShellCommandRunMm ( goto Done; } } else if (ShellCommandLineGetFlag(Package, L"-pcie")) { - AccessType = EfiPciEConfig; + AccessType = ShellMmPciExpress; } } @@ -375,27 +415,9 @@ ShellCommandRunMm ( ShellStatus = SHELL_INVALID_PARAMETER; goto Done; } - switch (Size) { - case 1: - if (Value > 0xFF) { - ShellStatus = SHELL_INVALID_PARAMETER; - } - break; - case 2: - if (Value > 0xFFFF) { - ShellStatus = SHELL_INVALID_PARAMETER; - } - break; - - case 4: - if (Value > 0xFFFFFFFF) { - ShellStatus = SHELL_INVALID_PARAMETER; - } - break; - - default: - break; + if (Value > mShellMmMaxNumber[Width]) { + ShellStatus = SHELL_INVALID_PARAMETER; } if (ShellStatus != SHELL_SUCCESS) { @@ -413,77 +435,87 @@ ShellCommandRunMm ( // // locate DeviceIO protocol interface // - if (AccessType != EfiMemory) { + if ((AccessType == ShellMmPci) || (AccessType == ShellMmPciExpress)) { + ShellMmDecodePciAddress (AccessType, Address, &Segment, &Bus, &Device, &Function, &Register); + Status = gBS->LocateHandleBuffer ( - ByProtocol, - &gEfiPciRootBridgeIoProtocolGuid, - NULL, - &BufferSize, - &HandleBuffer - ); + ByProtocol, + &gEfiPciRootBridgeIoProtocolGuid, + NULL, + &HandleCount, + &HandleBuffer + ); if (EFI_ERROR (Status)) { ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_PCIRBIO_NF), gShellDebug1HiiHandle, L"mm"); ShellStatus = SHELL_NOT_FOUND; goto Done; } + // - // In the case of PCI or PCIE - // Get segment number and mask the segment bits in Address - // - if (AccessType == EfiPciEConfig) { - SegmentNumber = (UINT32) RShiftU64 (Address, 36) & 0xff; - Address &= 0xfffffffffULL; - } else { - if (AccessType == EfiPciConfig) { - SegmentNumber = (UINT32) RShiftU64 (Address, 32) & 0xff; - Address &= 0xffffffff; - } - } - // - // Find the EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL of the specified segment number + // Find the EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL of the specified segment & bus number // - for (Index = 0; Index < BufferSize; Index++) { + for (Index = 0; Index < HandleCount; Index++) { Status = gBS->HandleProtocol ( - HandleBuffer[Index], - &gEfiPciRootBridgeIoProtocolGuid, - (VOID *) &IoDev - ); - if (EFI_ERROR (Status)) { - continue; + HandleBuffer[Index], + &gEfiPciRootBridgeIoProtocolGuid, + (VOID *) &PciRootBridgeIo + ); + if (!EFI_ERROR (Status) && (PciRootBridgeIo->SegmentNumber == Segment)) { + Status = PciRootBridgeIo->Configuration (PciRootBridgeIo, (VOID **) &Descriptors); + } + if (!EFI_ERROR (Status)) { + Status = EFI_NOT_FOUND; + while (Descriptors->Desc != ACPI_END_TAG_DESCRIPTOR) { + if (Descriptors->ResType == ACPI_ADDRESS_SPACE_TYPE_BUS) { + if ((Bus >= Descriptors->AddrRangeMin) && (Bus <= Descriptors->AddrRangeMax)) { + Status = EFI_SUCCESS; + break; + } + } + Descriptors++; + } } - if (IoDev->SegmentNumber != SegmentNumber) { - IoDev = NULL; + + if (!EFI_ERROR (Status)) { + break; } } - if (IoDev == NULL) { - ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_MM_SEGMENT_NOT_FOUND), gShellDebug1HiiHandle, L"mm", SegmentNumber); + if (HandleBuffer != NULL) { + FreePool (HandleBuffer); + } + if (Index == HandleCount) { + ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_MM_PCIE_ADDRESS_RANGE), gShellDebug1HiiHandle, L"mm", Address); ShellStatus = SHELL_INVALID_PARAMETER; - goto Done; } + } else { + Status = gBS->LocateProtocol (&gEfiCpuIo2ProtocolGuid, NULL, (VOID **) &CpuIo); } - if (AccessType == EfiIo && Address + Size > 0x10000) { - ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_MM_ADDRESS_RANGE), gShellDebug1HiiHandle, L"mm"); + if (AccessType == ShellMmIo && Address + Size > MAX_UINT16) { + ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_MM_IO_ADDRESS_RANGE), gShellDebug1HiiHandle, L"mm"); ShellStatus = SHELL_INVALID_PARAMETER; - goto Done; } - if (AccessType == EfiPciEConfig) { - GetPciEAddressFromInputAddress (Address, &PciEAddress); + if (EFI_ERROR (Status)) { + goto Done; } // // Set value // if (ShellCommandLineGetRawValue(Package, 2) != NULL) { - if (AccessType == EFIMemoryMappedIo) { - IoDev->Mem.Write (IoDev, Width, Address, 1, &Value); - } else if (AccessType == EfiIo) { - IoDev->Io.Write (IoDev, Width, Address, 1, &Value); - } else if (AccessType == EfiPciConfig) { - IoDev->Pci.Write (IoDev, Width, Address, 1, &Value); - } else if (AccessType == EfiPciEConfig) { - IoDev->Pci.Write (IoDev, Width, PciEAddress, 1, &Value); + if (AccessType == ShellMmMemoryMappedIo) { + CpuIo->Mem.Write (CpuIo, (EFI_CPU_IO_PROTOCOL_WIDTH) Width, Address, 1, &Value); + } else if (AccessType == ShellMmIo) { + CpuIo->Io.Write (CpuIo, (EFI_CPU_IO_PROTOCOL_WIDTH) Width, Address, 1, &Value); + } else if ((AccessType == ShellMmPci) || (AccessType == ShellMmPciExpress)) { + PciRootBridgeIo->Pci.Write ( + PciRootBridgeIo, + Width, + EFI_PCI_ADDRESS (Bus, Device, Function, Register), + 1, + &Value + ); } else { WriteMem (Width, Address, 1, &Value); } @@ -498,26 +530,26 @@ ShellCommandRunMm ( // if (!Interactive) { Buffer = 0; - if (AccessType == EFIMemoryMappedIo) { + if (AccessType == ShellMmMemoryMappedIo) { if (!gEfiShellProtocol->BatchIsActive()) { ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_MM_MMIO), gShellDebug1HiiHandle); } - IoDev->Mem.Read (IoDev, Width, Address, 1, &Buffer); - } else if (AccessType == EfiIo) { + CpuIo->Mem.Read (CpuIo, Width, Address, 1, &Buffer); + } else if (AccessType == ShellMmIo) { if (!gEfiShellProtocol->BatchIsActive()) { ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_MM_IO), gShellDebug1HiiHandle); } - IoDev->Io.Read (IoDev, Width, Address, 1, &Buffer); - } else if (AccessType == EfiPciConfig) { + CpuIo->Io.Read (CpuIo, Width, EFI_PCI_ADDRESS (Bus, Device, Function, Register), 1, &Buffer); + } else if (AccessType == ShellMmPci) { if (!gEfiShellProtocol->BatchIsActive()) { ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_MM_PCI), gShellDebug1HiiHandle); } - IoDev->Pci.Read (IoDev, Width, Address, 1, &Buffer); - } else if (AccessType == EfiPciEConfig) { + PciRootBridgeIo->Pci.Read (PciRootBridgeIo, Width, EFI_PCI_ADDRESS (Bus, Device, Function, Register), 1, &Buffer); + } else if (AccessType == ShellMmPciExpress) { if (!gEfiShellProtocol->BatchIsActive()) { ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_MM_PCIE), gShellDebug1HiiHandle); } - IoDev->Pci.Read (IoDev, Width, PciEAddress, 1, &Buffer); + PciRootBridgeIo->Pci.Read (PciRootBridgeIo, Width, EFI_PCI_ADDRESS (Bus, Device, Function, Register), 1, &Buffer); } else { if (!gEfiShellProtocol->BatchIsActive()) { ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_MM_MEM), gShellDebug1HiiHandle); @@ -547,24 +579,24 @@ ShellCommandRunMm ( // Complete = FALSE; do { - if (AccessType == EfiIo && Address + Size > 0x10000) { + if (AccessType == ShellMmIo && Address + Size > 0x10000) { ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_MM_ADDRESS_RANGE2), gShellDebug1HiiHandle, L"mm"); break; } Buffer = 0; - if (AccessType == EFIMemoryMappedIo) { + if (AccessType == ShellMmMemoryMappedIo) { ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_MM_MMIO), gShellDebug1HiiHandle); - IoDev->Mem.Read (IoDev, Width, Address, 1, &Buffer); - } else if (AccessType == EfiIo) { + CpuIo->Mem.Read (CpuIo, (EFI_CPU_IO_PROTOCOL_WIDTH) Width, Address, 1, &Buffer); + } else if (AccessType == ShellMmIo) { ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_MM_IO), gShellDebug1HiiHandle); - IoDev->Io.Read (IoDev, Width, Address, 1, &Buffer); - } else if (AccessType == EfiPciConfig) { + CpuIo->Io.Read (CpuIo, (EFI_CPU_IO_PROTOCOL_WIDTH) Width, Address, 1, &Buffer); + } else if (AccessType == ShellMmPci) { ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_MM_PCI), gShellDebug1HiiHandle); - IoDev->Pci.Read (IoDev, Width, Address, 1, &Buffer); - } else if (AccessType == EfiPciEConfig) { + PciRootBridgeIo->Pci.Read (PciRootBridgeIo, Width, EFI_PCI_ADDRESS (Bus, Device, Function, Register), 1, &Buffer); + } else if (AccessType == ShellMmPciExpress) { ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_MM_PCIE), gShellDebug1HiiHandle); - IoDev->Pci.Read (IoDev, Width, PciEAddress, 1, &Buffer); + PciRootBridgeIo->Pci.Read (PciRootBridgeIo, Width, EFI_PCI_ADDRESS (Bus, Device, Function, Register), 1, &Buffer); } else { ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_MM_MEM), gShellDebug1HiiHandle); ReadMem (Width, Address, 1, &Buffer); @@ -605,30 +637,28 @@ ShellCommandRunMm ( // // Continue to next address // - } else if (GetHex (InputStr + Index, &Buffer) && Buffer <= MaxNum[Width]) { - if (AccessType == EFIMemoryMappedIo) { - IoDev->Mem.Write (IoDev, Width, Address, 1, &Buffer); - } else if (AccessType == EfiIo) { - IoDev->Io.Write (IoDev, Width, Address, 1, &Buffer); - } else if (AccessType == EfiPciConfig) { - IoDev->Pci.Write (IoDev, Width, Address, 1, &Buffer); - } else if (AccessType == EfiPciEConfig) { - IoDev->Pci.Write (IoDev, Width, PciEAddress, 1, &Buffer); + } else if (GetHex (InputStr + Index, &Buffer) && Buffer <= mShellMmMaxNumber[Width]) { + if (AccessType == ShellMmMemoryMappedIo) { + PciRootBridgeIo->Mem.Write (PciRootBridgeIo, Width, Address, 1, &Buffer); + } else if (AccessType == ShellMmIo) { + PciRootBridgeIo->Io.Write (PciRootBridgeIo, Width, Address, 1, &Buffer); + } else if (AccessType == ShellMmPci) { + PciRootBridgeIo->Pci.Write (PciRootBridgeIo, Width, EFI_PCI_ADDRESS (Bus, Device, Function, Register), 1, &Buffer); + } else if (AccessType == ShellMmPciExpress) { + PciRootBridgeIo->Pci.Write (PciRootBridgeIo, Width, EFI_PCI_ADDRESS (Bus, Device, Function, Register), 1, &Buffer); } else { WriteMem (Width, Address, 1, &Buffer); } } else { ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_MM_ERROR), gShellDebug1HiiHandle, L"mm"); continue; - // PrintToken (STRING_TOKEN (STR_IOMOD_ERROR), HiiHandle); } Address += Size; - if (AccessType == EfiPciEConfig) { - GetPciEAddressFromInputAddress (Address, &PciEAddress); + if ((AccessType == ShellMmPci) || (AccessType == ShellMmPciExpress)) { + ShellMmDecodePciAddress (AccessType, Address, &Segment, &Bus, &Device, &Function, &Register); } ShellPrintEx(-1, -1, L"\r\n"); - // Print (L"\n"); } while (!Complete); } ASSERT(ShellStatus == SHELL_SUCCESS); @@ -637,9 +667,6 @@ Done: if (InputStr != NULL) { FreePool(InputStr); } - if (HandleBuffer != NULL) { - FreePool (HandleBuffer); - } if (Package != NULL) { ShellCommandLineFreeVarList (Package); } diff --git a/ShellPkg/Library/UefiShellDebug1CommandsLib/UefiShellDebug1CommandsLib.h b/ShellPkg/Library/UefiShellDebug1CommandsLib/UefiShellDebug1CommandsLib.h index d8755bf..ec15155 100644 --- a/ShellPkg/Library/UefiShellDebug1CommandsLib/UefiShellDebug1CommandsLib.h +++ b/ShellPkg/Library/UefiShellDebug1CommandsLib/UefiShellDebug1CommandsLib.h @@ -1,7 +1,7 @@ /** @file Main file for NULL named library for Profile1 shell command functions. - Copyright (c) 2010 - 2013, Intel Corporation. All rights reserved.<BR> + Copyright (c) 2010 - 2015, Intel Corporation. All rights reserved.<BR> This program and the accompanying materials are licensed and made available under the terms and conditions of the BSD License which accompanies this distribution. The full text of the license may be found at @@ -38,6 +38,7 @@ #include <Protocol/DriverFamilyOverride.h> #include <Protocol/DriverHealth.h> #include <Protocol/SimplePointer.h> +#include <Protocol/CpuIo2.h> #include <Protocol/PciRootBridgeIo.h> #include <Library/BaseLib.h> diff --git a/ShellPkg/Library/UefiShellDebug1CommandsLib/UefiShellDebug1CommandsLib.inf b/ShellPkg/Library/UefiShellDebug1CommandsLib/UefiShellDebug1CommandsLib.inf index 55371eb..3579454 100644 --- a/ShellPkg/Library/UefiShellDebug1CommandsLib/UefiShellDebug1CommandsLib.inf +++ b/ShellPkg/Library/UefiShellDebug1CommandsLib/UefiShellDebug1CommandsLib.inf @@ -125,6 +125,7 @@ gEfiPciRootBridgeIoProtocolGuid ## CONSUMES gEfiBlockIoProtocolGuid ## CONSUMES gEfiSimplePointerProtocolGuid ## CONSUMES + gEfiCpuIo2ProtocolGuid ## CONSUMES [Guids] gEfiGlobalVariableGuid ## SOMETIMES_CONSUMES ## GUID diff --git a/ShellPkg/Library/UefiShellDebug1CommandsLib/UefiShellDebug1CommandsLib.uni b/ShellPkg/Library/UefiShellDebug1CommandsLib/UefiShellDebug1CommandsLib.uni index 2608cc39bd4efe2514a63209f673707313227f71..9e4f7dc0b8c2a136402944fb0771ffbdbd9f422a 100644 GIT binary patch delta 80 zcmdmRnB&J`jtyxclP`p^F}h9`43(c;!f7=5Rj?DU0z(-?B0~;CCPNB?!gSUcM#bsN kVi^S{8*oZYP6%OR_GIt}s#l)O!C};#6S_Sol+oo305{VZ#sB~S delta 80 zcmexym}3JFrG@YYGq^IiGx!2YKZcOW7ZW5Wr|}p~o{}ZRm@?h)38U&{15Sy_2_bBg iJ0kcd7laB;uTo{yn4BOjFxe|wulZ5v_D7+NVrKv~E*n7r -- 1.9.5.msysgit.1 _______________________________________________ edk2-devel mailing list edk2-devel@lists.01.org https://lists.01.org/mailman/listinfo/edk2-devel _______________________________________________ edk2-devel mailing list edk2-devel@lists.01.org https://lists.01.org/mailman/listinfo/edk2-devel