Home | History | Annotate | Line # | Download | only in pci
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