3.1.6 Offset 1Ch:CSTS-Controller Status
Bit
|
Type
|
Reset
|
Description
|
31:06
|
RO
|
0
|
Reserved
|
05
|
RO
|
0
|
Processing Paused(PP):这一位代表了Controller是否正在处理命令。如果这一位清0,那么控制器应该正常的处理命令。如果这一位置1,控制器临时停止了处理命令去处理一个到来的事件。这一位仅在CC.EN为1时有效。
|
04
|
RW1C
|
HWInit
|
NVM Subsystem Reset Occurred(NSSRO):
|
03:02
|
RO
|
0
|
Shutdown Status(SHST):这一字段代表了有Host通过设置CC.SHN发起的关机的状态。关机状态值定义如下:
Value
|
Definition
|
00b
|
正常操作(没有关机请求)
|
01b
|
正在关机
|
10b
|
关机完成
|
11b
|
Reserved
|
|
01
|
RO
|
HWInit
|
Controller Fatal Status(CFS):当Controller出现一个无法用Completion回复的重大错误后,这一位应该被置1。当没有重大错误发生时,这一位应该为0。
当在Controller初始化阶段出现重大错误时,这一位应该被初始化为1。
|
00
|
RO
|
0
|
Ready(RDY):当CC.EN被Host置为1后,Controller准备好处理Submission Queue Tail DoorBell有写入时,次位被置1。CC.EN被清0后,这一位也应该被清0。
在CC.EN由0到1之后,Host应该有一个最小的超时时间(CAP.TO)等待此位被置1。
|
3.1.7 Offset 20h:NSSR-NVM Subsystem Reset
这个可选寄存器提供了一个Host初始化NVM Subsystem Reset的功能。
支持这个寄存器代表了NVM Subsystem ResetSupported(CAP.NSSRS)的状态。如果这个寄存器不被支持,那么这一字段应该是Reserved,参见7.3.1。
Bit
|
Type
|
Reset
|
Description
|
31:00
|
RW
|
0h
|
NVM Submission Reset Control(NSSRC):向这个寄存器写“NVME”(4E564D65h)启动一个NVM Submission Reset。写其他值没有任何影响。
|
3.1.8 Offset 24h:AQA-Admin Queue Attribute
这个寄存器定义了Admin Submission Queue和Admin Completion Queue的属性。Admin SQ和CQ的QID是0。Admin SQ的优先级有选择的仲裁机制决定。参见4.11。Admin SQ和CQ被申请在一个连续的物理地址。
注意:这是在使用UEFI boot选项时的建议。在低级内存环境下(像是BIOS中的Option ROMS)没有足够的内存去申请SQ和CQ,在这种情况下,厂商自己定义Controller的低内存操作。
Bit
|
Type
|
Reset
|
Description
|
31:28
|
RO
|
0h
|
Reserved
|
27:16
|
RW
|
0h
|
Admin Completion Queue Size(ACQS):定义了Admin CQ Entry的大小。参见4.1.3。这一部分为0时使能Controller将产生未定义的结果。最小的Entry是2。最大是4096。0是一个基本值。
|
15:12
|
RO
|
0h
|
Reserved
|
11:00
|
RW
|
0h
|
Admin Submission Queue Size(ASQS):定义了Admin SQ Entry的大小。参见4.1.3。这一部分为0时使能Controller将产生未定义的结果。最小的Entry是2。最大是4096。0是一个基本值
|
3.1.9 Offset 28h:ASQ-Admin Submission Queue Base Addess
这个寄存器定义了Admin SQ的基地址
Bit
|
Type
|
Reset
|
Description
|
63:12
|
RW
|
Impl
Spec
|
Admin Submission Queue Base(ASQB):这一字段定义了Admin SQ的64位物理地址中的52位有效位。这个地址应该是基于Host内存页对齐的(CC.MPS)。所有的Admin命令都在这个队列中被申请。对于这个队列的定义,参见4.1。
|
11:00
|
RO
|
0h
|
Reserved
|
3.1.11 Offset 38h:CMBLOC-Controller Memory Buffer Location
这个寄存器定义了Controller Memory Buffer的地址。
Bit
|
Type
|
Reset
|
Description
|
31:12
|
RO
|
Impl
Spec
|
Offset(OFST):代表了Controller Memory Buffer在CMBSZ多个单元中的偏移,此值4K对齐
|
11:03
|
RO
|
0h
|
Reserved
|
02:00
|
RO
|
Impl
Spec
|
Base Indicator Register(BIR):代表了包含了Controller Memory Buffer的Base Address Register(BAR)
|
3.1.12 Offset 3Ch:CMBSZ-Controller Memory Buffer Size
这个可选寄存器定义了Controller Memory Buffer的大小(参见4.7)。如果Controller不支持Controller Memory Buffer特性,则此寄存器应当被清0。
Bit
|
Type
|
Reset
|
Descriptor
|
31:12
|
RO
|
Impl
Spec
|
Size(SZ):代表了Host中可用Controller Memory Buffer的大小,大小是Size Units(SZU)的倍数。
|
11:08
|
RO
|
Impl
Spec
|
Size Units(SZU):代表了单元大小
Value
|
Granularity
|
0h
|
4KB
|
1h
|
64KB
|
2h
|
1MB
|
3h
|
16MB
|
4h
|
256MB
|
5h
|
4GB
|
6h
|
64GB
|
7h-Fh
|
Reserved
|
|
07:05
|
RO
|
0h
|
Reserved
|
04
|
RO
|
Impl
Spec
|
Write Data Support(WDS):如果设置为1,则表明支持Host传输数据到Controller的命令(例如:Write)的data和metadata放入到Controller Memory Buffer中。如果清为0,那么data和metadata应该从Host Memory传输至Controller。
|
03
|
RO
|
Impl
Spec
|
ReadData Support(RDS):如果设置为1,则表明支持Controller传输数据到Host的命令(例如:Read)将data和metadata放入Controller Memory Buffer。如果清0,所有data和metadata都应当被放入到Host Memory。
|
02
|
RO
|
Impl
Spec
|
PRP SGL List Support(LISTS):如果此位为1,则Controller应该支持PRP List存放在Controller Memory Buffer中
|
01
|
RO
|
Impl
Spec
|
Completion Queue Support(CQS):如果此位为1,则Controller支持将Admin Completion Queue放置于Controller Memory Buffer中。
|
00
|
RO
|
Impl
Spec
|
Submission Queue Support(SQS):如果此位为1,则Controller支持将Admin Submission Queue放置于Controller Memory Buffer中。
|
3.1.13 Offset 40h:BPINFO-Boot Partition Information
这个寄存器定义了启动分区得到特性(参见8.13)。如果Controller不支持启动分区,则此寄存器应该被清0。
Bit
|
Type
|
Reset
|
Description
|
31
|
RO
|
Impl
Spec
|
Active Boot Partition ID(ABPID):这一字段代表了活动的Boot分区的ID
|
30:26
|
RO
|
0h
|
Reserved
|
25:24
|
RO
|
0h
|
Boot Read Status(BRS):这一部分代表了Host写到BPRSEL.BPID中的初始化时读此ID的Boot分区的状态。
读Boot分区状态值如下:
Value
|
Definition
|
00b
|
没有读Boot分区操作
|
01b
|
正在读Boot分区
|
01b
|
成功读完成Boot分区
|
11b
|
读Boot分区错误
|
如果Host写入了BPRSEL.BPID,那么这一部分的状态应该为01b。Boot分区读完成之后,这一位被设置为10b。如果出现读错误,则在这一部分设置为11b。
|
23:15
|
RO
|
0h
|
Reserved
|
14:00
|
RO
|
Impl
Spec
|
Boot Paratition Size(BPSZ):这一部分按照128KB的倍数定义每个Boot分区的大小。两个Boot分区有相同的大小。
|
3.1.14 Offset 44h:BPRSEL-Boot Partition Read Select
这个可选寄存器用来开启从Controller到Host的Boot分区的数据传输(参见8.13)。如果Controller不支持此功能,则此寄存器为0。
如果Host试图读一个超过了Boot分区结束地址的数据,Controller应当通过BPINFO.BRS进行报错。
Bit
|
Type
|
Reset
|
Description
|
31
|
RW
|
0h
|
Boot Partition Identifier(BPID):这一部分代表了要读的Boot分区的ID
|
30
|
RO
|
0h
|
Reserved
|
29:10
|
RW
|
0h
|
Boot Partition Read Offset(BPROF):这一部分是Boot分区的偏移,以4K为单位,将controller内的数据读到Host Boot启动内存。
|
09:00
|
RW
|
0h
|
Boot Partition Read Size(BPRSZ):这一部分选定了读数据的大小,以4K为单位
|
3.1.15 Offset 48h:
BPMBL-Boot Partition Memory Buffer Location(Optional)
这个可选寄存器用来规定一个用来存放Boot数据的memory buffer。
Bit
|
Type
|
Reset
|
Descriotion
|
63:12
|
RW
|
0h
|
Boot Partition Memory Buffer Base Address(BMBBA):这52位代表64位Boot分区Memroy Buffer物理地址中的52位。
|
11:00
|
RO
|
Reserved
|
|
3.1.16 Offset(1000h+((2y)*(4<<CAP.DSTRD))):SQyTDBL-Submission Queue y Tail Doorbell
这个寄存器定义了用于更新Submission Queue y 的Tail Entry指针的Doorbell寄存器。y就是Queue ID。这一寄存器代表了有一个新的命令需要Controller申请处理。
Host不应该读这个寄存器,如果这个寄存器被读了,应该返回一个厂商自定义的值。
Bit
|
Type
|
Reset
|
Description
|
31:16
|
RO
|
0
|
Reserved
|
15:00
|
RW
|
0h
|
Submission Queue Tail(SQT):代表了Submission Queue Tail指针的新的值。这个值应该覆盖掉之前写进去的任何值。上一次写和当前写进去的值的差代表了有多少条命令需要被申请处理。
注意:需要考虑Queue的翻转。
|
3.1.17 Offset(1000h+((2y+1)*(4<<CAP.DSTRD))):CQyHDBL-Completion Queue y Tail Doorbell
这个寄存器定义了用于更新Completion Queue y 的Head Entry指针的Doorbell寄存器。
y就是Queue ID。代表了Host处理完了Completion Queue中Head位置的命令。
Host不应该读这个寄存器,如果这个寄存器被Host读,则应该返回一个厂商自定义的值。
Host应该确保他能够继续处理Completion Queues中的Completion 命令,不管这个命令是否有一个可确定的或者是任意一个Submission命令。
Bit
|
Type
|
Reset
|
Description
|
31:16
|
RO
|
0
|
Reserved
|
15:00
|
RW
|
0h
|
Completion Queue Head(CQH):代表了Completion Queue Head指针的新的值。这个值应该覆盖掉之前写进去的任何值。上一次写和当前写进去的值的差代表了有多少条命令需要被申请处理。
注意:需要考虑Queue的翻转。
|
|