#!/bin/bash

dump_port ()
{
  local port="$1"

  echo 'PCI-Compatible Type 1 Configuration Registers'
  plx_i2c_read ${port}  0x000-0x03C

  echo 'Power Management Capability Registers'
  plx_i2c_read ${port}  0x040-0x044

  echo 'Message Signaled Interrupt Capability Registers'
  plx_i2c_read ${port}  0x048-0x058

  echo 'PCI Express Capability Registers'
  plx_i2c_read ${port}  0x068-0x080

  echo 'Device Serial Extended Number Capability Registers'
  plx_i2c_read ${port}  0x100-0x108

  echo 'Power Budgeting Extended Capability Registers'
  plx_i2c_read ${port}  0x138-0x144

  echo 'Virtual Channel Extended Capability Registers'
  plx_i2c_read ${port}  0x148-0x16C

  echo 'Error Checking and Debug Registers'
  plx_i2c_read ${port}  0x1C8-0x1D0  0x1DC-0x1F8

 if [[ $port == 0 ]]
 then

  echo 'Physical Layer Registers'
  plx_i2c_read ${port}  0x204-0x25C  0x294

  echo 'Bus Number CAM Registers'
  plx_i2c_read ${port}  0x2C8-0x2D8

  echo 'I/O CAM Registers'
  plx_i2c_read ${port}  0x308-0x310

  echo 'Address-Mapping CAM (AMCAM) Registers'
  plx_i2c_read ${port}  0x348-0x394  0x548

  echo 'Ingress Control and Port Enable Registers'
  plx_i2c_read ${port}  0x660  0x668

  echo 'I/O CAM Base and Limit Upper 16-Bit Registers'
  plx_i2c_read ${port}  0x680-0x690

  echo 'Base Address Shadow Registers (BARs)'
  plx_i2c_read ${port}  0x6C0-0x6E4

  echo 'Shadow Virtual Channel (VC) Capability Registers'
  plx_i2c_read ${port}  0x740-0x758  0x760

  echo 'Shadow Port Virtual Channel (VC) Capability Registers'
  plx_i2c_read ${port}  0x840-0x850

  echo 'Ingress Credit Handler (INCH) Registers'
  plx_i2c_read ${port}  0x9F0-0xA50  0xA60-0xA68

  echo 'Relaxed Ordering and Performance Counter Registers'
  plx_i2c_read ${port}  0xBE4-0xBE8  0xBFC

  echo 'Internal Credit Handler (ITCH) VC&T Threshold Registers'
  plx_i2c_read ${port}  0xC00-0xC08

  echo 'Port Virtual Channel Queue Status Registers'
  plx_i2c_read ${port}  0xC0C-0xC34

 else

  echo 'Ingress Credit Handler (INCH) Registers'
  plx_i2c_read ${port}  0xA00-0xA50  0xA60-0xA68

 fi

  echo 'Advanced Error Reporting Capability Registers'
  plx_i2c_read ${port}  0xFB4-0xFDC
}

dump_ports ()
{
  for p
  do
    echo
    echo ========== port $p ==========
    echo
    dump_port $p
  done
}

if [[ $# > 0 ]]
then
    dump_ports "$@"
else
    dump_ports 0 1 2 3
fi

