aboutsummaryrefslogtreecommitdiffstats
path: root/host/lib/rfnoc
Commit message (Collapse)AuthorAgeFilesLines
* rfnoc: Add shutdown feature to blocksMartin Braun2019-11-265-3/+33
| | | | | | | | 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.
* rfnoc: register_iface_holder: Add ability to invalidate and updateMartin Braun2019-11-262-0/+93
| | | | | This lets child classes of register_iface_holder change the register interface, or even invalidate it.
* rfnoc: Make a chdr_ctrl_xport using the new link APIsAlex Williams2019-11-263-101/+106
| | | | | | | | | | 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.
* rfnoc: Add chdr_ctrl_xportAlex Williams2019-11-262-0/+148
| | | | | | | | | | | | | | 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.
* rfnoc: noc_block_base: Store property tree reference from make_argsMartin Braun2019-11-261-1/+4
|
* rfnoc: Add mb_controller base class and X300/MPMD implementationsMartin Braun2019-11-261-0/+5
|
* rfnoc: Add device_id allocatorMartin Braun2019-11-262-0/+18
| | | | | | 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.
* rfnoc: Fixed race condition in chdr_ctrl_endpointAshish Chaudhari2019-11-261-2/+4
| | | | | | 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
* rfnoc: Add check_topology() API to nodesMartin Braun2019-11-262-0/+53
| | | | | This API lets blocks decide if their current topology is OK for them, and make decisions based on their topology.
* rfnoc: rfnoc_graph: Add API to query the number of motherboardsMartin Braun2019-11-261-1/+11
|
* rfnoc: enumerate and construct block controllers, enable connect()Brent Stapleton2019-11-261-3/+202
| | | | | During construction of the rfnoc_graph, enumerate all of the connected blocks, construct their controllers, and store them in the graph.
* rfnoc: Add null block controllerMartin Braun2019-11-262-0/+183
|
* rfnoc: noc_block_base: Pass args into block on constructionMartin Braun2019-11-261-0/+1
| | | | | These args come from the framework, e.g., because the UHD session was launched with them.
* rfnoc: graph: Add commit/release APIMartin Braun2019-11-262-2/+31
|
* rfnoc: noc_block_base: Add API to reduce num portsMartin Braun2019-11-261-0/+20
| | | | This allows blocks to reduce the number of actual, available ports.
* rfnoc: Add mb_controller APIMartin Braun2019-11-265-0/+133
| | | | | | | | | 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.
* rfnoc: SW support for FPGA byte swapperAshish Chaudhari2019-11-261-8/+31
| | | | | The management looks at the transport endianness from the packet factory to determine if the byte_swapper in the FPGA needs to be enabled
* rfnoc: Add radio block controllerMartin Braun2019-11-262-0/+772
|
* rfnoc: Added src port, EPID getters to register_iface, 64-bit callsAshish Chaudhari2019-11-261-1/+14
| | | | - Add peek64() and poke64() convenience calls
* rfnoc: Graph and link stream manager API cleanupAshish Chaudhari2019-11-264-45/+247
|
* rfnoc: noc_block_base: Handle the tick_rate property internallyMartin Braun2019-11-262-40/+62
| | | | | | | | | | | 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.
* rfnoc: node: Fix resolution of properties with circular dependenciesMartin Braun2019-11-261-41/+51
| | | | | | | 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.
* rfnoc: Enable daisy-chaining in mgmt_portalAshish Chaudhari2019-11-261-5/+14
|
* rfnoc: Added link/graph specific stream managersAshish Chaudhari2019-11-265-0/+462
| | | | | - Fleshed out mb_iface - Managers currently only export ctrl APIs. Data APIs TBD
* rfnoc: API cleanup for ctrl/mgmt codeAshish Chaudhari2019-11-262-60/+72
| | | | | | - 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
* rfnoc: Moved chdr types/packet class out of chdr dirAshish Chaudhari2019-11-267-26/+13
| | | | | | - Moved chdr_packet and chdr_types from rfnoc/chdr to rfnoc and updated all references - Moved non-CHDR definitions to rfnoc_common.hpp
* rfnoc: Add default block controllerMartin Braun2019-11-264-2/+28
| | | | | The default block controller should get instantiated when no other suitable block controller can be found.
* rfnoc: Add DDC block controllerMartin Braun2019-11-262-0/+558
|
* rfnoc: Added clock_iface to convey info about clocksAshish Chaudhari2019-11-262-19/+26
| | | | | The inteface provides a mechanism for users of clocks to query information such as the running status or rate
* rfnoc: Use RTTI "serialization" for stream commandsMartin Braun2019-11-261-0/+24
| | | | | | | | 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.
* rfnoc: Support for new backend iface plus fixesAshish Chaudhari2019-11-261-10/+12
| | | | | | - Add support for new backend iface with max_async_msgs and mtu moved to after the noc ID - Fixed offsets for block info registers
* rfnoc: Add rfnoc_graph classMartin Braun2019-11-262-0/+161
| | | | This replaces device3() for RFNoC applications.
* rfnoc: Change Block-ID format to 0/FFT#1Martin Braun2019-11-261-1/+1
| | | | | | | Previously, it was 0/FFT_1. The counter was separated by an underscore. Now, we separate by a # symbol to allow for underscores in block names. This means 'FIR_Filter' is now a valid blockname.
* rfnoc: Add block registry/factory and make_argsMartin Braun2019-11-263-0/+108
| | | | | | - noc_block_base now has a ctor defined - The registry stores factory functions to the individual Noc-Block implementations
* rfnoc: Add block_poke support to reg_iface async msgAshish Chaudhari2019-11-261-4/+4
| | | | | The async message callback now has a vector of data words instead of a single one
* rfnoc: adding client_zeroBrent Stapleton2019-11-262-0/+214
| | | | | | | | | | - Adding client_zero class, which gathers information about our device form the global registers on port 0 of the RFNoC backend registers. - adding unit tests to exercise client_zero - mock_reg_iface class: adding fake register_iface so we can run unit tests in software only Co-authored-by: Martin Braun <martin.braun@ettus.com>
* rfnoc: Added impl for reg_iface and ctrl_endpointAshish Chaudhari2019-11-264-1/+655
| | | | | | | | - Added new register_iface class that translates high-level peek/poke calls into CHDR control payloads - Added new chdr_ctrl_endpoint class that emulates a control stream endpoint in SW. It can create and handle multiple register interfaces
* rfnoc: node: Add default command time APIMartin Braun2019-11-261-0/+23
|
* rfnoc: Add action APIMartin Braun2019-11-264-0/+187
| | | | | | | | - Added action_info class - Allow to send actions from node to node - Allow to post actions into nodes - Allow to set default forwarding policies - Added unit tests
* rfnoc: Added initial impl for mgmt_portalAshish Chaudhari2019-11-262-1/+998
| | | | | | | - The management portal is the interface for the framework to allow discovering the data topology, setup routes between stream endpoints and configure streamers - Use a zero_copy_if and the mgmt_paylod to send/recv packets
* rfnoc: Refactored CHDR packet interfacesAshish Chaudhari2019-11-264-0/+656
| | | | | | | - Moved packet interface code from public to private include - Split packet interface into two files: payload paring and packet iface - Added support for all CHDR packet types - Added more test cases to unit test
* rfnoc: Add property propagation, Boost.Graph storageMartin Braun2019-11-263-9/+764
| | | | | | | | | | | | - Adds a detail::graph_t class, which handles the propagation - Adds methods to node_t to aid with propagation - Adds unit tests - Adds dynamic property forwarding: Nodes are now able to forward properties they don't know about by providing a forwarding policy. A good example is the FIFO block which simply forwards most properties verbatim. - node: Temporarily disabling consistency check at init
* rfnoc: Add detail::block_container_t classMartin Braun2019-11-262-0/+75
| | | | | This is a storage for the noc_block_base derivatives. It supports finding blocks.
* rfnoc: Add noc_block_base classMartin Braun2019-11-262-0/+12
| | | | This is a parent class for all block controllers.
* rfnoc: Add properties, nodes, and accessorsMartin Braun2019-11-262-0/+120
| | | | | | | | | | | | | | Adds the following classes: - uhd::rfnoc::node_t, the base class for RFNoC nodes - uhd::rfnoc::node_accessor_t, a class to access private properties - uhd::rfnoc::res_source_info, a struct that identifies where properties come from - uhd::rfnoc::property_t, and property_base_t (its parent) - uhd::rfnoc::prop_accessor_t, a class to access properties Add always dirty property (dirtifier). Also adds unit tests for properties.
* rfnoc: block_id: Add more info when ctor failsMartin Braun2019-11-261-1/+2
|
* rfnoc: Read cmd FIFO size from blocks & configure ctrl_ifaceMartin Braun2019-09-042-4/+18
| | | | | | | | | | This requires noc_shell compat number 6.0. It will allow sending as many command packets, but no more, than there is space. Updated FPGA images for devices: - X310/X300 - N300/N310/N320 - E310/E320
* RFNoC: Re-enable flow ctrl for blocks on same xbarMichael West2019-08-141-1/+1
| | | | | | | | | | | Prior commit disabled flow control for all lossless links, including links between blocks on the same crossbar. That caused packets to jam up the crossbar leading to control packets failing to ACK under certain conditions. This reverts it so flow control is enabled and the crossbar is kept clear. Signed-off-by: Michael West <michael.west@ettus.com>
* rfnoc: fix multidevice graph connectionsMark Meserve2019-08-061-96/+107
| | | | | | | - Fixes an issue where a multi-device device3 object would cause connections to be generated across devices in legacy_compat - The connect_blocks function previously assumed that find_blocks would always return blocks in the same device number order
* rfnoc: Add update_graph() API callMartin Braun2019-07-153-12/+9
| | | | | | Blocks that change scaling, tick rate, or sampling rate can now notify the graph to update streamers. Before, this was handled only by mult_usrp, and only for DDC and DUC blocks.