| Commit message (Collapse) | Author | Age | Files | Lines |
|
|
|
|
| |
dpdk_zero_copy.hpp was referenced in multiple places using relative
paths. Let's throw it in uhdlib for easy access.
|
|
|
|
| |
With the same APIs, this will make it easier to add support for X310.
|
| |
|
|
|
|
|
|
|
| |
- expert_nodes.hpp: fix to work with BOOST_VERSION < 105600, since UHD
still supports Boost 1.53.00.
- gpio_atr_3000.hpp: requires boost::noncopyable header, so replicate
that (now) in export_nodes.hpp.
|
|
|
|
|
|
|
|
| |
Avoid sending flow control ACK packets for lossless transports.
Add 'send_no_fc_acks' device argument to explicitly prevent
flow control ACK packets from being sent.
Signed-off-by: michael-west <michael.west@ettus.com>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Add configuration sections to the UHD config file for NIC entries. Keys
are based on MAC addresses, and the entries beneath the section describe
which CPU and I/O thread to use for the NIC and its IPv4 address.
Make ring sizes configurable for uhd-dpdk. Ring size is now an argument
for packet buffers. Note that the maximum number of available buffers
is still determined at init!
Add ability to receive broadcasts to uhd-dpdk. This is controllable by
a boolean in the sockarg during socket creation. dpdk_zero_copy will
filter broadcast packets out.
Add dpdk_simple transport (to mirror udp_simple). This transport allows
receiving from broadcast addresses, but it only permits one outstanding
buffer at a time.
Fix IP checksum handling in UHD-DPDK.
TX checksums were not being calculated in the NIC, and in RX, the check
for IP checksums allowed values of zero (reported as none). Now packets
with bad IP checksums will be dropped.
|
|
|
|
|
|
| |
Boost changed the lcm() and gcd() functions in Boost 1.67. This creates
portable UHD versions to be used instead. They use various Boost
versions under the hood conditionally.
|
|
|
|
| |
Formatting files that will be touched in upcoming changes to uhd::math
|
|
|
|
|
| |
Remove trailing vim hints in header files. This functionality will be
replaced by clang-format.
|
|
|
|
|
|
| |
Various data structures are nicely formatted to be human-readable.
clang-format makes these structures harder to read, so we can skip
formatting these sections.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
This adds an internal wait queue API to uhd-dpdk. Socket configuration
requests had their blocking calls re-implemented on top of this API, and
it is also used to service requests to wait on RX packets (w/ timeout).
The wait API involves a multi-producer, single-consumer queue per I/O
thread (waiter_ring), with a condition variable used for sleeping. The
data structure is shared between user thread and I/O thread, and because
timeouts make resource release time non-deterministic, we use reference
counting on the shared resource.
One reference is generated by the user thread and passed to the I/O
thread to consume. A user thread that still needs the data after waking
must get() another reference, to postpone the destruction of the
resource until it is done.
Timeouts are based on CLOCK_MONOTONIC. For recv, a timeout of 0
indicates blocking indefinitely, and a negative timeout indicates no
timeout is desired.
Also drop timeout for closing sockets in uhd-dpdk.
The timeout would allow a user thread to pre-empt the I/O thread's
cleanup process. The user thread would free data structures the I/O
thread still needed to function. Since this timeout is superfluous
anyway, let's just get rid of it.
Also add some more input checking and error reporting.
|
|
|
|
|
|
|
|
|
|
|
|
| |
Set MTU of Ethernet ports:
Some NICs (like the Mellanox ones) require this to work.
Add ARP responder to uhd-dpdk.
Clean up pending ARP request list when done:
Threads waiting for an ARP request to complete would be woken up when
the request completed, but they wouldn't get removed from the list of
pending requests. This fixes the issue.
|
|
|
|
|
| |
Using new rpc client new API that ensure atomic setting of timeout on
each rpc call.
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
The current implementation of the UHD RPC client has a timeout that is
being accessed non-atomically. Many calls follow the pattern:
1. set_timeout(value)
2. request_rpc()
3. set_timeout(default)
which is not atomic. Other concurrent calls on the same rpc client may
change the timeout value; leads to unexpected behavior
These new set of function will, instead, handle
setting and re-setting the timeout atomically in the RPC request.
|
|
|
|
|
|
| |
Header wasn't included until Boost 1.56.
Fixes 5c012cad7858 ("lib: experts: Add potentially missing but...")
|
|
|
|
|
| |
This adds an include for boost/core/noncopyable.hpp. Without it, builds
would potentially fail on Boost 1.69++.
|
|
|
|
|
| |
- Set SPI clock back to 3 MHz
- Fix returned frequency for ADF5355 (rev A and B boards)
|
| |
|
| |
|
|
|
|
|
|
| |
- Added delay for VTUNE calibration as per ADF5355 and ADF5356 data sheets
- Increased SPI clock to 10 MHz
- Removed write to register 10 during tuning of ADF5356 to match ADF5355 code and reduce tune time
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Also updates our coding style file.
Ancient CMake versions required upper-case commands. Later command
names became case-insensitive. Now the preferred style is lower-case.
Run the following shell code (with GNU compliant sed):
cmake --help-command-list | grep -v "cmake version" | while read c; do
echo 's/\b'"$(echo $c | tr '[:lower:]' '[:upper:]')"'\(\s*\)(/'"$c"'\1(/g'
done > convert.sed \
&& git ls-files -z -- bootstrap '*.cmake' '*.cmake.in' \
'*CMakeLists.txt' | xargs -0 gsed -i -f convert.sed && rm convert.sed
(Make sure the backslashes don't get mangled!)
|
| |
|
|
|
|
| |
EEPROM
|
|
|
|
|
| |
- If FRAC2 isn't exactly FRAC1 at certain frequencies, drifting spurs can
be seen in the spectrum
|
| |
|
| |
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
This library makes available a userspace network stack with a
socket-like interface for applications (except the sockets pass around
pointers to buffers and use the buffers directly--It's sockets + a
put/get for buffer management). Supported services are ARP and UDP.
Destinations can be unicast or broadcast. Multicast is not currently
supported.
The implementation has two driver layers. The upper layer runs within
the caller's context. The caller will make requests through lockless
ring buffers (including socket creation and packet transmission), and
the lower layer will implement the requests and provide a response.
Currently, the lower layer runs in a separate I/O thread, and the caller
will block until it receives a response.
The I/O thread's main body is in src/uhd_dpdk_driver.c. You'll find that
all I/O thread functions are prefixed by an underscore, and user thread
functions do not.
src/uhd_dpdk.c is used to initialize uhd-dpdk and bring up the network
interfaces.
src/uhd_dpdk_fops.c and src/uhd_dpdk_udp.c are for network services.
The test is a benchmark of a flow control loop using a certain made-up
protocol with credits and sequence number tracking.
|
|
|
|
|
| |
- Add default parser helper
- Allow _enforce_discrete() for str_arg
|
|
|
|
|
|
|
|
|
| |
- The flushing mechanism now looks similar to that in noc_shell
- Make use of new flush bit in FIFO control register
- Restrict using the clear bit only after flushing to ensure no
partial packets are introduced in the stream. (clear immediately
empties out FIFOs)
- Changes are backwards compatible with older FPGAs
|
|
|
|
|
| |
This device is the only one using it, and no one will ever use it going
forward.
|
| |
|
|
|
|
| |
Co-authored-by: Sugandha Gupta <sugandha.gupta@ettus.com>
|
| |
|
|
|
|
| |
This disables the ability to do "network mode" on the E310.
|
|
|
|
|
| |
Since the frequency shifter is set to a relative rate, it needs to be
updated when changing the sampling rate.
|
|
|
|
|
| |
LVDS interface can support both timing modes 1R1T/2R2T
The API sets the required bit in catalina registers.
|
| |
|
|
|
|
| |
Replace with std::this_thread::sleep_for().
|
| |
|
| |
|
| |
|
| |
|
|
|
|
|
|
|
| |
Allows full bandwidth range to user.
Reviewed-by: Michael West <michael.west@ettus.com>
Reviewed-by: Martin Braun <martin.braun@ettus.com>
|
|
|
|
|
|
|
| |
- Remove all use of boost::bind and boost::function
- Demote some log messages to DEBUG
- Change some formatting to match coding guidelines
- B2xx/E310: Match changes in loopback function
|
| |
|
|
|
|
| |
- Bump compat number for DDC/DUC to 2.0
|
|
|
|
|
| |
Note: This tool is not considered done, complete, unchangeable, or
anything other than experimental.
|
|
|
|
|
|
|
|
|
|
| |
- ctrl_iface is now longer a wb_iface. All it can do now is send command
packets, and receive responses to those.
- ctrl_iface does not store command time or tick rate
- wb_iface_adapter is no longer a set of functors, but a wrapper around
ctrl_iface. Command times are stored once, in the block.
- DMA FIFO and radio block controllers have an easier time getting
access to a timed_wb_iface
|