From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga11.intel.com (mga11.intel.com [192.55.52.93]) (using TLSv1 with cipher CAMELLIA256-SHA (256/256 bits)) (No client certificate requested) by ml01.01.org (Postfix) with ESMTPS id 12E461A1DFC for ; Mon, 17 Oct 2016 11:02:33 -0700 (PDT) Received: from orsmga001.jf.intel.com ([10.7.209.18]) by fmsmga102.fm.intel.com with ESMTP; 17 Oct 2016 11:02:32 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.31,357,1473145200"; d="scan'208";a="1045943894" Received: from fmsmsx106.amr.corp.intel.com ([10.18.124.204]) by orsmga001.jf.intel.com with ESMTP; 17 Oct 2016 11:02:32 -0700 Received: from fmsmsx121.amr.corp.intel.com (10.18.125.36) by FMSMSX106.amr.corp.intel.com (10.18.124.204) with Microsoft SMTP Server (TLS) id 14.3.248.2; Mon, 17 Oct 2016 11:02:09 -0700 Received: from fmsmsx103.amr.corp.intel.com ([169.254.2.167]) by fmsmsx121.amr.corp.intel.com ([169.254.6.250]) with mapi id 14.03.0248.002; Mon, 17 Oct 2016 11:02:09 -0700 From: "Carsey, Jaben" To: "Ni, Ruiyu" , "edk2-devel@lists.01.org" CC: "Kinney, Michael D" , "Yao, Jiewen" , "Carsey, Jaben" Thread-Topic: [edk2] [PATCH 2/5] MdePkg: Include Shell/ShellDynamicCommand/ShellParameters definitions Thread-Index: AQHSJf/Dv91RXiLMiEa7jA4zchQNNKCs9OSQ Date: Mon, 17 Oct 2016 18:02:08 +0000 Message-ID: References: <20161014094431.473584-1-ruiyu.ni@intel.com> <20161014094431.473584-3-ruiyu.ni@intel.com> In-Reply-To: <20161014094431.473584-3-ruiyu.ni@intel.com> Accept-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-titus-metadata-40: eyJDYXRlZ29yeUxhYmVscyI6IiIsIk1ldGFkYXRhIjp7Im5zIjoiaHR0cDpcL1wvd3d3LnRpdHVzLmNvbVwvbnNcL0ludGVsMyIsImlkIjoiMTFjNzUzYjktZjU2NC00NGU0LTg3ODgtZDRmZjA5MTA4YjA1IiwicHJvcHMiOlt7Im4iOiJDVFBDbGFzc2lmaWNhdGlvbiIsInZhbHMiOlt7InZhbHVlIjoiQ1RQX0lDIn1dfV19LCJTdWJqZWN0TGFiZWxzIjpbXSwiVE1DVmVyc2lvbiI6IjE1LjkuNi42IiwiVHJ1c3RlZExhYmVsSGFzaCI6IjlpQVVha0YxU1lFTHVIRjhTTHdWQWJxWm1teDRKN1JhQ1U5NjhWSTJwWHc9In0= x-ctpclassification: CTP_IC x-originating-ip: [10.1.200.106] 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: Mon, 17 Oct 2016 18:02:33 -0000 Content-Language: en-US Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable 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. =20 -Jaben > -----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 >=20 > Copy Shell/ShellDynamicCommand/ShellParameters definitions from > ShellPkg to MdePkg. > Content of ShellBase.h is moved to Protocol/Shell.h. >=20 > The following patches will update ShellPkg to reference all protocol > definition to MdePkg. >=20 > 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 >=20 > 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 incl= uding > 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. Valid = 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 ope= ned > file or NULL if closed. > + EFI_FILE_INFO *Info; ///< Pointer to the FileInfo struct for = this file or > NULL. > +} EFI_SHELL_FILE_INFO; > + > +/** > + Returns whether any script files are currently being processed. > + > + @retval TRUE There is at least one script file active. > + @retval FALSE No script files are active now. > + > +**/ > +typedef > +BOOLEAN > +(EFIAPI *EFI_SHELL_BATCH_IS_ACTIVE) ( > + VOID > + ); > + > +/** > + Closes the file handle. > + > + This function closes a specified file handle. All 'dirty' cached file = data is > + flushed to the device, and the file is closed. In all cases, the handl= e 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 specifie= d > attributes and > + returns the new file's handle. If the file already exists and is read-= only, > then > + EFI_INVALID_PARAMETER will be returned. > + > + If the file already existed, it is truncated and its attributes update= d. If the > file is > + created successfully, the FileHandle is the file's handle, else, the F= ileHandle > is NULL. > + > + If the file name begins with >v, then the file handle which is returne= d > 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 differen= t > attributes are > + described in EFI_FILE_PROTOCOL.Open(). > + @param[out] FileHandle On return, points to the created file ha= ndle or > directory's handle. > + > + @retval EFI_SUCCESS The file was opened. FileHandle points = to the > new file's handle. > + @retval EFI_INVALID_PARAMETER One of the parameters has an invalid > value. > + @retval EFI_UNSUPPORTED The file path could not be opened. > + @retval EFI_NOT_FOUND The specified file could not be found on= the > device, or could not > + file the file system on the device. > + @retval EFI_NO_MEDIA The device has no medium. > + @retval EFI_MEDIA_CHANGED The device has a different medium in it > or the medium is no > + longer supported. > + @retval EFI_DEVICE_ERROR The device reported an error or can't ge= t > the file path according > + the DirName. > + @retval EFI_VOLUME_CORRUPTED The file system structures are > corrupted. > + @retval EFI_WRITE_PROTECTED An attempt was made to create a file, or > open a file for write > + when the media is write-protected. > + @retval EFI_ACCESS_DENIED The service denied access to the file. > + @retval EFI_OUT_OF_RESOURCES Not enough resources were available > to open the file. > + @retval EFI_VOLUME_FULL The volume is full. > +**/ > +typedef > +EFI_STATUS > +(EFIAPI *EFI_SHELL_CREATE_FILE)( > + IN CONST CHAR16 *FileName, > + IN UINT64 FileAttribs, > + OUT SHELL_FILE_HANDLE *FileHandle > + ); > + > +/** > + Deletes the file specified by the file handle. > + > + This function closes and deletes a file. In all cases, the file handle= is closed. > If the file > + cannot be deleted, the warning code EFI_WARN_DELETE_FAILURE is > returned, but the > + handle is still closed. > + > + @param[in] FileHandle The file handle to delete. > + > + @retval EFI_SUCCESS The file was closed and deleted and th= e 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 nam= e. > + > + @retval EFI_SUCCESS The file was deleted. > + @retval EFI_WARN_DELETE_FAILURE The handle was closed but the file > was not deleted. > +**/ > +typedef > +EFI_STATUS > +(EFIAPI *EFI_SHELL_DELETE_FILE_BY_NAME)( > + IN CONST CHAR16 *FileName > + ); > + > +/** > + Disables the page break output mode. > +**/ > +typedef > +VOID > +(EFIAPI *EFI_SHELL_DISABLE_PAGE_BREAK) ( > + VOID > + ); > + > +/** > + Enables the page break output mode. > +**/ > +typedef > +VOID > +(EFIAPI *EFI_SHELL_ENABLE_PAGE_BREAK) ( > + VOID > + ); > + > +/** > + Execute the command line. > + > + This function creates a nested instance of the shell and executes the > specified > + command (CommandLine) with the specified environment (Environment). > Upon return, > + the status code returned by the specified command is placed in > StatusCode. > + > + If Environment is NULL, then the current environment is used and all > changes made > + by the commands executed will be reflected in the current environment.= If > the > + Environment is non-NULL, then the changes made will be discarded. > + > + The CommandLine is executed from the current working directory on the > current > + device. > + > + @param[in] ParentImageHandle A handle of the image that is executing > the specified > + command line. > + @param[in] CommandLine Points to the NULL-terminated UCS-2 > encoded string > + containing the command line. If NULL the= n the command- > + line will be empty. > + @param[in] Environment Points to a NULL-terminated array of > environment > + variables with the format 'x=3Dy', where= x is the > + environment variable name and y is the v= alue. If this > + is NULL, then the current shell environm= ent is used. > + @param[out] ErrorCode Points to the status code returned by th= e > command. > + > + @retval EFI_SUCCESS The command executed successfully. The > status code > + returned by the command is pointed to by= StatusCode. > + @retval EFI_INVALID_PARAMETER The parameters are invalid. > + @retval EFI_OUT_OF_RESOURCES Out of resources. > + @retval EFI_UNSUPPORTED Nested shell invocations are not allowed= . > +**/ > +typedef > +EFI_STATUS > +(EFIAPI *EFI_SHELL_EXECUTE) ( > + IN EFI_HANDLE *ParentImageHandle, > + IN CHAR16 *CommandLine OPTIONAL, > + IN CHAR16 **Environment OPTIONAL, > + OUT EFI_STATUS *StatusCode OPTIONAL > + ); > + > +/** > + Find files that match a specified pattern. > + > + This function searches for all files and directories that match the sp= ecified > + FilePattern. The FilePattern can contain wild-card characters. The res= ulting > file > + information is placed in the file list FileList. > + > + The files in the file list are not opened. The OpenMode field is set t= o 0 and > the FileInfo > + field is set to NULL. > + > + @param[in] FilePattern Points to a NULL-terminated shell file p= ath, > including wildcards. > + @param[out] FileList On return, points to the start of a file= list > containing the names > + of all matching files or else points to = NULL if no matching > files > + were found. > + > + @retval EFI_SUCCESS Files found. > + @retval EFI_NOT_FOUND No files found. > + @retval EFI_NO_MEDIA The device has no media. > + @retval EFI_DEVICE_ERROR The device reported an error. > + @retval EFI_VOLUME_CORRUPTED The file system structures are > corrupted. > +**/ > +typedef > +EFI_STATUS > +(EFIAPI *EFI_SHELL_FIND_FILES)( > + IN CONST CHAR16 *FilePattern, > + OUT EFI_SHELL_FILE_INFO **FileList > + ); > + > +/** > + Find all files in a specified directory. > + > + @param[in] FileDirHandle Handle of the directory to search. > + @param[out] FileList On return, points to the list of files i= n the > directory > + or NULL if there are no files in the dir= ectory. > + > + @retval EFI_SUCCESS File information was returned successful= ly. > + @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 de= vice. > + > + @param[in] FileHandle The handle of the file to flush. > + > + @retval EFI_SUCCESS The data was flushed. > + @retval EFI_NO_MEDIA The device has no medium. > + @retval EFI_DEVICE_ERROR The device reported an error. > + @retval EFI_VOLUME_CORRUPTED The file system structures are > corrupted. > + @retval EFI_WRITE_PROTECTED The file or medium is write-protected. > + @retval EFI_ACCESS_DENIED The file was opened read-only. > + @retval EFI_VOLUME_FULL The volume is full. > +**/ > +typedef > +EFI_STATUS > +(EFIAPI *EFI_SHELL_FLUSH_FILE)( > + IN SHELL_FILE_HANDLE FileHandle > + ); > + > +/** > + Frees the file list. > + > + This function cleans up the file list and any related data structures.= It has no > + impact on the files themselves. > + > + @param[in] FileList The file list to free. Type EFI_SHELL_FI= LE_INFO is > + defined in OpenFileList(). > + > + @retval EFI_SUCCESS Free the file list successfully. > +**/ > +typedef > +EFI_STATUS > +(EFIAPI *EFI_SHELL_FREE_FILE_LIST) ( > + IN EFI_SHELL_FILE_INFO **FileList > + ); > + > +/** > + Returns the current directory on the specified device. > + > + If FileSystemMapping is NULL, it returns the current working directory= . If > the > + FileSystemMapping is not NULL, it returns the current directory associ= ated > with the > + FileSystemMapping. In both cases, the returned name includes the file > system > + mapping (i.e. fs0:\current-dir). > + > + Note that the current directory string should exclude the tailing back= slash > character. > + > + @param[in] FileSystemMapping A pointer to the file system mapping. If > NULL, > + then the current working directory is re= turned. > + > + @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 t= he > 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 compo= nent > names. > + @param[in] Language A pointer to the language specified for = the > device > + name, in the same format as described in= the UEFI > + specification, Appendix M. > + @param[out] BestDeviceName On return, points to the callee-allocate= d > NULL- > + terminated name of the device. If no dev= ice 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 corres= ponds to the > + device mapping. The returned pointer doe= s not need > + to be freed. > + @retval NULL There is no device path associated with = the > + specified mapping. > +**/ > +typedef > +CONST EFI_DEVICE_PATH_PROTOCOL * > +(EFIAPI *EFI_SHELL_GET_DEVICE_PATH_FROM_MAP) ( > + IN CONST CHAR16 *Mapping > + ); > + > +/** > + Converts a file system style name to a device path. > + > + This function converts a file system style name to a device path, by > replacing any > + mapping references to the associated device path. > + > + @param[in] Path The pointer to the path. > + > + @return The pointer of the file path. The file p= ath is callee > + allocated and should be freed by the cal= ler. > +**/ > +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 th= e > specified > + environment variable. > + > + If Name is NULL than a list of all environment variable names is retur= ned. > Each a > + NULL terminated string with a double NULL terminating the list. > + > + @param[in] Name A pointer to the environment variable na= me. If > + Name is NULL, then the function will ret= urn all > + of the defined shell environment variabl= es. In > + the case where multiple environment vari= ables are > + being returned, each variable will be te= rminated by > + a NULL, and the list will be terminated = by a double > + NULL. > + > + @return A pointer to the returned string. > + The returned pointer does not need to be= freed by the > caller. > + > + @retval NULL The environment variable doesn't exist o= r 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 kno= wn > + variables will be returned. > + > + @param[in] Name A pointer to the environment variable na= me. If > Name is NULL, > + then the function will return all of the= defined shell > + environment variables. In the case where= multiple > environment > + variables are being returned, each varia= ble will be > terminated > + by a NULL, and the list will be terminat= ed by a double NULL. > + @param[out] Attributes If not NULL, a pointer to the returned > attributes bitmask for > + the environment variable. In the case wh= ere Name is NULL, > and > + multiple environment variables are being= returned, > Attributes > + is undefined. > + > + @retval NULL The environment variable doesn't exist. > + @return The environment variable's value. The re= turned > 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 informat= ion. > +**/ > +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 replacin= g part, > or all, of > + the device path with the file-system mapping. If there are more than o= ne > application > + file system mappings, the one that most closely matches Path will be u= sed. > + > + @param[in] Path The pointer to the device path. > + > + @return The pointer of the NULL-terminated file = path. The path > + is callee-allocated and should be freed = by the caller. > +**/ > +typedef > +CHAR16 * > +(EFIAPI *EFI_SHELL_GET_FILE_PATH_FROM_DEVICE_PATH) ( > + IN CONST EFI_DEVICE_PATH_PROTOCOL *Path > + ); > + > +/** > + Gets a file's current position. > + > + This function returns the current file position for the file handle. F= or > directories, the > + current file position has no meaning outside of the file system driver= and > as such, the > + operation is not supported. > + > + @param[in] FileHandle The file handle on which to get the curr= ent > 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 t= he > + 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 t= he > + 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 fo= r > 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 compar= ed in a > casesensitive > + manner, to the section names described in Appendix B. If the section > exists, > + it will be appended to the returned help text. If the section does not= exist, > no > + information will be returned. If Sections is NULL, then all help text > information > + available will be returned. > + > + @param[in] Command Points to the NULL-terminated UEFI Shell > command name. > + @param[in] Sections Points to the NULL-terminated comma- > delimited > + section names to return. If NULL, then a= ll > + sections will be returned. > + @param[out] HelpText On return, points to a callee-allocated = buffer > + containing all specified help text. > + > + @retval EFI_SUCCESS The help text was returned. > + @retval EFI_OUT_OF_RESOURCES The necessary buffer could not be > allocated to hold the > + returned help text. > + @retval EFI_INVALID_PARAMETER HelpText is NULL. > + @retval EFI_NOT_FOUND There is no help text available for > Command. > +**/ > +typedef > +EFI_STATUS > +(EFIAPI *EFI_SHELL_GET_HELP_TEXT) ( > + IN CONST CHAR16 *Command, > + IN CONST CHAR16 *Sections OPTIONAL, > + OUT CHAR16 **HelpText > + ); > + > +/** > + Gets the mapping(s) that most closely matches the device path. > + > + This function gets the mapping which corresponds to the device path > *DevicePath. If > + there is no exact match, then the mapping which most closely matches > *DevicePath > + is returned, and *DevicePath is updated to point to the remaining port= ion > 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 t= he > + NULL-terminated string. > + > + @param[in, out] DevicePath On entry, points to a device path point= er. > On > + exit, updates the pointer to point to t= he > + portion of the device path after the ma= pping. > + > + @retval NULL No mapping was found. > + @retval !=3DNULL Pointer to NULL-terminated mapping. Th= e buffer > + is callee allocated and should be freed = by the caller. > +**/ > +typedef > +CONST CHAR16 * > +(EFIAPI *EFI_SHELL_GET_MAP_FROM_DEVICE_PATH) ( > + IN OUT EFI_DEVICE_PATH_PROTOCOL **DevicePath > + ); > + > +/** > + Gets the enable status of the page break output mode. > + > + User can use this function to determine current page break mode. > + > + @retval TRUE The page break output mode is enabled. > + @retval FALSE The page break output mode is disabled. > +**/ > +typedef > +BOOLEAN > +(EFIAPI *EFI_SHELL_GET_PAGE_BREAK) ( > + VOID > + ); > + > +/** > + Judges whether the active shell is the root shell. > + > + This function makes the user to know that whether the active Shell is = the > root shell. > + > + @retval TRUE The active Shell is the root Shell. > + @retval FALSE The active Shell is NOT the root Shell. > +**/ > +typedef > +BOOLEAN > +(EFIAPI *EFI_SHELL_IS_ROOT_SHELL) ( > +VOID > +); > + > +/** > + Opens a file or a directory by file name. > + > + This function opens the specified file in the specified OpenMode and > returns a file > + handle. > + If the file name begins with '>v', then the file handle which is retur= ned > 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 refer= s 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 refer= s 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 refer= s 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 refer= s 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, els= e, the > + FileHandle is NULL. > + > + @param[in] FileName Points to the NULL-terminated UCS-2 enco= ded > file name. > + @param[out] FileHandle On return, points to the file handle. > + @param[in] OpenMode File open mode. Either > EFI_FILE_MODE_READ or > + EFI_FILE_MODE_WRITE from section 12.4 of= the UEFI > + Specification. > + @retval EFI_SUCCESS The file was opened. FileHandle has the > opened file's handle. > + @retval EFI_INVALID_PARAMETER One of the parameters has an invalid > value. FileHandle is NULL. > + @retval EFI_UNSUPPORTED Could not open the file path. FileHandle= is > NULL. > + @retval EFI_NOT_FOUND The specified file could not be found on= the > device or the file > + system could not be found on the device.= FileHandle is > NULL. > + @retval EFI_NO_MEDIA The device has no medium. FileHandle is > NULL. > + @retval EFI_MEDIA_CHANGED The device has a different medium in it > or the medium is no > + longer supported. FileHandle is NULL. > + @retval EFI_DEVICE_ERROR The device reported an error or can't ge= t > 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. FileH= andle is NULL. > + @retval EFI_ACCESS_DENIED The service denied access to the file. > FileHandle is NULL. > + @retval EFI_OUT_OF_RESOURCES Not enough resources were available > to open the file. FileHandle > + is NULL. > + @retval EFI_VOLUME_FULL The volume is full. FileHandle is NULL. > +**/ > +typedef > +EFI_STATUS > +(EFIAPI *EFI_SHELL_OPEN_FILE_BY_NAME) ( > + IN CONST CHAR16 *FileName, > + OUT SHELL_FILE_HANDLE *FileHandle, > + IN UINT64 OpenMode > + ); > + > +/** > + Opens the files that match the path specified. > + > + This function opens all of the files specified by Path. Wildcards are > processed > + according to the rules specified in UEFI Shell 2.0 spec section 3.7.1.= Each > + matching file has an EFI_SHELL_FILE_INFO structure created in a linked= list. > + > + @param[in] Path A pointer to the path string. > + @param[in] OpenMode Specifies the mode used to open each fi= le, > EFI_FILE_MODE_READ or > + EFI_FILE_MODE_WRITE. > + @param[in, out] FileList Points to the start of a list of files = opened. > + > + @retval EFI_SUCCESS Create the file list successfully. > + @return Can't create the file list. > +**/ > +typedef > +EFI_STATUS > +(EFIAPI *EFI_SHELL_OPEN_FILE_LIST) ( > + IN CHAR16 *Path, > + IN UINT64 OpenMode, > + IN OUT EFI_SHELL_FILE_INFO **FileList > + ); > + > +/** > + Opens the root directory of a device. > + > + This function opens the root directory of a device and returns a file = handle > to it. > + > + @param[in] DevicePath Points to the device path corresponding = to the > device where the > + EFI_SIMPLE_FILE_SYSTEM_PROTOCOL is insta= lled. > + @param[out] FileHandle On exit, points to the file handle > corresponding to the root directory on the > + device. > + > + @retval EFI_SUCCESS Root opened successfully. > + @retval EFI_NOT_FOUND EFI_SIMPLE_FILE_SYSTEM could not be > found or the root directory > + could not be opened. > + @retval EFI_VOLUME_CORRUPTED The data structures in the volume > were corrupted. > + @retval EFI_DEVICE_ERROR The device had an error. > +**/ > +typedef > +EFI_STATUS > +(EFIAPI *EFI_SHELL_OPEN_ROOT)( > + IN EFI_DEVICE_PATH_PROTOCOL *DevicePath, > + OUT SHELL_FILE_HANDLE *FileHandle > + ); > + > +/** > + Opens the root directory of a device on a handle. > + > + This function opens the root directory of a device and returns a file = handle > to it. > + > + @param[in] DeviceHandle The handle of the device that contains t= he > 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 num= ber > of bytes > + from the file at the file's current position and returns them in Buffe= r. If the > read goes > + beyond the end of the file, the read length is truncated to the end of= the > file. The file's > + current position is increased by the number of bytes returned. > + If FileHandle is a directory, then an error is returned. > + > + @param[in] FileHandle The opened file handle for read. > + @param[in] ReadSize On input, the size of Buffer, in bytes.= On > output, the amount of data read. > + @param[in, out] Buffer The buffer in which data is read. > + > + @retval EFI_SUCCESS Data was read. > + @retval EFI_NO_MEDIA The device has no media. > + @retval EFI_DEVICE_ERROR The device reported an error. > + @retval EFI_VOLUME_CORRUPTED The file system structures are > corrupted. > + @retval EFI_BUFFER_TO_SMALL Buffer is too small. ReadSize contains > required size. > +**/ > +typedef > +EFI_STATUS > +(EFIAPI *EFI_SHELL_READ_FILE) ( > + IN SHELL_FILE_HANDLE FileHandle, > + IN OUT UINTN *ReadSize, > + IN OUT VOID *Buffer > + ); > + > +/** > + Register a GUID and a localized human readable name for it. > + > + If Guid is not assigned a name, then assign GuidName to Guid. This li= st 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 t= he > + EfiShellProtocol are greater than or equal to 2 and 1, respectively. > + > + @param[in] Guid A pointer to the GUID being registered. > + @param[in] GuidName A pointer to the localized name for the GUID > being registered. > + > + @retval EFI_SUCCESS The operation was successful. > + @retval EFI_INVALID_PARAMETER Guid was NULL. > + @retval EFI_INVALID_PARAMETER GuidName was NULL. > + @retval EFI_ACCESS_DENIED Guid already is assigned a name. > +**/ > +typedef > +EFI_STATUS > +(EFIAPI *EFI_SHELL_REGISTER_GUID_NAME)( > + IN CONST EFI_GUID *Guid, > + IN CONST CHAR16 *GuidName > + ); > + > +/** > + Deletes the duplicate file names files in the given file list. > + > + @param[in] FileList A pointer to the first entry in the file= list. > + > + @retval EFI_SUCCESS Always success. > +**/ > +typedef > +EFI_STATUS > +(EFIAPI *EFI_SHELL_REMOVE_DUP_IN_FILE_LIST) ( > + IN EFI_SHELL_FILE_INFO **FileList > + ); > + > +/** > + Changes a shell command alias. > + > + This function creates an alias for a shell command. > + > + @param[in] Command Points to the NULL-terminated shell > command or existing alias. > + @param[in] Alias Points to the NULL-terminated alias for = the shell > command. If this is NULL, and > + Command refers to an alias, that alias w= ill be deleted. > + @param[in] Replace If TRUE and the alias already exists, th= en 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 stor= ed in a > volatile fashion. if FALSE the > + Alias being set will be stored in a non-= volatile fashion. > + > + @retval EFI_SUCCESS Alias created or deleted successfully. > + @retval EFI_ACCESS_DENIED The alias is a built-in alias or already= existed > and Replace was set to > + FALSE. > +**/ > +typedef > +EFI_STATUS > +(EFIAPI *EFI_SHELL_SET_ALIAS)( > + IN CONST CHAR16 *Command, > + IN CONST CHAR16 *Alias, > + IN BOOLEAN Replace, > + IN BOOLEAN Volatile > + ); > + > +/** > + This function returns the command associated with a alias or a list of= all > + alias'. > + > + @param[in] Alias Points to the NULL-terminated shell alia= s. > + If this parameter is NULL, then all > + aliases will be returned in ReturnedData= . > + @param[out] Volatile Upon return of a single command if TRUE > indicates > + this is stored in a volatile fashion. F= ALSE otherwise. > + @return If Alias is not NULL, it will return a p= ointer to > + the NULL-terminated command for that ali= as. > + If Alias is NULL, ReturnedData points to= a ';' > + delimited list of alias (e.g. > + ReturnedData =3D "dir;del;copy;mfp") tha= t 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 fi= le > 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 fi= le > system and > + the current directory on that file system are changed. > + > + If FileSystem is not NULL, and Dir is NULL, then this changes the curr= ent > working file > + system. > + > + If FileSystem is not NULL and Dir is not NULL, then this function chan= ges > 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 na= me. If > NULL, then the current working > + directory is changed. > + @param[in] Dir Points to the NULL-terminated directory = on the > device specified by FileSystem. > + > + @retval NULL Current directory does not exist. > + @return The current directory. > +**/ > +typedef > +EFI_STATUS > +(EFIAPI *EFI_SHELL_SET_CUR_DIR) ( > + IN CONST CHAR16 *FileSystem OPTIONAL, > + IN CONST CHAR16 *Dir > + ); > + > +/** > + Sets the environment variable. > + > + This function changes the current value of the specified environment > variable. If the > + environment variable exists and the Value is an empty string, then the > environment > + variable is deleted. If the environment variable exists and the Value = is not > an empty > + string, then the value of the environment variable is changed. If the > environment > + variable does not exist and the Value is an empty string, there is no = action. > If the > + environment variable does not exist and the Value is a non-empty strin= g, > 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 environmen= t > variable name. > + @param[in] Value Points to the NULL-terminated environmen= t > variable value. If the value is an > + empty string then the environment variab= le is deleted. > + @param[in] Volatile Indicates whether the variable is non-vo= latile > (FALSE) or volatile (TRUE). > + > + @retval EFI_SUCCESS The environment variable was successfull= y > 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 pos= ition > supplied. With > + the exception of seeking to position 0xFFFFFFFFFFFFFFFF, only absolute > positioning is > + supported, and seeking past the end of the file is allowed (a subseque= nt > write would > + grow the file). Seeking to position 0xFFFFFFFFFFFFFFFF causes the curr= ent > position > + to be set to the end of the file. > + > + @param[in] FileHandle The file handle on which requested posit= ion > 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 vali= d > 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 NU= LL and > Mapping points to a valid mapping, > + then the mapping will be deleted. > + @param[in] Mapping Points to the NULL-terminated mapping fo= r the > device path. > + > + @retval EFI_SUCCESS Mapping created or deleted successfully. > + @retval EFI_NO_MAPPING There is no handle that corresponds exac= tly > to DevicePath. See the > + boot service function LocateDevicePath()= . > + @retval EFI_ACCESS_DENIED The mapping is a built-in alias. > +**/ > +typedef > +EFI_STATUS > +(EFIAPI *EFI_SHELL_SET_MAP)( > + IN CONST EFI_DEVICE_PATH_PROTOCOL *DevicePath, > + IN CONST CHAR16 *Mapping > + ); > + > +/** > + Writes data to the file. > + > + This function writes the specified number of bytes to the file at the = current > file position. > + The current file position is advanced the actual number of bytes writt= en, > which is > + returned in BufferSize. Partial writes only occur when there has been = a > data error > + during the write attempt (such as "volume space full"). The file > automatically grows to > + hold the data, if required. > + > + Direct writes to opened directories are not supported. > + > + @param[in] FileHandle The opened file handle for writing. > + @param[in, out] BufferSize On input, size of Buffer. > + @param[in] Buffer The buffer in which data to write. > + > + @retval EFI_SUCCESS Data was written. > + @retval EFI_UNSUPPORTED Writes to open directory are not > supported. > + @retval EFI_NO_MEDIA The device has no media. > + @retval EFI_DEVICE_ERROR The device reported an error. > + @retval EFI_VOLUME_CORRUPTED The file system structures are > corrupted. > + @retval EFI_WRITE_PROTECTED The device is write-protected. > + @retval EFI_ACCESS_DENIED The file was open for read only. > + @retval EFI_VOLUME_FULL The volume is full. > +**/ > +typedef > +EFI_STATUS > +(EFIAPI *EFI_SHELL_WRITE_FILE)( > + IN SHELL_FILE_HANDLE FileHandle, > + IN OUT UINTN *BufferSize, > + IN VOID *Buffer > + ); > + > +// > +// EFI_SHELL_PROTOCOL has been updated since UEFI Shell Spec 2.0 > +// Usage of this protocol will require version checking before attemptin= g > +// to use any new members. There is no need to check the version for > +// members that existed in UEFI Shell Spec 2.0. > +// > +// Update below for any future UEFI Shell spec changes to this protocol. > +// > +// Check EFI_SHELL_PROTOCOL MajorVersion and MinorVersion: > +// if ((2 =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. Thi= s > + 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 u= sed 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 associ= ated > + command. > + > + @param[in] This The instance of the > EFI_SHELL_DYNAMIC_COMMAND_PROTOCOL. > + @param[in] Language The pointer to the language string t= o 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 strin= gs > containing > + /// the command-line parameters. The first entry in the array is alway= s 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 m= ay be > different > + /// from the ConInHandle in EFI_SYSTEM_TABLE. > + /// > + SHELL_FILE_HANDLE StdIn; > + > + /// > + /// The file handle for the standard output for this executable. This = may be > different > + /// from the ConOutHandle in EFI_SYSTEM_TABLE. > + /// > + SHELL_FILE_HANDLE StdOut; > + > + /// > + /// The file handle for the standard error output for this executable.= This > may be > + /// different from the StdErrHandle in EFI_SYSTEM_TABLE. > + /// > + SHELL_FILE_HANDLE StdErr; > +} EFI_SHELL_PARAMETERS_PROTOCOL; > + > +extern EFI_GUID gEfiShellParametersProtocolGuid; > + > +#endif > diff --git a/MdePkg/MdePkg.dec b/MdePkg/MdePkg.dec > index f1e5151..3e08bed 100644 > --- a/MdePkg/MdePkg.dec > +++ b/MdePkg/MdePkg.dec > @@ -1645,6 +1645,21 @@ [Protocols] > ## Include/Protocol/EraseBlock.h > gEfiEraseBlockProtocolGuid =3D { 0x95a9a93e, 0xa86e, 0x4926,= {0xaa, > 0xef, 0x99, 0x18, 0xe7, 0x72, 0xd9, 0x87 }} >=20 > + # > + # Protocols defined in Shell2.0 > + # > + ## Include/Protocol/Shell.h > + gEfiShellProtocolGuid =3D { 0x6302d008, 0x7f9b, 0x4f30,= {0x87, 0xac, > 0x60, 0xc9, 0xfe, 0xf5, 0xda, 0x4e }} > + > + ## Include/Protocol/ShellParameters.h > + gEfiShellParametersProtocolGuid =3D { 0x752f3136, 0x4e16, 0x4fdc,= {0xa2, > 0x2a, 0xe5, 0xf4, 0x68, 0x12, 0xf4, 0xca }} > + > + # > + # Protocols defined in Shell2.1 > + # > + ## Include/Protocol/ShellDynamicCommand.h > + gEfiShellDynamicCommandProtocolGuid =3D { 0x3c7200e9, 0x005f, 0x4ea4, > {0x87, 0xde, 0xa3, 0xdf, 0xac, 0x8a, 0x27, 0xc3 }} > + > # > # [Error.gEfiMdePkgTokenSpaceGuid] > # 0x80000001 | Invalid value provided. > -- > 2.9.0.windows.1 >=20 > _______________________________________________ > edk2-devel mailing list > edk2-devel@lists.01.org > https://lists.01.org/mailman/listinfo/edk2-devel