summaryrefslogtreecommitdiffstats
path: root/sys/dev/pci
diff options
context:
space:
mode:
authorpeter <peter@FreeBSD.org>2000-05-28 16:35:57 +0000
committerpeter <peter@FreeBSD.org>2000-05-28 16:35:57 +0000
commiteda3ab65365eda15e04a893a46c7244b53638c94 (patch)
treea75cd25e9649785a73bedb6d5cbf9fc20d6a036a /sys/dev/pci
parentdeeb13a8dbcfd2933374a20e990791e83cd77096 (diff)
downloadFreeBSD-src-eda3ab65365eda15e04a893a46c7244b53638c94.zip
FreeBSD-src-eda3ab65365eda15e04a893a46c7244b53638c94.tar.gz
Encapsulate the old PCI compatability support and APIs completely under
"options COMPAT_OLDPCI". This option already existed, but now also tidies up the declarations in #include <pci/pci*.h>. It is amazing how much stuff was using the old pre-FreeBSD 3.x names and going silently undetected.
Diffstat (limited to 'sys/dev/pci')
-rw-r--r--sys/dev/pci/pci.c106
-rw-r--r--sys/dev/pci/pcireg.h13
-rw-r--r--sys/dev/pci/pcivar.h26
3 files changed, 22 insertions, 123 deletions
diff --git a/sys/dev/pci/pci.c b/sys/dev/pci/pci.c
index aa58b8a..1d47e84 100644
--- a/sys/dev/pci/pci.c
+++ b/sys/dev/pci/pci.c
@@ -52,9 +52,9 @@
#include <machine/resource.h>
#include <machine/md_var.h> /* For the Alpha */
+#include <sys/pciio.h>
#include <pci/pcireg.h>
#include <pci/pcivar.h>
-#include <sys/pciio.h>
#ifdef __alpha__
#include <machine/rpb.h>
@@ -86,13 +86,6 @@ struct pci_quirk pci_quirks[] = {
#define PCI_MAPMEMP 0x02 /* prefetchable memory map */
#define PCI_MAPPORT 0x04 /* port map */
-struct pci_devinfo {
- STAILQ_ENTRY(pci_devinfo) pci_links;
- struct resource_list resources;
- pcicfgregs cfg;
- struct pci_conf conf;
-};
-
static STAILQ_HEAD(devlist, pci_devinfo) pci_devq;
u_int32_t pci_numdevs = 0;
static u_int32_t pci_generation = 0;
@@ -857,101 +850,6 @@ static struct cdevsw pcicdev = {
#include "pci_if.h"
-static devclass_t pci_devclass;
-
-#ifdef COMPAT_OLDPCI
-/*
- * A simple driver to wrap the old pci driver mechanism for back-compat.
- */
-
-static int
-pci_compat_probe(device_t dev)
-{
- struct pci_device *dvp;
- struct pci_devinfo *dinfo;
- pcicfgregs *cfg;
- const char *name;
- int error;
-
- dinfo = device_get_ivars(dev);
- cfg = &dinfo->cfg;
- dvp = device_get_driver(dev)->priv;
-
- /*
- * Do the wrapped probe.
- */
- error = ENXIO;
- if (dvp && dvp->pd_probe) {
- name = dvp->pd_probe(cfg, (cfg->device << 16) + cfg->vendor);
- if (name) {
- device_set_desc_copy(dev, name);
- /* Allow newbus drivers to match "better" */
- error = -200;
- }
- }
-
- return error;
-}
-
-static int
-pci_compat_attach(device_t dev)
-{
- struct pci_device *dvp;
- struct pci_devinfo *dinfo;
- pcicfgregs *cfg;
- int unit;
-
- dinfo = device_get_ivars(dev);
- cfg = &dinfo->cfg;
- dvp = device_get_driver(dev)->priv;
-
- unit = device_get_unit(dev);
- if (unit > *dvp->pd_count)
- *dvp->pd_count = unit;
- if (dvp->pd_attach)
- dvp->pd_attach(cfg, unit);
- device_printf(dev, "driver is using old-style compatability shims\n");
- return 0;
-}
-
-static device_method_t pci_compat_methods[] = {
- /* Device interface */
- DEVMETHOD(device_probe, pci_compat_probe),
- DEVMETHOD(device_attach, pci_compat_attach),
-
- { 0, 0 }
-};
-
-/*
- * Create a new style driver around each old pci driver.
- */
-int
-compat_pci_handler(module_t mod, int type, void *data)
-{
- struct pci_device *dvp = (struct pci_device *)data;
- driver_t *driver;
-
- switch (type) {
- case MOD_LOAD:
- driver = malloc(sizeof(driver_t), M_DEVBUF, M_NOWAIT);
- if (!driver)
- return ENOMEM;
- bzero(driver, sizeof(driver_t));
- driver->name = dvp->pd_name;
- driver->methods = pci_compat_methods;
- driver->size = sizeof(struct pci_devinfo *);
- driver->priv = dvp;
- devclass_add_driver(pci_devclass, driver);
- break;
- case MOD_UNLOAD:
- printf("%s: module unload not supported!\n", dvp->pd_name);
- return EOPNOTSUPP;
- default:
- break;
- }
- return 0;
-}
-#endif
/*
* New style pci driver. Parent device is either a pci-host-bridge or a
@@ -1504,5 +1402,5 @@ static driver_t pci_driver = {
pci_methods,
1, /* no softc */
};
-
+static devclass_t pci_devclass;
DRIVER_MODULE(pci, pcib, pci_driver, pci_devclass, pci_modevent, 0);
diff --git a/sys/dev/pci/pcireg.h b/sys/dev/pci/pcireg.h
index 0f6fb28..2a32f50 100644
--- a/sys/dev/pci/pcireg.h
+++ b/sys/dev/pci/pcireg.h
@@ -1,6 +1,3 @@
-#ifndef PCI_COMPAT
-#define PCI_COMPAT
-#endif
/*
* Copyright (c) 1997, Stefan Esser <se@freebsd.org>
* All rights reserved.
@@ -234,9 +231,13 @@
#define PCID_INTEL_SATURN 0x0483
#define PCID_INTEL_ORION 0x84c4
-/* for compatibility to FreeBSD-2.2 version of PCI code */
+/* for compatibility to FreeBSD-2.2 and 3.x versions of PCI code */
+
+#if defined(_KERNEL) && !defined(KLD_MODULE)
+#include "opt_compat_oldpci.h"
+#endif
-#ifdef PCI_COMPAT
+#ifdef COMPAT_OLDPCI
#define PCI_ID_REG 0x00
#define PCI_COMMAND_STATUS_REG 0x04
@@ -257,4 +258,4 @@
#define PCI_MAP_IO 0x00000001
#define PCI_INTERRUPT_REG 0x3c
-#endif /* PCI_COMPAT */
+#endif /* COMPAT_OLDPCI */
diff --git a/sys/dev/pci/pcivar.h b/sys/dev/pci/pcivar.h
index 024256c..725d38f 100644
--- a/sys/dev/pci/pcivar.h
+++ b/sys/dev/pci/pcivar.h
@@ -30,10 +30,6 @@
#ifndef _PCIVAR_H_
#define _PCIVAR_H_
-#ifndef PCI_COMPAT
-#define PCI_COMPAT
-#endif
-
#include <sys/queue.h>
/* some PCI bus constants */
@@ -139,6 +135,15 @@ typedef struct {
extern u_int32_t pci_numdevs;
+/* Only if the prerequisites are present */
+#if defined(_SYS_BUS_H_) && defined(_SYS_PCIIO_H_)
+struct pci_devinfo {
+ STAILQ_ENTRY(pci_devinfo) pci_links;
+ struct resource_list resources;
+ pcicfgregs cfg;
+ struct pci_conf conf;
+};
+#endif
/* externally visible functions */
@@ -265,14 +270,14 @@ PCIB_ACCESSOR(hose, HOSE, u_int32_t)
#endif
-/* for compatibility to FreeBSD-2.2 version of PCI code */
-
-#ifdef PCI_COMPAT
+/* for compatibility to FreeBSD-2.2 and 3.x versions of PCI code */
#if defined(_KERNEL) && !defined(KLD_MODULE)
#include "opt_compat_oldpci.h"
#endif
+#ifdef COMPAT_OLDPCI
+
/* all this is going some day */
typedef pcicfgregs *pcici_t;
@@ -283,7 +288,6 @@ typedef void pci_inthand_t(void *arg);
/* just copied from old PCI code for now ... */
-#ifdef COMPAT_OLDPCI
struct pci_device {
char* pd_name;
const char* (*pd_probe ) (pcici_t tag, pcidi_t type);
@@ -291,7 +295,6 @@ struct pci_device {
u_long *pd_count;
int (*pd_shutdown) (int, int);
};
-#endif
#ifdef __i386__
typedef u_short pci_port_t;
@@ -312,7 +315,6 @@ int pci_unmap_int (pcici_t tag);
pcici_t pci_get_parent_from_tag(pcici_t tag);
int pci_get_bus_from_tag(pcici_t tag);
-#ifdef COMPAT_OLDPCI
struct module;
int compat_pci_handler (struct module *, int, void *);
#define COMPAT_PCI_DRIVER(name, pcidata) \
@@ -322,8 +324,6 @@ static moduledata_t name##_mod = { \
&pcidata \
}; \
DECLARE_MODULE(name, name##_mod, SI_SUB_DRIVERS, SI_ORDER_ANY)
-#endif
-
+#endif /* COMPAT_OLDPCI */
-#endif /* PCI_COMPAT */
#endif /* _PCIVAR_H_ */
OpenPOWER on IntegriCloud