1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374 |
- #!/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)
|