soc/tools: syntax fix on comm_pcie, import in __init__.py
[litex.git] / litex / soc / tools / remote / comm_pcie.py
1 import mmap
2
3
4 class CommPCIe:
5 def __init__(self, bar, bar_size, debug=False):
6 self.bar = bar
7 self.bar_size = bar_size
8 self.debug = debug
9
10 def open(self):
11 if hasattr(self, "sysfs"):
12 return
13 self.sysfs = open(self.bar, "r+b")
14 self.sysfs.flush()
15 self.mmap = mmap.mmap(self.sysfs.fileno(), self.bar_size)
16
17 def close(self):
18 if not hasattr(self, "sysfs"):
19 return
20 self.mmap.close()
21 del self.mmap
22 self.sysfs.close()
23 del self.sysfs
24
25 def read(self, addr, length=None):
26 data = []
27 length_int = 1 if length is None else length
28 for i in range(length_int):
29 self.mmap.seek(addr + 4*i)
30 value = int.from_bytes(self.mmap.read(4), "big")
31 if self.debug:
32 print("read {:08x} @ {:08x}".format(value, addr + 4*i))
33 if length is None:
34 return value
35 data.append(value)
36 return data
37
38 def write(self, addr, data):
39 data = data if isinstance(data, list) else [data]
40 length = len(data)
41 for i, value in enumerate(data):
42 self.mmap[addr + 4*i:addr + 4*(i + 1)] = value.to_bytes(4, byteorder="big")
43 if self.debug:
44 print("write {:08x} @ {:08x}".format(value, addr + 4*i))