From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga06.intel.com (mga06.intel.com [134.134.136.31]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ml01.01.org (Postfix) with ESMTPS id A2E8C1A1DFF for ; Mon, 17 Oct 2016 22:56:53 -0700 (PDT) Received: from orsmga005.jf.intel.com ([10.7.209.41]) by orsmga104.jf.intel.com with ESMTP; 17 Oct 2016 22:56:53 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.31,508,1473145200"; d="scan'208";a="20752945" Received: from fmsmsx104.amr.corp.intel.com ([10.18.124.202]) by orsmga005.jf.intel.com with ESMTP; 17 Oct 2016 22:56:53 -0700 Received: from shsmsx102.ccr.corp.intel.com (10.239.4.154) by fmsmsx104.amr.corp.intel.com (10.18.124.202) with Microsoft SMTP Server (TLS) id 14.3.248.2; Mon, 17 Oct 2016 22:56:52 -0700 Received: from shsmsx104.ccr.corp.intel.com ([169.254.5.209]) by shsmsx102.ccr.corp.intel.com ([169.254.2.206]) with mapi id 14.03.0248.002; Tue, 18 Oct 2016 13:56:48 +0800 From: "Ni, Ruiyu" To: "Carsey, Jaben" , "edk2-devel@lists.01.org" CC: "Kinney, Michael D" , "Yao, Jiewen" Thread-Topic: [edk2] [PATCH 2/5] MdePkg: Include Shell/ShellDynamicCommand/ShellParameters definitions Thread-Index: AQHSJf/F1Y0xHyFavU28W/Nw/+NF7KCsbwoAgAFNfKA= Date: Tue, 18 Oct 2016 05:56:47 +0000 Message-ID: <734D49CCEBEEF84792F5B80ED585239D58E3716C@SHSMSX104.ccr.corp.intel.com> References: <20161014094431.473584-1-ruiyu.ni@intel.com> <20161014094431.473584-3-ruiyu.ni@intel.com> In-Reply-To: Accept-Language: en-US, zh-CN X-MS-Has-Attach: X-MS-TNEF-Correlator: x-originating-ip: [10.239.127.40] MIME-Version: 1.0 Subject: Re: [PATCH 2/5] MdePkg: Include Shell/ShellDynamicCommand/ShellParameters definitions X-BeenThere: edk2-devel@lists.01.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: EDK II Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 18 Oct 2016 05:56:53 -0000 Content-Language: en-US Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable I don't want to lose the file history either. I thought git can auto-detect the copy/move of files. I will investigate fu= rther. Thanks/Ray > -----Original Message----- > From: Carsey, Jaben > Sent: Tuesday, October 18, 2016 2:02 AM > To: Ni, Ruiyu ; edk2-devel@lists.01.org > Cc: Kinney, Michael D ; Yao, Jiewen > ; Carsey, Jaben > Subject: RE: [edk2] [PATCH 2/5] MdePkg: Include > Shell/ShellDynamicCommand/ShellParameters definitions >=20 > 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. >=20 > When we move by "delete" then "add" we lose everything for no reason. >=20 > -Jaben >=20 > > -----Original Message----- > > From: edk2-devel [mailto:edk2-devel-bounces@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 ; Kinney, Michael D > > ; Yao, Jiewen > > 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 > > Cc: Jaben Carsey > > Cc: Jiewen Yao > > Cc: Michael D Kinney > > --- > > 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 in= cluding > > errata. > > + > > + (C) Copyright 2014 Hewlett-Packard Development Company, L.P.
> > + Copyright (c) 2006 - 2016, Intel Corporation. All rights reserved. > > + This program and the accompanying materials > > + are licensed and made available under the terms and conditions of th= e > BSD > > License > > + which accompanies this distribution. The full text of the license m= ay 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 > > + > > +#define EFI_SHELL_PROTOCOL_GUID \ > > + { \ > > + 0x6302d008, 0x7f9b, 0x4f30, { 0x87, 0xac, 0x60, 0xc9, 0xfe, 0xf5, 0x= da, > 0x4e > > } \ > > + } > > +typedef VOID *SHELL_FILE_HANDLE; > > + > > +typedef enum { > > + /// > > + /// The operation completed successfully. > > + /// > > + SHELL_SUCCESS =3D 0, > > + > > + /// > > + /// The image failed to load. > > + /// > > + SHELL_LOAD_ERROR =3D 1, > > + > > + /// > > + /// The parameter was incorrect. > > + /// > > + SHELL_INVALID_PARAMETER =3D 2, > > + > > + /// > > + /// The operation is not supported. > > + /// > > + SHELL_UNSUPPORTED =3D 3, > > + > > + /// > > + /// The buffer was not the proper size for the request. > > + /// > > + SHELL_BAD_BUFFER_SIZE =3D 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 =3D 5, > > + > > + /// > > + /// There is no data pending upon return. > > + /// > > + SHELL_NOT_READY =3D 6, > > + > > + /// > > + /// The physical device reported an error while attempting the > > + /// operation. > > + /// > > + SHELL_DEVICE_ERROR =3D 7, > > + > > + /// > > + /// The device cannot be written to. > > + /// > > + SHELL_WRITE_PROTECTED =3D 8, > > + > > + /// > > + /// The resource has run out. > > + /// > > + SHELL_OUT_OF_RESOURCES =3D 9, > > + > > + /// > > + /// An inconsistency was detected on the file system causing the > > + /// operation to fail. > > + /// > > + SHELL_VOLUME_CORRUPTED =3D 10, > > + > > + /// > > + /// There is no more space on the file system. > > + /// > > + SHELL_VOLUME_FULL =3D 11, > > + > > + /// > > + /// The device does not contain any medium to perform the > > + /// operation. > > + /// > > + SHELL_NO_MEDIA =3D 12, > > + > > + /// > > + /// The medium in the device has changed since the last > > + /// access. > > + /// > > + SHELL_MEDIA_CHANGED =3D 13, > > + > > + /// > > + /// The item was not found. > > + /// > > + SHELL_NOT_FOUND =3D 14, > > + > > + /// > > + /// Access was denied. > > + /// > > + SHELL_ACCESS_DENIED =3D 15, > > + > > + // note the skipping of 16 and 17 > > + > > + /// > > + /// A timeout time expired. > > + /// > > + SHELL_TIMEOUT =3D 18, > > + > > + /// > > + /// The protocol has not been started. > > + /// > > + SHELL_NOT_STARTED =3D 19, > > + > > + /// > > + /// The protocol has already been started. > > + /// > > + SHELL_ALREADY_STARTED =3D 20, > > + > > + /// > > + /// The operation was aborted. > > + /// > > + SHELL_ABORTED =3D 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 =3D 25, > > + > > + /// > > + /// The function was not performed due to a security violation. > > + /// > > + SHELL_SECURITY_VIOLATION =3D 26, > > + > > + /// > > + /// The function was performed and resulted in an unequal > > + /// comparison.. > > + /// > > + SHELL_NOT_EQUAL =3D 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. Vali= d only if > > Handle !=3D 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 fo= r 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 activ= e. > > + @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 fil= e data is > > + flushed to the device, and the file is closed. In all cases, the han= dle 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 specif= ied > > attributes and > > + returns the new file's handle. If the file already exists and is rea= d-only, > > then > > + EFI_INVALID_PARAMETER will be returned. > > + > > + If the file already existed, it is truncated and its attributes upda= ted. 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 retur= ned > > 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 differ= ent > > 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 point= s 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 i= t > > 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 hand= le 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 n= ame. > > + > > + @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 th= e > > 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 environmen= t. > If > > the > > + Environment is non-NULL, then the changes made will be discarded. > > + > > + The CommandLine is executed from the current working directory on th= e > > current > > + device. > > + > > + @param[in] ParentImageHandle A handle of the image that is executin= g > > the specified > > + command line. > > + @param[in] CommandLine Points to the NULL-terminated UCS-2 > > encoded string > > + containing the command line. If NULL t= hen the command- > > + line will be empty. > > + @param[in] Environment Points to a NULL-terminated array of > > environment > > + variables with the format 'x=3Dy', whe= re x is the > > + environment variable name and y is the= value. If this > > + is NULL, then the current shell enviro= nment 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 allow= ed. > > +**/ > > +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 fi= le list > > containing the names > > + of all matching files or else points t= o 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 d= irectory. > > + > > + @retval EFI_SUCCESS File information was returned successf= ully. > > + @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 structure= s. 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 directo= ry. If > > the > > + FileSystemMapping is not NULL, it returns the current directory > associated > > with the > > + FileSystemMapping. In both cases, the returned name includes the fil= e > > system > > + mapping (i.e. fs0:\current-dir). > > + > > + Note that the current directory string should exclude the tailing ba= ckslash > > character. > > + > > + @param[in] FileSystemMapping A pointer to the file system mapping. = If > > NULL, > > + then the current working directory is = returned. > > + > > + @retval !=3DNULL 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 com= ponent > > names. > > + @param[in] Language A pointer to the language specified fo= r 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 d= evice name > > + could be found, points to NULL. The na= me 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 !=3DNULL Pointer to the device path that corr= esponds to > the > > + device mapping. The returned pointer d= oes not need > > + to be freed. > > + @retval NULL There is no device path associated wit= h 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 c= aller. > > +**/ > > +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 ret= urned. > > 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 r= eturn all > > + of the defined shell environment varia= bles. In > > + the case where multiple environment va= riables are > > + being returned, each variable will be = terminated by > > + a NULL, and the list will be terminate= d 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 k= nown > > + 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 t= he defined shell > > + environment variables. In the case whe= re multiple > > environment > > + variables are being returned, each var= iable will be > > terminated > > + by a NULL, and the list will be termin= ated 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 bei= ng 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 inform= ation. > > +**/ > > +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 replac= ing > 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 fil= e path. The > path > > + is callee-allocated and should be free= d 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 driv= er and > > as such, the > > + operation is not supported. > > + > > + @param[in] FileHandle The file handle on which to get the cu= rrent > > position. > > + @param[out] Position Byte position from the start of the fi= le. > > + > > + @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 comp= ared 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 n= ot > exist, > > no > > + information will be returned. If Sections is NULL, then all help tex= t > > information > > + available will be returned. > > + > > + @param[in] Command Points to the NULL-terminated UEFI She= ll > > 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-allocate= d 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 poi= nter. > > On > > + exit, updates the pointer to point to= the > > + portion of the device path after the = mapping. > > + > > + @retval NULL No mapping was found. > > + @retval !=3DNULL Pointer to NULL-terminated mapping. = The buffer > > + is callee allocated and should be free= d 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 i= s 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 ret= urned > > 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 ref= ers 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 ref= ers 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 ref= ers 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 ref= ers 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, e= lse, > 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 th= e > > 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. FileHand= le > 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 devic= e. FileHandle is > > NULL. > > + @retval EFI_NO_MEDIA The device has no medium. FileHandle i= s > > NULL. > > + @retval EFI_MEDIA_CHANGED The device has a different medium in i= t > > 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. Fil= eHandle 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 ar= e > > 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 link= ed > 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 file= s 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 fil= e > handle > > to it. > > + > > + @param[in] DevicePath Points to the device path correspondin= g to > the > > device where the > > + EFI_SIMPLE_FILE_SYSTEM_PROTOCOL is ins= talled. > > + @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 fil= e > 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 n= umber > > of bytes > > + from the file at the file's current position and returns them in Buf= fer. 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 byte= s. 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 fi= le 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 fo= r 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, th= en the existing alias is > > unchanged and > > + EFI_ACCESS_DENIED is returned. > > + @param[in] Volatile if TRUE the Alias being set will be st= ored in a > > volatile fashion. if FALSE the > > + Alias being set will be stored in a no= n-volatile fashion. > > + > > + @retval EFI_SUCCESS Alias created or deleted successfully. > > + @retval EFI_ACCESS_DENIED The alias is a built-in alias or alrea= dy > 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 al= ias. > > + If this parameter is NULL, then all > > + aliases will be returned in ReturnedDa= ta. > > + @param[out] Volatile Upon return of a single command if TRU= E > > 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 a= lias. > > + If Alias is NULL, ReturnedData points = to a ';' > > + delimited list of alias (e.g. > > + ReturnedData =3D "dir;del;copy;mfp") t= hat 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 cu= rrent > > working file > > + system. > > + > > + If FileSystem is not NULL and Dir is not NULL, then this function ch= anges > > 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 director= y 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 t= he > > environment > > + variable is deleted. If the environment variable exists and the Valu= e is > not > > an empty > > + string, then the value of the environment variable is changed. If th= e > > environment > > + variable does not exist and the Value is an empty string, there is n= o > action. > > If the > > + environment variable does not exist and the Value is a non-empty str= ing, > > 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 environm= ent > > variable name. > > + @param[in] Value Points to the NULL-terminated environm= ent > > variable value. If the value is an > > + empty string then the environment vari= able is deleted. > > + @param[in] Volatile Indicates whether the variable is non-= volatile > > (FALSE) or volatile (TRUE). > > + > > + @retval EFI_SUCCESS The environment variable was successfu= lly > > 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 p= osition > > supplied. With > > + the exception of seeking to position 0xFFFFFFFFFFFFFFFF, only absolu= te > > positioning is > > + supported, and seeking past the end of the file is allowed (a subseq= uent > > 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 pos= ition > > will be set. > > + @param[in] Position Byte position from the start of the fi= le. > > + > > + @retval EFI_SUCCESS Data was written. > > + @retval EFI_UNSUPPORTED The seek request for nonzero is not va= lid > > 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 successfull= y. > > + @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 th= e > current > > file position. > > + The current file position is advanced the actual number of bytes wri= tten, > > which is > > + returned in BufferSize. Partial writes only occur when there has bee= n 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 writin= g. > > + @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 attempt= ing > > +// 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 protoco= l. > > +// > > +// Check EFI_SHELL_PROTOCOL MajorVersion and MinorVersion: > > +// if ((2 =3D=3D gEfiShellProtocol->MajorVersion) && > > +// (0 =3D=3D 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 =3D 2, > > + SHELL_MINOR_VERSION =3D 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.
> > + Copyright (c) 2016, Intel Corporation. All rights reserved.
> > + This program and the accompanying materials > > + are licensed and made available under the terms and conditions of th= e > BSD > > License > > + which accompanies this distribution. The full text of the license m= ay 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 > > +#include > > + > > +// {3C7200E9-005F-4EA4-87DE-A3DFAC8A27C3} > > +#define EFI_SHELL_DYNAMIC_COMMAND_PROTOCOL_GUID \ > > + { \ > > + 0x3c7200e9, 0x005f, 0x4ea4, { 0x87, 0xde, 0xa3, 0xdf, 0xac, 0x8a, 0x= 27, > 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. T= his > > + 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. Th= is > > + function is responsible for displaying help information for the asso= ciated > > + 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 b= e 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. > > + This program and the accompanying materials > > + are licensed and made available under the terms and conditions of th= e > BSD > > License > > + which accompanies this distribution. The full text of the license m= ay 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 > > + > > +#define EFI_SHELL_PARAMETERS_PROTOCOL_GUID \ > > + { \ > > + 0x752f3136, 0x4e16, 0x4fdc, { 0xa2, 0x2a, 0xe5, 0xf4, 0x68, 0x12, 0x= f4, > 0xca > > } \ > > + } > > + > > +typedef struct _EFI_SHELL_PARAMETERS_PROTOCOL { > > + /// > > + /// Points to an Argc-element array of points to NULL-terminated str= ings > > containing > > + /// the command-line parameters. The first entry in the array is alw= ays > 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. Thi= s may > be > > different > > + /// from the ConOutHandle in EFI_SYSTEM_TABLE. > > + /// > > + SHELL_FILE_HANDLE StdOut; > > + > > + /// > > + /// The file handle for the standard error output for this executabl= e. 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 =3D { 0x95a9a93e, 0xa86e, 0x492= 6, {0xaa, > > 0xef, 0x99, 0x18, 0xe7, 0x72, 0xd9, 0x87 }} > > > > + # > > + # Protocols defined in Shell2.0 > > + # > > + ## Include/Protocol/Shell.h > > + gEfiShellProtocolGuid =3D { 0x6302d008, 0x7f9b, 0x4f3= 0, {0x87, 0xac, > > 0x60, 0xc9, 0xfe, 0xf5, 0xda, 0x4e }} > > + > > + ## Include/Protocol/ShellParameters.h > > + gEfiShellParametersProtocolGuid =3D { 0x752f3136, 0x4e16, 0x4fd= c, {0xa2, > > 0x2a, 0xe5, 0xf4, 0x68, 0x12, 0xf4, 0xca }} > > + > > + # > > + # Protocols defined in Shell2.1 > > + # > > + ## Include/Protocol/ShellDynamicCommand.h > > + gEfiShellDynamicCommandProtocolGuid =3D { 0x3c7200e9, 0x005f, 0x4ea= 4, > > {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