]> git.proxmox.com Git - mirror_edk2.git/blobdiff - FatPkg/FatPei/FatLiteApi.c
MdeModulePkg/FaultTolerantWriteDxe: implement standalone MM version
[mirror_edk2.git] / FatPkg / FatPei / FatLiteApi.c
index e63f1f546638552babe740e3f3c69762a4c2b625..b71eaaab2a60051632a6429c8d6a15f8ba07a71a 100644 (file)
@@ -1,7 +1,7 @@
 /** @file\r
   FAT recovery PEIM entry point, Ppi Functions and FAT Api functions.\r
 \r
-Copyright (c) 2006 - 2015, Intel Corporation. All rights reserved.<BR>\r
+Copyright (c) 2006 - 2018, Intel Corporation. All rights reserved.<BR>\r
 \r
 This program and the accompanying materials are licensed and made available\r
 under the terms and conditions of the BSD License which accompanies this\r
@@ -21,12 +21,12 @@ PEI_FAT_PRIVATE_DATA  *mPrivateData = NULL;
   BlockIo installation nofication function. Find out all the current BlockIO\r
   PPIs in the system and add them into private data. Assume there is\r
 \r
-  @param  PeiServices             General purpose services available to every \r
-                                  PEIM. \r
-  @param  NotifyDescriptor        The typedef structure of the notification \r
-                                  descriptor. Not used in this function. \r
-  @param  Ppi                     The typedef structure of the PPI descriptor. \r
-                                  Not used in this function. \r
+  @param  PeiServices             General purpose services available to every\r
+                                  PEIM.\r
+  @param  NotifyDescriptor        The typedef structure of the notification\r
+                                  descriptor. Not used in this function.\r
+  @param  Ppi                     The typedef structure of the PPI descriptor.\r
+                                  Not used in this function.\r
 \r
   @retval EFI_SUCCESS             The function completed successfully.\r
 \r
@@ -43,8 +43,8 @@ BlockIoNotifyEntry (
 /**\r
   Discover all the block I/O devices to find the FAT volume.\r
 \r
-  @param  PrivateData             Global memory map for accessing global \r
-                                  variables. \r
+  @param  PrivateData             Global memory map for accessing global\r
+                                  variables.\r
   @param  BlockIo2                Boolean to show whether using BlockIo2 or BlockIo\r
 \r
   @retval EFI_SUCCESS             The function completed successfully.\r
@@ -69,7 +69,8 @@ UpdateBlocksAndVolumes (
   EFI_PEI_SERVICES               **PeiServices;\r
 \r
   PeiServices = (EFI_PEI_SERVICES **) GetPeiServicesTablePointer ();\r
-\r
+  BlockIo2Ppi = NULL;\r
+  BlockIoPpi  = NULL;\r
   //\r
   // Clean up caches\r
   //\r
@@ -135,6 +136,10 @@ UpdateBlocksAndVolumes (
         if (EFI_ERROR (Status) || !Media2.MediaPresent) {\r
           continue;\r
         }\r
+        PrivateData->BlockDevice[PrivateData->BlockDeviceCount].BlockIo2        = BlockIo2Ppi;\r
+        PrivateData->BlockDevice[PrivateData->BlockDeviceCount].InterfaceType   = Media2.InterfaceType;\r
+        PrivateData->BlockDevice[PrivateData->BlockDeviceCount].LastBlock       = Media2.LastBlock;\r
+        PrivateData->BlockDevice[PrivateData->BlockDeviceCount].BlockSize       = Media2.BlockSize;\r
       } else {\r
         Status = BlockIoPpi->GetBlockDeviceMediaInfo (\r
                                PeiServices,\r
@@ -145,9 +150,13 @@ UpdateBlocksAndVolumes (
         if (EFI_ERROR (Status) || !Media.MediaPresent) {\r
           continue;\r
         }\r
+        PrivateData->BlockDevice[PrivateData->BlockDeviceCount].BlockIo    = BlockIoPpi;\r
+        PrivateData->BlockDevice[PrivateData->BlockDeviceCount].DevType    = Media.DeviceType;\r
+        PrivateData->BlockDevice[PrivateData->BlockDeviceCount].LastBlock  = Media.LastBlock;\r
+        PrivateData->BlockDevice[PrivateData->BlockDeviceCount].BlockSize  = (UINT32) Media.BlockSize;\r
       }\r
 \r
-      PrivateData->BlockDevice[PrivateData->BlockDeviceCount].IoAlign   = 0;\r
+      PrivateData->BlockDevice[PrivateData->BlockDeviceCount].IoAlign = 0;\r
       //\r
       // Not used here\r
       //\r
@@ -155,17 +164,6 @@ UpdateBlocksAndVolumes (
       PrivateData->BlockDevice[PrivateData->BlockDeviceCount].PartitionChecked  = FALSE;\r
 \r
       PrivateData->BlockDevice[PrivateData->BlockDeviceCount].PhysicalDevNo     = (UINT8) Index;\r
-      if (BlockIo2) {\r
-        PrivateData->BlockDevice[PrivateData->BlockDeviceCount].BlockIo2        = BlockIo2Ppi;\r
-        PrivateData->BlockDevice[PrivateData->BlockDeviceCount].InterfaceType   = Media2.InterfaceType;\r
-        PrivateData->BlockDevice[PrivateData->BlockDeviceCount].LastBlock       = Media2.LastBlock;\r
-        PrivateData->BlockDevice[PrivateData->BlockDeviceCount].BlockSize       = Media2.BlockSize;\r
-      } else {\r
-        PrivateData->BlockDevice[PrivateData->BlockDeviceCount].BlockIo    = BlockIoPpi;\r
-        PrivateData->BlockDevice[PrivateData->BlockDeviceCount].DevType    = Media.DeviceType;\r
-        PrivateData->BlockDevice[PrivateData->BlockDeviceCount].LastBlock  = Media.LastBlock;\r
-        PrivateData->BlockDevice[PrivateData->BlockDeviceCount].BlockSize  = (UINT32) Media.BlockSize;\r
-    }\r
       PrivateData->BlockDeviceCount++;\r
     }\r
   }\r
@@ -205,12 +203,12 @@ UpdateBlocksAndVolumes (
   BlockIo installation notification function. Find out all the current BlockIO\r
   PPIs in the system and add them into private data. Assume there is\r
 \r
-  @param  PeiServices             General purpose services available to every \r
-                                  PEIM. \r
-  @param  NotifyDescriptor        The typedef structure of the notification \r
-                                  descriptor. Not used in this function. \r
-  @param  Ppi                     The typedef structure of the PPI descriptor. \r
-                                  Not used in this function. \r
+  @param  PeiServices             General purpose services available to every\r
+                                  PEIM.\r
+  @param  NotifyDescriptor        The typedef structure of the notification\r
+                                  descriptor. Not used in this function.\r
+  @param  Ppi                     The typedef structure of the PPI descriptor.\r
+                                  Not used in this function.\r
 \r
   @retval EFI_SUCCESS             The function completed successfully.\r
 \r
@@ -236,13 +234,13 @@ BlockIoNotifyEntry (
   Installs the Device Recovery Module PPI, Initialize BlockIo Ppi\r
   installation notification\r
 \r
-  @param  FileHandle              Handle of the file being invoked. Type \r
-                                  EFI_PEI_FILE_HANDLE is defined in  \r
-                                  FfsFindNextFile(). \r
-  @param  PeiServices             Describes the list of possible PEI Services. \r
+  @param  FileHandle              Handle of the file being invoked. Type\r
+                                  EFI_PEI_FILE_HANDLE is defined in\r
+                                  FfsFindNextFile().\r
+  @param  PeiServices             Describes the list of possible PEI Services.\r
 \r
-  @retval EFI_SUCCESS             The entry point was executed successfully. \r
-  @retval EFI_OUT_OF_RESOURCES    There is no enough memory to complete the \r
+  @retval EFI_SUCCESS             The entry point was executed successfully.\r
+  @retval EFI_OUT_OF_RESOURCES    There is no enough memory to complete the\r
                                   operations.\r
 \r
 **/\r
@@ -332,18 +330,18 @@ FatPeimEntry (
   Returns the number of DXE capsules residing on the device.\r
 \r
   This function searches for DXE capsules from the associated device and returns\r
-  the number and maximum size in bytes of the capsules discovered. Entry 1 is \r
-  assumed to be the highest load priority and entry N is assumed to be the lowest \r
+  the number and maximum size in bytes of the capsules discovered. Entry 1 is\r
+  assumed to be the highest load priority and entry N is assumed to be the lowest\r
   priority.\r
 \r
-  @param[in]  PeiServices              General-purpose services that are available \r
+  @param[in]  PeiServices              General-purpose services that are available\r
                                        to every PEIM\r
   @param[in]  This                     Indicates the EFI_PEI_DEVICE_RECOVERY_MODULE_PPI\r
                                        instance.\r
-  @param[out] NumberRecoveryCapsules   Pointer to a caller-allocated UINTN. On \r
-                                       output, *NumberRecoveryCapsules contains \r
-                                       the number of recovery capsule images \r
-                                       available for retrieval from this PEIM \r
+  @param[out] NumberRecoveryCapsules   Pointer to a caller-allocated UINTN. On\r
+                                       output, *NumberRecoveryCapsules contains\r
+                                       the number of recovery capsule images\r
+                                       available for retrieval from this PEIM\r
                                        instance.\r
 \r
   @retval EFI_SUCCESS        One or more capsules were discovered.\r
@@ -372,7 +370,7 @@ GetNumberRecoveryCapsules (
   //\r
   RecoveryCapsuleCount = 0;\r
   for (Index = 0; Index < PrivateData->VolumeCount; Index++) {\r
-    Status = FindRecoveryFile (PrivateData, Index, PEI_FAT_RECOVERY_CAPSULE_WITHOUT_NT_EMULATOR, &Handle);\r
+    Status = FindRecoveryFile (PrivateData, Index, (CHAR16 *)PcdGetPtr(PcdRecoveryFileName), &Handle);\r
     if (EFI_ERROR (Status)) {\r
       continue;\r
     }\r
@@ -396,18 +394,18 @@ GetNumberRecoveryCapsules (
   This function gets the size and type of the capsule specified by CapsuleInstance.\r
 \r
   @param[in]  PeiServices       General-purpose services that are available to every PEIM\r
-  @param[in]  This              Indicates the EFI_PEI_DEVICE_RECOVERY_MODULE_PPI \r
+  @param[in]  This              Indicates the EFI_PEI_DEVICE_RECOVERY_MODULE_PPI\r
                                 instance.\r
-  @param[in]  CapsuleInstance   Specifies for which capsule instance to retrieve \r
-                                the information.  This parameter must be between \r
-                                one and the value returned by GetNumberRecoveryCapsules() \r
+  @param[in]  CapsuleInstance   Specifies for which capsule instance to retrieve\r
+                                the information.  This parameter must be between\r
+                                one and the value returned by GetNumberRecoveryCapsules()\r
                                 in NumberRecoveryCapsules.\r
-  @param[out] Size              A pointer to a caller-allocated UINTN in which \r
-                                the size of the requested recovery module is \r
+  @param[out] Size              A pointer to a caller-allocated UINTN in which\r
+                                the size of the requested recovery module is\r
                                 returned.\r
-  @param[out] CapsuleType       A pointer to a caller-allocated EFI_GUID in which \r
-                                the type of the requested recovery capsule is \r
-                                returned.  The semantic meaning of the value \r
+  @param[out] CapsuleType       A pointer to a caller-allocated EFI_GUID in which\r
+                                the type of the requested recovery capsule is\r
+                                returned.  The semantic meaning of the value\r
                                 returned is defined by the implementation.\r
 \r
   @retval EFI_SUCCESS        One or more capsules were discovered.\r
@@ -454,7 +452,7 @@ GetRecoveryCapsuleInfo (
   //\r
   RecoveryCapsuleCount = 0;\r
   for (Index = 0; Index < PrivateData->VolumeCount; Index++) {\r
-    Status = FindRecoveryFile (PrivateData, Index, PEI_FAT_RECOVERY_CAPSULE_WITHOUT_NT_EMULATOR, &Handle);\r
+    Status = FindRecoveryFile (PrivateData, Index, (CHAR16 *)PcdGetPtr(PcdRecoveryFileName), &Handle);\r
 \r
     if (EFI_ERROR (Status)) {\r
       continue;\r
@@ -487,6 +485,10 @@ GetRecoveryCapsuleInfo (
             CopyGuid (CapsuleType, &gRecoveryOnFatUsbDiskGuid);\r
             break;\r
 \r
+          case MSG_NVME_NAMESPACE_DP:\r
+            CopyGuid (CapsuleType, &gRecoveryOnFatNvmeDiskGuid);\r
+            break;\r
+\r
           default:\r
             break;\r
           }\r
@@ -528,12 +530,12 @@ GetRecoveryCapsuleInfo (
   This function, by whatever mechanism, retrieves a DXE capsule from some device\r
   and loads it into memory. Note that the published interface is device neutral.\r
 \r
-  @param[in]     PeiServices       General-purpose services that are available \r
+  @param[in]     PeiServices       General-purpose services that are available\r
                                    to every PEIM\r
   @param[in]     This              Indicates the EFI_PEI_DEVICE_RECOVERY_MODULE_PPI\r
                                    instance.\r
   @param[in]     CapsuleInstance   Specifies which capsule instance to retrieve.\r
-  @param[out]    Buffer            Specifies a caller-allocated buffer in which \r
+  @param[out]    Buffer            Specifies a caller-allocated buffer in which\r
                                    the requested recovery capsule will be returned.\r
 \r
   @retval EFI_SUCCESS        The capsule was loaded correctly.\r
@@ -578,7 +580,7 @@ LoadRecoveryCapsule (
   //\r
   RecoveryCapsuleCount = 0;\r
   for (Index = 0; Index < PrivateData->VolumeCount; Index++) {\r
-    Status = FindRecoveryFile (PrivateData, Index, PEI_FAT_RECOVERY_CAPSULE_WITHOUT_NT_EMULATOR, &Handle);\r
+    Status = FindRecoveryFile (PrivateData, Index, (CHAR16 *)PcdGetPtr(PcdRecoveryFileName), &Handle);\r
     if (EFI_ERROR (Status)) {\r
       continue;\r
     }\r
@@ -606,16 +608,16 @@ LoadRecoveryCapsule (
   This function finds the the recovery file named FileName on a specified FAT volume and returns\r
   its FileHandle pointer.\r
 \r
-  @param  PrivateData             Global memory map for accessing global \r
-                                  variables. \r
-  @param  VolumeIndex             The index of the volume. \r
-  @param  FileName                The recovery file name to find. \r
-  @param  Handle                  The output file handle. \r
+  @param  PrivateData             Global memory map for accessing global\r
+                                  variables.\r
+  @param  VolumeIndex             The index of the volume.\r
+  @param  FileName                The recovery file name to find.\r
+  @param  Handle                  The output file handle.\r
 \r
-  @retval EFI_DEVICE_ERROR        Some error occured when operating the FAT \r
-                                  volume. \r
-  @retval EFI_NOT_FOUND           The recovery file was not found. \r
-  @retval EFI_SUCCESS             The recovery file was successfully found on the \r
+  @retval EFI_DEVICE_ERROR        Some error occured when operating the FAT\r
+                                  volume.\r
+  @retval EFI_NOT_FOUND           The recovery file was not found.\r
+  @retval EFI_SUCCESS             The recovery file was successfully found on the\r
                                   FAT volume.\r
 \r
 **/\r