xref: /netbsd-src/sys/dev/pci/pci_stub.c (revision 946379e7b37692fc43f68eb0d1c10daa0a7f3b6c)
1 #include <sys/cdefs.h>
2 __KERNEL_RCSID(0, "$NetBSD: pci_stub.c,v 1.4 2015/10/22 09:45:32 knakahara Exp $");
3 
4 #ifdef _KERNEL_OPT
5 #include "opt_pci.h"
6 #endif
7 
8 #include <sys/param.h>
9 #include <sys/systm.h>
10 #include <sys/kmem.h>
11 
12 #include <dev/pci/pcireg.h>
13 #include <dev/pci/pcivar.h>
14 #include <dev/pci/pcidevs.h>
15 
16 int default_pci_bus_devorder(pci_chipset_tag_t, int, uint8_t *, int);
17 int default_pci_chipset_tag_create(pci_chipset_tag_t, uint64_t,
18     const struct pci_overrides *, void *, pci_chipset_tag_t *);
19 void default_pci_chipset_tag_destroy(pci_chipset_tag_t);
20 pci_intr_type_t default_pci_intr_type(pci_intr_handle_t);
21 int default_pci_intr_alloc(const struct pci_attach_args *,
22     pci_intr_handle_t **, int *, pci_intr_type_t);
23 void default_pci_intr_release(pci_chipset_tag_t, pci_intr_handle_t *, int);
24 void *default_pci_intr_establish_xname(pci_chipset_tag_t, pci_intr_handle_t,
25     int, int (*)(void *), void *, const char *);
26 
27 __strict_weak_alias(pci_bus_devorder, default_pci_bus_devorder);
28 __strict_weak_alias(pci_chipset_tag_create, default_pci_chipset_tag_create);
29 __strict_weak_alias(pci_chipset_tag_destroy, default_pci_chipset_tag_destroy);
30 
31 __strict_weak_alias(pci_intr_type, default_pci_intr_type);
32 __strict_weak_alias(pci_intr_alloc, default_pci_intr_alloc);
33 __strict_weak_alias(pci_intr_release, default_pci_intr_release);
34 __strict_weak_alias(pci_intr_establish_xname, default_pci_intr_establish_xname);
35 
36 int
37 default_pci_bus_devorder(pci_chipset_tag_t pc, int bus, uint8_t *devs,
38     int maxdevs)
39 {
40 	int i, n;
41 
42 	n = MIN(pci_bus_maxdevs(pc, bus), maxdevs);
43 	for (i = 0; i < n; i++)
44 		devs[i] = i;
45 
46 	return n;
47 }
48 
49 void
50 default_pci_chipset_tag_destroy(pci_chipset_tag_t pc)
51 {
52 }
53 
54 int
55 default_pci_chipset_tag_create(pci_chipset_tag_t opc, const uint64_t present,
56     const struct pci_overrides *ov, void *ctx, pci_chipset_tag_t *pcp)
57 {
58 	return EOPNOTSUPP;
59 }
60 
61 pci_intr_type_t
62 default_pci_intr_type(pci_intr_handle_t ih)
63 {
64 
65 	return PCI_INTR_TYPE_INTX;
66 }
67 
68 int
69 default_pci_intr_alloc(const struct pci_attach_args *pa,
70     pci_intr_handle_t **ihps, int *counts, pci_intr_type_t max_type)
71 {
72 	pci_intr_handle_t *ihp;
73 
74 	if (counts != NULL && counts[PCI_INTR_TYPE_INTX] == 0)
75 		return EINVAL;
76 
77 	ihp = kmem_alloc(sizeof(*ihp), KM_SLEEP);
78 	if (ihp == NULL)
79 		return ENOMEM;
80 
81 	if (pci_intr_map(pa, ihp)) {
82 		kmem_free(ihp, sizeof(*ihp));
83 		return EINVAL;
84 	}
85 
86 	ihps[0] = ihp;
87 	return 0;
88 }
89 
90 void
91 default_pci_intr_release(pci_chipset_tag_t pc, pci_intr_handle_t *pih,
92     int count)
93 {
94 
95 	kmem_free(pih, sizeof(*pih));
96 }
97 
98 void *
99 default_pci_intr_establish_xname(pci_chipset_tag_t pc, pci_intr_handle_t ih,
100     int level, int (*func)(void *), void *arg, const char *__nouse)
101 {
102 
103 	return pci_intr_establish(pc, ih, level, func, arg);
104 }
105