aboutsummaryrefslogtreecommitdiffstats
path: root/mpm/python/usrp_mpm/periph_manager/n310.py
diff options
context:
space:
mode:
authorAndrej Rode <andrej.rode@ettus.com>2017-04-11 15:56:25 -0700
committerMartin Braun <martin.braun@ettus.com>2017-12-22 15:03:45 -0800
commit7f7111198816cbf1e0597f7ecc9f46e4c26e916b (patch)
tree7a74ecf77569b07364de278822873d7ce1f82185 /mpm/python/usrp_mpm/periph_manager/n310.py
parentf27cb2a7711e428a88c59a5af762055c7f1e3e13 (diff)
downloaduhd-7f7111198816cbf1e0597f7ecc9f46e4c26e916b.tar.gz
uhd-7f7111198816cbf1e0597f7ecc9f46e4c26e916b.tar.bz2
uhd-7f7111198816cbf1e0597f7ecc9f46e4c26e916b.zip
mpm: comment out functionality to make it work
- add uio udev find routine - add debug prints Signed-off-by: Andrej Rode <andrej.rode@ettus.com> Signed-off-by: Moritz Fischer <moritz.fischer@ettus.com>
Diffstat (limited to 'mpm/python/usrp_mpm/periph_manager/n310.py')
-rw-r--r--mpm/python/usrp_mpm/periph_manager/n310.py88
1 files changed, 61 insertions, 27 deletions
diff --git a/mpm/python/usrp_mpm/periph_manager/n310.py b/mpm/python/usrp_mpm/periph_manager/n310.py
index 1b01ac066..4f193b54b 100644
--- a/mpm/python/usrp_mpm/periph_manager/n310.py
+++ b/mpm/python/usrp_mpm/periph_manager/n310.py
@@ -23,7 +23,13 @@ from .base import PeriphManagerBase
from .net import get_iface_addrs
from .net import byte_to_mac
from .net import get_mac_addr
+from .udev import get_uio_node
+from ..types import SID
+from ..uio import uio
+from .. import libpyusrp_periphs as lib
from logging import getLogger
+import netaddr
+import socket
LOG = getLogger(__name__)
@@ -34,9 +40,9 @@ class n310(PeriphManagerBase):
"""
hw_pids = "1"
mboard_type = "n310"
- mboard_eeprom_addr = "e0007000.spi:ec@0:i2c-tunnel"
- dboard_eeprom_addrs = {"A": "something", "B": "else"}
- dboard_spimaster_addrs = {"A": "something", "B": "else"}
+ mboard_eeprom_addr = "e0005000.i2c"
+ # dboard_eeprom_addrs = {"A": "something", "B": "else"}
+ # dboard_spimaster_addrs = {"A": "something", "B": "else"}
interfaces = {}
def __init__(self, *args, **kwargs):
@@ -44,21 +50,22 @@ class n310(PeriphManagerBase):
super(n310, self).__init__(*args, **kwargs)
data = self._read_eeprom_v1(self._eeprom_rawdata)
# mac 0: mgmt port, mac1: sfp0, mac2: sfp1
- self.interfaces["mgmt"] = {
- "mac_addr": byte_to_mac(data[0]),
- "addrs": get_iface_addrs(byte_to_mac(data[0]))
- }
- self.interfaces["sfp0"] = {
- "mac_addr": byte_to_mac(data[1]),
- "addrs": get_iface_addrs(byte_to_mac(data[1]))
- }
- self.interfaces["sfp1"] = {
- "mac_addr": byte_to_mac(data[2]),
- "addrs": get_iface_addrs(byte_to_mac(data[2]))
- }
- self.mboard_info["serial"] = data[3] # some format
+ # self.interfaces["mgmt"] = {
+ # "mac_addr": byte_to_mac(data[0]),
+ # "addrs": get_iface_addrs(byte_to_mac(data[0]))
+ # }
+ # self.interfaces["sfp0"] = {
+ # "mac_addr": byte_to_mac(data[1]),
+ # "addrs": get_iface_addrs(byte_to_mac(data[1]))
+ # }
+ # self.interfaces["sfp1"] = {
+ # "mac_addr": byte_to_mac(data[2]),
+ # "addrs": get_iface_addrs(byte_to_mac(data[2]))
+ # }
+ self.mboard_info["serial"] = data[0] # some format
+ with open("/sys/class/rfnoc_crossbar/crossbar0/local_addr", "w") as xbar:
+ xbar.write("0x2")
- print(data)
# if header.get("dataversion", 0) == 1:
@@ -66,15 +73,17 @@ class n310(PeriphManagerBase):
"""
read eeprom with data version 1
"""
- # data_version contains
+ # data contains
+ # 24 bytes header -> ignore them here
+ # 8 bytes serial
# 6 bytes mac_addr0
# 2 bytes pad
# 6 bytes mac_addr1
# 2 bytes pad
# 6 bytes mac_addr2
# 2 bytes pad
- # 8 bytes serial
- return struct.unpack_from("6s 2x 6s 2x 6s 2x 8s", data)
+ # 4 bytes CRC
+ return struct.unpack_from("!28x 8s 6s 2x 6s 2x 6s 2x I", data)
def get_interfaces(self):
"""
@@ -89,15 +98,40 @@ class n310(PeriphManagerBase):
"""
return self.interfaces.get(interface, {}).get("addrs", [])
- def _probe_interface(self, sender_addr):
+ def _allocate_sid(self, sender_addr, port, sid, xbar_src_addr, xbar_src_port):
"""
Get the MAC address of the sender and store it in the FPGA ARP table
"""
mac_addr = get_mac_addr(sender_addr)
+ new_ep = self.available_endpoints.pop(0)
if mac_addr is not None:
- # Do something with mac_address
- return True
- return False
-
-
-
+ if sender_addr not in self.sid_endpoints:
+ self.sid_endpoints.update({sender_addr: (new_ep,)})
+ else:
+ current_allocation = self.sid_endpoints.get(sender_addr)
+ new_allocation = current_allocation + (new_ep,)
+ self.sid_endpoints.update({sender_addr: new_allocation})
+ sid = SID(sid)
+ sid.set_src_addr(xbar_src_addr)
+ sid.set_src_ep(new_ep)
+ my_xbar = lib.xbar.xbar.make("/dev/crossbar0") # TODO
+ my_xbar.set_route(xbar_src_addr, 0) # TODO
+ # uio_path, uio_size = get_uio_node("misc-enet-regs0")
+ uio_path = "/dev/uio0"
+ uio_size = 0x2000
+ LOG.debug("got uio_path and size")
+ uio_obj = uio(uio_path, uio_size, read_only=False)
+ LOG.info("got my uio")
+ LOG.info("ip_addr: %s", sender_addr)
+ # LOG.info("mac_addr: %s", mac_addr)
+ ip_addr = int(netaddr.IPAddress(sender_addr))
+ mac_addr = int(netaddr.EUI(mac_addr))
+ uio_obj.poke32(0x1000 + 4*new_ep, ip_addr)
+ print("sid: %x" % (sid.get()))
+ print("gonna poke: %x %x" % (0x1000+4*new_ep, ip_addr))
+ uio_obj.poke32(0x1800 + 4*new_ep, mac_addr & 0xFFFFFFFF)
+ print("gonna poke: %x %x" % (0x1800+4*new_ep, mac_addr))
+ port = int(port)
+ uio_obj.poke32(0x1400 + 4*new_ep, ((int(port) << 16) | (mac_addr >> 32)))
+ print("gonna poke: %x %x" % (0x1400+4*new_ep, ((port << 16) | (mac_addr >> 32))))
+ return sid.get()