diff options
| author | Josh Blum <josh@joshknows.com> | 2010-10-14 11:51:48 -0700 | 
|---|---|---|
| committer | Josh Blum <josh@joshknows.com> | 2010-10-14 11:51:48 -0700 | 
| commit | 4582a2deb385c0a4849f5d20c44a5469779bcbb2 (patch) | |
| tree | a9a939d44e33b82974f07002d66d51727b668429 | |
| parent | 376e22ca3bf25c8d6bb53cd987b245e5b79860f9 (diff) | |
| download | uhd-4582a2deb385c0a4849f5d20c44a5469779bcbb2.tar.gz uhd-4582a2deb385c0a4849f5d20c44a5469779bcbb2.tar.bz2 uhd-4582a2deb385c0a4849f5d20c44a5469779bcbb2.zip | |
usrp2: move udp port initialization into mboard impl so its done before async registers are setup
| -rw-r--r-- | host/lib/usrp/usrp2/io_impl.cpp | 10 | ||||
| -rw-r--r-- | host/lib/usrp/usrp2/mboard_impl.cpp | 16 | ||||
| -rw-r--r-- | host/lib/usrp/usrp2/usrp2_impl.cpp | 3 | ||||
| -rw-r--r-- | host/lib/usrp/usrp2/usrp2_impl.hpp | 2 | 
4 files changed, 16 insertions, 15 deletions
| diff --git a/host/lib/usrp/usrp2/io_impl.cpp b/host/lib/usrp/usrp2/io_impl.cpp index 25fd1c484..8314cf9ae 100644 --- a/host/lib/usrp/usrp2/io_impl.cpp +++ b/host/lib/usrp/usrp2/io_impl.cpp @@ -242,16 +242,6 @@ void usrp2_impl::io_impl::recv_pirate_loop(   * Helper Functions   **********************************************************************/  void usrp2_impl::io_init(void){ -    //send a small data packet so the usrp2 knows the udp source port -    BOOST_FOREACH(zero_copy_if::sptr data_transport, _data_transports){ -        managed_send_buffer::sptr send_buff = data_transport->get_send_buff(); -        static const boost::uint32_t data[2] = { -            uhd::htonx(boost::uint32_t(0 /* don't care seq num */)), -            uhd::htonx(boost::uint32_t(USRP2_INVALID_VRT_HEADER)) -        }; -        std::memcpy(send_buff->cast<void*>(), &data, sizeof(data)); -        send_buff->commit(sizeof(data)); -    }      //the assumption is that all data transports should be identical      const size_t num_recv_frames = _data_transports.front()->get_num_recv_frames(); diff --git a/host/lib/usrp/usrp2/mboard_impl.cpp b/host/lib/usrp/usrp2/mboard_impl.cpp index 5210eee94..8f3ae5c1b 100644 --- a/host/lib/usrp/usrp2/mboard_impl.cpp +++ b/host/lib/usrp/usrp2/mboard_impl.cpp @@ -21,6 +21,7 @@  #include <uhd/usrp/dsp_utils.hpp>  #include <uhd/usrp/mboard_props.hpp>  #include <uhd/utils/assert.hpp> +#include <uhd/utils/byteswap.hpp>  #include <uhd/utils/algorithm.hpp>  #include <uhd/types/mac_addr.hpp>  #include <uhd/types/dict.hpp> @@ -38,13 +39,24 @@ using namespace uhd::usrp;  usrp2_mboard_impl::usrp2_mboard_impl(      size_t index,      transport::udp_simple::sptr ctrl_transport, +    transport::zero_copy_if::sptr data_transport,      size_t recv_samps_per_packet, -    size_t send_bytes_per_packet,      const device_addr_t &flow_control_hints  ):      _index(index),      _recv_samps_per_packet(recv_samps_per_packet)  { +    //Send a small data packet so the usrp2 knows the udp source port. +    //This setup must happen before further initialization occurs +    //or the async update packets will cause ICMP destination unreachable. +    transport::managed_send_buffer::sptr send_buff = data_transport->get_send_buff(); +    static const boost::uint32_t data[2] = { +        uhd::htonx(boost::uint32_t(0 /* don't care seq num */)), +        uhd::htonx(boost::uint32_t(USRP2_INVALID_VRT_HEADER)) +    }; +    std::memcpy(send_buff->cast<void*>(), &data, sizeof(data)); +    send_buff->commit(sizeof(data)); +      //make a new interface for usrp2 stuff      _iface = usrp2_iface::make(ctrl_transport); @@ -98,7 +110,7 @@ usrp2_mboard_impl::usrp2_mboard_impl(      //setting the packets per update      const double ups_per_fifo = flow_control_hints.cast<double>("ups_per_fifo", 8); -    const size_t packets_per_up = size_t(usrp2_impl::sram_bytes/ups_per_fifo/send_bytes_per_packet); +    const size_t packets_per_up = size_t(usrp2_impl::sram_bytes/ups_per_fifo/data_transport->get_send_frame_size());      _iface->poke32(U2_REG_TX_CTRL_PACKETS_PER_UP, U2_FLAG_TX_CTRL_UP_ENB | packets_per_up);      //init the ddc diff --git a/host/lib/usrp/usrp2/usrp2_impl.cpp b/host/lib/usrp/usrp2/usrp2_impl.cpp index e271f839c..afc69f703 100644 --- a/host/lib/usrp/usrp2/usrp2_impl.cpp +++ b/host/lib/usrp/usrp2/usrp2_impl.cpp @@ -171,9 +171,8 @@ usrp2_impl::usrp2_impl(      //create a new mboard handler for each control transport      for(size_t i = 0; i < ctrl_transports.size(); i++){          _mboards.push_back(usrp2_mboard_impl::sptr(new usrp2_mboard_impl( -            i, ctrl_transports[i], +            i, ctrl_transports[i], data_transports[i],              this->get_max_recv_samps_per_packet(), -            _data_transports[i]->get_send_frame_size(),              flow_control_hints          )));          //use an empty name when there is only one mboard diff --git a/host/lib/usrp/usrp2/usrp2_impl.hpp b/host/lib/usrp/usrp2/usrp2_impl.hpp index 3aa6e9cd5..2531bd6cb 100644 --- a/host/lib/usrp/usrp2/usrp2_impl.hpp +++ b/host/lib/usrp/usrp2/usrp2_impl.hpp @@ -84,8 +84,8 @@ public:      usrp2_mboard_impl(          size_t index,          uhd::transport::udp_simple::sptr, +        uhd::transport::zero_copy_if::sptr,          size_t recv_samps_per_packet, -        size_t send_bytes_per_packet,          const uhd::device_addr_t &flow_control_hints      );      ~usrp2_mboard_impl(void); | 
