FreeBSD kernel amd64 PCI device code
pci_private.h
Go to the documentation of this file.
1/*-
2 * SPDX-License-Identifier: BSD-2-Clause-FreeBSD
3 *
4 * Copyright (c) 1997, Stefan Esser <se@freebsd.org>
5 * Copyright (c) 2000, Michael Smith <msmith@freebsd.org>
6 * Copyright (c) 2000, BSDi
7 * All rights reserved.
8 *
9 * Redistribution and use in source and binary forms, with or without
10 * modification, are permitted provided that the following conditions
11 * are met:
12 * 1. Redistributions of source code must retain the above copyright
13 * notice unmodified, this list of conditions, and the following
14 * disclaimer.
15 * 2. Redistributions in binary form must reproduce the above copyright
16 * notice, this list of conditions and the following disclaimer in the
17 * documentation and/or other materials provided with the distribution.
18 *
19 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
20 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
21 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
22 * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
23 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
24 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
25 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
26 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
27 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
28 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29 *
30 * $FreeBSD$
31 *
32 */
33
34#ifndef _PCI_PRIVATE_H_
35#define _PCI_PRIVATE_H_
36
37/*
38 * Export definitions of the pci bus so that we can more easily share
39 * it with "subclass" buses.
40 */
41DECLARE_CLASS(pci_driver);
42
43struct pci_softc {
44 bus_dma_tag_t sc_dma_tag;
45#ifdef PCI_RES_BUS
46 struct resource *sc_bus;
47#endif
48};
49
50extern int pci_do_power_resume;
51extern int pci_do_power_suspend;
52
53void pci_add_children(device_t dev, int domain, int busno);
54void pci_add_child(device_t bus, struct pci_devinfo *dinfo);
55device_t pci_add_iov_child(device_t bus, device_t pf, uint16_t rid,
56 uint16_t vid, uint16_t did);
57void pci_add_resources(device_t bus, device_t dev, int force,
58 uint32_t prefetchmask);
59void pci_add_resources_ea(device_t bus, device_t dev, int alloc_iov);
60struct pci_devinfo *pci_alloc_devinfo_method(device_t dev);
61int pci_attach(device_t dev);
62int pci_attach_common(device_t dev);
63int pci_detach(device_t dev);
64int pci_rescan_method(device_t dev);
65void pci_driver_added(device_t dev, driver_t *driver);
66int pci_ea_is_enabled(device_t dev, int rid);
67int pci_print_child(device_t dev, device_t child);
68void pci_probe_nomatch(device_t dev, device_t child);
69int pci_read_ivar(device_t dev, device_t child, int which,
70 uintptr_t *result);
71int pci_write_ivar(device_t dev, device_t child, int which,
72 uintptr_t value);
73int pci_setup_intr(device_t dev, device_t child,
74 struct resource *irq, int flags, driver_filter_t *filter,
75 driver_intr_t *intr, void *arg, void **cookiep);
76int pci_teardown_intr(device_t dev, device_t child,
77 struct resource *irq, void *cookie);
78int pci_get_vpd_ident_method(device_t dev, device_t child,
79 const char **identptr);
80int pci_get_vpd_readonly_method(device_t dev, device_t child,
81 const char *kw, const char **vptr);
82int pci_set_powerstate_method(device_t dev, device_t child,
83 int state);
84int pci_get_powerstate_method(device_t dev, device_t child);
85uint32_t pci_read_config_method(device_t dev, device_t child,
86 int reg, int width);
87void pci_write_config_method(device_t dev, device_t child,
88 int reg, uint32_t val, int width);
89int pci_enable_busmaster_method(device_t dev, device_t child);
90int pci_disable_busmaster_method(device_t dev, device_t child);
91int pci_enable_io_method(device_t dev, device_t child, int space);
92int pci_disable_io_method(device_t dev, device_t child, int space);
93int pci_find_cap_method(device_t dev, device_t child,
94 int capability, int *capreg);
95int pci_find_next_cap_method(device_t dev, device_t child,
96 int capability, int start, int *capreg);
97int pci_find_extcap_method(device_t dev, device_t child,
98 int capability, int *capreg);
99int pci_find_next_extcap_method(device_t dev, device_t child,
100 int capability, int start, int *capreg);
101int pci_find_htcap_method(device_t dev, device_t child,
102 int capability, int *capreg);
103int pci_find_next_htcap_method(device_t dev, device_t child,
104 int capability, int start, int *capreg);
105int pci_alloc_msi_method(device_t dev, device_t child, int *count);
106int pci_alloc_msix_method(device_t dev, device_t child, int *count);
107void pci_enable_msi_method(device_t dev, device_t child,
108 uint64_t address, uint16_t data);
109void pci_enable_msix_method(device_t dev, device_t child,
110 u_int index, uint64_t address, uint32_t data);
111void pci_disable_msi_method(device_t dev, device_t child);
112int pci_remap_msix_method(device_t dev, device_t child,
113 int count, const u_int *vectors);
114int pci_release_msi_method(device_t dev, device_t child);
115int pci_msi_count_method(device_t dev, device_t child);
116int pci_msix_count_method(device_t dev, device_t child);
117int pci_msix_pba_bar_method(device_t dev, device_t child);
118int pci_msix_table_bar_method(device_t dev, device_t child);
119struct resource *pci_alloc_resource(device_t dev, device_t child,
120 int type, int *rid, rman_res_t start, rman_res_t end,
121 rman_res_t count, u_int flags);
122int pci_release_resource(device_t dev, device_t child, int type,
123 int rid, struct resource *r);
124int pci_activate_resource(device_t dev, device_t child, int type,
125 int rid, struct resource *r);
126int pci_deactivate_resource(device_t dev, device_t child, int type,
127 int rid, struct resource *r);
128void pci_delete_resource(device_t dev, device_t child,
129 int type, int rid);
130struct resource_list *pci_get_resource_list (device_t dev, device_t child);
131struct pci_devinfo *pci_read_device(device_t pcib, device_t bus, int d, int b,
132 int s, int f);
133void pci_print_verbose(struct pci_devinfo *dinfo);
134int pci_freecfg(struct pci_devinfo *dinfo);
135void pci_child_deleted(device_t dev, device_t child);
136void pci_child_detached(device_t dev, device_t child);
137int pci_child_location_method(device_t cbdev, device_t child,
138 struct sbuf *sb);
139int pci_child_pnpinfo_method(device_t cbdev, device_t child,
140 struct sbuf *sb);
141int pci_get_device_path_method(device_t dev, device_t child,
142 const char *locator, struct sbuf *sb);
143int pci_assign_interrupt_method(device_t dev, device_t child);
144int pci_resume(device_t dev);
145int pci_resume_child(device_t dev, device_t child);
146int pci_suspend_child(device_t dev, device_t child);
147bus_dma_tag_t pci_get_dma_tag(device_t bus, device_t dev);
148void pci_child_added_method(device_t dev, device_t child);
149
155void pci_cfg_restore(device_t, struct pci_devinfo *);
156
160void pci_cfg_save(device_t, struct pci_devinfo *, int);
161
162int pci_mapsize(uint64_t testval);
163void pci_read_bar(device_t dev, int reg, pci_addr_t *mapp,
164 pci_addr_t *testvalp, int *bar64);
165struct pci_map *pci_add_bar(device_t dev, int reg, pci_addr_t value,
166 pci_addr_t size);
167
168struct resource *pci_reserve_map(device_t dev, device_t child, int type,
169 int *rid, rman_res_t start, rman_res_t end,
170 rman_res_t count, u_int num, u_int flags);
171
172struct resource *pci_alloc_multi_resource(device_t dev, device_t child,
173 int type, int *rid, rman_res_t start, rman_res_t end,
174 rman_res_t count, u_long num, u_int flags);
175
176int pci_iov_attach_method(device_t bus, device_t dev,
177 struct nvlist *pf_schema, struct nvlist *vf_schema,
178 const char *name);
179int pci_iov_detach_method(device_t bus, device_t dev);
180
181device_t pci_create_iov_child_method(device_t bus, device_t pf,
182 uint16_t rid, uint16_t vid, uint16_t did);
183
184struct resource *pci_vf_alloc_mem_resource(device_t dev, device_t child,
185 int *rid, rman_res_t start, rman_res_t end,
186 rman_res_t count, u_int flags);
187int pci_vf_release_mem_resource(device_t dev, device_t child,
188 int rid, struct resource *r);
189#endif /* _PCI_PRIVATE_H_ */
u_int reg
Definition: pci_dw_if.m:42
int width
Definition: pci_dw_if.m:43
bool start
Definition: pci_dw_if.m:64
uint32_t value
Definition: pci_dw_if.m:55
uint16_t data
Definition: pci_if.m:198
u_int index
Definition: pci_if.m:204
device_t child
Definition: pci_if.m:73
const char ** identptr
Definition: pci_if.m:100
const u_int * vectors
Definition: pci_if.m:218
const char * kw
Definition: pci_if.m:106
device_t pf
Definition: pci_if.m:277
enum pci_id_type type
Definition: pci_if.m:249
uint16_t rid
Definition: pci_if.m:278
int state
Definition: pci_if.m:94
const char * name
Definition: pci_if.m:267
u_int32_t val
Definition: pci_if.m:82
struct nvlist * vf_schema
Definition: pci_if.m:266
uint16_t vid
Definition: pci_if.m:279
int space
Definition: pci_if.m:123
struct nvlist * pf_schema
Definition: pci_if.m:265
uint64_t address
Definition: pci_if.m:197
const char ** vptr
Definition: pci_if.m:107
uint16_t did
Definition: pci_if.m:280
int * count
Definition: pci_if.m:185
int * capreg
Definition: pci_if.m:141
int capability
Definition: pci_if.m:140
struct resource * pci_reserve_map(device_t dev, device_t child, int type, int *rid, rman_res_t start, rman_res_t end, rman_res_t count, u_int num, u_int flags)
Definition: pci.c:5421
int pci_remap_msix_method(device_t dev, device_t child, int count, const u_int *vectors)
Definition: pci.c:1982
void pci_child_deleted(device_t dev, device_t child)
Definition: pci.c:5743
void pci_probe_nomatch(device_t dev, device_t child)
Definition: pci.c:5037
int pci_detach(device_t dev)
Definition: pci.c:4517
int pci_msix_count_method(device_t dev, device_t child)
Definition: pci.c:2157
int pci_teardown_intr(device_t dev, device_t child, struct resource *irq, void *cookie)
Definition: pci.c:4853
void pci_enable_msix_method(device_t dev, device_t child, u_int index, uint64_t address, uint32_t data)
Definition: pci.c:1690
struct pci_devinfo * pci_alloc_devinfo_method(device_t dev)
Definition: pci.c:695
int pci_ea_is_enabled(device_t dev, int rid)
Definition: pci.c:3904
int pci_activate_resource(device_t dev, device_t child, int type, int rid, struct resource *r)
Definition: pci.c:5694
void pci_enable_msi_method(device_t dev, device_t child, uint64_t address, uint16_t data)
Definition: pci.c:2347
int pci_do_power_suspend
Definition: pci.c:369
void pci_print_verbose(struct pci_devinfo *dinfo)
Definition: pci.c:2995
int pci_do_power_resume
Definition: pci.c:364
int pci_write_ivar(device_t dev, device_t child, int which, uintptr_t value)
Definition: pci.c:5339
int pci_release_resource(device_t dev, device_t child, int type, int rid, struct resource *r)
Definition: pci.c:5643
int pci_iov_detach_method(device_t bus, device_t dev)
Definition: pci_iov.c:190
int pci_find_cap_method(device_t dev, device_t child, int capability, int *capreg)
Definition: pci.c:1526
int pci_release_msi_method(device_t dev, device_t child)
Definition: pci.c:2706
int pci_find_next_extcap_method(device_t dev, device_t child, int capability, int start, int *capreg)
Definition: pci.c:1643
struct resource * pci_vf_alloc_mem_resource(device_t dev, device_t child, int *rid, rman_res_t start, rman_res_t end, rman_res_t count, u_int flags)
Definition: pci_iov.c:998
void pci_cfg_restore(device_t, struct pci_devinfo *)
Definition: pci.c:6075
int pci_alloc_msix_method(device_t dev, device_t child, int *count)
Definition: pci.c:1808
int pci_resume(device_t dev)
Definition: pci.c:4657
int pci_attach(device_t dev)
Definition: pci.c:4496
void pci_child_added_method(device_t dev, device_t child)
Definition: pci.c:4452
void pci_add_resources(device_t bus, device_t dev, int force, uint32_t prefetchmask)
Definition: pci.c:4038
uint32_t pci_read_config_method(device_t dev, device_t child, int reg, int width)
Definition: pci.c:5851
int pci_enable_busmaster_method(device_t dev, device_t child)
Definition: pci.c:2938
struct resource_list * pci_get_resource_list(device_t dev, device_t child)
Definition: pci.c:5815
void pci_delete_resource(device_t dev, device_t child, int type, int rid)
Definition: pci.c:5785
int pci_assign_interrupt_method(device_t dev, device_t child)
Definition: pci.c:5946
int pci_iov_attach_method(device_t bus, device_t dev, struct nvlist *pf_schema, struct nvlist *vf_schema, const char *name)
int pci_mapsize(uint64_t testval)
Definition: pci.c:561
int pci_child_pnpinfo_method(device_t cbdev, device_t child, struct sbuf *sb)
Definition: pci.c:5913
struct resource * pci_alloc_resource(device_t dev, device_t child, int type, int *rid, rman_res_t start, rman_res_t end, rman_res_t count, u_int flags)
Definition: pci.c:5611
int pci_vf_release_mem_resource(device_t dev, device_t child, int rid, struct resource *r)
Definition: pci_iov.c:1061
int pci_setup_intr(device_t dev, device_t child, struct resource *irq, int flags, driver_filter_t *filter, driver_intr_t *intr, void *arg, void **cookiep)
Definition: pci.c:4745
struct resource * pci_alloc_multi_resource(device_t dev, device_t child, int type, int *rid, rman_res_t start, rman_res_t end, rman_res_t count, u_long num, u_int flags)
Definition: pci.c:5535
int pci_print_child(device_t dev, device_t child)
Definition: pci.c:4912
int pci_msi_count_method(device_t dev, device_t child)
Definition: pci.c:2760
int pci_enable_io_method(device_t dev, device_t child, int space)
Definition: pci.c:2952
int pci_find_next_htcap_method(device_t dev, device_t child, int capability, int start, int *capreg)
Definition: pci.c:1485
void pci_child_detached(device_t dev, device_t child)
Definition: pci.c:5084
void pci_disable_msi_method(device_t dev, device_t child)
Definition: pci.c:2375
int pci_get_powerstate_method(device_t dev, device_t child)
Definition: pci.c:2880
void pci_add_children(device_t dev, int domain, int busno)
Definition: pci.c:4144
int pci_deactivate_resource(device_t dev, device_t child, int type, int rid, struct resource *r)
Definition: pci.c:5722
int pci_msix_table_bar_method(device_t dev, device_t child)
Definition: pci.c:2179
device_t pci_create_iov_child_method(device_t bus, device_t pf, uint16_t rid, uint16_t vid, uint16_t did)
int pci_msix_pba_bar_method(device_t dev, device_t child)
Definition: pci.c:2168
int pci_freecfg(struct pci_devinfo *dinfo)
Definition: pci.c:2773
int pci_find_extcap_method(device_t dev, device_t child, int capability, int *capreg)
Definition: pci.c:1606
int pci_resume_child(device_t dev, device_t child)
Definition: pci.c:4628
int pci_disable_busmaster_method(device_t dev, device_t child)
Definition: pci.c:2945
void pci_add_child(device_t bus, struct pci_devinfo *dinfo)
Definition: pci.c:4431
int pci_get_vpd_ident_method(device_t dev, device_t child, const char **identptr)
Definition: pci.c:1390
device_t pci_add_iov_child(device_t bus, device_t pf, uint16_t rid, uint16_t vid, uint16_t did)
int pci_rescan_method(device_t dev)
Definition: pci.c:4191
void pci_cfg_save(device_t, struct pci_devinfo *, int)
Definition: pci.c:6195
bus_dma_tag_t pci_get_dma_tag(device_t bus, device_t dev)
Definition: pci.c:5842
void pci_add_resources_ea(device_t bus, device_t dev, int alloc_iov)
Definition: pci.c:3920
int pci_attach_common(device_t dev)
Definition: pci.c:4468
struct pci_map * pci_add_bar(device_t dev, int reg, pci_addr_t value, pci_addr_t size)
Definition: pci.c:3203
void pci_write_config_method(device_t dev, device_t child, int reg, uint32_t val, int width)
Definition: pci.c:5892
struct pci_devinfo * pci_read_device(device_t pcib, device_t bus, int d, int b, int s, int f)
Definition: pci.c:680
int pci_get_vpd_readonly_method(device_t dev, device_t child, const char *kw, const char **vptr)
Definition: pci.c:1407
DECLARE_CLASS(pci_driver)
int pci_alloc_msi_method(device_t dev, device_t child, int *count)
Definition: pci.c:2587
int pci_disable_io_method(device_t dev, device_t child, int space)
Definition: pci.c:2971
void pci_driver_added(device_t dev, driver_t *driver)
Definition: pci.c:4716
int pci_get_device_path_method(device_t dev, device_t child, const char *locator, struct sbuf *sb)
Definition: pci.c:5928
int pci_find_next_cap_method(device_t dev, device_t child, int capability, int start, int *capreg)
Definition: pci.c:1579
int pci_find_htcap_method(device_t dev, device_t child, int capability, int *capreg)
Definition: pci.c:1445
void pci_read_bar(device_t dev, int reg, pci_addr_t *mapp, pci_addr_t *testvalp, int *bar64)
Definition: pci.c:3064
int pci_child_location_method(device_t cbdev, device_t child, struct sbuf *sb)
Definition: pci.c:5903
int pci_suspend_child(device_t dev, device_t child)
Definition: pci.c:4589
int pci_read_ivar(device_t dev, device_t child, int which, uintptr_t *result)
Definition: pci.c:5248
int pci_set_powerstate_method(device_t dev, device_t child, int state)
Definition: pci.c:2808
u_int bus
Definition: pcib_if.m:79
device_t dev
Definition: pcib_if.m:109
INTERFACE pcib
Definition: pcib_if.m:34
int * irq
Definition: pcib_if.m:145
uint64_t pci_addr_t
Definition: pcivar.h:42
Definition: pcivar.h:61
bus_dma_tag_t sc_dma_tag
Definition: pci_private.h:44