1 Handling of Received TLPs
本节介绍接收到的 TLP 在数据链路层经过完整性验证之后,这些 TLP 在事务处理层时的处理方式。这些规则如下图所示:
- 接收侧会忽略保留字段。
- 如果 Fmt 字段显示存在至少一个 TLP Prefix :
(1)通过检查后续 DWORD 的第一个字节中的 Fmt 字段,直到 Fmt 字段与 TLP Prefix 的字段不匹配,来检测 header 中是否存在其他 TLP Prefix。(每个 TLP Prefix 为一个 DWORD 长度。)
(2)按照TLP Prefix处理规则来处理该TLP。 - 如果 Extended Fmt Field Supported 字段设置为 1,则收到的 Fmt 和 Type 字段编码为保留值的 TLP 是 Malformed TLP。
- 如果 Extended Fmt Field Supported 字段设置为 0,则收到的 Fmt[2]为 1 的 TLP 的处理方式未定义。
- 收到的 Fmt[2]为 0,且 Type 字段为保留值的 TLP 为 Malformed TLP。
- 收到的 TLP 为 Malformed TLP,则该 TLP 被丢弃。
(1)如果接收到的 Malformed TLP 导致不知道释放哪个缓冲区,也不知道怎么映射到未初始化的虚通道,则必须要丢弃且不更新接收侧的流控制信息。
(2)必须丢弃所有其他类型的 Malformed TLP,可以选择不更新接收侧的流控制信息。 - 否则,更新流控制更新逻辑。
- 如果 Type 字段中的值指示 TLP 是个 Request,请按照Request Handling Rules进行处理;否则,收到的 TLP 是一个 Completion,请按照Completion Handling Rules进行处理。
PCIe Switch 必须能处理寻址 Switch 本身的 TLP与寻址 Switch 挂接的设备的 TLP。Switch 根据上述规则处理所有寻址 Switch本身的 TLP。根据以下规则处理通过 Switch 的 TLP:
- 如果收到的 TLP 的 Type 字段显示该 TLP 不是 Msg 或 MsgD 请求,则该 TLP 按照 Routing and Addr