Added a PCD to turn on/off probing Block IO devices to detect add/remove/change. FAT driver does not do this so if the shell does not do this you will get dir hits on an SD Card that has been removed. Default is ON. I moved this feature from device command to main command loop so it gets done after you type return before your command is processed.
git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@10479 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
@ -455,6 +455,45 @@ EblPrintStartupBanner (
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
Send null requests to all removable media block IO devices so the a media add/remove/change
|
||||
can be detected in real before we execute a command.
|
||||
|
||||
This is mainly due to the fact that the FAT driver does not do this today so you can get stale
|
||||
dir commands after an SD Card has been removed.
|
||||
**/
|
||||
VOID
|
||||
EblProbeRemovableMedia (
|
||||
VOID
|
||||
)
|
||||
{
|
||||
UINTN Index;
|
||||
UINTN Max;
|
||||
EFI_OPEN_FILE *File;
|
||||
|
||||
//
|
||||
// Probe for media insertion/removal in removable media devices
|
||||
//
|
||||
Max = EfiGetDeviceCounts (EfiOpenBlockIo);
|
||||
if (Max != 0) {
|
||||
for (Index = 0; Index < Max; Index++) {
|
||||
File = EfiDeviceOpenByType (EfiOpenBlockIo, Index);
|
||||
if (File != NULL) {
|
||||
if (File->FsBlockIoMedia->RemovableMedia) {
|
||||
// Probe to see if media is present (or not) or media changed
|
||||
// this causes the ReinstallProtocolInterface() to fire in the
|
||||
// block io driver to update the system about media change events
|
||||
File->FsBlockIo->ReadBlocks (File->FsBlockIo, File->FsBlockIo->Media->MediaId, (EFI_LBA)0, 0, NULL);
|
||||
}
|
||||
EfiClose (File);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
/**
|
||||
Print the prompt for the EBL.
|
||||
**/
|
||||
@ -611,6 +650,11 @@ EdkBootLoaderEntry (
|
||||
EblPrompt ();
|
||||
GetCmd (CmdLine, MAX_CMD_LINE);
|
||||
SetCmdHistory (CmdLine);
|
||||
|
||||
if (FeaturePcdGet (PcdEmbeddedProbeRemovable)) {
|
||||
// Probe removable media devices to see if media has been inserted or removed.
|
||||
EblProbeRemovableMedia ();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user