]> git.proxmox.com Git - mirror_edk2.git/blobdiff - MdeModulePkg/Bus/Pci/NvmExpressPei/NvmExpressPei.c
MdeModulePkg/NvmExpressPei: Produce NVM Express PassThru PPI
[mirror_edk2.git] / MdeModulePkg / Bus / Pci / NvmExpressPei / NvmExpressPei.c
index 0e79b29f82b4cc75812b930efdbe033cd54bc7be..987eed420e2971bb2a74c0f622dc7b0b0b4d49e6 100644 (file)
@@ -28,6 +28,12 @@ EFI_PEI_PPI_DESCRIPTOR  mNvmeStorageSecurityPpiListTemplate = {
   NULL\r
 };\r
 \r
+EFI_PEI_PPI_DESCRIPTOR  mNvmePassThruPpiListTemplate = {\r
+  (EFI_PEI_PPI_DESCRIPTOR_PPI | EFI_PEI_PPI_DESCRIPTOR_TERMINATE_LIST),\r
+  &gEdkiiPeiNvmExpressPassThruPpiGuid,\r
+  NULL\r
+};\r
+\r
 EFI_PEI_NOTIFY_DESCRIPTOR  mNvmeEndOfPeiNotifyListTemplate = {\r
   (EFI_PEI_PPI_DESCRIPTOR_NOTIFY_CALLBACK | EFI_PEI_PPI_DESCRIPTOR_TERMINATE_LIST),\r
   &gEfiEndOfPeiSignalPpiGuid,\r
@@ -392,6 +398,26 @@ NvmExpressPeimEntry (
     Private->BlkIo2PpiList.Ppi                 = &Private->BlkIo2Ppi;\r
     PeiServicesInstallPpi (&Private->BlkIoPpiList);\r
 \r
+    //\r
+    // Nvm Express Pass Thru PPI\r
+    //\r
+    Private->PassThruMode.Attributes            = EFI_NVM_EXPRESS_PASS_THRU_ATTRIBUTES_PHYSICAL |\r
+                                                  EFI_NVM_EXPRESS_PASS_THRU_ATTRIBUTES_LOGICAL |\r
+                                                  EFI_NVM_EXPRESS_PASS_THRU_ATTRIBUTES_CMD_SET_NVM;\r
+    Private->PassThruMode.IoAlign               = sizeof (UINTN);\r
+    Private->PassThruMode.NvmeVersion           = EDKII_PEI_NVM_EXPRESS_PASS_THRU_PPI_REVISION;\r
+    Private->NvmePassThruPpi.Mode               = &Private->PassThruMode;\r
+    Private->NvmePassThruPpi.GetDevicePath      = NvmePassThruGetDevicePath;\r
+    Private->NvmePassThruPpi.GetNextNameSpace   = NvmePassThruGetNextNameSpace;\r
+    Private->NvmePassThruPpi.PassThru           = NvmePassThru;\r
+    CopyMem (\r
+      &Private->NvmePassThruPpiList,\r
+      &mNvmePassThruPpiListTemplate,\r
+      sizeof (EFI_PEI_PPI_DESCRIPTOR)\r
+      );\r
+    Private->NvmePassThruPpiList.Ppi            = &Private->NvmePassThruPpi;\r
+    PeiServicesInstallPpi (&Private->NvmePassThruPpiList);\r
+\r
     //\r
     // Check if the NVME controller supports the Security Receive/Send commands\r
     //\r