FreeBSD kernel amd64 PCI device code
pci_if.m
Go to the documentation of this file.
1#-
2# Copyright (c) 1998 Doug Rabson
3# All rights reserved.
4#
5# Redistribution and use in source and binary forms, with or without
6# modification, are permitted provided that the following conditions
7# are met:
8# 1. Redistributions of source code must retain the above copyright
9# notice, this list of conditions and the following disclaimer.
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
29#include <sys/bus.h>
30#include <dev/pci/pcivar.h>
31
32INTERFACE pci;
33
35 static int
36 null_msi_count(device_t dev, device_t child)
37 {
38 return (0);
39 }
40
41 static int
42 null_msix_bar(device_t dev, device_t child)
43 {
44 return (-1);
45 }
46
47 static device_t
48 null_create_iov_child(device_t bus, device_t pf, uint16_t rid,
49 uint16_t vid, uint16_t did)
50 {
51 device_printf(bus, "PCI_IOV not implemented on this bus.\n");
52 return (NULL);
53 }
54};
55
57 struct nvlist;
58
62 };
63
65 PCI_FEATURE_HP, /* Hot Plug feature */
66 PCI_FEATURE_AER, /* Advanced Error Reporting */
67 };
68}
69
70
71METHOD u_int32_t read_config {
72 device_t dev;
73 device_t child;
74 int reg;
75 int width;
76};
77
78METHOD void write_config {
79 device_t dev;
80 device_t child;
81 int reg;
82 u_int32_t val;
83 int width;
84};
85
86METHOD int get_powerstate {
87 device_t dev;
88 device_t child;
89};
90
91METHOD int set_powerstate {
92 device_t dev;
93 device_t child;
94 int state;
95};
96
97METHOD int get_vpd_ident {
98 device_t dev;
99 device_t child;
100 const char **identptr;
101};
102
104 device_t dev;
105 device_t child;
106 const char *kw;
107 const char **vptr;
108};
109
111 device_t dev;
112 device_t child;
113};
114
116 device_t dev;
117 device_t child;
118};
119
120METHOD int enable_io {
121 device_t dev;
122 device_t child;
123 int space;
124};
125
126METHOD int disable_io {
127 device_t dev;
128 device_t child;
129 int space;
130};
131
133 device_t dev;
134 device_t child;
135};
136
137METHOD int find_cap {
138 device_t dev;
139 device_t child;
141 int *capreg;
142};
143
144METHOD int find_next_cap {
145 device_t dev;
146 device_t child;
147 int capability;
148 int start;
149 int *capreg;
150};
151
152METHOD int find_extcap {
153 device_t dev;
154 device_t child;
155 int capability;
156 int *capreg;
157};
158
160 device_t dev;
161 device_t child;
162 int capability;
163 int start;
164 int *capreg;
165};
166
167METHOD int find_htcap {
168 device_t dev;
169 device_t child;
170 int capability;
171 int *capreg;
172};
173
174METHOD int find_next_htcap {
175 device_t dev;
176 device_t child;
177 int capability;
178 int start;
179 int *capreg;
180};
181
182METHOD int alloc_msi {
183 device_t dev;
184 device_t child;
185 int *count;
186};
187
188METHOD int alloc_msix {
189 device_t dev;
190 device_t child;
191 int *count;
192};
193
194METHOD void enable_msi {
195 device_t dev;
196 device_t child;
197 uint64_t address;
198 uint16_t data;
199};
200
201METHOD void enable_msix {
202 device_t dev;
203 device_t child;
204 u_int index;
205 uint64_t address;
206 uint32_t data;
207};
208
209METHOD void disable_msi {
210 device_t dev;
211 device_t child;
212};
213
214METHOD int remap_msix {
215 device_t dev;
216 device_t child;
217 int count;
218 const u_int *vectors;
219};
220
221METHOD int release_msi {
222 device_t dev;
223 device_t child;
224};
225
226METHOD int msi_count {
227 device_t dev;
228 device_t child;
230
231METHOD int msix_count {
232 device_t dev;
233 device_t child;
234} DEFAULT null_msi_count;
235
236METHOD int msix_pba_bar {
237 device_t dev;
238 device_t child;
240
241METHOD int msix_table_bar {
242 device_t dev;
243 device_t child;
244} DEFAULT null_msix_bar;
245
246METHOD int get_id {
247 device_t dev;
248 device_t child;
250 uintptr_t *id;
251};
252
253METHOD struct pci_devinfo * alloc_devinfo {
254 device_t dev;
255};
256
257METHOD void child_added {
258 device_t dev;
259 device_t child;
260};
261
262METHOD int iov_attach {
263 device_t dev;
264 device_t child;
265 struct nvlist *pf_schema;
266 struct nvlist *vf_schema;
267 const char *name;
268};
269
270METHOD int iov_detach {
271 device_t dev;
272 device_t child;
273};
274
275METHOD device_t create_iov_child {
276 device_t bus;
277 device_t pf;
278 uint16_t rid;
279 uint16_t vid;
280 uint16_t did;
METHOD int msi_count
Definition: pci_if.m:226
METHOD int set_powerstate
Definition: pci_if.m:91
METHOD int get_powerstate
Definition: pci_if.m:86
METHOD int find_next_htcap
Definition: pci_if.m:174
METHOD int enable_busmaster
Definition: pci_if.m:110
METHOD int find_htcap
Definition: pci_if.m:167
pci_feature
Definition: pci_if.m:64
@ PCI_FEATURE_AER
Definition: pci_if.m:66
@ PCI_FEATURE_HP
Definition: pci_if.m:65
METHOD int alloc_msi
Definition: pci_if.m:182
uint16_t data
Definition: pci_if.m:198
u_int index
Definition: pci_if.m:204
METHOD void write_config
Definition: pci_if.m:78
int width
Definition: pci_if.m:75
METHOD int find_extcap
Definition: pci_if.m:152
METHOD u_int32_t read_config
Definition: pci_if.m:71
METHOD int remap_msix
Definition: pci_if.m:214
METHOD int assign_interrupt
Definition: pci_if.m:132
DEFAULT null_msi_count
Definition: pci_if.m:229
int start
Definition: pci_if.m:148
METHOD int alloc_msix
Definition: pci_if.m:188
METHOD void enable_msix
Definition: pci_if.m:201
device_t child
Definition: pci_if.m:73
METHOD device_t create_iov_child
Definition: pci_if.m:275
const char ** identptr
Definition: pci_if.m:100
METHOD int release_msi
Definition: pci_if.m:221
INTERFACE pci
Definition: pci_if.m:32
METHOD int disable_io
Definition: pci_if.m:126
const u_int * vectors
Definition: pci_if.m:218
METHOD int find_next_cap
Definition: pci_if.m:144
const char * kw
Definition: pci_if.m:106
HEADER
Definition: pci_if.m:56
device_t pf
Definition: pci_if.m:277
enum pci_id_type type
Definition: pci_if.m:249
METHOD int get_vpd_readonly
Definition: pci_if.m:103
METHOD int enable_io
Definition: pci_if.m:120
uint16_t rid
Definition: pci_if.m:278
METHOD int disable_busmaster
Definition: pci_if.m:115
METHOD int find_cap
Definition: pci_if.m:137
int state
Definition: pci_if.m:94
const char * name
Definition: pci_if.m:267
u_int32_t val
Definition: pci_if.m:82
uintptr_t * id
Definition: pci_if.m:250
struct nvlist * vf_schema
Definition: pci_if.m:266
int reg
Definition: pci_if.m:74
METHOD struct pci_devinfo * alloc_devinfo
Definition: pci_if.m:253
METHOD void disable_msi
Definition: pci_if.m:209
uint16_t vid
Definition: pci_if.m:279
METHOD int get_vpd_ident
Definition: pci_if.m:97
int space
Definition: pci_if.m:123
CODE
Definition: pci_if.m:34
struct nvlist * pf_schema
Definition: pci_if.m:265
uint64_t address
Definition: pci_if.m:197
DEFAULT null_msix_bar
Definition: pci_if.m:239
const char ** vptr
Definition: pci_if.m:107
uint16_t did
Definition: pci_if.m:280
METHOD int msix_table_bar
Definition: pci_if.m:241
int * count
Definition: pci_if.m:185
METHOD int iov_attach
Definition: pci_if.m:262
int * capreg
Definition: pci_if.m:141
METHOD void enable_msi
Definition: pci_if.m:194
pci_id_type
Definition: pci_if.m:59
@ PCI_ID_RID
Definition: pci_if.m:60
@ PCI_ID_MSI
Definition: pci_if.m:61
METHOD int iov_detach
Definition: pci_if.m:270
DEFAULT null_create_iov_child
Definition: pci_if.m:281
METHOD int find_next_extcap
Definition: pci_if.m:159
METHOD void child_added
Definition: pci_if.m:257
METHOD int msix_count
Definition: pci_if.m:231
METHOD int msix_pba_bar
Definition: pci_if.m:236
int capability
Definition: pci_if.m:140
METHOD int get_id
Definition: pci_if.m:246
u_int bus
Definition: pcib_if.m:79
device_t dev
Definition: pcib_if.m:109