pci_stub.c revision 1.8 1 1.1 dyoung #include <sys/cdefs.h>
2 1.8 jdolecek __KERNEL_RCSID(0, "$NetBSD: pci_stub.c,v 1.8 2018/06/24 11:51:15 jdolecek Exp $");
3 1.1 dyoung
4 1.3 pooka #ifdef _KERNEL_OPT
5 1.1 dyoung #include "opt_pci.h"
6 1.3 pooka #endif
7 1.1 dyoung
8 1.1 dyoung #include <sys/param.h>
9 1.1 dyoung #include <sys/systm.h>
10 1.4 knakahar #include <sys/kmem.h>
11 1.1 dyoung
12 1.1 dyoung #include <dev/pci/pcireg.h>
13 1.1 dyoung #include <dev/pci/pcivar.h>
14 1.1 dyoung #include <dev/pci/pcidevs.h>
15 1.1 dyoung
16 1.1 dyoung int default_pci_bus_devorder(pci_chipset_tag_t, int, uint8_t *, int);
17 1.1 dyoung int default_pci_chipset_tag_create(pci_chipset_tag_t, uint64_t,
18 1.1 dyoung const struct pci_overrides *, void *, pci_chipset_tag_t *);
19 1.1 dyoung void default_pci_chipset_tag_destroy(pci_chipset_tag_t);
20 1.8 jdolecek void *default_pci_intr_establish_xname(pci_chipset_tag_t, pci_intr_handle_t,
21 1.8 jdolecek int, int (*)(void *), void *, const char *);
22 1.1 dyoung
23 1.1 dyoung __strict_weak_alias(pci_bus_devorder, default_pci_bus_devorder);
24 1.1 dyoung __strict_weak_alias(pci_chipset_tag_create, default_pci_chipset_tag_create);
25 1.1 dyoung __strict_weak_alias(pci_chipset_tag_destroy, default_pci_chipset_tag_destroy);
26 1.8 jdolecek __strict_weak_alias(pci_intr_establish_xname,
27 1.8 jdolecek default_pci_intr_establish_xname);
28 1.1 dyoung
29 1.1 dyoung int
30 1.1 dyoung default_pci_bus_devorder(pci_chipset_tag_t pc, int bus, uint8_t *devs,
31 1.1 dyoung int maxdevs)
32 1.1 dyoung {
33 1.1 dyoung int i, n;
34 1.1 dyoung
35 1.1 dyoung n = MIN(pci_bus_maxdevs(pc, bus), maxdevs);
36 1.1 dyoung for (i = 0; i < n; i++)
37 1.1 dyoung devs[i] = i;
38 1.1 dyoung
39 1.1 dyoung return n;
40 1.1 dyoung }
41 1.1 dyoung
42 1.1 dyoung void
43 1.1 dyoung default_pci_chipset_tag_destroy(pci_chipset_tag_t pc)
44 1.1 dyoung {
45 1.1 dyoung }
46 1.1 dyoung
47 1.1 dyoung int
48 1.1 dyoung default_pci_chipset_tag_create(pci_chipset_tag_t opc, const uint64_t present,
49 1.1 dyoung const struct pci_overrides *ov, void *ctx, pci_chipset_tag_t *pcp)
50 1.1 dyoung {
51 1.1 dyoung return EOPNOTSUPP;
52 1.1 dyoung }
53 1.2 knakahar
54 1.8 jdolecek void *
55 1.8 jdolecek default_pci_intr_establish_xname(pci_chipset_tag_t pc, pci_intr_handle_t ih,
56 1.8 jdolecek int level, int (*func)(void *), void *arg, const char *__nouse)
57 1.8 jdolecek {
58 1.8 jdolecek
59 1.8 jdolecek return pci_intr_establish(pc, ih, level, func, arg);
60 1.8 jdolecek }
61 1.8 jdolecek
62 1.6 knakahar #ifndef __HAVE_PCI_MSI_MSIX
63 1.4 knakahar pci_intr_type_t
64 1.6 knakahar pci_intr_type(pci_chipset_tag_t pc, pci_intr_handle_t ih)
65 1.4 knakahar {
66 1.4 knakahar
67 1.4 knakahar return PCI_INTR_TYPE_INTX;
68 1.4 knakahar }
69 1.4 knakahar
70 1.4 knakahar int
71 1.6 knakahar pci_intr_alloc(const struct pci_attach_args *pa, pci_intr_handle_t **ihps,
72 1.6 knakahar int *counts, pci_intr_type_t max_type)
73 1.4 knakahar {
74 1.4 knakahar
75 1.4 knakahar if (counts != NULL && counts[PCI_INTR_TYPE_INTX] == 0)
76 1.4 knakahar return EINVAL;
77 1.4 knakahar
78 1.6 knakahar return pci_intx_alloc(pa, ihps);
79 1.6 knakahar }
80 1.6 knakahar
81 1.6 knakahar void
82 1.6 knakahar pci_intr_release(pci_chipset_tag_t pc, pci_intr_handle_t *pih, int count)
83 1.6 knakahar {
84 1.6 knakahar
85 1.6 knakahar kmem_free(pih, sizeof(*pih));
86 1.6 knakahar }
87 1.6 knakahar
88 1.6 knakahar int
89 1.6 knakahar pci_intx_alloc(const struct pci_attach_args *pa, pci_intr_handle_t **ihp)
90 1.6 knakahar {
91 1.6 knakahar pci_intr_handle_t *pih;
92 1.6 knakahar
93 1.4 knakahar if (ihp == NULL)
94 1.6 knakahar return EINVAL;
95 1.6 knakahar
96 1.6 knakahar pih = kmem_alloc(sizeof(*pih), KM_SLEEP);
97 1.6 knakahar if (pci_intr_map(pa, pih)) {
98 1.6 knakahar kmem_free(pih, sizeof(*pih));
99 1.4 knakahar return EINVAL;
100 1.4 knakahar }
101 1.4 knakahar
102 1.6 knakahar *ihp = pih;
103 1.4 knakahar return 0;
104 1.4 knakahar }
105 1.4 knakahar
106 1.6 knakahar int
107 1.6 knakahar pci_msi_alloc(const struct pci_attach_args *pa, pci_intr_handle_t **ihps,
108 1.6 knakahar int *count)
109 1.6 knakahar {
110 1.6 knakahar
111 1.6 knakahar return EOPNOTSUPP;
112 1.6 knakahar }
113 1.6 knakahar
114 1.6 knakahar int
115 1.6 knakahar pci_msi_alloc_exact(const struct pci_attach_args *pa, pci_intr_handle_t **ihps,
116 1.6 knakahar int count)
117 1.6 knakahar {
118 1.6 knakahar
119 1.6 knakahar return EOPNOTSUPP;
120 1.6 knakahar }
121 1.6 knakahar
122 1.6 knakahar int
123 1.6 knakahar pci_msix_alloc(const struct pci_attach_args *pa, pci_intr_handle_t **ihps,
124 1.6 knakahar int *count)
125 1.6 knakahar {
126 1.6 knakahar
127 1.6 knakahar return EOPNOTSUPP;
128 1.6 knakahar }
129 1.6 knakahar
130 1.6 knakahar int
131 1.6 knakahar pci_msix_alloc_exact(const struct pci_attach_args *pa, pci_intr_handle_t **ihps,
132 1.4 knakahar int count)
133 1.4 knakahar {
134 1.4 knakahar
135 1.6 knakahar return EOPNOTSUPP;
136 1.4 knakahar }
137 1.4 knakahar
138 1.6 knakahar int
139 1.6 knakahar pci_msix_alloc_map(const struct pci_attach_args *pa, pci_intr_handle_t **ihps,
140 1.6 knakahar u_int *table_indexes, int count)
141 1.2 knakahar {
142 1.2 knakahar
143 1.6 knakahar return EOPNOTSUPP;
144 1.2 knakahar }
145 1.6 knakahar #endif /* __HAVE_PCI_MSI_MSIX */
146