aboutsummaryrefslogtreecommitdiffstats
path: root/host/lib/rfnoc
Commit message (Collapse)AuthorAgeFilesLines
* rfnoc: Enable users to query connections in the graphAlex Williams2019-11-262-2/+158
| | | | Implement uhd::rfnoc::rfnoc_graph::enumerate_*_connections()
* rfnoc: rfnoc_graph: Change block's subtrees to be /blocks/$BLOCKIDMartin Braun2019-11-261-2/+7
|
* rfnoc: graph: Initialize properties on all nodes during initMartin Braun2019-11-262-0/+10
| | | | | This will call init_props() on every block after the device initialization is complete, but before control returns to the user.
* rfnoc: flushing and reset blocks on graph creationBrent Stapleton2019-11-262-3/+66
| | | | | | During construction of the rfnoc_graph, flush and reset each block in each motherboard we need to enumerate. This will ensure that each block is in a clean state when we construct it's block controller.
* rfnoc: Add clock selection to blocksMartin Braun2019-11-267-35/+83
| | | | | | | | | | | | | | | | | | | | | | | | | | During registration, blocks must now specify which clock they are using for the timebase (i.e., for timed commands) and for the ctrlport (this is used to determine the length of sleeps and polls). For example, the X300 provides bus_clk and radio_clk; typically, the former is used for the control port, and the latter for the timebase clock. Another virtual clock is called "__graph__", and it means the clock is derived from property propagation via the graph. The actual clocks are provided by the mb_iface. It has two new API calls: get_timebase_clock() and get_ctrlport_clock(), which take an argument as to which clock exactly is requested. On block initialization, those clock_iface objects are copied into the block controller. The get_tick_rate() API call for blocks now exclusively checks the timebase clock_iface, and will no longer cache the current tick rate in a separate _tick_rate member variable. Block controllers can't manually modify the clock_iface, unless they also have access to the mb_controller (like the radio block), and that mb_controller has provided said access. This commit also adds the clock selection API changes to the DDC block, the Null block, and the default block.
* 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.