diff options
Diffstat (limited to 'host/lib/usrp/mpmd/mpmd_impl.hpp')
| -rw-r--r-- | host/lib/usrp/mpmd/mpmd_impl.hpp | 53 | 
1 files changed, 42 insertions, 11 deletions
diff --git a/host/lib/usrp/mpmd/mpmd_impl.hpp b/host/lib/usrp/mpmd/mpmd_impl.hpp index 9a8b25ba0..6af2e4385 100644 --- a/host/lib/usrp/mpmd/mpmd_impl.hpp +++ b/host/lib/usrp/mpmd/mpmd_impl.hpp @@ -34,6 +34,7 @@ static const char MPM_DISCOVERY_CMD[] = "MPM-DISC";  static const char MPM_ECHO_CMD[] = "MPM-ECHO";  static const size_t MPMD_10GE_DATA_FRAME_MAX_SIZE = 8000; // CHDR packet size in bytes +  struct frame_size_t  {      size_t recv_frame_size; @@ -46,35 +47,49 @@ struct frame_size_t  class mpmd_mboard_impl  {    public: +    /*** Types ***************************************************************/      using uptr = std::unique_ptr<mpmd_mboard_impl>;      using dev_info = std::map<std::string, std::string>; + +    /*** Structors ***********************************************************/      mpmd_mboard_impl(const std::string& addr);      ~mpmd_mboard_impl(); + +    /*** Factory *************************************************************/      static uptr make(const std::string& addr); -    bool initialization_done = false; +    /*** Public attributes ***************************************************/ +    //! Device information is read back via MPM and stored here.      uhd::dict<std::string, std::string> device_info; -    uhd::dict<std::string, std::string> recv_args; -    uhd::dict<std::string, std::string> send_args; -    std::map<std::string, std::string> data_interfaces; -    std::string loaded_fpga_image; -    std::string xport_path; -    /*! Reference the RPC client for this motherboard +    //! Number of RFNoC crossbars on this device +    size_t num_xbars = 0; + +    /*! Reference to the RPC client for this motherboard       *       * We store a shared ptr, because we might share it with some of the RFNoC       * blocks.       */      uhd::rpc_client::sptr rpc; + + +    /************************************************************************* +     * API +     ************************************************************************/      uhd::sid_t allocate_sid(const uint16_t port,                              const uhd::sid_t address,                              const uint32_t xbar_src_addr,                              const uint32_t xbar_src_dst);    private: +    /*! Renew the claim onto the device. +     * +     * This is meant to be called repeatedly, e.g., using a UHD task. +     */      bool claim(); -    std::string generate_token() const; -    std::string _rpc_token; + +    /*! Continuously reclaims the device. +     */      uhd::task::sptr _claimer_task;  }; @@ -91,19 +106,35 @@ class mpmd_impl : public uhd::usrp::device3_impl      mpmd_impl(const uhd::device_addr_t& device_addr);      ~mpmd_impl(); -    mpmd_mboard_impl::uptr setup_mb(const size_t mb_i, -                                    const uhd::device_addr_t& dev_addr);      uhd::both_xports_t make_transport(const uhd::sid_t&,                                        uhd::usrp::device3_impl::xport_type_t,                                        const uhd::device_addr_t&);    private: +    mpmd_mboard_impl::uptr setup_mb( +            const size_t mb_i, +            const uhd::device_addr_t& dev_addr +    ); + +    void setup_rfnoc_blocks( +            const size_t mb_i, +            const uhd::device_addr_t& dev_addr +    ); + +    //! Configure all blocks that require access to an RPC client +    void setup_rpc_blocks(const uhd::device_addr_t &block_args); +      uhd::device_addr_t get_rx_hints(size_t mb_index); +    uhd::dict<std::string, std::string> recv_args; +    uhd::dict<std::string, std::string> send_args; +      uhd::device_addr_t _device_addr;      std::vector<mpmd_mboard_impl::uptr> _mb;      size_t _sid_framer;  }; +  uhd::device_addrs_t mpmd_find(const uhd::device_addr_t& hint_); +  #endif /* INCLUDED_MPMD_IMPL_HPP */  // vim: sw=4 expandtab:  | 
