![background image](http://html1.mh-extra.com/html/texas-instruments/tms320c645x/tms320c645x_user-manual_1095285044.webp)
www.ti.com
31
0
1
2
15
23
7
27
11
19
3
29
O
W
N
E
R
S
H
I
P
T
E
A
R
D
O
W
N
E
O
P
E
O
Q
S
O
P
3
RESERVED
cc
Message Length
13
21
5
25
9
17
1
30
14
22
6
26
10
18
2
28
12
20
4
24
8
16
0
Bit Fields
Next Descriptor Pointer
Buffer Pointer
SRC_ID
PRI
tt
RESERVED
Mailbox
Word
Offset
SRIO Functional Description
If a multi-segment buffer descriptor queue is not currently free, and an Rx port receives another
multi-segment message that is destined for that queue, the RX CPPI must send a RETRY RESPONSE
packet (Type 13) to the sender, indicating that an internal buffering problem exists. If a multi-segment
buffer descriptor queue is busy and there is another incoming multi-segment message with the same
SOURCEID, MAILBOX, and LETTER, an ERROR response is sent. This usually indicates that a TX
programming error has occurred, where duplicate segments or segments outside the MSGLEN were sent.
Upon successful reception of any message segment, the RX CPPI is responsible for sending a DONE
response to the sender.
If a RX message’s length is greater than that of the targeted buffer descriptor, an ERROR response is
sent back to the source device. In addition, the DSP is notified with the use of the CC field of the RX CPPI
buffer descriptor, described as follows. This situation can result from a DSP software error (misallocating a
buffer for the queue), or as a result of sender error (sending to a wrong mailbox).
An Rx transaction timeout is used by all multi-segment queues, in order to not hang receive mailbox
resources in the event that a message segment is lost in the fabric. This response-to-request timer
controls the time-out for sending a response packet and receiving the next request packet of a given
multi-segment message. It has the same value and is analogous to the request-to-response timer
discussed in the TX CPPI and LSU sections, which is defined by the 24-bit value in the port response
time-out CSR. The RapidIO specification states that the maximum time interval (all 1s) is between 3 and 6
seconds. Each multi-segment receive timer requires a 4-bit register. The register is loaded with the current
timecode when the response is sent. Each time the timecode changes, a 4-bit compare is done to the
register. If the register becomes equal to the timecode again, without the next message segment being
seen, then the transaction has timed out. If this happens, the RX buffer resources can be released.
The buffer descriptor points to the corresponding data buffer in memory and also points to the next buffer
descriptor in the queue. As segments of a received message arrive, the msgseg field of each segment is
monitored to detect the completion of the received message. Once a full message is received, the
OWNERSHIP bit is cleared in the packet’s buffer descriptor to give control to the host. At this point, a host
interrupt is issued. This interface works with programmable interrupt rate control, as discussed in
Figure 57
. There is an ICSR bit for each supported queue, as shown in
Figure 47
. On interrupt, the CPU
processes the RX buffer queue, detecting received packets by the status of the OWNERSHIP bit in each
buffer descriptor. The host processes the RX queue until it reaches a buffer descriptor with a set
OWNERSHIP bit, or set EOQ bit. Once processing is complete, the host updates the RX DMA State
Completion Pointer, allowing the peripheral to reuse the buffer.
Figure 19
shows the RX buffer descriptor fields. A RX buffer descriptor is a contiguous block of four 32-bit
data words aligned on a 32-bit boundary. Accesses to these registers are restricted to 32-bit boundaries.
Figure 19. RX Buffer Descriptor Fields
Serial RapidIO (SRIO)
44
SPRU976 – March 2006
Submit Documentation Feedback