> Date: Tue, 2 Apr 2019 11:45:00 +0800
> From: Jonathan Matthew <jonat...@d14n.org>
> 
> This makes pcidump -v show whether MSI/MSI-X interrupts are enabled
> for a device, and for MSI-X, the size of the interrupt table and
> which BAR/offset it's in.
> 
> ok?

sure, ok kettenis@

> Index: pcidump.c
> ===================================================================
> RCS file: /cvs/src/usr.sbin/pcidump/pcidump.c,v
> retrieving revision 1.52
> diff -u -p -r1.52 pcidump.c
> --- pcidump.c 12 Mar 2019 01:46:21 -0000      1.52
> +++ pcidump.c 2 Apr 2019 03:24:11 -0000
> @@ -54,6 +54,8 @@ void dump_bars(int, int, int, int);
>  void dump_caplist(int, int, int, u_int8_t);
>  void dump_pci_powerstate(int, int, int, uint8_t);
>  void dump_pcie_linkspeed(int, int, int, uint8_t);
> +void dump_msi(int, int, int, uint8_t);
> +void dump_msix(int, int, int, uint8_t);
>  void print_pcie_ls(uint8_t);
>  int dump_rom(int, int, int);
>  int dump_vga_bios(void);
> @@ -398,6 +400,34 @@ dump_pcie_linkspeed(int bus, int dev, in
>  }
>  
>  void
> +dump_msi(int bus, int dev, int func, u_int8_t ptr)
> +{
> +     u_int32_t reg;
> +
> +     if (pci_read(bus, dev, func, ptr, &reg) != 0)
> +             return;
> +
> +     printf("\t\tEnabled: %s\n", reg & PCI_MSI_MC_MSIE ? "yes" : "no");
> +}
> +
> +void
> +dump_msix(int bus, int dev, int func, u_int8_t ptr)
> +{
> +     u_int32_t reg;
> +     u_int32_t table;
> +
> +     if ((pci_read(bus, dev, func, ptr, &reg) != 0) ||
> +         (pci_read(bus, dev, func, ptr + PCI_MSIX_TABLE, &table) != 0))
> +             return;
> +
> +     printf("\t\tEnabled: %s; table size %d (BAR %d:%d)\n",
> +         reg & PCI_MSIX_MC_MSIXE ? "yes" : "no",
> +         PCI_MSIX_MC_TBLSZ(reg) + 1,
> +         (table & PCI_MSIX_TABLE_BIR),
> +         (table & PCI_MSIX_TABLE_OFF));
> +}
> +
> +void
>  dump_pcie_enhanced_caplist(int bus, int dev, int func)
>  {
>       u_int32_t reg;
> @@ -458,6 +488,12 @@ dump_caplist(int bus, int dev, int func,
>               case PCI_CAP_PCIEXPRESS:
>                       dump_pcie_linkspeed(bus, dev, func, ptr);
>                       dump_pcie_enhanced_caplist(bus, dev, func);
> +                     break;
> +             case PCI_CAP_MSI:
> +                     dump_msi(bus, dev,func, ptr);
> +                     break;
> +             case PCI_CAP_MSIX:
> +                     dump_msix(bus, dev, func, ptr);
>                       break;
>               }
>               ptr = PCI_CAPLIST_NEXT(reg);
> 
> 

Reply via email to