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:
@ -207,6 +207,7 @@ EblDeviceCmd (
|
|||||||
IN CHAR8 **Argv
|
IN CHAR8 **Argv
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
|
EFI_STATUS Status;
|
||||||
UINTN Index;
|
UINTN Index;
|
||||||
UINTN CurrentRow;
|
UINTN CurrentRow;
|
||||||
UINTN Max;
|
UINTN Max;
|
||||||
@ -227,9 +228,15 @@ EblDeviceCmd (
|
|||||||
if (File != NULL) {
|
if (File != NULL) {
|
||||||
if (File->FsBlockIoMedia->RemovableMedia) {
|
if (File->FsBlockIoMedia->RemovableMedia) {
|
||||||
if (File->FsBlockIoMedia->MediaPresent) {
|
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);
|
EfiClose (File);
|
||||||
}
|
}
|
||||||
|
@ -94,6 +94,7 @@ typedef struct {
|
|||||||
EFI_FILE_SYSTEM_INFO *FsInfo;
|
EFI_FILE_SYSTEM_INFO *FsInfo;
|
||||||
EFI_FILE_INFO *FsFileInfo;
|
EFI_FILE_INFO *FsFileInfo;
|
||||||
EFI_BLOCK_IO_MEDIA *FsBlockIoMedia; // Information valid for Fs#: or B#:
|
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#:
|
UINTN DiskOffset; // Information valid for B#:
|
||||||
|
|
||||||
|
@ -409,6 +409,7 @@ EblFileDevicePath (
|
|||||||
Status = gBS->HandleProtocol (File->EfiHandle, &gEfiBlockIoProtocolGuid, (VOID **)&BlkIo);
|
Status = gBS->HandleProtocol (File->EfiHandle, &gEfiBlockIoProtocolGuid, (VOID **)&BlkIo);
|
||||||
if (!EFI_ERROR (Status)) {
|
if (!EFI_ERROR (Status)) {
|
||||||
File->FsBlockIoMedia = BlkIo->Media;
|
File->FsBlockIoMedia = BlkIo->Media;
|
||||||
|
File->FsBlockIo = BlkIo;
|
||||||
|
|
||||||
// If we are not opening the device this will get over written with file info
|
// 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);
|
File->MaxPosition = MultU64x32 (BlkIo->Media->LastBlock + 1, BlkIo->Media->BlockSize);
|
||||||
@ -1732,6 +1733,15 @@ EfiSetCwd (
|
|||||||
return EFI_INVALID_PARAMETER;
|
return EFI_INVALID_PARAMETER;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
AsciiStrCpy (gCwd, File->DeviceName);
|
||||||
|
if (File->FileName == NULL) {
|
||||||
|
AsciiStrCat (gCwd, ":\\");
|
||||||
|
} else {
|
||||||
|
AsciiStrCat (gCwd, ":");
|
||||||
|
AsciiStrCat (gCwd, File->FileName);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
EfiClose (File);
|
EfiClose (File);
|
||||||
if (Path != Cwd) {
|
if (Path != Cwd) {
|
||||||
FreePool (Path);
|
FreePool (Path);
|
||||||
|
Reference in New Issue
Block a user