2 系统总线 (PCI Express)寄存器
本节介绍当 PCI Express 是所使用的系统总线时的 PCI Express 寄存器值。在实现中可以使用其他系统总线。如果使用的系统总线不是 PCI 的衍生产品,则本节不适用 (n/a)。
本节详细介绍了如何为 NVM Express 控制器构建 PCI 头、PCI 功能和 PCI Express 扩展功能。显示的字段与相应的 PCI 或 PCI Express 规范重复。PCI 文档是这些 registers 的规范性规范,本节详细介绍了 NVM Express 控制器的其他要求。
图 9:PCI Express 寄存器
开始 | 结束 | 名字 | 类型 |
---|---|---|---|
00h | 3Fh | PCI 头 | |
PMCAP | PMCAP+7h | PCI 电源管理功能 | PCI Capability |
MSICAP | MSICAP+9h | 消息信号中断功能 | PCI Capability |
MSIXCAP | MSIXCAP+Bh | MSI-X 功能 | PCI Capability |
PXCAP | PXCAP+29h | PCI Express 功能 | PCI Capability |
AERCAP | AERCAP+47h | 高级错误报告功能 | PCI Express Extended Capability |
MSI-X 是推荐使用的中断机制。但是,某些系统可能不支持 MSI-X,因此,设备可能会选择同时支持 MSI 功能和 MSI-X 功能。
建议实施支持 Advanced Error Reporting Capability,以实现更强大的错误处理。
2.1 PCI 头
开始 | 结束 | 标志 | 名字 |
---|---|---|---|
00h | 03h | ID | 标识 |
04h | 05h | CMD | 命令寄存器 |
06h | 07h | STS | 设备状态 |
08h | 08h | RID | 版本ID |
09h | 0Bh | CC | 缓存行大小 |
0Ch | 0Ch | CLS | 命令寄存器 |
0Dh | 0Dh | MLT | 主延迟定时器 |
0Eh | 0Eh | HTYPE | 标头类型 |
0Fh | 0Fh | BIST | 内置自检(可选) |
10h | 13h | MLBAR(BAR0) | 内存寄存器基址,低32 位 |
14h | 17h | MLBAR(BAR1) | 内存寄存器基址,高 32 位 |
18h | 1Bh | BAR2 | 请参阅第 2.1.12 节 |
1Ch | 1Fh | BAR3 | 供应商特定 |
20h | 23h | BAR4 | 供应商特定 |
24h | 27h | BAR5 | 供应商特定 |
28h | 2Bh | CCPTR | CardBus CIS 指针 |
2Ch | 2Fh | SS | 子系统标识符 |
30h | 33h | EROM | 扩展 ROM 基址(可选) |
34h | 34h | CAP | 功能指针 |
35h | 3Bh | R | 保留 |
3Ch | 3Dh | INTR | 中断信息 |
3Eh | 3Eh | MGNT | 最小权利(可选) |
3Fh | 23Fh | MLAT | 最大延迟 (可选) |
2.1.1 偏移量 00h:ID - 标识符
图 11:偏移量 00h:ID - 标识符
位 类型 复位 描述
31:16 RO Impl Spec Device ID (DID):表示供应商分配的设备编号。特定于每个实现。
15:00 RO Impl Spec 供应商 ID (VID):表示由 PCI SIG 分配的公司供应商。
2.1.2 偏移量 04h:CMD - 命令
图 12:偏移量 04h:CMD - 命令
位 类型 重置 描述
15:11 RO 0h 保留
10 RW 0b 中断禁用 (ID):禁用控制器生成基于引脚的 INTx# 中断。该位对 MSI 或 MSI-X 操作没有任何影响。
09 RO 0b 快速背靠背启用 (FBE):NVM Express 接口不支持。
08 RW/RO 0b SERR# 启用 (SEE):控制错误报告。
07 RO 0b 硬连线为 0。06 RW/RO 0b 奇偶校验错误响应启用 (PEE):当设置为“1”时,控制器应在检测到数据奇偶校验错误时生成 PERR#。如果不支持奇偶校验,则此位为只读 ‘0’。
05 RO 0b VGA 调色板侦听启用 (VGA):NVM Express 不支持。
04 RO 0b 内存写入和失效启用 (MWIE):NVM Express 接口不支持。
03 RO 0b 特殊循环启用 (SCE):NVM Express 不支持。
02 RW 0b 总线主控启用 (BME):使控制器能够充当数据传输的主控。当设置为 ‘1’ 时,允许 bus master 活动。当清零为 ‘0’ 时,不允许控制器发出任何内存或 I/O 请求。
01 RW 0b Memory Space Enable (MSE):控制对控制器寄存器内存空间的访问。
00 RW 0b I/O 空间启用 (IOSE):控制对控制器目标 I/O 空间的访问。
2.4 MSI-X 功能(可选)
注意:建议主机为每个完成队列分配唯一的 MSI-X 向量。
Table BIR 和 PBA BIR 数据结构可以在实施中的 BAR0-1 或 BAR4-5 中分配。这些表应对齐 4 KiB。组成表 BIR 和 PBA BIR 的内存页不应包含其他寄存器/结构。建议在 BAR0-1 中按照提交队列和完成队列门铃寄存器分配这些结构。请参阅 PCI 参考 以了解有关这些数据结构的分配要求的更多信息。
2.5 PCI Express 功能
以下 PCI Express 功能定义基于 PCI Express 2.1 Base 规范。实现者可以选择将器件基于PCI Express 2.1 Base规范以外的规范。在所有情况下, PCI Express Base 规范都是 PCI Express Capability registers的规范性参考。
注意:TLP 中毒是 PCI Express 实施的强制性功能。TLP 中毒有一些可选功能,例如发射机的 TLP 中毒。当 NVM Express 控制器在传输到主机时出现错误(例如,读取命令错误)时,该错误应作为 NVM Express 命令状态的一部分表示,而不是通过 TLP 中毒。
2.6 高级错误报告功能(可选)
下面的高级错误报告定义基于 PCI Express 2.1 Base 规范。实现者可以选择将器件基于PCI Express 2.1 Base规范以外的规范。在所有情况下, PCI Express Base 规范都是 Advanced Error Reporting 寄存器的规范性参考。
2.7 其他功能指针
虽然本规范中未提及,但根据实现的不同,可能需要其他功能指针。示例包括 PCI-X 实现的 PCI-X 功能,以及可能的供应商特定的功能指针。
这些功能超出了本规范的范围。
3 控制器寄存器
控制器寄存器位于 MLBAR/MUBAR 寄存器(PCI BAR0 和 BAR1)中,应映射到支持按顺序访问和可变访问宽度的内存空间。对于许多计算机体系结构,将内存空间指定为 uncacheable 会产生此行为。主机不应发出锁定的访问。主机应使用为该 register 指定的宽度或使用对齐的 32 位访问来访问 register。违反这些主机要求中的任何一个都会导致未定义的行为。
不支持针对两个或多个 registers 的任何部分的访问。
所有保留 registers 和 registers 中的所有保留bits 都是只读的,读取时返回 0h。软件不应依赖返回 0h。
3.1 寄存器定义
图 68 描述了控制器的寄存器映射。
供应商特定地址范围从控制器支持的最后一个门铃开始,一直到 BAR0/1 支持范围的末尾。供应商特定地址范围的起点从同一位置开始,不取决于分配的门铃数量。
图 68: 寄存器定义