aboutsummaryrefslogtreecommitdiffstats
path: root/host/lib/include
Commit message (Collapse)AuthorAgeFilesLines
* rfnoc: add rx and tx transports, and amend rfnoc_graphCiro Nishiguchi2019-11-2617-36/+2707
| | | | | | | | | | | | | | | | | | | | | | | 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: Add tracking of 'valid' bit to propertiesAlex Williams2019-11-261-1/+1
| | | | | | The valid bit helps prevent placeholder defaults from being propagated through the graph. Values that are not valid will not be forwarded.
* rfnoc: Enable users to query connections in the graphAlex Williams2019-11-261-0/+4
| | | | Implement uhd::rfnoc::rfnoc_graph::enumerate_*_connections()
* rfnoc: graph: Initialize properties on all nodes during initMartin Braun2019-11-261-0/+4
| | | | | 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-0/+5
| | | | | | 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-263-3/+18
| | | | | | | | | | | | | | | | | | | | | | | | | | 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: clock_iface: Add flag for clock to be (im-)mutableMartin Braun2019-11-261-1/+21
| | | | | An immutable clock means it has a locked frequency, and attempts to change the frequency will cause an exception to be thrown.
* rfnoc: Add shutdown feature to blocksMartin Braun2019-11-262-0/+15
| | | | | | | | 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: rfnoc_device: Make get_mb_iface() pure virtualMartin Braun2019-11-261-22/+1
|
* rfnoc: Make a chdr_ctrl_xport using the new link APIsAlex Williams2019-11-265-34/+76
| | | | | | | | | | 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-261-0/+128
| | | | | | | | | | | | | | 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: Add mb_controller base class and X300/MPMD implementationsMartin Braun2019-11-261-0/+13
|
* gpio_atr_3000: Formatting changesBrent Stapleton2019-11-261-14/+25
| | | | | | | | 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
* cores: gpio_atr_3000: Add capability to configure register offsetMartin Braun2019-11-261-10/+14
| | | | | | 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.
* rfnoc: Add device_id allocatorMartin Braun2019-11-261-0/+22
| | | | | | 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: add reg_iface_adapterMartin Braun2019-11-261-0/+121
| | | | | This converts from register_iface& to wb_iface::sptr. Useful for connecting new block controllers with older interfaces.
* tx_fe_200: make register offset controllableBrent Stapleton2019-11-261-1/+1
| | | | | | 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.
* rx_fe_3000: Changing register address calcBrent Stapleton2019-11-261-1/+2
| | | | | | | | 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.
* lib: cores: Adapt spi_core_3000 for use with register_ifaceMartin Braun2019-11-261-1/+12
| | | | | Removes the requirement for a wb_iface, and also the requirement for regs to be 4 addresses apart.
* rfnoc: Add check_topology() API to nodesMartin Braun2019-11-262-0/+18
| | | | | This API lets blocks decide if their current topology is OK for them, and make decisions based on their topology.
* rfnoc: graph: Add commit/release APIMartin Braun2019-11-261-2/+13
|
* rfnoc: Add mb_controller APIMartin Braun2019-11-261-1/+4
| | | | | | | | | 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-0/+6
| | | | | 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-261-0/+289
|
* rfnoc: Graph and link stream manager API cleanupAshish Chaudhari2019-11-265-36/+161
|
* rfnoc: Added link/graph specific stream managersAshish Chaudhari2019-11-265-27/+260
| | | | | - Fleshed out mb_iface - Managers currently only export ctrl APIs. Data APIs TBD
* rfnoc: API cleanup for ctrl/mgmt codeAshish Chaudhari2019-11-264-13/+44
| | | | | | - 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-43/+80
| | | | | | - Moved chdr_packet and chdr_types from rfnoc/chdr to rfnoc and updated all references - Moved non-CHDR definitions to rfnoc_common.hpp
* uhd: add udp boost asio implementation of transport interfaceCiro Nishiguchi2019-11-262-0/+315
|
* uhdlib: transport: Add links.hppMartin Braun2019-11-261-0/+43
| | | | This contains both_links_t
* transport: Implement a single-threaded I/O serviceAlex Williams2019-11-261-0/+121
| | | | | | | | | | | | | | | | | | | | 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.
* transport: Introduce I/O service layer between transport and linkAlex Williams2019-11-261-0/+337
| | | | | | | | | | | 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.
* uhd: add new transport interface and base class implementationCiro Nishiguchi2019-11-262-0/+334
| | | | | | | | | | 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.
* rfnoc: Added clock_iface to convey info about clocksAshish Chaudhari2019-11-263-4/+69
| | | | | The inteface provides a mechanism for users of clocks to query information such as the running status or rate
* rfnoc: Support for new backend iface plus fixesAshish Chaudhari2019-11-262-2/+6
| | | | | | - 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: Move graph_edge data structure to its own header, add to_string()Martin Braun2019-11-261-59/+3
| | | | | | | | 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.
* rfnoc: Add rfnoc_device base classMartin Braun2019-11-262-0/+83
| | | | | All USRP device impls that are RFNoC devices will need to derive from this (instead of device3).
* rfnoc: Add block registry/factory and make_argsMartin Braun2019-11-261-0/+32
| | | | | | - noc_block_base now has a ctor defined - The registry stores factory functions to the individual Noc-Block implementations
* rfnoc: adding client_zeroBrent Stapleton2019-11-261-0/+199
| | | | | | | | | | - 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-263-0/+131
| | | | | | | | - 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: Add action APIMartin Braun2019-11-262-1/+68
| | | | | | | | - 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-261-0/+191
| | | | | | | - 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-262-0/+1127
| | | | | | | - 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-262-2/+274
| | | | | | | | | | | | - 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-261-0/+57
| | | | | This is a storage for the noc_block_base derivatives. It supports finding blocks.
* rfnoc: Add rfnoc::mb_iface interface classMartin Braun2019-11-261-0/+76
| | | | | Its purpose is to provide a device-agnostic back-channel interface into the device guts for all rfnoc_graph devices.
* rfnoc: Add properties, nodes, and accessorsMartin Braun2019-11-262-0/+180
| | | | | | | | | | | | | | 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.
* lib: adf535x: Add trace logs for synth configurationMartin Braun2019-11-261-0/+18
|
* lib: Replace uhd::get_system_time() with steady_clockMartin Braun2019-11-262-9/+14
| | | | | | Benchmarks show that using C++ chrono features beats uhd::get_system_time(), and the latter is simply not appropriate unless a uhd::time_spec_t is required.
* uhd: utils: Add compat check for 32-bit compat numbersMartin Braun2019-11-261-0/+13
|