X-Git-Url: http://mj.ucw.cz/gitweb/?a=blobdiff_plain;ds=sidebyside;f=setpci.man;h=9e4e1d8a6c44c2963b33449cd1c8ee4dddb191ea;hb=adf7de0ec6a1b734c00667879d36c1198670958a;hp=d682c37e1f9c8a00a5aea0d80b435ff68b061962;hpb=90f8c88626289b0a713abc41759e8bebe6c20ddb;p=pciutils.git diff --git a/setpci.man b/setpci.man index d682c37..9e4e1d8 100644 --- a/setpci.man +++ b/setpci.man @@ -1,5 +1,4 @@ .TH setpci 8 "@TODAY@" "@VERSION@" "The PCI Utilities" -.IX setpci .SH NAME setpci \- configure PCI devices .SH SYNOPSIS @@ -42,14 +41,28 @@ or not. `Demo mode' -- don't write anything to the configuration registers. It's useful to try .B setpci -vD -to see what your complex sequence of +to verify that your complex sequence of .B setpci -operations does before you actually execute it. +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 -Shows +Show .I setpci version. This option should be used stand-alone. +.TP +.B --help +Show detailed help on available options. This option should be used stand-alone. +.TP +.B --dumpregs +Show a list of all known PCI registers and capabilities. This option should be +used stand-alone. .SS PCI access options .PP @@ -65,7 +78,7 @@ available methods and their descriptions. .TP .B -O = 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 @@ -85,119 +98,90 @@ Before each sequence of operations you need to select which devices you wish tha operation to affect. .TP .B -s [[[[]:]]:][][.[]] -Show only devices in the specified domain (in case your machine has several host bridges, +Consider only devices in the specified domain (in case your machine has several host bridges, they can either share a common bus number space or each of them can address a PCI domain of its own; domains are numbered from 0 to ffff), bus (0 to ff), slot (0 to 1f) and function (0 to 7). Each component of the device address can be omitted or set to "*", both meaning "any value". All numbers are hexadecimal. E.g., "0:" means all devices on bus 0, "0" means all functions of device 0 -on any bus, "0.3" selects third function of device 0 on all buses and ".4" shows only +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 []:[] -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 []:[][:[:]] +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 +and +.B -d +are combined, only devices that match both criteria are selected. When multiple +options of the same kind are specified, the rightmost one overrides the others. .SH OPERATIONS .PP -To query value of a configuration register, just name it (either by typing its name or -by typing register address with optional -.BR .B , -.B .W -or -.B .L -suffix specifying register width as byte, word or longword). -.PP -To set a register, write -.BR reg = values -where -.B reg -is the same as you would use to query the register and -.B values -is a comma-separated list of values you want to write starting with the given -address. Each value to be written can be specified either as a hexadecimal number -or as a -.BR bits : mask -pair which causes the bits corresponding to binary ones in the -.B mask -to be changed to values of the corresponding bits in the -.B bits -. +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 ...\& +where each +.I value +is either a hexadecimal number or an expression of type +.IR data : mask +where both +.I data +and +.I mask +are hexadecimal numbers. In the latter case, only the bits corresponding to binary +ones in the \fImask\fP are changed (technically, this is a read-modify-write operation). -.SH REGISTER NAMES .PP -.B setpci -knows the following configuration register names. See PCI bus specifications for their precise -meaning or consult -.B header.h -or -.B /usr/include/linux/pci.h -for a couple of comments. +There are several ways how to identity a register: +.IP \(bu +Tell its address in hexadecimal. +.IP \(bu +Spell its name. Setpci knows the names of all registers in the standard configuration +headers. Use `\fBsetpci --dumpregs\fP' to get the complete list. +See PCI bus specifications for the precise meaning of these registers or consult +\fBheader.h\fP or \fB/usr/include/pci/pci.h\fP for a brief sketch. +.IP \(bu +If the register is a part of a PCI capability, you can specify the name of the +capability to get the address of its first register. See the names starting with +`CAP_' or `ECAP_' in the \fB--dumpregs\fP output. +.IP \(bu +If the name of the capability is not known to \fBsetpci\fP, you can refer to it +by its number in the form CAP\fBid\fP or ECAP\fBid\fP, where \fBid\fP is the numeric +identifier of the capability 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 +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 -.nf -VENDOR_ID -DEVICE_ID -COMMAND -STATUS -REVISION -CLASS_PROG -CLASS_DEVICE -CACHE_LINE_SIZE -LATENCY_TIMER -HEADER_TYPE -BIST -BASE_ADDRESS_0 -BASE_ADDRESS_1 -BASE_ADDRESS_2 -BASE_ADDRESS_3 -BASE_ADDRESS_4 -BASE_ADDRESS_5 -CARDBUS_CIS -SUBSYSTEM_VENDOR_ID -SUBSYSTEM_ID -ROM_ADDRESS -INTERRUPT_LINE -INTERRUPT_PIN -MIN_GNT -MAX_LAT -PRIMARY_BUS -SECONDARY_BUS -SUBORDINATE_BUS -SEC_LATENCY_TIMER -IO_BASE -IO_LIMIT -SEC_STATUS -MEMORY_BASE -MEMORY_LIMIT -PREF_MEMORY_BASE -PREF_MEMORY_LIMIT -PREF_BASE_UPPER32 -PREF_LIMIT_UPPER32 -IO_BASE_UPPER16 -IO_LIMIT_UPPER16 -BRIDGE_ROM_ADDRESS -BRIDGE_CONTROL -CB_CARDBUS_BASE -CB_CAPABILITIES -CB_SEC_STATUS -CB_BUS_NUMBER -CB_CARDBUS_NUMBER -CB_SUBORDINATE_BUS -CB_CARDBUS_LATENCY -CB_MEMORY_BASE_0 -CB_MEMORY_LIMIT_0 -CB_MEMORY_BASE_1 -CB_MEMORY_LIMIT_1 -CB_IO_BASE_0 -CB_IO_BASE_0_HI -CB_IO_LIMIT_0 -CB_IO_LIMIT_0_HI -CB_IO_BASE_1 -CB_IO_BASE_1_HI -CB_IO_LIMIT_1 -CB_IO_LIMIT_1_HI -CB_SUBSYSTEM_VENDOR_ID -CB_SUBSYSTEM_ID -CB_LEGACY_MODE_BASE +All names of registers and width specifiers are case-insensitive. + +.SH +EXAMPLES + +.IP COMMAND +asks for the word-sized command register. +.IP 4.w +is a numeric address of the same register. +.IP COMMAND.l +asks for a 32-bit word starting at the location of the command register, +i.e., the command and status registers together. +.IP VENDOR_ID+1.b +specifies the upper byte of the vendor ID register (remember, PCI is little-endian). +.IP CAP_PM+2.w +corresponds to the second word of the power management capability. +.IP ECAP108.l +asks for the first 32-bit word of the extended capability with ID 0x108. .SH SEE ALSO .BR lspci (8),