3.2 数据链路控制及管理状态机
数据链路层跟踪链路的状态。它与事务层和物理层沟通链路状态,并通过物理层执行链路管理。数据链路层包含数据链路控制和管理状态机(Data Link Control and Management State Machine, DLCMSM),用于执行这些任务。这些状态在下面描述,并在图3-2中展示。
状态包括:
状态输出包括:
- DL_Inactive(链路非活动) - 物理层报告链路不可操作,或者端口未连接任何设备。
- DL_Feature(可选) - 物理层报告链路可操作,执行数据链路特性交换。
-
DL_Init - 物理层报告链路可操作,为默认虚拟通道初始化流量控制.
-
DL_Active - 正常操作模式。
- DL_Down - 数据链路层没有与链路另一侧的组件进行通信。
- DL_Up - 数据链路层正在与链路另一侧的组件进行通信。
3.2.1 数据链路控制和管理状态机规则
每个状态的规则:
- DL_Inactive(链路非活动):
- 这是PCI Express热复位、暖复位或冷复位后的初始状态(见第6.6节)。注意,DL状态不受FLR(功能层重置)的影响(见第6.6节)。
- 进入DL_Inactive状态时:
- 将所有数据链路层状态信息复位为默认值。
-
如果端口支持可选的数据链路特性交换,则必须清除远端数据链路特性支持和远端数据链路特性支持有效字段。
-
丢弃数据链路层重试缓冲区的内容(见第3.6节)。
- 在DL_Inactive状态下:
- 向事务层以及数据链路层的其余部分报告DL_Down状态。 注意:这将导致事务层丢弃任何未完成的事务,并终止内部传输TLP的任何尝试。对于下游端口,这相当于“热移除”。对于上游端口,链路下降等同于热复位(见第2.9节)。
- 丢弃来自事务层和物理层的TLP信息。
- 不生成或接受DLLPs。
-
退出到DL_Feature状态的条件:
- 如果端口支持可选的数据链路特性交换,数据链路特性交换使能位被设置,事务层表明链路未被软件禁用,并且物理层报告物理链路上 LinkUp= 1b,则退出到DL_Feature状态。
- 退出到DL_Init状态的条件:
- 如果端口不支持可选的数据链路特性交换,或者数据链路特性交换使能位被清除,事务层表明链路未被软件禁用,并且物理层报告物理链路上 LinkUp = 1b,则退出到DL_Init状态。
-
DL_Feature
-
在DL_feature状态下时:
- 执行第3.3节中描述的数据链路特性交换协议。
- 报告DL_Down状态。
- 具有DL_Down状态的数据链路层允许丢弃任何接收到的TLPs,前提是它不通过发送一个或多个确认DLLPs来确认这些TLPs。
- 退出到DL_Init状态的条件:
- 如果数据链路特性交换成功完成,并且物理层继续报告物理链路上 LinkUp = 1b,
- 或者数据链路特性交换确定远程数据链路层不支持可选的数据链路特性交换协议,并且物理层继续报告物理链路上 LinkUp = 1b,则退出到DL_Init状态。
- 退出到DL_Inactive状态的条件:
- 如果物理层报告物理链路上 LinkUp = 0b,则终止数据链路特性交换协议并退出到DL_Inactive状态。
-
-
DL_Init
-
在DL_Init状态下:
- 根据第3.4节中描述的流量控制初始化协议,为默认虚拟通道VCo初始化流量控制。
- 在FC_INIT1状态时报告DL_Down状态;在FC_INIT2状态时报告DL_Up状态。
-
具有DL_Down状态的数据链路层允许丢弃任何接收到的TLPs,前提是它不通过发送一个或多个确认DLLPs(数据链路层包)来确认这些TLPs。
- 退出到DL_Active状态的条件:
- 流量控制初始化成功完成,并且物理层继续报告物理链路上 LinkUp = 1b。
- 终止为VC0初始化流量控制的尝试,并退出到DL_Inactive状态的条件:
- 物理层报告物理链路上 LinkUp = 0b。
-
-
DL_Active:
-
DL_Active被称为正常操作状态。
-
在DL_Active状态下:
- 接受并传输TLP信息与事务层和物理层。
- 生成并接受DLLPs。
- 向事务层和数据链路层报告DL_Up状态。
-
退出到DL_Inactive状态的条件:
- 如果物理层报告物理链路上 LinkUp = 0b。
- 下游端口如果是能够报告意外下线错误的(见第7.5.3.6节),必须将从DL_Active到DL_Inactive的转换视为意外下线错误,除非在以下情况下错误检测被阻止:
- 如果桥接控制寄存器中的次级总线重置位已被软件设置,则后续转换到DL_Inactive不应被视为错误。
- 如果链路禁用位已被软件设置,则后续转换到DL_Inactive不应被视为错误。
- 如果交换机下游端口由于端口上方的事件而转换到DL_Inactive,那么转换到DL_Inactive不应被视为错误。示例事件包括交换机上游端口传播热复位、交换机上游链路转换到DL_Down,以及交换机上游端口中的次级总线重置位被设置。
- 如果通过此端口发送了PME_Turn_Off消息,则后续转换到DL_Inactive不应被视为错误。
- 注意,在这种情况下,DL_Inactive的转换将不会发生,直到电源关闭、复位或向物理层发送恢复链路的请求。
- 还请注意,如果PME_Turn_Off/PME_TO_Ack握手未能成功完成,可能会检测到意外下线错误。
- 如果端口与热插拔插槽相关联(插槽能力寄存器中的热插拔能力位已设置),并且插槽能力寄存器中的热插拔意外位已设置,则任何转换到DL_Inactive不应被视为错误。
- 如果端口与热插拔插槽相关联(插槽能力寄存器中的热插拔能力位已设置),并且插槽控制寄存器中的电源控制器控制位已设置(关闭电源),那么任何转换到DL_Inactive不应被视为错误。
-
由上述一个或多个案例发起的错误阻止必须保持有效,直到端口退出DL_Active状态,并且在随后返回到DL_Active状态时,没有任何阻止案例在返回DL_Active状态时生效。
请注意,退出DL_Active状态的过渡仅仅是根据错误检测阻止条件预期的常规过渡。
如果实现,这是一个与检测端口相关联的报告错误(见第6.2节)。
-
3.3 数据链路特性交换
数据链路特性交换协议是可选的。实现此协议的端口包含数据链路特性扩展能力(见第7.7.4节)。此能力包含四个字段:
- 本地数据链路特性支持字段表明本地端口支持的数据链路特性。
- 远端数据链路特性支持字段表明远端端口支持的数据链路特性。
- 远端数据链路特性支持有效位表明远端数据链路特性支持字段包含有效数据。
- 数据链路特性交换使能字段允许系统禁用数据链路特性交换。这可以用来解决遗留硬件不正确地忽略DLLP(数据链路层包)的问题。
数据链路特性交换协议传输端口的本地特性支持信息到远端端口,并捕获该远端端口的特性支持信息。此协议的规则如下:
- 进入DL_Feature状态时:
- 必须清除远端数据链路特性支持和远端数据链路特性支持有效字段。
- 在DL_Feature状态期间:
- 事务层必须阻止TLPs的传输。
- 传输数据链路特性DLLP。
- 传输的特性支持字段必须等于本地数据链路特性支持字段。
- 传输的特性确认位必须等于远端数据链路特性支持有效位。
- 数据链路特性DLLP必须至少每34微秒传输一次。在恢复或配置LTSSM状态中花费的时间不计入此限制。
- 处理接收到的数据链路特性DLLP。
- 如果远端数据链路特性支持有效位被清除,则从接收到的数据链路特性DLLP中记录特性支持字段到远端数据链路特性支持字段,并设置远端数据链路特性支持有效位。
- 退出DL_Feature状态的条件:
- 如果接收到了一个InitFC1 DLLP。
- 如果接收到了一个MR-IOV MRInit DLLP(编码为0000 0001b)。
- 或者在DL_Feature状态下,当特性确认位在本地数据链路特性支持和远端数据链路特性支持字段中都被设置时。
每个数据链路特性在特性支持字段中都有一个关联的位。当本地数据链路特性支持字段和远端数据链路特性支持字段中的该位都被设置时,数据链路特性被激活。
数据链路特性及其对应的位位置在表3-1中显示。