aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--mpm/python/usrp_mpm/periph_manager/base.py24
-rw-r--r--mpm/python/usrp_mpm/periph_manager/e31x.py29
-rw-r--r--mpm/python/usrp_mpm/periph_manager/e320.py48
-rw-r--r--mpm/python/usrp_mpm/periph_manager/n3xx.py49
-rw-r--r--mpm/python/usrp_mpm/periph_manager/x4xx.py37
5 files changed, 19 insertions, 168 deletions
diff --git a/mpm/python/usrp_mpm/periph_manager/base.py b/mpm/python/usrp_mpm/periph_manager/base.py
index 729952c33..4bde831a0 100644
--- a/mpm/python/usrp_mpm/periph_manager/base.py
+++ b/mpm/python/usrp_mpm/periph_manager/base.py
@@ -8,14 +8,11 @@
Mboard implementation base class
"""
-from __future__ import print_function
import os
from enum import Enum
from hashlib import md5
from time import sleep
from concurrent import futures
-from builtins import str
-from builtins import object
from six import iteritems, itervalues
from usrp_mpm.mpmlog import get_logger
from usrp_mpm.sys_utils.filesystem_status import get_fs_version
@@ -51,7 +48,7 @@ def get_dboard_class_from_pid(pid):
# pylint: disable=no-self-use
# pylint: disable=too-many-public-methods
# pylint: disable=too-many-instance-attributes
-class PeriphManagerBase(object):
+class PeriphManagerBase:
""""
Base class for all motherboards. Common function and API calls should
be implemented here. Motherboard specific information can be stored in
@@ -243,6 +240,9 @@ class PeriphManagerBase(object):
assert self.mboard_eeprom_magic is not None
self.dboards = []
self._default_args = ""
+ # CHDR transport managers. These need to be instantiated by the child
+ # classes.
+ self._xport_mgrs = {}
# Set up logging
self.log = get_logger('PeriphManager')
self.claimed = False
@@ -730,6 +730,8 @@ class PeriphManagerBase(object):
self.log.error(
"Cannot run init(), device was never fully initialized!")
return False
+ for xport_mgr in self._xport_mgrs.values():
+ xport_mgr.init(args)
if not self.dboards:
return True
if args.get("serialize_init", False):
@@ -761,6 +763,8 @@ class PeriphManagerBase(object):
for slot, dboard in enumerate(self.dboards):
self.log.trace("call deinit() on dBoard in slot {}".format(slot))
dboard.deinit()
+ for xport_mgr in self._xport_mgrs.values():
+ xport_mgr.deinit()
def tear_down(self):
"""
@@ -1090,7 +1094,7 @@ class PeriphManagerBase(object):
the keys returned from this function can be used with
get_chdr_link_options().
"""
- raise NotImplementedError("get_chdr_link_types() not implemented.")
+ return list(self._xport_mgrs.keys())
def get_chdr_link_options(self, xport_type):
"""
@@ -1106,7 +1110,15 @@ class PeriphManagerBase(object):
- link_rate (bps of the link, e.g. 10e9 for 10GigE)
"""
- raise NotImplementedError("get_chdr_link_options() not implemented.")
+ if xport_type not in self._xport_mgrs:
+ self.log.warning(
+ f"Can't get link options for unknown link type: `{xport_type}'.")
+ return []
+ if xport_type == "udp":
+ return self._xport_mgrs[xport_type].get_chdr_link_options(
+ self.mboard_info['rpc_connection'])
+ # else:
+ return self._xport_mgrs[xport_type].get_chdr_link_options()
#######################################################################
# Claimer API
diff --git a/mpm/python/usrp_mpm/periph_manager/e31x.py b/mpm/python/usrp_mpm/periph_manager/e31x.py
index 4d5e8f3cd..beda96822 100644
--- a/mpm/python/usrp_mpm/periph_manager/e31x.py
+++ b/mpm/python/usrp_mpm/periph_manager/e31x.py
@@ -393,8 +393,6 @@ class e31x(ZynqComponents, PeriphManagerBase):
self._do_not_reload = \
str2bool(args.get("no_reload_fpga")) or args.get("no_reload_fpga") == ""
result = super(e31x, self).init(args)
- for xport_mgr in itervalues(self._xport_mgrs):
- xport_mgr.init(args)
return result
def apply_idle_overlay(self):
@@ -434,8 +432,6 @@ class e31x(ZynqComponents, PeriphManagerBase):
"Cannot run deinit(), device was never fully initialized!")
return
super(e31x, self).deinit()
- for xport_mgr in itervalues(self._xport_mgrs):
- xport_mgr.deinit()
if not self._do_not_reload:
self.tear_down()
# Reset back to value from _default_args (mpm.conf)
@@ -473,31 +469,6 @@ class e31x(ZynqComponents, PeriphManagerBase):
self.log.trace("Found idle overlay: %s", idle_overlay)
return is_idle
-
- ###########################################################################
- # Transport API
- ###########################################################################
- def get_chdr_link_types(self):
- """
- See PeriphManagerBase.get_chdr_link_types() for docs.
- """
- assert self.mboard_info['rpc_connection'] in ('remote', 'local')
- return ["udp"]
-
- def get_chdr_link_options(self, xport_type):
- """
- See PeriphManagerBase.get_chdr_link_options() for docs.
- """
- if xport_type not in self._xport_mgrs:
- self.log.warning("Can't get link options for unknown link type: `{}'."
- .format(xport_type))
- return []
- if xport_type == "udp":
- return self._xport_mgrs[xport_type].get_chdr_link_options(
- self.mboard_info['rpc_connection'])
- # else:
- return self._xport_mgrs[xport_type].get_chdr_link_options()
-
###########################################################################
# Device info
###########################################################################
diff --git a/mpm/python/usrp_mpm/periph_manager/e320.py b/mpm/python/usrp_mpm/periph_manager/e320.py
index c06ba897a..15a8284a7 100644
--- a/mpm/python/usrp_mpm/periph_manager/e320.py
+++ b/mpm/python/usrp_mpm/periph_manager/e320.py
@@ -302,22 +302,8 @@ class e320(ZynqComponents, PeriphManagerBase):
self.set_clock_source(args.get("clock_source", E320_DEFAULT_CLOCK_SOURCE))
self.set_time_source(args.get("time_source", E320_DEFAULT_TIME_SOURCE))
result = super(e320, self).init(args)
- for xport_mgr in itervalues(self._xport_mgrs):
- xport_mgr.init(args)
return result
- def deinit(self):
- """
- Clean up after a UHD session terminates.
- """
- if not self._device_initialized:
- self.log.warning(
- "Cannot run deinit(), device was never fully initialized!")
- return
- super(e320, self).deinit()
- for xport_mgr in itervalues(self._xport_mgrs):
- xport_mgr.deinit()
-
def tear_down(self):
"""
Tear down all members that need to be specially handled before
@@ -334,40 +320,6 @@ class e320(ZynqComponents, PeriphManagerBase):
dtoverlay.rm_overlay(overlay)
###########################################################################
- # Transport API
- ###########################################################################
- def get_chdr_link_types(self):
- """
- This will only ever return a single item (udp).
- """
- assert self.mboard_info['rpc_connection'] in ('remote', 'local')
- return ["udp"]
-
- def get_chdr_link_options(self, xport_type):
- """
- Returns a list of dictionaries. Every dictionary contains information
- about one way to connect to this device in order to initiate CHDR
- traffic.
-
- The interpretation of the return value is very highly dependant on the
- transport type (xport_type).
- For UDP, the every entry of the list has the following keys:
- - ipv4 (IP Address)
- - port (UDP port)
- - link_rate (bps of the link, e.g. 10e9 for 10GigE)
-
- """
- if xport_type not in self._xport_mgrs:
- self.log.warning("Can't get link options for unknown link type: `{}'."
- .format(xport_type))
- return []
- if xport_type == "udp":
- return self._xport_mgrs[xport_type].get_chdr_link_options(
- self.mboard_info['rpc_connection'])
- # else:
- return self._xport_mgrs[xport_type].get_chdr_link_options()
-
- ###########################################################################
# Device info
###########################################################################
def get_device_info_dyn(self):
diff --git a/mpm/python/usrp_mpm/periph_manager/n3xx.py b/mpm/python/usrp_mpm/periph_manager/n3xx.py
index 6800d356b..3e502be4e 100644
--- a/mpm/python/usrp_mpm/periph_manager/n3xx.py
+++ b/mpm/python/usrp_mpm/periph_manager/n3xx.py
@@ -7,12 +7,11 @@
N3xx implementation module
"""
-from __future__ import print_function
import copy
import re
import threading
import time
-from six import iteritems, itervalues
+from six import iteritems
from usrp_mpm.cores import WhiteRabbitRegsControl
from usrp_mpm.components import ZynqComponents
from usrp_mpm.gpsd_iface import GPSDIfaceExtension
@@ -451,22 +450,8 @@ class n3xx(ZynqComponents, PeriphManagerBase):
'pps_export',
N3XX_DEFAULT_ENABLE_PPS_EXPORT
))
- for xport_mgr in itervalues(self._xport_mgrs):
- xport_mgr.init(args)
return result
- def deinit(self):
- """
- Clean up after a UHD session terminates.
- """
- if not self._device_initialized:
- self.log.warning(
- "Cannot run deinit(), device was never fully initialized!")
- return
- super(n3xx, self).deinit()
- for xport_mgr in itervalues(self._xport_mgrs):
- xport_mgr.deinit()
-
def tear_down(self):
"""
Tear down all members that need to be specially handled before
@@ -488,38 +473,6 @@ class n3xx(ZynqComponents, PeriphManagerBase):
dtoverlay.rm_overlay(overlay)
###########################################################################
- # Transport API
- ###########################################################################
- def get_chdr_link_types(self):
- """
- This will only ever return a single item (udp).
- """
- assert self.mboard_info['rpc_connection'] in ('remote', 'local')
- return ["udp"]
-
- def get_chdr_link_options(self, xport_type):
- """
- Returns a list of dictionaries. Every dictionary contains information
- about one way to connect to this device in order to initiate CHDR
- traffic.
-
- The interpretation of the return value is very highly dependant on the
- transport type (xport_type).
- For UDP, the every entry of the list has the following keys:
- - ipv4 (IP Address)
- - port (UDP port)
- - link_rate (bps of the link, e.g. 10e9 for 10GigE)
- """
- if xport_type not in self._xport_mgrs:
- self.log.warning("Can't get link options for unknown link type: `{}'.".format(xport_type))
- return []
- if xport_type == "udp":
- return self._xport_mgrs[xport_type].get_chdr_link_options(
- self.mboard_info['rpc_connection'])
- else:
- return self._xport_mgrs[xport_type].get_chdr_link_options()
-
- ###########################################################################
# Device info
###########################################################################
def get_device_info_dyn(self):
diff --git a/mpm/python/usrp_mpm/periph_manager/x4xx.py b/mpm/python/usrp_mpm/periph_manager/x4xx.py
index fdebaeb3c..8f364b0ef 100644
--- a/mpm/python/usrp_mpm/periph_manager/x4xx.py
+++ b/mpm/python/usrp_mpm/periph_manager/x4xx.py
@@ -664,8 +664,6 @@ class x4xx(ZynqComponents, PeriphManagerBase):
args.get('trig_direction', X400_DEFAULT_TRIG_DIRECTION)
)
- for xport_mgr in self._xport_mgrs.values():
- xport_mgr.init(args)
return result
def deinit(self):
@@ -685,8 +683,6 @@ class x4xx(ZynqComponents, PeriphManagerBase):
self.set_sync_source(source)
super(x4xx, self).deinit()
self.ctrlport_regs.deinit()
- for xport_mgr in self._xport_mgrs.values():
- xport_mgr.deinit()
def tear_down(self):
"""
@@ -714,39 +710,6 @@ class x4xx(ZynqComponents, PeriphManagerBase):
))
for overlay in active_overlays:
dtoverlay.rm_overlay(overlay)
-
- ###########################################################################
- # Transport API
- ###########################################################################
- def get_chdr_link_types(self):
- """
- Return a list of ways how UHD can connect to the X4xx. See
- PeriphManagerBase.get_chdr_link_types() for more docs.
- """
- return list(self._xport_mgrs.keys())
-
- def get_chdr_link_options(self, xport_type):
- """
- Returns a list of dictionaries. Every dictionary contains information
- about one way to connect to this device in order to initiate CHDR
- traffic.
-
- The interpretation of the return value is very highly dependant on the
- transport type (xport_type).
- For UDP, the every entry of the list has the following keys:
- - ipv4 (IP Address)
- - port (UDP port)
- - link_rate (bps of the link, e.g. 10e9 for 10GigE)
- """
- if xport_type not in self._xport_mgrs:
- self.log.warning("Can't get link options for unknown link type: `{}'.")
- return []
- if xport_type == "udp":
- return self._xport_mgrs[xport_type].get_chdr_link_options(
- self.mboard_info['rpc_connection'])
- # else:
- return self._xport_mgrs[xport_type].get_chdr_link_options()
-
###########################################################################
# Device info
###########################################################################