public inbox for devel@edk2.groups.io
 help / color / mirror / Atom feed
From: "Wu, Hao A" <hao.a.wu@intel.com>
To: "Chu, Maggie" <maggie.chu@intel.com>,
	"devel@edk2.groups.io" <devel@edk2.groups.io>
Cc: "Wang, Jian J" <jian.j.wang@intel.com>,
	"Ni, Ray" <ray.ni@intel.com>, "Zeng, Star" <star.zeng@intel.com>
Subject: Re: [PATCH] MdeModulePkg: Add definitions for NVM Express Passthru PPI
Date: Tue, 18 Jun 2019 12:33:34 +0000	[thread overview]
Message-ID: <B80AF82E9BFB8E4FBD8C89DA810C6A093C8F24F8@SHSMSX104.ccr.corp.intel.com> (raw)
In-Reply-To: <20190617021043.16588-1-maggie.chu@intel.com>

> -----Original Message-----
> From: Chu, Maggie
> Sent: Monday, June 17, 2019 10:11 AM
> To: devel@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@intel.com>
> Cc: Hao A Wu <hao.a.wu@intel.com>
> Cc: Jian J Wang <jian.j.wang@intel.com>
> Cc: Ray Ni <ray.ni@intel.com>
> Cc: Star Zeng <star.zeng@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@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


  reply	other threads:[~2019-06-18 12:33 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-06-17  2:10 [PATCH] MdeModulePkg: Add definitions for NVM Express Passthru PPI Maggie Chu
2019-06-18 12:33 ` Wu, Hao A [this message]
2019-06-24  1:10   ` [edk2-devel] " Wu, Hao A
  -- strict thread matches above, loose matches on Subject: below --
2019-06-10 11:21 Maggie Chu

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-list from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=B80AF82E9BFB8E4FBD8C89DA810C6A093C8F24F8@SHSMSX104.ccr.corp.intel.com \
    --to=devel@edk2.groups.io \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox