Module Name: src
Committed By: knakahara
Date: Thu Oct 22 09:45:32 UTC 2015
Modified Files:
src/sys/arch/x86/include: pci_machdep_common.h
src/sys/dev/pci: pci_stub.c pcivar.h
Log Message:
add pci_intr_alloc related stubs to reduce ifdef from device drivers.
To generate a diff of this commit:
cvs rdiff -u -r1.21 -r1.22 src/sys/arch/x86/include/pci_machdep_common.h
cvs rdiff -u -r1.3 -r1.4 src/sys/dev/pci/pci_stub.c
cvs rdiff -u -r1.105 -r1.106 src/sys/dev/pci/pcivar.h
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: src/sys/arch/x86/include/pci_machdep_common.h
diff -u src/sys/arch/x86/include/pci_machdep_common.h:1.21 src/sys/arch/x86/include/pci_machdep_common.h:1.22
--- src/sys/arch/x86/include/pci_machdep_common.h:1.21 Mon Aug 17 06:16:02 2015
+++ src/sys/arch/x86/include/pci_machdep_common.h Thu Oct 22 09:45:32 2015
@@ -1,4 +1,4 @@
-/* $NetBSD: pci_machdep_common.h,v 1.21 2015/08/17 06:16:02 knakahara Exp $ */
+/* $NetBSD: pci_machdep_common.h,v 1.22 2015/10/22 09:45:32 knakahara Exp $ */
/*
* Copyright (c) 1996 Christopher G. Demetriou. All rights reserved.
@@ -119,6 +119,7 @@ void *pci_intr_establish(pci_chipset_ta
int, int (*)(void *), void *);
void pci_intr_disestablish(pci_chipset_tag_t, void *);
+#ifdef __HAVE_PCI_MSI_MSIX
typedef enum {
PCI_INTR_TYPE_INTX = 0,
PCI_INTR_TYPE_MSI,
@@ -127,6 +128,15 @@ typedef enum {
} pci_intr_type_t;
pci_intr_type_t pci_intr_type(pci_intr_handle_t);
+/*
+ * Wrapper function for generally unitied allocation to fallback MSI-X/MSI/INTx
+ * automatically.
+ */
+int pci_intr_alloc(const struct pci_attach_args *,
+ pci_intr_handle_t **, int *, pci_intr_type_t);
+void pci_intr_release(pci_chipset_tag_t, pci_intr_handle_t *,
+ int);
+#endif
/*
* If device drivers use MSI/MSI-X, they should use these API for INTx
@@ -136,13 +146,6 @@ pci_intr_type_t pci_intr_type(pci_intr_h
int pci_intx_alloc(const struct pci_attach_args *,
pci_intr_handle_t **);
-/*
- * Wrapper function for generally unitied allocation to fallback MSI-X/MSI/INTx
- * automatically.
- */
-int pci_intr_alloc(const struct pci_attach_args *,
- pci_intr_handle_t **, int *, pci_intr_type_t);
-
/* experimental MSI support */
int pci_msi_alloc(const struct pci_attach_args *,
pci_intr_handle_t **, int *);
@@ -157,9 +160,6 @@ int pci_msix_alloc_exact(const struct p
int pci_msix_alloc_map(const struct pci_attach_args *,
pci_intr_handle_t **, u_int *, int);
-void pci_intr_release(pci_chipset_tag_t, pci_intr_handle_t *,
- int);
-
/*
* ALL OF THE FOLLOWING ARE MACHINE-DEPENDENT, AND SHOULD NOT BE USED
* BY PORTABLE CODE.
Index: src/sys/dev/pci/pci_stub.c
diff -u src/sys/dev/pci/pci_stub.c:1.3 src/sys/dev/pci/pci_stub.c:1.4
--- src/sys/dev/pci/pci_stub.c:1.3 Mon Aug 24 23:55:04 2015
+++ src/sys/dev/pci/pci_stub.c Thu Oct 22 09:45:32 2015
@@ -1,5 +1,5 @@
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: pci_stub.c,v 1.3 2015/08/24 23:55:04 pooka Exp $");
+__KERNEL_RCSID(0, "$NetBSD: pci_stub.c,v 1.4 2015/10/22 09:45:32 knakahara Exp $");
#ifdef _KERNEL_OPT
#include "opt_pci.h"
@@ -7,6 +7,7 @@ __KERNEL_RCSID(0, "$NetBSD: pci_stub.c,v
#include <sys/param.h>
#include <sys/systm.h>
+#include <sys/kmem.h>
#include <dev/pci/pcireg.h>
#include <dev/pci/pcivar.h>
@@ -16,6 +17,10 @@ int default_pci_bus_devorder(pci_chipset
int default_pci_chipset_tag_create(pci_chipset_tag_t, uint64_t,
const struct pci_overrides *, void *, pci_chipset_tag_t *);
void default_pci_chipset_tag_destroy(pci_chipset_tag_t);
+pci_intr_type_t default_pci_intr_type(pci_intr_handle_t);
+int default_pci_intr_alloc(const struct pci_attach_args *,
+ pci_intr_handle_t **, int *, pci_intr_type_t);
+void default_pci_intr_release(pci_chipset_tag_t, pci_intr_handle_t *, int);
void *default_pci_intr_establish_xname(pci_chipset_tag_t, pci_intr_handle_t,
int, int (*)(void *), void *, const char *);
@@ -23,6 +28,9 @@ __strict_weak_alias(pci_bus_devorder, de
__strict_weak_alias(pci_chipset_tag_create, default_pci_chipset_tag_create);
__strict_weak_alias(pci_chipset_tag_destroy, default_pci_chipset_tag_destroy);
+__strict_weak_alias(pci_intr_type, default_pci_intr_type);
+__strict_weak_alias(pci_intr_alloc, default_pci_intr_alloc);
+__strict_weak_alias(pci_intr_release, default_pci_intr_release);
__strict_weak_alias(pci_intr_establish_xname, default_pci_intr_establish_xname);
int
@@ -50,6 +58,43 @@ default_pci_chipset_tag_create(pci_chips
return EOPNOTSUPP;
}
+pci_intr_type_t
+default_pci_intr_type(pci_intr_handle_t ih)
+{
+
+ return PCI_INTR_TYPE_INTX;
+}
+
+int
+default_pci_intr_alloc(const struct pci_attach_args *pa,
+ pci_intr_handle_t **ihps, int *counts, pci_intr_type_t max_type)
+{
+ pci_intr_handle_t *ihp;
+
+ if (counts != NULL && counts[PCI_INTR_TYPE_INTX] == 0)
+ return EINVAL;
+
+ ihp = kmem_alloc(sizeof(*ihp), KM_SLEEP);
+ if (ihp == NULL)
+ return ENOMEM;
+
+ if (pci_intr_map(pa, ihp)) {
+ kmem_free(ihp, sizeof(*ihp));
+ return EINVAL;
+ }
+
+ ihps[0] = ihp;
+ return 0;
+}
+
+void
+default_pci_intr_release(pci_chipset_tag_t pc, pci_intr_handle_t *pih,
+ int count)
+{
+
+ kmem_free(pih, sizeof(*pih));
+}
+
void *
default_pci_intr_establish_xname(pci_chipset_tag_t pc, pci_intr_handle_t ih,
int level, int (*func)(void *), void *arg, const char *__nouse)
Index: src/sys/dev/pci/pcivar.h
diff -u src/sys/dev/pci/pcivar.h:1.105 src/sys/dev/pci/pcivar.h:1.106
--- src/sys/dev/pci/pcivar.h:1.105 Fri Oct 2 05:22:53 2015
+++ src/sys/dev/pci/pcivar.h Thu Oct 22 09:45:32 2015
@@ -1,4 +1,4 @@
-/* $NetBSD: pcivar.h,v 1.105 2015/10/02 05:22:53 msaitoh Exp $ */
+/* $NetBSD: pcivar.h,v 1.106 2015/10/22 09:45:32 knakahara Exp $ */
/*
* Copyright (c) 1996, 1997 Christopher G. Demetriou. All rights reserved.
@@ -350,6 +350,20 @@ void pci_chipset_tag_destroy(pci_chipset
int pci_bus_devorder(pci_chipset_tag_t, int, uint8_t *, int);
void *pci_intr_establish_xname(pci_chipset_tag_t, pci_intr_handle_t,
int, int (*)(void *), void *, const char *);
+#ifndef __HAVE_PCI_MSI_MSIX
+typedef enum {
+ PCI_INTR_TYPE_INTX = 0,
+ PCI_INTR_TYPE_MSI,
+ PCI_INTR_TYPE_MSIX,
+ PCI_INTR_TYPE_SIZE,
+} pci_intr_type_t;
+
+pci_intr_type_t
+ pci_intr_type(pci_intr_handle_t);
+int pci_intr_alloc(const struct pci_attach_args *, pci_intr_handle_t **,
+ int *, pci_intr_type_t);
+void pci_intr_release(pci_chipset_tag_t, pci_intr_handle_t *, int);
+#endif
/*
* Device abstraction for inheritance by elanpci(4), for example.