From nobody Sun May 5 00:48:27 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; spf=none (zoho.com: 198.145.21.10 is neither permitted nor denied by domain of lists.01.org) smtp.mailfrom=edk2-devel-bounces@lists.01.org; dmarc=fail(p=none dis=none) header.from=intel.com Return-Path: Received: from ml01.01.org (ml01.01.org [198.145.21.10]) by mx.zohomail.com with SMTPS id 1529923101992454.57075286797647; Mon, 25 Jun 2018 03:38:21 -0700 (PDT) Received: from [127.0.0.1] (localhost [IPv6:::1]) by ml01.01.org (Postfix) with ESMTP id 1045F2096FAC6; Mon, 25 Jun 2018 03:38:20 -0700 (PDT) Received: from mga18.intel.com (mga18.intel.com [134.134.136.126]) (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 17DCF2096FAA2 for ; Mon, 25 Jun 2018 03:38:19 -0700 (PDT) Received: from orsmga003.jf.intel.com ([10.7.209.27]) by orsmga106.jf.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 25 Jun 2018 03:38:18 -0700 Received: from shwdeopenpsi068.ccr.corp.intel.com ([10.239.158.46]) by orsmga003.jf.intel.com with ESMTP; 25 Jun 2018 03:38:16 -0700 X-Original-To: edk2-devel@lists.01.org Received-SPF: none (zoho.com: 198.145.21.10 is neither permitted nor denied by domain of lists.01.org) client-ip=198.145.21.10; envelope-from=edk2-devel-bounces@lists.01.org; helo=ml01.01.org; Received-SPF: Pass (sender SPF authorized) identity=mailfrom; client-ip=134.134.136.126; helo=mga18.intel.com; envelope-from=star.zeng@intel.com; receiver=edk2-devel@lists.01.org X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.51,270,1526367600"; d="scan'208";a="61964519" From: Star Zeng To: edk2-devel@lists.01.org Date: Mon, 25 Jun 2018 18:38:12 +0800 Message-Id: <1529923093-156972-2-git-send-email-star.zeng@intel.com> X-Mailer: git-send-email 2.7.0.windows.1 In-Reply-To: <1529923093-156972-1-git-send-email-star.zeng@intel.com> References: <1529923093-156972-1-git-send-email-star.zeng@intel.com> Subject: [edk2] [PATCH 1/2] MdeModulePkg UsbBusDxe: Fix wrong buffer length used to read hub desc X-BeenThere: edk2-devel@lists.01.org X-Mailman-Version: 2.1.26 Precedence: list List-Id: EDK II Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Ruiyu Ni , Jiewen Yao , Star Zeng MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Errors-To: edk2-devel-bounces@lists.01.org Sender: "edk2-devel" X-ZohoMail: RSF_4 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" REF: https://bugzilla.tianocore.org/show_bug.cgi?id=3D973 HUB descriptor has variable length. But the code uses stack (HubDesc in UsbHubInit) with fixed length sizeof(EFI_USB_HUB_DESCRIPTOR) to hold HUB descriptor data. It uses hard code length value (32 that is greater than sizeof(EFI_USB_HUB_DESCRIPTOR)) for SuperSpeed path, then there will be stack overflow when IOMMU is enabled because the Unmap operation will copy the data from device buffer to host buffer. And it uses HubDesc->Length for none SuperSpeed path, then there will be stack overflow when HubDesc->Length is greater than sizeof(EFI_USB_HUB_DESCRIPTOR). The patch updates the code to use a big enough buffer to hold the descriptor data. The definition EFI_USB_SUPER_SPEED_HUB_DESCRIPTOR is wrong (HubDelay field should be UINT16 type) and no code is using it, the patch removes it. Cc: Jiewen Yao Cc: Ruiyu Ni Cc: Bret Barkelew Contributed-under: TianoCore Contribution Agreement 1.1 Signed-off-by: Star Zeng --- MdeModulePkg/Bus/Usb/UsbBusDxe/UsbHub.c | 96 +++++++++++------------------= ---- MdeModulePkg/Bus/Usb/UsbBusDxe/UsbHub.h | 14 +---- 2 files changed, 32 insertions(+), 78 deletions(-) diff --git a/MdeModulePkg/Bus/Usb/UsbBusDxe/UsbHub.c b/MdeModulePkg/Bus/Usb= /UsbBusDxe/UsbHub.c index fabb44157037..a962f76638e8 100644 --- a/MdeModulePkg/Bus/Usb/UsbBusDxe/UsbHub.c +++ b/MdeModulePkg/Bus/Usb/UsbBusDxe/UsbHub.c @@ -2,7 +2,7 @@ =20 Unified interface for RootHub and Hub. =20 -Copyright (c) 2007 - 2016, Intel Corporation. All rights reserved.
=20 +Copyright (c) 2007 - 2018, Intel Corporation. All rights reserved.
=20 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 @@ -201,42 +201,7 @@ UsbHubCtrlClearTTBuffer ( } =20 /** - Usb hub control transfer to get the super speed hub descriptor. - - @param HubDev The hub device. - @param Buf The buffer to hold the descriptor. - - @retval EFI_SUCCESS The hub descriptor is retrieved. - @retval Others Failed to retrieve the hub descriptor. - -**/ -EFI_STATUS -UsbHubCtrlGetSuperSpeedHubDesc ( - IN USB_DEVICE *HubDev, - OUT VOID *Buf - ) -{ - EFI_STATUS Status; - =20 - Status =3D EFI_INVALID_PARAMETER; - =20 - Status =3D UsbCtrlRequest ( - HubDev, - EfiUsbDataIn, - USB_REQ_TYPE_CLASS, - USB_HUB_TARGET_HUB, - USB_HUB_REQ_GET_DESC, - (UINT16) (USB_DESC_TYPE_HUB_SUPER_SPEED << 8), - 0, - Buf, - 32 - ); - - return Status; -} - -/** - Usb hub control transfer to get the hub descriptor. + Usb hub control transfer to get the (super speed) hub descriptor. =20 @param HubDev The hub device. @param Buf The buffer to hold the descriptor. @@ -254,6 +219,11 @@ UsbHubCtrlGetHubDesc ( ) { EFI_STATUS Status; + UINT8 DescType; + + DescType =3D (HubDev->Speed =3D=3D EFI_USB_SPEED_SUPER) ? + USB_DESC_TYPE_HUB_SUPER_SPEED : + USB_DESC_TYPE_HUB; =20 Status =3D UsbCtrlRequest ( HubDev, @@ -261,7 +231,7 @@ UsbHubCtrlGetHubDesc ( USB_REQ_TYPE_CLASS, USB_HUB_TARGET_HUB, USB_HUB_REQ_GET_DESC, - (UINT16) (USB_DESC_TYPE_HUB << 8), + (UINT16) (DescType << 8), 0, Buf, Len @@ -475,29 +445,19 @@ UsbHubReadDesc ( { EFI_STATUS Status; =20 - if (HubDev->Speed =3D=3D EFI_USB_SPEED_SUPER) { - // - // Get the super speed hub descriptor - // - Status =3D UsbHubCtrlGetSuperSpeedHubDesc (HubDev, HubDesc); - } else { - - // - // First get the hub descriptor length - // - Status =3D UsbHubCtrlGetHubDesc (HubDev, HubDesc, 2); - - if (EFI_ERROR (Status)) { - return Status; - } + // + // First get the hub descriptor length + // + Status =3D UsbHubCtrlGetHubDesc (HubDev, HubDesc, 2); =20 - // - // Get the whole hub descriptor - // - Status =3D UsbHubCtrlGetHubDesc (HubDev, HubDesc, HubDesc->Length); + if (EFI_ERROR (Status)) { + return Status; } =20 - return Status; + // + // Get the whole hub descriptor + // + return UsbHubCtrlGetHubDesc (HubDev, HubDesc, HubDesc->Length); } =20 =20 @@ -690,7 +650,8 @@ UsbHubInit ( IN USB_INTERFACE *HubIf ) { - EFI_USB_HUB_DESCRIPTOR HubDesc; + UINT8 HubDescBuffer[256]; + EFI_USB_HUB_DESCRIPTOR *HubDesc; USB_ENDPOINT_DESC *EpDesc; USB_INTERFACE_SETTING *Setting; EFI_USB_IO_PROTOCOL *UsbIo; @@ -725,14 +686,19 @@ UsbHubInit ( return EFI_DEVICE_ERROR; } =20 - Status =3D UsbHubReadDesc (HubDev, &HubDesc); + // + // The length field of descriptor is UINT8 type, so the buffer + // with 256 bytes is enough to hold the descriptor data. + // + HubDesc =3D (EFI_USB_HUB_DESCRIPTOR *) HubDescBuffer; + Status =3D UsbHubReadDesc (HubDev, HubDesc); =20 if (EFI_ERROR (Status)) { DEBUG (( EFI_D_ERROR, "UsbHubInit: failed to read HUB descriptor %r\n"= , Status)); return Status; } =20 - HubIf->NumOfPort =3D HubDesc.NumPorts; + HubIf->NumOfPort =3D HubDesc->NumPorts; =20 DEBUG (( EFI_D_INFO, "UsbHubInit: hub %d has %d ports\n", HubDev->Addres= s,HubIf->NumOfPort)); =20 @@ -751,7 +717,7 @@ UsbHubInit ( DEBUG ((EFI_D_INFO, "UsbHubInit: Set Hub Depth as 0x%x\n", Depth)); UsbHubCtrlSetHubDepth (HubIf->Device, Depth); =20 - for (Index =3D 0; Index < HubDesc.NumPorts; Index++) { + for (Index =3D 0; Index < HubDesc->NumPorts; Index++) { UsbHubCtrlSetPortFeature (HubIf->Device, Index, USB_HUB_PORT_REMOTE_= WAKE_MASK); } =20 } else { @@ -759,15 +725,15 @@ UsbHubInit ( // Feed power to all the hub ports. It should be ok // for both gang/individual powered hubs. // - for (Index =3D 0; Index < HubDesc.NumPorts; Index++) { + for (Index =3D 0; Index < HubDesc->NumPorts; Index++) { UsbHubCtrlSetPortFeature (HubIf->Device, Index, (EFI_USB_PORT_FEATUR= E) USB_HUB_PORT_POWER); } =20 // // Update for the usb hub has no power on delay requirement // - if (HubDesc.PwrOn2PwrGood > 0) { - gBS->Stall (HubDesc.PwrOn2PwrGood * USB_SET_PORT_POWER_STALL); + if (HubDesc->PwrOn2PwrGood > 0) { + gBS->Stall (HubDesc->PwrOn2PwrGood * USB_SET_PORT_POWER_STALL); } UsbHubAckHubStatus (HubIf->Device); } diff --git a/MdeModulePkg/Bus/Usb/UsbBusDxe/UsbHub.h b/MdeModulePkg/Bus/Usb= /UsbBusDxe/UsbHub.h index 4e5fcd85e0af..fe9f1f74c751 100644 --- a/MdeModulePkg/Bus/Usb/UsbBusDxe/UsbHub.h +++ b/MdeModulePkg/Bus/Usb/UsbBusDxe/UsbHub.h @@ -2,7 +2,7 @@ =20 The definition for USB hub. =20 -Copyright (c) 2007 - 2010, Intel Corporation. All rights reserved.
+Copyright (c) 2007 - 2018, Intel Corporation. All rights reserved.
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 @@ -115,18 +115,6 @@ typedef struct { UINT8 Filler[16]; } EFI_USB_HUB_DESCRIPTOR; =20 -typedef struct { - UINT8 Length; - UINT8 DescType; - UINT8 NumPorts; - UINT16 HubCharacter; - UINT8 PwrOn2PwrGood; - UINT8 HubContrCurrent; - UINT8 HubHdrDecLat; - UINT8 HubDelay; - UINT8 DeviceRemovable; -} EFI_USB_SUPER_SPEED_HUB_DESCRIPTOR; - #pragma pack() =20 =20 --=20 2.7.0.windows.1 _______________________________________________ edk2-devel mailing list edk2-devel@lists.01.org https://lists.01.org/mailman/listinfo/edk2-devel From nobody Sun May 5 00:48:27 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; spf=none (zoho.com: 198.145.21.10 is neither permitted nor denied by domain of lists.01.org) smtp.mailfrom=edk2-devel-bounces@lists.01.org; dmarc=fail(p=none dis=none) header.from=intel.com Return-Path: Received: from ml01.01.org (ml01.01.org [198.145.21.10]) by mx.zohomail.com with SMTPS id 1529923104183989.7389342751743; Mon, 25 Jun 2018 03:38:24 -0700 (PDT) Received: from [127.0.0.1] (localhost [IPv6:::1]) by ml01.01.org (Postfix) with ESMTP id 3E8CD2096FAD6; Mon, 25 Jun 2018 03:38:21 -0700 (PDT) Received: from mga18.intel.com (mga18.intel.com [134.134.136.126]) (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 182422096FACE for ; Mon, 25 Jun 2018 03:38:20 -0700 (PDT) Received: from orsmga003.jf.intel.com ([10.7.209.27]) by orsmga106.jf.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 25 Jun 2018 03:38:19 -0700 Received: from shwdeopenpsi068.ccr.corp.intel.com ([10.239.158.46]) by orsmga003.jf.intel.com with ESMTP; 25 Jun 2018 03:38:17 -0700 X-Original-To: edk2-devel@lists.01.org Received-SPF: none (zoho.com: 198.145.21.10 is neither permitted nor denied by domain of lists.01.org) client-ip=198.145.21.10; envelope-from=edk2-devel-bounces@lists.01.org; helo=ml01.01.org; Received-SPF: Pass (sender SPF authorized) identity=mailfrom; client-ip=134.134.136.126; helo=mga18.intel.com; envelope-from=star.zeng@intel.com; receiver=edk2-devel@lists.01.org X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.51,270,1526367600"; d="scan'208";a="61964527" From: Star Zeng To: edk2-devel@lists.01.org Date: Mon, 25 Jun 2018 18:38:13 +0800 Message-Id: <1529923093-156972-3-git-send-email-star.zeng@intel.com> X-Mailer: git-send-email 2.7.0.windows.1 In-Reply-To: <1529923093-156972-1-git-send-email-star.zeng@intel.com> References: <1529923093-156972-1-git-send-email-star.zeng@intel.com> Subject: [edk2] [PATCH 2/2] MdeModulePkg UsbBusPei: Fix wrong buffer length used to read hub desc X-BeenThere: edk2-devel@lists.01.org X-Mailman-Version: 2.1.26 Precedence: list List-Id: EDK II Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Ruiyu Ni , Jiewen Yao , Star Zeng MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Errors-To: edk2-devel-bounces@lists.01.org Sender: "edk2-devel" X-ZohoMail: RSF_4 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" REF: https://bugzilla.tianocore.org/show_bug.cgi?id=3D973 Bug 973 just mentions UsbBusDxe, but UsbBusPei has similar issue. HUB descriptor has variable length. But the code uses stack (HubDescriptor in PeiDoHubConfig) with fixed length sizeof(EFI_USB_HUB_DESCRIPTOR) to hold HUB descriptor data. It uses hard code length value (12) for SuperSpeed path. And it uses HubDesc->Length for none SuperSpeed path, then there will be stack overflow when HubDesc->Length is greater than sizeof(EFI_USB_HUB_DESCRIPTOR). The patch updates the code to use a big enough buffer to hold the descriptor data. Cc: Jiewen Yao Cc: Ruiyu Ni Cc: Bret Barkelew Contributed-under: TianoCore Contribution Agreement 1.1 Signed-off-by: Star Zeng --- MdeModulePkg/Bus/Usb/UsbBusPei/HubPeim.c | 108 ++++++++++-----------------= ---- MdeModulePkg/Bus/Usb/UsbBusPei/HubPeim.h | 4 +- 2 files changed, 38 insertions(+), 74 deletions(-) diff --git a/MdeModulePkg/Bus/Usb/UsbBusPei/HubPeim.c b/MdeModulePkg/Bus/Us= b/UsbBusPei/HubPeim.c index 16a7b589c1c2..ac930ee8ea00 100644 --- a/MdeModulePkg/Bus/Usb/UsbBusPei/HubPeim.c +++ b/MdeModulePkg/Bus/Usb/UsbBusPei/HubPeim.c @@ -1,7 +1,7 @@ /** @file Usb Hub Request Support In PEI Phase =20 -Copyright (c) 2006 - 2014, Intel Corporation. All rights reserved.
+Copyright (c) 2006 - 2018, Intel Corporation. All rights reserved.
=20 This program and the accompanying materials are licensed and made available under the terms and conditions @@ -276,9 +276,10 @@ PeiHubClearHubFeature ( } =20 /** - Get a given hub descriptor. + Get a given (SuperSpeed) hub descriptor. =20 @param PeiServices General-purpose services that are available to ev= ery PEIM. + @param PeiUsbDevice Indicates the hub controller device. @param UsbIoPpi Indicates the PEI_USB_IO_PPI instance. @param DescriptorSize The length of Hub Descriptor buffer. @param HubDescriptor Caller allocated buffer to store the hub descript= or if @@ -292,63 +293,28 @@ PeiHubClearHubFeature ( EFI_STATUS PeiGetHubDescriptor ( IN EFI_PEI_SERVICES **PeiServices, + IN PEI_USB_DEVICE *PeiUsbDevice, IN PEI_USB_IO_PPI *UsbIoPpi, IN UINTN DescriptorSize, OUT EFI_USB_HUB_DESCRIPTOR *HubDescriptor ) { EFI_USB_DEVICE_REQUEST DevReq; - ZeroMem (&DevReq, sizeof (EFI_USB_DEVICE_REQUEST)); - - // - // Fill Device request packet - // - DevReq.RequestType =3D USB_RT_HUB | 0x80; - DevReq.Request =3D USB_HUB_GET_DESCRIPTOR; - DevReq.Value =3D USB_DT_HUB << 8; - DevReq.Length =3D (UINT16)DescriptorSize; - - return UsbIoPpi->UsbControlTransfer ( - PeiServices, - UsbIoPpi, - &DevReq, - EfiUsbDataIn, - PcdGet32 (PcdUsbTransferTimeoutValue), - HubDescriptor, - (UINT16)DescriptorSize - ); -} - -/** - Get a given SuperSpeed hub descriptor. + UINT8 DescType; =20 - @param PeiServices General-purpose services that are available to= every PEIM. - @param UsbIoPpi Indicates the PEI_USB_IO_PPI instance. - @param HubDescriptor Caller allocated buffer to store the hub descr= iptor if - successfully returned. - - @retval EFI_SUCCESS Hub descriptor is obtained successfully. - @retval EFI_DEVICE_ERROR Cannot get the hub descriptor due to a hardwar= e error. - @retval Others Other failure occurs. - -**/ -EFI_STATUS -PeiGetSuperSpeedHubDesc ( - IN EFI_PEI_SERVICES **PeiServices, - IN PEI_USB_IO_PPI *UsbIoPpi, - OUT EFI_USB_HUB_DESCRIPTOR *HubDescriptor - ) -{ - EFI_USB_DEVICE_REQUEST DevReq; ZeroMem (&DevReq, sizeof (EFI_USB_DEVICE_REQUEST)); =20 + DescType =3D (PeiUsbDevice->DeviceSpeed =3D=3D EFI_USB_SPEED_SUPER) ? + USB_DT_SUPERSPEED_HUB : + USB_DT_HUB; + // // Fill Device request packet // DevReq.RequestType =3D USB_RT_HUB | 0x80; DevReq.Request =3D USB_HUB_GET_DESCRIPTOR; - DevReq.Value =3D USB_DT_SUPERSPEED_HUB << 8; - DevReq.Length =3D 12; + DevReq.Value =3D (UINT16) (DescType << 8); + DevReq.Length =3D (UINT16) DescriptorSize; =20 return UsbIoPpi->UsbControlTransfer ( PeiServices, @@ -357,7 +323,7 @@ PeiGetSuperSpeedHubDesc ( EfiUsbDataIn, PcdGet32 (PcdUsbTransferTimeoutValue), HubDescriptor, - 12 + (UINT16)DescriptorSize ); } =20 @@ -387,29 +353,19 @@ PeiUsbHubReadDesc ( { EFI_STATUS Status; =20 - if (PeiUsbDevice->DeviceSpeed =3D=3D EFI_USB_SPEED_SUPER) { - // - // Get the super speed hub descriptor - // - Status =3D PeiGetSuperSpeedHubDesc (PeiServices, UsbIoPpi, HubDescript= or); - } else { - - // - // First get the hub descriptor length - // - Status =3D PeiGetHubDescriptor (PeiServices, UsbIoPpi, 2, HubDescripto= r); - - if (EFI_ERROR (Status)) { - return Status; - } + // + // First get the hub descriptor length + // + Status =3D PeiGetHubDescriptor (PeiServices, PeiUsbDevice, UsbIoPpi, 2, = HubDescriptor); =20 - // - // Get the whole hub descriptor - // - Status =3D PeiGetHubDescriptor (PeiServices, UsbIoPpi, HubDescriptor->= Length, HubDescriptor); + if (EFI_ERROR (Status)) { + return Status; } =20 - return Status; + // + // Get the whole hub descriptor + // + return PeiGetHubDescriptor (PeiServices, PeiUsbDevice, UsbIoPpi, HubDesc= riptor->Length, HubDescriptor); } =20 /** @@ -468,29 +424,35 @@ PeiDoHubConfig ( IN PEI_USB_DEVICE *PeiUsbDevice ) { - EFI_USB_HUB_DESCRIPTOR HubDescriptor; + UINT8 HubDescBuffer[256]; + EFI_USB_HUB_DESCRIPTOR *HubDescriptor; EFI_STATUS Status; EFI_USB_HUB_STATUS HubStatus; UINTN Index; PEI_USB_IO_PPI *UsbIoPpi; =20 - ZeroMem (&HubDescriptor, sizeof (HubDescriptor)); UsbIoPpi =3D &PeiUsbDevice->UsbIoPpi; =20 // + // The length field of descriptor is UINT8 type, so the buffer + // with 256 bytes is enough to hold the descriptor data. + // + HubDescriptor =3D (EFI_USB_HUB_DESCRIPTOR *) HubDescBuffer; + + // // Get the hub descriptor=20 // Status =3D PeiUsbHubReadDesc ( PeiServices, PeiUsbDevice, UsbIoPpi, - &HubDescriptor + HubDescriptor ); if (EFI_ERROR (Status)) { return EFI_DEVICE_ERROR; } =20 - PeiUsbDevice->DownStreamPortNo =3D HubDescriptor.NbrPorts; + PeiUsbDevice->DownStreamPortNo =3D HubDescriptor->NbrPorts; =20 if (PeiUsbDevice->DeviceSpeed =3D=3D EFI_USB_SPEED_SUPER) { DEBUG ((EFI_D_INFO, "PeiDoHubConfig: Set Hub Depth as 0x%x\n", PeiUsbD= evice->Tier)); @@ -516,9 +478,9 @@ PeiDoHubConfig ( } } =20 - DEBUG (( EFI_D_INFO, "PeiDoHubConfig: HubDescriptor.PwrOn2PwrGood: 0x%= x\n", HubDescriptor.PwrOn2PwrGood)); - if (HubDescriptor.PwrOn2PwrGood > 0) { - MicroSecondDelay (HubDescriptor.PwrOn2PwrGood * USB_SET_PORT_POWER_S= TALL); + DEBUG (( EFI_D_INFO, "PeiDoHubConfig: HubDescriptor.PwrOn2PwrGood: 0x%= x\n", HubDescriptor->PwrOn2PwrGood)); + if (HubDescriptor->PwrOn2PwrGood > 0) { + MicroSecondDelay (HubDescriptor->PwrOn2PwrGood * USB_SET_PORT_POWER_= STALL); } =20 // diff --git a/MdeModulePkg/Bus/Usb/UsbBusPei/HubPeim.h b/MdeModulePkg/Bus/Us= b/UsbBusPei/HubPeim.h index f50bc6350156..341f6f32e3d0 100644 --- a/MdeModulePkg/Bus/Usb/UsbBusPei/HubPeim.h +++ b/MdeModulePkg/Bus/Usb/UsbBusPei/HubPeim.h @@ -1,7 +1,7 @@ /** @file Constants definitions for Usb Hub Peim =20 -Copyright (c) 2006 - 2014, Intel Corporation. All rights reserved.
+Copyright (c) 2006 - 2018, Intel Corporation. All rights reserved.
=20 This program and the accompanying materials are licensed and made available under the terms and conditions @@ -227,6 +227,7 @@ PeiHubClearHubFeature ( Get a given hub descriptor. =20 @param PeiServices General-purpose services that are available to ev= ery PEIM. + @param PeiUsbDevice Indicates the hub controller device. @param UsbIoPpi Indicates the PEI_USB_IO_PPI instance. @param DescriptorSize The length of Hub Descriptor buffer. @param HubDescriptor Caller allocated buffer to store the hub descript= or if @@ -240,6 +241,7 @@ PeiHubClearHubFeature ( EFI_STATUS PeiGetHubDescriptor ( IN EFI_PEI_SERVICES **PeiServices, + IN PEI_USB_DEVICE *PeiUsbDevice, IN PEI_USB_IO_PPI *UsbIoPpi, IN UINTN DescriptorSize, OUT EFI_USB_HUB_DESCRIPTOR *HubDescriptor --=20 2.7.0.windows.1 _______________________________________________ edk2-devel mailing list edk2-devel@lists.01.org https://lists.01.org/mailman/listinfo/edk2-devel