先知道能限制什麼
01-01先查裝置是否支援整體限制或逐一指定控制器,再查哪些操作允許被禁止。功能存在、操作受支援、操作可禁止,是三個不同問題。
NVMe · 規格與原理
00.01.Command and Feature Lockdown 處理的是「哪些管理操作,在什麼入口、哪些控制器上不准執行」。理解它需要把能力、目前狀態與修改命令接起來,再分清限制何時解除、斷電後是否保留。本文以一個 FID 的限制與讀回為例,從全貌走到命令欄位、兩種 Log 格式與必要的持續性例外。
01-01先查裝置是否支援整體限制或逐一指定控制器,再查哪些操作允許被禁止。功能存在、操作受支援、操作可禁止,是三個不同問題。
02-01依序選操作、接收入口與控制器。只禁止一項設定、只限制某個入口,或只選某台控制器,會得到不同的影響範圍。
03-01一般格式看全體共同項目;增強格式看指定控制器或全體彙整,再分辨某項是否所有控制器都符合。用相同條件讀回才有比較意義。
04-01限制可以用命令解除;經過斷電循環後是否仍保留,還要看最初選的控制器範圍與持續性設定。最後補足認證解凍與廠商定義的必要條件。
00.02.適合學過 OS、Computer Organization 並了解 SSD 基本概念的讀者。以 PCIe 主機管理流程為主要情境;Management Endpoint 只解釋 Base 明載的關係。所有控制器編號、可禁止清單及命令編碼案例均為說明性範例,實際可用項目由裝置能力決定。
00.03.可以用一個問題帶著讀:如果只想限制控制器 7 經 Admin Queue 修改 FID 06h,應查哪些能力、送哪些參數、用什麼回覆證明限制成立?沿著這條線,清單、欄位與錯誤碼才有各自的位置。
00.04.中文教學先補足每一步的理由,再在問答前整理相關規格圖表的欄位關係。兩種 Log 的長度、控制器編號、代碼清單與 UUID 索引會各自演算,避免只記住縮寫而失去它所描述的對象。
01.01.Command and Feature Lockdown 讓主機限制特定管理命令,或 Set Features 對某個 FID 的設定操作。限制同時有操作種類、接收介面與控制器範圍;LID 14h 用來查可禁止項目與目前禁止狀態,Lockdown 命令用來改變它們。
來源:NVME-BASE-2.4, Rev. 2.4, §8.1.5, 文件頁 597-599, PDF 頁 623-625
01.02.假設一台機器已完成儲存裝置設定,接下來希望限制某些管理操作。Lockdown 讓控制器在收到指定操作時拒絕執行;它不修改 namespace 的資料格式,也沒有替每個 LBA 建立讀寫權限表。先辨認要限制的是哪種命令,才能選對入口。
01.03.Admin 命令用 opcode 選動作;Set Features 的命令內又用 FID 選設定項目。Lockdown 的 SCP=0 表示 OFI 是 Admin opcode,SCP=2 表示 OFI 是 Set Features 的 FID。相同的 06h 放在不同 SCP 底下,代表的操作可以完全不同。
01.04.先送 Lockdown,控制器成功完成後,對選定範圍建立限制。之後再有符合條件的命令進來,才會因限制而被拒絕。要分清「成功設定禁止」和「後來某個命令被禁止」的完成結果;前者成功,後者失敗,並不矛盾。
01.05.可禁止清單是裝置提供的能力,不是目前的黑名單;目前禁止清單才表示限制狀態。兩者都在 LID 14h,透過不同 CNTTS 選擇。沒有先保留查詢的種類與介面,就算拿到一串 opcode,也無法判斷它代表能禁止還是已禁止。
01.06.哪些命令或 FID 可被禁止由廠商決定,甚至可包含 Lockdown 自己。因此不能看到功能支援位元就假設每個管理操作都能限制,也不能先把解除限制的入口禁止,再假設一定能從同一條路徑解除。
02.01.Identify Controller 的 OACS.CFLS 表示基本 Lockdown 能力,CCFLS 表示可選控制器的擴充能力。CFLS=1 保證 CSEL=0 與 LID 14h;CCFLS=1 還要求 CSEL=1、2 與增強版 Log。每個 OFI 能否被禁止仍需查清單。
來源:NVME-BASE-2.4, Rev. 2.4, §8.1.5, 文件頁 599, PDF 頁 625
02.02.OACS 在 Identify Controller bytes 257:256,bit 10 是 CFLS、bit 13 是 CCFLS。這是 16-bit 欄位;從原始 bytes 讀到 00 24 時,以 little-endian 合成 2400h,再看各 bit,不能把第一個 byte 當成全部能力。
02.03.CFLS=1 的控制器必須支援整個 NVM subsystem 範圍的 Lockdown,以及 Command and Feature Lockdown Log。它沒有直接承諾可以逐一挑控制器;因此第一層問題是功能存在,第二層才是控制器選擇。
02.04.CCFLS=1 必須同時支援基本能力,以及 CSEL=1 的單一控制器、CSEL=2 的某 primary controller 所屬 secondary controllers。對應的 ELPF=1 Log 能查指定控制器或彙整多個控制器。CCFLS=1、CFLS=0 不是合法的能力組合。
02.05.通過能力檢查後,以 CNTTS=0 查目標種類的可禁止清單。如果要限制 FID,查 SCP=2;要限制 Admin opcode,查 SCP=0。某個命令本來就受控制器支援,也不表示它允許被 Lockdown 禁止,兩個問題不能互相代替。
03.01.IFC 選命令接收介面:00b 為 Admin Submission Queue,01b 為該 Queue 加 Management Endpoint,10b 為 Management Endpoint。CSEL 選全部控制器、單一控制器或某 primary 的 secondary controllers,CSS 再提供所需控制器編號。
來源: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 封包格式。
03.03.IFC 與 CSEL 一起決定適用範圍。CSEL=0 選 subsystem 全部控制器;1 選 CSS 指定的控制器;2 選 CSS 所指 primary controller 的全部 secondary controllers。最後一種不是把 primary 自己也列入目標。CSEL=Fh 是廠商定義,3h~Eh 保留。
| 固定條件 | 改變的欄位 | 限制涵蓋的對象 |
|---|---|---|
| FID06h、Admin Queue | CSEL0 | 全部控制器 |
| FID06h、Admin Queue | CSEL1、CSS7 | 控制器 7 |
| FID06h、Admin Queue | CSEL2、CSS7 | primary7 所屬 secondaries,非 primary7 本身 |
| FID06h、controller7 | IFC 由 0 改 2 | 從 Admin Queue 改為 Management Endpoint |
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」。
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 命令集。
03.06.若 CCFLS=0,非零 CSEL 的 Lockdown 會以 Invalid Field in Command 拒絕。即使 CSS 看起來是有效的控制器編號,也不能跳過這項能力條件;編號有效與功能支援是不同層次。
04.01.LID 14h 的 SCP 選項目種類,CNTTS=00b 查可禁止、01b 查 Admin Queue 目前禁止、10b 查 Management Endpoint 目前禁止。ELPF=0 使用一般格式;ELPF=1 使用增強格式,並以 LSI.CNTLID 選控制器,FFFFh 查所有控制器。
來源: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,會遺失足以改變清單意義的條件。
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 的專屬回覆。
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。
04.06.本篇範例 OT=0,以 byte offset 指向 Log 內的起點,LPOL/LPOU 合成 64-bit 值且需 4-byte 對齊。ELPF 是 Log 格式選擇,不是 offset 單位。若要用 OT=1 的 index-offset,必須有對應支援與項目定義,不能看到清單就自行把第 2 筆索引填成 byte offset 2。
05.01.一般 Log 固定 512 bytes,CFILA 回報查詢種類,LNGTH 直接表示後方代碼清單的 byte 數,清單從 byte 4 開始並由小到大排列。對全體控制器的可禁止項目與 Admin Queue 目前禁止項目,不能把一般清單當成任何一台控制器的聯集。
來源:NVME-BASE-2.4, Rev. 2.4, §5.2.13.1.20, 文件頁 281, PDF 頁 307
05.02.byte 0 的 CFILA[5:4] 是 CS、[3:0] 是 SS,分別回映查詢 CNTTS 與 SCP;[7:6] 保留。bytes 2:1 保留,byte 3 才是 LNGTH。這個清單沒有逐項附上「這是 opcode 還是 FID」,必須先由 header 判斷。
05.03.LNGTH=n 時,有 n 個各 1-byte 的代碼,位置是 bytes 4 到 n+3。LNGTH=0 沒有有效代碼;不是 1 個值為 0 的項目。LNGTH 與 Get Log 的 NUMD 不同,不能對 LNGTH 再加 1。
| byte offset | 範例值 | 如何解讀 |
|---|---|---|
| 0 | 12h | CS1:Admin 已禁止;SS2:FID |
| 1~2 | 00 00 | 保留,不是清單內容 |
| 3 | 02h | LNGTH=2,直接計數 |
| 4~5 | 06 07 | 2 筆 FID:06h、07h |
| 6~511 | 保留 | 不解析為其他 FID |
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.01.增強 Log 用 16-byte header 說明版本、查詢種類、CNTLID、SZE、NCFID 與 CFIDS,描述器按 CFI 遞增排列。CNTLID=FFFFh 時清單含至少一台控制器回報的項目;每筆 ACNTL=1 才表示所有控制器都回報這項。
來源: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。
06.03.第 i 筆從 16+i×CFIDS 開始。若 NCFID=2、CFIDS=2,兩筆起點是 16、18,清單結束於 byte 19,SZE=20 的範例完全裝得下。若未來描述器尺寸不同,應依回報步距前進,不能把 2 bytes 寫死成所有版本通用規則。
06.04.header byte 1 的 CFIA 包含 CS/SS,說明整份清單的種類;描述器 byte 1 的 CFIA 只有 bit 0 的 ACNTL 是本篇定義的有效屬性。把 header 的 12h 用來解讀 ACNTL,或把描述器的 01h 當 SCP,都會讀錯。
06.05.CNTLID=FFFFh 時,只要至少一台控制器回報某 CFI,就可在清單看到它。ACNTL=1 表示所有控制器都回報,0 表示至少一台但非全部。它不列出是哪幾台,因此需要進一步以各 CNTLID 查詢,才能建立精確的控制器對照表。
06.06.NCFID=0 才是沒有描述器;ACNTL=0 是一筆已存在項目的屬性。以 A/B 的例子,06h 留在全體增強清單內,但不應出現在一般格式的全體共同禁止清單中。比較兩種格式時,先確認同一 SCP、CNTTS 和查詢期間。
07.01.Lockdown 使用 CDW10 的 CSEL、OFI、IFC、PRHBT、SCP,以及 CDW14 的 CSS/UIDX。PRHBT=1 禁止、0 允許;其他欄位保留原本要作用的種類、介面與控制器集合。重複禁止已禁止項目或允許已允許項目,本身不是錯誤。
來源:NVME-BASE-2.4, Rev. 2.4, §5.2.16, 文件頁 405-407, PDF 頁 431-433
07.02.本例限制的是 FID,因此 SCP=2;FID 是 06h,因此 OFI=6;只針對 Admin Queue,因此 IFC=0;要禁止,因此 PRHBT=1;只針對控制器 7,因此 CSEL=1、CSS=7。每個值都來自一句具體需求,而不是從另一個命令整段複製。
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,並未完成這項設定。
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.01.Lockdown 設定本身可因項目不可禁止、介面不支援或控制器選擇無效而失敗。28h 是 Prohibition of Command Execution Not Supported;1Fh 是 Invalid Controller Identifier。已受限制的 Admin 命令則回通用狀態 Command Prohibited by Command and Feature Lockdown。
來源: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。
來源: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 還是被限制的後續命令。
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.01.CSEL=0 的全體限制在 Lockdown Persistence 啟用時跨 power cycle 保留;停用時持續到 subsystem power cycle 或後續解除。CSEL=1、2 的限制持續到 power cycle 或後續解除,不因 LDPE=1 自動取得全體限制的跨斷電保留規則。
來源: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 必須仍被允許。
來源:NVME-BASE-2.4, Rev. 2.4, §5.2.30.1.25.4.1, 文件頁 494, PDF 頁 520
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。
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 要分開讀。
| 建立限制時的 CSEL | Lockdown Persistence | 斷電循環後的規則 |
|---|---|---|
| 0:全部控制器 | 已啟用 | 保留,後續 Lockdown 可解除 |
| 0:全部控制器 | 已停用 | 原禁止不跨 power cycle 保留 |
| 1:單一控制器 | 任一狀態 | 不因 LDPE1 而跨 power cycle 保留 |
| 2:指定 primary 的 secondaries | 任一狀態 | 同樣在 power cycle 或後續解除時結束 |
09.05.Personality 是裝置的一組配置,frozen 表示不允許再任意改變該配置。CDW13 的 CHPS 控制是否改設定,PERFS 控制凍結請求,PERID 選配置。設定接受後是否還待特定 reset,需看 MRSTT 與 PPSC;教材不能把送出 LDPE=1 直接當成所有情況都已生效。
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 命令都無條件允許。
09.08.成功的 Security Send 認證解凍若解凍的是 Lockdown Persistence Personality,持續性會停用。這不等於該命令本身直接移除每個目前禁止項目;後續狀態與是否跨 power cycle 保留應分別查證。本篇教到影響 Lockdown 的條件,不展開金鑰、驗證訊息與其他 personality 的操作。
10.01.廠商定義 FID 的 Lockdown 在 SCP=2 且相關命令與項目支援 UUID 選擇時,使用 CDW14.UIDX 選 UUID List 項目。LID 14h 對 SCP=2 的廠商 FID 查詢也可使用 UIDX;SCP≠2 時忽略 UIDX。UIDX 是清單索引,不是 FID 或 byte offset。
來源: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。
來源:NVME-BASE-2.4, Rev. 2.4, §8.1.31.2, 文件頁 737-738, PDF 頁 763-764
10.03.標準定義的主要流程通常不用選廠商 UUID。只有涉及同一個廠商 FID 的不同定義,且相關能力支援時,才需用 UUID 區分內容。SCP=2 是必要條件;對 Admin opcode 等其他 SCP,UIDX 會被忽略,不會改變操作種類。
10.04.Lockdown 需要本命令及 Set Features 對該廠商 FID 支援 UUID 選擇,才以 CDW14 提供 UIDX。LID 14h 查詢 SCP=2 且指定 UUID 時,控制器應依該 UUID 回報廠商 FID 的限制資訊。沒有把這層定義對齊,清單上的 C0h 可能不是原本要限制的設定。
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。
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 數當成一定可用的索引。
11.01.以下依概念整理規格中的圖表。每組先說明讀取順序與要判斷的問題,接著列出各圖的欄位或行為說明。可以由正文的連結跳到對應組別,也可以用這一節檢查自己能否把欄位連回完整操作。
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 內。 |
來源: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
Base28-1Lockdown 是獨立的 Admin 命令,OFI 是它要管理的目標。
來源: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。
Base93-1命令外框、目標操作與回傳 buffer 屬於不同層次。
來源: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 用於辨識各筆完成,並非控制器編號。
11.04.Figure 338 很大,本篇只讀 OACS 的 CFLS、CCFLS;先核對 byte 位置,再把位元接到 Figure 274 的 ELPF 和 Figure 365 的 CSEL。
回到本節的解釋與範例Base338-1OACS 的兩個能力位元分別保證基本範圍與控制器擴充範圍。
來源: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 位元本例不作推論。
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 bit14 | 0=Figure276;1=Figure277,後者需 CCFLS 支援。 | ELPF=1 不能只更換解析器,也要讓命令確實請求增強格式。 |
| CNTTS:CDW10 bits13:12 | 0=可禁止;1=Admin Queue 已禁止;2=Management Endpoint 已禁止;3 保留。 | 沒有 Management Endpoint 卻查 2,回 Invalid Field in Command。 |
| SCP:CDW10 bits11:8 | 0=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:16 | ELPF1 時指定控制器,FFFFh 查全部;ELPF0 時保留。 | CMD11=00070000h 中 0007 是控制器,不是 NUMDU。 |
來源: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
Base274-1LSP 同時選查詢種類與格式,不是只有一個「查 Lockdown」的開關。
來源: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。
Base275-1只有 ELPF=1 時,LSI 才被本 Log 解讀為 CNTLID。
來源: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。
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 LPOU | OT0 時合成 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 讀有效內容。 |
來源: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
Base203-1Log 資料經 DPTR 回主機記憶體,CQE 回的是完成結果。
來源: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 當這份清單。
Base204-1NUMDL 計 Dword 數減 1,LSP 另決定 Log 的問題。
來源:NVME-BASE-2.4, Rev. 2.4, §5.2.13, Figure 204, 文件頁 213, PDF 頁 239
Base204-2讀 512bytes→NUMDL127=007Fh;LSP12h 查目前禁止 FID,LID14h,合成 CDW10=007F1214h。
Base205-1LSI 與 NUMDU 共用 CDW11,但不是同一個長度欄位。
來源: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。
Base206-1LPOL 選起讀位置,不能代替清單的項目數。
來源:NVME-BASE-2.4, Rev. 2.4, §5.2.13, Figure 206, 文件頁 214, PDF 頁 240
Base206-2OT0、LPOL16 從 byte16 開始;一般清單索引 0 在 byte4,增強清單索引 0 在 byte16,不能共用同一個換算。
Base207-1LPOU 是同一個 64-bit 起點的高位,不是第二段 buffer 的起點。
來源:NVME-BASE-2.4, Rev. 2.4, §5.2.13, Figure 207, 文件頁 214, PDF 頁 240
Base207-2起點 16bytes→LPOU0、LPOL16;不能把 NUMDU127 放 LPOU,否則會請求完全不同的 offset。
Base208-1OT 選 offset 單位,UIDX 選廠商定義,兩者不能混用。
來源: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。
11.08.Figure 276 由 CFILA → LNGTH → CFIL 讀,先確認查詢種類,再決定到底有幾個代碼可解讀。
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 byte3 | LNGTH=n,直接表示清單 byte 數;0=空清單。 | n2 不是數量減 1,不可讀 3 筆。 |
| CFIL bytes n+3:4 | 每個值 1byte,由小到大排序;其餘 bytes511:n+4 保留。 | 索引 0 在 offset4,內容 06h 才是 FID。 |
來源:NVME-BASE-2.4, Rev. 2.4, §5.2.13.1.20, Figure 276, 文件頁 281, PDF 頁 307
Base276-1一般 Log 以 byte 長度限制代碼清單,不能掃到保留區。
來源: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 當命令。
11.10.Figure 277 給外框與步距,278 給每筆 CFI/ACNTL。拿 A/B 範例對照 276,才能看出增強格式增加的是什麼資訊。
回到本節的解釋與範例11.11.同名 CFIA 所在結構不同;先確認是 header byte1 還是描述器 byte1。
| 一起判讀的欄位或標示 | 如何共同決定操作或結果 | 帶入情境後怎麼讀 |
|---|---|---|
| Header VER byte0/CFIA byte1 | VER0;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 byte1 | CFI 是 SCP 選定種類的代碼;CFIA bit0 為 ACNTL,bits7:1 保留。 | 06 00 中的 00 不表示 06h 目前全部允許。 |
| ACNTL[0] | 1=全部控制器回報;0=至少一台但非全部。清單不含每項的控制器名單。 | 需要找出哪台時,保留同一 CNTTS/SCP,改 CNTLID 逐一查。 |
來源: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
Base277-1增強 header 分開提供總長度、項目數與每筆步距。
來源: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 數,就只會讀到第一筆。
Base278-1ACNTL=0 仍是一筆有控制器回報的項目,只是不是全部都有。
來源: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 知道具體是哪一台。
11.12.Figure 365 與 366 是同一筆命令的兩個 Dword。把完整算式對回各個 bits,再用 LID 14h 確認目標,而不是只看送出命令就假設已生效。
回到本節的解釋與範例11.13.Lockdown 使用 opcode24h,沒有資料清單 payload;其他命令專用 Dword 保留。
| 一起判讀的欄位或標示 | 如何共同決定操作或結果 | 帶入情境後怎麼讀 |
|---|---|---|
| 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,再加入需要的欄位。 |
來源: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
Base365-1CDW10 的五個選擇共同決定限制,PRHBT 自己不能表達完整意圖。
來源: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。
Base366-1CSS 的意義由 CSEL 決定,UIDX 則是另一層廠商定義選擇。
來源: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。
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:SCT0 | Command Prohibited by Command and Feature Lockdown/Invalid Field in Command。 | 後者檢查欄位或組合,不代表成功套用禁止。 |
來源: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
Base367-1Lockdown 的 1Fh/28h 描述設定命令失敗,不是後續操作受限制的 23h。
來源: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。
Base99-1CQE DW3 先將命令身分與狀態分開,避免把兩次操作的完成結果配錯。
來源:NVME-BASE-2.4, Rev. 2.4, §4.2.1, Figure 99, 文件頁 145, PDF 頁 171
Base99-2CID10 是 Lockdown、CID11 是後續 Set Features;CID10 成功而 CID11 回限制錯誤,符合先設定再攔截的流程。
Base101-1SC 要搭 SCT 判斷,不能只看一個十六進位錯誤碼。
來源: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。
Base103-1通用 SC=23h 指出命令因現有 Lockdown 限制而中止。
來源: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。
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 byte2 | PPS5bytes;PERID 辨認對象;MRSTT0 無 reset、1 Controller Level、2 排除 Controller Reset 的 Limited Controller Level、3 subsystem reset、4 main power cycle。 | MRSTT0 的變更須在 Set 成功前套用;非零需滿足對應 reset 條件。 |
| Properties AUS byte3 | bit0 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 操作。 |
來源: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
Base292-1Personality Properties 的 AUS 說明能否認證解凍,MRSTT 說明設定所需的 reset 條件。
來源: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,也不是兩個方法都支援。
Base512-1PERID02h 是 FID22h 裡的一種 personality,不是 FID02h。
來源: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。
Base513-1改設定與凍結是獨立位元,PERID 選擇它們操作的對象。
來源: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;只代表本例請求改設定且保持未凍結,不能用於直接解凍已凍結對象。
Base514-1DW0 回待生效與凍結狀態,不能只讀 DW1 的 LDPS 就省略它。
來源: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 也可表示待凍結,不可一律當成所有設定都已完成。
Base518-1LDPE 是全體限制的跨 power-cycle 設定,不是立即禁止某個 OFI。
來源: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。
Base519-1LDPS 回在 CQE DW1,顯示目前持續性狀態。
來源: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。
11.18.Figure 782 說明命令只帶索引;347/348 說明索引對到哪一項與哪 16 bytes。再回到 Figure 366 和 208,確認 UIDX 放在哪個命令。
回到本節的解釋與範例11.19.只讀廠商 FID 定義選擇所需的索引與格式;不將 UUID 當作權限憑證或密碼。
| 一起判讀的欄位或標示 | 如何共同決定操作或結果 | 帶入情境後怎麼讀 |
|---|---|---|
| UIDX bits6:0 | 0 不指定 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:16 | 128-bit UUID;全 0、NVMe Invalid UUID 或不支持該資訊的 UUID 不可作有效選擇。 | 第 2 項 UUID 的實際 bytes 是 80~95;命令不傳這 16bytes,只傳索引。 |
來源: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
Base347-1UUID List 從索引 1 開始,前 32bytes 保留,不能把 offset0 當第一項。
來源: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。
Base348-1一個 32-byte entry 裡,UUID 本體只占後 16bytes。
來源: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。
Base782-1UIDX 只指定 UUID 清單位置,0 代表不指定。
來源: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 項。
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
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
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
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
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