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