Use 'git mv' command. Mike
> -----Original Message----- > From: Ni, Ruiyu > Sent: Tuesday, October 18, 2016 1:57 PM > To: Carsey, Jaben <jaben.car...@intel.com>; edk2-devel@lists.01.org > Cc: Kinney, Michael D <michael.d.kin...@intel.com>; Yao, Jiewen > <jiewen....@intel.com> > Subject: RE: [edk2] [PATCH 2/5] MdePkg: Include > Shell/ShellDynamicCommand/ShellParameters definitions > > 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