mirror of https://github.com/acidanthera/audk.git
1014 lines
41 KiB
C
1014 lines
41 KiB
C
/** @file
|
|
EFI Shell protocol as defined in the UEFI Shell 2.0 specification including errata.
|
|
|
|
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 } \
|
|
}
|
|
|
|
// replaced EFI_LIST_ENTRY with LIST_ENTRY for simplicity.
|
|
// they are identical outside of the name.
|
|
typedef struct {
|
|
LIST_ENTRY Link; ///< Linked list members.
|
|
EFI_STATUS Status; ///< Status of opening the file. Valid only if Handle != NULL.
|
|
CONST CHAR16 *FullName; ///< Fully qualified filename.
|
|
CONST CHAR16 *FileName; ///< name of this file.
|
|
EFI_FILE_HANDLE Handle; ///< Handle for interacting with the opened file or NULL if closed.
|
|
EFI_FILE_INFO *Info; ///< Pointer to the FileInfo struct for this file or NULL.
|
|
} 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[in] 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[in] FileName Pointer to null-terminated file path.
|
|
@param[in] FileAttribs The new file's attrbiutes. the different attributes are
|
|
described in EFI_FILE_PROTOCOL.Open().
|
|
@param[out] 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 device, 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[in] 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[in] 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[in] ParentImageHandle A handle of the image that is executing the specified
|
|
command line.
|
|
@param[in] CommandLine Points to the null-terminated UCS-2 encoded string
|
|
containing the command line. If NULL then the command-
|
|
line will be empty.
|
|
@param[in] 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[out] 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[in] FilePattern Points to a null-terminated shell file path, including wildcards.
|
|
@param[out] 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[in] FileDirHandle Handle of the directory to search.
|
|
@param[out] 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[in] 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[in] 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[in] 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.
|
|
|
|
If EFI_DEVICE_NAME_USE_COMPONENT_NAME is set, then the function will return the
|
|
device's name using the EFI_COMPONENT_NAME2_PROTOCOL, if present on
|
|
DeviceHandle.
|
|
|
|
If EFI_DEVICE_NAME_USE_DEVICE_PATH is set, then the function will return the
|
|
device's name using the EFI_DEVICE_PATH_PROTOCOL, if present on DeviceHandle.
|
|
If both EFI_DEVICE_NAME_USE_COMPONENT_NAME and
|
|
EFI_DEVICE_NAME_USE_DEVICE_PATH are set, then
|
|
EFI_DEVICE_NAME_USE_COMPONENT_NAME will have higher priority.
|
|
|
|
@param[in] DeviceHandle The handle of the device.
|
|
@param[in] Flags Determines the possible sources of component names.
|
|
@param[in] Language A pointer to the language specified for the device
|
|
name, in the same format as described in the UEFI
|
|
specification, Appendix M.
|
|
@param[out] 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[in] 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[in] Path The pointer to the path.
|
|
|
|
@return 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
|
|
);
|
|
|
|
/**
|
|
This function updated with errata.
|
|
|
|
Gets either a single or list of environment variables.
|
|
|
|
If name is not NULL then this function returns the current value of the specified
|
|
environment variable.
|
|
|
|
If Name is NULL than a list of all environment variable names is returned. Each a
|
|
NULL terminated string with a double NULL terminating the list.
|
|
|
|
@param[in] Name A pointer to the environment variable name. If
|
|
Name is NULL, then the function will return all
|
|
of the defined shell environment variables. In
|
|
the case where multiple environment variables are
|
|
being returned, each variable will be terminated by
|
|
a NULL, and the list will be terminated by a double
|
|
NULL.
|
|
|
|
@return !=NULL A pointer to the returned string.
|
|
The returned pointer does not need to be freed by the caller.
|
|
|
|
@retval NULL The environment variable doesn't exist or there are
|
|
no environment variables.
|
|
**/
|
|
typedef
|
|
CONST CHAR16 *
|
|
(EFIAPI *EFI_SHELL_GET_ENV) (
|
|
IN CONST CHAR16 *Name OPTIONAL
|
|
);
|
|
|
|
/**
|
|
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[in] 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[in] 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[in] FileHandle The file handle on which to get the current position.
|
|
@paramp[out] 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[in] FileHandle The handle of the file.
|
|
@param[out] 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[in] Command Points to the null-terminated UEFI Shell command name.
|
|
@param[in] Sections Points to the null-terminated comma-delimited
|
|
section names to return. If NULL, then all
|
|
sections will be returned.
|
|
@param[out] 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 OPTIONAL,
|
|
OUT CHAR16 **HelpText
|
|
);
|
|
|
|
/**
|
|
This funciton is updated with Errata.
|
|
|
|
Gets the mapping(s) 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.
|
|
|
|
If there are multiple map names they will be semi-colon seperated in the
|
|
NULL-terminated string.
|
|
|
|
@param[in,out] 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.
|
|
@retval !=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[in] FileName Points to the null-terminated UCS-2 encoded file name.
|
|
@param[out] FileHandle On return, points to the file handle.
|
|
@param[in] 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[in] Path A pointer to the path string.
|
|
@param[in] OpenMode Specifies the mode used to open each file, EFI_FILE_MODE_READ or
|
|
EFI_FILE_MODE_WRITE.
|
|
@param[in,out] FileList Points to the start of a list of files opened.
|
|
|
|
@retval EFI_SUCCESS Create the file list successfully.
|
|
@return 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[in] DevicePath Points to the device path corresponding to the device where the
|
|
EFI_SIMPLE_FILE_SYSTEM_PROTOCOL is installed.
|
|
@param[out] 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[in] DeviceHandle The handle of the device that contains the volume.
|
|
@param[out] 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[in] FileHandle The opened file handle for read.
|
|
@param[in] ReadSize On input, the size of Buffer, in bytes. On output, the amount of data read.
|
|
@param[in,out] 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,
|
|
IN OUT VOID *Buffer
|
|
);
|
|
|
|
/**
|
|
Deletes the duplicate file names files in the given file list.
|
|
|
|
@param[in] 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
|
|
);
|
|
|
|
//
|
|
// The SetAlias and GetAlias functions were affected by errata.
|
|
// They are not UEFI Shell 2.0 (no errata) compliant.
|
|
//
|
|
|
|
/**
|
|
Changes a shell command alias.
|
|
|
|
This function creates an alias for a shell command.
|
|
|
|
@param[in] Command Points to the null-terminated shell command or existing alias.
|
|
@param[in] 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[in] 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.
|
|
@param[in] Volatile if TRUE the Alias being set will be stored in a volatile fashion. if FALSE the
|
|
Alias being set will be stored in a non-volatile fashion.
|
|
|
|
@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,
|
|
IN BOOLEAN Volatile
|
|
);
|
|
|
|
/**
|
|
This function returns the command associated with a alias or a list of all
|
|
alias'.
|
|
|
|
@param[in] Alias Points to the null-terminated shell alias.
|
|
If this parameter is NULL, then all
|
|
aliases will be returned in ReturnedData.
|
|
@param[out] Volatile Upon return of a single command if TRUE indicates
|
|
this is stored in a volatile fashion. FALSE otherwise.
|
|
@return If Alias is not NULL, it will return a pointer to
|
|
the null-terminated command for that alias.
|
|
If Alias is NULL, ReturnedData points to a ';'
|
|
delimited list of alias (e.g.
|
|
ReturnedData = "dir;del;copy;mfp") that is null-terminated.
|
|
@retval NULL An error ocurred.
|
|
@retval NULL Alias was not a valid Alias.
|
|
**/
|
|
typedef
|
|
CONST CHAR16 *
|
|
(EFIAPI *EFI_SHELL_GET_ALIAS)(
|
|
IN CONST CHAR16 *Alias,
|
|
OUT BOOLEAN *Volatile OPTIONAL
|
|
);
|
|
|
|
/**
|
|
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[in] FileSystem A pointer to the file system's mapped name. If NULL, then the current working
|
|
directory is changed.
|
|
@param[in] 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[in] Name Points to the null-terminated environment variable name.
|
|
@param[in] Value Points to the null-terminated environment variable value. If the value is an
|
|
empty string then the environment variable is deleted.
|
|
@param[in] 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[in] FileHandle A file handle
|
|
@param[in] 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[in] FileHandle The file handle on which requested position will be set.
|
|
@param[in] 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[in] DevicePath Points to the device path. If this is NULL and Mapping points to a valid mapping,
|
|
then the mapping will be deleted.
|
|
@param[in] 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[in] FileHandle The opened file handle for writing.
|
|
@param[in,out] BufferSize On input, size of Buffer.
|
|
@param[in] 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,
|
|
IN VOID *Buffer
|
|
);
|
|
|
|
typedef struct _EFI_SHELL_PROTOCOL {
|
|
EFI_SHELL_EXECUTE Execute;
|
|
EFI_SHELL_GET_ENV GetEnv;
|
|
EFI_SHELL_SET_ENV SetEnv;
|
|
EFI_SHELL_GET_ALIAS GetAlias;
|
|
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;
|
|
|
|
enum ShellVersion {
|
|
SHELL_MAJOR_VERSION = 2,
|
|
SHELL_MINOR_VERSION = 0
|
|
};
|
|
|
|
#endif
|