| Commit message (Collapse) | Author | Age | Files | Lines |
|
|
|
|
|
|
|
| |
Adding Python bindings for the RFNoC API. This includes the
rfnoc_graph, noc_block_base, and several other supporting classes.
Templated functions are not currently supported. For example,
`rfnoc_graph::get_block` can only return the basic block controller.
|
|
|
|
| |
Fixes: 967be2a4e82b ("uhd: mpm: apply clang-format to all files")
|
|
|
|
|
|
| |
In chdr_ctrl_endpoint recv_thread, _recv_thread was starting
at construction time and trying to lock mutex, but due to member
declaration in class, mutex was not yet constructed
|
|
|
|
|
|
|
|
| |
- Add option for high or normal thread priority with default set to high
- Add rx_delay and tx_delay options to dynamically set start delays
(default of 0.25 seconds for TX and 0.05 seconds for RX)
Signed-off-by: Michael West <michael.west@ettus.com>
|
|
|
|
|
|
|
|
| |
GPIOs in the property tree are registered as uint32_t's, so the
get_gpio_attr function should use that type as well.
This resolves a property tree runtime_error when running the `gpio`
example with a B2xx device.
|
|
|
|
| |
Fixes cb40069b ("tests: Port polling-mode dpdk_test to new DPDK...")
|
|
|
|
| |
Signed-off-by: michael-west <michael.west@ettus.com>
|
|
|
|
|
|
|
|
|
|
| |
Improves dpdk streaming performance for benchmark_rate by elevating
thread priority of the send and recv threads. It does this
conditionally, if use_dpdk=1 was passed in through the command line
args. Admittedly, this is not a perfect solution, as it does not
account for the case when a dpdk user is utilizing a config file to
pass in that information. The scope of this fix does seem
appropriate for an example.
|
|
|
|
|
|
| |
Waiting on queue status seems to not always work, the queue state seems
to not be updated immediately after pushing an item onto it when queried
from a different thread.
|
|
|
|
|
|
| |
Change the default number of frames so that it works well when using
offload threads, including DPDK. This matches the default number of
frames in mpmd.
|
|
|
|
|
|
|
|
| |
DPDK provides a fixed number of fixed-size buffers for the receive
window, so it needs packet-based flow control to avoid dropping
packets. This change enables counting by packets.
Co-authored-by: Ciro Nishiguchi <ciro.nishiguchi@ni.com>
|
|
|
|
|
|
| |
The mock_send_transport and mock_recv_transport are used, which
ends up with two layers of flow control. More work may be needed
here for comparisons with the old data.
|
|
|
|
| |
This helps a little with debugging (for breakpoints).
|
|
|
|
| |
It referenced the wrong function for releasing recv buffers.
|
| |
|
|
|
|
| |
These were left here as a reference.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
x300:
- Remove obsolete variables from x300_eth_mgr and X300 motherboard
components
- Added some documentation / comments
- Use constrained device args in more places
- Enables the use of use_dpdk=1
- Switches between regular (kernel-based) and DPDK UDP
mpmd:
- Merge link_if_ctrl for udp and dpdk_udp
- Update cmake options
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
docs: Update DPDK docs with new parameters:
Parameter names have had their hyphens changed to underscores, and
the I/O CPU argument is now named after the lcores and reflects
the naming used by DPDK.
transport: Add new udp_dpdk_link, based atop the new APIs:
This link is tightly coupled with the DPDK I/O service. The link class
carries all the address information to communicate with the other
host, and it can send packets directly through the DPDK NIC ports.
However, for receiving packets, the I/O service must pull the packets
from the DMA queue and attach them to the appropriate link object.
The link object merely formats the frame_buff object underneath, which
is embedded in the rte_mbuf container. For get_recv_buff, the link
will pull buffers only from its internal queue (the one filled by the
I/O service).
transport: Add DPDK-specific I/O service:
The I/O service is split into two parts, the user threads and the
I/O worker threads. The user threads submit requests through
various appropriate queues, and the I/O threads perform all the
I/O on their behalf. This includes routing UDP packets to the
correct receiver and getting the MAC address of a destination (by
performing the ARP request and handling the ARP replies).
The DPDK context stores I/O services. The context spawns all I/O
services on init(), and I/O services can be fetched from the dpdk_ctx
object by using a port ID.
I/O service clients:
The clients have two lockless ring buffers. One is to get a buffer
from the I/O service; the other is to release a buffer back to the
I/O service. Threads sleeping on buffer I/O are kept in a separate
list from the service queue and are processed in the course of doing
RX or TX.
The list nodes are embedded in the dpdk_io_if, and the head of the
list is on the dpdk_io_service. The I/O service will transfer the
embedded wait_req to the list if it cannot acquire the mutex to
complete the condition for waking.
Co-authored-by: Martin Braun <martin.braun@ettus.com>
Co-authored-by: Ciro Nishiguchi <ciro.nishiguchi@ni.com>
Co-authored-by: Brent Stapleton <brent.stapleton@ettus.com>
|
|
|
|
|
|
| |
The client type is kept in _offload_thread_params, but a separate,
unitialized field is checked in member functions. Remove the
duplicate and switch the checks over. This fixes offload_io_srv_test.
|
|
|
|
|
| |
Add more tests to compare streaming rates with previous releases.
Changed the output string to a table.
|
| |
|
| |
|
|
|
|
|
| |
Update UBX and SBX gain settings in the manual for phase alignment
testing.
|
| |
|
|
|
|
|
|
|
| |
Install all of the streaming performance tests scripts, not just the
X300 one.
Fixes: 2bf1f0acaa35 ("tests: Add script to execute batch of bench...")
|
| |
|
|
|
|
|
| |
Script runs benchmark_rate repeatedly, parses results, and calculates
average, min, and max of each value reported.
|
| |
|
|
|
|
|
|
|
|
| |
- Use coerce_decim(), not int(), to coerce the decimation rate
- Fix typo
Fixes: a36fc4604f9b ("rfnoc: DDC: Fix property propagation")
Fixes: 36853315741a ("rfnoc: Add DDC block controller")
|
|
|
|
|
|
|
| |
The prefs API is supposed to load the config files once, and stash them
away for the process to consume at will. Because the init_done is never
set, it will read the config files every time it's asked for them. This
is usually not a problem, but it causes the logging output to be messy.
|
| |
|
|
|
|
|
|
| |
The filter bank and antenna switches have different configuration
for channel 0 and channel 1. This commit fixes the issue where
channel 0 produces only noise due to incorrect switches.
|
|
|
|
|
|
| |
Only update DDC/DUC samp_rate properties if the number is substantially
different (don't update for sub-1Hz property calculations). This fixes
resolver exceptions for certain rates.
|
| |
|
| |
|
|
|
|
|
| |
Updates FPGA images for X3xx, N3xx, E320 and B200 series.
All Gen-3 devices receive a compat number bump.
|
|
|
|
|
| |
This is a more portable option to set thread names. References to
pthreads are now limited to thread.cpp, where they belong.
|
|
|
|
|
| |
We call set_thread_name() on the claimer loop so the thread can be
identified using OS utilities.
|
|
|
|
| |
Signed-off-by: Virendra Kakade <virendra.kakade@ni.com>
|
|
|
|
| |
Signed-off-by: Virendra Kakade <virendra.kakade@ni.com>
|
|
|
|
|
|
|
| |
This fixes behavior where we would get long 100 sec timeouts
on fifo waits instead of 100 ms timeouts.
Signed-off-by: Virendra Kakade <virendra.kakade@ni.com>
|
|
|
|
|
|
| |
The ad9371 call set_master_clock_rate() can take a while depending on
the rate change, so make it asynchronous in order not to lock out the
reclaimer loop.
|
|
|
|
|
| |
Individual API calls might have to call each other (e.g., like
set_rate() will call set_rx_frequency()), which would cause a deadlock.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
The N310 cannot set the MCR for its daughterboards separately. This
patch modifies the radio block controller such that any block
controller, when requested to change the master clock rate, will first
change Radio 0, and then Radio 1.
This fixes the following issues:
- In multi_usrp, calling set_master_clock_rate() will not necessarily
call set_rate() on the radios in any particular order, which will
break when calling Radio 1 first
- In RFNoC apps, it wasn't possible to run off of slot B alone without
this change.
Note: When calling set_rate() on one radio, the other radio is in an
invalid state until its set_rate() is also called.
|
|
|
|
|
|
|
| |
This is a data structure intended for use by the DPDK I/O service.
It uses DPDK's lockless ring in multi-producer, single-consumer mode
to allow clients to submit requests to the DPDK I/O service's worker
thread. Clients can specify a timeout for the requests to be fulfilled.
|
| |
|
|
|
|
|
|
|
|
|
| |
- ref_locked failure would throw a warning, even though this can happen
in normal operations, and the return value of the get_ref_locked()
function is all the info needed
- get_fpga_type() doesn't need to be called from e31x_periphs, because
it is not read from the motherboard registers (is read from the
EEPROM)
|
|
|
|
|
| |
It used to produce the individual name of the USRP, but it should return
a product name.
|
|
|
|
|
|
|
| |
The clock source on E310 is always internal. This patch removes the
variables regarding the clock source (since they are superfluous). This
fixes a bug where self._clock_source on the e31x class would never get
initialized.
|
|
|
|
| |
The GPS sensors are pulled in via gpsd_iface.
|