Home | History | Annotate | Line # | Download | only in pci
pci_stub.c revision 1.4
      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