diff options
Diffstat (limited to 'host/lib/include/uhdlib/rfnoc')
| -rw-r--r-- | host/lib/include/uhdlib/rfnoc/chdr_rx_data_xport.hpp | 41 | ||||
| -rw-r--r-- | host/lib/include/uhdlib/rfnoc/chdr_tx_data_xport.hpp | 37 | ||||
| -rw-r--r-- | host/lib/include/uhdlib/rfnoc/radio_control_impl.hpp | 9 | 
3 files changed, 79 insertions, 8 deletions
| diff --git a/host/lib/include/uhdlib/rfnoc/chdr_rx_data_xport.hpp b/host/lib/include/uhdlib/rfnoc/chdr_rx_data_xport.hpp index cb0987446..08930f9f3 100644 --- a/host/lib/include/uhdlib/rfnoc/chdr_rx_data_xport.hpp +++ b/host/lib/include/uhdlib/rfnoc/chdr_rx_data_xport.hpp @@ -177,13 +177,41 @@ public:       */      ~chdr_rx_data_xport(); -    /*! Returns maximum number payload bytes +    /*! Returns MTU for this transport in bytes       * -     * \return maximum payload bytes per packet +     * MTU is the max size for CHDR packets, including headers. For most +     * applications, get_max_payload_size() is probably the more useful method. +     * Compare also noc_block_base::get_mtu(). +     * +     * \return MTU in bytes +     */ +    size_t get_mtu() const +    { +        return _mtu; +    } + +    /*! Return the size of a CHDR packet header, in bytes. +     * +     * This helper function factors in the CHDR width for this transport. +     * Compare also noc_block_base::get_chdr_hdr_len(). +     * +     * \returns the length of a CHDR header in bytes +     */ +    size_t get_chdr_hdr_len() const +    { +        return _hdr_len; +    } + +    /*! Returns maximum number of payload bytes +     * +     * This is smaller than the MTU. Compare also +     * noc_block_base::get_max_payload_size(). +     * +     * \return maximum number of payload bytes       */      size_t get_max_payload_size() const      { -        return _max_payload_size; +        return _mtu - _hdr_len;      }      /*! @@ -389,8 +417,11 @@ private:      // Flow control state      rx_flow_ctrl_state _fc_state; -    // Maximum data payload in bytes -    size_t _max_payload_size = 0; +    // MTU in bytes +    size_t _mtu = 0; + +    // Size of CHDR headers +    size_t _hdr_len = 0;      // Sequence number for data packets      uint16_t _data_seq_num = 0; diff --git a/host/lib/include/uhdlib/rfnoc/chdr_tx_data_xport.hpp b/host/lib/include/uhdlib/rfnoc/chdr_tx_data_xport.hpp index 4e8ebe24d..e0887db6c 100644 --- a/host/lib/include/uhdlib/rfnoc/chdr_tx_data_xport.hpp +++ b/host/lib/include/uhdlib/rfnoc/chdr_tx_data_xport.hpp @@ -175,13 +175,41 @@ public:       */      ~chdr_tx_data_xport(); +    /*! Returns MTU for this transport in bytes +     * +     * MTU is the max size for CHDR packets, including headers. For most +     * applications, get_max_payload_size() is probably the more useful method. +     * Compare also noc_block_base::get_mtu(). +     * +     * \return MTU in bytes +     */ +    size_t get_mtu() const +    { +        return _mtu; +    } + +    /*! Return the size of a CHDR packet header, in bytes. +     * +     * This helper function factors in the CHDR width for this transport. +     * Compare also noc_block_base::get_chdr_hdr_len(). +     * +     * \returns the length of a CHDR header in bytes +     */ +    size_t get_chdr_hdr_len() const +    { +        return _hdr_len; +    } +      /*! Returns maximum number of payload bytes       * +     * This is smaller than the MTU. Compare also +     * noc_block_base::get_max_payload_size(). +     *       * \return maximum number of payload bytes       */      size_t get_max_payload_size() const      { -        return _max_payload_size; +        return _mtu - _hdr_len;      }      /*! @@ -373,8 +401,11 @@ private:      // Flow control state      tx_flow_ctrl_state _fc_state; -    // Maximum data payload in bytes -    size_t _max_payload_size = 0; +    // MTU in bytes +    size_t _mtu = 0; + +    // Size of CHDR headers +    size_t _hdr_len = 0;      // Sequence number for data packets      uint16_t _data_seq_num = 0; diff --git a/host/lib/include/uhdlib/rfnoc/radio_control_impl.hpp b/host/lib/include/uhdlib/rfnoc/radio_control_impl.hpp index b60b0f2a2..e268dbc07 100644 --- a/host/lib/include/uhdlib/rfnoc/radio_control_impl.hpp +++ b/host/lib/include/uhdlib/rfnoc/radio_control_impl.hpp @@ -356,6 +356,15 @@ private:          const std::vector<uint32_t>& data,          boost::optional<uint64_t> timestamp); +    //! Return the maximum samples per packet of size \p bytes +    // +    // Given a packet of size \p bytes, how many samples can we fit in there? +    // This gives the answer, factoring in item size and samples per clock. +    // +    // \param bytes Number of bytes we can fill with samples (excluding bytes +    //              required for CHDR headers!) +    int get_max_spp(const size_t bytes); +      //! FPGA compat number      const uint32_t _fpga_compat; | 
