diff options
author | Andrej Rode <andrej.rode@ettus.com> | 2017-04-11 15:56:25 -0700 |
---|---|---|
committer | Martin Braun <martin.braun@ettus.com> | 2017-12-22 15:03:45 -0800 |
commit | 7f7111198816cbf1e0597f7ecc9f46e4c26e916b (patch) | |
tree | 7a74ecf77569b07364de278822873d7ce1f82185 /mpm/python/usrp_mpm/periph_manager/n310.py | |
parent | f27cb2a7711e428a88c59a5af762055c7f1e3e13 (diff) | |
download | uhd-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.py | 88 |
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() |