mirror of https://github.com/acidanthera/audk.git
First (Alpha) release of ShellPkg
git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@8256 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
parent
85a9032180
commit
94b17fa1b6
|
@ -0,0 +1,38 @@
|
|||
/** @file
|
||||
This is a simple shell application
|
||||
|
||||
Copyright (c) 2008, Intel Corporation
|
||||
All rights reserved. This program and the accompanying materials
|
||||
are licensed and made available under the terms and conditions of the BSD License
|
||||
which accompanies this distribution. The full text of the license may be found at
|
||||
http://opensource.org/licenses/bsd-license.php
|
||||
|
||||
THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
|
||||
|
||||
**/
|
||||
|
||||
#include <Uefi.h>
|
||||
#include <Library/UefiApplicationEntryPoint.h>
|
||||
#include <Library/UefiLib.h>
|
||||
|
||||
/**
|
||||
as the real entry point for the application.
|
||||
|
||||
@param[in] ImageHandle The firmware allocated handle for the EFI image.
|
||||
@param[in] SystemTable A pointer to the EFI System Table.
|
||||
|
||||
@retval EFI_SUCCESS The entry point is executed successfully.
|
||||
@retval other Some error occurs when executing this entry point.
|
||||
|
||||
**/
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
UefiMain (
|
||||
IN EFI_HANDLE ImageHandle,
|
||||
IN EFI_SYSTEM_TABLE *SystemTable
|
||||
)
|
||||
{
|
||||
Print(L"ShellExecute - Pass");
|
||||
return EFI_SUCCESS;
|
||||
}
|
|
@ -0,0 +1,50 @@
|
|||
#/** @file
|
||||
# Sample UEFI Application Reference EDKII Module
|
||||
#
|
||||
# This is a simple shell application
|
||||
#
|
||||
# Copyright (c) 2009, Intel Corporation.
|
||||
#
|
||||
# All rights reserved. This program and the accompanying materials
|
||||
# are licensed and made available under the terms and conditions of the BSD License
|
||||
# which accompanies this distribution. The full text of the license may be found at
|
||||
# http://opensource.org/licenses/bsd-license.php
|
||||
# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
|
||||
#
|
||||
#
|
||||
#**/
|
||||
|
||||
[Defines]
|
||||
INF_VERSION = 0x00010005
|
||||
BASE_NAME = EmptyApplication
|
||||
FILE_GUID = 8F7D7B1D-0E1C-4c98-B12E-4EC99C4081AC
|
||||
MODULE_TYPE = UEFI_APPLICATION
|
||||
VERSION_STRING = 1.0
|
||||
ENTRY_POINT = UefiMain
|
||||
|
||||
#
|
||||
# The following information is for reference only and not required by the build tools.
|
||||
#
|
||||
# VALID_ARCHITECTURES = IA32 X64 IPF EBC
|
||||
#
|
||||
|
||||
[Sources]
|
||||
SA.C
|
||||
|
||||
[Packages]
|
||||
MdePkg/MdePkg.dec
|
||||
|
||||
[LibraryClasses]
|
||||
UefiApplicationEntryPoint
|
||||
UefiLib
|
||||
|
||||
[Guids]
|
||||
|
||||
[Ppis]
|
||||
|
||||
[Protocols]
|
||||
|
||||
[FeaturePcd]
|
||||
|
||||
[Pcd]
|
|
@ -0,0 +1,54 @@
|
|||
#/** @file
|
||||
# Sample UEFI Application Reference EDKII Module
|
||||
#
|
||||
# This is a simple shell application
|
||||
#
|
||||
# Copyright (c) 2009, Intel Corporation.
|
||||
#
|
||||
# All rights reserved. This program and the accompanying materials
|
||||
# are licensed and made available under the terms and conditions of the BSD License
|
||||
# which accompanies this distribution. The full text of the license may be found at
|
||||
# http://opensource.org/licenses/bsd-license.php
|
||||
# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
|
||||
#
|
||||
#
|
||||
#**/
|
||||
|
||||
[Defines]
|
||||
INF_VERSION = 0x00010005
|
||||
BASE_NAME = SimpleApplication
|
||||
FILE_GUID = 10C75C00-3052-4467-9ED8-7196CAAF610F
|
||||
MODULE_TYPE = UEFI_APPLICATION
|
||||
VERSION_STRING = 1.0
|
||||
ENTRY_POINT = UefiMain
|
||||
|
||||
#
|
||||
# The following information is for reference only and not required by the build tools.
|
||||
#
|
||||
# VALID_ARCHITECTURES = IA32 X64 IPF EBC
|
||||
#
|
||||
|
||||
[Sources]
|
||||
sa3.c
|
||||
|
||||
[Packages]
|
||||
MdePkg/MdePkg.dec
|
||||
ShellPkg/ShellPkg.dec
|
||||
|
||||
[LibraryClasses]
|
||||
UefiApplicationEntryPoint
|
||||
UefiLib
|
||||
ShellLib
|
||||
MemoryAllocationLib
|
||||
DebugLib
|
||||
|
||||
[Guids]
|
||||
|
||||
[Ppis]
|
||||
|
||||
[Protocols]
|
||||
|
||||
[FeaturePcd]
|
||||
|
||||
[Pcd]
|
|
@ -0,0 +1,336 @@
|
|||
/** @file
|
||||
This is a simple shell application
|
||||
|
||||
This should be executed with "/Param2 Val1" and "/Param1" as the 2 command line options!
|
||||
|
||||
Copyright (c) 2008, Intel Corporation
|
||||
All rights reserved. This program and the accompanying materials
|
||||
are licensed and made available under the terms and conditions of the BSD License
|
||||
which accompanies this distribution. The full text of the license may be found at
|
||||
http://opensource.org/licenses/bsd-license.php
|
||||
|
||||
THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
|
||||
|
||||
**/
|
||||
|
||||
#include <Uefi.h>
|
||||
#include <Library/UefiApplicationEntryPoint.h>
|
||||
#include <Library/UefiLib.h>
|
||||
#include <Library/ShellLib.h>
|
||||
#include <Library/DebugLib.h>
|
||||
#include <Library/MemoryAllocationLib.h>
|
||||
|
||||
SHELL_PARAM_ITEM ParamList[] = {
|
||||
{L"/Param1", TypeFlag},
|
||||
{L"/Param2", TypeValue},
|
||||
{NULL, TypeMax}};
|
||||
|
||||
/**
|
||||
as the real entry point for the application.
|
||||
|
||||
@param[in] ImageHandle The firmware allocated handle for the EFI image.
|
||||
@param[in] SystemTable A pointer to the EFI System Table.
|
||||
|
||||
@retval EFI_SUCCESS The entry point is executed successfully.
|
||||
@retval other Some error occurs when executing this entry point.
|
||||
|
||||
**/
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
UefiMain (
|
||||
IN EFI_HANDLE ImageHandle,
|
||||
IN EFI_SYSTEM_TABLE *SystemTable
|
||||
)
|
||||
{
|
||||
EFI_FILE_HANDLE FileHandle;
|
||||
EFI_STATUS Status;
|
||||
CHAR16 FileName[100];
|
||||
UINTN BufferSize;
|
||||
UINT64 Position;
|
||||
UINT8 Buffer[200];
|
||||
EFI_FILE_INFO *pFileInfo;
|
||||
UINT64 Size;
|
||||
BOOLEAN NoFile;
|
||||
EFI_SHELL_FILE_INFO *pShellFileInfo, *pShellFileInfo2;
|
||||
LIST_ENTRY *List;
|
||||
|
||||
FileHandle = NULL;
|
||||
StrCpy(FileName, L"testfile.txt");
|
||||
Position = 0;
|
||||
pFileInfo = NULL;
|
||||
Size = 0;
|
||||
NoFile = FALSE;
|
||||
pShellFileInfo = NULL;
|
||||
List = NULL;
|
||||
|
||||
ASSERT(ShellGetExecutionBreakFlag() == FALSE);
|
||||
ASSERT(StrCmp(ShellGetCurrentDir(NULL), L"f8:\\") == 0);
|
||||
Print(L"execution break and get cur dir - pass\r\n");
|
||||
|
||||
ShellSetPageBreakMode(TRUE);
|
||||
|
||||
Status = ShellOpenFileByName(FileName,
|
||||
&FileHandle,
|
||||
EFI_FILE_MODE_CREATE|EFI_FILE_MODE_READ|EFI_FILE_MODE_WRITE,
|
||||
0
|
||||
);
|
||||
ASSERT_EFI_ERROR(Status);
|
||||
|
||||
BufferSize = StrSize(FileName);
|
||||
Status = ShellWriteFile(FileHandle, &BufferSize, FileName);
|
||||
ASSERT_EFI_ERROR(Status);
|
||||
Status = ShellGetFilePosition(FileHandle, &Position);
|
||||
ASSERT_EFI_ERROR(Status);
|
||||
ASSERT(Position == 0x1A);
|
||||
Status = ShellSetFilePosition(FileHandle, 0);
|
||||
ASSERT_EFI_ERROR(Status);
|
||||
BufferSize = sizeof(Buffer) * sizeof(Buffer[0]);
|
||||
Status = ShellReadFile(FileHandle, &BufferSize, Buffer);
|
||||
ASSERT_EFI_ERROR(Status);
|
||||
ASSERT(BufferSize == 0x1A);
|
||||
ASSERT(StrCmp((CHAR16*)Buffer, FileName) == 0);
|
||||
pFileInfo = ShellGetFileInfo(FileHandle);
|
||||
ASSERT(pFileInfo != NULL);
|
||||
ASSERT(StrCmp(pFileInfo->FileName, FileName) == 0);
|
||||
ASSERT(pFileInfo->FileSize == 0x1A);
|
||||
FreePool(pFileInfo);
|
||||
pFileInfo = NULL;
|
||||
Status = ShellCloseFile(&FileHandle);
|
||||
ASSERT(FileHandle == NULL);
|
||||
ASSERT_EFI_ERROR(Status);
|
||||
Print(L"read, write, create, getinfo - pass\r\n");
|
||||
|
||||
Status = ShellOpenFileByName(FileName,
|
||||
&FileHandle,
|
||||
EFI_FILE_MODE_CREATE|EFI_FILE_MODE_READ|EFI_FILE_MODE_WRITE,
|
||||
0
|
||||
);
|
||||
ASSERT_EFI_ERROR(Status);
|
||||
pFileInfo = ShellGetFileInfo(FileHandle);
|
||||
ASSERT(pFileInfo != NULL);
|
||||
pFileInfo->FileSize = 0x20;
|
||||
Status = ShellSetFileInfo(FileHandle, pFileInfo);
|
||||
FreePool(pFileInfo);
|
||||
pFileInfo = NULL;
|
||||
ASSERT_EFI_ERROR(Status);
|
||||
pFileInfo = ShellGetFileInfo(FileHandle);
|
||||
ASSERT(pFileInfo != NULL);
|
||||
ASSERT(StrCmp(pFileInfo->FileName, FileName) == 0);
|
||||
ASSERT(pFileInfo->PhysicalSize == 0x20);
|
||||
ASSERT(pFileInfo->FileSize == 0x20);
|
||||
ASSERT((pFileInfo->Attribute&EFI_FILE_DIRECTORY)==0);
|
||||
FreePool(pFileInfo);
|
||||
Status = ShellGetFileSize(FileHandle, &Size);
|
||||
ASSERT(Size == 0x20);
|
||||
ASSERT_EFI_ERROR(Status);
|
||||
Status = ShellCloseFile(&FileHandle);
|
||||
ASSERT(FileHandle == NULL);
|
||||
ASSERT_EFI_ERROR(Status);
|
||||
Print(L"setinfo and change size, getsize - pass\r\n");
|
||||
|
||||
Status = ShellOpenFileByName(FileName,
|
||||
&FileHandle,
|
||||
EFI_FILE_MODE_CREATE|EFI_FILE_MODE_READ|EFI_FILE_MODE_WRITE,
|
||||
0
|
||||
);
|
||||
ASSERT_EFI_ERROR(Status);
|
||||
|
||||
pFileInfo = ShellGetFileInfo(FileHandle);
|
||||
ASSERT(pFileInfo != NULL);
|
||||
ASSERT(StrCmp(pFileInfo->FileName, FileName) == 0);
|
||||
ASSERT(pFileInfo->PhysicalSize == 0x20);
|
||||
ASSERT(pFileInfo->FileSize == 0x20);
|
||||
ASSERT((pFileInfo->Attribute&EFI_FILE_DIRECTORY)==0);
|
||||
FreePool(pFileInfo);
|
||||
pFileInfo = NULL;
|
||||
Status = ShellDeleteFile(&FileHandle);
|
||||
ASSERT(FileHandle == NULL);
|
||||
ASSERT_EFI_ERROR(Status);
|
||||
Print(L"reopen file - pass\r\n");
|
||||
|
||||
Status = ShellOpenFileByName(FileName,
|
||||
&FileHandle,
|
||||
EFI_FILE_MODE_CREATE|EFI_FILE_MODE_READ|EFI_FILE_MODE_WRITE,
|
||||
0
|
||||
);
|
||||
ASSERT_EFI_ERROR(Status);
|
||||
pFileInfo = ShellGetFileInfo(FileHandle);
|
||||
ASSERT(pFileInfo != NULL);
|
||||
ASSERT(StrCmp(pFileInfo->FileName, FileName) == 0);
|
||||
ASSERT(pFileInfo->PhysicalSize == 0x0);
|
||||
ASSERT(pFileInfo->FileSize == 0x0);
|
||||
ASSERT((pFileInfo->Attribute&EFI_FILE_DIRECTORY)==0);
|
||||
FreePool(pFileInfo);
|
||||
Status = ShellDeleteFile(&FileHandle);
|
||||
ASSERT(FileHandle == NULL);
|
||||
ASSERT_EFI_ERROR(Status);
|
||||
Print(L"size of empty - pass\r\n");
|
||||
|
||||
Status = ShellOpenFileByName(FileName,
|
||||
&FileHandle,
|
||||
EFI_FILE_MODE_READ|EFI_FILE_MODE_WRITE,
|
||||
0
|
||||
);
|
||||
ASSERT(Status == EFI_NOT_FOUND);
|
||||
ASSERT(FileHandle == NULL);
|
||||
|
||||
Status = ShellCreateDirectory(FileName, &FileHandle);
|
||||
ASSERT_EFI_ERROR(Status);
|
||||
ASSERT(FileHandle != NULL);
|
||||
pFileInfo = ShellGetFileInfo(FileHandle);
|
||||
ASSERT(pFileInfo != NULL);
|
||||
ASSERT(StrCmp(pFileInfo->FileName, FileName) == 0);
|
||||
ASSERT(pFileInfo->Attribute&EFI_FILE_DIRECTORY);
|
||||
Status = ShellDeleteFile(&FileHandle);
|
||||
ASSERT(FileHandle == NULL);
|
||||
ASSERT_EFI_ERROR(Status);
|
||||
Print(L"Directory create - pass\r\n");
|
||||
|
||||
// FindFirst and FindNext
|
||||
StrCpy(FileName, L"testDir");
|
||||
Status = ShellCreateDirectory(FileName, &FileHandle);
|
||||
Status = ShellCloseFile(&FileHandle);
|
||||
StrCat(FileName, L"\\File.txt");
|
||||
Status = ShellOpenFileByName(FileName,
|
||||
&FileHandle,
|
||||
EFI_FILE_MODE_CREATE|EFI_FILE_MODE_READ|EFI_FILE_MODE_WRITE,
|
||||
0
|
||||
);
|
||||
ASSERT_EFI_ERROR(Status);
|
||||
Status = ShellCloseFile(&FileHandle);
|
||||
StrCpy(FileName, L"testDir");
|
||||
Status = ShellOpenFileByName(FileName,
|
||||
&FileHandle,
|
||||
EFI_FILE_MODE_CREATE|EFI_FILE_MODE_READ|EFI_FILE_MODE_WRITE,
|
||||
0
|
||||
);
|
||||
ASSERT_EFI_ERROR(Status);
|
||||
Status = ShellFindFirstFile(FileHandle, pFileInfo);
|
||||
ASSERT_EFI_ERROR(Status);
|
||||
Status = ShellFindNextFile(FileHandle, pFileInfo, &NoFile);
|
||||
ASSERT_EFI_ERROR(Status);
|
||||
ASSERT(NoFile == FALSE);
|
||||
Status = ShellFindNextFile(FileHandle, pFileInfo, &NoFile);
|
||||
ASSERT_EFI_ERROR(Status);
|
||||
ASSERT(NoFile == FALSE);
|
||||
Status = ShellFindNextFile(FileHandle, pFileInfo, &NoFile);
|
||||
ASSERT_EFI_ERROR(Status);
|
||||
/// @todo - why is NoFile never set? limitation of NT32 file system?
|
||||
Status = ShellDeleteFile(&FileHandle);
|
||||
ASSERT(FileHandle == NULL);
|
||||
ASSERT(Status == RETURN_WARN_DELETE_FAILURE);
|
||||
Print(L"FindFirst - pass\r\n");
|
||||
Print(L"FindNext - Verify with real EFI system. Cant verify NoFile under NT32\r\n");
|
||||
|
||||
// open and close meta arg
|
||||
Status = ShellOpenFileMetaArg(L"testDir\\*.*", EFI_FILE_MODE_READ, &pShellFileInfo);
|
||||
ASSERT_EFI_ERROR(Status);
|
||||
ASSERT(pShellFileInfo->Status == 0);
|
||||
ASSERT(StrCmp(pShellFileInfo->FileName, L"File.txt") == 0);
|
||||
ASSERT(pShellFileInfo->Handle);
|
||||
ASSERT(pShellFileInfo->Info);
|
||||
ASSERT(pShellFileInfo->Info->FileSize == 0);
|
||||
ASSERT(StrCmp(pShellFileInfo->Info->FileName, L"File.txt") == 0);
|
||||
ASSERT(pShellFileInfo->Info->Attribute == 0);
|
||||
pShellFileInfo2 = (EFI_SHELL_FILE_INFO*)0x12345678;
|
||||
Status = ShellOpenFileMetaArg(L"testDir\\*.*", EFI_FILE_MODE_READ, &pShellFileInfo2);
|
||||
ASSERT(pShellFileInfo2 == NULL);
|
||||
ASSERT(Status == EFI_UNSUPPORTED);
|
||||
Status = ShellCloseFileMetaArg(&pShellFileInfo);
|
||||
ASSERT_EFI_ERROR(Status);
|
||||
Print(L"Open/Close Meta Arg - pass\r\n");
|
||||
|
||||
// now delete that file and that directory
|
||||
StrCat(FileName, L"\\File.txt");
|
||||
Status = ShellOpenFileByName(FileName,
|
||||
&FileHandle,
|
||||
EFI_FILE_MODE_CREATE|EFI_FILE_MODE_READ|EFI_FILE_MODE_WRITE,
|
||||
0
|
||||
);
|
||||
ASSERT_EFI_ERROR(Status);
|
||||
Status = ShellDeleteFile(&FileHandle);
|
||||
ASSERT(FileHandle == NULL);
|
||||
StrCpy(FileName, L"testDir");
|
||||
ASSERT_EFI_ERROR(Status);
|
||||
Status = ShellOpenFileByName(FileName,
|
||||
&FileHandle,
|
||||
EFI_FILE_MODE_CREATE|EFI_FILE_MODE_READ|EFI_FILE_MODE_WRITE,
|
||||
0
|
||||
);
|
||||
Status = ShellDeleteFile(&FileHandle);
|
||||
ASSERT(FileHandle == NULL);
|
||||
ASSERT_EFI_ERROR(Status);
|
||||
|
||||
// get environment variable
|
||||
// made for testing under nt32
|
||||
ASSERT(StrCmp(ShellGetEnvironmentVariable(L"path"), L".;f8:\\efi\\tools;f8:\\efi\\boot;f8:\\;f9:\\efi\\tools;f9:\\efi\\boot;f9:\\") == 0);
|
||||
Print(L"ShellGetEnvironmentVariable - pass\r\n");
|
||||
|
||||
// set environment variable
|
||||
Status = ShellSetEnvironmentVariable(L"", L"", FALSE);
|
||||
ASSERT(Status == EFI_UNSUPPORTED);
|
||||
Print(L"ShellSetEnvironmentVariable - pass\r\n");
|
||||
|
||||
// ShellExecute
|
||||
Status = ShellExecute(&ImageHandle, L"EmptyApplication.efi", TRUE, NULL, NULL);
|
||||
ASSERT_EFI_ERROR(Status);
|
||||
// the pass printout for this is performed by EmptyApplication
|
||||
Print(L"\r\n");
|
||||
|
||||
// command line param functions
|
||||
Status = ShellCommandLineParse(ParamList, &List, NULL, FALSE);
|
||||
// if you put an invalid parameter you SHOULD hit this assert.
|
||||
ASSERT_EFI_ERROR(Status);
|
||||
if (List) {
|
||||
ASSERT(ShellCommandLineGetFlag(List, L"/Param5") == FALSE);
|
||||
ASSERT(ShellCommandLineGetFlag(List, L"/Param1") != FALSE);
|
||||
ASSERT(StrCmp(ShellCommandLineGetValue(List, L"/Param2"), L"Val1")==0);
|
||||
ASSERT(StrCmp(ShellCommandLineGetRawValue(List, 0), L"SimpleApplication")==0);
|
||||
|
||||
ShellCommandLineFreeVarList(List);
|
||||
} else {
|
||||
Print(L"param checking skipped.\r\n");
|
||||
}
|
||||
|
||||
// page break mode (done last so we can see the results)
|
||||
// we set this true at the begining of the program
|
||||
// this is enough lines to trigger the page...
|
||||
Print(L"1\r\n2\r\n3\r\n4\r\n5\r\n6\r\n7\r\n8\r\n9\r\n10\r\n11\r\n12\r\n13\r\n14\r\n15\r\n16\r\n17\r\n18\r\n19\r\n20\r\n21\r\n22\r\n23\r\n24\r\n25\r\n26\r\n27\r\n28\r\n29\r\n30\r\n31\r\n");
|
||||
ShellSetPageBreakMode(FALSE);
|
||||
Print(L"1\r\n2\r\n3\r\n4\r\n5\r\n6\r\n7\r\n8\r\n9\r\n10\r\n11\r\n12\r\n13\r\n14\r\n15\r\n16\r\n17\r\n18\r\n19\r\n20\r\n21\r\n22\r\n23\r\n24\r\n25\r\n26\r\n27\r\n28\r\n29\r\n30\r\n31\r\n32\r\n33\r\n34\r\n35\r\n36\r\n37\r\n38\r\n39\r\n40\r\n41\r\n42\r\n43\r\n44\r\n45\r\n46\r\n47\r\n48\r\n49\r\n50\r\n51\r\n52\r\n53\r\n54\r\n55\r\n56\r\n57\r\n58\r\n59\r\n60\r\n");
|
||||
|
||||
return EFI_SUCCESS;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
done - ShellGetFileInfo
|
||||
done - ShellSetFileInfo
|
||||
done - ShellOpenFileByDevicePath
|
||||
done - ShellOpenFileByName
|
||||
done - ShellCreateDirectory
|
||||
done - ShellReadFile
|
||||
done - ShellWriteFile
|
||||
done - ShellCloseFile
|
||||
done - ShellDeleteFile
|
||||
done - ShellSetFilePosition
|
||||
done - ShellGetFilePosition
|
||||
???? - ShellFlushFile
|
||||
done - ShellFindFirstFile
|
||||
done - ShellFindNextFile
|
||||
done - ShellGetFileSize
|
||||
done - ShellGetExecutionBreakFlag
|
||||
done - ShellGetEnvironmentVariable
|
||||
done - ShellSetEnvironmentVariable
|
||||
done - ShellExecute
|
||||
done - ShellGetCurrentDir
|
||||
done - ShellSetPageBreakMode
|
||||
done - ShellOpenFileMetaArg
|
||||
done - ShellCloseFileMetaArg
|
||||
done - ShellCommandLineParse
|
||||
done - ShellCommandLineFreeVarList
|
||||
done - ShellCommandLineGetFlag
|
||||
done - ShellCommandLineGetValue
|
||||
done - ShellCommandLineGetRawValue
|
||||
*/
|
|
@ -0,0 +1,729 @@
|
|||
/** @file
|
||||
Provides interface to shell functionality for shell commands and applications.
|
||||
|
||||
Copyright (c) 2006 - 2009, Intel Corporation
|
||||
All rights reserved. This program and the accompanying materials
|
||||
are licensed and made available under the terms and conditions of the BSD License
|
||||
which accompanies this distribution. The full text of the license may be found at
|
||||
http://opensource.org/licenses/bsd-license.php
|
||||
|
||||
THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
|
||||
|
||||
**/
|
||||
|
||||
#if !defined(__SHELL_LIB__)
|
||||
#define __SHELL_LIB__
|
||||
|
||||
#include <Protocol/SimpleFileSystem.h>
|
||||
#include <Guid/FileInfo.h>
|
||||
#include <Protocol/EfiShell.h>
|
||||
|
||||
/**
|
||||
This function will retrieve the information about the file for the handle
|
||||
specified and store it in allocated pool memory.
|
||||
|
||||
This function allocates a buffer to store the file’s information. It is the
|
||||
caller’s responsibility to free the buffer
|
||||
|
||||
@param FileHandle The file handle of the file for which information is
|
||||
being requested.
|
||||
|
||||
@retval NULL information could not be retrieved.
|
||||
|
||||
@return the information about the file
|
||||
**/
|
||||
EFI_FILE_INFO*
|
||||
EFIAPI
|
||||
ShellGetFileInfo (
|
||||
IN EFI_FILE_HANDLE FileHandle
|
||||
);
|
||||
|
||||
/**
|
||||
This function will set the information about the file for the opened handle
|
||||
specified.
|
||||
|
||||
@param FileHandle The file handle of the file for which information
|
||||
is being set
|
||||
|
||||
@param FileInfo The infotmation to set.
|
||||
|
||||
@retval EFI_SUCCESS The information was set.
|
||||
@retval EFI_UNSUPPORTED The InformationType is not known.
|
||||
@retval EFI_NO_MEDIA The device has no medium.
|
||||
@retval EFI_DEVICE_ERROR The device reported an error.
|
||||
@retval EFI_VOLUME_CORRUPTED The file system structures are corrupted.
|
||||
@retval EFI_WRITE_PROTECTED The file or medium is write protected.
|
||||
@retval EFI_ACCESS_DENIED The file was opened read only.
|
||||
@retval EFI_VOLUME_FULL The volume is full.
|
||||
**/
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
ShellSetFileInfo (
|
||||
IN EFI_FILE_HANDLE FileHandle,
|
||||
IN EFI_FILE_INFO *FileInfo
|
||||
);
|
||||
|
||||
/**
|
||||
This function will open a file or directory referenced by DevicePath.
|
||||
|
||||
This function opens a file with the open mode according to the file path. The
|
||||
Attributes is valid only for EFI_FILE_MODE_CREATE.
|
||||
|
||||
@param FilePath on input the device path to the file. On output
|
||||
the remaining device path.
|
||||
@param DeviceHandle pointer to the system device handle.
|
||||
@param FileHandle pointer to the file handle.
|
||||
@param OpenMode the mode to open the file with.
|
||||
@param Attributes the file's file attributes.
|
||||
|
||||
@retval EFI_SUCCESS The information was set.
|
||||
@retval EFI_INVALID_PARAMETER One of the parameters has an invalid value.
|
||||
@retval EFI_UNSUPPORTED Could not open the file path.
|
||||
@retval EFI_NOT_FOUND The specified file could not be found on the
|
||||
device or the file system could not be found on
|
||||
the device.
|
||||
@retval EFI_NO_MEDIA The device has no medium.
|
||||
@retval EFI_MEDIA_CHANGED The device has a different medium in it or the
|
||||
medium is no longer supported.
|
||||
@retval EFI_DEVICE_ERROR The device reported an error.
|
||||
@retval EFI_VOLUME_CORRUPTED The file system structures are corrupted.
|
||||
@retval EFI_WRITE_PROTECTED The file or medium is write protected.
|
||||
@retval EFI_ACCESS_DENIED The file was opened read only.
|
||||
@retval EFI_OUT_OF_RESOURCES Not enough resources were available to open the
|
||||
file.
|
||||
@retval EFI_VOLUME_FULL The volume is full.
|
||||
**/
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
ShellOpenFileByDevicePath(
|
||||
IN OUT EFI_DEVICE_PATH_PROTOCOL **FilePath,
|
||||
OUT EFI_HANDLE *DeviceHandle,
|
||||
OUT EFI_FILE_HANDLE *FileHandle,
|
||||
IN UINT64 OpenMode,
|
||||
IN UINT64 Attributes
|
||||
);
|
||||
|
||||
/**
|
||||
This function will open a file or directory referenced by filename.
|
||||
|
||||
If return is EFI_SUCCESS, the Filehandle is the opened file’s handle;
|
||||
otherwise, the Filehandle is NULL. The Attributes is valid only for
|
||||
EFI_FILE_MODE_CREATE.
|
||||
|
||||
@param FileName pointer to file name
|
||||
@param FileHandle pointer to the file handle.
|
||||
@param OpenMode the mode to open the file with.
|
||||
@param Attributes the file's file attributes.
|
||||
|
||||
@retval EFI_SUCCESS The information was set.
|
||||
@retval EFI_INVALID_PARAMETER One of the parameters has an invalid value.
|
||||
@retval EFI_UNSUPPORTED Could not open the file path.
|
||||
@retval EFI_NOT_FOUND The specified file could not be found on the
|
||||
device or the file system could not be found
|
||||
on the device.
|
||||
@retval EFI_NO_MEDIA The device has no medium.
|
||||
@retval EFI_MEDIA_CHANGED The device has a different medium in it or the
|
||||
medium is no longer supported.
|
||||
@retval EFI_DEVICE_ERROR The device reported an error.
|
||||
@retval EFI_VOLUME_CORRUPTED The file system structures are corrupted.
|
||||
@retval EFI_WRITE_PROTECTED The file or medium is write protected.
|
||||
@retval EFI_ACCESS_DENIED The file was opened read only.
|
||||
@retval EFI_OUT_OF_RESOURCES Not enough resources were available to open the
|
||||
file.
|
||||
@retval EFI_VOLUME_FULL The volume is full.
|
||||
**/
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
ShellOpenFileByName(
|
||||
IN CHAR16 *FilePath,
|
||||
OUT EFI_FILE_HANDLE *FileHandle,
|
||||
IN UINT64 OpenMode,
|
||||
IN UINT64 Attributes
|
||||
);
|
||||
|
||||
/**
|
||||
This function create a directory
|
||||
|
||||
If return is EFI_SUCCESS, the Filehandle is the opened directory's handle;
|
||||
otherwise, the Filehandle is NULL. If the directory already existed, this
|
||||
function opens the existing directory.
|
||||
|
||||
@param DirectoryName pointer to Directory name
|
||||
@param FileHandle pointer to the file handle.
|
||||
|
||||
@retval EFI_SUCCESS The information was set.
|
||||
@retval EFI_INVALID_PARAMETER One of the parameters has an invalid value.
|
||||
@retval EFI_UNSUPPORTED Could not open the file path.
|
||||
@retval EFI_NOT_FOUND The specified file could not be found on the
|
||||
device or the file system could not be found
|
||||
on the device.
|
||||
@retval EFI_NO_MEDIA The device has no medium.
|
||||
@retval EFI_MEDIA_CHANGED The device has a different medium in it or the
|
||||
medium is no longer supported.
|
||||
@retval EFI_DEVICE_ERROR The device reported an error.
|
||||
@retval EFI_VOLUME_CORRUPTED The file system structures are corrupted.
|
||||
@retval EFI_WRITE_PROTECTED The file or medium is write protected.
|
||||
@retval EFI_ACCESS_DENIED The file was opened read only.
|
||||
@retval EFI_OUT_OF_RESOURCES Not enough resources were available to open the
|
||||
file.
|
||||
@retval EFI_VOLUME_FULL The volume is full.
|
||||
**/
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
ShellCreateDirectory(
|
||||
IN CHAR16 *DirectoryName,
|
||||
OUT EFI_FILE_HANDLE *FileHandle
|
||||
);
|
||||
|
||||
/**
|
||||
This function reads information from an opened file.
|
||||
|
||||
If FileHandle is not a directory, the function reads the requested number of
|
||||
bytes from the file at the file’s current position and returns them in Buffer.
|
||||
If the read goes beyond the end of the file, the read length is truncated to the
|
||||
end of the file. The file’s current position is increased by the number of bytes
|
||||
returned. If FileHandle is a directory, the function reads the directory entry
|
||||
at the file’s current position and returns the entry in Buffer. If the Buffer
|
||||
is not large enough to hold the current directory entry, then
|
||||
EFI_BUFFER_TOO_SMALL is returned and the current file position is not updated.
|
||||
BufferSize is set to be the size of the buffer needed to read the entry. On
|
||||
success, the current position is updated to the next directory entry. If there
|
||||
are no more directory entries, the read returns a zero-length buffer.
|
||||
EFI_FILE_INFO is the structure returned as the directory entry.
|
||||
|
||||
@param FileHandle the opened file handle
|
||||
|
||||
@param ReadSize on input the size of buffer in bytes. on return
|
||||
the number of bytes written.
|
||||
|
||||
@param Buffer the buffer to put read data into.
|
||||
|
||||
@retval EFI_SUCCESS Data was read.
|
||||
@retval EFI_NO_MEDIA The device has no media.
|
||||
@retval EFI_DEVICE_ERROR The device reported an error.
|
||||
@retval EFI_VOLUME_CORRUPTED The file system structures are corrupted.
|
||||
@retval EFI_BUFFER_TO_SMALL Buffer is too small. ReadSize contains required
|
||||
size.
|
||||
|
||||
**/
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
ShellReadFile(
|
||||
IN EFI_FILE_HANDLE FileHandle,
|
||||
IN OUT UINTN *ReadSize,
|
||||
OUT VOID *Buffer
|
||||
);
|
||||
|
||||
/**
|
||||
Write data to a file.
|
||||
|
||||
This function writes the specified number of bytes to the file at the current
|
||||
file position. The current file position is advanced the actual number of bytes
|
||||
written, which is returned in BufferSize. Partial writes only occur when there
|
||||
has been a data error during the write attempt (such as “volume space full”).
|
||||
The file is automatically grown to hold the data if required. Direct writes to
|
||||
opened directories are not supported.
|
||||
|
||||
@param FileHandle The opened file for writing
|
||||
|
||||
@param BufferSize on input the number of bytes in Buffer. On output
|
||||
the number of bytes written.
|
||||
|
||||
@param Buffer the buffer containing data to write is stored.
|
||||
|
||||
@retval EFI_SUCCESS Data was written.
|
||||
@retval EFI_UNSUPPORTED Writes to an open directory are not supported.
|
||||
@retval EFI_NO_MEDIA The device has no media.
|
||||
@retval EFI_DEVICE_ERROR The device reported an error.
|
||||
@retval EFI_VOLUME_CORRUPTED The file system structures are corrupted.
|
||||
@retval EFI_WRITE_PROTECTED The device is write-protected.
|
||||
@retval EFI_ACCESS_DENIED The file was open for read only.
|
||||
@retval EFI_VOLUME_FULL The volume is full.
|
||||
**/
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
ShellWriteFile(
|
||||
IN EFI_FILE_HANDLE FileHandle,
|
||||
IN OUT UINTN *BufferSize,
|
||||
IN CONST VOID *Buffer
|
||||
);
|
||||
|
||||
/**
|
||||
Close an open file handle.
|
||||
|
||||
This function closes a specified file handle. All “dirty” cached file data is
|
||||
flushed to the device, and the file is closed. In all cases the handle is
|
||||
closed.
|
||||
|
||||
@param FileHandle the file handle to close.
|
||||
|
||||
@retval EFI_SUCCESS the file handle was closed sucessfully.
|
||||
@retval INVALID_PARAMETER One of the parameters has an invalid value.
|
||||
**/
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
ShellCloseFile (
|
||||
IN EFI_FILE_HANDLE *FileHandle
|
||||
);
|
||||
|
||||
/**
|
||||
Delete a file and close the handle
|
||||
|
||||
This function closes and deletes a file. In all cases the file handle is closed.
|
||||
If the file cannot be deleted, the warning code EFI_WARN_DELETE_FAILURE is
|
||||
returned, but the handle is still closed.
|
||||
|
||||
@param FileHandle the file handle to delete
|
||||
|
||||
@retval EFI_SUCCESS the file was closed sucessfully
|
||||
@retval EFI_WARN_DELETE_FAILURE the handle was closed, but the file was not
|
||||
deleted
|
||||
@retval INVALID_PARAMETER One of the parameters has an invalid value.
|
||||
**/
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
ShellDeleteFile (
|
||||
IN EFI_FILE_HANDLE *FileHandle
|
||||
);
|
||||
|
||||
/**
|
||||
Set the current position in a file.
|
||||
|
||||
This function sets the current file position for the handle to the position
|
||||
supplied. With the exception of seeking to position 0xFFFFFFFFFFFFFFFF, only
|
||||
absolute positioning is supported, and seeking past the end of the file is
|
||||
allowed (a subsequent write would grow the file). Seeking to position
|
||||
0xFFFFFFFFFFFFFFFF causes the current position to be set to the end of the file.
|
||||
If FileHandle is a directory, the only position that may be set is zero. This
|
||||
has the effect of starting the read process of the directory entries over.
|
||||
|
||||
@param FileHandle The file handle on which the position is being set
|
||||
|
||||
@param Position Byte position from begining of file
|
||||
|
||||
@retval EFI_SUCCESS Operation completed sucessfully.
|
||||
@retval EFI_UNSUPPORTED the seek request for non-zero is not valid on
|
||||
directories.
|
||||
@retval INVALID_PARAMETER One of the parameters has an invalid value.
|
||||
**/
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
ShellSetFilePosition (
|
||||
IN EFI_FILE_HANDLE FileHandle,
|
||||
IN UINT64 Position
|
||||
);
|
||||
|
||||
/**
|
||||
Gets a file's current position
|
||||
|
||||
This function retrieves the current file position for the file handle. For
|
||||
directories, the current file position has no meaning outside of the file
|
||||
system driver and as such the operation is not supported. An error is returned
|
||||
if FileHandle is a directory.
|
||||
|
||||
@param FileHandle The open file handle on which to get the position.
|
||||
@param Position Byte position from begining of file.
|
||||
|
||||
@retval EFI_SUCCESS the operation completed sucessfully.
|
||||
@retval INVALID_PARAMETER One of the parameters has an invalid value.
|
||||
@retval EFI_UNSUPPORTED the request is not valid on directories.
|
||||
**/
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
ShellGetFilePosition (
|
||||
IN EFI_FILE_HANDLE FileHandle,
|
||||
OUT UINT64 *Position
|
||||
);
|
||||
|
||||
/**
|
||||
Flushes data on a file
|
||||
|
||||
This function flushes all modified data associated with a file to a device.
|
||||
|
||||
@param FileHandle The file handle on which to flush data
|
||||
|
||||
@retval EFI_SUCCESS The data was flushed.
|
||||
@retval EFI_NO_MEDIA The device has no media.
|
||||
@retval EFI_DEVICE_ERROR The device reported an error.
|
||||
@retval EFI_VOLUME_CORRUPTED The file system structures are corrupted.
|
||||
@retval EFI_WRITE_PROTECTED The file or medium is write protected.
|
||||
@retval EFI_ACCESS_DENIED The file was opened for read only.
|
||||
**/
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
ShellFlushFile (
|
||||
IN EFI_FILE_HANDLE FileHandle
|
||||
);
|
||||
|
||||
/**
|
||||
Retrieves the first file from a directory
|
||||
|
||||
This function takes an open directory handle and gets the first file
|
||||
in the directory's info. Caller can use ShellFindNextFile() to get
|
||||
subsequent files.
|
||||
|
||||
@param DirHandle The file handle of the directory to search
|
||||
@param Buffer Pointer to buffer for file's information
|
||||
|
||||
@retval EFI_SUCCESS Found the first file.
|
||||
@retval EFI_NOT_FOUND Cannot find the directory.
|
||||
@retval EFI_NO_MEDIA The device has no media.
|
||||
@retval EFI_DEVICE_ERROR The device reported an error.
|
||||
@retval EFI_VOLUME_CORRUPTED The file system structures are corrupted.
|
||||
@return ShellReadFile
|
||||
**/
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
ShellFindFirstFile (
|
||||
IN EFI_FILE_HANDLE DirHandle,
|
||||
OUT EFI_FILE_INFO *Buffer
|
||||
);
|
||||
|
||||
/**
|
||||
Retrieves the next file in a directory.
|
||||
|
||||
To use this function, caller must call the ShellFindFirstFile() to get the
|
||||
first file, and then use this function get other files. This function can be
|
||||
called for several times to get each file's information in the directory. If
|
||||
the call of ShellFindNextFile() got the last file in the directory, the next
|
||||
call of this function has no file to get. *NoFile will be set to TRUE and the
|
||||
data in Buffer is meaningless.
|
||||
|
||||
@param DirHandle the file handle of the directory
|
||||
@param Buffer pointer to buffer for file's information
|
||||
@param NoFile pointer to boolean when last file is found
|
||||
|
||||
@retval EFI_SUCCESS Found the next file.
|
||||
@retval EFI_NO_MEDIA The device has no media.
|
||||
@retval EFI_DEVICE_ERROR The device reported an error.
|
||||
@retval EFI_VOLUME_CORRUPTED The file system structures are corrupted.
|
||||
**/
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
ShellFindNextFile(
|
||||
IN EFI_FILE_HANDLE DirHandle,
|
||||
OUT EFI_FILE_INFO *Buffer,
|
||||
OUT BOOLEAN *NoFile
|
||||
);
|
||||
|
||||
/**
|
||||
Retrieve the size of a file.
|
||||
|
||||
This function extracts the file size info from the FileHandle’s EFI_FILE_INFO
|
||||
data.
|
||||
|
||||
@param FileHandle file handle from which size is retrieved
|
||||
@param Size pointer to size
|
||||
|
||||
@retval EFI_SUCCESS operation was completed sucessfully
|
||||
@retval EFI_DEVICE_ERROR cannot access the file
|
||||
**/
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
ShellGetFileSize (
|
||||
IN EFI_FILE_HANDLE FileHandle,
|
||||
OUT UINT64 *Size
|
||||
);
|
||||
|
||||
/**
|
||||
Retrieves the status of the break execution flag
|
||||
|
||||
this function is useful to check whether the application is being asked to halt by the shell.
|
||||
|
||||
@retval TRUE the execution break is enabled
|
||||
@retval FALSE the execution break is not enabled
|
||||
**/
|
||||
BOOLEAN
|
||||
EFIAPI
|
||||
ShellGetExecutionBreakFlag(
|
||||
VOID
|
||||
);
|
||||
|
||||
/**
|
||||
return the value of an environment variable
|
||||
|
||||
this function gets the value of the environment variable set by the
|
||||
ShellSetEnvironmentVariable function
|
||||
|
||||
@param EnvKey The key name of the environment variable.
|
||||
|
||||
@retval NULL the named environment variable does not exist.
|
||||
@return != NULL pointer to the value of the environment variable
|
||||
**/
|
||||
CONST CHAR16*
|
||||
EFIAPI
|
||||
ShellGetEnvironmentVariable (
|
||||
IN CHAR16 *EnvKey
|
||||
);
|
||||
|
||||
/**
|
||||
set the value of an environment variable
|
||||
|
||||
This function changes the current value of the specified environment variable. If the
|
||||
environment variable exists and the Value is an empty string, then the environment
|
||||
variable is deleted. If the environment variable exists and the Value is not an empty
|
||||
string, then the value of the environment variable is changed. If the environment
|
||||
variable does not exist and the Value is an empty string, there is no action. If the
|
||||
environment variable does not exist and the Value is a non-empty string, then the
|
||||
environment variable is created and assigned the specified value.
|
||||
|
||||
This is not supported pre-UEFI Shell 2.0.
|
||||
|
||||
@param EnvKey The key name of the environment variable.
|
||||
@param EnvVal The Value of the environment variable
|
||||
@param Volatile Indicates whether the variable is non-volatile (FALSE) or volatile (TRUE).
|
||||
|
||||
@retval EFI_SUCCESS the operation was completed sucessfully
|
||||
@retval EFI_UNSUPPORTED This operation is not allowed in pre UEFI 2.0 Shell environments
|
||||
**/
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
ShellSetEnvironmentVariable (
|
||||
IN CONST CHAR16 *EnvKey,
|
||||
IN CONST CHAR16 *EnvVal,
|
||||
IN BOOLEAN Volatile
|
||||
);
|
||||
|
||||
/**
|
||||
cause the shell to parse and execute a command line.
|
||||
|
||||
This function creates a nested instance of the shell and executes the specified
|
||||
command (CommandLine) with the specified environment (Environment). Upon return,
|
||||
the status code returned by the specified command is placed in StatusCode.
|
||||
If Environment is NULL, then the current environment is used and all changes made
|
||||
by the commands executed will be reflected in the current environment. If the
|
||||
Environment is non-NULL, then the changes made will be discarded.
|
||||
The CommandLine is executed from the current working directory on the current
|
||||
device.
|
||||
|
||||
EnvironmentVariables and Status are only supported for UEFI Shell 2.0.
|
||||
Output is only supported for pre-UEFI Shell 2.0
|
||||
|
||||
@param ImageHandle Parent image that is starting the operation
|
||||
@param CommandLine pointer to null terminated command line.
|
||||
@param Output true to display debug output. false to hide it.
|
||||
@param EnvironmentVariables optional pointer to array of environment variables
|
||||
in the form "x=y". if NULL current set is used.
|
||||
@param Status the status of the run command line.
|
||||
|
||||
@retval EFI_SUCCESS the operation completed sucessfully. Status
|
||||
contains the status code returned.
|
||||
@retval EFI_INVALID_PARAMETER a parameter contains an invalid value
|
||||
@retval EFI_OUT_OF_RESOURCES out of resources
|
||||
@retval EFI_UNSUPPORTED the operation is not allowed.
|
||||
**/
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
ShellExecute (
|
||||
IN EFI_HANDLE *ParentHandle,
|
||||
IN CHAR16 *CommandLine,
|
||||
IN BOOLEAN Output,
|
||||
IN CHAR16 **EnvironmentVariables,
|
||||
OUT EFI_STATUS *Status
|
||||
);
|
||||
|
||||
/**
|
||||
Retreives the current directory path
|
||||
|
||||
If the DeviceName is NULL, it returns the current device’s current directory
|
||||
name. If the DeviceName is not NULL, it returns the current directory name
|
||||
on specified drive.
|
||||
|
||||
@param DeviceName the name of the drive to get directory on
|
||||
|
||||
@retval NULL the directory does not exist
|
||||
@return != NULL the directory
|
||||
**/
|
||||
CONST CHAR16*
|
||||
EFIAPI
|
||||
ShellGetCurrentDir (
|
||||
IN CHAR16 *DeviceName OPTIONAL
|
||||
);
|
||||
|
||||
/**
|
||||
sets (enabled or disabled) the page break mode
|
||||
|
||||
when page break mode is enabled the screen will stop scrolling
|
||||
and wait for operator input before scrolling a subsequent screen.
|
||||
|
||||
@param CurrentState TRUE to enable and FALSE to disable
|
||||
**/
|
||||
VOID
|
||||
EFIAPI
|
||||
ShellSetPageBreakMode (
|
||||
IN BOOLEAN CurrentState
|
||||
);
|
||||
|
||||
/**
|
||||
Opens a group of files based on a path.
|
||||
|
||||
This function uses the Arg to open all the matching files. Each matched
|
||||
file has a SHELL_FILE_ARG structure to record the file information. These
|
||||
structures are placed on the list ListHead. Users can get the SHELL_FILE_ARG
|
||||
structures from ListHead to access each file. This function supports wildcards
|
||||
and will process '?' and '*' as such. the list must be freed with a call to
|
||||
ShellCloseFileMetaArg().
|
||||
|
||||
This function will fail if called sequentially without freeing the list in the middle.
|
||||
|
||||
@param Arg pointer to path string
|
||||
@param OpenMode mode to open files with
|
||||
@param ListHead head of linked list of results
|
||||
|
||||
@retval EFI_SUCCESS the operation was sucessful and the list head
|
||||
contains the list of opened files
|
||||
#retval EFI_UNSUPPORTED a previous ShellOpenFileMetaArg must be closed first.
|
||||
*ListHead is set to NULL.
|
||||
@return != EFI_SUCCESS the operation failed
|
||||
|
||||
@sa InternalShellConvertFileListType
|
||||
**/
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
ShellOpenFileMetaArg (
|
||||
IN CHAR16 *Arg,
|
||||
IN UINT64 OpenMode,
|
||||
IN OUT EFI_SHELL_FILE_INFO **ListHead
|
||||
);
|
||||
|
||||
/**
|
||||
Free the linked list returned from ShellOpenFileMetaArg
|
||||
|
||||
@param ListHead the pointer to free
|
||||
|
||||
@retval EFI_SUCCESS the operation was sucessful
|
||||
@retval EFI_INVALID_PARAMETER A parameter was invalid
|
||||
**/
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
ShellCloseFileMetaArg (
|
||||
IN OUT EFI_SHELL_FILE_INFO **ListHead
|
||||
);
|
||||
|
||||
typedef enum {
|
||||
TypeFlag = 0,
|
||||
TypeValue,
|
||||
TypePosition,
|
||||
TypeMax,
|
||||
} ParamType;
|
||||
|
||||
typedef struct {
|
||||
CHAR16 *Name;
|
||||
ParamType Type;
|
||||
} SHELL_PARAM_ITEM;
|
||||
|
||||
/**
|
||||
Checks the command line arguments passed against the list of valid ones.
|
||||
Optionally removes NULL values first.
|
||||
|
||||
If no initialization is required, then return RETURN_SUCCESS.
|
||||
|
||||
@param CheckList pointer to list of parameters to check
|
||||
@param CheckPackage Package of checked values
|
||||
@param ProblemParam optional pointer to pointer to unicode string for
|
||||
the paramater that caused failure.
|
||||
@param AutoPageBreak will automatically set PageBreakEnabled
|
||||
|
||||
@retval EFI_SUCCESS The operation completed sucessfully.
|
||||
@retval EFI_OUT_OF_RESOURCES A memory allocation failed
|
||||
@retval EFI_INVALID_PARAMETER A parameter was invalid
|
||||
@retval EFI_VOLUME_CORRUPTED the command line was corrupt. an argument was
|
||||
duplicated. the duplicated command line argument
|
||||
was returned in ProblemParam if provided.
|
||||
@retval EFI_DEVICE_ERROR the commands contained 2 opposing arguments. one
|
||||
of the command line arguments was returned in
|
||||
ProblemParam if provided.
|
||||
@retval EFI_NOT_FOUND a argument required a value that was missing.
|
||||
the invalid command line argument was returned in
|
||||
ProblemParam if provided.
|
||||
**/
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
ShellCommandLineParse (
|
||||
IN CONST SHELL_PARAM_ITEM *CheckList,
|
||||
OUT LIST_ENTRY **CheckPackage,
|
||||
OUT CHAR16 **ProblemParam OPTIONAL,
|
||||
IN BOOLEAN AutoPageBreak
|
||||
);
|
||||
|
||||
/**
|
||||
Frees shell variable list that was returned from ShellCommandLineParse.
|
||||
|
||||
This function will free all the memory that was used for the CheckPackage
|
||||
list of postprocessed shell arguments.
|
||||
|
||||
this function has no return value.
|
||||
|
||||
if CheckPackage is NULL, then return
|
||||
|
||||
@param CheckPackage the list to de-allocate
|
||||
**/
|
||||
VOID
|
||||
EFIAPI
|
||||
ShellCommandLineFreeVarList (
|
||||
IN LIST_ENTRY *CheckPackage
|
||||
);
|
||||
|
||||
/**
|
||||
Checks for presence of a flag parameter
|
||||
|
||||
flag arguments are in the form of "-<Key>" or "/<Key>", but do not have a value following the key
|
||||
|
||||
if CheckPackage is NULL then return FALSE.
|
||||
if KeyString is NULL then ASSERT()
|
||||
|
||||
@param CheckPackage The package of parsed command line arguments
|
||||
@param KeyString the Key of the command line argument to check for
|
||||
|
||||
@retval TRUE the flag is on the command line
|
||||
@retval FALSE the flag is not on the command line
|
||||
**/
|
||||
BOOLEAN
|
||||
EFIAPI
|
||||
ShellCommandLineGetFlag (
|
||||
IN CONST LIST_ENTRY *CheckPackage,
|
||||
IN CHAR16 *KeyString
|
||||
);
|
||||
|
||||
/**
|
||||
returns value from command line argument
|
||||
|
||||
value parameters are in the form of "-<Key> value" or "/<Key> value"
|
||||
|
||||
if CheckPackage is NULL, then return NULL;
|
||||
|
||||
@param CheckPackage The package of parsed command line arguments
|
||||
@param KeyString the Key of the command line argument to check for
|
||||
|
||||
@retval NULL the flag is not on the command line
|
||||
@return !=NULL pointer to unicode string of the value
|
||||
**/
|
||||
CONST CHAR16*
|
||||
EFIAPI
|
||||
ShellCommandLineGetValue (
|
||||
IN CONST LIST_ENTRY *CheckPackage,
|
||||
IN CHAR16 *KeyString
|
||||
);
|
||||
|
||||
/**
|
||||
returns raw value from command line argument
|
||||
|
||||
raw value parameters are in the form of "value" in a specific position in the list
|
||||
|
||||
if CheckPackage is NULL, then return NULL;
|
||||
|
||||
@param CheckPackage The package of parsed command line arguments
|
||||
@param Position the position of the value
|
||||
|
||||
@retval NULL the flag is not on the command line
|
||||
@return !=NULL pointer to unicode string of the value
|
||||
**/
|
||||
CONST CHAR16*
|
||||
EFIAPI
|
||||
ShellCommandLineGetRawValue (
|
||||
IN CONST LIST_ENTRY *CheckPackage,
|
||||
IN UINT32 Position
|
||||
);
|
||||
|
||||
#endif // __SHELL_LIB__
|
|
@ -0,0 +1,949 @@
|
|||
/** @file
|
||||
EFI Shell protocol as defined in the UEFI Shell 2.0 specification.
|
||||
|
||||
Copyright (c) 2006 - 2009, Intel Corporation
|
||||
All rights reserved. This program and the accompanying materials
|
||||
are licensed and made available under the terms and conditions of the BSD License
|
||||
which accompanies this distribution. The full text of the license may be found at
|
||||
http://opensource.org/licenses/bsd-license.php
|
||||
|
||||
THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
|
||||
|
||||
**/
|
||||
|
||||
#ifndef __EFI_SHELL_PROTOCOL__
|
||||
#define __EFI_SHELL_PROTOCOL__
|
||||
|
||||
#include <Protocol/SimpleFileSystem.h>
|
||||
#include <Guid/FileInfo.h>
|
||||
|
||||
#define EFI_SHELL_PROTOCOL_GUID \
|
||||
{ \
|
||||
0x6302d008, 0x7f9b, 0x4f30, { 0x87, 0xac, 0x60, 0xc9, 0xfe, 0xf5, 0xda, 0x4e } \
|
||||
}
|
||||
|
||||
typedef struct _EFI_LIST_ENTRY {
|
||||
struct _EFI_LIST_ENTRY *Flink;
|
||||
struct _EFI_LIST_ENTRY *Blink;
|
||||
} EFI_LIST_ENTRY;
|
||||
|
||||
typedef struct {
|
||||
EFI_LIST_ENTRY Link;
|
||||
EFI_STATUS Status;
|
||||
CONST CHAR16 *FullName;
|
||||
CONST CHAR16 *FileName;
|
||||
EFI_FILE_HANDLE Handle;
|
||||
EFI_FILE_INFO *Info;
|
||||
} EFI_SHELL_FILE_INFO;
|
||||
/**
|
||||
Returns whether any script files are currently being processed.
|
||||
|
||||
@retval TRUE There is at least one script file active.
|
||||
@retval FALSE No script files are active now.
|
||||
|
||||
**/
|
||||
typedef
|
||||
BOOLEAN
|
||||
(EFIAPI *EFI_SHELL_BATCH_IS_ACTIVE) (
|
||||
VOID
|
||||
);
|
||||
|
||||
/**
|
||||
Closes the file handle.
|
||||
|
||||
This function closes a specified file handle. All 'dirty' cached file data is
|
||||
flushed to the device, and the file is closed. In all cases, the handle is
|
||||
closed.
|
||||
|
||||
@param FileHandle The file handle to be closed
|
||||
|
||||
@retval EFI_SUCCESS the file closed sucessfully
|
||||
**/
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(EFIAPI *EFI_SHELL_CLOSE_FILE)(
|
||||
IN EFI_FILE_HANDLE FileHandle
|
||||
);
|
||||
|
||||
/**
|
||||
Creates a file or directory by name.
|
||||
|
||||
This function creates an empty new file or directory with the specified attributes and
|
||||
returns the new file's handle. If the file already exists and is read-only, then
|
||||
EFI_INVALID_PARAMETER will be returned.
|
||||
|
||||
If the file already existed, it is truncated and its attributes updated. If the file is
|
||||
created successfully, the FileHandle is the file's handle, else, the FileHandle is NULL.
|
||||
|
||||
If the file name begins with >v, then the file handle which is returned refers to the
|
||||
shell environment variable with the specified name. If the shell environment variable
|
||||
already exists and is non-volatile then EFI_INVALID_PARAMETER is returned.
|
||||
|
||||
@param FileName Pointer to null-terminated file path
|
||||
@param FileAttribs The new file's attrbiutes. the different attributes are
|
||||
described in EFI_FILE_PROTOCOL.Open().
|
||||
@param FileHandle On return, points to the created file handle or directory's handle
|
||||
|
||||
@retval EFI_SUCCESS The file was opened. FileHandle points to the new file's handle.
|
||||
@retval EFI_INVALID_PARAMETER One of the parameters has an invalid value.
|
||||
@retval EFI_UNSUPPORTED could not open the file path
|
||||
@retval EFI_NOT_FOUND the specified file could not be found on the devide, or could not
|
||||
file the file system on the device.
|
||||
@retval EFI_NO_MEDIA the device has no medium.
|
||||
@retval EFI_MEDIA_CHANGED The device has a different medium in it or the medium is no
|
||||
longer supported.
|
||||
@retval EFI_DEVICE_ERROR The device reported an error or can't get the file path according
|
||||
the DirName.
|
||||
@retval EFI_VOLUME_CORRUPTED The file system structures are corrupted.
|
||||
@retval EFI_WRITE_PROTECTED An attempt was made to create a file, or open a file for write
|
||||
when the media is write-protected.
|
||||
@retval EFI_ACCESS_DENIED The service denied access to the file.
|
||||
@retval EFI_OUT_OF_RESOURCES Not enough resources were available to open the file.
|
||||
@retval EFI_VOLUME_FULL The volume is full.
|
||||
**/
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(EFIAPI *EFI_SHELL_CREATE_FILE)(
|
||||
IN CONST CHAR16 *FileName,
|
||||
IN UINT64 FileAttribs,
|
||||
OUT EFI_FILE_HANDLE *FileHandle
|
||||
);
|
||||
|
||||
/**
|
||||
Deletes the file specified by the file handle.
|
||||
|
||||
This function closes and deletes a file. In all cases, the file handle is closed. If the file
|
||||
cannot be deleted, the warning code EFI_WARN_DELETE_FAILURE is returned, but the
|
||||
handle is still closed.
|
||||
|
||||
@param FileHandle The file handle to delete.
|
||||
|
||||
@retval EFI_SUCCESS The file was closed and deleted, and the handle was closed.
|
||||
@retval EFI_WARN_DELETE_FAILURE The handle was closed but the file was not deleted.
|
||||
**/
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(EFIAPI *EFI_SHELL_DELETE_FILE)(
|
||||
IN EFI_FILE_HANDLE FileHandle
|
||||
);
|
||||
|
||||
/**
|
||||
Deletes the file specified by the file name.
|
||||
|
||||
This function deletes a file.
|
||||
|
||||
@param FileName Points to the null-terminated file name.
|
||||
|
||||
@retval EFI_SUCCESS The file was closed and deleted, and the handle was closed.
|
||||
@retval EFI_WARN_DELETE_FAILURE The handle was closed but the file was not deleted.
|
||||
**/
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(EFIAPI *EFI_SHELL_DELETE_FILE_BY_NAME)(
|
||||
IN CONST CHAR16 *FileName
|
||||
);
|
||||
|
||||
/**
|
||||
Disables the page break output mode.
|
||||
**/
|
||||
typedef
|
||||
VOID
|
||||
(EFIAPI *EFI_SHELL_DISABLE_PAGE_BREAK) (
|
||||
VOID
|
||||
);
|
||||
|
||||
/**
|
||||
Enables the page break output mode.
|
||||
**/
|
||||
typedef
|
||||
VOID
|
||||
(EFIAPI *EFI_SHELL_ENABLE_PAGE_BREAK) (
|
||||
VOID
|
||||
);
|
||||
|
||||
/**
|
||||
Execute the command line.
|
||||
|
||||
This function creates a nested instance of the shell and executes the specified
|
||||
command (CommandLine) with the specified environment (Environment). Upon return,
|
||||
the status code returned by the specified command is placed in StatusCode.
|
||||
|
||||
If Environment is NULL, then the current environment is used and all changes made
|
||||
by the commands executed will be reflected in the current environment. If the
|
||||
Environment is non-NULL, then the changes made will be discarded.
|
||||
|
||||
The CommandLine is executed from the current working directory on the current
|
||||
device.
|
||||
|
||||
@param ParentImageHandle A handle of the image that is executing the specified
|
||||
command line.
|
||||
@param CommandLine Points to the null-terminated UCS-2 encoded string
|
||||
containing the command line. If NULL then the command-
|
||||
line will be empty.
|
||||
@param Environment Points to a null-terminated array of environment
|
||||
variables with the format 'x=y', where x is the
|
||||
environment variable name and y is the value. If this
|
||||
is NULL, then the current shell environment is used.
|
||||
@param ErrorCode Points to the status code returned by the command.
|
||||
|
||||
@retval EFI_SUCCESS The command executed successfully. The status code
|
||||
returned by the command is pointed to by StatusCode.
|
||||
@retval EFI_INVALID_PARAMETER The parameters are invalid.
|
||||
@retval EFI_OUT_OF_RESOURCES Out of resources.
|
||||
@retval EFI_UNSUPPORTED Nested shell invocations are not allowed.
|
||||
**/
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(EFIAPI *EFI_SHELL_EXECUTE) (
|
||||
IN EFI_HANDLE *ParentImageHandle,
|
||||
IN CHAR16 *CommandLine OPTIONAL,
|
||||
IN CHAR16 **Environment OPTIONAL,
|
||||
OUT EFI_STATUS *StatusCode OPTIONAL
|
||||
);
|
||||
|
||||
/**
|
||||
Find files that match a specified pattern.
|
||||
|
||||
This function searches for all files and directories that match the specified
|
||||
FilePattern. The FilePattern can contain wild-card characters. The resulting file
|
||||
information is placed in the file list FileList.
|
||||
|
||||
The files in the file list are not opened. The OpenMode field is set to 0 and the FileInfo
|
||||
field is set to NULL.
|
||||
|
||||
@param FilePattern Points to a null-terminated shell file path, including wildcards.
|
||||
@param FileList On return, points to the start of a file list containing the names
|
||||
of all matching files or else points to NULL if no matching files
|
||||
were found.
|
||||
|
||||
@retval EFI_SUCCESS Files found.
|
||||
@retval EFI_NOT_FOUND No files found.
|
||||
@retval EFI_NO_MEDIA The device has no media
|
||||
@retval EFI_DEVICE_ERROR The device reported an error
|
||||
@retval EFI_VOLUME_CORRUPTED The file system structures are corrupted
|
||||
**/
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(EFIAPI *EFI_SHELL_FIND_FILES)(
|
||||
IN CONST CHAR16 *FilePattern,
|
||||
OUT EFI_SHELL_FILE_INFO **FileList
|
||||
);
|
||||
|
||||
/**
|
||||
Find all files in a specified directory.
|
||||
|
||||
@param FileDirHandle Handle of the directory to search.
|
||||
@param FileList On return, points to the list of files in the directory
|
||||
or NULL if there are no files in the directory.
|
||||
|
||||
@retval EFI_SUCCESS File information was returned successfully.
|
||||
@retval EFI_VOLUME_CORRUPTED The file system structures have been corrupted.
|
||||
@retval EFI_DEVICE_ERROR The device reported an error.
|
||||
@retval EFI_NO_MEDIA The device media is not present.
|
||||
**/
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(EFIAPI *EFI_SHELL_FIND_FILES_IN_DIR)(
|
||||
IN EFI_FILE_HANDLE FileDirHandle,
|
||||
OUT EFI_SHELL_FILE_INFO **FileList
|
||||
);
|
||||
|
||||
/**
|
||||
Flushes data back to a device
|
||||
|
||||
This function flushes all modified data associated with a file to a device.
|
||||
|
||||
@param FileHandle The handle of the file to flush
|
||||
|
||||
@retval EFI_SUCCESS The data was flushed.
|
||||
@retval EFI_NO_MEDIA The device has no medium.
|
||||
@retval EFI_DEVICE_ERROR The device reported an error.
|
||||
@retval EFI_VOLUME_CORRUPTED The file system structures are corrupted.
|
||||
@retval EFI_WRITE_PROTECTED The file or medium is write-protected.
|
||||
@retval EFI_ACCESS_DENIED The file was opened read-only.
|
||||
@retval EFI_VOLUME_FULL The volume is full.
|
||||
**/
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(EFIAPI *EFI_SHELL_FLUSH_FILE)(
|
||||
IN EFI_FILE_HANDLE FileHandle
|
||||
);
|
||||
|
||||
/**
|
||||
Frees the file list.
|
||||
|
||||
This function cleans up the file list and any related data structures. It has no
|
||||
impact on the files themselves.
|
||||
|
||||
@param FileList The file list to free. Type EFI_SHELL_FILE_INFO is
|
||||
defined in OpenFileList()
|
||||
|
||||
@retval EFI_SUCCESS Free the file list successfully.
|
||||
**/
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(EFIAPI *EFI_SHELL_FREE_FILE_LIST) (
|
||||
IN EFI_SHELL_FILE_INFO **FileList
|
||||
);
|
||||
|
||||
/**
|
||||
Returns the current directory on the specified device.
|
||||
|
||||
If FileSystemMapping is NULL, it returns the current working directory. If the
|
||||
FileSystemMapping is not NULL, it returns the current directory associated with the
|
||||
FileSystemMapping. In both cases, the returned name includes the file system
|
||||
mapping (i.e. fs0:\current-dir).
|
||||
|
||||
@param FileSystemMapping A pointer to the file system mapping. If NULL,
|
||||
then the current working directory is returned.
|
||||
|
||||
@retval !=NULL The current directory.
|
||||
@retval NULL Current directory does not exist.
|
||||
**/
|
||||
typedef
|
||||
CONST CHAR16 *
|
||||
(EFIAPI *EFI_SHELL_GET_CUR_DIR) (
|
||||
IN CONST CHAR16 *FileSystemMapping OPTIONAL
|
||||
);
|
||||
|
||||
typedef UINT32 EFI_SHELL_DEVICE_NAME_FLAGS;
|
||||
#define EFI_DEVICE_NAME_USE_COMPONENT_NAME 0x00000001
|
||||
#define EFI_DEVICE_NAME_USE_DEVICE_PATH 0x00000002
|
||||
/**
|
||||
Gets the name of the device specified by the device handle.
|
||||
|
||||
This function gets the user-readable name of the device specified by the device
|
||||
handle. If no user-readable name could be generated, then *BestDeviceName will be
|
||||
NULL and EFI_NOT_FOUND will be returned.
|
||||
|
||||
@param DeviceHandle The handle of the device.
|
||||
@param Flags Determines the possible sources of component names.
|
||||
@param Language A pointer to the language specified for the device
|
||||
name, in the same format as described in the UEFI
|
||||
specification, Appendix M
|
||||
@param BestDeviceName On return, points to the callee-allocated null-
|
||||
terminated name of the device. If no device name
|
||||
could be found, points to NULL. The name must be
|
||||
freed by the caller...
|
||||
|
||||
@retval EFI_SUCCESS Get the name successfully.
|
||||
@retval EFI_NOT_FOUND Fail to get the device name.
|
||||
**/
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(*EFI_SHELL_GET_DEVICE_NAME) (
|
||||
IN EFI_HANDLE DeviceHandle,
|
||||
IN EFI_SHELL_DEVICE_NAME_FLAGS Flags,
|
||||
IN CHAR8 *Language,
|
||||
OUT CHAR16 **BestDeviceName
|
||||
);
|
||||
|
||||
/**
|
||||
Gets the device path from the mapping.
|
||||
|
||||
This function gets the device path associated with a mapping.
|
||||
|
||||
@param Mapping A pointer to the mapping
|
||||
|
||||
@retval !=NULL Pointer to the device path that corresponds to the
|
||||
device mapping. The returned pointer does not need
|
||||
to be freed.
|
||||
@retval NULL There is no device path associated with the
|
||||
specified mapping.
|
||||
**/
|
||||
typedef
|
||||
CONST EFI_DEVICE_PATH_PROTOCOL *
|
||||
(EFIAPI *EFI_SHELL_GET_DEVICE_PATH_FROM_MAP) (
|
||||
IN CONST CHAR16 *Mapping
|
||||
);
|
||||
|
||||
/**
|
||||
Converts a file system style name to a device path.
|
||||
|
||||
This function converts a file system style name to a device path, by replacing any
|
||||
mapping references to the associated device path.
|
||||
|
||||
@param Path the pointer to the path
|
||||
|
||||
@return all The pointer of the file path. The file path is callee
|
||||
allocated and should be freed by the caller.
|
||||
**/
|
||||
typedef
|
||||
EFI_DEVICE_PATH_PROTOCOL *
|
||||
(EFIAPI *EFI_SHELL_GET_DEVICE_PATH_FROM_FILE_PATH) (
|
||||
IN CONST CHAR16 *Path
|
||||
);
|
||||
|
||||
/**
|
||||
Gets the environment variable.
|
||||
|
||||
This function returns the current value of the specified environment variable.
|
||||
|
||||
@param Name A pointer to the environment variable name
|
||||
|
||||
@return !=NULL The environment variable's value. The returned
|
||||
pointer does not need to be freed by the caller.
|
||||
@retval NULL The environment variable doesn't exist.
|
||||
**/
|
||||
typedef
|
||||
CONST CHAR16 *
|
||||
(EFIAPI *EFI_SHELL_GET_ENV) (
|
||||
IN CONST CHAR16 *Name
|
||||
);
|
||||
|
||||
/**
|
||||
Gets the file information from an open file handle.
|
||||
|
||||
This function allocates a buffer to store the file's information. It's the caller's
|
||||
responsibility to free the buffer.
|
||||
|
||||
@param FileHandle A File Handle
|
||||
|
||||
@return !=NULL Cannot get the file info.
|
||||
@return NULL A pointer to a buffer with file information.
|
||||
**/
|
||||
typedef
|
||||
EFI_FILE_INFO *
|
||||
(EFIAPI *EFI_SHELL_GET_FILE_INFO)(
|
||||
IN EFI_FILE_HANDLE FileHandle
|
||||
);
|
||||
|
||||
/**
|
||||
Converts a device path to a file system-style path.
|
||||
|
||||
This function converts a device path to a file system path by replacing part, or all, of
|
||||
the device path with the file-system mapping. If there are more than one application
|
||||
file system mappings, the one that most closely matches Path will be used.
|
||||
|
||||
@param Path The pointer to the device path
|
||||
|
||||
@return all The pointer of the null-terminated file path. The path
|
||||
is callee-allocated and should be freed by the caller.
|
||||
**/
|
||||
typedef
|
||||
CHAR16 *
|
||||
(EFIAPI *EFI_SHELL_GET_FILE_PATH_FROM_DEVICE_PATH) (
|
||||
IN CONST EFI_DEVICE_PATH_PROTOCOL *Path
|
||||
);
|
||||
|
||||
/**
|
||||
Gets a file's current position
|
||||
|
||||
This function returns the current file position for the file handle. For directories, the
|
||||
current file position has no meaning outside of the file system driver and as such, the
|
||||
operation is not supported.
|
||||
|
||||
@param FileHandle The file handle on which to get the current position.
|
||||
@param Position Byte position from the start of the file
|
||||
|
||||
@retval EFI_SUCCESS Data was accessed.
|
||||
@retval EFI_UNSUPPORTED The request is not valid on open directories.
|
||||
**/
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(EFIAPI *EFI_SHELL_GET_FILE_POSITION)(
|
||||
IN EFI_FILE_HANDLE FileHandle,
|
||||
OUT UINT64 *Position
|
||||
);
|
||||
|
||||
/**
|
||||
Gets the size of a file.
|
||||
|
||||
This function returns the size of the file specified by FileHandle.
|
||||
|
||||
@param FileHandle The handle of the file.
|
||||
@param Size The size of this file.
|
||||
|
||||
@retval EFI_SUCCESS Get the file's size.
|
||||
@retval EFI_DEVICE_ERROR Can't access the file.
|
||||
**/
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(EFIAPI *EFI_SHELL_GET_FILE_SIZE)(
|
||||
IN EFI_FILE_HANDLE FileHandle,
|
||||
OUT UINT64 *Size
|
||||
);
|
||||
|
||||
/**
|
||||
Return help information about a specific command.
|
||||
|
||||
This function returns the help information for the specified command. The help text
|
||||
can be internal to the shell or can be from a UEFI Shell manual page.
|
||||
|
||||
If Sections is specified, then each section name listed will be compared in a casesensitive
|
||||
manner, to the section names described in Appendix B. If the section exists,
|
||||
it will be appended to the returned help text. If the section does not exist, no
|
||||
information will be returned. If Sections is NULL, then all help text information
|
||||
available will be returned.
|
||||
|
||||
@param Command Points to the null-terminated UEFI Shell command name.
|
||||
@param Sections Points to the null-terminated comma-delimited
|
||||
section names to return. If NULL, then all
|
||||
sections will be returned.
|
||||
@param HelpText On return, points to a callee-allocated buffer
|
||||
containing all specified help text.
|
||||
|
||||
@retval EFI_SUCCESS The help text was returned.
|
||||
@retval EFI_OUT_OF_RESOURCES The necessary buffer could not be allocated to hold the
|
||||
returned help text.
|
||||
@retval EFI_INVALID_PARAMETER HelpText is NULL
|
||||
@retval EFI_NOT_FOUND There is no help text available for Command.
|
||||
**/
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(EFIAPI *EFI_SHELL_GET_HELP_TEXT) (
|
||||
IN CONST CHAR16 *Command,
|
||||
IN CONST CHAR16 *Sections,
|
||||
OUT CHAR16 **HelpText
|
||||
);
|
||||
|
||||
/**
|
||||
Gets the mapping that most closely matches the device path.
|
||||
|
||||
This function gets the mapping which corresponds to the device path *DevicePath. If
|
||||
there is no exact match, then the mapping which most closely matches *DevicePath
|
||||
is returned, and *DevicePath is updated to point to the remaining portion of the
|
||||
device path. If there is an exact match, the mapping is returned and *DevicePath
|
||||
points to the end-of-device-path node.
|
||||
|
||||
@param DevicePath On entry, points to a device path pointer. On
|
||||
exit, updates the pointer to point to the
|
||||
portion of the device path after the mapping.
|
||||
|
||||
@retval NULL No mapping was found.
|
||||
@return !=NULL Pointer to null-terminated mapping. The buffer
|
||||
is callee allocated and should be freed by the caller.
|
||||
**/
|
||||
typedef
|
||||
CONST CHAR16 *
|
||||
(EFIAPI *EFI_SHELL_GET_MAP_FROM_DEVICE_PATH) (
|
||||
IN OUT EFI_DEVICE_PATH_PROTOCOL **DevicePath
|
||||
);
|
||||
|
||||
/**
|
||||
Gets the enable status of the page break output mode.
|
||||
|
||||
User can use this function to determine current page break mode.
|
||||
|
||||
@retval TRUE The page break output mode is enabled
|
||||
@retval FALSE The page break output mode is disabled
|
||||
**/
|
||||
typedef
|
||||
BOOLEAN
|
||||
(EFIAPI *EFI_SHELL_GET_PAGE_BREAK) (
|
||||
VOID
|
||||
);
|
||||
|
||||
/**
|
||||
Judges whether the active shell is the root shell.
|
||||
|
||||
This function makes the user to know that whether the active Shell is the root shell.
|
||||
|
||||
@retval TRUE The active Shell is the root Shell.
|
||||
@retval FALSE The active Shell is NOT the root Shell.
|
||||
**/
|
||||
typedef
|
||||
BOOLEAN
|
||||
(EFIAPI *EFI_SHELL_IS_ROOT_SHELL) (
|
||||
VOID
|
||||
);
|
||||
|
||||
/**
|
||||
Opens a file or a directory by file name.
|
||||
|
||||
This function opens the specified file in the specified OpenMode and returns a file
|
||||
handle.
|
||||
If the file name begins with >v, then the file handle which is returned refers to the
|
||||
shell environment variable with the specified name. If the shell environment variable
|
||||
exists, is non-volatile and the OpenMode indicates EFI_FILE_MODE_WRITE, then
|
||||
EFI_INVALID_PARAMETER is returned.
|
||||
|
||||
If the file name is >i, then the file handle which is returned refers to the standard
|
||||
input. If the OpenMode indicates EFI_FILE_MODE_WRITE, then EFI_INVALID_PARAMETER
|
||||
is returned.
|
||||
|
||||
If the file name is >o, then the file handle which is returned refers to the standard
|
||||
output. If the OpenMode indicates EFI_FILE_MODE_READ, then EFI_INVALID_PARAMETER
|
||||
is returned.
|
||||
|
||||
If the file name is >e, then the file handle which is returned refers to the standard
|
||||
error. If the OpenMode indicates EFI_FILE_MODE_READ, then EFI_INVALID_PARAMETER
|
||||
is returned.
|
||||
|
||||
If the file name is NUL, then the file handle that is returned refers to the standard NUL
|
||||
file. If the OpenMode indicates EFI_FILE_MODE_READ, then EFI_INVALID_PARAMETER is
|
||||
returned.
|
||||
|
||||
If return EFI_SUCCESS, the FileHandle is the opened file's handle, else, the
|
||||
FileHandle is NULL.
|
||||
|
||||
@param FileName Points to the null-terminated UCS-2 encoded file name.
|
||||
@param FileHandle On return, points to the file handle.
|
||||
@param OpenMode File open mode. Either EFI_FILE_MODE_READ or
|
||||
EFI_FILE_MODE_WRITE from section 12.4 of the UEFI
|
||||
Specification.
|
||||
@retval EFI_SUCCESS The file was opened. FileHandle has the opened file's handle.
|
||||
@retval EFI_INVALID_PARAMETER One of the parameters has an invalid value. FileHandle is NULL.
|
||||
@retval EFI_UNSUPPORTED Could not open the file path. FileHandle is NULL.
|
||||
@retval EFI_NOT_FOUND The specified file could not be found on the device or the file
|
||||
system could not be found on the device. FileHandle is NULL.
|
||||
@retval EFI_NO_MEDIA The device has no medium. FileHandle is NULL.
|
||||
@retval EFI_MEDIA_CHANGED The device has a different medium in it or the medium is no
|
||||
longer supported. FileHandle is NULL.
|
||||
@retval EFI_DEVICE_ERROR The device reported an error or can't get the file path according
|
||||
the FileName. FileHandle is NULL.
|
||||
@retval EFI_VOLUME_CORRUPTED The file system structures are corrupted. FileHandle is NULL.
|
||||
@retval EFI_WRITE_PROTECTED An attempt was made to create a file, or open a file for write
|
||||
when the media is write-protected. FileHandle is NULL.
|
||||
@retval EFI_ACCESS_DENIED The service denied access to the file. FileHandle is NULL.
|
||||
@retval EFI_OUT_OF_RESOURCES Not enough resources were available to open the file. FileHandle
|
||||
is NULL.
|
||||
@retval EFI_VOLUME_FULL The volume is full. FileHandle is NULL.
|
||||
**/
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(EFIAPI *EFI_SHELL_OPEN_FILE_BY_NAME) (
|
||||
IN CONST CHAR16 *FileName,
|
||||
OUT EFI_FILE_HANDLE *FileHandle,
|
||||
IN UINT64 OpenMode
|
||||
);
|
||||
|
||||
/**
|
||||
Opens the files that match the path specified.
|
||||
|
||||
This function opens all of the files specified by Path. Wildcards are processed
|
||||
according to the rules specified in UEFI Shell 2.0 spec section 3.7.1. Each
|
||||
matching file has an EFI_SHELL_FILE_INFO structure created in a linked list.
|
||||
|
||||
@param Path A pointer to the path string.
|
||||
@param OpenMode Specifies the mode used to open each file, EFI_FILE_MODE_READ or
|
||||
EFI_FILE_MODE_WRITE.
|
||||
@param FileList Points to the start of a list of files opened.
|
||||
|
||||
@retval EFI_SUCCESS Create the file list successfully.
|
||||
@return Others Can't create the file list.
|
||||
**/
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(EFIAPI *EFI_SHELL_OPEN_FILE_LIST) (
|
||||
IN CHAR16 *Path,
|
||||
IN UINT64 OpenMode,
|
||||
IN OUT EFI_SHELL_FILE_INFO **FileList
|
||||
);
|
||||
|
||||
/**
|
||||
Opens the root directory of a device.
|
||||
|
||||
This function opens the root directory of a device and returns a file handle to it.
|
||||
|
||||
@param DevicePath Points to the device path corresponding to the device where the
|
||||
EFI_SIMPLE_FILE_SYSTEM_PROTOCOL is installed.
|
||||
@param FileHandle On exit, points to the file handle corresponding to the root directory on the
|
||||
device.
|
||||
|
||||
@retval EFI_SUCCESS Root opened successfully.
|
||||
@retval EFI_NOT_FOUND EFI_SIMPLE_FILE_SYSTEM could not be found or the root directory
|
||||
could not be opened.
|
||||
@retval EFI_VOLUME_CORRUPTED The data structures in the volume were corrupted.
|
||||
@retval EFI_DEVICE_ERROR The device had an error
|
||||
**/
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(EFIAPI *EFI_SHELL_OPEN_ROOT)(
|
||||
IN EFI_DEVICE_PATH_PROTOCOL *DevicePath,
|
||||
OUT EFI_FILE_HANDLE *FileHandle
|
||||
);
|
||||
|
||||
/**
|
||||
Opens the root directory of a device on a handle
|
||||
|
||||
This function opens the root directory of a device and returns a file handle to it.
|
||||
|
||||
@param DeviceHandle The handle of the device that contains the volume.
|
||||
@param FileHandle On exit, points to the file handle corresponding to the root directory on the
|
||||
device.
|
||||
|
||||
@retval EFI_SUCCESS Root opened successfully.
|
||||
@retval EFI_NOT_FOUND EFI_SIMPLE_FILE_SYSTEM could not be found or the root directory
|
||||
could not be opened.
|
||||
@retval EFI_VOLUME_CORRUPTED The data structures in the volume were corrupted.
|
||||
@retval EFI_DEVICE_ERROR The device had an error
|
||||
**/
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(EFIAPI *EFI_SHELL_OPEN_ROOT_BY_HANDLE)(
|
||||
IN EFI_HANDLE DeviceHandle,
|
||||
OUT EFI_FILE_HANDLE *FileHandle
|
||||
);
|
||||
|
||||
/**
|
||||
Reads data from the file.
|
||||
|
||||
If FileHandle is not a directory, the function reads the requested number of bytes
|
||||
from the file at the file's current position and returns them in Buffer. If the read goes
|
||||
beyond the end of the file, the read length is truncated to the end of the file. The file's
|
||||
current position is increased by the number of bytes returned.
|
||||
If FileHandle is a directory, then an error is returned.
|
||||
|
||||
@param FileHandle The opened file handle for read
|
||||
@param ReadSize On input, the size of Buffer, in bytes. On output, the amount of data read.
|
||||
@param Buffer The buffer in which data is read.
|
||||
|
||||
@retval EFI_SUCCESS Data was read.
|
||||
@retval EFI_NO_MEDIA The device has no media
|
||||
@retval EFI_DEVICE_ERROR The device reported an error
|
||||
@retval EFI_VOLUME_CORRUPTED The file system structures are corrupted
|
||||
@retval EFI_BUFFER_TO_SMALL Buffer is too small. ReadSize contains required size
|
||||
**/
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(EFIAPI *EFI_SHELL_READ_FILE) (
|
||||
IN EFI_FILE_HANDLE FileHandle,
|
||||
IN OUT UINTN *ReadSize,
|
||||
OUT VOID *Buffer
|
||||
);
|
||||
|
||||
/**
|
||||
Deletes the duplicate file names files in the given file list.
|
||||
|
||||
This function deletes the reduplicate files in the given file list.
|
||||
|
||||
@param FileList A pointer to the first entry in the file list.
|
||||
|
||||
@retval EFI_SUCCESS Always success.
|
||||
**/
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(EFIAPI *EFI_SHELL_REMOVE_DUP_IN_FILE_LIST) (
|
||||
IN EFI_SHELL_FILE_INFO **FileList
|
||||
);
|
||||
|
||||
/**
|
||||
Changes a shell command alias.
|
||||
|
||||
This function creates an alias for a shell command.
|
||||
|
||||
@param Command Points to the null-terminated shell command or existing alias.
|
||||
@param Alias Points to the null-terminated alias for the shell command. If this is NULL, and
|
||||
Command refers to an alias, that alias will be deleted.
|
||||
@param Replace If TRUE and the alias already exists, then the existing alias will be replaced. If
|
||||
FALSE and the alias already exists, then the existing alias is unchanged and
|
||||
EFI_ACCESS_DENIED is returned.
|
||||
|
||||
@retval EFI_SUCCESS Alias created or deleted successfully.
|
||||
@retval EFI_ACCESS_DENIED The alias is a built-in alias or already existed and Replace was set to
|
||||
FALSE.
|
||||
**/
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(EFIAPI *EFI_SHELL_SET_ALIAS)(
|
||||
IN CONST CHAR16 *Command,
|
||||
IN CONST CHAR16 *Alias,
|
||||
IN BOOLEAN Replace
|
||||
);
|
||||
|
||||
/**
|
||||
Changes the current directory on the specified device.
|
||||
|
||||
If the FileSystem is NULL, and the directory Dir does not contain a file system's
|
||||
mapped name, this function changes the current working directory. If FileSystem is
|
||||
NULL and the directory Dir contains a mapped name, then the current file system and
|
||||
the current directory on that file system are changed.
|
||||
|
||||
If FileSystem is not NULL, and Dir is NULL, then this changes the current working file
|
||||
system.
|
||||
|
||||
If FileSystem is not NULL and Dir is not NULL, then this function changes the current
|
||||
directory on the specified file system.
|
||||
|
||||
If the current working directory or the current working file system is changed then the
|
||||
%cwd% environment variable will be updated
|
||||
|
||||
@param FileSystem A pointer to the file system's mapped name. If NULL, then the current working
|
||||
directory is changed.
|
||||
@param Dir Points to the null-terminated directory on the device specified by FileSystem.
|
||||
|
||||
@return !=NULL The current directory.
|
||||
@retval NULL Current directory does not exist.
|
||||
**/
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(EFIAPI *EFI_SHELL_SET_CUR_DIR) (
|
||||
IN CONST CHAR16 *FileSystem OPTIONAL,
|
||||
IN CONST CHAR16 *Dir
|
||||
);
|
||||
|
||||
/**
|
||||
Sets the environment variable.
|
||||
|
||||
This function changes the current value of the specified environment variable. If the
|
||||
environment variable exists and the Value is an empty string, then the environment
|
||||
variable is deleted. If the environment variable exists and the Value is not an empty
|
||||
string, then the value of the environment variable is changed. If the environment
|
||||
variable does not exist and the Value is an empty string, there is no action. If the
|
||||
environment variable does not exist and the Value is a non-empty string, then the
|
||||
environment variable is created and assigned the specified value.
|
||||
|
||||
For a description of volatile and non-volatile environment variables, see UEFI Shell
|
||||
2.0 specification section 3.6.1.
|
||||
|
||||
@param Name Points to the null-terminated environment variable name.
|
||||
@param Value Points to the null-terminated environment variable value. If the value is an
|
||||
empty string then the environment variable is deleted.
|
||||
@param Volatile Indicates whether the variable is non-volatile (FALSE) or volatile (TRUE).
|
||||
|
||||
@retval EFI_SUCCESS The environment variable was successfully updated.
|
||||
**/
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(EFIAPI *EFI_SHELL_SET_ENV) (
|
||||
IN CONST CHAR16 *Name,
|
||||
IN CONST CHAR16 *Value,
|
||||
IN BOOLEAN Volatile
|
||||
);
|
||||
|
||||
/**
|
||||
Sets the file information to an opened file handle.
|
||||
|
||||
This function changes file information.
|
||||
|
||||
@param FileHandle A file handle
|
||||
@param FileInfo Points to new file information.
|
||||
|
||||
@retval EFI_SUCCESS The information was set.
|
||||
@retval EFI_NO_MEDIA The device has no medium.
|
||||
@retval EFI_DEVICE_ERROR The device reported an error.
|
||||
@retval EFI_VOLUME_CORRUPTED The file system structures are corrupted.
|
||||
@retval EFI_WRITE_PROTECTED The file or medium is write-protected.
|
||||
@retval EFI_ACCESS_DENIED The file was opened read-only.
|
||||
@retval EFI_VOLUME_FULL The volume is full.
|
||||
@retval EFI_BAD_BUFFER_SIZE BufferSize is smaller than the size of EFI_FILE_INFO.
|
||||
**/
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(EFIAPI *EFI_SHELL_SET_FILE_INFO)(
|
||||
IN EFI_FILE_HANDLE FileHandle,
|
||||
IN CONST EFI_FILE_INFO *FileInfo
|
||||
);
|
||||
|
||||
/**
|
||||
Sets a file's current position
|
||||
|
||||
This function sets the current file position for the handle to the position supplied. With
|
||||
the exception of seeking to position 0xFFFFFFFFFFFFFFFF, only absolute positioning is
|
||||
supported, and seeking past the end of the file is allowed (a subsequent write would
|
||||
grow the file). Seeking to position 0xFFFFFFFFFFFFFFFF causes the current position
|
||||
to be set to the end of the file.
|
||||
|
||||
@param FileHandle The file handle on which requested position will be set.
|
||||
@param Position Byte position from the start of the file
|
||||
|
||||
@retval EFI_SUCCESS Data was written.
|
||||
@retval EFI_UNSUPPORTED The seek request for nonzero is not valid on open directories.
|
||||
**/
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(EFIAPI *EFI_SHELL_SET_FILE_POSITION)(
|
||||
IN EFI_FILE_HANDLE FileHandle,
|
||||
IN UINT64 Position
|
||||
);
|
||||
|
||||
/**
|
||||
This function creates a mapping for a device path.
|
||||
|
||||
@param DevicePath Points to the device path. If this is NULL and Mapping points to a valid mapping,
|
||||
then the mapping will be deleted.
|
||||
@param Mapping Points to the null-terminated mapping for the device path.
|
||||
|
||||
@retval EFI_SUCCESS Mapping created or deleted successfully.
|
||||
@retval EFI_NO_MAPPING There is no handle that corresponds exactly to DevicePath. See the
|
||||
boot service function LocateDevicePath().
|
||||
@retval EFI_ACCESS_DENIED The mapping is a built-in alias.
|
||||
**/
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(EFIAPI *EFI_SHELL_SET_MAP)(
|
||||
IN CONST EFI_DEVICE_PATH_PROTOCOL *DevicePath,
|
||||
IN CONST CHAR16 *Mapping
|
||||
);
|
||||
|
||||
/**
|
||||
Writes data to the file.
|
||||
|
||||
This function writes the specified number of bytes to the file at the current file position.
|
||||
The current file position is advanced the actual number of bytes written, which is
|
||||
returned in BufferSize. Partial writes only occur when there has been a data error
|
||||
during the write attempt (such as "volume space full"). The file automatically grows to
|
||||
hold the data, if required.
|
||||
|
||||
Direct writes to opened directories are not supported.
|
||||
|
||||
@param FileHandle The opened file handle for writing.
|
||||
@param BufferSize On input, size of Buffer.
|
||||
@param Buffer The buffer in which data to write.
|
||||
|
||||
@retval EFI_SUCCESS Data was written.
|
||||
@retval EFI_UNSUPPORTED Writes to open directory are not supported
|
||||
@retval EFI_NO_MEDIA The device has no media
|
||||
@retval EFI_DEVICE_ERROR The device reported an error
|
||||
@retval EFI_VOLUME_CORRUPTED The file system structures are corrupted
|
||||
@retval EFI_WRITE_PROTECTED The device is write-protected
|
||||
@retval EFI_ACCESS_DENIED The file was open for read only
|
||||
@retval EFI_VOLUME_FULL The volume is full
|
||||
**/
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(EFIAPI *EFI_SHELL_WRITE_FILE)(
|
||||
IN EFI_FILE_HANDLE FileHandle,
|
||||
IN OUT UINTN *BufferSize,
|
||||
OUT VOID *Buffer
|
||||
);
|
||||
|
||||
typedef struct _EFI_SHELL_PROTOCOL {
|
||||
EFI_SHELL_EXECUTE Execute;
|
||||
EFI_SHELL_GET_ENV GetEnv;
|
||||
EFI_SHELL_SET_ENV SetEnv;
|
||||
EFI_SHELL_SET_ALIAS SetAlias;
|
||||
EFI_SHELL_GET_HELP_TEXT GetHelpText;
|
||||
EFI_SHELL_GET_DEVICE_PATH_FROM_MAP GetDevicePathFromMap;
|
||||
EFI_SHELL_GET_MAP_FROM_DEVICE_PATH GetMapFromDevicePath;
|
||||
EFI_SHELL_GET_DEVICE_PATH_FROM_FILE_PATH GetDevicePathFromFilePath;
|
||||
EFI_SHELL_GET_FILE_PATH_FROM_DEVICE_PATH GetFilePathFromDevicePath;
|
||||
EFI_SHELL_SET_MAP SetMap;
|
||||
EFI_SHELL_GET_CUR_DIR GetCurDir;
|
||||
EFI_SHELL_SET_CUR_DIR SetCurDir;
|
||||
EFI_SHELL_OPEN_FILE_LIST OpenFileList;
|
||||
EFI_SHELL_FREE_FILE_LIST FreeFileList;
|
||||
EFI_SHELL_REMOVE_DUP_IN_FILE_LIST RemoveDupInFileList;
|
||||
EFI_SHELL_BATCH_IS_ACTIVE BatchIsActive;
|
||||
EFI_SHELL_IS_ROOT_SHELL IsRootShell;
|
||||
EFI_SHELL_ENABLE_PAGE_BREAK EnablePageBreak;
|
||||
EFI_SHELL_DISABLE_PAGE_BREAK DisablePageBreak;
|
||||
EFI_SHELL_GET_PAGE_BREAK GetPageBreak;
|
||||
EFI_SHELL_GET_DEVICE_NAME GetDeviceName;
|
||||
EFI_SHELL_GET_FILE_INFO GetFileInfo;
|
||||
EFI_SHELL_SET_FILE_INFO SetFileInfo;
|
||||
EFI_SHELL_OPEN_FILE_BY_NAME OpenFileByName;
|
||||
EFI_SHELL_CLOSE_FILE CloseFile;
|
||||
EFI_SHELL_CREATE_FILE CreateFile;
|
||||
EFI_SHELL_READ_FILE ReadFile;
|
||||
EFI_SHELL_WRITE_FILE WriteFile;
|
||||
EFI_SHELL_DELETE_FILE DeleteFile;
|
||||
EFI_SHELL_DELETE_FILE_BY_NAME DeleteFileByName;
|
||||
EFI_SHELL_GET_FILE_POSITION GetFilePosition;
|
||||
EFI_SHELL_SET_FILE_POSITION SetFilePosition;
|
||||
EFI_SHELL_FLUSH_FILE FlushFile;
|
||||
EFI_SHELL_FIND_FILES FindFiles;
|
||||
EFI_SHELL_FIND_FILES_IN_DIR FindFilesInDir;
|
||||
EFI_SHELL_GET_FILE_SIZE GetFileSize;
|
||||
EFI_SHELL_OPEN_ROOT OpenRoot;
|
||||
EFI_SHELL_OPEN_ROOT_BY_HANDLE OpenRootByHandle;
|
||||
EFI_EVENT ExecutionBreak;
|
||||
UINT32 MajorVersion;
|
||||
UINT32 MinorVersion;
|
||||
} EFI_SHELL_PROTOCOL;
|
||||
|
||||
extern EFI_GUID gEfiShellProtocolGuid;
|
||||
|
||||
#endif
|
|
@ -0,0 +1,976 @@
|
|||
/** @file
|
||||
Defines for EFI shell environment 2 ported to EDK II build environment.
|
||||
|
||||
Copyright (c) 2005, 2009 Intel Corporation
|
||||
All rights reserved. This program and the accompanying materials
|
||||
are licensed and made available under the terms and conditions of the BSD License
|
||||
which accompanies this distribution. The full text of the license may be found at
|
||||
http://opensource.org/licenses/bsd-license.php
|
||||
|
||||
THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
|
||||
|
||||
**/
|
||||
|
||||
|
||||
#ifndef _SHELLENV2_H_
|
||||
#define _SHELLENV2_H_
|
||||
|
||||
#include <Protocol\SimpleTextIn.h>
|
||||
#include <Protocol\SimpleTextOut.h>
|
||||
#include <Protocol\EfiShellInterface.h>
|
||||
|
||||
#define DEFAULT_INIT_ROW 1
|
||||
#define DEFAULT_AUTO_LF FALSE
|
||||
|
||||
|
||||
/**
|
||||
this function is a prototype for a function that dumps information on a protocol
|
||||
to a given location. the location is dependant on the implementation. This is
|
||||
used when programatically adding shell commands.
|
||||
|
||||
@param Handle the handle the protocol is on
|
||||
@param Interface the interface to the protocol
|
||||
|
||||
**/
|
||||
typedef
|
||||
VOID
|
||||
(EFIAPI *SHELLENV_DUMP_PROTOCOL_INFO) (
|
||||
IN EFI_HANDLE Handle,
|
||||
IN VOID *Interface
|
||||
);
|
||||
|
||||
/**
|
||||
this function is a prototype foe each command internal to the EFI shell
|
||||
implementation. the specific command depends on the implementation. This is
|
||||
used when programatically adding shell commands.
|
||||
|
||||
@param ImageHandle The handle to the binary shell
|
||||
@param SystemTable pointer to the system table.
|
||||
|
||||
@retval EFI_SUCCESS the command ran to completion
|
||||
@return other an error ocurred. any error is possible
|
||||
depending on the implementation of the shell
|
||||
command.
|
||||
|
||||
**/
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(EFIAPI *SHELLENV_INTERNAL_COMMAND) (
|
||||
IN EFI_HANDLE ImageHandle,
|
||||
IN EFI_SYSTEM_TABLE *SystemTable
|
||||
);
|
||||
|
||||
/**
|
||||
This function is a prototype for one that gets a help string for a given command.
|
||||
This is used when programatically adding shell commands. Upon successful return
|
||||
the memory allocated is up to the caller to free.
|
||||
|
||||
@param Str pointer to pointer to string to display for help.
|
||||
|
||||
@retval EFI_SUCCESS the help string is in the parameter Str.
|
||||
|
||||
**/
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(EFIAPI *SHELLCMD_GET_LINE_HELP) (
|
||||
IN OUT CHAR16 **Str
|
||||
);
|
||||
|
||||
/**
|
||||
* Structure returned from functions that open multiple files
|
||||
**/
|
||||
typedef struct {
|
||||
UINT32 Signature; ///< SHELL_FILE_ARG_SIGNATURE
|
||||
EFI_LIST_ENTRY Link; ///< linked list helper
|
||||
EFI_STATUS Status; ///< File's status
|
||||
|
||||
EFI_FILE_HANDLE Parent; ///< what is the Parent file of this file
|
||||
UINT64 OpenMode; ///< how was the file opened
|
||||
CHAR16 *ParentName; ///< string representation of parent
|
||||
EFI_DEVICE_PATH_PROTOCOL *ParentDevicePath; ///< DevicePath for Parent
|
||||
|
||||
CHAR16 *FullName; ///< path and file name for this file
|
||||
CHAR16 *FileName; ///< file name for this file
|
||||
|
||||
EFI_FILE_HANDLE Handle; ///< handle to this file
|
||||
EFI_FILE_INFO *Info; ///< pointer to file info for this file
|
||||
} SHELL_FILE_ARG;
|
||||
|
||||
/// signature for SHELL_FILE_ARG
|
||||
#define SHELL_FILE_ARG_SIGNATURE SIGNATURE_32 ('g', 'r', 'a', 'f')
|
||||
|
||||
/**
|
||||
* GUID for the shell environment2 and shell environment
|
||||
**/
|
||||
#define SHELL_ENVIRONMENT_PROTOCOL_GUID \
|
||||
{ \
|
||||
0x47c7b221, 0xc42a, 0x11d2, 0x8e, 0x57, 0x0, 0xa0, 0xc9, 0x69, 0x72, 0x3b \
|
||||
}
|
||||
|
||||
/**
|
||||
* GUID for the shell environment2 extension (main GUID same as shell environment)
|
||||
**/
|
||||
#define EFI_SE_EXT_SIGNATURE_GUID \
|
||||
{ \
|
||||
0xd2c18636, 0x40e5, 0x4eb5, {0xa3, 0x1b, 0x36, 0x69, 0x5f, 0xd4, 0x2c, 0x87} \
|
||||
}
|
||||
|
||||
#define EFI_SHELL_MAJOR_VER 0x00000001 ///< Major version of the EFI_SHELL_ENVIRONMENT2
|
||||
#define EFI_SHELL_MINOR_VER 0x00000000 ///< Minor version of the EFI_SHELL_ENVIRONMENT2
|
||||
|
||||
/**
|
||||
execute a command line
|
||||
|
||||
this function will run the CommandLine. This includes loading any required images,
|
||||
parsing any requires scripts, and it DebugOutput is TRUE printing errors
|
||||
encountered directly to the screen.
|
||||
|
||||
@param ParentImageHandle Handle of image executing this operation
|
||||
@param CommandLine string command line to execute
|
||||
@param DebugOutput TRUE indicates that errors should be printed directly.
|
||||
FALSE supresses error messages.
|
||||
|
||||
@retval EFI_SUCCESS the command line executed and completed.
|
||||
@retval EFI_ABORTED the operation did not complete due to abort.
|
||||
@retval EFI_INVALID_PARAMETER A parameter did not have a valid value.
|
||||
@retval EFI_OUT_OF_RESOURCES A required memory allocation failed.
|
||||
|
||||
@sa HandleProtocol
|
||||
**/
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(EFIAPI *SHELLENV_EXECUTE) (
|
||||
IN EFI_HANDLE *ParentImageHandle,
|
||||
IN CHAR16 *CommandLine,
|
||||
IN BOOLEAN DebugOutput
|
||||
);
|
||||
|
||||
/**
|
||||
this function returns a shell environment variable value.
|
||||
|
||||
@param Name pointer to the string with the shell environment
|
||||
variables name
|
||||
|
||||
@retval NULL the shell environment variable's value could not be found
|
||||
@retval !NULL the value of the shell environment variable Name
|
||||
|
||||
**/
|
||||
typedef
|
||||
CHAR16 *
|
||||
(EFIAPI *SHELLENV_GET_ENV) (
|
||||
IN CHAR16 *Name
|
||||
);
|
||||
|
||||
/**
|
||||
this function returns a shell environment map value.
|
||||
|
||||
@param Name pointer to the string with the shell environment
|
||||
map name
|
||||
|
||||
@retval NULL the shell environment map's value could not be found
|
||||
@retval !NULL the value of the shell environment map Name
|
||||
|
||||
**/
|
||||
typedef
|
||||
CHAR16 *
|
||||
(EFIAPI *SHELLENV_GET_MAP) (
|
||||
IN CHAR16 *Name
|
||||
);
|
||||
|
||||
/**
|
||||
This function will add an internal command to the shell interface.
|
||||
|
||||
This will allocate all required memory, put the new command on the command
|
||||
list in the correct location.
|
||||
|
||||
@param Handler the handler function to call when the command gets called
|
||||
@param CmdStr The command name
|
||||
@param GetLineHelp function to call of get help for this command
|
||||
|
||||
@retval EFI_SUCCESS the command is now part of the command list
|
||||
@retval EFI_OUT_OF_RESOURCES a memory allocation failed.
|
||||
@sa SHELLENV_INTERNAL_COMMAND
|
||||
@sa SHELLCMD_GET_LINE_HELP
|
||||
**/
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(EFIAPI *SHELLENV_ADD_CMD) (
|
||||
IN SHELLENV_INTERNAL_COMMAND Handler,
|
||||
IN CHAR16 *Cmd,
|
||||
IN SHELLCMD_GET_LINE_HELP GetLineHelp
|
||||
);
|
||||
|
||||
/**
|
||||
Internal interface to add protocol handlers.
|
||||
|
||||
This function is for internal shell use only. This is how protocol handlers are added.
|
||||
This will get the current protocol info and add the new info or update existing info
|
||||
and then resave the info.
|
||||
|
||||
@param SaveId save this change as an EFI variable
|
||||
@param Protocol the protocol's GUID
|
||||
@param DumpToken The function pointer to dump token function or
|
||||
NULL
|
||||
@param DumpInfo The function pointer to dump infomation function
|
||||
or NULL
|
||||
@param IdString The english name of the protocol
|
||||
**/
|
||||
typedef
|
||||
VOID
|
||||
(EFIAPI *SHELLENV_ADD_PROT) (
|
||||
IN EFI_GUID *Protocol,
|
||||
IN SHELLENV_DUMP_PROTOCOL_INFO DumpToken OPTIONAL,
|
||||
IN SHELLENV_DUMP_PROTOCOL_INFO DumpInfo OPTIONAL,
|
||||
IN CHAR16 *IdString
|
||||
);
|
||||
|
||||
/**
|
||||
this function finds a protocol handle by a GUID.
|
||||
|
||||
This function will check for already known protocols by GUID and if one is
|
||||
found it will return the name of that protocol. if no name is found and
|
||||
GenId is TRUE it will generate ths string.
|
||||
|
||||
@param Protocol the GUID of the protocol to look for.
|
||||
@param GenId whether to generate a name string if its not found.
|
||||
|
||||
@return !NULL the Name of the protocol.
|
||||
@retval NULL the Name was not found and GenId was not TRUE.
|
||||
**/
|
||||
typedef
|
||||
CHAR16*
|
||||
(EFIAPI *SHELLENV_GET_PROT) (
|
||||
IN EFI_GUID *Protocol,
|
||||
IN BOOLEAN GenId
|
||||
);
|
||||
|
||||
/**
|
||||
this function returns the current directory on a given device
|
||||
|
||||
If DeviceName is specified, then return the current shell directory on that
|
||||
device. If DeviceName is NULL, then return the current directory on the
|
||||
current device. The caller us responsible to free the returned string when
|
||||
no londer required.
|
||||
|
||||
@param DeviceName the name of the device to get the current
|
||||
directory on or NULL for current device
|
||||
|
||||
@return The current directory on the current or specified device.
|
||||
|
||||
**/
|
||||
typedef
|
||||
CHAR16*
|
||||
(EFIAPI *SHELLENV_CUR_DIR) (
|
||||
IN CHAR16 *DeviceName OPTIONAL
|
||||
);
|
||||
|
||||
/**
|
||||
this function will open a group of files that match the Arg path, including
|
||||
support for wildcard characters ('?' and '*') in the Arg path. if there are
|
||||
any wildcard characters in the path this function will find any and all files
|
||||
that match the wildcards. the return is a double linked list based on the
|
||||
EFI_LIST_ENTRY linked list structure. use this in conjunction with the
|
||||
SHELL_FILE_ARG_SIGNATURE to get the SHELL_FILE_ARG structures that are returned.
|
||||
The memory allocated by the callee for this list is freed by making a call to
|
||||
SHELLENV_FREE_FILE_LIST.
|
||||
|
||||
@param Arg pointer Path to files to open
|
||||
@param ListHead pointer to allocated and initialized list head
|
||||
upon which to append all the opened file structures.
|
||||
|
||||
@retval EFI_SUCCESS 1 or more files was opened and a struct of each file's
|
||||
information was appended to ListHead.
|
||||
@retval EFI_OUT_OF_RESOURCES a memory allocation failed.
|
||||
@retval EFI_NOT_FOUND no matching files could be found.
|
||||
@sa SHELLENV_FREE_FILE_LIST
|
||||
**/typedef
|
||||
EFI_STATUS
|
||||
(EFIAPI *SHELLENV_FILE_META_ARG) (
|
||||
IN CHAR16 *Arg,
|
||||
IN OUT EFI_LIST_ENTRY *ListHead
|
||||
);
|
||||
|
||||
/**
|
||||
this frees all of the nodes under the ListHead, but not ListHead itself.
|
||||
|
||||
@param ListHead Pointer to list to free all nodes of.
|
||||
|
||||
@retval EFI_SUCCESS always returned.
|
||||
**/
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(EFIAPI *SHELLENV_FREE_FILE_LIST) (
|
||||
IN OUT EFI_LIST_ENTRY *ListHead
|
||||
);
|
||||
|
||||
/**
|
||||
this function creates a new instance of the ShellInterface protocol for use on
|
||||
the ImageHandle.
|
||||
|
||||
This function is for internal shell usage. this will allocate and then populate
|
||||
EFI_SHELL_INTERFACE protocol. it is the caller's responsibility to free the
|
||||
memory.
|
||||
|
||||
@param ImageHandle the handle which will use the new ShellInterface
|
||||
protocol.
|
||||
|
||||
@return the newly allocated shell interface protocol.
|
||||
|
||||
**/
|
||||
typedef
|
||||
EFI_SHELL_INTERFACE*
|
||||
(EFIAPI *SHELLENV_NEW_SHELL) (
|
||||
IN EFI_HANDLE ImageHandle
|
||||
);
|
||||
|
||||
/**
|
||||
this function determins whether a script file is currently being processed.
|
||||
|
||||
a script file (.nsh file) can contain a series of commands and this is useful to
|
||||
know for some shell commands whether they are being run manually or as part of a
|
||||
script.
|
||||
|
||||
@retval TRUE A script file is being processed
|
||||
@return FALSE A script file is not being processed
|
||||
**/
|
||||
typedef
|
||||
BOOLEAN
|
||||
(EFIAPI *SHELLENV_BATCH_IS_ACTIVE) (
|
||||
IN VOID
|
||||
);
|
||||
|
||||
/**
|
||||
This is an internal shell function to free any and all allocated resources.
|
||||
This should be called just closing the shell.
|
||||
**/
|
||||
typedef
|
||||
VOID
|
||||
(EFIAPI *SHELLENV_FREE_RESOURCES) (
|
||||
VOID
|
||||
);
|
||||
|
||||
/**
|
||||
This function enables the page break mode.
|
||||
|
||||
This mode causes the output to pause after each complete screen to enable a
|
||||
user to more easily read it. if AutoWrap is TRUE then rows with too many
|
||||
characters will be chopped and divided into 2 rows. if FALSE then rows with
|
||||
too many characters may not be fully visible to the user on the screen.
|
||||
|
||||
@param StartRow the row number to start this on.
|
||||
@param AutoWrap whether to auto wrap rows that are
|
||||
**/
|
||||
typedef
|
||||
VOID
|
||||
(EFIAPI *SHELLENV_ENABLE_PAGE_BREAK) (
|
||||
IN INT32 StartRow,
|
||||
IN BOOLEAN AutoWrap
|
||||
);
|
||||
|
||||
/**
|
||||
This function disables the page break mode.
|
||||
|
||||
disabling this causes the output to print out exactly as coded with no breaks
|
||||
for readability.
|
||||
**/
|
||||
typedef
|
||||
VOID
|
||||
(EFIAPI *SHELLENV_DISABLE_PAGE_BREAK) (
|
||||
IN VOID
|
||||
);
|
||||
|
||||
/**
|
||||
Get the status of the page break output mode.
|
||||
|
||||
@retval FALSE page break output mode is not enabled
|
||||
@retval TRUE page break output mode is enabled
|
||||
**/
|
||||
typedef
|
||||
BOOLEAN
|
||||
(EFIAPI *SHELLENV_GET_PAGE_BREAK) (
|
||||
IN VOID
|
||||
);
|
||||
|
||||
/**
|
||||
this function sets the keys to filter for for the console in. the valid
|
||||
values to set are:
|
||||
|
||||
#define EFI_OUTPUT_SCROLL 0x00000001
|
||||
#define EFI_OUTPUT_PAUSE 0x00000002
|
||||
#define EFI_EXECUTION_BREAK 0x00000004
|
||||
|
||||
@param KeyFilter The new key filter to use.
|
||||
**/
|
||||
typedef
|
||||
VOID
|
||||
(EFIAPI *SHELLENV_SET_KEY_FILTER) (
|
||||
IN UINT32 KeyFilter
|
||||
);
|
||||
|
||||
/**
|
||||
this function gets the keys to filter for for the console in. the valid
|
||||
values to get are:
|
||||
|
||||
#define EFI_OUTPUT_SCROLL 0x00000001
|
||||
#define EFI_OUTPUT_PAUSE 0x00000002
|
||||
#define EFI_EXECUTION_BREAK 0x00000004
|
||||
|
||||
@retval the current filter mask.
|
||||
**/
|
||||
typedef
|
||||
UINT32
|
||||
(EFIAPI *SHELLENV_GET_KEY_FILTER) (
|
||||
IN VOID
|
||||
);
|
||||
|
||||
/**
|
||||
this function determins if the shell application should break.
|
||||
|
||||
This is used to inform a shell application that a break condition has been
|
||||
initiated. long loops should check this to prevent delays to the break.
|
||||
|
||||
@retval TRUE a break has been signaled. the application
|
||||
should exit with EFI_ABORTED as soon as possible.
|
||||
@retval FALSE continue as normal.
|
||||
**/
|
||||
typedef
|
||||
BOOLEAN
|
||||
(EFIAPI *SHELLENV_GET_EXECUTION_BREAK) (
|
||||
IN VOID
|
||||
);
|
||||
|
||||
/**
|
||||
This is an internal-shell function used to increment the shell nesting level.
|
||||
|
||||
**/
|
||||
typedef
|
||||
VOID
|
||||
(EFIAPI *SHELLENV_INCREMENT_SHELL_NESTING_LEVEL) (
|
||||
IN VOID
|
||||
);
|
||||
|
||||
/**
|
||||
This is an internal-shell function used to decrement the shell nesting level.
|
||||
**/
|
||||
typedef
|
||||
VOID
|
||||
(EFIAPI *SHELLENV_DECREMENT_SHELL_NESTING_LEVEL) (
|
||||
IN VOID
|
||||
);
|
||||
|
||||
/**
|
||||
this function determins if the caller is running under the root shell.
|
||||
|
||||
@retval TRUE The caller is running under the root shell
|
||||
@retval FALSE The caller is not running under the root shell
|
||||
|
||||
**/
|
||||
typedef
|
||||
BOOLEAN
|
||||
(EFIAPI *SHELLENV_IS_ROOT_SHELL) (
|
||||
IN VOID
|
||||
);
|
||||
|
||||
/**
|
||||
Close the console proxy to restore the original console.
|
||||
|
||||
This is an internal shell function to handle shell cascading. it restores the
|
||||
original set of console protocols.
|
||||
|
||||
@param ConInHandle The handle of ConIn.
|
||||
@param ConIn pointer to the location to return the pointer to
|
||||
the original console input.
|
||||
@param ConOutHandle The handle of ConOut
|
||||
@param ConOut pointer to the location to return the pointer to
|
||||
the original console output.
|
||||
**/
|
||||
typedef
|
||||
VOID
|
||||
(EFIAPI *SHELLENV_CLOSE_CONSOLE_PROXY) (
|
||||
IN EFI_HANDLE ConInHandle,
|
||||
IN OUT EFI_SIMPLE_TEXT_INPUT_PROTOCOL **ConIn,
|
||||
IN EFI_HANDLE ConOutHandle,
|
||||
IN OUT EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL **ConOut
|
||||
);
|
||||
|
||||
//
|
||||
// declarations of handle enumerator
|
||||
//
|
||||
/**
|
||||
For ease of use the shell maps handle #'s to short numbers.
|
||||
This is only done on request for various internal commands and the references
|
||||
are immediately freed when the internal command completes.
|
||||
**/
|
||||
typedef
|
||||
VOID
|
||||
(EFIAPI *INIT_HANDLE_ENUMERATOR) (
|
||||
VOID
|
||||
);
|
||||
|
||||
/**
|
||||
this is an internal shell function to enumerate the handle database.
|
||||
|
||||
this function gets the next handle in the handle database. if no handles are
|
||||
found EFI_NOT_FOUND is returned. if the previous Handle was the last handle
|
||||
it is set to NULL before returning.
|
||||
|
||||
this must be called after INIT_HANDLE_ENUMERATOR and before CLOSE_HANDLE_ENUMERATOR.
|
||||
|
||||
@param Handle pointer to pointer to Handle. will be set
|
||||
on a sucessful return.
|
||||
|
||||
@retval EFI_SUCCESS the next handle in the handle database is *Handle
|
||||
@retval EFI_NOT_FOUND there is not another handle.
|
||||
**/
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(EFIAPI *NEXT_HANDLE) (
|
||||
IN OUT EFI_HANDLE **Handle
|
||||
);
|
||||
|
||||
/**
|
||||
this is an internal shell function to enumerate the handle database.
|
||||
|
||||
this function skips the next SkipNum handles in the handle database. If there
|
||||
are not enough handles left to skip that many EFI_ACCESS_DENIED is returned and
|
||||
no skip is performed.
|
||||
|
||||
this must be called after INIT_HANDLE_ENUMERATOR and before CLOSE_HANDLE_ENUMERATOR.
|
||||
|
||||
@param SkipNum how many handles to skip
|
||||
|
||||
@retval EFI_SUCCESS the next handle in the handle database is *Handle
|
||||
@retval EFI_ACCESS_DENIED there are not SkipNum handles left in the database
|
||||
**/
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(EFIAPI *SKIP_HANDLE) (
|
||||
IN UINTN SkipNum
|
||||
);
|
||||
|
||||
/**
|
||||
this is an internal shell function to enumerate the handle database.
|
||||
|
||||
this function resets the the handle database so that NEXT_HANDLE and SKIP_HANDLE
|
||||
will start from EnumIndex on the next call.
|
||||
|
||||
this must be called after INIT_HANDLE_ENUMERATOR and before CLOSE_HANDLE_ENUMERATOR.
|
||||
|
||||
@param EnumIndex where to start.
|
||||
|
||||
@retval the number of handles either read out or skipped before this reset.
|
||||
**/
|
||||
typedef
|
||||
UINTN
|
||||
(EFIAPI *RESET_HANDLE_ENUMERATOR) (
|
||||
IN UINTN EnumIndex
|
||||
);
|
||||
|
||||
/**
|
||||
this is an internal shell function to enumerate the handle database.
|
||||
|
||||
this must be called after INIT_HANDLE_ENUMERATOR.
|
||||
|
||||
this function releases all memory and resources associated with the handle database.
|
||||
after this no other handle enumerator functions except INIT_HANDLE_ENUMERATOR will
|
||||
function properly.
|
||||
**/
|
||||
typedef
|
||||
VOID
|
||||
(EFIAPI *CLOSE_HANDLE_ENUMERATOR) (
|
||||
VOID
|
||||
);
|
||||
|
||||
/**
|
||||
this is an internal shell function to enumerate the handle database.
|
||||
|
||||
this function returns the number of handles in the handle database.
|
||||
|
||||
this must be called after INIT_HANDLE_ENUMERATOR and before CLOSE_HANDLE_ENUMERATOR.
|
||||
|
||||
@retval the number of handles in the handle database.
|
||||
**/
|
||||
typedef
|
||||
UINTN
|
||||
(EFIAPI *GET_NUM) (
|
||||
VOID
|
||||
);
|
||||
|
||||
/**
|
||||
Handle Enumerator structure
|
||||
**/
|
||||
typedef struct {
|
||||
INIT_HANDLE_ENUMERATOR Init; ///< pointer to INIT_HANDLE_ENUMERATOR function
|
||||
NEXT_HANDLE Next; ///< pointer to NEXT_HANDLE function
|
||||
SKIP_HANDLE Skip; ///< pointer to SKIP_HANDLE function
|
||||
RESET_HANDLE_ENUMERATOR Reset; ///< pointer to RESET_HANDLE_ENUMERATOR function
|
||||
CLOSE_HANDLE_ENUMERATOR Close; ///< pointer to CLOSE_HANDLE_ENUMERATOR function
|
||||
GET_NUM GetNum; ///< pointer to GET_NUM function
|
||||
} HANDLE_ENUMERATOR;
|
||||
/**
|
||||
signature for the PROTOCOL_INFO structure
|
||||
**/
|
||||
#define PROTOCOL_INFO_SIGNATURE SIGNATURE_32 ('s', 'p', 'i', 'n')
|
||||
/**
|
||||
PROTOCOL_INFO structure for protocol enumerator functions.
|
||||
|
||||
**/
|
||||
typedef struct {
|
||||
UINTN Signature; ///< PROTOCOL_INFO_SIGNATURE
|
||||
EFI_LIST_ENTRY Link; ///< standard lined list helper member
|
||||
//
|
||||
// parsing info for the protocol
|
||||
//
|
||||
EFI_GUID ProtocolId; ///< GUID for the protocol
|
||||
CHAR16 *IdString; ///< Name of the protocol
|
||||
SHELLENV_DUMP_PROTOCOL_INFO DumpToken; ///< pointer to DumpToken function for the protocol
|
||||
SHELLENV_DUMP_PROTOCOL_INFO DumpInfo; ///< pointer to DumpInfo function for the protocol
|
||||
//
|
||||
// database info on which handles are supporting this protocol
|
||||
//
|
||||
UINTN NoHandles; ///< how many handles produce this protocol
|
||||
EFI_HANDLE *Handles; ///< array of handles
|
||||
|
||||
} PROTOCOL_INFO;
|
||||
|
||||
//
|
||||
// declarations of protocol info enumerator
|
||||
//
|
||||
/**
|
||||
this is an internal shell function to initialize the protocol enumerator.
|
||||
|
||||
this must be called before NEXT_PROTOCOL_INFO, SKIP_PROTOCOL_INFO,
|
||||
RESET_PROTOCOL_INFO_ENUMERATOR, and CLOSE_PROTOCOL_INFO_ENUMERATOR are
|
||||
called.
|
||||
**/
|
||||
typedef
|
||||
VOID
|
||||
(EFIAPI *INIT_PROTOCOL_INFO_ENUMERATOR) (
|
||||
VOID
|
||||
);
|
||||
|
||||
/**
|
||||
this function is an internal shell function for enumeration of protocols.
|
||||
|
||||
This functiol will return the next protocol in the list. If this is called
|
||||
immediately after initialization it will return the first. If this is called
|
||||
immediately after reset it will return the protocol first again.
|
||||
|
||||
This cannot be called after CLOSE_PROTOCOL_INFO_ENUMERATOR, but it must be
|
||||
called after INIT_PROTOCOL_INFO_ENUMERATOR.
|
||||
|
||||
@param ProtocolInfo pointer to pointer to protocol information structure.
|
||||
|
||||
@retval EFI_SUCCESS the next protocol's information was sucessfully returned.
|
||||
If there were no more protocols NULL was returned.
|
||||
**/
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(EFIAPI *NEXT_PROTOCOL_INFO) (
|
||||
IN OUT PROTOCOL_INFO **ProtocolInfo
|
||||
);
|
||||
|
||||
/**
|
||||
this function is an internal shell function for enumeration of protocols.
|
||||
|
||||
This cannot be called after CLOSE_PROTOCOL_INFO_ENUMERATOR, but it must be
|
||||
called after INIT_PROTOCOL_INFO_ENUMERATOR.
|
||||
|
||||
this function does nothing and always returns EFI_SUCCESS.
|
||||
|
||||
@retval EFI_SUCCESS always returned (see note).
|
||||
**/
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(EFIAPI *SKIP_PROTOCOL_INFO) (
|
||||
IN UINTN SkipNum
|
||||
);
|
||||
|
||||
/**
|
||||
this function is an internal shell function for enumeration of protocols.
|
||||
|
||||
This cannot be called after CLOSE_PROTOCOL_INFO_ENUMERATOR, but it must be
|
||||
called after INIT_PROTOCOL_INFO_ENUMERATOR.
|
||||
|
||||
this function resets the list of protocols such that the next one in the
|
||||
list is the begining of the list.
|
||||
**/
|
||||
typedef
|
||||
VOID
|
||||
(EFIAPI *RESET_PROTOCOL_INFO_ENUMERATOR) (
|
||||
VOID
|
||||
);
|
||||
|
||||
|
||||
/**
|
||||
this function is an internal shell function for enumeration of protocols.
|
||||
|
||||
This must be called after INIT_PROTOCOL_INFO_ENUMERATOR. After this call
|
||||
no protocol enumerator calls except INIT_PROTOCOL_INFO_ENUMERATOR may be made.
|
||||
|
||||
this function frees any memory or resources associated with the protocol
|
||||
enumerator.
|
||||
**/
|
||||
typedef
|
||||
VOID
|
||||
(EFIAPI *CLOSE_PROTOCOL_INFO_ENUMERATOR) (
|
||||
VOID
|
||||
);
|
||||
|
||||
/**
|
||||
* protocol enumerator structure of function pointers.
|
||||
**/
|
||||
typedef struct {
|
||||
INIT_PROTOCOL_INFO_ENUMERATOR Init; ///< pointer to INIT_PROTOCOL_INFO_ENUMERATOR function
|
||||
NEXT_PROTOCOL_INFO Next; ///< pointer to NEXT_PROTOCOL_INFO function
|
||||
SKIP_PROTOCOL_INFO Skip; ///< pointer to SKIP_PROTOCOL_INFO function
|
||||
RESET_PROTOCOL_INFO_ENUMERATOR Reset; ///< pointer to RESET_PROTOCOL_INFO_ENUMERATOR function
|
||||
CLOSE_PROTOCOL_INFO_ENUMERATOR Close; ///< pointer to CLOSE_PROTOCOL_INFO_ENUMERATOR function
|
||||
} PROTOCOL_INFO_ENUMERATOR;
|
||||
|
||||
/**
|
||||
this function is used to retrieve a user-friendly display name for a handle.
|
||||
|
||||
If UseComponentName is TRUE then the component name protocol for this device
|
||||
or it's parent device (if required) will be used to obtain the name of the
|
||||
device. If UseDevicePath is TRUE it will get the human readable device path
|
||||
and return that. If both are TRUE it will try to use component name first
|
||||
and device path if that fails.
|
||||
|
||||
It will use either ComponentName or ComponentName2 protocol, depending on
|
||||
what is present.
|
||||
|
||||
This function will furthur verify whether the handle in question produced either
|
||||
EFI_DRIVER_CONFIGRATION_PROTOCOL or EFI_DRIVER_CONFIGURATION2_PROTOCOL and also
|
||||
whether the handle in question produced either EFI_DRIVER_DIAGNOSTICS_PROTOCOL or
|
||||
EFI_DRIVER_DIAGNOSTICS2_PROTOCOL.
|
||||
|
||||
Upon sucessful return the memory for *BestDeviceName is up to the caller to free.
|
||||
|
||||
@param DeviceHandle the device handle whose name is desired
|
||||
@param UseComponentName whether to use the ComponentName protocol at all
|
||||
@param UseDevicePath whether to use the DevicePath protocol at all
|
||||
@param Language pointer to language string to use
|
||||
@param BestDeviceName pointer to pointer to string allocated with the name
|
||||
@param ConfigurationStatus pointer to status for opening a Configuration protocol
|
||||
@param DiagnosticsStatus pointer to status for opening a Diagnostics protocol
|
||||
@param Display Whether to Print this out to default Print location
|
||||
@param Indent how many characters to indent the printing
|
||||
|
||||
@retval EFI_SUCCESS this function always returns EFI_SUCCESS
|
||||
**/
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(EFIAPI *GET_DEVICE_NAME) (
|
||||
EFI_HANDLE DeviceHandle,
|
||||
BOOLEAN UseComponentName,
|
||||
BOOLEAN UseDevicePath,
|
||||
CHAR8 *Language,
|
||||
CHAR16 **BestDeviceName,
|
||||
EFI_STATUS *ConfigurationStatus,
|
||||
EFI_STATUS *DiagnosticsStatus,
|
||||
BOOLEAN Display,
|
||||
UINTN Indent
|
||||
);
|
||||
|
||||
#define EFI_SHELL_COMPATIBLE_MODE_VER L"1.1.1" ///< string for lowest version this shell supports
|
||||
#define EFI_SHELL_ENHANCED_MODE_VER L"1.1.2" ///< string for highest version this shell supports
|
||||
|
||||
/**
|
||||
this function gets the shell mode as stored in the shell environment
|
||||
"efishellmode". it will not fail.
|
||||
|
||||
@param Mode returns a string representing one of the
|
||||
2 supported modes of the shell.
|
||||
|
||||
@retval EFI_SUCCESS this function always returns success
|
||||
**/
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(EFIAPI *GET_SHELL_MODE) (
|
||||
OUT CHAR16 **Mode
|
||||
);
|
||||
|
||||
/**
|
||||
Convert a file system style name to an file path
|
||||
|
||||
This function will convert a shell path name to a Device Path Protocol path.
|
||||
This function will allocate any required memory for this operation and it
|
||||
is the responsibility of the caller to free that memory when no longer required.
|
||||
|
||||
if anything prevents the complete conversion free any allocated memory and
|
||||
return NULL.
|
||||
|
||||
@retval !NULL a pointer to the callee allocated Device Path
|
||||
@retval NULL the operation could not be completed.
|
||||
**/
|
||||
typedef
|
||||
EFI_DEVICE_PATH_PROTOCOL*
|
||||
(EFIAPI *SHELLENV_NAME_TO_PATH) (
|
||||
IN CHAR16 *Path
|
||||
);
|
||||
|
||||
/**
|
||||
converts a device path into a file system map name.
|
||||
|
||||
if DevPath is NULL then ASSERT
|
||||
This function looks through the shell environment map for a map whose device
|
||||
path matches the DevPath parameter. If one is found the Name is returned via
|
||||
Name parameter. If sucessful the caller must free the memory allocated for
|
||||
Name.
|
||||
|
||||
this function will use the internal lock to prevent changes to the map during
|
||||
the lookup operation.
|
||||
|
||||
@param DevPath The device path to search for a name for
|
||||
@param ConsistMapping what state to verify map flag VAR_ID_CONSIST
|
||||
@param Name on sucessful return the name of that device path
|
||||
|
||||
@retval EFI_SUCCESS the DevPath was found and the name returned
|
||||
in Name.
|
||||
@retval EFI_OUT_OF_RESOURCES A required memory allocation failed.
|
||||
@retval EFI_UNSUPPORTED the DevPath was not found in the map
|
||||
**/
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(EFIAPI *SHELLENV_GET_FS_NAME) (
|
||||
IN EFI_DEVICE_PATH_PROTOCOL * DevPath,
|
||||
IN BOOLEAN ConsistMapping,
|
||||
OUT CHAR16 **Name
|
||||
);
|
||||
|
||||
/**
|
||||
this function will open a group of files that match the Arg path, but will not
|
||||
support the wildcard characters ('?' and '*') in the Arg path. if there are
|
||||
any wildcard characters in the path this function will return
|
||||
EFI_INVALID_PARAMETER. the return is a double linked list based on the
|
||||
EFI_LIST_ENTRY linked list structure. use this in conjunction with the
|
||||
SHELL_FILE_ARG_SIGNATURE to get the SHELL_FILE_ARG structures that are returned.
|
||||
The memory allocated by the callee for this list is freed by making a call to
|
||||
SHELLENV_FREE_FILE_LIST.
|
||||
|
||||
@param Arg pointer Path to files to open
|
||||
@param ListHead pointer to allocated and initialized list head
|
||||
upon which to append all the opened file structures.
|
||||
|
||||
@retval EFI_SUCCESS 1 or more files was opened and a struct of each file's
|
||||
information was appended to ListHead.
|
||||
@retval EFI_OUT_OF_RESOURCES a memory allocation failed.
|
||||
@retval EFI_NOT_FOUND no matching files could be found.
|
||||
@sa SHELLENV_FREE_FILE_LIST
|
||||
**/
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(EFIAPI *SHELLENV_FILE_META_ARG_NO_WILDCARD) (
|
||||
IN CHAR16 *Arg,
|
||||
IN OUT EFI_LIST_ENTRY *ListHead
|
||||
);
|
||||
|
||||
/**
|
||||
this function removes duplicate file listings from lists.
|
||||
|
||||
this is a function for use with SHELLENV_FILE_META_ARG_NO_WILDCARD and
|
||||
SHELLENV_FILE_META_ARG. this function will verify that there are no duplicate
|
||||
files in the list of returned files. any file listed twice will have one of its
|
||||
instances removed.
|
||||
|
||||
@param ListHead pointer to linked list head that was returned from
|
||||
SHELLENV_FILE_META_ARG_NO_WILDCARD or
|
||||
SHELLENV_FILE_META_ARG.
|
||||
|
||||
@retval EFI_SUCCESS this function always returns success.
|
||||
|
||||
**/
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(EFIAPI *SHELLENV_DEL_DUP_FILE) (
|
||||
IN EFI_LIST_ENTRY * ListHead
|
||||
);
|
||||
|
||||
/**
|
||||
Converts a File System map name to a device path.
|
||||
|
||||
if DevPath is NULL then ASSERT()
|
||||
|
||||
This function looks through the shell environment map for a map whose Name
|
||||
matches the Name parameter. If one is found the device path pointer is
|
||||
updated to point to that file systems device path. the caller should not
|
||||
free the memory from that device path.
|
||||
|
||||
this function will use the internal lock to prevent changes to the map during
|
||||
the lookup operation.
|
||||
|
||||
@param Name pointer to NULL terminated UNICODE string of the
|
||||
file system name
|
||||
@param DevPath pointer to pointer to DevicePath. only valid on
|
||||
OUT if sucessful
|
||||
|
||||
@retval EFI_SUCCESS the conversion was successful and the device
|
||||
path was returned.
|
||||
@retval EFI_NOT_FOUND the file system could not be found in the map.
|
||||
**/
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(EFIAPI *SHELLENV_GET_FS_DEVICE_PATH) (
|
||||
IN CHAR16 *Name,
|
||||
OUT EFI_DEVICE_PATH_PROTOCOL **DevPath
|
||||
);
|
||||
|
||||
/// EFI_SHELL_ENVIRONMENT2 protocol structure
|
||||
/// contains pointers to functions
|
||||
typedef struct {
|
||||
SHELLENV_EXECUTE Execute;
|
||||
SHELLENV_GET_ENV GetEnv;
|
||||
SHELLENV_GET_MAP GetMap;
|
||||
SHELLENV_ADD_CMD AddCmd;
|
||||
SHELLENV_ADD_PROT AddProt;
|
||||
SHELLENV_GET_PROT GetProt;
|
||||
SHELLENV_CUR_DIR CurDir;
|
||||
SHELLENV_FILE_META_ARG FileMetaArg;
|
||||
SHELLENV_FREE_FILE_LIST FreeFileList;
|
||||
|
||||
//
|
||||
// The following services are only used by the shell itself
|
||||
//
|
||||
SHELLENV_NEW_SHELL NewShell;
|
||||
SHELLENV_BATCH_IS_ACTIVE BatchIsActive;
|
||||
|
||||
SHELLENV_FREE_RESOURCES FreeResources;
|
||||
|
||||
//
|
||||
// GUID to differentiate ShellEnvironment2 from ShellEnvironment
|
||||
//
|
||||
EFI_GUID SESGuid;
|
||||
//
|
||||
// Major Version grows if shell environment interface has been changes
|
||||
//
|
||||
UINT32 MajorVersion;
|
||||
UINT32 MinorVersion;
|
||||
SHELLENV_ENABLE_PAGE_BREAK EnablePageBreak;
|
||||
SHELLENV_DISABLE_PAGE_BREAK DisablePageBreak;
|
||||
SHELLENV_GET_PAGE_BREAK GetPageBreak;
|
||||
|
||||
SHELLENV_SET_KEY_FILTER SetKeyFilter;
|
||||
SHELLENV_GET_KEY_FILTER GetKeyFilter;
|
||||
|
||||
SHELLENV_GET_EXECUTION_BREAK GetExecutionBreak;
|
||||
SHELLENV_INCREMENT_SHELL_NESTING_LEVEL IncrementShellNestingLevel;
|
||||
SHELLENV_DECREMENT_SHELL_NESTING_LEVEL DecrementShellNestingLevel;
|
||||
SHELLENV_IS_ROOT_SHELL IsRootShell;
|
||||
|
||||
SHELLENV_CLOSE_CONSOLE_PROXY CloseConsoleProxy;
|
||||
HANDLE_ENUMERATOR HandleEnumerator;
|
||||
PROTOCOL_INFO_ENUMERATOR ProtocolInfoEnumerator;
|
||||
GET_DEVICE_NAME GetDeviceName;
|
||||
GET_SHELL_MODE GetShellMode;
|
||||
SHELLENV_NAME_TO_PATH NameToPath;
|
||||
SHELLENV_GET_FS_NAME GetFsName;
|
||||
SHELLENV_FILE_META_ARG_NO_WILDCARD FileMetaArgNoWildCard;
|
||||
SHELLENV_DEL_DUP_FILE DelDupFileArg;
|
||||
SHELLENV_GET_FS_DEVICE_PATH GetFsDevicePath;
|
||||
} EFI_SHELL_ENVIRONMENT2;
|
||||
|
||||
extern EFI_GUID gEfiShellEnvironment2Guid;
|
||||
extern EFI_GUID gEfiShellEnvironment2ExtGuid;
|
||||
#endif // _SHELLENV_H_
|
|
@ -0,0 +1,96 @@
|
|||
/** @file
|
||||
EFI Shell Interface protocol from EDK shell (no spec).
|
||||
|
||||
Shell Interface - additional information (over image_info) provided
|
||||
to an application started by the shell.
|
||||
|
||||
ConIo - provides a file style interface to the console. Note that the
|
||||
ConOut & ConIn interfaces in the system table will work as well, and both
|
||||
all will be redirected to a file if needed on a command line
|
||||
|
||||
The shell interface's and data (including ConIo) are only valid during
|
||||
the applications Entry Point. Once the application returns from it's
|
||||
entry point the data is freed by the invoking shell.
|
||||
|
||||
Copyright (c) 2006 - 2009, Intel Corporation
|
||||
All rights reserved. This program and the accompanying materials
|
||||
are licensed and made available under the terms and conditions of the BSD License
|
||||
which accompanies this distribution. The full text of the license may be found at
|
||||
http://opensource.org/licenses/bsd-license.php
|
||||
|
||||
THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
|
||||
|
||||
**/
|
||||
|
||||
#ifndef _SHELLINTERFACE_H_
|
||||
#define _SHELLINTERFACE_H_
|
||||
|
||||
#include <Protocol\LoadedImage.h>
|
||||
|
||||
#define SHELL_INTERFACE_PROTOCOL_GUID \
|
||||
{ \
|
||||
0x47c7b223, 0xc42a, 0x11d2, 0x8e, 0x57, 0x0, 0xa0, 0xc9, 0x69, 0x72, 0x3b \
|
||||
}
|
||||
|
||||
///
|
||||
/// bit definitions for EFI_SHELL_ARG_INFO
|
||||
///
|
||||
typedef enum {
|
||||
ARG_NO_ATTRIB = 0x0,
|
||||
ARG_IS_QUOTED = 0x1,
|
||||
ARG_PARTIALLY_QUOTED = 0x2,
|
||||
ARG_FIRST_HALF_QUOTED = 0x4,
|
||||
ARG_FIRST_CHAR_IS_ESC = 0x8
|
||||
};
|
||||
|
||||
///
|
||||
/// attributes for an argument.
|
||||
///
|
||||
typedef struct _EFI_SHELL_ARG_INFO {
|
||||
UINT32 Attributes;
|
||||
} EFI_SHELL_ARG_INFO;
|
||||
|
||||
///
|
||||
/// This protocol provides access to additional information about a shell app.
|
||||
///
|
||||
typedef struct {
|
||||
///
|
||||
/// Handle back to original image handle & image info
|
||||
///
|
||||
EFI_HANDLE ImageHandle;
|
||||
EFI_LOADED_IMAGE_PROTOCOL *Info;
|
||||
|
||||
///
|
||||
/// Parsed arg list converted more C like format
|
||||
///
|
||||
CHAR16 **Argv;
|
||||
UINTN Argc;
|
||||
|
||||
///
|
||||
/// Storage for file redirection args after parsing
|
||||
///
|
||||
CHAR16 **RedirArgv;
|
||||
UINTN RedirArgc;
|
||||
|
||||
///
|
||||
/// A file style handle for console io
|
||||
///
|
||||
EFI_FILE_HANDLE StdIn;
|
||||
EFI_FILE_HANDLE StdOut;
|
||||
EFI_FILE_HANDLE StdErr;
|
||||
|
||||
///
|
||||
/// list of attributes for each argument
|
||||
///
|
||||
EFI_SHELL_ARG_INFO *ArgInfo;
|
||||
|
||||
///
|
||||
/// whether we are echoing
|
||||
///
|
||||
BOOLEAN EchoOn;
|
||||
} EFI_SHELL_INTERFACE;
|
||||
|
||||
extern EFI_GUID gEfiShellInterfaceGuid;
|
||||
|
||||
#endif
|
|
@ -0,0 +1,33 @@
|
|||
/** @file
|
||||
EFI Shell protocol as defined in the UEFI Shell 2.0 specification.
|
||||
|
||||
Copyright (c) 2006 - 2009, Intel Corporation
|
||||
All rights reserved. This program and the accompanying materials
|
||||
are licensed and made available under the terms and conditions of the BSD License
|
||||
which accompanies this distribution. The full text of the license may be found at
|
||||
http://opensource.org/licenses/bsd-license.php
|
||||
|
||||
THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
|
||||
|
||||
**/
|
||||
|
||||
#ifndef __EFI_SHELL_PARAMETERS_PROTOCOL__
|
||||
#define __EFI_SHELL_PARAMETERS_PROTOCOL__
|
||||
|
||||
#define EFI_SHELL_PARAMETERS_PROTOCOL_GUID \
|
||||
{ \
|
||||
0x752f3136, 0x4e16, 0x4fdc, { 0xa2, 0x2a, 0xe5, 0xf4, 0x68, 0x12, 0xf4, 0xca } \
|
||||
}
|
||||
|
||||
typedef struct _EFI_SHELL_PARAMETERS_PROTOCOL {
|
||||
CHAR16 **Argv;
|
||||
UINTN Argc;
|
||||
EFI_FILE_HANDLE StdIn;
|
||||
EFI_FILE_HANDLE StdOut;
|
||||
EFI_FILE_HANDLE StdErr;
|
||||
} EFI_SHELL_PARAMETERS_PROTOCOL;
|
||||
|
||||
extern EFI_GUID gEfiShellParametersProtocolGuid;
|
||||
|
||||
#endif
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,61 @@
|
|||
#/** @file
|
||||
# Provides interface to shell functionality for shell commands and applications.
|
||||
#
|
||||
# Copyright (c) 2006 - 2009, Intel Corporation.
|
||||
#
|
||||
# All rights reserved. This program and the accompanying materials
|
||||
# are licensed and made available under the terms and conditions of the BSD License
|
||||
# which accompanies this distribution. The full text of the license may be found at
|
||||
# http://opensource.org/licenses/bsd-license.php
|
||||
# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
|
||||
#
|
||||
#
|
||||
#**/
|
||||
|
||||
[Defines]
|
||||
INF_VERSION = 0x00010006
|
||||
BASE_NAME = BaseShellLib
|
||||
FILE_GUID = 449D0F00-2148-4a43-9836-F10B3980ECF5
|
||||
MODULE_TYPE = UEFI_DRIVER
|
||||
VERSION_STRING = 1.0
|
||||
LIBRARY_CLASS = ShellLib|UEFI_APPLICATION UEFI_DRIVER
|
||||
CONSTRUCTOR = ShellLibConstructor
|
||||
DESTRUCTOR = ShellLibDestructor
|
||||
|
||||
#
|
||||
# VALID_ARCHITECTURES = IA32 X64 IPF EBC
|
||||
#
|
||||
|
||||
[Sources.common]
|
||||
BaseShellLib.c
|
||||
|
||||
[Packages]
|
||||
MdePkg/MdePkg.dec
|
||||
ShellPkg/ShellPkg.dec
|
||||
|
||||
[LibraryClasses]
|
||||
UefiBootServicesTableLib
|
||||
MemoryAllocationLib
|
||||
DevicePathLib
|
||||
BaseLib
|
||||
BaseMemoryLib
|
||||
DebugLib
|
||||
|
||||
[Protocols]
|
||||
gEfiSimpleFileSystemProtocolGuid # ALWAYS_CONSUMED
|
||||
|
||||
# shell 2.0
|
||||
gEfiShellProtocolGuid # SOMETIMES_CONSUMED
|
||||
gEfiShellParametersProtocolGuid # SOMETIMES_CONSUMED
|
||||
|
||||
# 'old' shell
|
||||
gEfiShellEnvironment2Guid # SOMETIMES_CONSUMED
|
||||
gEfiShellInterfaceGuid # SOMETIMES_CONSUMED
|
||||
|
||||
[Guids]
|
||||
gEfiFileInfoGuid # ALWAYS_CONSUMED
|
||||
gEfiShellEnvironment2ExtGuid # ALWAYS_CONSUMED
|
||||
|
||||
[Pcd.common]
|
||||
|
|
@ -0,0 +1,50 @@
|
|||
## @file ShellPkg.dec
|
||||
#
|
||||
# This Package provides all definitions for EFI and UEFI Shell
|
||||
#
|
||||
# Copyright (c) 2009, Intel Corporation.
|
||||
#
|
||||
# All rights reserved.
|
||||
# This program and the accompanying materials are licensed and made available under
|
||||
# the terms and conditions of the BSD License which accompanies this distribution.
|
||||
# The full text of the license may be found at
|
||||
# http://opensource.org/licenses/bsd-license.php
|
||||
#
|
||||
# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
|
||||
#
|
||||
##
|
||||
|
||||
|
||||
[Defines]
|
||||
DEC_SPECIFICATION = 0x00010005
|
||||
PACKAGE_NAME = ShellPkg
|
||||
PACKAGE_GUID = 9FB7587C-93F7-40a7-9C04-FD7BA94EE646
|
||||
PACKAGE_VERSION = 0.1
|
||||
|
||||
|
||||
[Includes.common]
|
||||
Include
|
||||
|
||||
[LibraryClasses.common]
|
||||
## @libraryclass Provides most Shell APIs.
|
||||
# Only available for Shell applications
|
||||
##
|
||||
ShellLib|Include/Library/ShellLib.h
|
||||
|
||||
[Guids.common]
|
||||
gEfiShellEnvironment2ExtGuid = {0xd2c18636, 0x40e5, 0x4eb5, {0xa3, 0x1b, 0x36, 0x69, 0x5f, 0xd4, 0x2c, 0x87}}
|
||||
|
||||
[Protocols.common]
|
||||
gEfiShellProtocolGuid = {0x6302d008, 0x7f9b, 0x4f30, {0x87, 0xac, 0x60, 0xc9, 0xfe, 0xf5, 0xda, 0x4e}}
|
||||
gEfiShellParametersProtocolGuid = {0x752f3136, 0x4e16, 0x4fdc, {0xa2, 0x2a, 0xe5, 0xf4, 0x68, 0x12, 0xf4, 0xca}}
|
||||
gEfiShellEnvironment2Guid = {0x47c7b221, 0xc42a, 0x11d2, {0x8e, 0x57, 0x00, 0xa0, 0xc9, 0x69, 0x72, 0x3b}}
|
||||
gEfiShellInterfaceGuid = {0x47c7b223, 0xc42a, 0x11d2, {0x8e, 0x57, 0x00, 0xa0, 0xc9, 0x69, 0x72, 0x3b}}
|
||||
|
||||
[PcdsFeatureFlag.common]
|
||||
|
||||
[PcdsFixedAtBuild.common]
|
||||
|
||||
[PcdsPatchableInModule.common]
|
||||
|
||||
[PcdsDynamic.common]
|
|
@ -0,0 +1,48 @@
|
|||
#/** @file
|
||||
# Shell Package
|
||||
# This is the first release of the Shell package. Please be aware that there will
|
||||
# probably be higher than usual numbers of changes as the package gets used and issues,
|
||||
# enhancements, and bugs are found and fixed.
|
||||
#
|
||||
# Copyright (c) 2007 - 2008, Intel Corporation
|
||||
#
|
||||
# All rights reserved. This program and the accompanying materials
|
||||
# are licensed and made available under the terms and conditions of the BSD License
|
||||
# which accompanies this distribution. The full text of the license may be found at
|
||||
# http://opensource.org/licenses/bsd-license.php
|
||||
#
|
||||
# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
|
||||
#
|
||||
#**/
|
||||
|
||||
[Defines]
|
||||
PLATFORM_NAME = Shell
|
||||
PLATFORM_GUID = E1DC9BF8-7013-4c99-9437-795DAA45F3BD
|
||||
PLATFORM_VERSION = 0.1
|
||||
DSC_SPECIFICATION = 0x00010005
|
||||
OUTPUT_DIRECTORY = Build/Shell
|
||||
SUPPORTED_ARCHITECTURES = IA32|IPF|X64|EBC
|
||||
BUILD_TARGETS = DEBUG|RELEASE
|
||||
SKUID_IDENTIFIER = DEFAULT
|
||||
|
||||
[LibraryClasses.common]
|
||||
UefiApplicationEntryPoint|MdePkg/Library/UefiApplicationEntryPoint/UefiApplicationEntryPoint.inf
|
||||
UefiBootServicesTableLib|MdePkg/Library/UefiBootServicesTableLib/UefiBootServicesTableLib.inf
|
||||
DevicePathLib|MdePkg/Library/UefiDevicePathLib/UefiDevicePathLib.inf
|
||||
DebugLib|MdePkg/Library/BaseDebugLibNull/BaseDebugLibNull.inf
|
||||
PcdLib|MdePkg/Library/BasePcdLibNull/BasePcdLibNull.inf
|
||||
MemoryAllocationLib|MdePkg/Library/UefiMemoryAllocationLib/UefiMemoryAllocationLib.inf
|
||||
UefiLib|MdePkg/Library/UefiLib/UefiLib.inf
|
||||
BaseLib|MdePkg/Library/BaseLib/BaseLib.inf
|
||||
BaseMemoryLib|MdePkg/Library/BaseMemoryLibOptDxe/BaseMemoryLibOptDxe.inf
|
||||
PrintLib|MdeModulePkg/Library/DxePrintLibPrint2Protocol/DxePrintLibPrint2Protocol.inf
|
||||
UefiRuntimeServicesTableLib|MdePkg/Library/UefiRuntimeServicesTableLib/UefiRuntimeServicesTableLib.inf
|
||||
ShellLib|ShellPkg/Library/BaseShellLib/BaseShellLib.inf
|
||||
|
||||
[PcdsFixedAtBuild.common]
|
||||
|
||||
[Components.common]
|
||||
ShellPkg/Library/BaseShellLib/BaseShellLib.inf
|
||||
ShellPkg/Application/ShellExecTestApp/SA.inf
|
||||
ShellPkg/Application/ShellLibTestApp/SA3.inf
|
Loading…
Reference in New Issue