xref: /freebsd/share/man/man9/pci.9 (revision 0a9c80e520017a0b33d106339219c4a63e0e972b)
1aac0aafaSHiten Pandya.\"
2bf1639eeSBruce M Simpson.\" Copyright (c) 2005 Bruce M Simpson <bms@FreeBSD.org>
3aac0aafaSHiten Pandya.\" All rights reserved.
4aac0aafaSHiten Pandya.\"
5aac0aafaSHiten Pandya.\" Redistribution and use in source and binary forms, with or without
6aac0aafaSHiten Pandya.\" modification, are permitted provided that the following conditions
7aac0aafaSHiten Pandya.\" are met:
8aac0aafaSHiten Pandya.\" 1. Redistributions of source code must retain the above copyright
9aac0aafaSHiten Pandya.\"    notice, this list of conditions and the following disclaimer.
10aac0aafaSHiten Pandya.\" 2. Redistributions in binary form must reproduce the above copyright
11aac0aafaSHiten Pandya.\"    notice, this list of conditions and the following disclaimer in the
12aac0aafaSHiten Pandya.\"    documentation and/or other materials provided with the distribution.
13aac0aafaSHiten Pandya.\"
14aac0aafaSHiten Pandya.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
15aac0aafaSHiten Pandya.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
16aac0aafaSHiten Pandya.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
17aac0aafaSHiten Pandya.\" ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
18aac0aafaSHiten Pandya.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
19aac0aafaSHiten Pandya.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
20aac0aafaSHiten Pandya.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
21aac0aafaSHiten Pandya.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
22aac0aafaSHiten Pandya.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
23aac0aafaSHiten Pandya.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
24aac0aafaSHiten Pandya.\" SUCH DAMAGE.
25aac0aafaSHiten Pandya.\"
26aac0aafaSHiten Pandya.\" $FreeBSD$
27aac0aafaSHiten Pandya.\"
2855aaf894SMarius Strobl.Dd September 30, 2007
29aac0aafaSHiten Pandya.Dt PCI 9
30aac0aafaSHiten Pandya.Os
31aac0aafaSHiten Pandya.Sh NAME
32aac0aafaSHiten Pandya.Nm pci ,
33aac0aafaSHiten Pandya.Nm pci_disable_busmaster ,
34aac0aafaSHiten Pandya.Nm pci_disable_io ,
35*0a9c80e5SJohn Baldwin.Nm pci_enable_busmaster ,
36*0a9c80e5SJohn Baldwin.Nm pci_enable_io ,
37aac0aafaSHiten Pandya.Nm pci_find_bsf ,
3855aaf894SMarius Strobl.Nm pci_find_dbsf ,
39*0a9c80e5SJohn Baldwin.Nm pci_find_device ,
40*0a9c80e5SJohn Baldwin.Nm pci_get_powerstate ,
41*0a9c80e5SJohn Baldwin.Nm pci_read_config ,
42*0a9c80e5SJohn Baldwin.Nm pci_restore_state ,
43*0a9c80e5SJohn Baldwin.Nm pci_save_state ,
44*0a9c80e5SJohn Baldwin.Nm pci_set_powerstate ,
45*0a9c80e5SJohn Baldwin.Nm pci_write_config
46aac0aafaSHiten Pandya.Nd PCI bus interface
47aac0aafaSHiten Pandya.Sh SYNOPSIS
48aac0aafaSHiten Pandya.In sys/bus.h
49aac0aafaSHiten Pandya.In dev/pci/pcivar.h
50aac0aafaSHiten Pandya.In dev/pci/pcireg.h
51aac0aafaSHiten Pandya.In machine/pci_cfgreg.h
52aac0aafaSHiten Pandya.Ft int
53aac0aafaSHiten Pandya.Fn pci_disable_busmaster "device_t dev"
54aac0aafaSHiten Pandya.Ft int
55aac0aafaSHiten Pandya.Fn pci_disable_io "device_t dev" "int space"
56aac0aafaSHiten Pandya.Ft int
57*0a9c80e5SJohn Baldwin.Fn pci_enable_busmaster "device_t dev"
58aac0aafaSHiten Pandya.Ft int
59*0a9c80e5SJohn Baldwin.Fn pci_enable_io "device_t dev" "int space"
60aac0aafaSHiten Pandya.Ft device_t
6165bb31b8SRuslan Ermilov.Fn pci_find_bsf "uint8_t bus" "uint8_t slot" "uint8_t func"
62aac0aafaSHiten Pandya.Ft device_t
6355aaf894SMarius Strobl.Fn pci_find_dbsf "uint32_t domain" "uint8_t bus" "uint8_t slot" "uint8_t func"
6455aaf894SMarius Strobl.Ft device_t
6565bb31b8SRuslan Ermilov.Fn pci_find_device "uint16_t vendor" "uint16_t device"
66*0a9c80e5SJohn Baldwin.Ft int
67*0a9c80e5SJohn Baldwin.Fn pci_get_powerstate "device_t dev"
68*0a9c80e5SJohn Baldwin.Ft uint32_t
69*0a9c80e5SJohn Baldwin.Fn pci_read_config "device_t dev" "int reg" "int width"
70*0a9c80e5SJohn Baldwin.Ft void
71*0a9c80e5SJohn Baldwin.Fn pci_restore_state "device_t dev"
72*0a9c80e5SJohn Baldwin.Ft void
73*0a9c80e5SJohn Baldwin.Fn pci_save_state "device_t dev"
74*0a9c80e5SJohn Baldwin.Ft int
75*0a9c80e5SJohn Baldwin.Fn pci_set_powerstate "device_t dev" "int state"
76*0a9c80e5SJohn Baldwin.Ft void
77*0a9c80e5SJohn Baldwin.Fn pci_write_config "device_t dev" "int reg" "uint32_t val" "int width"
78aac0aafaSHiten Pandya.Sh DESCRIPTION
79aac0aafaSHiten PandyaThe
80aac0aafaSHiten Pandya.Nm
81aac0aafaSHiten Pandyaset of functions are used for managing PCI devices.
82aac0aafaSHiten Pandya.Pp
83aac0aafaSHiten PandyaThe
84aac0aafaSHiten Pandya.Fn pci_read_config
85aac0aafaSHiten Pandyafunction is used to read data from the PCI configuration
86aac0aafaSHiten Pandyaspace of the device
87aac0aafaSHiten Pandya.Fa dev ,
88aac0aafaSHiten Pandyaat offset
89aac0aafaSHiten Pandya.Fa reg ,
90aac0aafaSHiten Pandyawith
91aac0aafaSHiten Pandya.Fa width
92aac0aafaSHiten Pandyaspecifying the size of the access.
93aac0aafaSHiten Pandya.Pp
94aac0aafaSHiten PandyaThe
95aac0aafaSHiten Pandya.Fn pci_write_config
96aac0aafaSHiten Pandyafunction is used to write the value
97aac0aafaSHiten Pandya.Fa val
98aac0aafaSHiten Pandyato the PCI configuration
99aac0aafaSHiten Pandyaspace of the device
100aac0aafaSHiten Pandya.Fa dev ,
101aac0aafaSHiten Pandyaat offset
102aac0aafaSHiten Pandya.Fa reg ,
103aac0aafaSHiten Pandyawith
104aac0aafaSHiten Pandya.Fa width
105aac0aafaSHiten Pandyaspecifying the size of the access.
106aac0aafaSHiten Pandya.Pp
107aac0aafaSHiten PandyaThe
108aac0aafaSHiten Pandya.Fn pci_enable_busmaster
109aac0aafaSHiten Pandyafunction enables PCI bus mastering for the device
110aac0aafaSHiten Pandya.Fa dev ,
111aac0aafaSHiten Pandyaby setting the
112aac0aafaSHiten Pandya.Dv PCIM_CMD_BUSMASTEREN
113aac0aafaSHiten Pandyabit in the
114aac0aafaSHiten Pandya.Dv PCIR_COMMAND
115aac0aafaSHiten Pandyaregister.
116aac0aafaSHiten PandyaThe
117aac0aafaSHiten Pandya.Fn pci_disable_busmaster
118aac0aafaSHiten Pandyafunction clears this bit.
119aac0aafaSHiten Pandya.Pp
120aac0aafaSHiten PandyaThe
121aac0aafaSHiten Pandya.Fn pci_enable_io
122aac0aafaSHiten Pandyafunction enables memory or I/O port address decoding for the device
123aac0aafaSHiten Pandya.Fa dev ,
124aac0aafaSHiten Pandyaby setting the
125aac0aafaSHiten Pandya.Dv PCIM_CMD_MEMEN
126aac0aafaSHiten Pandyaor
127aac0aafaSHiten Pandya.Dv PCIM_CMD_PORTEN
128aac0aafaSHiten Pandyabit in the
129aac0aafaSHiten Pandya.Dv PCIR_COMMAND
1305203edcdSRuslan Ermilovregister appropriately.
1315203edcdSRuslan ErmilovThe
132aac0aafaSHiten Pandya.Fn pci_disable_io
133aac0aafaSHiten Pandyafunction clears the appropriate bit.
134aac0aafaSHiten PandyaThe
13565bb31b8SRuslan Ermilov.Fa space
136aac0aafaSHiten Pandyaargument specifies which resource is affected; this can be either
137aac0aafaSHiten Pandya.Dv SYS_RES_MEMORY
138aac0aafaSHiten Pandyaor
139aac0aafaSHiten Pandya.Dv SYS_RES_IOPORT
140aac0aafaSHiten Pandyaas appropriate.
141aac0aafaSHiten Pandya.Pp
142aac0aafaSHiten Pandya.Em NOTE :
143aac0aafaSHiten PandyaThese functions should be used in preference to manually manipulating
144aac0aafaSHiten Pandyathe configuration space.
145aac0aafaSHiten Pandya.Pp
146aac0aafaSHiten PandyaThe
147aac0aafaSHiten Pandya.Fn pci_get_powerstate
148aac0aafaSHiten Pandyafunction returns the current ACPI power state of the device
149aac0aafaSHiten Pandya.Fa dev .
150aac0aafaSHiten PandyaIf the device does not support power management capabilities, then the default
151aac0aafaSHiten Pandyastate of
152aac0aafaSHiten Pandya.Dv PCI_POWERSTATE_D0
153aac0aafaSHiten Pandyais returned.
154aac0aafaSHiten PandyaThe following power states are defined by ACPI:
15565bb31b8SRuslan Ermilov.Bl -hang -width ".Dv PCI_POWERSTATE_UNKNOWN"
156aac0aafaSHiten Pandya.It Dv PCI_POWERSTATE_D0
157aac0aafaSHiten PandyaState in which device is on and running.
158aac0aafaSHiten PandyaIt is receiving full power from the system and delivering
159aac0aafaSHiten Pandyafull functionality to the user.
160aac0aafaSHiten Pandya.It Dv PCI_POWERSTATE_D1
161aac0aafaSHiten PandyaClass-specific low-power state in which device context may or
1625a2e3b61SDaniel Gerzomay not be lost.
16365bb31b8SRuslan ErmilovBusses in this state cannot do anything to the bus, to
1649817b894SBruce M Simpsonforce devices to lose context.
165aac0aafaSHiten Pandya.It Dv PCI_POWERSTATE_D2
166aac0aafaSHiten PandyaClass-specific low-power state in which device context may or
167aac0aafaSHiten Pandyamay not be lost.
168aac0aafaSHiten PandyaAttains greater power savings than
169aac0aafaSHiten Pandya.Dv PCI_POWERSTATE_D1 .
17065bb31b8SRuslan ErmilovBusses in this state can cause devices to lose some context.
171aac0aafaSHiten PandyaDevices
172aac0aafaSHiten Pandya.Em must
173aac0aafaSHiten Pandyabe prepared for the bus to be in this state or higher.
174aac0aafaSHiten Pandya.It Dv PCI_POWERSTATE_D3
175aac0aafaSHiten PandyaState in which the device is off and not running.
176aac0aafaSHiten PandyaDevice context is lost, and power from the device can
177aac0aafaSHiten Pandyabe removed.
178aac0aafaSHiten Pandya.It Dv PCI_POWERSTATE_UNKNOWN
179aac0aafaSHiten PandyaState of the device is unknown.
180aac0aafaSHiten Pandya.El
181aac0aafaSHiten Pandya.Pp
182aac0aafaSHiten PandyaThe
183aac0aafaSHiten Pandya.Fn pci_set_powerstate
184aac0aafaSHiten Pandyafunction is used to transition the device
185aac0aafaSHiten Pandya.Fa dev
186aac0aafaSHiten Pandyato the ACPI power state
187aac0aafaSHiten Pandya.Fa state .
188aac0aafaSHiten PandyaIt checks to see if the device is PCI 2.2 compliant.
189aac0aafaSHiten PandyaIf so, it checks the
190aac0aafaSHiten Pandyacapabilities pointer to determine which power states the device supports.
191aac0aafaSHiten PandyaIf the device does not have power management capabilities, the default state
192aac0aafaSHiten Pandyaof
193aac0aafaSHiten Pandya.Dv PCI_POWERSTATE_D0
194aac0aafaSHiten Pandyais set.
195aac0aafaSHiten Pandya.Pp
196aac0aafaSHiten PandyaThe
1979415d1e0SJohn Baldwin.Fn pci_save_state
1989415d1e0SJohn Baldwinand
1999415d1e0SJohn Baldwin.Fn pci_restore_state
2009415d1e0SJohn Baldwinfunctions can be used by a device driver to save and restore standard PCI
2019415d1e0SJohn Baldwinconfig registers.
2029415d1e0SJohn BaldwinThe
2039415d1e0SJohn Baldwin.Fn pci_save_state
2049415d1e0SJohn Baldwinfunction must be invoked while the device has valid state before
2059415d1e0SJohn Baldwin.Fn pci_restore_state
2069415d1e0SJohn Baldwincan be used.
2079415d1e0SJohn BaldwinIf the device is not in the fully-powered state
2089415d1e0SJohn Baldwin.Pq Dv PCI_POWERSTATE_D0
2099415d1e0SJohn Baldwinwhen
2109415d1e0SJohn Baldwin.Fn pci_restore_state
2119415d1e0SJohn Baldwinis invoked,
2129415d1e0SJohn Baldwinthen the device will be transitioned to
2139415d1e0SJohn Baldwin.Dv PCI_POWERSTATE_D0
2149415d1e0SJohn Baldwinbefore any config registers are restored.
2159415d1e0SJohn Baldwin.Pp
2169415d1e0SJohn BaldwinThe
217aac0aafaSHiten Pandya.Fn pci_find_bsf
218aac0aafaSHiten Pandyafunction looks up the
219aac0aafaSHiten Pandya.Vt device_t
220aac0aafaSHiten Pandyaof a PCI device, given its
221aac0aafaSHiten Pandya.Fa bus ,
222aac0aafaSHiten Pandya.Fa slot ,
223aac0aafaSHiten Pandyaand
22465bb31b8SRuslan Ermilov.Fa func .
225bf1639eeSBruce M SimpsonThe
226bf1639eeSBruce M Simpson.Fa slot
227bf1639eeSBruce M Simpsonnumber actually refers to the number of the device on the bus,
228bf1639eeSBruce M Simpsonwhich does not necessarily indicate its geographic location
229bf1639eeSBruce M Simpsonin terms of a physical slot.
23055aaf894SMarius StroblNote that in case the system has multiple PCI domains,
23155aaf894SMarius Stroblthe
23255aaf894SMarius Strobl.Fn pci_find_bsf
23355aaf894SMarius Stroblfunction only searches the first one.
23455aaf894SMarius StroblActually, it is equivalent to:
23555aaf894SMarius Strobl.Bd -literal -offset indent
23655aaf894SMarius Stroblpci_find_dbsf(0, bus, slot, func);
23755aaf894SMarius Strobl.Ed
23855aaf894SMarius Strobl.Pp
23955aaf894SMarius StroblThe
24055aaf894SMarius Strobl.Fn pci_find_dbsf
24155aaf894SMarius Stroblfunction looks up the
24255aaf894SMarius Strobl.Vt device_t
24355aaf894SMarius Stroblof a PCI device, given its
24455aaf894SMarius Strobl.Fa domain ,
24555aaf894SMarius Strobl.Fa bus ,
24655aaf894SMarius Strobl.Fa slot ,
24755aaf894SMarius Strobland
24855aaf894SMarius Strobl.Fa func .
24955aaf894SMarius StroblThe
25055aaf894SMarius Strobl.Fa slot
25155aaf894SMarius Stroblnumber actually refers to the number of the device on the bus,
25255aaf894SMarius Stroblwhich does not necessarily indicate its geographic location
25355aaf894SMarius Stroblin terms of a physical slot.
254aac0aafaSHiten Pandya.Pp
255aac0aafaSHiten PandyaThe
256aac0aafaSHiten Pandya.Fn pci_find_device
257aac0aafaSHiten Pandyafunction looks up the
258aac0aafaSHiten Pandya.Vt device_t
259aac0aafaSHiten Pandyaof a PCI device, given its
260aac0aafaSHiten Pandya.Fa vendor
261aac0aafaSHiten Pandyaand
262aac0aafaSHiten Pandya.Fa device
2635203edcdSRuslan ErmilovIDs.
2645203edcdSRuslan ErmilovNote that there can be multiple matches for this search; this function
265aac0aafaSHiten Pandyaonly returns the first matching device.
266aac0aafaSHiten Pandya.Sh IMPLEMENTATION NOTES
267aac0aafaSHiten PandyaThe
268aac0aafaSHiten Pandya.Vt pci_addr_t
26965bb31b8SRuslan Ermilovtype varies according to the size of the PCI bus address
270aac0aafaSHiten Pandyaspace on the target architecture.
271aac0aafaSHiten Pandya.Sh SEE ALSO
2727c2c06f2SSheldon Hearn.Xr pci 4 ,
2737c2c06f2SSheldon Hearn.Xr pciconf 8 ,
274aac0aafaSHiten Pandya.Xr bus_alloc_resource 9 ,
275aac0aafaSHiten Pandya.Xr bus_dma 9 ,
276aac0aafaSHiten Pandya.Xr bus_release_resource 9 ,
277aac0aafaSHiten Pandya.Xr bus_setup_intr 9 ,
278aac0aafaSHiten Pandya.Xr bus_teardown_intr 9 ,
279aac0aafaSHiten Pandya.Xr devclass 9 ,
280aac0aafaSHiten Pandya.Xr device 9 ,
281aac0aafaSHiten Pandya.Xr driver 9 ,
282aac0aafaSHiten Pandya.Xr rman 9
283aac0aafaSHiten Pandya.Rs
284aac0aafaSHiten Pandya.%B FreeBSD Developers' Handbook
285aac0aafaSHiten Pandya.%T NewBus
286aa4a335bSRuslan Ermilov.%U http://www.FreeBSD.org/doc/en_US.ISO8859-1/books/developers-handbook/
287aac0aafaSHiten Pandya.Re
288aac0aafaSHiten Pandya.Rs
289aac0aafaSHiten Pandya.%A Shanley
290aac0aafaSHiten Pandya.%A Anderson
291aac0aafaSHiten Pandya.%B PCI System Architecture
292aac0aafaSHiten Pandya.%N 2nd Edition
293aac0aafaSHiten Pandya.%I Addison-Wesley
294aac0aafaSHiten Pandya.%O ISBN 0-201-30974-2
295aac0aafaSHiten Pandya.Re
296aac0aafaSHiten Pandya.Sh AUTHORS
297571dba6eSHiten PandyaThis manual page was written by
298bf1639eeSBruce M Simpson.An Bruce M Simpson Aq bms@FreeBSD.org .
299aac0aafaSHiten Pandya.Sh BUGS
3004d80f750SBruce M SimpsonThe kernel PCI code has a number of references to
3014d80f750SBruce M Simpson.Dq "slot numbers" .
302bf1639eeSBruce M SimpsonThese do not refer to the geographic location of PCI devices,
303bf1639eeSBruce M Simpsonbut to the device number assigned by the combination of the PCI IDSEL
304bf1639eeSBruce M Simpsonmechanism and the platform firmware.
305bf1639eeSBruce M SimpsonThis should be taken note of when working with the kernel PCI code.
306