svn commit: r188018 - in head: sys/dev/pci usr.sbin/pciconf
John Baldwin
jhb at freebsd.org
Mon Feb 2 12:55:34 PST 2009
On Monday 02 February 2009 2:54:16 pm John Baldwin wrote:
> Author: jhb
> Date: Mon Feb 2 19:54:16 2009
> New Revision: 188018
> URL: http://svn.freebsd.org/changeset/base/188018
>
> Log:
> - Add a new ioctl to /dev/pci to fetch details on an individual BAR of a
> device. The details include the current value of the BAR (including all
> the flag bits and the current base address), its length, and whether or not
> it is enabled. Since this operation is not invasive, non-root users are
> allowed to use it (unlike manual config register access which requires
> root). The intention is that userland apps (such as Xorg) will use this
> interface rather than dangerously frobbing the BARs from userland to
> obtain this information.
> - Add a new sub-mode to the 'list' mode of pciconf. The -b flag when used
> with -l will now list all the active BARs for each device.
>
> MFC after: 1 month
As with the capability messages, I attempted to make the bar messages match
the output of a verbose dmesg. An example:
igb0 at pci0:8:0:0: class=0x020000 card=0x10a715d9 chip=0x10a78086 rev=0x02 hdr=0x00
vendor = 'Intel Corporation'
class = network
subclass = ethernet
bar [10] = type Memory, range 32, base 0xda020000, size 131072, enabled
bar [14] = type Memory, range 32, base 0xda000000, size 131072, enabled
bar [18] = type I/O Port, range 32, base 0x3000, size 32, enabled
bar [1c] = type Memory, range 32, base 0xda080000, size 16384, enabled
cap 01[40] = powerspec 2 supports D0 D3 current D0
cap 05[50] = MSI supports 1 message, 64 bit
cap 11[60] = MSI-X supports 10 messages in map 0x1c enabled
cap 10[a0] = PCI-Express 2 endpoint
There are a few caveats:
1) the ioctl will not report any status for a BAR that doesn't have allocated
resources. We could fix this is if we stored details about the BARs we
enumerate during pci_add_child() in the dinfo.
2) The ioctl will report status for BARs we add via quirks, but the pciconf
doesn't know how to get to them. It may make sense for the IOCTL to work
differently than it does now. Perhaps as an iterator where you request
register 0 the first time, and then pass in the previous register on each
update. It would then walk all the resources and signal end by setting
the register to -1. The current mode does handle what Xorg expects I
think, whereas the iterator approach would require more hacking on X.
--
John Baldwin
More information about the svn-src-head
mailing list