[edk2-devel] [PATCH] MdeModulePkg: Add definitions for NVM Express Passthru PPI

Wu, Hao A hao.a.wu at intel.com
Tue Jun 18 12:33:34 UTC 2019


> -----Original Message-----
> From: Chu, Maggie
> Sent: Monday, June 17, 2019 10:11 AM
> To: devel at edk2.groups.io
> Cc: Wu, Hao A; Wang, Jian J; Ni, Ray; Zeng, Star
> Subject: [PATCH] MdeModulePkg: Add definitions for NVM Express Passthru
> PPI
> 
> https://bugzilla.tianocore.org/show_bug.cgi?id=1879
> This commit will add the definitions of Nvm Express PassThru PPI.
> This PPI will provide services that allow NVM commands to be sent
> to NVM Express devices during PEI phase.
> 
> More specifically, the PPI will provide services to:
> 
> * Sends an NVM Express Command Packet to an NVM Express controller
>   or namespace (by service 'PassThru');
> * Get the list of the attached namespaces on a controller
>   (by services 'GetNextNameSpace');
> * Get the identification information (DevicePath) of the underlying
>   NVM Express host controller (by service 'GetDevicePath').
> 
> Signed-off-by: Maggie Chu <maggie.chu at intel.com>
> Cc: Hao A Wu <hao.a.wu at intel.com>
> Cc: Jian J Wang <jian.j.wang at intel.com>
> Cc: Ray Ni <ray.ni at intel.com>
> Cc: Star Zeng <star.zeng at intel.com>
> ---
>  MdeModulePkg/Include/Ppi/NvmExpressPassThru.h | 156
> ++++++++++++++++++++++++++
>  MdeModulePkg/MdeModulePkg.dec                 |   3 +
>  2 files changed, 159 insertions(+)
>  create mode 100644 MdeModulePkg/Include/Ppi/NvmExpressPassThru.h
> 
> diff --git a/MdeModulePkg/Include/Ppi/NvmExpressPassThru.h
> b/MdeModulePkg/Include/Ppi/NvmExpressPassThru.h
> new file mode 100644
> index 0000000000..cb5b3b3b18
> --- /dev/null
> +++ b/MdeModulePkg/Include/Ppi/NvmExpressPassThru.h
> @@ -0,0 +1,156 @@
> +/** @file
> +
> +  Copyright (c) 2019, Intel Corporation. All rights reserved.<BR>
> +  SPDX-License-Identifier: BSD-2-Clause-Patent
> +
> +**/
> +
> +#ifndef _EDKII_NVME_PASS_THRU_PPI_H_
> +#define _EDKII_NVME_PASS_THRU_PPI_H_
> +
> +#include <Protocol/DevicePath.h>
> +#include <Protocol/NvmExpressPassthru.h>
> +
> +///
> +/// Global ID for the EDKII_PEI_NVM_EXPRESS_PASS_THRU_PPI.
> +///
> +#define EDKII_PEI_NVM_EXPRESS_PASS_THRU_PPI_GUID \
> +  { \
> +    0x6af31b2c, 0x3be, 0x46c1, { 0xb1, 0x2d, 0xea, 0x4a, 0x36, 0xdf, 0xa7,
> 0x4c } \
> +  }
> +
> +//
> +// Forward declaration for the EDKII_PEI_NVM_EXPRESS_PASS_THRU_PPI.
> +//
> +typedef struct _EDKII_PEI_NVM_EXPRESS_PASS_THRU_PPI
> EDKII_PEI_NVM_EXPRESS_PASS_THRU_PPI;
> +
> +//
> +// Revision The revision to which the Nvme Pass Thru PPI interface adheres.
> +//          All future revisions must be backwards compatible.
> +//          If a future version is not back wards compatible it is not the same
> GUID.
> +//
> +#define EDKII_PEI_NVM_EXPRESS_PASS_THRU_PPI_REVISION  0x00010000
> +
> +/**
> +  Gets the device path information of the underlying NVM Express host
> controller.
> +
> +  @param[in]  This                 The PPI instance pointer.
> +  @param[out] DevicePathLength     The length of the device path in bytes
> specified
> +                                   by DevicePath.
> +  @param[out] DevicePath           The device path of the underlying NVM
> Express
> +                                   host controller.
> +                                   This field re-uses EFI Device Path Protocol as
> +                                   defined by Section 10.2 EFI Device Path Protocol
> +                                   of UEFI 2.7 Specification.
> +
> +  @retval EFI_SUCCESS              The operation succeeds.
> +  @retval EFI_INVALID_PARAMETER    DevicePathLength or DevicePath is
> NULL.
> +  @retval EFI_OUT_OF_RESOURCES     The operation fails due to lack of
> resources.
> +
> +**/
> +typedef
> +EFI_STATUS
> +(EFIAPI *EDKII_PEI_NVME_PASS_THRU_GET_DEVICE_PATH) (
> +  IN  EDKII_PEI_NVM_EXPRESS_PASS_THRU_PPI   *This,
> +  OUT UINTN                                 *DevicePathLength,
> +  OUT EFI_DEVICE_PATH_PROTOCOL              **DevicePath
> +  );
> +
> +/**
> +  Used to retrieve the next namespace ID for this NVM Express controller.
> +
> +  If on input the value pointed to by NamespaceId is 0xFFFFFFFF, then the
> first
> +  valid namespace ID defined on the NVM Express controller is returned in
> the
> +  location pointed to by NamespaceId and a status of EFI_SUCCESS is
> returned.
> +
> +  If on input the value pointed to by NamespaceId is an invalid namespace
> ID
> +  other than 0xFFFFFFFF, then EFI_INVALID_PARAMETER is returned.
> +
> +  If on input the value pointed to by NamespaceId is a valid namespace ID,
> then
> +  the next valid namespace ID on the NVM Express controller is returned in
> the
> +  location pointed to by NamespaceId, and EFI_SUCCESS is returned.
> +
> +  If the value pointed to by NamespaceId is the namespace ID of the last
> +  namespace on the NVM Express controller, then EFI_NOT_FOUND is
> returned.
> +
> +  @param[in]     This              The PPI instance pointer.
> +  @param[in,out] NamespaceId       On input, a pointer to a legal
> NamespaceId
> +                                   for an NVM Express namespace present on the
> +                                   NVM Express controller. On output, a pointer
> +                                   to the next NamespaceId of an NVM Express
> +                                   namespace on an NVM Express controller. An
> +                                   input value of 0xFFFFFFFF retrieves the
> +                                   first NamespaceId for an NVM Express
> +                                   namespace present on an NVM Express
> +                                   controller.
> +
> +  @retval EFI_SUCCESS            The Namespace ID of the next Namespace was
> +                                 returned.
> +  @retval EFI_NOT_FOUND          There are no more namespaces defined on
> this
> +                                 controller.
> +  @retval EFI_INVALID_PARAMETER  NamespaceId is an invalid value other
> than
> +                                 0xFFFFFFFF.
> +
> +**/
> +typedef
> +EFI_STATUS
> +(EFIAPI *EDKII_PEI_NVME_PASS_THRU_GET_NEXT_NAMESPACE)(
> +  IN     EDKII_PEI_NVM_EXPRESS_PASS_THRU_PPI   *This,
> +  IN OUT UINT32                                *NamespaceId
> +  );
> +
> +
> +/**
> +  Sends an NVM Express Command Packet to an NVM Express controller or
> namespace. This function only
> +  supports blocking execution of the command.
> +
> +  @param[in] This                  The PPI instance pointer.
> +  @param[in] NamespaceId           Is a 32 bit Namespace ID to which the Nvm
> Express command packet will
> +                                   be sent.
> +                                   A Value of 0 denotes the NVM Express controller, a Value
> of all 0FFh in
> +                                   the namespace ID specifies that the command packet
> should be sent to all
> +                                   valid namespaces.
> +  @param[in,out] Packet            A pointer to the EDKII PEI NVM Express
> PassThru Command Packet to send
> +                                   to the NVMe namespace specified by NamespaceId.
> +
> +  @retval EFI_SUCCESS              The EDKII PEI NVM Express Command Packet
> was sent by the host.
> +                                   TransferLength bytes were transferred to, or from
> DataBuffer.
> +  @retval EFI_NOT_READY            The EDKII PEI NVM Express Command
> Packet could not be sent because
> +                                   the controller is not ready. The caller may retry again later.
> +  @retval EFI_DEVICE_ERROR         A device error occurred while attempting
> to send the EDKII PEI NVM
> +                                   Express Command Packet.
> +  @retval EFI_INVALID_PARAMETER    Namespace, or the contents of
> EDKII_PEI_NVM_EXPRESS_PASS_THRU_COMMAND_PACKET
> +                                   are invalid.
> +                                   The EDKII PEI NVM Express Command Packet was not sent,
> so no
> +                                   additional status information is available.
> +  @retval EFI_UNSUPPORTED          The command described by the EDKII PEI
> NVM Express Command Packet
> +                                   is not supported by the host adapter.
> +                                   The EDKII PEI NVM Express Command Packet was not sent,
> so no
> +                                   additional status information is available.
> +  @retval EFI_TIMEOUT              A timeout occurred while waiting for the
> EDKII PEI NVM Express Command
> +                                   Packet to execute.
> +
> +**/
> +typedef
> +EFI_STATUS
> +(EFIAPI *EDKII_PEI_NVME_PASS_THRU_PASSTHRU) (
> +  IN     EDKII_PEI_NVM_EXPRESS_PASS_THRU_PPI               *This,
> +  IN     UINT32                                            NamespaceId,
> +  IN OUT EFI_NVM_EXPRESS_PASS_THRU_COMMAND_PACKET          *Packet
> +  );
> +
> +//
> +// This PPI contains a set of services to send commands
> +// to a mass storage device.
> +//
> +struct _EDKII_PEI_NVM_EXPRESS_PASS_THRU_PPI {
> +  UINT64                                           Revision;
> +  EFI_NVM_EXPRESS_PASS_THRU_MODE                   *Mode;
> +  EDKII_PEI_NVME_PASS_THRU_GET_DEVICE_PATH         GetDevicePath;
> +  EDKII_PEI_NVME_PASS_THRU_GET_NEXT_NAMESPACE
> GetNextNameSpace;
> +  EDKII_PEI_NVME_PASS_THRU_PASSTHRU                PassThru;
> +};
> +
> +extern EFI_GUID gEdkiiPeiNvmExpressPassThruPpiGuid;
> +
> +#endif
> diff --git a/MdeModulePkg/MdeModulePkg.dec
> b/MdeModulePkg/MdeModulePkg.dec
> index 6cba729982..8ade6bac0e 100644
> --- a/MdeModulePkg/MdeModulePkg.dec
> +++ b/MdeModulePkg/MdeModulePkg.dec
> @@ -466,6 +466,9 @@
>    ## Include/Ppi/Debug.h
>    gEdkiiDebugPpiGuid                        = { 0x999e699c, 0xb013, 0x475e, { 0xb1,
> 0x7b, 0xf3, 0xa8, 0xae, 0x5c, 0x48, 0x75 } }
> 
> +  ## Include/Ppi/NvmExpressPassThru.h
> +  gEdkiiPeiNvmExpressPassThruPpiGuid    = { 0x6af31b2c, 0x3be, 0x46c1,
> { 0xb1, 0x2d, 0xea, 0x4a, 0x36, 0xdf, 0xa7, 0x4c } }
> +


Reviewed-by: Hao A Wu <hao.a.wu at intel.com>

Best Regards,
Hao Wu


>  [Protocols]
>    ## Load File protocol provides capability to load and unload EFI image into
> memory and execute it.
>    #  Include/Protocol/LoadPe32Image.h
> --
> 2.16.2.windows.1


-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.

View/Reply Online (#42540): https://edk2.groups.io/g/devel/message/42540
Mute This Topic: https://groups.io/mt/32090298/1813853
Group Owner: devel+owner at edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub  [edk2-devel-archive at redhat.com]
-=-=-=-=-=-=-=-=-=-=-=-





More information about the edk2-devel-archive mailing list