I don't want to lose the file history either. I thought git can auto-detect the copy/move of files. I will investigate further.
Thanks/Ray > -----Original Message----- > From: Carsey, Jaben > Sent: Tuesday, October 18, 2016 2:02 AM > To: Ni, Ruiyu <ruiyu...@intel.com>; edk2-devel@lists.01.org > Cc: Kinney, Michael D <michael.d.kin...@intel.com>; Yao, Jiewen > <jiewen....@intel.com>; Carsey, Jaben <jaben.car...@intel.com> > Subject: RE: [edk2] [PATCH 2/5] MdePkg: Include > Shell/ShellDynamicCommand/ShellParameters definitions > > Can we do a GIT move operation and then merge the content from > ShellBase.h please? I do not want to lose the file history information. > > When we move by "delete" then "add" we lose everything for no reason. > > -Jaben > > > -----Original Message----- > > From: edk2-devel [mailto:edk2-devel-boun...@lists.01.org] On Behalf Of > > Ruiyu Ni > > Sent: Friday, October 14, 2016 2:44 AM > > To: edk2-devel@lists.01.org > > Cc: Carsey, Jaben <jaben.car...@intel.com>; Kinney, Michael D > > <michael.d.kin...@intel.com>; Yao, Jiewen <jiewen....@intel.com> > > Subject: [edk2] [PATCH 2/5] MdePkg: Include > > Shell/ShellDynamicCommand/ShellParameters definitions > > Importance: High > > > > Copy Shell/ShellDynamicCommand/ShellParameters definitions from > > ShellPkg to MdePkg. > > Content of ShellBase.h is moved to Protocol/Shell.h. > > > > The following patches will update ShellPkg to reference all protocol > > definition to MdePkg. > > > > Contributed-under: TianoCore Contribution Agreement 1.0 > > Signed-off-by: Ruiyu Ni <ruiyu...@intel.com> > > Cc: Jaben Carsey <jaben.car...@intel.com> > > Cc: Jiewen Yao <jiewen....@intel.com> > > Cc: Michael D Kinney <michael.d.kin...@intel.com> > > --- > > MdePkg/Include/Protocol/Shell.h | 1268 > > +++++++++++++++++++++++++ > > MdePkg/Include/Protocol/ShellDynamicCommand.h | 85 ++ > > MdePkg/Include/Protocol/ShellParameters.h | 60 ++ > > MdePkg/MdePkg.dec | 15 + > > 4 files changed, 1428 insertions(+) > > create mode 100644 MdePkg/Include/Protocol/Shell.h > > create mode 100644 MdePkg/Include/Protocol/ShellDynamicCommand.h > > create mode 100644 MdePkg/Include/Protocol/ShellParameters.h > > > > diff --git a/MdePkg/Include/Protocol/Shell.h > > b/MdePkg/Include/Protocol/Shell.h > > new file mode 100644 > > index 0000000..cc1fbdc > > --- /dev/null > > +++ b/MdePkg/Include/Protocol/Shell.h > > @@ -0,0 +1,1268 @@ > > +/** @file > > + EFI Shell protocol as defined in the UEFI Shell 2.0 specification > > including > > errata. > > + > > + (C) Copyright 2014 Hewlett-Packard Development Company, L.P.<BR> > > + Copyright (c) 2006 - 2016, Intel Corporation. All rights reserved.<BR> > > + 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 <Guid/FileInfo.h> > > + > > +#define EFI_SHELL_PROTOCOL_GUID \ > > + { \ > > + 0x6302d008, 0x7f9b, 0x4f30, { 0x87, 0xac, 0x60, 0xc9, 0xfe, 0xf5, 0xda, > 0x4e > > } \ > > + } > > +typedef VOID *SHELL_FILE_HANDLE; > > + > > +typedef enum { > > + /// > > + /// The operation completed successfully. > > + /// > > + SHELL_SUCCESS = 0, > > + > > + /// > > + /// The image failed to load. > > + /// > > + SHELL_LOAD_ERROR = 1, > > + > > + /// > > + /// The parameter was incorrect. > > + /// > > + SHELL_INVALID_PARAMETER = 2, > > + > > + /// > > + /// The operation is not supported. > > + /// > > + SHELL_UNSUPPORTED = 3, > > + > > + /// > > + /// The buffer was not the proper size for the request. > > + /// > > + SHELL_BAD_BUFFER_SIZE = 4, > > + > > + /// > > + /// The buffer was not large enough to hold the requested data. > > + /// The required buffer size is returned in the appropriate > > + /// parameter when this error occurs. > > + /// > > + SHELL_BUFFER_TOO_SMALL = 5, > > + > > + /// > > + /// There is no data pending upon return. > > + /// > > + SHELL_NOT_READY = 6, > > + > > + /// > > + /// The physical device reported an error while attempting the > > + /// operation. > > + /// > > + SHELL_DEVICE_ERROR = 7, > > + > > + /// > > + /// The device cannot be written to. > > + /// > > + SHELL_WRITE_PROTECTED = 8, > > + > > + /// > > + /// The resource has run out. > > + /// > > + SHELL_OUT_OF_RESOURCES = 9, > > + > > + /// > > + /// An inconsistency was detected on the file system causing the > > + /// operation to fail. > > + /// > > + SHELL_VOLUME_CORRUPTED = 10, > > + > > + /// > > + /// There is no more space on the file system. > > + /// > > + SHELL_VOLUME_FULL = 11, > > + > > + /// > > + /// The device does not contain any medium to perform the > > + /// operation. > > + /// > > + SHELL_NO_MEDIA = 12, > > + > > + /// > > + /// The medium in the device has changed since the last > > + /// access. > > + /// > > + SHELL_MEDIA_CHANGED = 13, > > + > > + /// > > + /// The item was not found. > > + /// > > + SHELL_NOT_FOUND = 14, > > + > > + /// > > + /// Access was denied. > > + /// > > + SHELL_ACCESS_DENIED = 15, > > + > > + // note the skipping of 16 and 17 > > + > > + /// > > + /// A timeout time expired. > > + /// > > + SHELL_TIMEOUT = 18, > > + > > + /// > > + /// The protocol has not been started. > > + /// > > + SHELL_NOT_STARTED = 19, > > + > > + /// > > + /// The protocol has already been started. > > + /// > > + SHELL_ALREADY_STARTED = 20, > > + > > + /// > > + /// The operation was aborted. > > + /// > > + SHELL_ABORTED = 21, > > + > > + // note the skipping of 22, 23, and 24 > > + > > + /// > > + /// A function encountered an internal version that was > > + /// incompatible with a version requested by the caller. > > + /// > > + SHELL_INCOMPATIBLE_VERSION = 25, > > + > > + /// > > + /// The function was not performed due to a security violation. > > + /// > > + SHELL_SECURITY_VIOLATION = 26, > > + > > + /// > > + /// The function was performed and resulted in an unequal > > + /// comparison.. > > + /// > > + SHELL_NOT_EQUAL = 27 > > +} SHELL_STATUS; > > + > > + > > +// 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. > > + SHELL_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 SHELL_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 The file path could not be opened. > > + @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 SHELL_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 SHELL_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 deleted. > > + @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 SHELL_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 SHELL_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). > > + > > + Note that the current directory string should exclude the tailing > > backslash > > character. > > + > > + @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 > > +(EFIAPI *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 > > + ); > > + > > +/** > > + 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 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 environment variable and Attributes, or list of environment > > variables. Can be > > + used instead of GetEnv(). > > + > > + This function returns the current value of the specified environment > > variable and > > + the Attributes. If no variable name was specified, then all of the known > > + variables will be returned. > > + > > + @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. > > + @param[out] Attributes If not NULL, a pointer to the returned > > attributes bitmask for > > + the environment variable. In the case > > where Name is > NULL, > > and > > + multiple environment variables are being > > returned, > > Attributes > > + is undefined. > > + > > + @retval NULL The environment variable doesn't exist. > > + @return The environment variable's value. The > > returned > > pointer does not > > + need to be freed by the caller. > > +**/ > > +typedef > > +CONST CHAR16 * > > +(EFIAPI *EFI_SHELL_GET_ENV_EX) ( > > + IN CONST CHAR16 *Name, > > + OUT UINT32 *Attributes 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. > > + > > + @retval NULL Cannot get the file info. > > + @return A pointer to a buffer with file > > information. > > +**/ > > +typedef > > +EFI_FILE_INFO * > > +(EFIAPI *EFI_SHELL_GET_FILE_INFO)( > > + IN SHELL_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 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. > > + @param[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 SHELL_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 SHELL_FILE_HANDLE FileHandle, > > + OUT UINT64 *Size > > + ); > > + > > +/** > > + Get the GUID value from a human readable name. > > + > > + If GuidName is a known GUID name, then update Guid to have the > correct > > value for > > + that GUID. > > + > > + This function is only available when the major and minor versions in the > > + EfiShellProtocol are greater than or equal to 2 and 1, respectively. > > + > > + @param[in] GuidName A pointer to the localized name for the GUID > > being queried. > > + @param[out] Guid A pointer to the GUID structure to be filled in. > > + > > + @retval EFI_SUCCESS The operation was successful. > > + @retval EFI_INVALID_PARAMETER Guid was NULL. > > + @retval EFI_INVALID_PARAMETER GuidName was NULL. > > + @retval EFI_NOT_FOUND GuidName is not a known GUID Name. > > +**/ > > +typedef > > +EFI_STATUS > > +(EFIAPI *EFI_SHELL_GET_GUID_FROM_NAME)( > > + IN CONST CHAR16 *GuidName, > > + OUT EFI_GUID *Guid > > + ); > > + > > +/** > > + Get the human readable name for a GUID from the value. > > + > > + If Guid is assigned a name, then update *GuidName to point to the > name. > > The callee > > + should not modify the value. > > + > > + This function is only available when the major and minor versions in the > > + EfiShellProtocol are greater than or equal to 2 and 1, respectively. > > + > > + @param[in] Guid A pointer to the GUID being queried. > > + @param[out] GuidName A pointer to a pointer the localized to name > for > > the GUID being requested > > + > > + @retval EFI_SUCCESS The operation was successful. > > + @retval EFI_INVALID_PARAMETER Guid was NULL. > > + @retval EFI_INVALID_PARAMETER GuidName was NULL. > > + @retval EFI_NOT_FOUND Guid is not assigned a name. > > +**/ > > +typedef > > +EFI_STATUS > > +(EFIAPI *EFI_SHELL_GET_GUID_NAME)( > > + IN CONST EFI_GUID *Guid, > > + OUT CONST CHAR16 **GuidName > > + ); > > + > > +/** > > + 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 > > + ); > > + > > +/** > > + 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 SHELL_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 SHELL_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 SHELL_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 SHELL_FILE_HANDLE FileHandle, > > + IN OUT UINTN *ReadSize, > > + IN OUT VOID *Buffer > > + ); > > + > > +/** > > + Register a GUID and a localized human readable name for it. > > + > > + If Guid is not assigned a name, then assign GuidName to Guid. This list > > of > > GUID > > + names must be used whenever a shell command outputs GUID > > information. > > + > > + This function is only available when the major and minor versions in the > > + EfiShellProtocol are greater than or equal to 2 and 1, respectively. > > + > > + @param[in] Guid A pointer to the GUID being registered. > > + @param[in] GuidName A pointer to the localized name for the GUID > > being registered. > > + > > + @retval EFI_SUCCESS The operation was successful. > > + @retval EFI_INVALID_PARAMETER Guid was NULL. > > + @retval EFI_INVALID_PARAMETER GuidName was NULL. > > + @retval EFI_ACCESS_DENIED Guid already is assigned a name. > > +**/ > > +typedef > > +EFI_STATUS > > +(EFIAPI *EFI_SHELL_REGISTER_GUID_NAME)( > > + IN CONST EFI_GUID *Guid, > > + IN CONST CHAR16 *GuidName > > + ); > > + > > +/** > > + 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 > > + ); > > + > > +/** > > + 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. > > + > > + @retval NULL Current directory does not exist. > > + @return The current directory. > > +**/ > > +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. All file information in the > > EFI_FILE_INFO > > + struct will be updated to the passed in data. > > + > > + @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 SHELL_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 SHELL_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 SHELL_FILE_HANDLE FileHandle, > > + IN OUT UINTN *BufferSize, > > + IN VOID *Buffer > > + ); > > + > > +// > > +// EFI_SHELL_PROTOCOL has been updated since UEFI Shell Spec 2.0 > > +// Usage of this protocol will require version checking before attempting > > +// to use any new members. There is no need to check the version for > > +// members that existed in UEFI Shell Spec 2.0. > > +// > > +// Update below for any future UEFI Shell spec changes to this protocol. > > +// > > +// Check EFI_SHELL_PROTOCOL MajorVersion and MinorVersion: > > +// if ((2 == gEfiShellProtocol->MajorVersion) && > > +// (0 == gEfiShellProtocol->MinorVersion)) { > > +// // > > +// // Cannot call: > > +// // RegisterGuidName - UEFI Shell 2.1 > > +// // GetGuidName - UEFI Shell 2.1 > > +// // GetGuidFromName - UEFI Shell 2.1 > > +// // GetEnvEx - UEFI Shell 2.1 > > +// // > > +// } else { > > +// // > > +// // Can use all members > > +// // > > +// } > > +// > > +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; > > + // Added for Shell 2.1 > > + EFI_SHELL_REGISTER_GUID_NAME RegisterGuidName; > > + EFI_SHELL_GET_GUID_NAME GetGuidName; > > + EFI_SHELL_GET_GUID_FROM_NAME GetGuidFromName; > > + EFI_SHELL_GET_ENV_EX GetEnvEx; > > +} EFI_SHELL_PROTOCOL; > > + > > +extern EFI_GUID gEfiShellProtocolGuid; > > + > > +enum ShellVersion { > > + SHELL_MAJOR_VERSION = 2, > > + SHELL_MINOR_VERSION = 1 > > +}; > > + > > +#endif > > diff --git a/MdePkg/Include/Protocol/ShellDynamicCommand.h > > b/MdePkg/Include/Protocol/ShellDynamicCommand.h > > new file mode 100644 > > index 0000000..793b4fd > > --- /dev/null > > +++ b/MdePkg/Include/Protocol/ShellDynamicCommand.h > > @@ -0,0 +1,85 @@ > > +/** @file > > + EFI Shell Dynamic Command registration protocol > > + > > + (C) Copyright 2012-2014 Hewlett-Packard Development Company, > > L.P.<BR> > > + Copyright (c) 2016, Intel Corporation. All rights reserved.<BR> > > + 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_DYNAMIC_COMMAND_PROTOCOL__ > > +#define __EFI_SHELL_DYNAMIC_COMMAND_PROTOCOL__ > > + > > +#include <Protocol/Shell.h> > > +#include <Protocol/ShellParameters.h> > > + > > +// {3C7200E9-005F-4EA4-87DE-A3DFAC8A27C3} > > +#define EFI_SHELL_DYNAMIC_COMMAND_PROTOCOL_GUID \ > > + { \ > > + 0x3c7200e9, 0x005f, 0x4ea4, { 0x87, 0xde, 0xa3, 0xdf, 0xac, 0x8a, 0x27, > 0xc3 > > } \ > > + } > > + > > + > > +// > > +// Define for forward reference. > > +// > > +typedef struct _EFI_SHELL_DYNAMIC_COMMAND_PROTOCOL > > EFI_SHELL_DYNAMIC_COMMAND_PROTOCOL; > > + > > + > > +/** > > + This is the shell command handler function pointer callback type. This > > + function handles the command when it is invoked in the shell. > > + > > + @param[in] This The instance of the > > EFI_SHELL_DYNAMIC_COMMAND_PROTOCOL. > > + @param[in] SystemTable The pointer to the system table. > > + @param[in] ShellParameters The parameters associated with the > > command. > > + @param[in] Shell The instance of the shell protocol > > used in the > > context > > + of processing this command. > > + > > + @return EFI_SUCCESS the operation was sucessful > > + @return other the operation failed. > > +**/ > > +typedef > > +SHELL_STATUS > > +(EFIAPI * SHELL_COMMAND_HANDLER)( > > + IN EFI_SHELL_DYNAMIC_COMMAND_PROTOCOL *This, > > + IN EFI_SYSTEM_TABLE *SystemTable, > > + IN EFI_SHELL_PARAMETERS_PROTOCOL *ShellParameters, > > + IN EFI_SHELL_PROTOCOL *Shell > > + ); > > + > > +/** > > + This is the command help handler function pointer callback type. This > > + function is responsible for displaying help information for the > > associated > > + command. > > + > > + @param[in] This The instance of the > > EFI_SHELL_DYNAMIC_COMMAND_PROTOCOL. > > + @param[in] Language The pointer to the language string to > > use. > > + > > + @return string Pool allocated help string, must be > > freed by > caller > > +**/ > > +typedef > > +CHAR16* > > +(EFIAPI * SHELL_COMMAND_GETHELP)( > > + IN EFI_SHELL_DYNAMIC_COMMAND_PROTOCOL *This, > > + IN CONST CHAR8 *Language > > + ); > > + > > +/// EFI_SHELL_DYNAMIC_COMMAND_PROTOCOL protocol structure. > > +struct _EFI_SHELL_DYNAMIC_COMMAND_PROTOCOL { > > + > > + CONST CHAR16 *CommandName; > > + SHELL_COMMAND_HANDLER Handler; > > + SHELL_COMMAND_GETHELP GetHelp; > > + > > +}; > > + > > +extern EFI_GUID gEfiShellDynamicCommandProtocolGuid; > > + > > +#endif > > diff --git a/MdePkg/Include/Protocol/ShellParameters.h > > b/MdePkg/Include/Protocol/ShellParameters.h > > new file mode 100644 > > index 0000000..68ca9ed > > --- /dev/null > > +++ b/MdePkg/Include/Protocol/ShellParameters.h > > @@ -0,0 +1,60 @@ > > +/** @file > > + EFI Shell protocol as defined in the UEFI Shell 2.0 specification. > > + > > + Copyright (c) 2006 - 2016, Intel Corporation. All rights reserved.<BR> > > + 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__ > > + > > +#include <Protocol/Shell.h> > > + > > +#define EFI_SHELL_PARAMETERS_PROTOCOL_GUID \ > > + { \ > > + 0x752f3136, 0x4e16, 0x4fdc, { 0xa2, 0x2a, 0xe5, 0xf4, 0x68, 0x12, 0xf4, > 0xca > > } \ > > + } > > + > > +typedef struct _EFI_SHELL_PARAMETERS_PROTOCOL { > > + /// > > + /// Points to an Argc-element array of points to NULL-terminated strings > > containing > > + /// the command-line parameters. The first entry in the array is always > the > > full file > > + /// path of the executable. Any quotation marks that were used to > > preserve > > + /// whitespace have been removed. > > + /// > > + CHAR16 **Argv; > > + > > + /// > > + /// The number of elements in the Argv array. > > + /// > > + UINTN Argc; > > + > > + /// > > + /// The file handle for the standard input for this executable. This may > > be > > different > > + /// from the ConInHandle in EFI_SYSTEM_TABLE. > > + /// > > + SHELL_FILE_HANDLE StdIn; > > + > > + /// > > + /// The file handle for the standard output for this executable. This may > be > > different > > + /// from the ConOutHandle in EFI_SYSTEM_TABLE. > > + /// > > + SHELL_FILE_HANDLE StdOut; > > + > > + /// > > + /// The file handle for the standard error output for this executable. > > This > > may be > > + /// different from the StdErrHandle in EFI_SYSTEM_TABLE. > > + /// > > + SHELL_FILE_HANDLE StdErr; > > +} EFI_SHELL_PARAMETERS_PROTOCOL; > > + > > +extern EFI_GUID gEfiShellParametersProtocolGuid; > > + > > +#endif > > diff --git a/MdePkg/MdePkg.dec b/MdePkg/MdePkg.dec > > index f1e5151..3e08bed 100644 > > --- a/MdePkg/MdePkg.dec > > +++ b/MdePkg/MdePkg.dec > > @@ -1645,6 +1645,21 @@ [Protocols] > > ## Include/Protocol/EraseBlock.h > > gEfiEraseBlockProtocolGuid = { 0x95a9a93e, 0xa86e, 0x4926, > > {0xaa, > > 0xef, 0x99, 0x18, 0xe7, 0x72, 0xd9, 0x87 }} > > > > + # > > + # Protocols defined in Shell2.0 > > + # > > + ## Include/Protocol/Shell.h > > + gEfiShellProtocolGuid = { 0x6302d008, 0x7f9b, 0x4f30, > > {0x87, 0xac, > > 0x60, 0xc9, 0xfe, 0xf5, 0xda, 0x4e }} > > + > > + ## Include/Protocol/ShellParameters.h > > + gEfiShellParametersProtocolGuid = { 0x752f3136, 0x4e16, 0x4fdc, > > {0xa2, > > 0x2a, 0xe5, 0xf4, 0x68, 0x12, 0xf4, 0xca }} > > + > > + # > > + # Protocols defined in Shell2.1 > > + # > > + ## Include/Protocol/ShellDynamicCommand.h > > + gEfiShellDynamicCommandProtocolGuid = { 0x3c7200e9, 0x005f, 0x4ea4, > > {0x87, 0xde, 0xa3, 0xdf, 0xac, 0x8a, 0x27, 0xc3 }} > > + > > # > > # [Error.gEfiMdePkgTokenSpaceGuid] > > # 0x80000001 | Invalid value provided. > > -- > > 2.9.0.windows.1 > > > > _______________________________________________ > > edk2-devel mailing list > > edk2-devel@lists.01.org > > https://lists.01.org/mailman/listinfo/edk2-devel _______________________________________________ edk2-devel mailing list edk2-devel@lists.01.org https://lists.01.org/mailman/listinfo/edk2-devel