]> git.proxmox.com Git - mirror_edk2.git/blobdiff - MdeModulePkg/Library/GenericBdsLib/BdsBoot.c
Add INF extension Information
[mirror_edk2.git] / MdeModulePkg / Library / GenericBdsLib / BdsBoot.c
index c8b2c59f5244e08ebbeeb5bc07119447c1225c6a..f170daab95b96058b50331df8a5d69f6ddffcd0b 100644 (file)
@@ -1,6 +1,5 @@
 /** @file\r
-  BDS Lib functions which relate with create or process the boot\r
-  option.\r
+  BDS Lib functions which relate with create or process the boot option.\r
 \r
 Copyright (c) 2004 - 2008, Intel Corporation. <BR>\r
 All rights reserved. This program and the accompanying materials\r
@@ -51,7 +50,7 @@ BdsLibDoLegacyBoot (
     return EFI_UNSUPPORTED;\r
   }\r
   //\r
-  // Notes: if we seperate the int 19, then we don't need to refresh BBS\r
+  // Notes: if we separate the int 19, then we don't need to refresh BBS\r
   //\r
   BdsRefreshBbsTableForBoot (Option);\r
 \r
@@ -73,17 +72,17 @@ BdsLibDoLegacyBoot (
 \r
 \r
 /**\r
-  Process the boot option follow the EFI 1.1 specification and\r
+  Process the boot option follow the UEFI specification and\r
   special treat the legacy boot option with BBS_DEVICE_PATH.\r
 \r
   @param  Option                 The boot option need to be processed\r
   @param  DevicePath             The device path which describe where to load the\r
-                                 boot image or the legcy BBS device path to boot\r
+                                 boot image or the legacy BBS device path to boot\r
                                  the legacy OS\r
-  @param  ExitDataSize           Returned directly from gBS->StartImage ()\r
-  @param  ExitData               Returned directly from gBS->StartImage ()\r
+  @param  ExitDataSize           The size of exit data.\r
+  @param  ExitData               Data returned when Boot image failed.\r
 \r
-  @retval EFI_SUCCESS            Status from gBS->StartImage ()\r
+  @retval EFI_SUCCESS            Boot from the input boot option successfully.\r
   @retval EFI_NOT_FOUND          If the Device Path is not found in the system\r
 \r
 **/\r
@@ -176,6 +175,7 @@ BdsLibBootViaBootOption (
       FreePool(Option->DevicePath);\r
     }\r
     Option->DevicePath  = AllocateZeroPool (GetDevicePathSize (DevicePath));\r
+    ASSERT(Option->DevicePath != NULL);\r
     CopyMem (Option->DevicePath, DevicePath, GetDevicePathSize (DevicePath));\r
     //\r
     // Update the shell boot option\r
@@ -287,7 +287,7 @@ Done:
 /**\r
   Expand a device path that starts with a hard drive media device path node to be a\r
   full device path that includes the full hardware path to the device. We need\r
-  to do this so it can be booted. As an optimizaiton the front match (the part point\r
+  to do this so it can be booted. As an optimization the front match (the part point\r
   to the partition node. E.g. ACPI() /PCI()/ATA()/Partition() ) is saved in a variable\r
   so a connect all is not required on every boot. All successful history device path\r
   which point to partition node (the front part) will be saved.\r
@@ -339,8 +339,8 @@ BdsExpandPartitionPartialDevicePathToFull (
     do {\r
       //\r
       // Check every instance of the variable\r
-      // First, check wheather the instance contain the partition node, which is needed for distinguishing  multi\r
-      // partial partition boot option. Second, check wheather the instance could be connected.\r
+      // First, check whether the instance contain the partition node, which is needed for distinguishing  multi\r
+      // partial partition boot option. Second, check whether the instance could be connected.\r
       //\r
       Instance  = GetNextDevicePathInstance (&TempNewDevicePath, &Size);\r
       if (MatchPartitionDevicePathNode (Instance, HardDriveDevicePath)) {\r
@@ -364,13 +364,13 @@ BdsExpandPartitionPartialDevicePathToFull (
     if (DeviceExist) {\r
       //\r
       // Find the matched device path.\r
-      // Append the file path infomration from the boot option and return the fully expanded device path.\r
+      // Append the file path information from the boot option and return the fully expanded device path.\r
       //\r
       DevicePath     = NextDevicePathNode ((EFI_DEVICE_PATH_PROTOCOL *) HardDriveDevicePath);\r
       FullDevicePath = AppendDevicePath (Instance, DevicePath);\r
 \r
       //\r
-      // Adjust the 'HDDP' instances sequense if the matched one is not first one.\r
+      // Adjust the 'HDDP' instances sequence if the matched one is not first one.\r
       //\r
       if (NeedAdjust) {\r
         //\r
@@ -381,7 +381,7 @@ BdsExpandPartitionPartialDevicePathToFull (
         FreePool (TempNewDevicePath);\r
         \r
         //\r
-        // Second, append the remaining parth after the matched instance\r
+        // Second, append the remaining path after the matched instance\r
         //\r
         TempNewDevicePath = CachedDevicePath;\r
         CachedDevicePath = AppendDevicePathInstance (Instance, CachedDevicePath );\r
@@ -406,7 +406,7 @@ BdsExpandPartitionPartialDevicePathToFull (
 \r
   //\r
   // If we get here we fail to find or 'HDDP' not exist, and now we need\r
-  // to seach all devices in the system for a matched partition\r
+  // to search all devices in the system for a matched partition\r
   //\r
   BdsLibConnectAllDriversToAllControllers ();\r
   Status = gBS->LocateHandleBuffer (ByProtocol, &gEfiBlockIoProtocolGuid, NULL, &BlockIoHandleCount, &BlockIoBuffer);\r
@@ -435,11 +435,11 @@ BdsExpandPartitionPartialDevicePathToFull (
       FullDevicePath = AppendDevicePath (BlockIoDevicePath, DevicePath);\r
 \r
       //\r
-      // Save the matched patition device path in 'HDDP' variable\r
+      // Save the matched partition device path in 'HDDP' variable\r
       //\r
       if (CachedDevicePath != NULL) {\r
         //\r
-        // Save the matched patition device path as first instance of 'HDDP' variable\r
+        // Save the matched partition device path as first instance of 'HDDP' variable\r
         //\r
         if (BdsLibMatchDevicePaths (CachedDevicePath, BlockIoDevicePath)) {\r
           TempNewDevicePath = CachedDevicePath;\r
@@ -456,7 +456,7 @@ BdsExpandPartitionPartialDevicePathToFull (
         }\r
         //\r
         // Here limit the device path instance number to 12, which is max number for a system support 3 IDE controller\r
-        // If the user try to boot many OS in different HDs or partitions, in theary, the 'HDDP' variable maybe become larger and larger.\r
+        // If the user try to boot many OS in different HDs or partitions, in theory, the 'HDDP' variable maybe become larger and larger.\r
         //\r
         InstanceNum = 0;\r
         TempNewDevicePath = CachedDevicePath;\r
@@ -511,8 +511,8 @@ BdsExpandPartitionPartialDevicePathToFull (
   @param  HardDriveDevicePath    A device path which starts with a hard drive media\r
                                  device path.\r
 \r
-  @retval TRUE                   There is a matched device path instance FALSE\r
-  @retval FALSE                  There is no matched device path instance\r
+  @retval TRUE                   There is a matched device path instance.\r
+  @retval FALSE                  There is no matched device path instance.\r
 \r
 **/\r
 BOOLEAN\r
@@ -523,7 +523,6 @@ MatchPartitionDevicePathNode (
   )\r
 {\r
   HARDDRIVE_DEVICE_PATH     *TmpHdPath;\r
-  HARDDRIVE_DEVICE_PATH     *TempPath;\r
   EFI_DEVICE_PATH_PROTOCOL  *DevicePath;\r
   BOOLEAN                   Match;\r
   EFI_DEVICE_PATH_PROTOCOL  *BlockIoHdDevicePathNode;\r
@@ -559,20 +558,19 @@ MatchPartitionDevicePathNode (
   // See if the harddrive device path in blockio matches the orig Hard Drive Node\r
   //\r
   TmpHdPath = (HARDDRIVE_DEVICE_PATH *) BlockIoHdDevicePathNode;\r
-  TempPath  = (HARDDRIVE_DEVICE_PATH *) BdsLibUnpackDevicePath ((EFI_DEVICE_PATH_PROTOCOL *) HardDriveDevicePath);\r
   Match = FALSE;\r
   \r
   //\r
   // Check for the match\r
   //\r
-  if ((TmpHdPath->MBRType == TempPath->MBRType) &&\r
-      (TmpHdPath->SignatureType == TempPath->SignatureType)) {\r
+  if ((TmpHdPath->MBRType == HardDriveDevicePath->MBRType) &&\r
+      (TmpHdPath->SignatureType == HardDriveDevicePath->SignatureType)) {\r
     switch (TmpHdPath->SignatureType) {\r
     case SIGNATURE_TYPE_GUID:\r
-      Match = CompareGuid ((EFI_GUID *)TmpHdPath->Signature, (EFI_GUID *)TempPath->Signature);\r
+      Match = CompareGuid ((EFI_GUID *)TmpHdPath->Signature, (EFI_GUID *)HardDriveDevicePath->Signature);\r
       break;\r
     case SIGNATURE_TYPE_MBR:\r
-      Match = (BOOLEAN)(*((UINT32 *)(&(TmpHdPath->Signature[0]))) == *(UINT32 *)(&(TempPath->Signature[0])));\r
+      Match = (BOOLEAN)(*((UINT32 *)(&(TmpHdPath->Signature[0]))) == ReadUnaligned32((UINT32 *)(&(HardDriveDevicePath->Signature[0]))));\r
       break;\r
     default:\r
       Match = FALSE;\r
@@ -809,7 +807,7 @@ BdsDeleteAllInvalidEfiBootOption (
 \r
 /**\r
   This function will enumerate all possible boot device in the system,\r
-  it will only excute once of every boot.\r
+  it will only execute once of every boot.\r
 \r
   @param  BdsBootOptionList      The header of the link list which indexed all\r
                                  current boot options\r
@@ -1117,13 +1115,13 @@ BdsLibEnumerateAllBootOption (
 }\r
 \r
 /**\r
-  Build the boot option with the handle parsed in.\r
+  Build the boot option with the handle parsed in\r
 \r
   @param  Handle                 The handle which present the device path to create\r
                                  boot option\r
   @param  BdsBootOptionList      The header of the link list which indexed all\r
                                  current boot options\r
-  @param  String                 Boot option name.\r
+  @param  String                 The description of the boot option.\r
 \r
 **/\r
 VOID\r
@@ -1181,7 +1179,7 @@ BdsLibBuildOptionFromShell (
 }\r
 \r
 /**\r
-  Boot from the EFI1.1 spec defined "BootNext" variable\r
+  Boot from the UEFI spec defined "BootNext" variable.\r
 \r
 **/\r
 VOID\r
@@ -1241,7 +1239,6 @@ BdsLibBootNext (
 \r
   @param  DevicePath             Device Path to a  bootable device\r
 \r
-  @retval NULL                   The device path points to an EFI bootable Media\r
   @retval NULL                   The media on the DevicePath is not bootable\r
 \r
 **/\r
@@ -1290,7 +1287,7 @@ BdsLibGetBootableHandle (
     }\r
   } else {\r
     //\r
-    // Get BlockIo protocal and check removable attribute\r
+    // Get BlockIo protocol and check removable attribute\r
     //\r
     Status = gBS->HandleProtocol (Handle, &gEfiBlockIoProtocolGuid, (VOID **)&BlockIo);\r
     //\r
@@ -1319,7 +1316,7 @@ BdsLibGetBootableHandle (
 \r
   //\r
   // If fail to get bootable handle specified by a USB boot option, the BDS should try to find other bootable device in the same USB bus\r
-  // Try to locate the USB node device path first, if fail then use its previour PCI node to search\r
+  // Try to locate the USB node device path first, if fail then use its previous PCI node to search\r
   //\r
   DupDevicePath = DuplicateDevicePath (DevicePath);\r
   ASSERT (DupDevicePath != NULL);\r
@@ -1468,23 +1465,23 @@ BdsLibNetworkBootWithMediaPresent (
 \r
   @param  DevicePath                      The bootable device Path to check\r
 \r
-  @retval BDS_EFI_MEDIA_HD_BOOT           If the device path contains any media deviec path node, it is media boot type\r
+  @retval BDS_EFI_MEDIA_HD_BOOT           If the device path contains any media device path node, it is media boot type\r
                                           For the floppy node, handle it as media node\r
-  @retval BDS_EFI_MEDIA_CDROM_BOOT        If the device path contains any media deviec path node, it is media boot type\r
+  @retval BDS_EFI_MEDIA_CDROM_BOOT        If the device path contains any media device path node, it is media boot type\r
                                           For the floppy node, handle it as media node\r
-  @retval BDS_EFI_ACPI_FLOPPY_BOOT        If the device path contains any media deviec path node, it is media boot type\r
+  @retval BDS_EFI_ACPI_FLOPPY_BOOT        If the device path contains any media device path node, it is media boot type\r
                                           For the floppy node, handle it as media node\r
-  @retval BDS_EFI_MESSAGE_ATAPI_BOOT      If the device path not contains any media deviec path node,  and\r
+  @retval BDS_EFI_MESSAGE_ATAPI_BOOT      If the device path not contains any media device path node,  and\r
                                           its last device path node point to a message device path node, it is\r
   \r
-  @retval BDS_EFI_MESSAGE_SCSI_BOOT       If the device path not contains any media deviec path node,  and\r
+  @retval BDS_EFI_MESSAGE_SCSI_BOOT       If the device path not contains any media device path node,  and\r
                                           its last device path node point to a message device path node, it is\r
-  @retval BDS_EFI_MESSAGE_USB_DEVICE_BOOT If the device path not contains any media deviec path node,  and\r
+  @retval BDS_EFI_MESSAGE_USB_DEVICE_BOOT If the device path not contains any media device path node,  and\r
                                           its last device path node point to a message device path node, it is\r
-  @retval BDS_EFI_MESSAGE_MISC_BOOT       If the device path not contains any media deviec path node,  and\r
+  @retval BDS_EFI_MESSAGE_MISC_BOOT       If the device path not contains any media device path node,  and\r
                                           its last device path node point to a message device path node, it is\r
   @retval BDS_LEGACY_BBS_BOOT             Legacy boot type\r
-  @retval BDS_EFI_UNSUPPORT               An EFI Removable BlockIO device path not point to a media and message devie,   \r
+  @retval BDS_EFI_UNSUPPORT               An EFI Removable BlockIO device path not point to a media and message device,   \r
 \r
 **/\r
 UINT32\r
@@ -1558,14 +1555,14 @@ BdsGetBootTypeFromDevicePath (
 }\r
 \r
 /**\r
-  Check whether the Device path in a boot option point to a valide bootable device,\r
+  Check whether the Device path in a boot option point to a valid bootable device,\r
   And if CheckMedia is true, check the device is ready to boot now.\r
 \r
-  @param DevPath        the Device path in a boot option\r
-  @param CheckMedia     if true, check the device is ready to boot now.\r
+  @param  DevPath     the Device path in a boot option\r
+  @param  CheckMedia  if true, check the device is ready to boot now.\r
 \r
-  @retval TRUE          the Device path  is valide\r
-  @retval FALSE         the Device path  is invalide .\r
+  @retval TRUE        the Device path  is valid\r
+  @retval FALSE       the Device path  is invalid .\r
 \r
 **/\r
 BOOLEAN\r
@@ -1624,9 +1621,9 @@ BdsLibIsValidEFIBootOptDevicePath (
   // If the boot option point to a file, it is a valid EFI boot option,\r
   // and assume it is ready to boot now\r
   //\r
-  while (!EfiIsDevicePathEnd (TempDevicePath)) {\r
+  while (!IsDevicePathEnd (TempDevicePath)) {\r
      LastDeviceNode = TempDevicePath;\r
-     TempDevicePath = EfiNextDevicePathNode (TempDevicePath);\r
+     TempDevicePath = NextDevicePathNode (TempDevicePath);\r
   }\r
   if ((DevicePathType (LastDeviceNode) == MEDIA_DEVICE_PATH) &&\r
     (DevicePathSubType (LastDeviceNode) == MEDIA_FILEPATH_DP)) {\r
@@ -1711,7 +1708,7 @@ BdsLibIsValidEFIBootOptDevicePath (
 /**\r
   According to a file guild, check a Fv file device path is valid. If it is invalid,\r
   try to return the valid device path.\r
-  FV address maybe changes for memory layout adjust from time to time, use this funciton\r
+  FV address maybe changes for memory layout adjust from time to time, use this function\r
   could promise the Fv file device path is right.\r
 \r
   @param  DevicePath             on input, the Fv file device path need to check on\r
@@ -1732,7 +1729,7 @@ EFI_STATUS
 EFIAPI\r
 BdsLibUpdateFvFileDevicePath (\r
   IN  OUT EFI_DEVICE_PATH_PROTOCOL      ** DevicePath,\r
-  IN      EFI_GUID                      *FileGuid\r
+  IN  EFI_GUID                          *FileGuid\r
   )\r
 {\r
   EFI_DEVICE_PATH_PROTOCOL      *TempDevicePath;\r
@@ -1765,9 +1762,9 @@ BdsLibUpdateFvFileDevicePath (
   //\r
   TempDevicePath = *DevicePath;\r
   LastDeviceNode = TempDevicePath;\r
-  while (!EfiIsDevicePathEnd (TempDevicePath)) {\r
+  while (!IsDevicePathEnd (TempDevicePath)) {\r
      LastDeviceNode = TempDevicePath;\r
-     TempDevicePath = EfiNextDevicePathNode (TempDevicePath);\r
+     TempDevicePath = NextDevicePathNode (TempDevicePath);\r
   }\r
   GuidPoint = EfiGetNameGuidFromFwVolDevicePathNode (\r
                 (MEDIA_FW_VOL_FILEPATH_DEVICE_PATH *) LastDeviceNode\r