| Commit message (Collapse) | Author | Age | Files | Lines |
|
|
|
|
| |
An immutable clock means it has a locked frequency, and attempts to
change the frequency will cause an exception to be thrown.
|
|
|
|
|
|
|
|
| |
On destruction, the rfnoc_graph will call shutdown() on all blocks. This
allows a safe de-initialization of blocks independent of the lifetime of
the noc_block_base::sptr.
Also adds the shutdown feature to null_block_control.
|
|
|
|
|
| |
This lets child classes of register_iface_holder change the register
interface, or even invalidate it.
|
| |
|
|
|
|
|
|
|
|
|
|
| |
These changes add APIs to instantiate the new transports. However,
only the control/management transport is currently implemented. It
uses the chdr_ctrl_xport.
Also update the mgmt_portal to use an ephemeral reference to the
shared transport, to indicate that it has no ownership of the
transport's memory.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
chdr_ctrl_xport is a dumb-pipe transport for RFNoC control transactions
and management frames.
Also remove the I/O service's check on num_recv_frames and num_send_frames.
The transports may request additional virtual channels, so the send_io_if
and recv_io_if may not reserve additional frames, as they are shared with
a previously-allocated instance.
Note: this uses a mutex to force sequentual access to the
chdr_ctrl_xport. This is supposed to go away when the multi threaded
xport is done.
|
| |
|
| |
|
|
|
|
|
|
|
|
| |
Applying clang format for upcoming changes.
clang-format -i --style=file host/lib/usrp/cores/gpio_atr_3000.cpp
clang-format -i --style=file \
host/lib/include/uhdlib/usrp/cores/gpio_atr_3000.hpp
|
|
|
|
|
|
| |
The existing implementation assumes registers are spaced 4 bytes apart.
In the current radio block design, all backward compatible registers are
spaced 8 bytes apart. This adds a feature to configure that offset.
|
|
|
|
|
|
| |
This is a single atomic allocator in the global uhd::rfnoc namespace, so
that devices can allocate themselves device IDs without having to confer
with the rest of the RFNoC infrastructure.
|
|
|
|
|
| |
This converts from register_iface& to wb_iface::sptr. Useful for
connecting new block controllers with older interfaces.
|
|
|
|
|
|
| |
Following the changes in RX frontend controls, TX frontend register
offsets are now arguments to the factory function. They default to 4,
which is what the register offset was in the file before these changes.
|
|
|
|
|
|
|
|
| |
Changing how we calculate RX frontend register addresses to allow for
different register offsets. The register addresses are now calculated
in a manor similar to how gpio_atr_300_impl does register address
calculations, which is to allow a reg_offset to be passes in at
construction. The current default is reg_offset=4.
|
|
|
|
|
| |
Removes the requirement for a wb_iface, and also the requirement for
regs to be 4 addresses apart.
|
|
|
|
|
|
| |
The lock acquired by send_fn does not need to share the same mutex
as the rest of the class. It only needs to serialize between multiple
calls to send_fn. Gave send_fn it's own mutex for that reason
|
|
|
|
|
| |
This API lets blocks decide if their current topology is OK for them,
and make decisions based on their topology.
|
| |
|
|
|
|
|
| |
During construction of the rfnoc_graph, enumerate all of the connected
blocks, construct their controllers, and store them in the graph.
|
| |
|
|
|
|
|
| |
These args come from the framework, e.g., because the UHD session was
launched with them.
|
| |
|
|
|
|
| |
This allows blocks to reduce the number of actual, available ports.
|
|
|
|
|
|
|
|
|
| |
The mb_controller is an interface to hardware-specific functions of the
motherboard. The API works in two ways:
- The user can request access to it, and thus interact directly with the
motherboard
- RFNoC blocks can request access to it, if they need to interact with
the motherboard themselves.
|
|
|
|
|
| |
The management looks at the transport endianness from the packet
factory to determine if the byte_swapper in the FPGA needs to be enabled
|
| |
|
|
|
|
| |
- Add peek64() and poke64() convenience calls
|
| |
|
|
|
|
|
|
|
|
|
|
|
| |
All noc_block_base derivatives are now plugged into the tick rate
system. Connected nodes can only have one tick rate among them. This
implies there is also only ever one tick rate per block.
set_tick_rate() is a protected API call which can be called by blocks
such as radio blocks to actually set a tick rate. Other blocks would
only ever read the tick rate, which is handled by the get_tick_rate()
API call.
|
| |
|
|
|
|
|
|
|
| |
When a node has multiple properties that depend on each other (and
possible have circular dependencies), the previous version of property
propagation would not correctly resolve properties that got flagged
dirty during the execution of other resolvers.
|
| |
|
|
|
|
|
| |
- Fleshed out mb_iface
- Managers currently only export ctrl APIs. Data APIs TBD
|
|
|
|
|
|
| |
- chdr_ctrl_endpoint can manage multiple dest EPIDs
- Moved from both_xports_t to a special defs in rfnoc_common
- Changed data-structures where appropriate
|
|
|
|
|
|
| |
- Moved chdr_packet and chdr_types from rfnoc/chdr to rfnoc and updated
all references
- Moved non-CHDR definitions to rfnoc_common.hpp
|
| |
|
|
|
|
| |
This contains both_links_t
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
The inline_io_service connects transports to links without any
worker threads. Send operations go directly to the link, and recv
will perform the I/O as part of the get_recv_buffer() call.
The inline_io_service also supports muxed links natively. The receive
mux is entirely inline. There is no separate thread for the
inline_io_service, and that continues here. A queue is created for
each client of the mux, and packets are processed as they come in. If
a packet is to go up to a different client, the packet is queued up
for later. When that client attempts to recv(), the queue is checked
first, and the attempts to receive from the link happen ONLY if no
packet was found.
Also add mock transport to test I/O service APIs. Tests I/O service
construction and some basic packet transmision. One case will also
uses a single link that is shared between the send and recv transports.
That link is muxed between two compatible but different transports.
|
|
|
|
|
|
|
|
|
|
|
| |
Split the transport into three layers to allow for greater flexibility
in scheduling algorithms. The io_service will make queues on behalf of
the transport and take responsibility for scheduling data transfers
through the links.
The transport layer is the explicit handler for flow control. This
enables the possibility of a scheduling layer in between, so flow
control may be offloaded on the same thread as the link.
|
|
|
|
| |
Add test for transports using mock transports
|
|
|
|
|
|
|
|
|
|
| |
New interface aimed to replace zero_copy_if for new code, including new
RFNoC development and redesign of streamer objects.
Generic implementation of send and receive transport interfaces to allow
reuse by various transport types. Derived classes implement
transport-specific functions that are invoked by the base classes
through CRTP.
|
|
|
|
|
| |
The default block controller should get instantiated when no other
suitable block controller can be found.
|
| |
|
|
|
|
|
| |
The inteface provides a mechanism for users of clocks to query
information such as the running status or rate
|
|
|
|
|
|
|
|
| |
A small modification to rfnoc::action_info makes it polymorphic, and
instead of serializing data structures into a string, this allows
creating custom action objects and identifying them via RTTI. The stream
command action object is a good example for how to use this, so all the
usages of stream command action objects were converted to this scheme.
|
| |
|
|
|
|
|
|
| |
- Add support for new backend iface with max_async_msgs and mtu
moved to after the noc ID
- Fixed offsets for block info registers
|
|
|
|
| |
This replaces device3() for RFNoC applications.
|
|
|
|
|
|
|
|
| |
This structure represents information about a graph edge. Required by
detail::graph and rfnoc_graph.
graph_edge_t::to_string() will now provide a textual representation of
the edge.
|
|
|
|
|
| |
All USRP device impls that are RFNoC devices will need to derive from
this (instead of device3).
|