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