|
| sid_t () |
| Create an unset SID.
|
|
| sid_t (uint32_t sid) |
| Create a sid_t object from a 32-Bit SID value.
|
|
| sid_t (uint8_t src_addr, uint8_t src_ep, uint8_t dst_addr, uint8_t dst_ep) |
| Create a sid_t object from its four components.
|
|
| sid_t (const std::string &) |
| Convert a string representation of a SID into its numerical representation.
|
|
| sid_t (const sid_t &sid) |
| Copy a sid.
|
|
std::string | to_pp_string () const |
| Return a decimal string representation of the SID.
|
|
std::string | to_pp_string_hex () const |
| Return a hexadecimal string representation of the SID.
|
|
bool | is_set () const |
| Returns true if this actually holds a valid SID.
|
|
uint32_t | get () const |
| Alias for get_sid()
|
|
uint32_t | get_sid () const |
| Returns a 32-Bit representation of the SID if set, or zero otherwise.
|
|
uint32_t | get_src () const |
| Return the 16-bit source address of this SID.
|
|
uint32_t | get_dst () const |
| Return the 16-bit destination address of this SID.
|
|
uint32_t | get_src_addr () const |
| Return 8-bit address of the source.
|
|
uint32_t | get_src_endpoint () const |
| Return endpoint of the source.
|
|
uint32_t | get_src_xbarport () const |
| Return crossbar port of the source.
|
|
uint32_t | get_src_blockport () const |
| Return block port of the source.
|
|
uint32_t | get_dst_addr () const |
| Return 8-bit address of the destination.
|
|
uint32_t | get_dst_endpoint () const |
| Return endpoint of the destination.
|
|
uint32_t | get_dst_xbarport () const |
| Return crossbar port of the source.
|
|
uint32_t | get_dst_blockport () const |
| Return block port of the source.
|
|
void | set (uint32_t new_sid) |
| Alias for set_sid()
|
|
void | set_from_str (const std::string &) |
| Convert a string representation of a SID into a numerical one.
|
|
void | set_sid (uint32_t new_sid) |
|
void | set_src (uint32_t new_addr) |
| Set the source address of this SID.
|
|
void | set_dst (uint32_t new_addr) |
| Set the destination address of this SID.
|
|
void | set_src_addr (uint32_t new_addr) |
|
void | set_src_endpoint (uint32_t new_addr) |
|
void | set_dst_addr (uint32_t new_addr) |
|
void | set_dst_endpoint (uint32_t new_addr) |
|
void | set_dst_xbarport (uint32_t new_xbarport) |
|
void | set_dst_blockport (uint32_t new_blockport) |
|
sid_t | reversed () const |
| Swaps dst and src address and returns the new SID.
|
|
void | reverse () |
| Swaps dst and src in-place. This modifies the current SID.
|
|
sid_t | operator= (const uint32_t new_sid) |
|
sid_t | operator= (const sid_t &sid) |
|
sid_t | operator= (const std::string &sid_str) |
|
bool | operator== (const sid_t &sid) const |
|
bool | operator== (uint32_t sid) const |
|
bool | operator== (const std::string &sid_str) const |
|
| operator uint32_t () const |
| If the SID is not set, always returns zero.
|
|
| operator bool () const |
|
Represents a stream ID (SID).
A stream ID (SID) is an identifier for data. It is a 32-Bit value which consists of 16 Bits for the source address and 16 Bits for the destination address. Every address is split into two parts: The address, which identifies the device used, and the endpoint, which identifies a specific object inside the given device (e.g., a block). Note: In the case where there are several crossbars on a single device, each crossbar gets its own address. Both address and endpoint are 8 bits in length. If a 16-bit address is required, we use the combination of the 8-bit address and the 8-bit endpoint.
+-------------+--------------+-------------+--------------+
| SRC address | SRC endpoint | DST address | DST endpoint |
+-------------+--------------+-------------+--------------+
String Representation (pretty printing)
The string representation of a SID is of the form
2.3>0.6
The '>' symbol shows the direction, so in this case, data is flowing from address 2.3 to 0.6.
As a convention, ':' is used instead of '.' when giving the SID in hexadecimal numbers, and two characters are used for each address part. As an example, the following two SIDs are identical:
2.3>0.16 (decimal)
02:03>00:10 (hexadecimal)
The format is: SRC_ADDRESS.SRC_ENDPOINT>DST_ADDRESS.DST_ENDPOINT
Block Ports
In the special case where a block on a crossbar is addressed, the endpoint is further split up into two parts of four bits each: The first four bits specify the port number on the crossbar, whereas the lower four bits represent the block port. As an example, consider the following SID, given in hexadecimal:
00:10>02:A1
In this example, assume data is flowing from the host computer to an X300. The crossbar address is 02. The endpoint is A1, which means we are accessing a block on crossbar port A (the tenth port), and are addressing block port 1.