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:
andrewfish 2010-05-07 16:45:48 +00:00
parent 0caa7ad507
commit 208a8330d0
3 changed files with 21 additions and 3 deletions

View File

@ -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);
} }

View 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#:

View File

@ -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);