Home | History | Annotate | Line # | Download | only in pci
pci_stub.c revision 1.1.30.2
      1       1.1  dyoung #include <sys/cdefs.h>
      2  1.1.30.2   skrll __KERNEL_RCSID(0, "$NetBSD: pci_stub.c,v 1.1.30.2 2015/12/27 12:09:50 skrll Exp $");
      3       1.1  dyoung 
      4  1.1.30.1   skrll #ifdef _KERNEL_OPT
      5       1.1  dyoung #include "opt_pci.h"
      6  1.1.30.1   skrll #endif
      7       1.1  dyoung 
      8       1.1  dyoung #include <sys/param.h>
      9       1.1  dyoung #include <sys/systm.h>
     10  1.1.30.2   skrll #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.30.2   skrll pci_intr_type_t default_pci_intr_type(pci_intr_handle_t);
     21  1.1.30.2   skrll int default_pci_intr_alloc(const struct pci_attach_args *,
     22  1.1.30.2   skrll     pci_intr_handle_t **, int *, pci_intr_type_t);
     23  1.1.30.2   skrll void default_pci_intr_release(pci_chipset_tag_t, pci_intr_handle_t *, int);
     24  1.1.30.1   skrll void *default_pci_intr_establish_xname(pci_chipset_tag_t, pci_intr_handle_t,
     25  1.1.30.1   skrll     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.1.30.2   skrll __strict_weak_alias(pci_intr_type, default_pci_intr_type);
     32  1.1.30.2   skrll __strict_weak_alias(pci_intr_alloc, default_pci_intr_alloc);
     33  1.1.30.2   skrll __strict_weak_alias(pci_intr_release, default_pci_intr_release);
     34  1.1.30.1   skrll __strict_weak_alias(pci_intr_establish_xname, default_pci_intr_establish_xname);
     35  1.1.30.1   skrll 
     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.1.30.1   skrll 
     61  1.1.30.2   skrll pci_intr_type_t
     62  1.1.30.2   skrll default_pci_intr_type(pci_intr_handle_t ih)
     63  1.1.30.2   skrll {
     64  1.1.30.2   skrll 
     65  1.1.30.2   skrll 	return PCI_INTR_TYPE_INTX;
     66  1.1.30.2   skrll }
     67  1.1.30.2   skrll 
     68  1.1.30.2   skrll int
     69  1.1.30.2   skrll default_pci_intr_alloc(const struct pci_attach_args *pa,
     70  1.1.30.2   skrll     pci_intr_handle_t **ihps, int *counts, pci_intr_type_t max_type)
     71  1.1.30.2   skrll {
     72  1.1.30.2   skrll 	pci_intr_handle_t *ihp;
     73  1.1.30.2   skrll 
     74  1.1.30.2   skrll 	if (counts != NULL && counts[PCI_INTR_TYPE_INTX] == 0)
     75  1.1.30.2   skrll 		return EINVAL;
     76  1.1.30.2   skrll 
     77  1.1.30.2   skrll 	ihp = kmem_alloc(sizeof(*ihp), KM_SLEEP);
     78  1.1.30.2   skrll 	if (ihp == NULL)
     79  1.1.30.2   skrll 		return ENOMEM;
     80  1.1.30.2   skrll 
     81  1.1.30.2   skrll 	if (pci_intr_map(pa, ihp)) {
     82  1.1.30.2   skrll 		kmem_free(ihp, sizeof(*ihp));
     83  1.1.30.2   skrll 		return EINVAL;
     84  1.1.30.2   skrll 	}
     85  1.1.30.2   skrll 
     86  1.1.30.2   skrll 	ihps[0] = ihp;
     87  1.1.30.2   skrll 	return 0;
     88  1.1.30.2   skrll }
     89  1.1.30.2   skrll 
     90  1.1.30.2   skrll void
     91  1.1.30.2   skrll default_pci_intr_release(pci_chipset_tag_t pc, pci_intr_handle_t *pih,
     92  1.1.30.2   skrll     int count)
     93  1.1.30.2   skrll {
     94  1.1.30.2   skrll 
     95  1.1.30.2   skrll 	kmem_free(pih, sizeof(*pih));
     96  1.1.30.2   skrll }
     97  1.1.30.2   skrll 
     98  1.1.30.1   skrll void *
     99  1.1.30.1   skrll default_pci_intr_establish_xname(pci_chipset_tag_t pc, pci_intr_handle_t ih,
    100  1.1.30.1   skrll     int level, int (*func)(void *), void *arg, const char *__nouse)
    101  1.1.30.1   skrll {
    102  1.1.30.1   skrll 
    103  1.1.30.1   skrll 	return pci_intr_establish(pc, ih, level, func, arg);
    104  1.1.30.1   skrll }
    105