aboutsummaryrefslogtreecommitdiffstats
path: root/host/lib/usrp
diff options
context:
space:
mode:
Diffstat (limited to 'host/lib/usrp')
-rw-r--r--host/lib/usrp/mpmd/mpmd_impl.cpp31
-rw-r--r--host/lib/usrp/mpmd/mpmd_impl.hpp2
-rw-r--r--host/lib/usrp/mpmd/mpmd_mboard_impl.cpp5
-rw-r--r--host/lib/usrp/mpmd/mpmd_xport_mgr.cpp18
-rw-r--r--host/lib/usrp/mpmd/mpmd_xport_mgr.hpp6
5 files changed, 50 insertions, 12 deletions
diff --git a/host/lib/usrp/mpmd/mpmd_impl.cpp b/host/lib/usrp/mpmd/mpmd_impl.cpp
index 911b57558..7b4ca5bc8 100644
--- a/host/lib/usrp/mpmd/mpmd_impl.cpp
+++ b/host/lib/usrp/mpmd/mpmd_impl.cpp
@@ -204,6 +204,25 @@ namespace {
;
}
+ /*** MTUs ***********************************************************/
+ tree->create<size_t>(mb_path / "mtu/recv")
+ .add_coerced_subscriber([](const size_t){
+ throw uhd::runtime_error(
+ "Attempting to write read-only value (MTU)!");
+ })
+ .set_publisher([mb](){
+ return mb->get_mtu(uhd::RX_DIRECTION);
+ })
+ ;
+ tree->create<size_t>(mb_path / "mtu/send")
+ .add_coerced_subscriber([](const size_t){
+ throw uhd::runtime_error(
+ "Attempting to write read-only value (MTU)!");
+ })
+ .set_publisher([mb](){
+ return mb->get_mtu(uhd::TX_DIRECTION);
+ })
+ ;
}
void reset_time_synchronized(uhd::property_tree::sptr tree)
@@ -389,20 +408,8 @@ mpmd_mboard_impl::uptr mpmd_impl::setup_mb(
_tree->create<std::string>(mb_path / "connection")
.set(mb->device_info.get("connection", "remote"));
- // Do real MTU discovery (something similar like X300 but with MPM)
-
- _tree->create<size_t>(mb_path / "mtu/recv").set(1500);
- _tree->create<size_t>(mb_path / "mtu/send").set(1500);
_tree->create<size_t>(mb_path / "link_max_rate").set(1e9 / 8);
- // query more information about FPGA/MPM
-
-
- // Query time/clock sources on mboards/dboards
- // Throw rpc calls with boost bind into the property tree?
-
-
- // implicit move
return mb;
}
diff --git a/host/lib/usrp/mpmd/mpmd_impl.hpp b/host/lib/usrp/mpmd/mpmd_impl.hpp
index fe98b0329..50f533c99 100644
--- a/host/lib/usrp/mpmd/mpmd_impl.hpp
+++ b/host/lib/usrp/mpmd/mpmd_impl.hpp
@@ -100,6 +100,8 @@ class mpmd_mboard_impl
const uhd::device_addr_t& args
);
+ size_t get_mtu(const uhd::direction_t dir) const;
+
uhd::device_addr_t get_rx_hints() const;
uhd::device_addr_t get_tx_hints() const;
diff --git a/host/lib/usrp/mpmd/mpmd_mboard_impl.cpp b/host/lib/usrp/mpmd/mpmd_mboard_impl.cpp
index 1038be26d..501f7f701 100644
--- a/host/lib/usrp/mpmd/mpmd_mboard_impl.cpp
+++ b/host/lib/usrp/mpmd/mpmd_mboard_impl.cpp
@@ -194,6 +194,11 @@ uhd::both_xports_t mpmd_mboard_impl::make_transport(
return xports;
}
+size_t mpmd_mboard_impl::get_mtu(const uhd::direction_t dir) const
+{
+ return _xport_mgr->get_mtu(dir);
+}
+
uhd::device_addr_t mpmd_mboard_impl::get_rx_hints() const
{
// TODO: See if we need to do anything here. get_rx_stream() might care.
diff --git a/host/lib/usrp/mpmd/mpmd_xport_mgr.cpp b/host/lib/usrp/mpmd/mpmd_xport_mgr.cpp
index 0ca77c740..3d999c1ad 100644
--- a/host/lib/usrp/mpmd/mpmd_xport_mgr.cpp
+++ b/host/lib/usrp/mpmd/mpmd_xport_mgr.cpp
@@ -68,6 +68,24 @@ public:
);
}
+ size_t get_mtu(
+ const uhd::direction_t dir
+ ) const {
+ if (_xport_ctrls.empty()) {
+ UHD_LOG_WARNING("MPMD",
+ "Cannot determine MTU, no transport controls have been "
+ "established!");
+ return 0;
+ }
+
+ size_t mtu = ~size_t(0);
+ for (const auto &xport_ctrl_pair : _xport_ctrls) {
+ mtu = std::min(mtu, xport_ctrl_pair.second->get_mtu(dir));
+ }
+
+ return mtu;
+ }
+
private:
/**************************************************************************
diff --git a/host/lib/usrp/mpmd/mpmd_xport_mgr.hpp b/host/lib/usrp/mpmd/mpmd_xport_mgr.hpp
index cdb082111..44906c872 100644
--- a/host/lib/usrp/mpmd/mpmd_xport_mgr.hpp
+++ b/host/lib/usrp/mpmd/mpmd_xport_mgr.hpp
@@ -99,6 +99,12 @@ public:
const uhd::device_addr_t& xport_args,
xport_info_t& xport_info_out
) = 0;
+
+ /*! Return the path MTU for whatever this manager lets us do
+ */
+ virtual size_t get_mtu(
+ const uhd::direction_t dir
+ ) const = 0;
};
}}} /* namespace uhd::mpmd::xport */