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
|
IN CHAR8 **Argv
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
|
EFI_STATUS Status;
|
||||||
UINTN Index;
|
UINTN Index;
|
||||||
UINTN CurrentRow;
|
UINTN CurrentRow;
|
||||||
UINTN Max;
|
UINTN Max;
|
||||||
EFI_OPEN_FILE *File;
|
EFI_OPEN_FILE *File;
|
||||||
|
|
||||||
CurrentRow = 0;
|
CurrentRow = 0;
|
||||||
|
|
||||||
// Need to call here to make sure Device Counts are valid
|
// Need to call here to make sure Device Counts are valid
|
||||||
EblUpdateDeviceLists ();
|
EblUpdateDeviceLists ();
|
||||||
|
|
||||||
|
@ -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);
|
||||||
|
|
Loading…
Reference in New Issue