As with any of the other transport service types, the SQ Logic's Start PSN is assigned during QP setup.
As the SQ Logic generates each outbound request packet, it sets the BTH:PSN to the previous PSN + 1.
When the request packet is transmitted by the QP's SQ Logic, the Q_Key inserted in the packet's DETH:Q_Key field is one of the following:
If bit 31 of the 32-bit Q_Key submitted in the WR = 0, then it is the Q_Key of the destination QP and is inserted in the packet's DETH:Q_Key field.
If bit 31 of the 32-bit Q_Key submitted in the WR = 1, then the software that posted the WR is attempting to access a controlled destination QP and the Q_Key from the local QP's Context (rather than the supplied Q_Key) is inserted in the DETH:Q_Key field by the QP's SQ Logic.
Table 20-1 on this page defines the valid opcodes that may be inserted in the packet's BTH:Opcode field.
Bits 7:5 | Bits 4:0 | Packet Type | Fields That Follow BTH |
---|---|---|---|
011 UD | 00000-00011 | Reserved | Undefined |
00100 | SEND only | DETH, Data Payload | |
00101 | SEND only with Immediate | DETH, Immediate Data, Data Payload | |
00110-11111 | Reserved | Undefined |
Table 20-2 on this page defines the number of bytes that a packet's data payload field may contain. Note that if the packet contains zero message bytes, there is no data payload field.
Packet Type | Data Payload Size |
---|---|
“only” packet | Payload must contain between zero and PMTU bytes. |
No responses are expected when using this transport service type. The SQ Logic can therefore immediately retire the currently active SQ WQE and create a CQE when it has committed the last byte of the VCRC field of the last request packet to the wire (and detected no local errors associated with the message transfer).
Assuming that a SQ WQE completes its respective message transfer without any errors, the SQ Logic retires the WQE, creates a good completion CQE, and moves on to process the next WQE posted to the SQ (if there are any).
Since no responses are returned to the SQ Logic, it has no way of knowing if the Send operation completed without error on the remote QP. The only types of errors that the SQ Logic can detect are those that are locally detected by the SQ Logic. Assuming that a local error is detected, the SQ Logic immediately stops the message transmission. The additional actions taken by the SQ Logic are defined by the error type (see Table 20-3 on page 530). It should be noted that the state of the memory at the responder is unknown.
Error | Description | Handling |
---|---|---|
Locally Detected Memory Protection Error | As an example, the Gather Buffer List specified in a WQE for a Send may have one or more entries with invalid L_Key values. | Class B error handling:
|
Implementation-Specific Error Associated With a WQE | An implementation- specific error occurred in the requester's local CI that can be associated with a certain WQE. | Class B error handling:
|
Implementation-Specific Error With No WQE Association | The error can be associated with a specific QP, but not with a specific WQE on that QP's SQ. | Class C error handling:
|
Good Transfer But Can't Post CQE | The current message transfer completed without error, but the CQE could not be written to the CQ due a failure internal to the CA. The CQ is inaccessible or full and an attempt was made to retire a WQE and create a CQE. | Class F error handling:
|