.TH setpci 8 "@TODAY@" "@VERSION@" "The PCI Utilities"
-.IX setpci
.SH NAME
setpci \- configure PCI devices
.SH SYNOPSIS
.B setpci
operations does what you think it should do.
.TP
+.B -r
+Avoids bus scan if each operation selects a specific device (uses the
+.B -s
+selector with specific domain, bus, slot, and function). This is faster,
+but if the device does not exist, it fails instead of matching an empty
+set of devices.
+.TP
.B --version
Show
.I setpci
.TP
.B -O <param>=<value>
The behavior of the library is controlled by several named parameters.
-This option allows to set the value of any of the parameters. Use \fB-O help\fP
+This option allows one to set the value of any of the parameters. Use \fB-O help\fP
for a list of known parameters and their default values.
.TP
.B -H1
on any bus, "0.3" selects third function of device 0 on all buses and ".4" matches only
the fourth function of each device.
.TP
-.B -d [<vendor>]:[<device>]
-Select devices with specified vendor and device ID. Both ID's are given in
-hexadecimal and may be omitted or given as "*", both meaning "any value".
+.B -d [<vendor>]:[<device>][:<class>[:<prog-if>]]
+Select devices with specified vendor, device, class ID, and programming interface.
+The ID's are given in hexadecimal and may be omitted or given as "*", both meaning
+"any value". The class ID can contain "x" characters which stand for "any digit".
.PP
When
.B -s
.PP
There are two kinds of operations: reads and writes. To read a register, just specify
its name. Writes have the form
-.IR name = value , value ...
+.IR name = value , value ...\&
where each
.I value
is either a hexadecimal number or an expression of type
ones in the \fImask\fP are changed (technically, this is a read-modify-write operation).
.PP
-There are several ways how to identity a register:
+There are several ways to identify a register:
.IP \(bu
Tell its address in hexadecimal.
.IP \(bu
Each of the previous formats can be followed by \fB+offset\fP to add an offset
(a hex number) to the address. This feature can be useful for addressing of registers
living within a capability, or to modify parts of standard registers.
-\IP \(bu
-Finally, you should append a width specifier \fB.B\fP, \fB.W\fP, or \fB.L\fP to choose
-how many bytes (1, 2, or 4) should be transferred. The width can be omitted if you are
+.IP \(bu
+To choose how many bytes (1, 2, or 4) should be transferred, you should append a width
+specifier \fB.B\fP, \fB.W\fP, or \fB.L\fP. The width can be omitted if you are
referring to a register by its name and the width of the register is well known.
+.IP \(bu
+Finally, if a capability exists multiple times you can choose which one to target using
+\fB@number\fP. Indexing starts at 0.
.PP
All names of registers and width specifiers are case-insensitive.