7. Link Layer
The link layer has the responsibility of maintaining the link connectivity so that successful data
transfers between the two link partners are ensured. A robust link flow control is defined based on
packets and link commands. Packets are prepared in the link layer to carry data and different
information between the host and a device. Link commands are defined for communications
between the two link partners. Packet frame ordered sets and link command ordered sets are also
constructed such that they are tolerant to one symbol error. In addition, error detections are also
incorporated into a packet and a link command to verify packet and link command integrity.
The link layer also facilitates link training, link testing/debugging, and link power management.
This is accomplished by the introduction of Link Training Status State Machine (LTSSM).
The focus of this chapter is to address the following in detail:
• Packet Framing
• Link command definition and usage
• Link initialization and flow control
• Link power management
• Link error rules/recovery
• Resets
• LTSSM specifications
译文:
USB接口的link layer(链路层)用来保证通信双方链路的联通,从而确保link partner(相互通信的一对链路)
之间能成功的传输数据。一个健壮链路的流控制,是基于packets和link commands定义的。链路层准备好的
Packets,在host和device之间传输数据和各种信息。link commands用于link partner之间通信。
Packet frame ordered sets(包帧有序集)和link command ordered sets的构造方式允许一个symbol
的容错。另外,检错机制也被集成到packet和link conmmand中,用以验证他们的完整性。link layer同时也简
化了link training(链路调训),link testing/debugging(链路的测试和调试),和link power management(链
路的电源管理)。详细可以参考LTSSM的介绍。
这一章主要阐述以下细节:
- 包的帧
- link command的定义和使用
- link 的初始化和流控制
- link 的电源管理
- link 的错误规则/恢复
- 复位
- LTSSM 规范
7.1 Byte Ordering
Multiple byte fields in a packet or a link command are moved over to the bus in little-endian order,
i.e., the least significant byte (LSB) first, and the most significant byte (MSB) last. Figure 7-2
shows an example of byte ordering.
Each byte of a packet or link command will be encoded in the physical layer using 8b/10b
encoding. Refer to Section 6.3 regarding 8b/10b encoding and bit ordering.
译文:
字节顺序
在一个packet或一个link command里包含多个字节的时候,数据是按照little-endian的顺序发送到
总线上,比如,最低有效字节(LSB)最先发送,最高有效字节(MSB)最后发送,图7-2表示了一个
字节序的例子。packet或link command中的每个字节都将在物理层做8b/10b编码,参考6.3节关于
8b/10b编码和位序的说明。
7.2 Link Management and Flow Control
This section contains information regarding link data integrity, flow control, and link power
management.
• The packet and packet framing section defines packet types, packet structures, and CRC
requirements for each packet.
• The link command section defines special link command structures that control various
functionalities at the link level.
• The logical idle defines a special symbol used in U0.
• The flow control defines a set of handshake rules for packet transactions.
译文
链路管理和流控制
这节包含了关于link数据完整性,流控制,和link电源管理的内容。
- packet和packet framing的章节定义了包的类型,包的结构,和每个包的CRC要求
- link command的章节定义了各种专用的link command结构,来控制link层实现各种功能
- logical idle(逻辑空闲)定义了在U0状态特别的symbol
- flow control(流控制)定义了握手规则的集合,用来控制包的传输
7.2.1 Packets and Packet Framing
SuperSpeed uses packets to transfer information. Detailed packet formats for Link Management
Packets (LMP), Transaction Packets (TP), Isochronous Timestamp Packets (ITP), and Data Packets
(DP) are defined in Section 8.2.
译文
SS使用packet传输信息。四类包LMP, TP, ITP, DP的格式定义参考8.2节。
小结:
SS数据传输的基本单位是包,共分为四类:LMP, TP, ITP, DP
7.2.1.1 Header Packet Structure
All header packets are 20 symbols long, as is formatted in Figure 7-3. This includes LMPs, TPs,
ITPs, and DPHs. A header packet consists of three parts, a header packet framing, a packet header,
and a Link Control Word.
译文
所有头包的长度都由20个symbols组成,格式如Figure 7-3所示,这个格式使用于LMPs, TPs, ITPs和DPHs。
一个头包由三部分组成,分别是头包帧,包头,和链路控制字节。
小结:
每类包都包含20 个symbol的头包部分,symbol是一个8bit的data经过8/10bit编码后形成的一个10bit
码字(10位二进制序列)。
注:在原文中包头和头包的说法比较混乱,根据Figure 7-3的标题,我们以后把一个包的包头部分称作头包,所以头包并不是一个真正完整的包,
只是包的一部分,头包中的12Byte称作包头,里面是包的一些信息,可以参考《8.3.1.4 Link Control Word》。
7.2.1.1.1 Header Packet Framing
Header packet framing, HPSTART ordered set, is a four-symbol header packet starting frame
ordered set based on K-symbols. It is defined as three consecutive symbols of SHP followed by a
K-symbol of EPF. A header packet shall always begin with HPSTART ordered set. The
construction of the header packet framing is to achieve one symbol error tolerance.
译文:
头包帧,由四个HPSTART symbol组成的的一组有序集,HPSTART是K-symbol的一种。头包帧定义的
格式是三个连续SHP symbol和一个EPF K-symbol组成。规定一个头包必须以HPSTART有序集开始,
头包帧的这种构成方式是为了达到一个symbol容错的目的。
Figure 7-3. Header Packet with HPSTART, Packet Header, and Link Control Word
小结:
一类包的头包由三部分组成:
- 标识一个包开始的头包帧(由四个K-symbol组成)
SHP和EPF是两种不同的K-symbol,通过《Table 6-1. Special Symbols》和《Table A-2. 8b/10b Special Character Symbol Codes》可知,
SHP标识一个包的开始,编码序号是K27.7,8bit数据是FB (111 11011),编码后是10bit的码字(110110 1000);
EPF标识一个包的结束,编码序号是K23.7,8bit数据是F7 (111 10111),编码后是10bit的码字(111010 1000)。
编码后的码字是可以通过示波器抓到的。
- 含有包各种信息的包头,(由12个byte和16位CRC组成)
包的类型不同,同类型包的不同子类,包头的格式也不同,例如LMP类型包包括Figure 8-8. Port Capability LMP,Figure 8-9. Port Configuration LMP,Figure 8-10. Port Configuration Response LMP。参考Figure 8-4. Link Management Packet Structure的DWORD1~2和各子类包的格式描述。
- Link Control Word
参考《8.3.1.4 Link Control Word》
7.2.1.1.2 Packet Header
A packet header consists of 14 bytes as formatted in Figure 7-4. It includes 12 bytes of header
information and a 2-byte CRC-16. CRC-16 is used to protect the data integrity of the 12-byte
header information.
包头由14个byte组成,格式如图7-4。其中包含12byte的头信息和2byte 16位的CRC校验。CRC-16
用来保护12byte包头信息的数据完整性。
Figure 7-4. Packet Header
The implementation of CRC-16 on the packet header is defined below:
• The polynomial for CRC-16 shall be 100Bh.
Note: The CRC-16 polynomial is not the same as the one used for USB 2.0.
• The initial value of CRC-16 shall be FFFFh.
• CRC-16 shall be calculated for all 12 bytes of the header information, not inclusive of any
packet framing symbols.
• CRC-16 calculation shall begin at byte 0, bit 0 and continue to bit 7 of each of the 12 bytes.
• The remainder of CRC-16 shall be complemented.
• The residual of CRC-16 shall be F6AAh.
Note: The inversion of the CRC-16 remainder adds an offset of FFFFh that will create a constant
CRC-16 residual of F6AAh at the receiver side.
Figure 7-5 is an illustration of CRC-16 remainder generation. The output bit ordering is listed in
Table 7-1.
包头的CRC-16定义如下:
• CRC-16的多项式是100Bh
Note: 这里的CRC-16多项式和USB2.0中的CRC-16多项式不同。
• CRC-16的初始值是FFFFh
7.2.1.2 Data Packet Payload Structure
Data packets are a special type of packet consisting of a Data Packet Header (DPH) and a Data
Packet Payload (DPP). The DPH is defined in Section 7.2.1.1. The DPP, on the other hand,
consists of a data packet payload framing, and a variable length of data followed by 4 bytes of
CRC-32. Figure 7-8 describes the format of a DPP.
此节主要是描述DP包的DPP
7.2.1.2.1 Data Packet Payload Framing
DPP framing consists of eight K-symbols, a four-symbol DPP starting frame ordered set and a foursymbol
DPP ending frame ordered set. As indicated by Figure 7-8, a DPPSTART ordered set,
which is a DPP starting frame ordered set, consists of three consecutive K-symbols of SDP
followed by a single K-symbol of EPF. A DPP ending frame ordered set has two different types.
The first type, DPPEND ordered set, is a DPP ending frame ordered set which consists of three
consecutive K-symbol of END followed by a single K-symbol of EPF. The second type,
DPPABORT ordered set, is a DPP aborting frame ordered set which consists of three consecutive
K-symbol of EDB (end of nullified packet) followed by a single K-symbol of EPF. The DPPEND
ordered set is used to indicate a normal ending of a complete DPP. The DPPABORT ordered set is
used to indicate an abnormal ending of a DPP.
Figure 7-8. Data Packet Payload with CRC-32 and Framing
DPP也包含三部分:
- 4个K-symbol组成的起始帧
- 数据部分和32位CRC校验
- 4个K-symbol的结束帧
7.2.1.2.2 Data Packet Payload
The DPP section consists of 0 to 1024 data bytes followed by 4 bytes CRC-32. Any premature
termination of a DPP shall contain a DPPABORT ordered set. A DPP shall immediately follow its
corresponding DPH with no spacing in between.
CRC-32 protects the data integrity of the data payload. CRC-32 is as follows:
• The CRC-32 polynomial shall be 04C1 1DB7h.
• The CRC-32 Initial value shall be FFFF FFFFh.
• CRC-32 shall be calculated for all bytes of the DPP, not inclusive of any packet framing
symbols.
• CRC-32 calculation shall begin at byte 0, bit 0 and continue to bit 7 of each of the bytes of the
DPP.
• The remainder of CRC-32 shall be complemented.
• The residual of CRC-32 shall be C704DD7Bh.
Note: The inversion of the CRC-32 remainder adds an offset of FFFF FFFFh that will create a
constant CRC-32 residual of C704DD7Bh at the receiver side.
Figure 7-9 is an illustration of CRC-32 remainder generation. The output bit ordering is listed in
Table 7-2.
7.2.1.2.3 Spacing Between Data Packet Header and Data Packet Payload
There shall be no spacing between a DPH and its corresponding DPP. This is illustrated in
Figure 7-10.完整的表示了一个Data Packet的格式
Figure 7-10. Data Packet with Data Packet Header Followed by Data Packet Payload
7.2.2 Link Commands
Link commands are used for link level data integrity, flow control and link power management.
Link commands are a fixed length of eight symbols and contain repeated symbols to increase the
error tolerance. Refer to Section 7.3 for more details. Link command names have the L-preface to
differentiate their link level usage and to avoid confusion with packets.
- Link Command用途,链路层数据完整性,流控制,链路的电源管理
- 固定的8-symbol长度,重复的link command word增加容错度
- Link Command不是Packet,所有的Link Command用"L"做前缀,用来区分链路中的包
7.2.2.1 Link Command Structure
Link command shall be eight symbols long and constructed with the following format shown in
Figure 7-11. The first four symbols, LCSTART, are the link command starting frame ordered set
consisting of three consecutive SLCs followed by EPF. The second four symbols consist of a twosymbol
link command word and its replica. Both link command words are scrambled. Table 7-3
summarizes the link command structure.
Table 7-3. Link Command Ordered Set Structure
Figure 7-11. Link Command Structure
7.2.2.2 Link Command Word Definition
Link command word is 16 bits long with the 11-bit link command information protected by a 5-bit
CRC-5 (see Figure 7-12). The 11-bit link command information is defined in Table 7-4. The
calculation of CRC-5 is the same as Link Control Word illustrated in Figure 7-6.
Figure 7-12. Link Command Word Structure
Table 7-4. Link Command Bit Definitions
Link commands are defined for four usage cases. First, link commands are used to ensure the
successful transfer of a packet. Second, link commands are used for link flow control. Third, link
commands are used for link power management. And finally, special link commands are defined
for a port to signal its presence in U0.
- 确定packet是不是成功传输
- link的流控制
- link的电源管理
- 特定的link command用来通知发送它的port在U0状态
Successful header packet transactions between the two link partners require proper header packet
acknowledgement. Rx Header Buffer Credit exchange facilitates link flow control. Header packet
acknowledgement and Rx Header Buffer Credit exchange are realized using different link
commands. LGOOD_n (n = 0 to 7) and LBAD are used to acknowledge whether a header packet
has been received properly or not. LRTY is used to signal that a header packet is re-sent.
LCRD_A, LCRD_B, LCRD_C, and LCRD_D are used to signal the availability of Rx Header
Buffers in terms of Credit. In the following sections, LCRD_x is used with x denoting either A, B,
C, or D. See Table 7-5 for details.
头包在链路间传输是不是成功,需要 header packet acknowledgement。 Rx Header Buffer Credit
(buffer的可用数,buffer用于接收机接收header packet)的互换简化了链路的流控制。
具体用法如下:
- LGOOD_n AND LCRD_x
portA发---->Hseq0
portB收<--- Hseq0 //portB接收机的BRx_BufferA接收Hseq0.
portB发---->LGOOD_0 //我已经成功接收Hseq0了!
portB发---->LCRD_A//portB接收机的BRx_BufferA成功接收Hseq0后,清空BRx_BufferA并发送LCRD_A给portA,我的Rx_BufferA现在有空了!
portA收<----LGOOD_0 //portA接收到LGOOD_0后知道Hseq0已经成功发送,清空发送机ATx_buffer
- LBAD AND LRTY
portA发---->Hseq0HP1
portB收<----Hseq0//portB接收失败
portB发---->LBAD //portB发送:我接收一个包失败了!但是portB并没告诉portA它接收的哪个包失败了!
protA收<----LBAD //portA收到一个坏消息,它会把没收到LGOOD_n的buffer里的header packet再都按顺序从新发一次。
portA发---->LRTY //我知道我发的一个包(能确定是Hseq0吗(call back)?)你没收到,我会把我没确定成功发送的包再都给你从发一次!
portA发---->Hseq0
LGOOD_n uses an explicit numerical index called Header Sequence Number to represent the
sequencing of a header packet. The Header Sequence Number starts from 0 and is incremented by
one based on modulo-8 addition with each header packet. The index corresponds to the received
Header Sequence Number and is used for flow control and detection of lost or corrupted header
packets.
LGOOD_n使用模8加1的Header Sequence Number标识成功发送了的header packet,如果中间漏掉的了一个LGOOD_n,则说明出现的丢包或坏包(传输过程中数据发生错误)。
LCRD_x uses an explicit alphabetical index. The index A, B, C, D, A, B, C… is advanced by one
with each header packet being processed and an Rx Header Buffer Credit is available. The index is
used to ensure Rx Header Buffer Credits are received in order such that missing of an LCRD_x can
be detected.
PortA成功接收并处理了一个header packet以后,会清空【处理header packet使用的】接收机buffer,然后发送LCRD_x告诉portB现在自己有一个可用的接收机。
可以理解为每一个Rx Header Buffer对应一个字母吗(call back)?
如果portB收到不连续的LCRD_x,表示丢包了。比如portB连续收到LCRD_A,LCRD_C。
每个port都有一个Remote Rx Header Buffer Credit Count计数变量,portB接收到一个LCRD_x后,portB的这个计数变量自动加1,表示远端 portA的接收机buffer多一个可用。
LBAD and LRTY do not use indexes.
LGO_U1, LGO_U2, LGO_U3, LAU, LXU, and LPMA are link commands used for link power
management.
LDN and LUP are special link commands used by a downstream port and an upstream port to
indicate their port presence in U0. The usage of LDN and LUP is described in Table 7-5.
Additional requirements and examples on the use of link commands are found in Section 7.2.4.
Table 7-5. Link Command Definitions
7.2.2.3 Link Command Placement
The link command placement shall meet the following rules:
• Link commands shall not be placed inside header packet structures (i.e., within LMPs, TPs,
ITPs, or DPHs).
• Link commands shall not be placed within the DPP of a DP structure.
• Link commands shall not be placed between the DPH and the DPP.
• Link commands may be placed before and after a header packet with the exception that they
shall not be placed in between a DPH and its DPP.
• Multiple link commands are allowed to be transmitted back to back.
• Link commands shall not be sent until all scheduled SKP ordered sets have been transmitted.
Note: Additional rules regarding scheduling of link commands are found in Section 10.7.5 to
Section 10.7.12.
7.2.3 Logical Idle
Logical Idle is defined to be a period of one or more symbol periods when no information (packets
or link commands) is being transferred on the link. A special D-Symbol (00h), defined as Idle
Symbol (IS), shall be transmitted by a port at any time in U0 meeting the logical idle definition.
The IS shall be scrambled according to rules described in Section 6.4.3.
Table 7-6. Logical Idle Definition
7.2.4 Link Command Usage for Flow Control, Error Recovery,and Power Management
Link commands are used for link level header packet flow control, to identify lost/corrupted header
packets and to initiate/acknowledge link level power management transitions. The construction and
descriptions for each link command are found in Section 7.2.2.
7.2.4.1 Header Packet Flow Control and Error Recovery
Header packet flow control is used for all header packets. It requires each side of the link to follow
specific header buffer and transmission ordering constraints to guarantee a successful packet
transfer and link interoperability. This section describes, in detail, the rules of packet flow control.
7.2.4.1.1 Initialization
此节可参考:http://blog.csdn.net/liglei/article/details/9057487
The link initialization refers to initialization of a port once a link transitions to U0 from Polling,
Recovery, or Hot Reset. The initialization includes the Header Sequence Number Advertisement
and the Rx Header Buffer Credit Advertisement between the two ports before a header packet can
be transmitted.
link的初始化是指当link从Polling进入U0后端口的初始化
• The following requirements shall be applied to a port:
1. A port shall maintain two Tx Header Sequence Numbers. One is the Tx Header Sequence
Number that is defined as the Header Sequence Number that will be assigned to a header
packet when it is first transmitted (not a re-transmission). The other is the ACK Tx Header
Sequence Number that is defined as the expected Header Sequence Number to be
acknowledged with LGOOD_n that is sent by a port receiving the header packet.
2. A port shall have an Rx Header Sequence Number. It is defined as the expected Header
Sequence Number when a header packet is received.
3. A port shall maintain two Rx Header Buffer Credit Counts. One is the Local Rx Header
Buffer Credit Count that is defined as the number of the available Rx Header Buffer
Credits of its receiver. The other is the Remote Rx Header Buffer Credit Count that is
defined as the number of the available Rx Header Buffer Credits from its link partner.
4. A port shall have enough Tx Header Buffers in its transmitter to hold up to four
unacknowledged header packets.
5. A port shall not transmit any header packet if its Remote Rx Header Buffer Credit Count
is 0.
6. A port shall have enough Rx Header Buffers in its receiver to receive up to four header
packets.
7. Upon entry to U0, the following shall be performed in the sequence presented:
a. A port shall start the PENDING_HP_TIMER and CREDIT_HP_TIMER in expectation
of the Header Sequence Number and the Rx Header Buffer Credit Advertisement.
b. A port shall initiate the Header Sequence Number Advertisement.
c. A port shall initiate the Rx Header Buffer Credit Advertisement.
• The Header Sequence Number Advertisement refers to ACK Tx Header Sequence Number
initialization by exchanging Header Sequence Numbers between the two ports. This Header
Sequence Number is the Header Sequence Number of the last header packet a port has received
properly. The main purpose of the Header Sequence Number Advertisement is to maintain the
link flow before and after Recovery such that a port upon re-entry to U0 is aware what the last
header packet is that was sent successfully prior to Recovery, and decides what header packets
in its Tx Header Buffers that can be flushed or need to be retransmitted. The following rules
shall be applied during the Header Sequence Number Advertisement:
1. A port shall set its initial Rx Header Sequence Number defined in the following:
a. If a port enters U0 from Polling or Hot Reset, the Rx Header Sequence Number is 0.
b. If a port enters U0 from Recovery, the Rx Header Sequence Number is the header
Sequence Number of the next expected header packet.
2. A port shall set its initial Tx Header Sequence Number defined in the following:
a. If a port enters U0 from Polling or Hot Reset, its Tx Header Sequence Number is 0.
b. If a port enters U0 from Recovery, its Tx Header Sequence Number is the same as the
Tx Header Sequence Number before Recovery.
Note: A header packet that is re-transmitted shall maintain its originally assigned Header
Sequence Number.
3. A port shall initiate the Header Sequence Number Advertisement by transmitting
LGOOD_n with “n” equal to the Rx Header Sequence Number minus one.
Note: The decrement is based on modulo-8 operation.
4. A port shall set its initial ACK Tx Header Sequence Number to the Sequence Number
received during the Rx Header Sequence Number Advertisement plus one.
Note: The increment is based on modulo-8 operation.
5. A port shall not send any header packets until the Header Sequence Number Advertisement
has been received and a Remote Rx Header Buffer Credit is available.
6. A port shall not request for a low power link state entry before receiving and sending the
Header Sequence Number Advertisement.
Note: The rules of Low Power Link State Initiation (refer to Section 7.2.4.2) still apply.
7. A port shall flush the header packets in its Tx Header Buffers upon receiving the Header
Sequence Number Advertisement. A port shall do one of the following:
a. If a port enters U0 from Polling or Hot Reset, it shall flush all the header packets in its
Tx Header Buffers.
b. If a port enters U0 from Recovery, it shall flush all the header packets in its Tx Header
Buffers that have been sent before Recovery except for those with the Header Sequence
Number greater than (modulo 8) the Header Sequence Number received in
Header Sequence Number Advertisement.
Note: If for example, the Header Sequence Number Advertisement of LGOOD_1 is
received, a port shall flush the header packets in its Tx Header Buffers with Header
Sequence Numbers of 1, 0, 7, 6.
• The Rx Header Buffer Credit Advertisement refers to Remote Rx Header Buffer Credit Count
initialization by exchanging the number of available Local Rx Header Buffer Credits between
the two ports. The main purpose of this advertisement is for a port to align its Remote Rx
Header Buffer Credit Count with its link partner upon entry to U0. The following rules shall be
applied during the Rx Header Buffer Credit Advertisement:
1. A port shall initiate the Rx Header Buffer Credit Advertisement after sending LGOOD_n
during Header Sequence Number Advertisement.
2. A port shall initialize the following before sending the Rx Header Buffer Credit:
a. A port shall initialize its Tx Header Buffer Credit index to A.
b. A port shall initialize its Rx Header Buffer Credit index to A.
c. A port shall initialize its Remote Rx Header Buffer Credit Count to 0.
d. A port shall continue to process those header packets in its Rx Header Buffers that have
been either acknowledged with LGOOD_n prior to entry to Recovery, or validated
during Recovery, and then update the Local Rx Header Buffer Credit Count.
e. A port shall set its Local Rx Header Buffer Credit Count defined in the following:
1. If a port enters U0 from Polling or Hot Reset, its Local Rx Header Buffer Credit
Count is 4.
2. If a port enters U0 from Recovery, its Local Rx Header Buffer Credit Count is the
number of Rx Header Buffers available for incoming header packets.
3. A port shall perform the Rx Header Buffer Credit Advertisement by transmitting LCRD_x
to notify its link partner. A port shall transmit one of the following based on its Local Rx
Header Buffer Credit Count:
a. LCRD_A if the Local Rx Header Buffer Credit Count is one.
b. LCRD_A and LCRD_B if the Local Rx Header Buffer Credit Count is two.
c. LCRD_A, LCRD_B, and LCRD_C if the Local Rx Header Buffer Credit Count is
three.
d. LCRD_A, LCRD_B, LCRD_C and LCRD_D if the Local Rx Header Buffer Credit
Count is four.
4. A port receiving LCRD_x from its link partner shall increment its Remote Rx Header
Buffer Credit Count by one each time an LCRD_x is received up to four.
5. A port shall not transmit any header packet if its Remote Rx Header Buffer Credit Count
is zero.
6. A port shall not request for a low power link state entry before receiving and sending
LCRD_x during the Rx Header Buffer Credit Advertisement.
Note: The rules of Low Power Link State Initiation (refer to Section 7.2.4.2) still apply.
• The following rules shall be applied additionally when a port enters U0 from Recovery:
1. A port sending LBAD before Recovery shall not expect to receive LRTY before a retried
header packet from its link partner upon entry to U0.
2. A port receiving LBAD before Recovery shall not send LRTY before a retried header
packet to its link partner upon entry to U0.
Note: There exists a situation where an LBAD was sent by a port before Recovery and it
may or may not be received properly by its link partner. Under this situation, the rules of
LBAD/LRTY do not apply. Refer to Sections 7.2.4.1.4 and 7.2.4.1.9 for details.
• Upon entry to Recovery and the next state is Hot Reset or Loopback, a port may optionally
continue its processing of all the packets received properly.