gEmbeddedTokenSpaceGuid.PcdEmbeddedIoEnable\r
gEmbeddedTokenSpaceGuid.PcdEmbeddedScriptCmd\r
gEmbeddedTokenSpaceGuid.PcdEmbeddedPciDebugCmd\r
+ gEmbeddedTokenSpaceGuid.PcdEmbeddedProbeRemovable\r
\r
[FixedPcd.common]\r
gEmbeddedTokenSpaceGuid.PcdEmbeddedAutomaticBootCommand\r
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
}\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
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
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
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