diff options
author | neel <neel@FreeBSD.org> | 2013-02-01 19:24:16 +0000 |
---|---|---|
committer | neel <neel@FreeBSD.org> | 2013-02-01 19:24:16 +0000 |
commit | be7ba5de0e4100028b82c8aed8c81c3b3a6f3548 (patch) | |
tree | 27ad97a4ade5bfb00b3ad5b19e675b20faf7479e /usr.sbin/pciconf | |
parent | 5e07d49c626dea51d672ea9d9bd1499e0ae8eb29 (diff) | |
download | FreeBSD-src-be7ba5de0e4100028b82c8aed8c81c3b3a6f3548.zip FreeBSD-src-be7ba5de0e4100028b82c8aed8c81c3b3a6f3548.tar.gz |
Display MSI-X table and PBA offsets when displaying information about MSI-X
capability.
Reviewed by: jhb, jimharris (initial version)
Diffstat (limited to 'usr.sbin/pciconf')
-rw-r--r-- | usr.sbin/pciconf/cap.c | 26 |
1 files changed, 15 insertions, 11 deletions
diff --git a/usr.sbin/pciconf/cap.c b/usr.sbin/pciconf/cap.c index ce184dd..1c2ab4a 100644 --- a/usr.sbin/pciconf/cap.c +++ b/usr.sbin/pciconf/cap.c @@ -449,24 +449,28 @@ cap_express(int fd, struct pci_conf *p, uint8_t ptr) static void cap_msix(int fd, struct pci_conf *p, uint8_t ptr) { - uint32_t val; + uint32_t pba_offset, table_offset, val; + int msgnum, pba_bar, table_bar; uint16_t ctrl; - int msgnum, table_bar, pba_bar; ctrl = read_config(fd, &p->pc_sel, ptr + PCIR_MSIX_CTRL, 2); msgnum = (ctrl & PCIM_MSIXCTRL_TABLE_SIZE) + 1; + val = read_config(fd, &p->pc_sel, ptr + PCIR_MSIX_TABLE, 4); table_bar = PCIR_BAR(val & PCIM_MSIX_BIR_MASK); + table_offset = val & ~PCIM_MSIX_BIR_MASK; + val = read_config(fd, &p->pc_sel, ptr + PCIR_MSIX_PBA, 4); - pba_bar = PCIR_BAR(val & PCIM_MSIX_BIR_MASK); - printf("MSI-X supports %d message%s ", msgnum, - (msgnum == 1) ? "" : "s"); - if (table_bar == pba_bar) - printf("in map 0x%x", table_bar); - else - printf("in maps 0x%x and 0x%x", table_bar, pba_bar); - if (ctrl & PCIM_MSIXCTRL_MSIX_ENABLE) - printf(" enabled"); + pba_bar = PCIR_BAR(val & PCIM_MSIX_BIR_MASK); + pba_offset = val & ~PCIM_MSIX_BIR_MASK; + + printf("MSI-X supports %d message%s%s\n", msgnum, + (msgnum == 1) ? "" : "s", + (ctrl & PCIM_MSIXCTRL_MSIX_ENABLE) ? ", enabled" : ""); + + printf(" "); + printf("Table in map 0x%x[0x%x], PBA in map 0x%x[0x%x]", + table_bar, table_offset, pba_bar, pba_offset); } static void |