From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga02.intel.com (mga02.intel.com [134.134.136.20]) (using TLSv1 with cipher CAMELLIA256-SHA (256/256 bits)) (No client certificate requested) by ml01.01.org (Postfix) with ESMTPS id 347661A1DFF for ; Mon, 17 Oct 2016 22:59:43 -0700 (PDT) Received: from fmsmga002.fm.intel.com ([10.253.24.26]) by orsmga101.jf.intel.com with ESMTP; 17 Oct 2016 22:59:42 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.31,508,1473145200"; d="scan'208";a="1071913805" Received: from orsmsx102.amr.corp.intel.com ([10.22.225.129]) by fmsmga002.fm.intel.com with ESMTP; 17 Oct 2016 22:59:43 -0700 Received: from orsmsx151.amr.corp.intel.com (10.22.226.38) by ORSMSX102.amr.corp.intel.com (10.22.225.129) with Microsoft SMTP Server (TLS) id 14.3.248.2; Mon, 17 Oct 2016 22:59:42 -0700 Received: from orsmsx113.amr.corp.intel.com ([169.254.9.161]) by ORSMSX151.amr.corp.intel.com ([10.22.226.38]) with mapi id 14.03.0248.002; Mon, 17 Oct 2016 22:59:41 -0700 From: "Kinney, Michael D" To: "Ni, Ruiyu" , "Carsey, Jaben" , "edk2-devel@lists.01.org" , "Kinney, Michael D" CC: "Yao, Jiewen" Thread-Topic: [edk2] [PATCH 2/5] MdePkg: Include Shell/ShellDynamicCommand/ShellParameters definitions Thread-Index: AQHSJf+eP88pUuIjwEi3A5vqhW8R7KCtaoAAgADHrID//4taAA== Date: Tue, 18 Oct 2016 05:59:41 +0000 Message-ID: References: <20161014094431.473584-1-ruiyu.ni@intel.com> <20161014094431.473584-3-ruiyu.ni@intel.com> <734D49CCEBEEF84792F5B80ED585239D58E3716C@SHSMSX104.ccr.corp.intel.com> In-Reply-To: <734D49CCEBEEF84792F5B80ED585239D58E3716C@SHSMSX104.ccr.corp.intel.com> Accept-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-ctpclassification: CTP_IC x-titus-metadata-40: eyJDYXRlZ29yeUxhYmVscyI6IiIsIk1ldGFkYXRhIjp7Im5zIjoiaHR0cDpcL1wvd3d3LnRpdHVzLmNvbVwvbnNcL0ludGVsMyIsImlkIjoiMDgxZmZjY2YtZTI0ZS00ODRkLWJhZjAtOWIyMjFmNzFjZGY3IiwicHJvcHMiOlt7Im4iOiJDVFBDbGFzc2lmaWNhdGlvbiIsInZhbHMiOlt7InZhbHVlIjoiQ1RQX0lDIn1dfV19LCJTdWJqZWN0TGFiZWxzIjpbXSwiVE1DVmVyc2lvbiI6IjE1LjkuNi42IiwiVHJ1c3RlZExhYmVsSGFzaCI6InVVNHI0WWdPa01aU3B0N2l1VEJIdndRZTRTY2pRaTZOK2MzdmRUQ2U5UTQ9In0= x-originating-ip: [10.22.254.138] 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:59:43 -0000 Content-Language: en-US Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable Use 'git mv' command. Mike > -----Original Message----- > From: Ni, Ruiyu > Sent: Tuesday, October 18, 2016 1:57 PM > To: Carsey, Jaben ; edk2-devel@lists.01.org > Cc: Kinney, Michael D ; Yao, Jiewen > > Subject: RE: [edk2] [PATCH 2/5] MdePkg: Include > Shell/ShellDynamicCommand/ShellParameters definitions >=20 > 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. >=20 > Thanks/Ray >=20 > > -----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 > > > > 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-bounces@lists.01.org] On Behalf O= f > > > 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 = including > > > 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 = 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 > > > + > > > +#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 =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. Va= lid 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 = 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 act= ive. > > > + @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 f= ile data is > > > + flushed to the device, and the file is closed. In all cases, the h= andle 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 spec= ified > > > attributes and > > > + returns the new file's handle. If the file already exists and is r= ead-only, > > > then > > > + EFI_INVALID_PARAMETER will be returned. > > > + > > > + If the file already existed, it is truncated and its attributes up= dated. If > the > > > file is > > > + created successfully, the FileHandle is the file's handle, else, t= he > > FileHandle > > > is NULL. > > > + > > > + 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 > > > + 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 diff= erent > > > attributes are > > > + described in EFI_FILE_PROTOCOL.Open(= ). > > > + @param[out] FileHandle On return, points to the created fil= e handle > > or > > > directory's handle. > > > + > > > + @retval EFI_SUCCESS The file was opened. FileHandle poi= nts 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 foun= d 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 fil= e. > > > + @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 ha= ndle 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 an= d 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 a= ll > > > changes made > > > + by the commands executed will be reflected in the current environm= ent. > > 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 execut= ing > > > 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=3Dy', w= here x is the > > > + environment variable name and y is t= he value. If > this > > > + is NULL, then the current shell envi= ronment is > used. > > > + @param[out] ErrorCode Points to the status code returned b= y the > > > command. > > > + > > > + @retval EFI_SUCCESS The command executed successfully. T= he > > > status code > > > + returned by the command is pointed t= o 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 all= owed. > > > +**/ > > > +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 th= e 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 s= et to 0 > > and > > > the FileInfo > > > + field is set to NULL. > > > + > > > + @param[in] FilePattern Points to a NULL-terminated shell fi= le 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 fil= es in the > > > directory > > > + or NULL if there are no files in the= directory. > > > + > > > + @retval EFI_SUCCESS File information was returned succes= sfully. > > > + @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-protecte= d. > > > + @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 structu= res. It has > > no > > > + impact on the files themselves. > > > + > > > + @param[in] FileList The file list to free. Type EFI_SHEL= L_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 direc= tory. If > > > the > > > + FileSystemMapping is not NULL, it returns the current directory > > associated > > > with the > > > + FileSystemMapping. In both cases, the returned name includes the f= ile > > > 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 i= s 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 c= omponent > > > names. > > > + @param[in] Language A pointer to the language specified = for the > > > device > > > + name, in the same format as describe= d 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 !=3DNULL Pointer to the device path that co= rresponds to > > the > > > + device mapping. The returned pointer= does not > need > > > + to be freed. > > > + @retval NULL There is no device path associated w= ith 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 fi= le 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 o= f the > > > specified > > > + environment variable. > > > + > > > + If Name is NULL than a list of all environment variable names is r= eturned. > > > Each a > > > + NULL terminated string with a double NULL terminating the list. > > > + > > > + @param[in] Name A pointer to the environment variabl= e name. > > If > > > + Name is NULL, then the function will= return all > > > + of the defined shell environment var= iables. In > > > + the case where multiple environment = variables > are > > > + being returned, each variable will b= e terminated > by > > > + a NULL, and the list will be termina= ted by a > double > > > + NULL. > > > + > > > + @return A pointer to the returned string. > > > + The returned pointer does not need t= o be freed > by the > > > caller. > > > + > > > + @retval NULL The environment variable doesn't exi= st 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 environme= nt > > > variables. Can be > > > + used instead of GetEnv(). > > > + > > > + This function returns the current value of the specified environme= nt > > > 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 variabl= e name. If > > > Name is NULL, > > > + then the function will return all of= the defined > shell > > > + environment variables. In the case w= here > multiple > > > environment > > > + variables are being returned, each v= ariable will > be > > > terminated > > > + by a NULL, and the list will be term= inated by a > double > > NULL. > > > + @param[out] Attributes If not NULL, a pointer to the return= ed > > > attributes bitmask for > > > + the environment variable. In the cas= e where Name > is > > NULL, > > > and > > > + multiple environment variables are b= eing > returned, > > > Attributes > > > + is undefined. > > > + > > > + @retval NULL The environment variable doesn't exi= st. > > > + @return The environment variable's value. Th= e 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 info= rmation. > > > +**/ > > > +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 repl= acing > > part, > > > or all, of > > > + the device path with the file-system mapping. If there are more th= an > > 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 f= ile path. > The > > path > > > + is callee-allocated and should be fr= eed 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 handl= e. For > > > directories, the > > > + current file position has no meaning outside of the file system dr= iver 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, respectivel= y. > > > + > > > + @param[in] GuidName A pointer to the localized name for the GUI= D > > > being queried. > > > + @param[out] Guid A pointer to the GUID structure to be fille= d 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, respectivel= y. > > > + > > > + @param[in] Guid A pointer to the GUID being queried. > > > + @param[out] GuidName A pointer to a pointer the localized to nam= e > > 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 comma= nd. > > The > > > help text > > > + can be internal to the shell or can be from a UEFI Shell manual pa= ge. > > > + > > > + If Sections is specified, then each section name listed will be co= mpared in > > a > > > casesensitive > > > + manner, to the section names described in Appendix B. If the secti= on > > > 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 t= ext > > > information > > > + available will be returned. > > > + > > > + @param[in] Command Points to the NULL-terminated UEFI S= hell > > > command name. > > > + @param[in] Sections Points to the NULL-terminated comma- > > > delimited > > > + section names to return. If NULL, th= en all > > > + sections will be returned. > > > + @param[out] HelpText On return, points to a callee-alloca= ted 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 pat= h > > > *DevicePath. If > > > + there is no exact match, then the mapping which most closely match= es > > > *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 a= nd > > > *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 p= ointer. > > > On > > > + exit, updates the pointer to point = to the > > > + portion of the device path after th= e mapping. > > > + > > > + @retval NULL No mapping was found. > > > + @retval !=3DNULL Pointer to NULL-terminated mapping= . The buffer > > > + is callee allocated and should be fr= eed 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 enable= d. > > > + @retval FALSE The page break output mode is disabl= ed. > > > +**/ > > > +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 She= ll. > > > +**/ > > > +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 a= nd > > > returns a file > > > + handle. > > > + If the file name begins with '>v', then the file handle which is r= eturned > > > 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 r= efers 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 r= efers 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 r= efers 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 r= efers 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. FileHa= ndle > > is > > > NULL. > > > + @retval EFI_NOT_FOUND The specified file could not be foun= d on > > the > > > device or the file > > > + system could not be found on the dev= ice. > 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. F= ileHandle is > NULL. > > > + @retval EFI_ACCESS_DENIED The service denied access to the fil= e. > > > 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 NU= LL. > > > +**/ > > > +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 li= nked > > list. > > > + > > > + @param[in] Path A pointer to the path string. > > > + @param[in] OpenMode Specifies the mode used to open eac= h file, > > > EFI_FILE_MODE_READ or > > > + EFI_FILE_MODE_WRITE. > > > + @param[in, out] FileList Points to the start of a list of fi= les 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 f= ile > > handle > > > to it. > > > + > > > + @param[in] DevicePath Points to the device path correspond= ing to > > the > > > device where the > > > + EFI_SIMPLE_FILE_SYSTEM_PROTOCOL is i= nstalled. > > > + @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 f= ile > > handle > > > to it. > > > + > > > + @param[in] DeviceHandle The handle of the device that contai= ns 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 B= uffer. If > > the > > > read goes > > > + beyond the end of the file, the read length is truncated to the en= d 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 by= tes. 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 contai= ns > > > 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. Thi= s 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, respectivel= y. > > > + > > > + @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 ali= as 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 successfull= y. > > > + @retval EFI_ACCESS_DENIED The alias is a built-in alias or alr= eady > > 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 lis= t 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 Returned= Data. > > > + @param[out] Volatile Upon return of a single command if T= RUE > > > 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 point= s to a ';' > > > + delimited list of alias (e.g. > > > + ReturnedData =3D "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 curren= t > > 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 syste= m is > > > changed then the > > > + %cwd% environment variable will be updated. > > > + > > > + @param[in] FileSystem A pointer to the file system's mappe= d name. > > If > > > NULL, then the current working > > > + directory is changed. > > > + @param[in] Dir Points to the NULL-terminated direct= ory 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 environme= nt > > > 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 Va= lue 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 s= tring, > > > then the > > > + environment variable is created and assigned the specified value. > > > + > > > + For a description of volatile and non-volatile environment variabl= es, see > > > UEFI Shell > > > + 2.0 specification section 3.6.1. > > > + > > > + @param[in] Name Points to the NULL-terminated enviro= nment > > > variable name. > > > + @param[in] Value Points to the NULL-terminated enviro= nment > > > variable value. If the value is an > > > + empty string then the environment va= riable is > deleted. > > > + @param[in] Volatile Indicates whether the variable is no= n-volatile > > > (FALSE) or volatile (TRUE). > > > + > > > + @retval EFI_SUCCESS The environment variable was success= fully > > > 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 t= he > > > 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-protecte= d. > > > + @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 abso= lute > > > positioning is > > > + supported, and seeking past the end of the file is allowed (a subs= equent > > > 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 p= osition > > > 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 i= s NULL and > > > Mapping points to a valid mapping, > > > + then the mapping will be deleted. > > > + @param[in] Mapping Points to the NULL-terminated mappin= g for > > the > > > device path. > > > + > > > + @retval EFI_SUCCESS Mapping created or deleted successfu= lly. > > > + @retval EFI_NO_MAPPING There is no handle that corresponds > > exactly > > > to DevicePath. See the > > > + boot service function LocateDevicePa= th(). > > > + @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 w= ritten, > > > which is > > > + returned in BufferSize. Partial writes only occur when there has b= een 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 writ= ing. > > > + @param[in, out] BufferSize On input, size of Buffer. > > > + @param[in] Buffer The buffer in which data to wri= te. > > > + > > > + @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 attem= pting > > > +// to use any new members. There is no need to check the version fo= r > > > +// members that existed in UEFI Shell Spec 2.0. > > > +// > > > +// Update below for any future UEFI Shell spec changes to this proto= col. > > > +// > > > +// 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 = 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 > > > +#include > > > + > > > +// {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 t= he > > > command. > > > + @param[in] Shell The instance of the shell protoc= ol 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 as= sociated > > > + command. > > > + > > > + @param[in] This The instance of the > > > EFI_SHELL_DYNAMIC_COMMAND_PROTOCOL. > > > + @param[in] Language The pointer to the language stri= ng 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.=
> > > + 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 > > > + > > > +#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 s= trings > > > containing > > > + /// the command-line parameters. The first entry in the array is a= lways > > 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. Th= is may be > > > different > > > + /// from the ConInHandle in EFI_SYSTEM_TABLE. > > > + /// > > > + SHELL_FILE_HANDLE StdIn; > > > + > > > + /// > > > + /// The file handle for the standard output for this executable. T= his may > > be > > > different > > > + /// from the ConOutHandle in EFI_SYSTEM_TABLE. > > > + /// > > > + SHELL_FILE_HANDLE StdOut; > > > + > > > + /// > > > + /// The file handle for the standard error output for this executa= ble. 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, 0x4= 926, {0xaa, > > > 0xef, 0x99, 0x18, 0xe7, 0x72, 0xd9, 0x87 }} > > > > > > + # > > > + # Protocols defined in Shell2.0 > > > + # > > > + ## Include/Protocol/Shell.h > > > + gEfiShellProtocolGuid =3D { 0x6302d008, 0x7f9b, 0x4= f30, {0x87, > 0xac, > > > 0x60, 0xc9, 0xfe, 0xf5, 0xda, 0x4e }} > > > + > > > + ## Include/Protocol/ShellParameters.h > > > + gEfiShellParametersProtocolGuid =3D { 0x752f3136, 0x4e16, 0x4= fdc, {0xa2, > > > 0x2a, 0xe5, 0xf4, 0x68, 0x12, 0xf4, 0xca }} > > > + > > > + # > > > + # Protocols defined in Shell2.1 > > > + # > > > + ## Include/Protocol/ShellDynamicCommand.h > > > + gEfiShellDynamicCommandProtocolGuid =3D { 0x3c7200e9, 0x005f, 0x4= ea4, > > > {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