|
@@ -0,0 +1,74 @@
|
|
|
+#!/usr/bin/python
|
|
|
+
|
|
|
+import argparse
|
|
|
+import pci
|
|
|
+
|
|
|
+
|
|
|
+def cmd_read(device, args):
|
|
|
+ def mute(s):
|
|
|
+ return '\x1B[30;49m{}\x1B[0m'.format(s)
|
|
|
+
|
|
|
+ def colored_hex(x):
|
|
|
+ s = '{:08x}'.format(x)
|
|
|
+ return s if x != 0 else mute(s)
|
|
|
+
|
|
|
+ for i in range(args.addr, args.addr + args.size * 4, 16):
|
|
|
+ data = device.read(i, 4, pci.Types.UINT32)
|
|
|
+ out = ' '.join((colored_hex(x) for x in data))
|
|
|
+ addr = '{:04x}'.format(i)
|
|
|
+ print ' {} {}'.format(mute(addr) if not any(data) else addr, out)
|
|
|
+
|
|
|
+
|
|
|
+def cmd_write(device, args):
|
|
|
+ device.write(args.addr, args.value)
|
|
|
+
|
|
|
+
|
|
|
+def cmd_dma(device, args):
|
|
|
+ device.start_dma()
|
|
|
+
|
|
|
+
|
|
|
+def NumberType(s):
|
|
|
+ if s.startswith('0x'):
|
|
|
+ return int(s, 16)
|
|
|
+ return int(s)
|
|
|
+
|
|
|
+
|
|
|
+if __name__ == '__main__':
|
|
|
+ parser = argparse.ArgumentParser()
|
|
|
+ parser.add_argument('--verbose', action='store_true',
|
|
|
+ help="Verbose messages")
|
|
|
+
|
|
|
+ cmd_parsers = parser.add_subparsers(title="Commands", dest='commands')
|
|
|
+ cmd_parsers.required = True
|
|
|
+
|
|
|
+ read_parser = cmd_parsers.add_parser('read',
|
|
|
+ help="Read register values")
|
|
|
+ read_parser.add_argument('--size', '-s',
|
|
|
+ type=int, default=1,
|
|
|
+ help="foo")
|
|
|
+ read_parser.add_argument('addr',
|
|
|
+ type=NumberType,
|
|
|
+ help="Address")
|
|
|
+ read_parser.set_defaults(run=cmd_read)
|
|
|
+
|
|
|
+ write_parser = cmd_parsers.add_parser('write',
|
|
|
+ help="write register values")
|
|
|
+ write_parser.add_argument('addr',
|
|
|
+ type=NumberType,
|
|
|
+ help="Address")
|
|
|
+ write_parser.add_argument('value',
|
|
|
+ type=NumberType,
|
|
|
+ help="Value")
|
|
|
+ write_parser.set_defaults(run=cmd_write)
|
|
|
+
|
|
|
+ dma_parser = cmd_parsers.add_parser('dma',
|
|
|
+ help="Read from DMA")
|
|
|
+ dma_parser.add_argument('--size', '-s',
|
|
|
+ type=int,
|
|
|
+ help="foo")
|
|
|
+ dma_parser.set_defaults(run=cmd_dma)
|
|
|
+
|
|
|
+ args = parser.parse_args()
|
|
|
+
|
|
|
+ with pci.Device('pci') as device:
|
|
|
+ args.run(device, args)
|