xref: /freebsd/usr.sbin/pciconf/pciconf.8 (revision f7c32ed617858bcd22f8d1b03199099d50125721)
1.\" Copyright (c) 1997
2.\"	Stefan Esser <se@FreeBSD.org>. All rights reserved.
3.\"
4.\" Redistribution and use in source and binary forms, with or without
5.\" modification, are permitted provided that the following conditions
6.\" are met:
7.\" 1. Redistributions of source code must retain the above copyright
8.\"    notice, this list of conditions and the following disclaimer.
9.\"
10.\" 2. Redistributions in binary form must reproduce the above copyright
11.\"    notice, this list of conditions and the following disclaimer in the
12.\"    documentation and/or other materials provided with the distribution.
13.\"
14.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
15.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
16.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
17.\" ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
18.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
19.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
20.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
21.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
22.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
23.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
24.\" SUCH DAMAGE.
25.\"
26.\" $FreeBSD$
27.\"
28.Dd June 14, 2018
29.Dt PCICONF 8
30.Os
31.Sh NAME
32.Nm pciconf
33.Nd diagnostic utility for the PCI bus
34.Sh SYNOPSIS
35.Nm
36.Fl l Oo Fl BbceVv Oc Op Ar device
37.Nm
38.Fl a Ar device
39.Nm
40.Fl r Oo Fl b | h Oc Ar device addr Ns Op : Ns Ar addr2
41.Nm
42.Fl w Oo Fl b | h Oc Ar device addr value
43.Nm
44.Fl D Oo Fl b | h | x Oc Ar device addr Op start Ns Op : Ns Ar count
45.Sh DESCRIPTION
46The
47.Nm
48utility provides a command line interface to functionality provided by the
49.Xr pci 4
50.Xr ioctl 2
51interface.
52As such, some of the functions are only available to users with write
53access to
54.Pa /dev/pci ,
55normally only the super-user.
56.Pp
57With the
58.Fl l
59option,
60.Nm
61lists PCI devices in the following format:
62.Bd -literal
63foo0@pci0:0:4:0: class=0x010000 rev=0x01 hdr=0x00 vendor=0x1000 device=0x000f \
64subvendor=0x0000 subdevice=0x0000
65bar0@pci0:0:5:0: class=0x000100 rev=0x00 hdr=0x00 vendor=0x88c1 device=0x5333 \
66subvendor=0x0000 subdevice=0x0000
67none0@pci0:0:6:0: class=0x020000 rev=0x00 hdr=0x00 vendor=0x10ec device=0x8029 \
68subvendor=0x0000 subdevice=0x0000
69.Ed
70.Pp
71The first column gives the
72driver name, unit number, and selector.
73If there is no driver attached to the
74.Tn PCI
75device in question, the driver name will be
76.Dq none .
77Unit numbers for detached devices start at zero and are incremented for
78each detached device that is encountered.
79The selector
80is in a form which may directly be used for the other forms of the command.
81The second column is the class code, with the class byte printed as two
82hex digits, followed by the sub-class and the interface bytes.
83The third column prints the device's revision.
84The fourth column describes the header type.
85.Pp
86Currently assigned header types include 0 for standard devices,
871 for
88.Tn PCI
89to
90.Tn PCI
91bridges, and 2 for
92.Tn PCI
93to
94.Tn CardBus
95bridges.
96If the most significant bit
97of the header type register is set for
98function 0 of a
99.Tn PCI
100device, it is a
101.Em multi-function
102device, which contains several (similar or independent) functions on
103one chip.
104.Pp
105The sixth and seventh columns contain the vendor ID and the device ID of the
106device.
107The eigth and ninth columns contain subvendor and subdevice IDs, introduced
108in revision 2.1 of the
109.Tn PCI
110standard.
111Note that they will be 0 for older cards.
112.Pp
113Adding a second
114.Fl l
115option causes output to be in a compact columnar format, suitable for
11680 column output:
117.Bd -literal
118drv     selector        class   rev hdr vendor device subven subdev
119foo0@pci0:0:4:0:        010000  01  00  1000   000f   0000   0000
120bar0@pci0:0:5:0:        000100  00  00  88c1   5333   0000   0000
121none0@pci0:0:6:0:       020000  00  00  10ec   8029   0000   0000
122.Ed
123.Pp
124All fields retain the same definition as with the non-compact form.
125.Pp
126If the
127.Fl B
128option is supplied,
129.Nm
130will list additional information for
131.Tn PCI
132to
133.Tn PCI
134and
135.Tn PCI
136to
137.Tn CardBus
138bridges,
139specifically the resource ranges decoded by the bridge for use by devices
140behind the bridge.
141Each bridge lists a range of bus numbers handled by the bridge and its
142downstream devices.
143Memory and I/O port decoding windows are enumerated via a line in the
144following format:
145.Bd -literal
146    window[1c] = type I/O Port, range 16, addr 0x5000-0x8fff, enabled
147.Ed
148.Pp
149The first value after the
150.Dq Li window
151prefix in the square brackets is the offset of the decoding window in
152config space in hexadecimal.
153The type of a window is one of
154.Dq Memory ,
155.Dq Prefetchable Memory ,
156or
157.Dq I/O Port .
158The range indicates the binary log of the maximum address the window decodes.
159The address field indicates the start and end addresses of the decoded range.
160Finally, the last flag indicates if the window is enabled or disabled.
161.Pp
162If the
163.Fl b
164option is supplied,
165.Nm
166will list any base address registers
167.Pq BARs
168that are assigned resources for each device.
169Each BAR will be enumerated via a line in the following format:
170.Bd -literal
171    bar   [10] = type Memory, range 32, base 0xda060000, size 131072, enabled
172.Ed
173.Pp
174The first value after the
175.Dq Li bar
176prefix in the square brackets is the offset of the BAR in config space in
177hexadecimal.
178The type of a BAR is one of
179.Dq Memory ,
180.Dq Prefetchable Memory ,
181or
182.Dq I/O Port .
183The range indicates the binary log of the maximum address the BAR decodes.
184The base and size indicate the start and length of the BAR's address window,
185respectively.
186Finally, the last flag indicates if the BAR is enabled or disabled.
187.Pp
188If the
189.Fl c
190option is supplied,
191.Nm
192will list any capabilities supported by each device.
193A second invocation of
194.Fl c
195will print additional data for certain capabilities.
196Each capability is enumerated via a line in the following format:
197.Bd -literal
198    cap 10[40] = PCI-Express 1 root port
199.Ed
200.Pp
201The first value after the
202.Dq Li cap
203prefix is the capability ID in hexadecimal.
204The second value in the square brackets is the offset of the capability
205in config space in hexadecimal.
206The format of the text after the equals sign is capability-specific.
207.Pp
208Each extended capability is enumerated via a line in a similar format:
209.Bd -literal
210ecap 0002[100] = VC 1 max VC0
211.Ed
212.Pp
213The first value after the
214.Dq Li ecap
215prefix is the extended capability ID in hexadecimal.
216The second value in the square brackets is the offset of the extended
217capability in config space in hexadecimal.
218The format of the text after the equals sign is capability-specific.
219.Pp
220If the
221.Fl e
222option is supplied,
223.Nm
224will list any errors reported for this device in standard PCI error registers.
225Errors are checked for in the PCI status register,
226the PCI-express device status register,
227and the Advanced Error Reporting status registers.
228.Pp
229If the
230.Fl v
231option is supplied,
232.Nm
233will attempt to load the vendor/device information database, and print
234vendor, device, class and subclass identification strings for each device.
235.Pp
236If the
237.Fl V
238option is supplied,
239.Nm
240will list any vital product data
241.Pq VPD
242provided by each device.
243Each VPD keyword is enumerated via a line in the following format:
244.Bd -literal
245    VPD ro PN  = '110114640C0     '
246.Ed
247.Pp
248The first string after the
249.Dq Li VPD
250prefix indicates if the keyword is read-only
251.Dq ro
252or read-write
253.Dq rw .
254The second string provides the keyword name.
255The text after the equals sign lists the value of the keyword which is
256usually an ASCII string.
257.Pp
258If the optional
259.Ar device
260argument is given with the
261.Fl l
262flag,
263.Nm
264will only list details about a single device instead of all devices.
265.Pp
266All invocations of
267.Nm
268except for
269.Fl l
270require a
271.Ar device .
272The device can be identified either by a device name if the device is
273attached to a driver or by a selector.
274Selectors identify a PCI device by its address in PCI config space and
275can take one of the following forms:
276.Pp
277.Bl -bullet -offset indent -compact
278.It
279.Li pci Ns Va domain Ns \&: Ns Va bus Ns \&: Ns Va device Ns \&: \
280Ns Va function Ns
281.It
282.Li pci Ns Va bus Ns \&: Ns Va device Ns \&: Ns Va function Ns
283.It
284.Li pci Ns Va bus Ns \&: Ns Va device Ns
285.El
286.Pp
287In the case of an abridged form, omitted selector components are assumed to be 0.
288An optional leading device name followed by @ and an optional final colon
289will be ignored; this is so that the first column in the output of
290.Nm
291.Fl l
292can be used without modification.
293All numbers are base 10.
294.Pp
295With the
296.Fl a
297flag,
298.Nm
299determines whether any driver has been assigned to the device
300identified by
301.Ar selector .
302An exit status of zero indicates that the device has a driver;
303non-zero indicates that it does not.
304.Pp
305The
306.Fl r
307option reads a configuration space register at byte offset
308.Ar addr
309of device
310.Ar selector
311and prints out its value in hexadecimal.
312The optional second address
313.Ar addr2
314specifies a range to read.
315The
316.Fl w
317option writes the
318.Ar value
319into a configuration space register at byte offset
320.Ar addr
321of device
322.Ar selector .
323.Pp
324The
325.Fl D
326option request a dump of the specified BAR.
327Dump is performed to the standard output, raw register values
328are written.
329Use
330.Xr hexdump 1
331to convert them to human-readable dump,
332or redirect into a file to save the snapshot of the device state.
333Optionally, the
334.Ar start
335and
336.Ar count
337of the registers dumped can be specified, in multiple of the operation width,
338see next paragraph.
339.Pp
340For read, write, and dump operations, the flags
341.Fl b ,
342.Fl h ,
343and
344.Fl x
345select the width of the operation;
346.Fl b
347indicates a byte operation, and
348.Fl h
349indicates a halfword (two-byte) operation.
350.Fl x
351indicates a quadword (four-byte) operation.
352The default is to read or
353write a longword (four bytes).
354The quadword mode is only valid for BAR dump.
355.Sh ENVIRONMENT
356PCI vendor and device information is read from
357.Pa /usr/local/share/pciids/pci.ids .
358If that file is not present, it is read from
359.Pa /usr/share/misc/pci_vendors .
360This path can be overridden by setting the environment variable
361.Ev PCICONF_VENDOR_DATABASE .
362.Sh SEE ALSO
363.Xr ioctl 2 ,
364.\" .Xr pci 4 ,
365.Xr devinfo 8 ,
366.Xr kldload 8
367.Sh HISTORY
368The
369.Nm
370utility appeared first in
371.Fx 2.2 .
372The
373.Fl a
374option was added for
375.Tn PCI
376KLD support in
377.Fx 3.0 .
378.Sh AUTHORS
379.An -nosplit
380The
381.Nm
382utility was written by
383.An Stefan Esser
384and
385.An Garrett Wollman .
386.Sh BUGS
387The
388.Fl b
389and
390.Fl h
391options are implemented in
392.Nm ,
393but not in the underlying
394.Xr ioctl 2 .
395.Pp
396It might be useful to give non-root users access to the
397.Fl a
398and
399.Fl r
400options.
401But only root will be able to execute a
402.Nm kldload
403to provide the device with a driver KLD, and reading of configuration space
404registers may cause a failure in badly designed
405.Tn PCI
406chips.
407.Pp
408There is currently no way to specify the caching mode for the mapping
409established by the
410.Fl D
411option,
412.Nm
413always uses uncached access.
414This is fine for control register BARs.
415