mirror of https://github.com/acidanthera/audk.git
Fix svn check in bug that broke CWD. Update the connect disconnect support in device command to minimize operations.
git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@10462 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
parent
0caa7ad507
commit
208a8330d0
|
@ -207,13 +207,14 @@ EblDeviceCmd (
|
|||
IN CHAR8 **Argv
|
||||
)
|
||||
{
|
||||
EFI_STATUS Status;
|
||||
UINTN Index;
|
||||
UINTN CurrentRow;
|
||||
UINTN Max;
|
||||
EFI_OPEN_FILE *File;
|
||||
|
||||
CurrentRow = 0;
|
||||
|
||||
|
||||
// Need to call here to make sure Device Counts are valid
|
||||
EblUpdateDeviceLists ();
|
||||
|
||||
|
@ -227,9 +228,15 @@ EblDeviceCmd (
|
|||
if (File != NULL) {
|
||||
if (File->FsBlockIoMedia->RemovableMedia) {
|
||||
if (File->FsBlockIoMedia->MediaPresent) {
|
||||
gBS->DisconnectController (File->EfiHandle, NULL, NULL);
|
||||
// Probe to see if media is present
|
||||
Status = File->FsBlockIo->ReadBlocks (File->FsBlockIo, File->FsBlockIo->Media->MediaId, (EFI_LBA)0, 0, NULL);
|
||||
if (Status == EFI_NO_MEDIA) {
|
||||
gBS->DisconnectController (File->EfiHandle, NULL, NULL);
|
||||
}
|
||||
} else {
|
||||
// Probe for media insertion and connect partition and filesystem drivers if needed
|
||||
gBS->ConnectController (File->EfiHandle, NULL, NULL, TRUE);
|
||||
}
|
||||
gBS->ConnectController (File->EfiHandle, NULL, NULL, TRUE);
|
||||
}
|
||||
EfiClose (File);
|
||||
}
|
||||
|
|
|
@ -94,6 +94,7 @@ typedef struct {
|
|||
EFI_FILE_SYSTEM_INFO *FsInfo;
|
||||
EFI_FILE_INFO *FsFileInfo;
|
||||
EFI_BLOCK_IO_MEDIA *FsBlockIoMedia; // Information valid for Fs#: or B#:
|
||||
EFI_BLOCK_IO_PROTOCOL *FsBlockIo; // Information valid for Fs#: or B#:
|
||||
|
||||
UINTN DiskOffset; // Information valid for B#:
|
||||
|
||||
|
|
|
@ -409,6 +409,7 @@ EblFileDevicePath (
|
|||
Status = gBS->HandleProtocol (File->EfiHandle, &gEfiBlockIoProtocolGuid, (VOID **)&BlkIo);
|
||||
if (!EFI_ERROR (Status)) {
|
||||
File->FsBlockIoMedia = BlkIo->Media;
|
||||
File->FsBlockIo = BlkIo;
|
||||
|
||||
// If we are not opening the device this will get over written with file info
|
||||
File->MaxPosition = MultU64x32 (BlkIo->Media->LastBlock + 1, BlkIo->Media->BlockSize);
|
||||
|
@ -1732,6 +1733,15 @@ EfiSetCwd (
|
|||
return EFI_INVALID_PARAMETER;
|
||||
}
|
||||
|
||||
AsciiStrCpy (gCwd, File->DeviceName);
|
||||
if (File->FileName == NULL) {
|
||||
AsciiStrCat (gCwd, ":\\");
|
||||
} else {
|
||||
AsciiStrCat (gCwd, ":");
|
||||
AsciiStrCat (gCwd, File->FileName);
|
||||
}
|
||||
|
||||
|
||||
EfiClose (File);
|
||||
if (Path != Cwd) {
|
||||
FreePool (Path);
|
||||
|
|
Loading…
Reference in New Issue