NVMe · 規格與原理

NVMe Command and Feature Lockdown:查詢、限制範圍與持續性

00.01.Command and Feature Lockdown 處理的是「哪些管理操作,在什麼入口、哪些控制器上不准執行」。理解它需要把能力、目前狀態與修改命令接起來,再分清限制何時解除、斷電後是否保留。本文以一個 FID 的限制與讀回為例,從全貌走到命令欄位、兩種 Log 格式與必要的持續性例外。

Lockdown
本篇指 Command and Feature Lockdown:以操作種類、接收介面與控制器範圍限制管理操作的機制。
FID
Feature Identifier;指定要讀取或設定哪一項 Feature 的編號。

這篇的主軸

01

先知道能限制什麼

01-01先查裝置是否支援整體限制或逐一指定控制器,再查哪些操作允許被禁止。功能存在、操作受支援、操作可禁止,是三個不同問題。

02

把限制範圍說清楚

02-01依序選操作、接收入口與控制器。只禁止一項設定、只限制某個入口,或只選某台控制器,會得到不同的影響範圍。

03

查詢要能驗證設定

03-01一般格式看全體共同項目;增強格式看指定控制器或全體彙整,再分辨某項是否所有控制器都符合。用相同條件讀回才有比較意義。

04

理解限制的生命週期

04-01限制可以用命令解除;經過斷電循環後是否仍保留,還要看最初選的控制器範圍與持續性設定。最後補足認證解凍與廠商定義的必要條件。

00.02.適合學過 OS、Computer Organization 並了解 SSD 基本概念的讀者。以 PCIe 主機管理流程為主要情境;Management Endpoint 只解釋 Base 明載的關係。所有控制器編號、可禁止清單及命令編碼案例均為說明性範例,實際可用項目由裝置能力決定。

Management Endpoint
帶外管理接收入口;與主機的 Admin Submission Queue 分開選擇限制。
PCIe
PCI Express,NVMe memory-based controller 使用的 transport 與裝置互連。

把主軸連起來

00.03.可以用一個問題帶著讀:如果只想限制控制器 7 經 Admin Queue 修改 FID 06h,應查哪些能力、送哪些參數、用什麼回覆證明限制成立?沿著這條線,清單、欄位與錯誤碼才有各自的位置。

Admin
Administrative,建立、設定、查詢或管理 controller 與 queue 的控制路徑。

00.04.中文教學先補足每一步的理由,再在問答前整理相關規格圖表的欄位關係。兩種 Log 的長度、控制器編號、代碼清單與 UUID 索引會各自演算,避免只記住縮寫而失去它所描述的對象。

UUID
Universally Unique Identifier;128-bit 識別值,本篇用來區分同一廠商 FID 的不同定義。

01 先理解:限制的是哪個操作從哪裡進來

01.01.Command and Feature Lockdown 讓主機限制特定管理命令,或 Set Features 對某個 FID 的設定操作。限制同時有操作種類、接收介面與控制器範圍;LID 14h 用來查可禁止項目與目前禁止狀態,Lockdown 命令用來改變它們。

LID
Log Page Identifier;指定要讀取哪一種 log page 的編號。
來源:Base 2.4 §8.1.5

來源:NVME-BASE-2.4, Rev. 2.4, §8.1.5, 文件頁 597-599, PDF 頁 623-625

從管理需求開始

01.02.假設一台機器已完成儲存裝置設定,接下來希望限制某些管理操作。Lockdown 讓控制器在收到指定操作時拒絕執行;它不修改 namespace 的資料格式,也沒有替每個 LBA 建立讀寫權限表。先辨認要限制的是哪種命令,才能選對入口。

namespace
主機透過控制器存取的一份邏輯儲存空間;不是本篇 CSS 要選的控制器。

命令代碼與 Feature 編號分屬不同空間

01.03.Admin 命令用 opcode 選動作;Set Features 的命令內又用 FID 選設定項目。Lockdown 的 SCP=0 表示 OFI 是 Admin opcode,SCP=2 表示 OFI 是 Set Features 的 FID。相同的 06h 放在不同 SCP 底下,代表的操作可以完全不同。

opcode
操作代碼;先選要執行的命令,再由該命令的其他欄位提供參數。
OFI
Opcode or Feature Identifier;Lockdown 要禁止或允許的代碼,其種類由 SCP 選定。
SCP
Scope;指定代碼屬於 Admin opcode、Set Features FID 或管理介面命令集。
從意圖到可確認的限制
  1. 先說清楚:要限制哪個操作、接收介面與控制器集合。
  2. Identify 查 CFLS/CCFLS,再讀 LID14h 的可禁止清單。
  3. Lockdown 填 SCP、OFI、IFC、CSEL/CSS、PRHBT,等完成。
  4. 用相同範圍讀 LID14h 的目前禁止清單,確認設定結果。
  5. 後續符合條件的命令被拒絕;解除與 power cycle 另依持續性規則判斷。
查詢取得資訊;Lockdown 改變狀態;後續命令才接受限制檢查。來源:Base §8.1.5、§5.2.16。
power cycle
整個指定裝置或 subsystem 的電源循環;本篇不能以一般 Controller Reset 代替。
CCFLS
Controller-scoped Command and Feature Lockdown Supported;可選控制器範圍的擴充支援位元。
PRHBT
Prohibit;1 要求禁止,0 要求允許,作用對象由其餘選擇欄位決定。
CFLS
Command and Feature Lockdown Supported;基本 Lockdown 支援位元。
CSEL
Controller Select;選全部、單一或某 primary 所屬 secondary 控制器集合。
CSS
Controller Select Specific;在本命令 CDW14 中依 CSEL 提供目標或 primary 控制器編號。
IFC
Interface;指定受限制操作從哪個介面收到時套用限制。

設定命令與被限制命令是兩次動作

01.04.先送 Lockdown,控制器成功完成後,對選定範圍建立限制。之後再有符合條件的命令進來,才會因限制而被拒絕。要分清「成功設定禁止」和「後來某個命令被禁止」的完成結果;前者成功,後者失敗,並不矛盾。

讀回時必須問對問題

01.05.可禁止清單是裝置提供的能力,不是目前的黑名單;目前禁止清單才表示限制狀態。兩者都在 LID 14h,透過不同 CNTTS 選擇。沒有先保留查詢的種類與介面,就算拿到一串 opcode,也無法判斷它代表能禁止還是已禁止。

CNTTS
Contents;選可禁止清單,或某種接收介面目前禁止的清單。

知道功能的邊界

01.06.哪些命令或 FID 可被禁止由廠商決定,甚至可包含 Lockdown 自己。因此不能看到功能支援位元就假設每個管理操作都能限制,也不能先把解除限制的入口禁止,再假設一定能從同一條路徑解除。

閱讀相關規格圖表 → 先理解:限制的是哪個操作從哪裡進來

02 先查支援層級,再查可禁止項目

02.01.Identify Controller 的 OACS.CFLS 表示基本 Lockdown 能力,CCFLS 表示可選控制器的擴充能力。CFLS=1 保證 CSEL=0 與 LID 14h;CCFLS=1 還要求 CSEL=1、2 與增強版 Log。每個 OFI 能否被禁止仍需查清單。

OACS
Optional Admin Command Support;Identify Controller 的選用管理命令與功能能力位元欄位。
來源:Base 2.4 §8.1.5

來源:NVME-BASE-2.4, Rev. 2.4, §8.1.5, 文件頁 599, PDF 頁 625

從 Identify 的能力位元往下讀

02.02.OACS 在 Identify Controller bytes 257:256,bit 10 是 CFLS、bit 13 是 CCFLS。這是 16-bit 欄位;從原始 bytes 讀到 00 24 時,以 little-endian 合成 2400h,再看各 bit,不能把第一個 byte 當成全部能力。

little-endian
低位 byte 先存,例如 00 24 組成 16-bit 數值 2400h。

基本能力已經包含哪些必要入口

02.03.CFLS=1 的控制器必須支援整個 NVM subsystem 範圍的 Lockdown,以及 Command and Feature Lockdown Log。它沒有直接承諾可以逐一挑控制器;因此第一層問題是功能存在,第二層才是控制器選擇。

NVM subsystem
NVMe 中的儲存子系統,可以包含多個控制器;本篇的全體控制器以這個範圍計算。
NVM
Non-Volatile Memory,斷電後仍能保存資料的記憶體。

擴充能力如何接到查詢格式

02.04.CCFLS=1 必須同時支援基本能力,以及 CSEL=1 的單一控制器、CSEL=2 的某 primary controller 所屬 secondary controllers。對應的 ELPF=1 Log 能查指定控制器或彙整多個控制器。CCFLS=1、CFLS=0 不是合法的能力組合。

controller
控制器;接收並處理 NVMe 命令的介面實體,同一 subsystem 可有多個。
secondary
附屬控制器;本篇只需知道其與 primary 的所屬關係,不以名稱推論效能或優先級。
primary
主要控制器;本篇 CSEL=2 用它的 Identifier 選其所屬 secondary 控制器集合。
ELPF
Enhanced Log Page Format;選一般或增強版 LID14h 資料格式。

功能支援不等於操作全部開放

02.05.通過能力檢查後,以 CNTTS=0 查目標種類的可禁止清單。如果要限制 FID,查 SCP=2;要限制 Admin opcode,查 SCP=0。某個命令本來就受控制器支援,也不表示它允許被 Lockdown 禁止,兩個問題不能互相代替。

閱讀相關規格圖表 → 先查支援層級,再查可禁止項目

03 介面與控制器是兩個獨立選擇

03.01.IFC 選命令接收介面:00b 為 Admin Submission Queue,01b 為該 Queue 加 Management Endpoint,10b 為 Management Endpoint。CSEL 選全部控制器、單一控制器或某 primary 的 secondary controllers,CSS 再提供所需控制器編號。

Admin Submission Queue
主機提交管理命令的佇列,本文也簡稱 Admin Queue。
來源:Base 2.4 §5.2.16

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.16, 文件頁 406-407, PDF 頁 432-433

同一操作走不同入口,結果可以不同

03.02.主機通常經由 Admin Submission Queue 送管理命令;Management Endpoint 則是帶外管理入口。規格容許同一操作在 Queue 被禁止、在帶外入口仍允許,但必須有相應支援。這裡只使用 Base 定義的入口與回覆規則,不推導未提供的 NVMe-MI 封包格式。

NVMe
Non-Volatile Memory Express,主機與非揮發性記憶體子系統之間的介面規範家族。

先決定介面,再決定控制器集合

03.03.IFC 與 CSEL 一起決定適用範圍。CSEL=0 選 subsystem 全部控制器;1 選 CSS 指定的控制器;2 選 CSS 所指 primary controller 的全部 secondary controllers。最後一種不是把 primary 自己也列入目標。CSEL=Fh 是廠商定義,3h~Eh 保留。

只改一個選擇,觀察受影響範圍
固定條件改變的欄位限制涵蓋的對象
FID06h、Admin QueueCSEL0全部控制器
FID06h、Admin QueueCSEL1、CSS7控制器 7
FID06h、Admin QueueCSEL2、CSS7primary7 所屬 secondaries,非 primary7 本身
FID06h、controller7IFC 由 0 改 2從 Admin Queue 改為 Management Endpoint
每列假設相關能力與入口均受支援;這些選擇分別管控制器集合與接收入口。來源:Base Figures365、366。

CSS 依 CSEL 改變意義

03.04.CSS 在 CDW14 高 16 bits。CSEL=0 時 CSS 保留;1 時是目標 Controller Identifier;2 時是 primary 的 Identifier。若 CSEL=2 的 CSS 不對應 primary,回 Invalid Controller Identifier。不能把 namespace 編號填進 CSS,也不能把 CSEL=2 理解成「控制器 2」。

CDW
CDW(Command Dword);命令中的 32-bit 欄位單位,例如 CDW10 的 10 是欄位 index,不是 byte offset。

介面不存在或組合不合理時會拒絕

03.05.裝置沒有 Management Endpoint 卻選 IFC=01b 或 10b,Lockdown 回 Invalid Field in Command。SCP=4 是 NVMe-MI 的 PCIe Command Set opcode 類別,只能走 Management Endpoint;它若配 IFC=00b 或 01b 也會被拒絕。這個 PCIe Command Set 不是 NVMe 的 NVM I/O 命令集。

I/O
Input/Output,對 namespace 執行資料輸入與輸出的操作類別。

控制器選擇也有能力條件

03.06.若 CCFLS=0,非零 CSEL 的 Lockdown 會以 Invalid Field in Command 拒絕。即使 CSS 看起來是有效的控制器編號,也不能跳過這項能力條件;編號有效與功能支援是不同層次。

04 把 LID 14h 的查詢問題寫完整

04.01.LID 14h 的 SCP 選項目種類,CNTTS=00b 查可禁止、01b 查 Admin Queue 目前禁止、10b 查 Management Endpoint 目前禁止。ELPF=0 使用一般格式;ELPF=1 使用增強格式,並以 LSI.CNTLID 選控制器,FFFFh 查所有控制器。

CNTLID
Controller Identifier;控制器的識別編號,增強 Log 查詢以 FFFFh 指定全體。
LSI
Log Specific Identifier;Get Log 中依 Log 種類解讀的 16-bit 識別值。
來源:Base 2.4 §5.2.13.1.20

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.13.1.20, 文件頁 279-280, PDF 頁 305-306

用三個條件描述回覆內容

04.02.先選 SCP:0 是 Admin opcode,2 是 Set Features FID,3 是 Management Interface Command Set opcode,4 是其 PCIe Command Set opcode;1 與 5~F 保留。接著選 CNTTS,再選格式。若只記錄 LID 14h,會遺失足以改變清單意義的條件。

可禁止與目前禁止用不同 CNTTS

04.03.CNTTS=0 回裝置允許禁止的項目;1、2 分別回兩種接收介面的目前禁止項目,3 保留。若 subsystem 沒有 Management Endpoint,卻查 CNTTS=2,命令會回 Invalid Field in Command;空清單和查詢本身失敗不能混為一談。

只有增強格式使用這個控制器選擇

04.04.ELPF 是 CDW10 bit 14;設 1 時需要 CCFLS 支援。CNTLID 放在 CDW11 的 LSI,也就是高 16 bits;FFFFh 代表所有控制器。ELPF=0 時這個 LSI.CNTLID 保留,填入 7 也不會把一般格式變成控制器 7 的專屬回覆。

把 byte 長度換成命令需要的 Dword 數

04.05.1 Dword 是 4 bytes,NUMD=(回傳 bytes/4)-1。512 bytes 是 128 Dwords,所以 NUMD=127,而不是 512。低 16 bits 放 NUMDL,高 16 bits 放 NUMDU。資料由 DPTR 指定的主機 buffer 接收,沒有放進完成佇列的 DW0。

buffer
資料緩衝區;本篇指主機預留給 Log 回覆資料的記憶體。
Dword
Dword(Double word);32 bits,也就是 4 bytes。對比 word=16 bits;例如 zero-based dword count=3 代表 4 個 Dwords,也就是 16 bytes。
NUMDL
Number of Dwords Lower;Get Log 傳輸計數的低 16bits。
NUMDU
Number of Dwords Upper;Get Log 傳輸計數的高 16bits。
DPTR
Data Pointer;指定命令資料 buffer 的指標欄位。
NUMD
Number of Dwords;本篇 Get Log 傳輸長度採 Dword 數量減 1。

位移和清單索引不能互換

04.06.本篇範例 OT=0,以 byte offset 指向 Log 內的起點,LPOL/LPOU 合成 64-bit 值且需 4-byte 對齊。ELPF 是 Log 格式選擇,不是 offset 單位。若要用 OT=1 的 index-offset,必須有對應支援與項目定義,不能看到清單就自行把第 2 筆索引填成 byte offset 2。

index-offset
以清單項目索引表示起點;和按 byte 距離表示起點不同,必須由該 Log 明確支援。
byte offset
以 byte 計算、相對結構起點的距離;索引 2 不一定代表 offset2。
offset
offset;從指定起點算出的位移。它回答「離起點多遠」,不等於 index。
index
index;用來選取清單中的項目或格式。它回答「選哪一項」,不是「離起點多遠」。
LPOL
Log Page Offset Lower;Log 起讀位置的低 32bits。
LPOU
Log Page Offset Upper;同一 Log 起讀位置的高 32bits。
OT
Offset Type;0 以 byte 距離指定 Log 起點,1 是需另有支援的清單索引方式。
閱讀相關規格圖表 → 把 LID 14h 的查詢問題寫完整

05 一般格式:一串代碼代表全體共同的項目

05.01.一般 Log 固定 512 bytes,CFILA 回報查詢種類,LNGTH 直接表示後方代碼清單的 byte 數,清單從 byte 4 開始並由小到大排列。對全體控制器的可禁止項目與 Admin Queue 目前禁止項目,不能把一般清單當成任何一台控制器的聯集。

CFILA
Command and Feature Identifier List Attributes;一般 Log 中描述清單種類的屬性。
LNGTH
Length;一般格式代碼清單的 byte 數,直接計數,0 表示空清單。
來源:Base 2.4 §5.2.13.1.20

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.13.1.20, 文件頁 281, PDF 頁 307

先解釋 header,再讀值

05.02.byte 0 的 CFILA[5:4] 是 CS、[3:0] 是 SS,分別回映查詢 CNTTS 與 SCP;[7:6] 保留。bytes 2:1 保留,byte 3 才是 LNGTH。這個清單沒有逐項附上「這是 opcode 還是 FID」,必須先由 header 判斷。

header
資料結構開頭的固定欄位區,用來說明後方內容的種類、長度或數量。
CS
Contents Selected;header 回報這份清單選的是可禁止或哪個入口已禁止。
SS
Scope Selected;header 回報清單內代碼所屬的種類。

長度直接計數,0 代表空清單

05.03.LNGTH=n 時,有 n 個各 1-byte 的代碼,位置是 bytes 4 到 n+3。LNGTH=0 沒有有效代碼;不是 1 個值為 0 的項目。LNGTH 與 Get Log 的 NUMD 不同,不能對 LNGTH 再加 1。

把 6 個 bytes 分成 header 與有效清單
byte offset範例值如何解讀
012hCS1:Admin 已禁止;SS2:FID
1~200 00保留,不是清單內容
302hLNGTH=2,直接計數
4~506 072 筆 FID:06h、07h
6~511保留不解析為其他 FID
索引 0、offset4、FID06h 是第幾筆、存在哪、代表什麼的三種答案。來源:Base Figure276。

排序用來掃描,不是清單位置就是代碼

05.04.範例清單 [06h,07h] 在 byte 4、5。第一筆的索引是 0、byte offset 是 4、內容才是 FID 06h;三者各自回答第幾筆、存在哪、代表什麼。清單後方到 byte 511 的保留區不參與排序,也不當成其他命令。

全體條件會隱藏只有部分控制器具備的項目

05.05.假設控制器 A 已禁止 FID 06h,但 B 未禁止。一般格式的 Admin Queue 目前禁止清單不能因為 A 禁止就當作「全體已禁止 06h」。需要知道部分控制器的差異時,改用增強格式的 FFFFh 彙整,再以特定 CNTLID 追查。

閱讀相關規格圖表 → 一般格式:一串代碼代表全體共同的項目

06 增強格式:分清至少一台與全部控制器

06.01.增強 Log 用 16-byte header 說明版本、查詢種類、CNTLID、SZE、NCFID 與 CFIDS,描述器按 CFI 遞增排列。CNTLID=FFFFh 時清單含至少一台控制器回報的項目;每筆 ACNTL=1 才表示所有控制器都回報這項。

ACNTL
All Controllers;1 表示所有控制器回報此項,0 表示至少一台但非全部。
CFIDS
Command and Feature Identifier Descriptors Size;增強 Log 每筆描述器占用的 byte 數。
NCFID
Number of Command and Feature Identifier Descriptors;增強 Log 中的描述器數量,直接計數。
CFI
Command and Feature Identifier;一筆增強描述器中,依 SCP 解讀的操作代碼。
SZE
Size;增強 Log 的完整 byte 大小,不是項目數。
來源:Base 2.4 §5.2.13.1.20

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.13.1.20, 文件頁 282-283, PDF 頁 308-309

先讀長度,再決定要拿多少資料

06.02.VER=0,header 的 SZE 是整份 Log byte 數。NCFID 是描述器數,CFIDS 是每筆描述器 byte 數,兩者直接計數。先讀足 16-byte header,確認完整大小,再依控制器傳輸能力讀取需要的內容;不能永久假設增強 Log 也只有 512 bytes。

VER
Version;此 Log 資料格式的版本值。

依 CFIDS 算位置,不把 byte offset 當控制器編號

06.03.第 i 筆從 16+i×CFIDS 開始。若 NCFID=2、CFIDS=2,兩筆起點是 16、18,清單結束於 byte 19,SZE=20 的範例完全裝得下。若未來描述器尺寸不同,應依回報步距前進,不能把 2 bytes 寫死成所有版本通用規則。

A/B 的禁止狀態,如何變成兩種 Log固定查 SCP2、CNTTS1;假設 subsystem 只有 A、B。全體增強清單保留 06h 的部分控制器資訊,一般格式只留下全體共同的 07h。來源:Base Figures276~278。控制器 A 目前禁止FID 06h, 07h控制器 B 目前禁止FID 07h相同 SCP/CNTTS,改變回覆格式一般 ELPF0LNGTH=1 → 07hELPF1 / CNTLID=FFFFh06h: ACNTL007h: ACNTL1
固定查 SCP2、CNTTS1;假設 subsystem 只有 A、B。全體增強清單保留 06h 的部分控制器資訊,一般格式只留下全體共同的 07h。來源:Base Figures276~278。

Header 與描述器都有 CFIA,但不是同一個欄位

06.04.header byte 1 的 CFIA 包含 CS/SS,說明整份清單的種類;描述器 byte 1 的 CFIA 只有 bit 0 的 ACNTL 是本篇定義的有效屬性。把 header 的 12h 用來解讀 ACNTL,或把描述器的 01h 當 SCP,都會讀錯。

CFIA
Command and Feature Identifier Attributes;header 中的此欄說明清單種類,描述器中的同名欄說明 ACNTL,需看所在結構。

全體彙整保留部分控制器的資訊

06.05.CNTLID=FFFFh 時,只要至少一台控制器回報某 CFI,就可在清單看到它。ACNTL=1 表示所有控制器都回報,0 表示至少一台但非全部。它不列出是哪幾台,因此需要進一步以各 CNTLID 查詢,才能建立精確的控制器對照表。

描述器中的 0 與空清單也不同

06.06.NCFID=0 才是沒有描述器;ACNTL=0 是一筆已存在項目的屬性。以 A/B 的例子,06h 留在全體增強清單內,但不應出現在一般格式的全體共同禁止清單中。比較兩種格式時,先確認同一 SCP、CNTTS 和查詢期間。

閱讀相關規格圖表 → 增強格式:分清至少一台與全部控制器

07 完整編碼一次禁止與解除操作

07.01.Lockdown 使用 CDW10 的 CSEL、OFI、IFC、PRHBT、SCP,以及 CDW14 的 CSS/UIDX。PRHBT=1 禁止、0 允許;其他欄位保留原本要作用的種類、介面與控制器集合。重複禁止已禁止項目或允許已允許項目,本身不是錯誤。

UIDX
UUID Index;命令帶入的 UUID List 索引,0 不指定 UUID。
來源:Base 2.4 §5.2.16

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.16, 文件頁 405-407, PDF 頁 431-433

列出意圖再填 bits

07.02.本例限制的是 FID,因此 SCP=2;FID 是 06h,因此 OFI=6;只針對 Admin Queue,因此 IFC=0;要禁止,因此 PRHBT=1;只針對控制器 7,因此 CSEL=1、CSS=7。每個值都來自一句具體需求,而不是從另一個命令整段複製。

演算 CDW10

07.03.CSEL 位於 bits 19:16,OFI 在 15:8,IFC 在 6:5,PRHBT 在 bit 4,SCP 在 3:0。因此 (1<<16)|(6<<8)|(0<<5)|(1<<4)|2 = 00010612h。bits 31:20 和 bit 7 保留。把 FID 06h 直接填 CDW10=6,會選錯 SCP,並未完成這項設定。

同一目標:禁止與允許只差 bit4假設功能、controller7 與 FID06h 均符合條件,且 Lockdown 入口可執行。低位 SCP2 選 FID;高位 CSEL1 仍需 CDW14 的 CSS7 提供實際編號。來源:Base Figures365、366。OPC=24h · CSEL1 · OFI06h · IFC0 · SCP2CSS7 → CDW14=00070000hPRHBT=1禁止:00010612hPRHBT=0允許:00010602h每次成功後,按相同目標讀回 LID14h
假設功能、controller7 與 FID06h 均符合條件,且 Lockdown 入口可執行。低位 SCP2 選 FID;高位 CSEL1 仍需 CDW14 的 CSS7 提供實際編號。來源:Base Figures365、366。

CDW14 提供目標,不傳資料清單

07.04.CSS 在 bits 31:16,填 7 得 00070000h;本例 UIDX=0,不選廠商 UUID。Lockdown 沒有用資料 buffer 傳一串 OFI,一次只有這一個 OFI;除 CDW10、CDW14 外,其他命令專用欄位保留。

等完成,再讀同一範圍的狀態

07.05.成功完成後,用 ELPF=1、CNTLID=7、SCP=2、CNTTS=1 查回。若範例只有 FID 06h 一筆,header 加 2-byte 描述器共 18 bytes;Get Log 傳輸以 Dword 計,需容納至少 20 bytes,但 SZE 外的傳輸尾端不能當有效 Log 內容。

解除時保持其餘選擇一致

07.06.解除例子保留同一個 FID、介面與控制器,只清 PRHBT。先確認執行解除的 Lockdown 入口仍允許;如果先前也禁止了 Lockdown 自身,不能把 PRHBT=0 當成可繞過限制的特殊命令。重複送出原本已成立的禁止或允許,本身不算錯。

閱讀相關規格圖表 → 完整編碼一次禁止與解除操作

08 把設定失敗與命令被禁止分開判斷

08.01.Lockdown 設定本身可因項目不可禁止、介面不支援或控制器選擇無效而失敗。28h 是 Prohibition of Command Execution Not Supported;1Fh 是 Invalid Controller Identifier。已受限制的 Admin 命令則回通用狀態 Command Prohibited by Command and Feature Lockdown。

來源:Base 2.4 §5.2.16

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.16, 文件頁 407-408, PDF 頁 433-434

08.02.受限制的操作從 Admin Queue 收到時,命令以 Command Prohibited by Command and Feature Lockdown 中止;從 Management Endpoint 收到時,回 Access Denied Error Response。

來源:Base 2.4 §8.1.5

來源:NVME-BASE-2.4, Rev. 2.4, §8.1.5, 文件頁 598, PDF 頁 624

先看是哪個命令完成

08.03.CQE 的 Command Identifier 對回原本命令,Status 再解出 SCT 與 SC。只看到 23h 或 28h 這個數字還不夠;SCT 決定狀態碼類別,也要知道完成的是 Lockdown 還是被限制的後續命令。

CQE
Completion Queue Entry;完成佇列中回報某筆命令結果的項目。
SCT
Status Code Type;指定完成狀態碼所屬類別,需與 SC 一起解讀。
SC
Status Code;指定所選 SCT 類別中的完成結果。

項目不可禁止與入口不支援有不同要求強度

08.04.若 OFI 沒被標示為可禁止,Lockdown 必須回 Prohibition of Command Execution Not Supported。若它可禁止,但不支援 IFC 選到的其中一個介面,規格建議回同一狀態,也允許回 Invalid Field in Command;不能把建議誤寫成唯一合法結果。

欄位組合錯誤不是成功建立限制

08.05.缺 Management Endpoint 卻選它、SCP=4 卻包含 Admin Queue、CCFLS=0 卻用非零 CSEL,都會回 Invalid Field in Command。CSEL=2 指到非 primary 的控制器編號則回 Invalid Controller Identifier。應把錯誤放回它所檢查的選擇,而不是統稱為「裝置不支援」。

被限制的命令依接收入口得到回覆

08.06.已禁止的操作從 Admin Queue 進來,以 Command Prohibited by Command and Feature Lockdown 中止;Management Endpoint 則回 Access Denied Error Response。這是兩個入口的回覆形式,不能要求帶外回覆一定長得像 Admin CQE。

多個問題同時存在時,不推論唯一檢查順序

08.07.通用規則允許在多個失敗原因同時成立時由廠商選擇回報狀態,除非有另外規定。學習例子一次固定一個錯誤原因,才看得出哪個條件導向哪個結果;這不代表控制器內部必須依教材排列的順序檢查。

閱讀相關規格圖表 → 把設定失敗與命令被禁止分開判斷

09 限制何時消失,要看 CSEL 與持續性設定

09.01.CSEL=0 的全體限制在 Lockdown Persistence 啟用時跨 power cycle 保留;停用時持續到 subsystem power cycle 或後續解除。CSEL=1、2 的限制持續到 power cycle 或後續解除,不因 LDPE=1 自動取得全體限制的跨斷電保留規則。

LDPE
Lockdown Persistence Enable;啟用全體限制跨 power cycle 保留的設定。
來源:Base 2.4 §8.1.5

來源:NVME-BASE-2.4, Rev. 2.4, §8.1.5, 文件頁 598-599, PDF 頁 624-625

09.02.持續性啟用時,未凍結或無認證解凍支援的 Lockdown Persistence Personality,不能透過 Lockdown 禁止 Set Features 或 FID 22h。若任一 personality 支援認證解凍,特定 CDP Authentication 的 Security Send/Receive 必須仍被允許。

personality
規格中的一組裝置配置;本篇只用 Lockdown Persistence 這一種配置及其必要條件。
CDP
Configurable Device Personality;將裝置配置分為可查詢、設定或凍結的 personality。
來源:Base 2.4 §5.2.30.1.25.4.1

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.30.1.25.4.1, 文件頁 494, PDF 頁 520

先問限制是用哪個 CSEL 建立

09.03.持續性取決於當初 Lockdown 的 CSEL。CSEL=0 搭配 LDPE=1,禁止會跨 power cycle 持續,直到後續 Lockdown 解除;LDPE=0 則可由 subsystem power cycle 結束。CSEL=1、2 依自己的規則,在 power cycle 或後續解除時結束。一般 Controller Reset 不等於整個 subsystem power cycle。

LDPE 和 LDPS 分別是設定與讀回

09.04.Lockdown Persistence 屬於 Configurable Device Personality 的 PERID=02h;FID=22h 是 Feature 編號,不能把 02h 當成同一層編號。設定的 CDW11 bit 0 是 LDPE;Get 回覆 CQE DW1 bit 0 是 LDPS。DW0 則回報該 personality 的屬性,兩個 Dword 要分開讀。

PERID
Personality Identifier;選 CDP 功能中的一組配置,02h 是 Lockdown Persistence。
LDPS
Lockdown Persistence State;讀回目前持續性是否啟用。
一個 subsystem power cycle 之後,哪些限制保留?
建立限制時的 CSELLockdown Persistence斷電循環後的規則
0:全部控制器已啟用保留,後續 Lockdown 可解除
0:全部控制器已停用原禁止不跨 power cycle 保留
1:單一控制器任一狀態不因 LDPE1 而跨 power cycle 保留
2:指定 primary 的 secondaries任一狀態同樣在 power cycle 或後續解除時結束
比較的是 power cycle;不能把一般 Controller Reset 代入這一欄。凍結與認證例外則在正文另行說明其條件。來源:Base §8.1.5。

設定持續性與凍結設定是不同動作

09.05.Personality 是裝置的一組配置,frozen 表示不允許再任意改變該配置。CDW13 的 CHPS 控制是否改設定,PERFS 控制凍結請求,PERID 選配置。設定接受後是否還待特定 reset,需看 MRSTT 與 PPSC;教材不能把送出 LDPE=1 直接當成所有情況都已生效。

frozen
已凍結;表示這組 personality 設定不能任意改成其他值,不表示控制器停止所有 I/O。
MRSTT
Minimum Required Reset Type;使 personality 變更生效所需的最低 reset 類型。
PERFS
Personality Freeze State;在 Set 是凍結請求,在 Get 是凍結或待凍結的回報。
CHPS
Change Personality Settings;指定 Set 是否要改變 personality 設定。
PPSC
Pending Personality Settings Change;表示存在尚待生效的 personality 設定變更。

避免把必要的解凍入口一起封死

09.06.當 Lockdown Persistence 已啟用,而此 personality 未凍結或不支援認證解凍,要求禁止整個 Set Features 或 FID 22h 的 Lockdown 必須回 Prohibition of Command Execution Not Supported。這是特定條件下的規則,不表示任何 FID 永遠都能被禁止。

認證命令有明確限定的例外

09.07.若持續性已啟用,且任一 personality 支援認證解凍,控制器與 Management Endpoint 必須允許指定 CDP Authentication、SPSP=0002h 的 Security Send/Receive,即使先前限制了這兩個 opcode。例外只涵蓋這種認證用途,不能擴張成所有 Security 命令都無條件允許。

SPSP
Security Protocol Specific;Security 命令的協定專用選擇,本篇 0002h 限定 CDP Authentication 用途。

解凍與目前禁止清單仍應分開觀察

09.08.成功的 Security Send 認證解凍若解凍的是 Lockdown Persistence Personality,持續性會停用。這不等於該命令本身直接移除每個目前禁止項目;後續狀態與是否跨 power cycle 保留應分別查證。本篇教到影響 Lockdown 的條件,不展開金鑰、驗證訊息與其他 personality 的操作。

閱讀相關規格圖表 → 限制何時消失,要看 CSEL 與持續性設定

10 同一廠商 FID 有不同定義時,用 UUID 選版本

10.01.廠商定義 FID 的 Lockdown 在 SCP=2 且相關命令與項目支援 UUID 選擇時,使用 CDW14.UIDX 選 UUID List 項目。LID 14h 對 SCP=2 的廠商 FID 查詢也可使用 UIDX;SCP≠2 時忽略 UIDX。UIDX 是清單索引,不是 FID 或 byte offset。

來源:Base 2.4 §5.2.16

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.16, 文件頁 406-407, PDF 頁 432-433

10.02.UIDX=0 不指定 UUID;非零索引需指向該資訊支援的有效 UUID。全 0、NVMe Invalid UUID 或不支援於該資訊的 UUID 會導向 Invalid Field in Command。

來源:Base 2.4 §8.1.31.2

來源:NVME-BASE-2.4, Rev. 2.4, §8.1.31.2, 文件頁 737-738, PDF 頁 763-764

先確認什麼情況需要 UUID

10.03.標準定義的主要流程通常不用選廠商 UUID。只有涉及同一個廠商 FID 的不同定義,且相關能力支援時,才需用 UUID 區分內容。SCP=2 是必要條件;對 Admin opcode 等其他 SCP,UIDX 會被忽略,不會改變操作種類。

Lockdown 與查詢應對到同一份定義

10.04.Lockdown 需要本命令及 Set Features 對該廠商 FID 支援 UUID 選擇,才以 CDW14 提供 UIDX。LID 14h 查詢 SCP=2 且指定 UUID 時,控制器應依該 UUID 回報廠商 FID 的限制資訊。沒有把這層定義對齊,清單上的 C0h 可能不是原本要限制的設定。

索引、項目位置與 UUID 本體有三種長度

10.05.UIDX 是 7 bits;UUID List 每項 32 bytes,項目中的 UUID 本體是 16 bytes。清單前 32 bytes 保留,第一項索引 1 位於 byte 32,第二項位於 byte 64;第 2 項的 UUID 本體從 byte 80 開始。命令填的是 2,不是 64 或 80。

0 不表示第一個 UUID

10.06.UIDX=0 表示不指定 UUID;有效非零索引必須對應受支援且有效的 UUID。指到全 0、NVMe Invalid UUID,或不支援於該資訊的 UUID,依通用 UUID 規則回 Invalid Field in Command。NVMe Invalid UUID 是 FFFFFFFF_FFFFFFFF_7FFFFFFF_FFFFFFFFh,用來保留已失效項目的索引位置;它和全 0 的清單終止值不同。清單末尾第 127 項必須為 0,不能把最大 7-bit 數當成一定可用的索引。

閱讀相關規格圖表 → 同一廠商 FID 有不同定義時,用 UUID 選版本

11 讀懂本篇的規格圖表

11.01.以下依概念整理規格中的圖表。每組先說明讀取順序與要判斷的問題,接著列出各圖的欄位或行為說明。可以由正文的連結跳到對應組別,也可以用這一節檢查自己能否把欄位連回完整操作。

圖表組 01 · 先理解:限制的是哪個操作從哪裡進來 · 2 張圖表

11.02.先把查詢 LID 14h 與修改 Lockdown 分成兩條箭頭,再接到被限制的管理命令;Figure 365 的 SCP/IFC/CSEL 各回答不同問題。

回到本節的解釋與範例

只讀建立本篇操作入口所需的共同欄位

11.03.Identify Controller 不整份複製;本篇 OACS 與必要的 UUID 能力依各欄位局部閱讀。

一起判讀的欄位或標示如何共同決定操作或結果帶入情境後怎麼讀
OACS bytes257:256:CFLS[10]/CCFLS[13]基本能力/控制器範圍能力;CCFLS1 要求 CFLS1。2400h=(1<<13)|(1<<10),不代表所有 OFI 都可禁止。
OPC:SQE CDW0[7:0]Lockdown24h;Get Log Page02h;Set Features09h;Get Features0Ah。整個 Set Features opcode09h 與單一 FID06h 是不同目標。
CID:SQE CDW0[31:16]主機指派命令編號,用於完成配對。CID7 與 CSS7 即使數字相同,也分別代表命令和控制器。
DPTR/命令專用 CDW需要收 Log 時 DPTR 提供資料 buffer;Lockdown 本身只使用 CDW10、14 的專用參數。LNGTH 或 NCFID 在回傳 buffer 內,不在 Lockdown 的 CQE 內。
CID
Command Identifier;主機指定的命令編號,配合佇列編號對應提交與完成。
SQE
Submission Queue Entry;提交佇列中承載一筆命令及參數的項目。
來源:Base 2.4 §3.1.3 · Base 2.4 §4.1.1 · Base 2.4 §5.2.14.2.1

來源:NVME-BASE-2.4, Rev. 2.4, §3.1.3, Figure 28, 文件頁 45-46, PDF 頁 71-72

來源:NVME-BASE-2.4, Rev. 2.4, §4.1.1, Figure 93, 文件頁 140-142, PDF 頁 166-168

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.14.2.1, Figure 338, 文件頁 352, PDF 頁 378

Base Figure 28 · Admin Command Support Requirements

一句話重點

Base28-1Lockdown 是獨立的 Admin 命令,OFI 是它要管理的目標。

來源:Base 2.4 §3.1.3

來源:NVME-BASE-2.4, Rev. 2.4, §3.1.3, Figure 28, 文件頁 45-46, PDF 頁 71-72

用例子讀懂

Base28-2送 Lockdown 時外層 OPC=24h;如果要禁止 Set Features 的 FID06h,06h 放 OFI 且 SCP2,不能把外層 OPC 改 06h。

Base Figure 93 · Common Command Format

一句話重點

Base93-1命令外框、目標操作與回傳 buffer 屬於不同層次。

來源:Base 2.4 §4.1.1

來源:NVME-BASE-2.4, Rev. 2.4, §4.1.1, Figure 93, 文件頁 140-142, PDF 頁 166-168

用例子讀懂

Base93-2Get Log 用 OPC02h 及 DPTR 收資料;Lockdown 用 OPC24h 及 CDW10/14 改狀態。CID 用於辨識各筆完成,並非控制器編號。

圖表組 02 · 先查支援層級,再查可禁止項目 · 1 張圖表

11.04.Figure 338 很大,本篇只讀 OACS 的 CFLS、CCFLS;先核對 byte 位置,再把位元接到 Figure 274 的 ELPF 和 Figure 365 的 CSEL。

回到本節的解釋與範例

Base Figure 338 · Identify – Identify Controller Data Structure, I/O Command Set Independent

一句話重點

Base338-1OACS 的兩個能力位元分別保證基本範圍與控制器擴充範圍。

來源:Base 2.4 §5.2.14.2.1

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.14.2.1, Figure 338, 文件頁 352, PDF 頁 378

用例子讀懂

Base338-2bytes256、257 讀到 00 24,合成 2400h;bits13、10 均 1,因此可用基本功能、CSEL1/2 及 ELPF1。其他 OACS 位元本例不作推論。

圖表組 04 · 把 LID 14h 的查詢問題寫完整 · 8 張圖表

11.05.Figure 274 解釋 CDW10 中間的 bits 14:8;275 解釋 CDW11 高 16 bits。Figure 204~208 則提供包住它們的長度與位移欄位。

回到本節的解釋與範例

先組成問題,再指定要查的控制器

11.06.Figure 274 的 bits 位置已經是 CDW10 的位置;Figure 275 則以 16-bit LSI 自身為起點,必須再放到 CDW11 高位。

一起判讀的欄位或標示如何共同決定操作或結果帶入情境後怎麼讀
ELPF:CDW10 bit140=Figure276;1=Figure277,後者需 CCFLS 支援。ELPF=1 不能只更換解析器,也要讓命令確實請求增強格式。
CNTTS:CDW10 bits13:120=可禁止;1=Admin Queue 已禁止;2=Management Endpoint 已禁止;3 保留。沒有 Management Endpoint 卻查 2,回 Invalid Field in Command。
SCP:CDW10 bits11:80=Admin opcode;2=Set Features FID;3=Management Interface opcode;4=其 PCIe opcode;1、5~F 保留。SCP2 的 06h 是 FID,不是 Admin opcode06h。
CNTLID:LSI bits15:0 → CDW11 bits31:16ELPF1 時指定控制器,FFFFh 查全部;ELPF0 時保留。CMD11=00070000h 中 0007 是控制器,不是 NUMDU。
來源:Base 2.4 §5.2.13.1.20

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.13.1.20, Figure 274, 文件頁 280, PDF 頁 306

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.13.1.20, Figure 275, 文件頁 280, PDF 頁 306

Base Figure 274 · Command and Feature Lockdown Log Specific Parameter Field

一句話重點

Base274-1LSP 同時選查詢種類與格式,不是只有一個「查 Lockdown」的開關。

LSP
Log Specific Parameter;Get Log 中依 Log 種類解讀的 7-bit 參數。
來源:Base 2.4 §5.2.13.1.20

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.13.1.20, Figure 274, 文件頁 280, PDF 頁 306

用例子讀懂

Base274-2ELPF=0、CNTTS=1、SCP=2:CDW10 bits 14:8 對應 12h,所以放入命令的部分值是 00001200h。加 LID14h 得 00001214h,還未加 NUMDL。

Base Figure 275 · Controller Identifier - Log Specific Identifier

一句話重點

Base275-1只有 ELPF=1 時,LSI 才被本 Log 解讀為 CNTLID。

來源:Base 2.4 §5.2.13.1.20

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.13.1.20, Figure 275, 文件頁 280, PDF 頁 306

用例子讀懂

Base275-2查控制器 7:LSI=0007h,實際放進 CDW11 高 16 bits 成為 00070000h;FFFFh 才是全體查詢,不是 0。

把 Log 的種類、長度、起點與接收 buffer 分開

11.07.範例採 OT0 且已知裝置支援所需長度與 offset;未定義的尾端資料不當作有效記錄。

一起判讀的欄位或標示如何共同決定操作或結果帶入情境後怎麼讀
DPTR主機提供可接收資料的 buffer;大小需容納要求的傳輸。不是把 Log 放在 Lockdown 的資料指標。
CDW10 NUMDL[31:16]/RAE[15]/LSP[14:8]/LID[7:0]NUMDL 是計數低 16bits;RAE 控制相關非同步事件是否保留,本例 0;LSP 依 274;LID14h。512/4-1=127,不能用 LNGTH2 代替 NUMDL。
CDW11 LSI[31:16]/NUMDU[15:0]LSI 依 275;合成 NUMD=(NUMDU<<16)|NUMDL,傳輸 bytes=(NUMD+1)×4。LSIFFFFh 查全體控制器,不表示傳 65536Dwords。
CDW12 LPOL/CDW13 LPOUOT0 時合成 64-bit byte offset,需 4-byte 對齊;超出 Log 大小會拒絕。要讀增強第二筆 offset18,不能直接作為未對齊的 Get Log 起點;可從 16 讀取包含它的 Dwords。
CDW14 OT[23]/UIDX[6:0]/CSI[31:24]OT0 為 bytes;OT1 是需支援的項目索引。UIDX 依 UUID 規則。CSI 有自己的 I/O 命令集選擇規則,不是 SCP。bits22:7 保留。本篇以 NVM 情境 CSI0、OT0 作例,絕不以 CSI2 代替 SCP2。
請求長度超過 Log 末端回完整 Log 後,多出的 Dwords 結果未定義,除非該 Log 另有規定;不能假設填 0。SZE18bytes 以 20-byte 傳輸容納時,只依 SZE 與 NCFID 讀有效內容。
CSI
I/O Command Set Identifier;選擇 I/O 命令集,NVM Command Set 使用 00h。
RAE
Retain Asynchronous Event;控制讀 Log 是否保留相關非同步事件。
來源:Base 2.4 §5.2.13

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.13, Figure 203, 文件頁 213, PDF 頁 239

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.13, Figure 204, 文件頁 213, PDF 頁 239

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.13, Figure 205, 文件頁 214, PDF 頁 240

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.13, Figure 206, 文件頁 214, PDF 頁 240

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.13, Figure 207, 文件頁 214, PDF 頁 240

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.13, Figure 208, 文件頁 214-215, PDF 頁 240-241

Base Figure 203 · Get Log Page – Data Pointer

一句話重點

Base203-1Log 資料經 DPTR 回主機記憶體,CQE 回的是完成結果。

來源:Base 2.4 §5.2.13

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.13, Figure 203, 文件頁 213, PDF 頁 239

用例子讀懂

Base203-2主機配置 512-byte buffer 並送 Get Log;完成成功後再讀 buffer 的 CFILA 與 LNGTH,不能把 CQE DW0 當這份清單。

Base Figure 205 · Get Log Page – Command Dword 11

一句話重點

Base205-1LSI 與 NUMDU 共用 CDW11,但不是同一個長度欄位。

來源:Base 2.4 §5.2.13

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.13, Figure 205, 文件頁 214, PDF 頁 240

用例子讀懂

Base205-2增強查 controller7、傳輸不足 65537Dwords:CDW11=00070000h,高位 7 是 CNTLID,低位 0 是 NUMDU。

Base Figure 206 · Get Log Page – Command Dword 12

一句話重點

Base206-1LPOL 選起讀位置,不能代替清單的項目數。

來源:Base 2.4 §5.2.13

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.13, Figure 206, 文件頁 214, PDF 頁 240

用例子讀懂

Base206-2OT0、LPOL16 從 byte16 開始;一般清單索引 0 在 byte4,增強清單索引 0 在 byte16,不能共用同一個換算。

Base Figure 207 · Get Log Page – Command Dword 13

一句話重點

Base207-1LPOU 是同一個 64-bit 起點的高位,不是第二段 buffer 的起點。

來源:Base 2.4 §5.2.13

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.13, Figure 207, 文件頁 214, PDF 頁 240

用例子讀懂

Base207-2起點 16bytes→LPOU0、LPOL16;不能把 NUMDU127 放 LPOU,否則會請求完全不同的 offset。

Base Figure 208 · Get Log Page – Command Dword 14

一句話重點

Base208-1OT 選 offset 單位,UIDX 選廠商定義,兩者不能混用。

來源:Base 2.4 §5.2.13

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.13, Figure 208, 文件頁 214-215, PDF 頁 240-241

用例子讀懂

Base208-2OT0 且 UIDX2 時 CDW14 低位 2 代表 UUID List 第 2 項;LPOL 仍以 bytes 計,不會因 UIDX 非零變成 index-offset。

圖表組 05 · 一般格式:一串代碼代表全體共同的項目 · 1 張圖表

11.08.Figure 276 由 CFILA → LNGTH → CFIL 讀,先確認查詢種類,再決定到底有幾個代碼可解讀。

CFIL
Command and Feature Identifier List;一般格式內由小到大排列的代碼清單。
回到本節的解釋與範例

每個代碼的意義來自 header,不來自清單位置

11.09.一般格式固定 512bytes;先核對 CS/SS,再讀 LNGTH 個單 byte 代碼。

一起判讀的欄位或標示如何共同決定操作或結果帶入情境後怎麼讀
CFILA byte0:CS[5:4]、SS[3:0]回映 CNTTS/SCP;[7:6]保留。CS0 的可禁止清單、CS1 的 Admin 已禁止清單描述全體控制器共同項目。CFILA12h→CS1、SS2。
bytes2:1 保留;LNGTH byte3LNGTH=n,直接表示清單 byte 數;0=空清單。n2 不是數量減 1,不可讀 3 筆。
CFIL bytes n+3:4每個值 1byte,由小到大排序;其餘 bytes511:n+4 保留。索引 0 在 offset4,內容 06h 才是 FID。
來源:Base 2.4 §5.2.13.1.20

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.13.1.20, Figure 276, 文件頁 281, PDF 頁 307

Base Figure 276 · Command and Feature Lockdown Log Page

一句話重點

Base276-1一般 Log 以 byte 長度限制代碼清單,不能掃到保留區。

來源:Base 2.4 §5.2.13.1.20

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.13.1.20, Figure 276, 文件頁 281, PDF 頁 307

用例子讀懂

Base276-212 00 00 02 06 07 的 LNGTH=2,只讀 byte4、5 的 06h、07h。若 LNGTH=0,沒有任何有效項目,不把 byte4 的 0 當命令。

圖表組 06 · 增強格式:分清至少一台與全部控制器 · 2 張圖表

11.10.Figure 277 給外框與步距,278 給每筆 CFI/ACNTL。拿 A/B 範例對照 276,才能看出增強格式增加的是什麼資訊。

回到本節的解釋與範例

外層 CFIA 說明清單種類,內層 CFIA 說明一筆項目的全體屬性

11.11.同名 CFIA 所在結構不同;先確認是 header byte1 還是描述器 byte1。

一起判讀的欄位或標示如何共同決定操作或結果帶入情境後怎麼讀
Header VER byte0/CFIA byte1VER0;CFIA 的 CS[5:4]與 SS[3:0]回映查詢,[7:6]保留。Header12h 是 Admin Queue 已禁止 FID,不是 ACNTL 值。
Header CNTLID bytes3:2回映請求;FFFFh 時收錄至少一台控制器回報的項目,其他值選指定控制器。同樣查 Admin 禁止 FID,FFFFh 與 0007h 是不同範圍。
SZE bytes7:4/NCFID9:8/CFIDS11:10總 byte 數/直接項目數/每筆 byte 數;header15:12 保留。16+2×2=20bytes,NCFID0 才是空清單。
第 i 筆從 16+i×CFIDS 開始按 CFI 值遞增排列,不能按 ACNTL 或 Controller Identifier 排序。i1、CFIDS2→offset18。
Descriptor CFI byte0/CFIA byte1CFI 是 SCP 選定種類的代碼;CFIA bit0 為 ACNTL,bits7:1 保留。06 00 中的 00 不表示 06h 目前全部允許。
ACNTL[0]1=全部控制器回報;0=至少一台但非全部。清單不含每項的控制器名單。需要找出哪台時,保留同一 CNTTS/SCP,改 CNTLID 逐一查。
來源:Base 2.4 §5.2.13.1.20

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.13.1.20, Figure 277, 文件頁 282-283, PDF 頁 308-309

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.13.1.20, Figure 278, 文件頁 283, PDF 頁 309

Base Figure 277 · Command and Feature Lockdown Log Page – Enhanced

一句話重點

Base277-1增強 header 分開提供總長度、項目數與每筆步距。

來源:Base 2.4 §5.2.13.1.20

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.13.1.20, Figure 277, 文件頁 282-283, PDF 頁 308-309

用例子讀懂

Base277-2NCFID=2、CFIDS=2、SZE=20:16-byte header 後兩筆分別從 16、18 開始。若把 NCFID 當 byte 數,就只會讀到第一筆。

Base Figure 278 · Command and Feature Identifier Descriptor

一句話重點

Base278-1ACNTL=0 仍是一筆有控制器回報的項目,只是不是全部都有。

來源:Base 2.4 §5.2.13.1.20

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.13.1.20, Figure 278, 文件頁 283, PDF 頁 309

用例子讀懂

Base278-2全體查詢回 06 00、07 01:06h 只在部分控制器符合,07h 全部符合;還不能由 06 00 知道具體是哪一台。

圖表組 07 · 完整編碼一次禁止與解除操作 · 2 張圖表

11.12.Figure 365 與 366 是同一筆命令的兩個 Dword。把完整算式對回各個 bits,再用 LID 14h 確認目標,而不是只看送出命令就假設已生效。

回到本節的解釋與範例

把操作、入口、控制器與禁止方向放回各自的位置

11.13.Lockdown 使用 opcode24h,沒有資料清單 payload;其他命令專用 Dword 保留。

payload
命令另外傳送的資料內容,與 SQE 裡的命令參數區分。
一起判讀的欄位或標示如何共同決定操作或結果帶入情境後怎麼讀
CDW10 CSEL[19:16]/CDW14 CSS[31:16]CSEL0 全體且 CSS 保留;1 指定 CSS 控制器;2 指定 CSS primary 的全部 secondaries;Fh 廠商定義;3~E 保留。CSEL2 不包含 primary 本身;CSS 不是 primary 則回 Invalid Controller Identifier。
CDW10 OFI[15:8]/SCP[3:0]SCP0 解 OFI 為 Admin opcode;2 為 Set Features FID;3、4 為管理介面的兩種命令集;其餘保留。SCP2、OFI06h 只選 FID06h 的設定操作。
CDW10 IFC[6:5]0=Admin Queue;1=Queue 加 Management Endpoint;2=Management Endpoint;3 保留。沒有 Endpoint 時 1、2 皆非法;SCP4 搭 IFC0 或 1 也非法。
CDW10 PRHBT[4]1 禁止,0 允許;不改變 OFI、IFC、CSEL 各自選出的範圍。00010612h 清 bit4→00010602h。
CDW14 UIDX[6:0]SCP2 及相關 UUID 能力成立才選廠商定義;0 不指定;非 SCP2 忽略。CSS7 與 UIDX2 可共存為 00070002h,不是二選一。
命令保留位CDW10[31:20]、[7];CDW14[15:7]保留。例子先將保留位清 0,再加入需要的欄位。
來源:Base 2.4 §5.2.16

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.16, Figure 365, 文件頁 405-406, PDF 頁 431-432

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.16, Figure 366, 文件頁 407, PDF 頁 433

Base Figure 365 · Lockdown – Command Dword 10

一句話重點

Base365-1CDW10 的五個選擇共同決定限制,PRHBT 自己不能表達完整意圖。

來源:Base 2.4 §5.2.16

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.16, Figure 365, 文件頁 405-406, PDF 頁 431-432

用例子讀懂

Base365-2(1<<16)|(6<<8)|(1<<4)|2=00010612h,代表控制器選擇 1、FID06h、Admin Queue、禁止;這裡的 1 還不是 Controller ID。

Base Figure 366 · Lockdown – Command Dword 14

一句話重點

Base366-1CSS 的意義由 CSEL 決定,UIDX 則是另一層廠商定義選擇。

來源:Base 2.4 §5.2.16

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.16, Figure 366, 文件頁 407, PDF 頁 433

用例子讀懂

Base366-2CSEL1、CSS7、UIDX0→CDW14=00070000h。CSEL2 且同樣 CSS7,會改成選 primary7 所屬的 secondary 集合,不是單一 controller7。

圖表組 08 · 把設定失敗與命令被禁止分開判斷 · 4 張圖表

11.14.Figure 367 是 Lockdown 本身的特定狀態;Figure 103 的 SC=23h 是後續命令被限制。用 Figure 99/101 把命令身分、狀態種類與代碼接起來。

回到本節的解釋與範例

先辨認完成的命令,再辨認錯誤種類與原因

11.15.以下 bits 以 CQE DW3 為起點;只有本篇需要的通用與命令特定代碼列入教學。

一起判讀的欄位或標示如何共同決定操作或結果帶入情境後怎麼讀
DW3 CID[15:0]/P[16]/STATUS[31:17]CID 配合 SQ Identifier 對回命令;P 辨認新完成項,STATUS 才是處理結果。同一輪有查詢與 Lockdown 時,不把查詢成功當設定成功。
SC[24:17]/SCT[27:25]SCT0 為 Generic,SCT1 為 Command Specific;SC 提供該類別的代碼。SCT0/23h=現有限制;SCT1/28h=不能建立要求的限制。
DNR[31]/M[30]/CRD[29:28]DNR1 表示原命令重送預期仍失敗;M1 表示另有錯誤資訊;CRD 只有 DNR0 且主機 ACRE1 時依 0 或 CRDT1~3 選重試延遲,其餘情況保留。它們不是 SC 高位。不能因為延遲一段時間就假設禁止狀態自動解除。
SC1Fh、28h:SCT1無效 Controller Identifier/Prohibition of Command Execution Not Supported。OFI 不可禁止必須 28h;某個所選介面不支援該 OFI 時應回 28h,也可回 Invalid Field。
SC23h、02h:SCT0Command Prohibited by Command and Feature Lockdown/Invalid Field in Command。後者檢查欄位或組合,不代表成功套用禁止。
CRD
Command Retry Delay;在有效條件成立時選擇命令重試延遲。
DNR
Do Not Retry;1 表示相同命令重送預期仍會失敗。
SQ
Submission Queue,主機放入命令的提交佇列。
P
Phase Tag,讓 host 判斷 CQ slot 是否包含新 completion 的翻轉 bit。
來源:Base 2.4 §5.2.16 · Base 2.4 §4.2.1 · Base 2.4 §4.2.3 · Base 2.4 §4.2.3.1

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.16, Figure 367, 文件頁 408, PDF 頁 434

來源:NVME-BASE-2.4, Rev. 2.4, §4.2.1, Figure 99, 文件頁 145, PDF 頁 171

來源:NVME-BASE-2.4, Rev. 2.4, §4.2.3, Figure 101, 文件頁 145-146, PDF 頁 171-172

來源:NVME-BASE-2.4, Rev. 2.4, §4.2.3.1, Figure 103, 文件頁 147,149, PDF 頁 173,175

Base Figure 367 · Lockdown – Command Specific Status Values

一句話重點

Base367-1Lockdown 的 1Fh/28h 描述設定命令失敗,不是後續操作受限制的 23h。

來源:Base 2.4 §5.2.16

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.16, Figure 367, 文件頁 408, PDF 頁 434

用例子讀懂

Base367-2CSEL2 配非 primary 的 CSS→1Fh;目標 OFI 不可禁止→28h。兩者都先辨認 SCT=1,再讀 SC。

Base Figure 99 · Completion Queue Entry: DW 3

一句話重點

Base99-1CQE DW3 先將命令身分與狀態分開,避免把兩次操作的完成結果配錯。

來源:Base 2.4 §4.2.1

來源:NVME-BASE-2.4, Rev. 2.4, §4.2.1, Figure 99, 文件頁 145, PDF 頁 171

用例子讀懂

Base99-2CID10 是 Lockdown、CID11 是後續 Set Features;CID10 成功而 CID11 回限制錯誤,符合先設定再攔截的流程。

Base Figure 101 · Completion Queue Entry: Status Field

一句話重點

Base101-1SC 要搭 SCT 判斷,不能只看一個十六進位錯誤碼。

來源:Base 2.4 §4.2.3

來源:NVME-BASE-2.4, Rev. 2.4, §4.2.3, Figure 101, 文件頁 145-146, PDF 頁 171-172

用例子讀懂

Base101-2DW3 中 SCT bits27:25=0、SC bits24:17=23h 時,才是通用 Lockdown 禁止狀態;Phase Tag 不屬於 SC。

Base Figure 103 · Status Code – Generic Command Status Values

一句話重點

Base103-1通用 SC=23h 指出命令因現有 Lockdown 限制而中止。

來源:Base 2.4 §4.2.3.1

來源:NVME-BASE-2.4, Rev. 2.4, §4.2.3.1, Figure 103, 文件頁 147,149, PDF 頁 173,175

用例子讀懂

Base103-2設定成功後送被限制的 Set Features,讀到 SCT0、SC23h;不是在說 LID23h,也不是 Lockdown opcode23h。

圖表組 09 · 限制何時消失,要看 CSEL 與持續性設定 · 6 張圖表

11.16.Figure 518/519 對照輸入 LDPE 和輸出 LDPS;512~514 與 292 僅補足 PERID、凍結、待生效狀態與認證支援,避免把持續性當成單一無條件開關。

回到本節的解釋與範例

讀目前狀態、待生效狀態與支援能力,三者不能互相代替

11.17.只教 Lockdown 持續性必需的 Personality02h;不展開其他 personality 設定或認證封包。

一起判讀的欄位或標示如何共同決定操作或結果帶入情境後怎麼讀
FID22h/PERID02h前者選 Configurable Device Personality;後者選 Lockdown Persistence,這個 personality 無額外 data buffer。FID 與 PERID 各占自己的欄位,不能互換。
Set CDW11 LDPE[0]/Get CQE DW1 LDPS[0]設定跨 power-cycle 持續性/回報目前狀態;各自 bits31:1 保留。只把 LDPE1 套用到 CSEL0 的全體禁止持續性規則。
CDW13 CHPS[9]/PERFS[8]/PERID[7:0]Set 的 CHPS1 請求改設定,0 不改;PERFS1 請求凍結,0 不是已凍結對象的通用解凍方法。Get 忽略 CHPS/PERFS。對尚未凍結的 PERID02h 要求改設定可示範 202h;不代表已完成所有能力與重設條件。
Get CQE DW0 PMDSS[10]/PPSC[9]/PERFS[8]/PERID[7:0]選 PERID02h 時:是否製造預設/是否有待變更/凍結或待凍結/對象;高位保留。PPSC1 表示不能把請求接受與設定已生效當成同一件事。
Properties PPS byte0/PERID byte1/MRSTT byte2PPS5bytes;PERID 辨認對象;MRSTT0 無 reset、1 Controller Level、2 排除 Controller Reset 的 Limited Controller Level、3 subsystem reset、4 main power cycle。MRSTT0 的變更須在 Set 成功前套用;非零需滿足對應 reset 條件。
Properties AUS byte3bit0 PCAS 支援 Physical Credential Authentication;bit1 PKAS 支援 Programmable Key Authentication;高位保留,0 表示沒有認證解凍方法。AUS2 只設 bit1,不是兩個 bit 都 1。
Properties byte4 PSCUDE[0]表示改此 personality 是否可能影響 user data;[7:1]保留。不是目前有多少命令被禁止,也不是凍結狀態。
已啟用持續性時的命令互動若未凍結或無認證解凍支援,不准禁止 Set Features 或 FID22h;若任一 personality 支持認證解凍,允許指定 CDP Authentication/SPSP0002h 的 Security Send/Receive。不把特定認證用途的例外擴張到所有 Security 操作。
PSCUDE
Personality Settings Change User Data Effect;表示配置變更是否可能影響使用者資料。
PMDSS
Personality Manufacturing Default Settings State;表示設定是否為製造預設值。
PCAS
Physical Credential Authentication Support;支援以實體憑證認證解凍。
PKAS
Programmable Key Authentication Support;支援以可程式化金鑰認證解凍。
AUS
Authenticated Unfreeze Support;支援哪些認證解凍方法的位元欄位。
PPS
Personality Properties Size;一筆 personality 屬性結構的 byte 大小。
來源:Base 2.4 §5.2.13.1.28 · Base 2.4 §5.2.30.1.25 · Base 2.4 §5.2.30.1.25.4

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.13.1.28, Figure 292, 文件頁 291-293, PDF 頁 317-319

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.30.1.25, Figure 512, 文件頁 485, PDF 頁 511

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.30.1.25, Figure 513, 文件頁 485-486, PDF 頁 511-512

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.30.1.25, Figure 514, 文件頁 486-487, PDF 頁 512-513

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.30.1.25.4, Figure 518, 文件頁 493, PDF 頁 519

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.30.1.25.4, Figure 519, 文件頁 494, PDF 頁 520

Base Figure 292 · Personality Properties Data Structure

一句話重點

Base292-1Personality Properties 的 AUS 說明能否認證解凍,MRSTT 說明設定所需的 reset 條件。

來源:Base 2.4 §5.2.13.1.28

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.13.1.28, Figure 292, 文件頁 291-293, PDF 頁 317-319

用例子讀懂

Base292-2PERID02h 的 AUS=02h 表示支援 Programmable Key Authentication;MRSTT4 表示需 main power cycle。AUS 的 2 不是 PERID2,也不是兩個方法都支援。

Base Figure 512 · Personality Identifier List

一句話重點

Base512-1PERID02h 是 FID22h 裡的一種 personality,不是 FID02h。

來源:Base 2.4 §5.2.30.1.25

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.30.1.25, Figure 512, 文件頁 485, PDF 頁 511

用例子讀懂

Base512-2先選 Configurable Device Personality Feature22h,再用 PERID02h 選 Lockdown Persistence;這種 personality 不使用資料 buffer。

Base Figure 513 · Configurable Device Personality - Command Dword 13

一句話重點

Base513-1改設定與凍結是獨立位元,PERID 選擇它們操作的對象。

來源:Base 2.4 §5.2.30.1.25

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.30.1.25, Figure 513, 文件頁 485-486, PDF 頁 511-512

用例子讀懂

Base513-2CHPS1、PERFS0、PERID02h→CDW13=00000202h;只代表本例請求改設定且保持未凍結,不能用於直接解凍已凍結對象。

Base Figure 514 · Configurable Device Personality – Get Features Completion Queue Entry Dword 0

一句話重點

Base514-1DW0 回待生效與凍結狀態,不能只讀 DW1 的 LDPS 就省略它。

來源:Base 2.4 §5.2.30.1.25

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.30.1.25, Figure 514, 文件頁 486-487, PDF 頁 512-513

用例子讀懂

Base514-2DW0=00000302h 表示 PERID02h、PERFS1、PPSC1;可能仍有待生效變更,PERFS 也可表示待凍結,不可一律當成所有設定都已完成。

Base Figure 518 · Lockdown Persistence Personality – Command Dword 11

一句話重點

Base518-1LDPE 是全體限制的跨 power-cycle 設定,不是立即禁止某個 OFI。

來源:Base 2.4 §5.2.30.1.25.4

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.30.1.25.4, Figure 518, 文件頁 493, PDF 頁 519

用例子讀懂

Base518-2CDW11 bit0=1 要求啟用 Lockdown Persistence;仍需另外的 Lockdown 命令指定要禁止哪個 FID 或 opcode。

Base Figure 519 · Lockdown Persistence Personality – Completion Queue Entry Dword 1

一句話重點

Base519-1LDPS 回在 CQE DW1,顯示目前持續性狀態。

來源:Base 2.4 §5.2.30.1.25.4

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.30.1.25.4, Figure 519, 文件頁 494, PDF 頁 520

用例子讀懂

Base519-2查 PERID02h,DW1=1 代表持續性啟用;這不是目前禁止 1 個 FID,也不是 ACNTL1。

圖表組 10 · 同一廠商 FID 有不同定義時,用 UUID 選版本 · 3 張圖表

11.18.Figure 782 說明命令只帶索引;347/348 說明索引對到哪一項與哪 16 bytes。再回到 Figure 366 和 208,確認 UIDX 放在哪個命令。

回到本節的解釋與範例

把命令索引接到清單,再接到 UUID 本體

11.19.只讀廠商 FID 定義選擇所需的索引與格式;不將 UUID 當作權限憑證或密碼。

一起判讀的欄位或標示如何共同決定操作或結果帶入情境後怎麼讀
UIDX bits6:00 不指定 UUID;非零指向 UUID List 有效項目,還需該資訊支援該 UUID。C0h 是 FID 候選值,不可能原封不動放進 7-bit UIDX。
List bytes31:0/entry i at32×i前 32bytes 保留,i=1~126 可含有效項目;第 127 項清 0。i2→offset64,和 UIDX2 的單位不同。
Entry ULEH byte0,IDASSOC[1:0]0 未回報關聯;1 與 PCI Vendor ID 廠商相關;2 與 PCI Subsystem Vendor ID 廠商相關;3 保留。高位及 bytes15:1 保留。IDASSOC1 不是 UUID List 索引 1。
Entry UUID bytes31:16128-bit UUID;全 0、NVMe Invalid UUID 或不支持該資訊的 UUID 不可作有效選擇。第 2 項 UUID 的實際 bytes 是 80~95;命令不傳這 16bytes,只傳索引。
IDASSOC
Identifier Association;UUID 與廠商識別資訊的關聯分類。
ULEH
UUID Lists Entry Header;單一 UUID 項目的 header。
來源:Base 2.4 §5.2.14.2.14 · Base 2.4 §8.1.31.2

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.14.2.14, Figure 347, 文件頁 396, PDF 頁 422

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.14.2.14, Figure 348, 文件頁 396, PDF 頁 422

來源:NVME-BASE-2.4, Rev. 2.4, §8.1.31.2, Figure 782, 文件頁 738, PDF 頁 764

Base Figure 347 · UUID List

一句話重點

Base347-1UUID List 從索引 1 開始,前 32bytes 保留,不能把 offset0 當第一項。

來源:Base 2.4 §5.2.14.2.14

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.14.2.14, Figure 347, 文件頁 396, PDF 頁 422

用例子讀懂

Base347-2索引 2 的 entry 起點=32×2=64;命令仍填 UIDX2。清單最多 126 個非零項,127 項強制清 0。

Base Figure 348 · UUID List Entry

一句話重點

Base348-1一個 32-byte entry 裡,UUID 本體只占後 16bytes。

來源:Base 2.4 §5.2.14.2.14

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.14.2.14, Figure 348, 文件頁 396, PDF 頁 422

用例子讀懂

Base348-2索引 2 的 entry 從 64 開始;header 在 64,UUID 在 80~95。IDASSOC 只描述廠商關聯,不能用來代替 128-bit UUID。

Base Figure 782 · UUID Index Field

一句話重點

Base782-1UIDX 只指定 UUID 清單位置,0 代表不指定。

來源:Base 2.4 §8.1.31.2

來源:NVME-BASE-2.4, Rev. 2.4, §8.1.31.2, Figure 782, 文件頁 738, PDF 頁 764

用例子讀懂

Base782-2UIDX2 對第 2 項 UUID;如果那項 UUID 全 0 或對本資訊不受支援,就回 Invalid Field,而不是自動換第 1 項。

學完後想一想

1. LID 14h 可禁止清單含 06h,就代表目前已禁止嗎?

12.01.不代表。先看 SCP 確認它是哪種代碼,CNTTS=0 只表示可禁止。要查目前 Admin Queue 限制,應用同一種類並選 CNTTS=1,再配合正確格式與控制器範圍。

來源

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.13.1.20, 文件頁 279-280, PDF 頁 305-306

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.13.1.20, 文件頁 281, PDF 頁 307

2. 全體增強清單回 06 00,能說全部控制器都允許 06h 嗎?

12.02.不能。這是一筆已回報的 CFI=06h,ACNTL=0 表示至少一台但非全部符合這次查詢。如果 CNTTS=1,它表示只有部分控制器目前禁止;要找是哪台需用特定 CNTLID 查詢。

來源

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.13.1.20, 文件頁 282-283, PDF 頁 308-309

3. 要解除 controller7 的 FID06h 限制,能只送 PRHBT=0 嗎?

12.03.還需保留 SCP=2、OFI=06h、IFC=0、CSEL=1、CSS=7 等相同選擇,並確保執行 Lockdown 的入口仍允許。PRHBT 只決定禁止或允許,不指定對象。

來源

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.16, 文件頁 405-407, PDF 頁 431-433

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.16, 文件頁 406-407, PDF 頁 432-433

4. LDPE=1,是否每個 CSEL 建立的限制都能跨斷電保留?

12.04.不是。跨 power cycle 的 Lockdown Persistence 規則針對 CSEL=0 的全體限制;CSEL=1、2 仍依其在 power cycle 或後續解除時結束的規則。

來源

來源:NVME-BASE-2.4, Rev. 2.4, §8.1.5, 文件頁 598-599, PDF 頁 624-625

5. 增強 Log 第二筆在 byte18,UUID 第二項在 byte64,兩個 2 可以互用嗎?

12.05.不能。CFIDS=2 時增強 Log 第 2 筆從 16+1×2=18 開始;UIDX=2 選 UUID 第 2 項,其 entry 從 64 開始。OT=0 的 Get Log 起點還要 4-byte 對齊,所以讀含 byte18 的資料可從 16 開始。索引和值的位置是不同單位。

來源

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.13.1.20, 文件頁 282-283, PDF 頁 308-309

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.13.1.20, 文件頁 279-280, PDF 頁 305-306

來源:NVME-BASE-2.4, Rev. 2.4, §5.2.16, 文件頁 406-407, PDF 頁 432-433