]> git.proxmox.com Git - mirror_edk2.git/blobdiff - MdePkg/Include/IndustryStandard/Nvme.h
MdePkg: Add registers of boot partition feature
[mirror_edk2.git] / MdePkg / Include / IndustryStandard / Nvme.h
index 7d4aee9dc84e9dbbed3034e4e7677d522122e8d5..4a1d92c45d688b97961ac1d91d8f32ede050aa12 100644 (file)
@@ -2,11 +2,12 @@
   Definitions based on NVMe spec. version 1.1.\r
 \r
   (C) Copyright 2016 Hewlett Packard Enterprise Development LP<BR>\r
-  Copyright (c) 2017, Intel Corporation. All rights reserved.<BR>\r
+  Copyright (c) 2017 - 2021, Intel Corporation. All rights reserved.<BR>\r
   SPDX-License-Identifier: BSD-2-Clause-Patent\r
 \r
   @par Specification Reference:\r
   NVMe Specification 1.1\r
+  NVMe Specification 1.4\r
 \r
 **/\r
 \r
 //\r
 // controller register offsets\r
 //\r
-#define NVME_CAP_OFFSET    0x0000        // Controller Capabilities\r
-#define NVME_VER_OFFSET    0x0008        // Version\r
-#define NVME_INTMS_OFFSET  0x000c        // Interrupt Mask Set\r
-#define NVME_INTMC_OFFSET  0x0010        // Interrupt Mask Clear\r
-#define NVME_CC_OFFSET     0x0014        // Controller Configuration\r
-#define NVME_CSTS_OFFSET   0x001c        // Controller Status\r
-#define NVME_NSSR_OFFSET   0x0020        // NVM Subsystem Reset\r
-#define NVME_AQA_OFFSET    0x0024        // Admin Queue Attributes\r
-#define NVME_ASQ_OFFSET    0x0028        // Admin Submission Queue Base Address\r
-#define NVME_ACQ_OFFSET    0x0030        // Admin Completion Queue Base Address\r
-#define NVME_SQ0_OFFSET    0x1000        // Submission Queue 0 (admin) Tail Doorbell\r
-#define NVME_CQ0_OFFSET    0x1004        // Completion Queue 0 (admin) Head Doorbell\r
+#define NVME_CAP_OFFSET     0x0000        // Controller Capabilities\r
+#define NVME_VER_OFFSET     0x0008        // Version\r
+#define NVME_INTMS_OFFSET   0x000c        // Interrupt Mask Set\r
+#define NVME_INTMC_OFFSET   0x0010        // Interrupt Mask Clear\r
+#define NVME_CC_OFFSET      0x0014        // Controller Configuration\r
+#define NVME_CSTS_OFFSET    0x001c        // Controller Status\r
+#define NVME_NSSR_OFFSET    0x0020        // NVM Subsystem Reset\r
+#define NVME_AQA_OFFSET     0x0024        // Admin Queue Attributes\r
+#define NVME_ASQ_OFFSET     0x0028        // Admin Submission Queue Base Address\r
+#define NVME_ACQ_OFFSET     0x0030        // Admin Completion Queue Base Address\r
+#define NVME_BPINFO_OFFSET  0x0040        // Boot Partition Information\r
+#define NVME_BPRSEL_OFFSET  0x0044        // Boot Partition Read Select\r
+#define NVME_BPMBL_OFFSET   0x0048        // Boot Partition Memory Buffer Location\r
+#define NVME_SQ0_OFFSET     0x1000        // Submission Queue 0 (admin) Tail Doorbell\r
+#define NVME_CQ0_OFFSET     0x1004        // Completion Queue 0 (admin) Head Doorbell\r
 \r
 //\r
 // These register offsets are defined as 0x1000 + (N * (4 << CAP.DSTRD))\r
@@ -51,11 +55,14 @@ typedef struct {
   UINT8     To;     // Timeout\r
   UINT16    Dstrd  : 4;\r
   UINT16    Nssrs  : 1; // NVM Subsystem Reset Supported NSSRS\r
-  UINT16    Css    : 4; // Command Sets Supported - Bit 37\r
-  UINT16    Rsvd3  : 7;\r
+  UINT16    Css    : 8; // Command Sets Supported - Bit 37\r
+  UINT16    Bps    : 1; // Boot Partition Support - Bit 45 in NVMe1.4\r
+  UINT16    Rsvd3  : 2;\r
   UINT8     Mpsmin : 4;\r
   UINT8     Mpsmax : 4;\r
-  UINT8     Rsvd4;\r
+  UINT8     Pmrs   : 1;\r
+  UINT8     Cmbs   : 1;\r
+  UINT8     Rsvd4  : 6;\r
 } NVME_CAP;\r
 \r
 //\r
@@ -115,7 +122,36 @@ typedef struct {
 #define NVME_ACQ  UINT64\r
 \r
 //\r
-// 3.1.11 Offset (1000h + ((2y) * (4 << CAP.DSTRD))): SQyTDBL - Submission Queue y Tail Doorbell\r
+// 3.1.13 Offset 40h: BPINFO - Boot Partition Information\r
+//\r
+typedef struct {\r
+  UINT32    Bpsz  : 15; // Boot Partition Size\r
+  UINT32    Rsvd1 : 9;\r
+  UINT32    Brs   : 2;  // Boot Read Status\r
+  UINT32    Rsvd2 : 5;\r
+  UINT32    Abpid : 1;  // Active Boot Partition ID\r
+} NVME_BPINFO;\r
+\r
+//\r
+// 3.1.14 Offset 44h: BPRSEL - Boot Partition Read Select\r
+//\r
+typedef struct {\r
+  UINT32    Bprsz : 10; // Boot Partition Read Size\r
+  UINT32    Bprof : 20; // Boot Partition Read Offset\r
+  UINT32    Rsvd1 : 1;\r
+  UINT32    Bpid  : 1;  // Boot Partition Identifier\r
+} NVME_BPRSEL;\r
+\r
+//\r
+// 3.1.15 Offset 48h: BPMBL - Boot Partition Memory Buffer Location (Optional)\r
+//\r
+typedef struct {\r
+  UINT64    Rsvd1 : 12;\r
+  UINT64    Bmbba : 52; // Boot Partition Memory Buffer Base Address\r
+} NVME_BPMBL;\r
+\r
+//\r
+// 3.1.25 Offset (1000h + ((2y) * (4 << CAP.DSTRD))): SQyTDBL - Submission Queue y Tail Doorbell\r
 //\r
 typedef struct {\r
   UINT16    Sqt;\r
@@ -353,7 +389,7 @@ typedef struct {
   UINT8                Avscc; /* Admin Vendor Specific Command Configuration */\r
   UINT8                Apsta; /* Autonomous Power State Transition Attributes */\r
   //\r
-  // Below fields before Rsvd2 are defined in NVM Express 1.3 Spec\r
+  // Below fields before Rsvd2 are defined in NVM Express 1.4 Spec\r
   //\r
   UINT16               Wctemp;      /* Warning Composite Temperature Threshold */\r
   UINT16               Cctemp;      /* Critical Composite Temperature Threshold */\r
@@ -361,7 +397,12 @@ typedef struct {
   UINT32               Hmpre;       /* Host Memory Buffer Preferred Size */\r
   UINT32               Hmmin;       /* Host Memory Buffer Minimum Size */\r
   UINT8                Tnvmcap[16]; /* Total NVM Capacity */\r
-  UINT8                Rsvd2[216];  /* Reserved as of NVM Express */\r
+  UINT8                Unvmcap[16]; /* Unallocated NVM Capacity */\r
+  UINT32               Rpmbs;       /* Replay Protected Memory Block Support */\r
+  UINT16               Edstt;       /* Extended Device Self-test Time */\r
+  UINT8                Dsto;        /* Device Self-test Options  */\r
+  UINT8                Fwug;        /* Firmware Update Granularity */\r
+  UINT8                Rsvd2[192];  /* Reserved as of Nvm Express 1.4 Spec */\r
   //\r
   // NVM Command Set Attributes\r
   //\r
@@ -433,6 +474,34 @@ typedef struct {
   UINT8             VendorData[3712]; /* Vendor specific data */\r
 } NVME_ADMIN_NAMESPACE_DATA;\r
 \r
+//\r
+// RPMB Device Configuration Block Data Structure as of Nvm Express 1.4 Spec\r
+//\r
+typedef struct {\r
+  UINT8    Bppe;       /* Boot Partition Protection Enable */\r
+  UINT8    Bpl;        /* Boot Partition Lock */\r
+  UINT8    Nwpac;      /* Namespace Write Protection Authentication Control */\r
+  UINT8    Rsvd1[509]; /* Reserved as of Nvm Express 1.4 Spec */\r
+} NVME_RPMB_CONFIGURATION_DATA;\r
+\r
+#define RPMB_FRAME_STUFF_BYTES  223\r
+\r
+//\r
+// RPMB Data Frame as of Nvm Express 1.4 Spec\r
+//\r
+typedef struct {\r
+  UINT8     Sbakamc[RPMB_FRAME_STUFF_BYTES]; /* [222-N:00] Stuff Bytes */\r
+                                             /* [222:222-(N-1)] Authentication Key or Message Authentication Code (MAC) */\r
+  UINT8     Rpmbt;                           /* RPMB Target */\r
+  UINT64    Nonce[2];\r
+  UINT32    Wcounter;                        /* Write Counter */\r
+  UINT32    Address;                         /* Starting address of data to be programmed to or read from the RPMB. */\r
+  UINT32    Scount;                          /* Sector Count */\r
+  UINT16    Result;\r
+  UINT16    Rpmessage;                       /* Request/Response Message */\r
+  // UINT8    *Data;                         /* Data to be written or read by signed access where M = 512 * Sector Count. */\r
+} NVME_RPMB_DATA_FRAME;\r
+\r
 //\r
 // NvmExpress Admin Identify Cmd\r
 //\r
@@ -564,6 +633,7 @@ typedef struct {
   #define LID_ERROR_INFO    0x1\r
   #define LID_SMART_INFO    0x2\r
   #define LID_FW_SLOT_INFO  0x3\r
+  #define LID_BP_INFO       0x15\r
   UINT32    Rsvd1 : 8;\r
   UINT32    Numd  : 12;       /* Number of Dwords */\r
   UINT32    Rsvd2 : 4;        /* Reserved as of Nvm Express 1.1 Spec */\r