diff options
Diffstat (limited to 'host/lib')
| -rw-r--r-- | host/lib/types/device_addr.cpp | 9 | ||||
| -rw-r--r-- | host/lib/usrp/b100/b100_impl.cpp | 8 | ||||
| -rw-r--r-- | host/lib/usrp/b200/b200_impl.cpp | 8 | ||||
| -rw-r--r-- | host/lib/usrp/mpmd/mpmd_find.cpp | 6 | ||||
| -rw-r--r-- | host/lib/usrp/usrp1/usrp1_impl.cpp | 10 | ||||
| -rw-r--r-- | host/lib/usrp/usrp2/usrp2_impl.cpp | 5 | ||||
| -rw-r--r-- | host/lib/usrp/x300/x300_impl.cpp | 6 | ||||
| -rw-r--r-- | host/lib/usrp_clock/octoclock/octoclock_impl.cpp | 5 | 
8 files changed, 49 insertions, 8 deletions
diff --git a/host/lib/types/device_addr.cpp b/host/lib/types/device_addr.cpp index d5e9ce0d4..3a7f80ed9 100644 --- a/host/lib/types/device_addr.cpp +++ b/host/lib/types/device_addr.cpp @@ -9,6 +9,7 @@  #include <boost/algorithm/string.hpp>  #include <boost/format.hpp>  #include <boost/tokenizer.hpp> +#include <algorithm>  #include <regex>  #include <sstream>  #include <stdexcept> @@ -51,6 +52,14 @@ device_addr_t::device_addr_t(const std::map<std::string, std::string>& info)      }  } +bool device_addr_t::has_key_with_prefix(const std::string& prefix) const +{ +    auto dev_keys = this->keys(); +    return std::any_of(dev_keys.begin(), dev_keys.end(), [prefix](const auto& key) { +        return key.substr(0, prefix.size()) == prefix; +    }); +} +  std::string device_addr_t::to_pp_string(void) const  {      if (this->size() == 0) diff --git a/host/lib/usrp/b100/b100_impl.cpp b/host/lib/usrp/b100/b100_impl.cpp index 4d72e4f04..02a23ec38 100644 --- a/host/lib/usrp/b100/b100_impl.cpp +++ b/host/lib/usrp/b100/b100_impl.cpp @@ -44,9 +44,15 @@ static device_addrs_t b100_find(const device_addr_t& hint)      // Return an empty list of addresses when an address or resource is specified,      // since an address and resource is intended for a different, non-USB, device. -    if (hint.has_key("addr") || hint.has_key("resource")) +    if (hint.has_key("addr"))          return b100_addrs; +    if (hint.has_key_with_prefix("resource")) { +        UHD_LOG_TRACE( +            "B100 FIND", "Returning early, PCIe is not supported with b100 devices."); +        return b100_addrs; +    } +      uint16_t vid, pid;      if (hint.has_key("vid") && hint.has_key("pid") && hint.has_key("type") diff --git a/host/lib/usrp/b200/b200_impl.cpp b/host/lib/usrp/b200/b200_impl.cpp index 7f250fd42..139dd9362 100644 --- a/host/lib/usrp/b200/b200_impl.cpp +++ b/host/lib/usrp/b200/b200_impl.cpp @@ -182,8 +182,14 @@ static device_addrs_t b200_find(const device_addr_t& hint)      // Return an empty list of addresses when an address or resource is specified,      // since an address and resource is intended for a different, non-USB, device.      for (device_addr_t hint_i : separate_device_addr(hint)) { -        if (hint_i.has_key("addr") || hint_i.has_key("resource")) +        if (hint_i.has_key("addr"))              return b200_addrs; + +        if (hint.has_key_with_prefix("resource")) { +            UHD_LOG_TRACE( +                "B200 FIND", "Returning early, PCIe is not supported with b200 devices."); +            return b200_addrs; +        }      }      // Important note: diff --git a/host/lib/usrp/mpmd/mpmd_find.cpp b/host/lib/usrp/mpmd/mpmd_find.cpp index c08e23fa7..77f7486dd 100644 --- a/host/lib/usrp/mpmd/mpmd_find.cpp +++ b/host/lib/usrp/mpmd/mpmd_find.cpp @@ -224,6 +224,12 @@ device_addrs_t mpmd_find(const device_addr_t& hint_)              return {};          }      } +    if (hint_.has_key_with_prefix("resource")) { +        UHD_LOG_TRACE( +            "MPMD FIND", "Returning early, PCIe is not support with mpm devices."); +        return {}; +    } +      UHD_LOG_TRACE("MPMD FIND", "Finding with " << hints.size() << " different hint(s).");      // Scenario 1): User gave us at least one address diff --git a/host/lib/usrp/usrp1/usrp1_impl.cpp b/host/lib/usrp/usrp1/usrp1_impl.cpp index d86bf6d56..37bd4a4a2 100644 --- a/host/lib/usrp/usrp1/usrp1_impl.cpp +++ b/host/lib/usrp/usrp1/usrp1_impl.cpp @@ -47,9 +47,15 @@ static device_addrs_t usrp1_find(const device_addr_t& hint)      // Return an empty list of addresses when an address or resource is specified,      // since an address and resource is intended for a different, non-USB, device. -    if (hint.has_key("addr") || hint.has_key("resource")) +    if (hint.has_key("addr"))          return usrp1_addrs; +    if (hint.has_key_with_prefix("resource")) { +        UHD_LOG_TRACE( +            "USRP1 FIND", "Returning early, PCIe is not supported with usrp1 devices."); +        return usrp1_addrs; +    } +      uint16_t vid, pid;      if (hint.has_key("vid") && hint.has_key("pid") && hint.has_key("type") @@ -121,7 +127,7 @@ static device_addrs_t usrp1_find(const device_addr_t& hint)              // this is a found usrp1 when the hint serial and name match or blank              if ((not hint.has_key("name") or hint["name"] == new_addr["name"])                  and (not hint.has_key("serial") -                        or hint["serial"] == new_addr["serial"])) { +                     or hint["serial"] == new_addr["serial"])) {                  usrp1_addrs.push_back(new_addr);              }          } diff --git a/host/lib/usrp/usrp2/usrp2_impl.cpp b/host/lib/usrp/usrp2/usrp2_impl.cpp index c2514ae02..8ca503aa9 100644 --- a/host/lib/usrp/usrp2/usrp2_impl.cpp +++ b/host/lib/usrp/usrp2/usrp2_impl.cpp @@ -68,8 +68,11 @@ device_addrs_t usrp2_find(const device_addr_t& hint_)      // Return an empty list of addresses when a resource is specified,      // since a resource is intended for a different, non-USB, device. -    if (hint.has_key("resource")) +    if (hint.has_key_with_prefix("resource")) { +        UHD_LOG_TRACE( +            "USRP2 FIND", "Returning early, PCIe is not supported with usrp2 devices.");          return usrp2_addrs; +    }      // if no address was specified, send a broadcast on each interface      if (not hint.has_key("addr")) { diff --git a/host/lib/usrp/x300/x300_impl.cpp b/host/lib/usrp/x300/x300_impl.cpp index fa8425fac..663b951a1 100644 --- a/host/lib/usrp/x300/x300_impl.cpp +++ b/host/lib/usrp/x300/x300_impl.cpp @@ -100,7 +100,9 @@ device_addrs_t x300_find(const device_addr_t& hint_)          return reply_addrs;      } -    if (!hint.has_key("resource")) { +    bool has_resource_key = hint.has_key_with_prefix("resource"); + +    if (!has_resource_key) {          // otherwise, no address was specified, send a broadcast on each interface          for (const transport::if_addrs_t& if_addrs : transport::get_if_addrs()) {              // avoid the loopback device @@ -135,7 +137,7 @@ device_addrs_t x300_find(const device_addr_t& hint_)          }      } -    device_addrs_t pcie_addrs = pcie_manager::find(hint, hint.has_key("resource")); +    device_addrs_t pcie_addrs = pcie_manager::find(hint, has_resource_key);      if (not pcie_addrs.empty()) {          addrs.insert(addrs.end(), pcie_addrs.begin(), pcie_addrs.end());      } diff --git a/host/lib/usrp_clock/octoclock/octoclock_impl.cpp b/host/lib/usrp_clock/octoclock/octoclock_impl.cpp index b4185eded..24032c33f 100644 --- a/host/lib/usrp_clock/octoclock/octoclock_impl.cpp +++ b/host/lib/usrp_clock/octoclock/octoclock_impl.cpp @@ -71,8 +71,11 @@ device_addrs_t octoclock_find(const device_addr_t& hint)      // Return an empty list of addresses when a resource is specified,      // since a resource is intended for a different, non-USB, device. -    if (hint.has_key("resource")) +    if (hint.has_key_with_prefix("resource")) { +        UHD_LOG_TRACE("OCTOCLOCK FIND", +            "Returning early, PCIe is not supported with octoclock devices.");          return octoclock_addrs; +    }      // If no address was specified, send a broadcast on each interface      if (not _hint.has_key("addr")) {  | 
