]> git.proxmox.com Git - mirror_edk2.git/blobdiff - MdeModulePkg/Bus/Pci/EhciPei/EhcPeim.c
MdeModulePkg EhciPei: Support IoMmu
[mirror_edk2.git] / MdeModulePkg / Bus / Pci / EhciPei / EhcPeim.c
index 31647ff0525cb546a6dc9a880edc031e70254e54..5cad25e926c578df51411af22b2f25c9c78c4bda 100644 (file)
@@ -2,7 +2,7 @@
 PEIM to produce gPeiUsb2HostControllerPpiGuid based on gPeiUsbControllerPpiGuid\r
 which is used to enable recovery function from USB Drivers.\r
 \r
 PEIM to produce gPeiUsb2HostControllerPpiGuid based on gPeiUsbControllerPpiGuid\r
 which is used to enable recovery function from USB Drivers.\r
 \r
-Copyright (c) 2010 - 2016, Intel Corporation. All rights reserved.<BR>\r
+Copyright (c) 2010 - 2017, Intel Corporation. All rights reserved.<BR>\r
   \r
 This program and the accompanying materials\r
 are licensed and made available under the terms and conditions\r
   \r
 This program and the accompanying materials\r
 are licensed and made available under the terms and conditions\r
@@ -1140,6 +1140,36 @@ ON_EXIT:
   return Status;\r
 }\r
 \r
   return Status;\r
 }\r
 \r
+/**\r
+  One notified function to stop the Host Controller at the end of PEI\r
+\r
+  @param[in]  PeiServices        Pointer to PEI Services Table.\r
+  @param[in]  NotifyDescriptor   Pointer to the descriptor for the Notification event that\r
+                                 caused this function to execute.\r
+  @param[in]  Ppi                Pointer to the PPI data associated with this function.\r
+\r
+  @retval     EFI_SUCCESS  The function completes successfully\r
+  @retval     others\r
+**/\r
+EFI_STATUS\r
+EFIAPI\r
+EhcEndOfPei (\r
+  IN EFI_PEI_SERVICES           **PeiServices,\r
+  IN EFI_PEI_NOTIFY_DESCRIPTOR  *NotifyDescriptor,\r
+  IN VOID                       *Ppi\r
+  )\r
+{\r
+  PEI_USB2_HC_DEV   *Ehc;\r
+\r
+  Ehc = PEI_RECOVERY_USB_EHC_DEV_FROM_THIS_NOTIFY (NotifyDescriptor);\r
+\r
+  EhcHaltHC (Ehc, EHC_GENERIC_TIMEOUT);\r
+\r
+  EhcFreeSched (Ehc);\r
+\r
+  return EFI_SUCCESS;\r
+}\r
+\r
 /**\r
   @param  FileHandle  Handle of the file being invoked.\r
   @param  PeiServices Describes the list of possible PEI Services.\r
 /**\r
   @param  FileHandle  Handle of the file being invoked.\r
   @param  PeiServices Describes the list of possible PEI Services.\r
@@ -1219,6 +1249,8 @@ EhcPeimEntry (
 \r
     EhcDev->Signature = USB2_HC_DEV_SIGNATURE;\r
 \r
 \r
     EhcDev->Signature = USB2_HC_DEV_SIGNATURE;\r
 \r
+    IoMmuInit (&EhcDev->IoMmu);\r
+\r
     EhcDev->UsbHostControllerBaseAddress = (UINT32) BaseAddress;\r
 \r
 \r
     EhcDev->UsbHostControllerBaseAddress = (UINT32) BaseAddress;\r
 \r
 \r
@@ -1250,6 +1282,12 @@ EhcPeimEntry (
       continue;\r
     }\r
 \r
       continue;\r
     }\r
 \r
+    EhcDev->EndOfPeiNotifyList.Flags = (EFI_PEI_PPI_DESCRIPTOR_NOTIFY_CALLBACK | EFI_PEI_PPI_DESCRIPTOR_TERMINATE_LIST);\r
+    EhcDev->EndOfPeiNotifyList.Guid = &gEfiEndOfPeiSignalPpiGuid;\r
+    EhcDev->EndOfPeiNotifyList.Notify = EhcEndOfPei;\r
+\r
+    PeiServicesNotifyPpi (&EhcDev->EndOfPeiNotifyList);\r
+\r
     Index++;\r
   }\r
 \r
     Index++;\r
   }\r
 \r