]> git.proxmox.com Git - mirror_edk2.git/commitdiff
Added a PCD to turn on/off probing Block IO devices to detect add/remove/change....
authorandrewfish <andrewfish@6f19259b-4bc3-4df7-8a09-765794883524>
Tue, 11 May 2010 00:09:48 +0000 (00:09 +0000)
committerandrewfish <andrewfish@6f19259b-4bc3-4df7-8a09-765794883524>
Tue, 11 May 2010 00:09:48 +0000 (00:09 +0000)
git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@10479 6f19259b-4bc3-4df7-8a09-765794883524

EmbeddedPkg/Ebl/Ebl.inf
EmbeddedPkg/Ebl/EfiDevice.c
EmbeddedPkg/Ebl/Main.c
EmbeddedPkg/EmbeddedPkg.dec

index bd8b67e5522554ac37f8bc4b537f887da9392134..44bab64b078fa14d0a10e394308f2256eeb6bc22 100644 (file)
@@ -99,6 +99,7 @@
   gEmbeddedTokenSpaceGuid.PcdEmbeddedIoEnable\r
   gEmbeddedTokenSpaceGuid.PcdEmbeddedScriptCmd\r
   gEmbeddedTokenSpaceGuid.PcdEmbeddedPciDebugCmd\r
+  gEmbeddedTokenSpaceGuid.PcdEmbeddedProbeRemovable\r
 \r
 [FixedPcd.common]\r
   gEmbeddedTokenSpaceGuid.PcdEmbeddedAutomaticBootCommand\r
index 354a6d7720c250f30212ec72bbd0c83f2d1f68ef..2f9a6067267cc4e950000d17ac53bd1f2444f589 100644 (file)
@@ -210,34 +210,13 @@ EblDeviceCmd (
   UINTN         Index;\r
   UINTN         CurrentRow;\r
   UINTN         Max;\r
-  EFI_OPEN_FILE *File;\r
 \r
   CurrentRow = 0;\r
 \r
   // Need to call here to make sure Device Counts are valid\r
   EblUpdateDeviceLists ();\r
 \r
-  //\r
-  // Probe for media insertion/removal in removable media devices\r
-  //\r
-  Max = EfiGetDeviceCounts (EfiOpenBlockIo);\r
-  if (Max != 0) {\r
-    for (Index = 0; Index < Max; Index++) {\r
-      File = EfiDeviceOpenByType (EfiOpenBlockIo, Index);\r
-      if (File != NULL) {\r
-        if (File->FsBlockIoMedia->RemovableMedia) {\r
-          // Probe to see if media is present (or not) or media changed\r
-          //  this causes the ReinstallProtocolInterface() to fire in the\r
-          //  block io driver to update the system about media change events\r
-          File->FsBlockIo->ReadBlocks (File->FsBlockIo, File->FsBlockIo->Media->MediaId, (EFI_LBA)0, 0, NULL);\r
-        }\r
-        EfiClose (File);\r
-      }\r
-    }\r
-  }\r
-\r
   // Now we can print out the info...\r
-\r
   Max = EfiGetDeviceCounts (EfiOpenFirmwareVolume);\r
   if (Max != 0) {\r
     AsciiPrint ("Firmware Volume Devices:\n");\r
index 6d536fd79c242dad4b7c4d760c9e4216e8afb9a7..98097e4be1a726438a7d8b944784ef83809c1b38 100644 (file)
@@ -455,6 +455,45 @@ EblPrintStartupBanner (
 }\r
 \r
 \r
+/**\r
+  Send null requests to all removable media block IO devices so the a media add/remove/change\r
+  can be detected in real before we execute a command. \r
+\r
+  This is mainly due to the fact that the FAT driver does not do this today so you can get stale \r
+  dir commands after an SD Card has been removed.\r
+**/\r
+VOID\r
+EblProbeRemovableMedia (\r
+  VOID\r
+  )\r
+{\r
+  UINTN         Index;\r
+  UINTN         Max;\r
+  EFI_OPEN_FILE *File;\r
+\r
+  //\r
+  // Probe for media insertion/removal in removable media devices\r
+  //\r
+  Max = EfiGetDeviceCounts (EfiOpenBlockIo);\r
+  if (Max != 0) {\r
+    for (Index = 0; Index < Max; Index++) {\r
+      File = EfiDeviceOpenByType (EfiOpenBlockIo, Index);\r
+      if (File != NULL) {\r
+        if (File->FsBlockIoMedia->RemovableMedia) {\r
+          // Probe to see if media is present (or not) or media changed\r
+          //  this causes the ReinstallProtocolInterface() to fire in the\r
+          //  block io driver to update the system about media change events\r
+          File->FsBlockIo->ReadBlocks (File->FsBlockIo, File->FsBlockIo->Media->MediaId, (EFI_LBA)0, 0, NULL);\r
+        }\r
+        EfiClose (File);\r
+      }\r
+    }\r
+  }\r
+}\r
+\r
+\r
+\r
+\r
 /**\r
   Print the prompt for the EBL.\r
 **/\r
@@ -611,6 +650,11 @@ EdkBootLoaderEntry (
     EblPrompt ();\r
     GetCmd (CmdLine, MAX_CMD_LINE);\r
     SetCmdHistory (CmdLine);\r
+\r
+    if (FeaturePcdGet (PcdEmbeddedProbeRemovable)) {\r
+      // Probe removable media devices to see if media has been inserted or removed.\r
+      EblProbeRemovableMedia ();\r
+    }\r
   }\r
 }\r
 \r
index 040b70c4bc6187e733aa8a4dd23da4ae0adc0980..2712477059b6079c685b5e11cd53b564cf8e0333 100644 (file)
@@ -65,6 +65,8 @@
   gEmbeddedTokenSpaceGuid.PcdEmbeddedIoEnable|FALSE|BOOLEAN|0x00000005\r
   gEmbeddedTokenSpaceGuid.PcdEmbeddedScriptCmd|FALSE|BOOLEAN|0x00000006\r
   gEmbeddedTokenSpaceGuid.PcdEmbeddedPciDebugCmd|FALSE|BOOLEAN|0x00000041\r
+  gEmbeddedTokenSpaceGuid.PcdEmbeddedProbeRemovable|TRUE|BOOLEAN|0x00000050\r
+  \r
   gEmbeddedTokenSpaceGuid.PcdPrePiProduceMemoryTypeInformationHob|FALSE|BOOLEAN|0x0000001b\r
   gEmbeddedTokenSpaceGuid.PcdCacheEnable|FALSE|BOOLEAN|0x00000042\r
   gEmbeddedTokenSpaceGuid.PcdGdbSerial|FALSE|BOOLEAN|0x0000004d\r
@@ -74,7 +76,7 @@
   gEmbeddedTokenSpaceGuid.PcdEmbeddedAutomaticBootCommand|L""|VOID*|0x00000007\r
   gEmbeddedTokenSpaceGuid.PcdEmbeddedDefaultTextColor|0x07|UINT32|0x00000008\r
   gEmbeddedTokenSpaceGuid.PcdEmbeddedMemVariableStoreSize|0x10000|UINT32|0x00000009\r
-  gEmbeddedTokenSpaceGuid.PcdEmbeddedPrompt|"Ebl"|VOID*|0x00000034\r
+  gEmbeddedTokenSpaceGuid.PcdEmbeddedPrompt|"Ebl %a"|VOID*|0x00000034\r
 \r
   gEmbeddedTokenSpaceGuid.PcdPrePiHobBase|131072|UINT32|0x00000040\r
   gEmbeddedTokenSpaceGuid.PcdPrePiStackBase|0|UINT32|0x0000000b\r