pcip 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. #!/usr/bin/python
  2. import argparse
  3. import pci
  4. def cmd_read(device, args):
  5. def mute(s):
  6. return '\x1B[30;49m{}\x1B[0m'.format(s)
  7. def colored_hex(x):
  8. s = '{:08x}'.format(x)
  9. return s if x != 0 else mute(s)
  10. for i in range(args.addr, args.addr + args.size * 4, 16):
  11. data = device.read(i, 4, pci.Types.UINT32)
  12. out = ' '.join((colored_hex(x) for x in data))
  13. addr = '{:04x}'.format(i)
  14. print ' {} {}'.format(mute(addr) if not any(data) else addr, out)
  15. def cmd_write(device, args):
  16. device.write(args.addr, args.value)
  17. def cmd_dma(device, args):
  18. device.start_dma()
  19. def NumberType(s):
  20. if s.startswith('0x'):
  21. return int(s, 16)
  22. return int(s)
  23. if __name__ == '__main__':
  24. parser = argparse.ArgumentParser()
  25. parser.add_argument('--verbose', action='store_true',
  26. help="Verbose messages")
  27. cmd_parsers = parser.add_subparsers(title="Commands", dest='commands')
  28. cmd_parsers.required = True
  29. read_parser = cmd_parsers.add_parser('read',
  30. help="Read register values")
  31. read_parser.add_argument('--size', '-s',
  32. type=int, default=1,
  33. help="foo")
  34. read_parser.add_argument('addr',
  35. type=NumberType,
  36. help="Address")
  37. read_parser.set_defaults(run=cmd_read)
  38. write_parser = cmd_parsers.add_parser('write',
  39. help="write register values")
  40. write_parser.add_argument('addr',
  41. type=NumberType,
  42. help="Address")
  43. write_parser.add_argument('value',
  44. type=NumberType,
  45. help="Value")
  46. write_parser.set_defaults(run=cmd_write)
  47. dma_parser = cmd_parsers.add_parser('dma',
  48. help="Read from DMA")
  49. dma_parser.add_argument('--size', '-s',
  50. type=int,
  51. help="foo")
  52. dma_parser.set_defaults(run=cmd_dma)
  53. args = parser.parse_args()
  54. with pci.Device('pci') as device:
  55. args.run(device, args)