aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--host/include/uhd/rfnoc/noc_block_base.hpp4
-rw-r--r--host/include/uhd/rfnoc/register_iface_holder.hpp40
2 files changed, 42 insertions, 2 deletions
diff --git a/host/include/uhd/rfnoc/noc_block_base.hpp b/host/include/uhd/rfnoc/noc_block_base.hpp
index 034caff9e..0adcfdafb 100644
--- a/host/include/uhd/rfnoc/noc_block_base.hpp
+++ b/host/include/uhd/rfnoc/noc_block_base.hpp
@@ -10,6 +10,7 @@
#include <uhd/config.hpp>
#include <uhd/rfnoc/block_id.hpp>
#include <uhd/rfnoc/node.hpp>
+#include <uhd/rfnoc/register_iface_holder.hpp>
//! Shorthand for block constructor
#define UHD_RFNOC_BLOCK_CONSTRUCTOR(CLASS_NAME) \
@@ -28,7 +29,7 @@ namespace uhd { namespace rfnoc {
* The main difference between this class and its parent is the direct access to
* registers, and the NoC&block IDs.
*/
-class UHD_API noc_block_base : public node_t
+class UHD_API noc_block_base : public node_t, public register_iface_holder
{
public:
/*! A shared pointer to allow easy access to this class and for
@@ -89,4 +90,3 @@ private:
}} /* namespace uhd::rfnoc */
#endif /* INCLUDED_LIBUHD_NOC_BLOCK_BASE_HPP */
-
diff --git a/host/include/uhd/rfnoc/register_iface_holder.hpp b/host/include/uhd/rfnoc/register_iface_holder.hpp
new file mode 100644
index 000000000..453b0cf10
--- /dev/null
+++ b/host/include/uhd/rfnoc/register_iface_holder.hpp
@@ -0,0 +1,40 @@
+//
+// Copyright 2019 Ettus Research, a National Instruments Brand
+//
+// SPDX-License-Identifier: GPL-3.0-or-later
+//
+
+#ifndef INCLUDED_LIBUHD_REGISTER_IFACE_HOLDER_HPP
+#define INCLUDED_LIBUHD_REGISTER_IFACE_HOLDER_HPP
+
+#include <uhd/rfnoc/register_iface.hpp>
+
+namespace uhd { namespace rfnoc {
+
+/*! Register interface holder class
+ *
+ * Classes derived from this class have access to a uhd::rfnoc::register_iface
+ * object.
+ */
+class register_iface_holder
+{
+public:
+ register_iface_holder(register_iface::sptr reg) : _reg(reg){};
+ virtual ~register_iface_holder() = default;
+
+ /*! Return the register interface to access low-level registers
+ *
+ * \return iface A reference to an interface for low-level register access
+ */
+ register_iface& regs()
+ {
+ return *(_reg.get());
+ };
+
+private:
+ register_iface::sptr _reg;
+};
+
+}} /* namespace uhd::rfnoc */
+
+#endif /* INCLUDED_LIBUHD_REGISTER_IFACE_HOLDER_HPP */