diff options
Diffstat (limited to 'host/include')
-rw-r--r-- | host/include/uhd/rfnoc/defaults.hpp | 3 | ||||
-rw-r--r-- | host/include/uhd/rfnoc/noc_block_base.hpp | 49 | ||||
-rw-r--r-- | host/include/uhd/rfnoc/replay_block_control.hpp | 3 |
3 files changed, 51 insertions, 4 deletions
diff --git a/host/include/uhd/rfnoc/defaults.hpp b/host/include/uhd/rfnoc/defaults.hpp index d0f6c2311..afc018810 100644 --- a/host/include/uhd/rfnoc/defaults.hpp +++ b/host/include/uhd/rfnoc/defaults.hpp @@ -44,9 +44,6 @@ static const std::string DEFAULT_BLOCK_NAME = "Block"; //! This NOC-ID is used to look up the default block static const uint32_t DEFAULT_NOC_ID = 0xFFFFFFFF; static const double DEFAULT_TICK_RATE = 1.0; -// Whenever we need a default spp value use this, unless there are some -// block/device-specific constraints. It will keep the frame size below 1500. -static const int DEFAULT_SPP = 1996; /*! The NoC ID is the unique identifier of the block type. All blocks of the * same type have the same NoC ID. diff --git a/host/include/uhd/rfnoc/noc_block_base.hpp b/host/include/uhd/rfnoc/noc_block_base.hpp index ab002841c..6b1ac5bcd 100644 --- a/host/include/uhd/rfnoc/noc_block_base.hpp +++ b/host/include/uhd/rfnoc/noc_block_base.hpp @@ -115,6 +115,10 @@ public: /*! Return the current MTU on a given edge * + * Note: The MTU is the maximum size of a CHDR packet, including header. In + * order to find out the maximum payload size, calling get_max_payload_size() + * is the recommended alternative. + * * The MTU is determined by the block itself (i.e., how big of a packet can * this block handle on this edge), but also the neighboring block, and * possibly the transport medium between the blocks. This value can thus be @@ -127,6 +131,51 @@ public: */ size_t get_mtu(const res_source_info& edge); + /*! Return the size of a CHDR packet header, in bytes. + * + * This helper function factors in the CHDR width for this block. + * + * \param account_for_ts If true (default), the assumption is that we reserve + * space for a timestamp. It is possible to increase + * the payload if no timestamp is used (only for 64 + * bit CHDR widths!), however, this is advanced usage + * and should only be used in special circumstances, + * as downstream blocks might not be able to handle + * such packets. + * \returns the length of a CHDR header in bytes + */ + size_t get_chdr_hdr_len(const bool account_for_ts = true) const; + + /*! Return the maximum usable payload size on a given edge, in bytes. + * + * This is very similar to get_mtu(), except it also accounts for the + * header. + * + * Example: Say the MTU on a given edge is 8192 bytes. The CHDR width is + * 64 bits. If we wanted to add a timestamp, we would thus require 16 bytes + * for the total header, leaving only 8192-16=8176 bytes for a payload, + * which is what this function would return. + * The same MTU, with a CHDR width of 512 bits however, would require leaving + * 64 bytes for the header (regardless of whether or not a timestamp is + * included). In that case, this function would return 8192-64=8128 bytes + * max payload size. + * + * \param edge The edge on which the max payload size is queried. edge.type + * must be INPUT_EDGE or OUTPUT_EDGE! See also get_mtu(). + * \param account_for_ts If true (default), the assumption is that we reserve + * space for a timestamp. It is possible to increase + * the payload if no timestamp is used (only for 64 + * bit CHDR widths!), however, this is advanced usage + * and should only be used in special circumstances, + * as downstream blocks might not be able to handle + * such packets. + * \returns the max payload size as determined by the overall graph on this + * edge, as well as the CHDR width. + * \throws uhd::value_error if edge is not referring to a valid edge + */ + size_t get_max_payload_size( + const res_source_info& edge, const bool account_for_ts = true); + /*! Return the arguments that were passed into this block from the framework */ uhd::device_addr_t get_block_args() const diff --git a/host/include/uhd/rfnoc/replay_block_control.hpp b/host/include/uhd/rfnoc/replay_block_control.hpp index dc56d59e0..c7624d044 100644 --- a/host/include/uhd/rfnoc/replay_block_control.hpp +++ b/host/include/uhd/rfnoc/replay_block_control.hpp @@ -297,7 +297,8 @@ public: /*! Set the maximum size of a packet * - * Sets the maximum packet size, inclusive of headers and payload. + * Sets the maximum packet size, inclusive of headers and payload. Cannot + * exceed the MTU for this block. * * \param size The size of the packet * \param port Which output port of the replay block to use |