aboutsummaryrefslogtreecommitdiffstats
path: root/host/lib/rfnoc/rfnoc_graph.cpp
Commit message (Collapse)AuthorAgeFilesLines
* rfnoc: rfnoc_graph: Correctly read local device IDs from mb_ifaceMartin Braun2019-11-261-8/+54
| | | | | | Previously, the code was using a hard-coded local device ID. Now, the GSM initialization code will read CHDR width and all local device IDs from the mb_iface to correctly dynamically initialize the GSM.
* rfnoc: rfnoc_graph: Refactor classMartin Braun2019-11-261-110/+142
| | | | | | | - Remove duplicate calls to uhd::device::make - Do a try/catch on full class initialization - Separate setup_graph() into multiple sub-functions - Improve const-correctness
* rfnoc: add rx and tx transports, and amend rfnoc_graphCiro Nishiguchi2019-11-261-229/+265
| | | | | | | | | | | | | | | | | | | | | | | transports: Transports build on I/O service and implements flow control and sequence number checking. The rx streamer subclass extends the streamer implementation to connect it to the rfnoc graph. It receives configuration values from property propagation and configures the streamer accordingly. It also implements the issue_stream_cmd rx_streamer API method. Add implementation of rx streamer creation and method to connect it to an rfnoc block. rfnoc_graph: Cache more connection info, clarify contract Summary of changes: - rfnoc_graph stores more information about static connections at the beginning. Some search algorithms are replaced by simpler lookups. - The contract for connect() was clarified. It is required to call connect, even for static connections.
* rfnoc: Enable users to query connections in the graphAlex Williams2019-11-261-2/+144
| | | | 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-261-0/+3
| | | | | 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-261-2/+31
| | | | | | 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-261-8/+28
| | | | | | | | | | | | | | | | | | | | | | | | | | 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-261-0/+1
| | | | | | | | 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: Add mb_controller base class and X300/MPMD implementationsMartin Braun2019-11-261-0/+5
|
* 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: graph: Add commit/release APIMartin Braun2019-11-261-0/+10
|
* rfnoc: Add mb_controller APIMartin Braun2019-11-261-0/+13
| | | | | | | | | 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: Add rfnoc_graph classMartin Braun2019-11-261-0/+160
This replaces device3() for RFNoC applications.