summaryrefslogtreecommitdiffstats
path: root/sys/dev/puc/puc_pccard.c
diff options
context:
space:
mode:
authormarcel <marcel@FreeBSD.org>2006-04-28 21:21:53 +0000
committermarcel <marcel@FreeBSD.org>2006-04-28 21:21:53 +0000
commit193a6144b9612bafde9b4382a221e917496b8601 (patch)
tree5e43b7350101e478e59289d09768df4e1a830e0d /sys/dev/puc/puc_pccard.c
parentca65c8d400f4a855b84394629b8695274cf7bfb4 (diff)
downloadFreeBSD-src-193a6144b9612bafde9b4382a221e917496b8601.zip
FreeBSD-src-193a6144b9612bafde9b4382a221e917496b8601.tar.gz
Rewrite of puc(4). Significant changes are:
o Properly use rman(9) to manage resources. This eliminates the need to puc-specific hacks to rman. It also allows devinfo(8) to be used to find out the specific assignment of resources to serial/parallel ports. o Compress the PCI device "database" by optimizing for the common case and to use a procedural interface to handle the exceptions. The procedural interface also generalizes the need to setup the hardware (program chipsets, program clock frequencies). o Eliminate the need for PUC_FASTINTR. Serdev devices are fast by default and non-serdev devices are handled by the bus. o Use the serdev I/F to collect interrupt status and to handle interrupts across ports in priority order. o Sync the PCI device configuration to include devices found in NetBSD and not yet merged to FreeBSD. o Add support for Quatech 2, 4 and 8 port UARTs. o Add support for a couple dozen Timedia serial cards as found in Linux.
Diffstat (limited to 'sys/dev/puc/puc_pccard.c')
-rw-r--r--sys/dev/puc/puc_pccard.c54
1 files changed, 19 insertions, 35 deletions
diff --git a/sys/dev/puc/puc_pccard.c b/sys/dev/puc/puc_pccard.c
index c01db42..e250169 100644
--- a/sys/dev/puc/puc_pccard.c
+++ b/sys/dev/puc/puc_pccard.c
@@ -27,8 +27,6 @@
#include <sys/cdefs.h>
__FBSDID("$FreeBSD$");
-#include "opt_puc.h"
-
#include <sys/param.h>
#include <sys/systm.h>
#include <sys/kernel.h>
@@ -41,25 +39,19 @@ __FBSDID("$FreeBSD$");
#include <machine/resource.h>
#include <sys/rman.h>
-#define PUC_ENTRAILS 1
-#include <dev/puc/pucvar.h>
-
-#include <dev/sio/sioreg.h>
#include <dev/pccard/pccardvar.h>
-const struct puc_device_description rscom_devices = {
+#include <dev/puc/puc_bfe.h>
+#include <dev/puc/puc_cfg.h>
+/* http://www.argosy.com.tw/product/sp320.htm */
+const struct puc_cfg puc_pccard_rscom = {
+ 0, 0, 0, 0,
"ARGOSY SP320 Dual port serial PCMCIA",
- /* http://www.argosy.com.tw/product/sp320.htm */
- { 0, 0, 0, 0 },
- { 0, 0, 0, 0 },
- {
- { PUC_PORT_TYPE_COM, 0x0, 0x00, DEFAULT_RCLK, 0x100000 },
- { PUC_PORT_TYPE_COM, 0x1, 0x00, DEFAULT_RCLK, 0 },
- }
+ DEFAULT_RCLK,
+ PUC_PORT_2S, 0, 1, 0,
};
-
static int
puc_pccard_probe(device_t dev)
{
@@ -72,39 +64,31 @@ puc_pccard_probe(device_t dev)
error = pccard_get_product_str(dev, &product);
if (error)
return(error);
- if (!strcmp(vendor, "PCMCIA") && !strcmp(product, "RS-COM 2P")) {
- device_set_desc(dev, rscom_devices.name);
- return (0);
- }
+ if (!strcmp(vendor, "PCMCIA") && !strcmp(product, "RS-COM 2P"))
+ return (puc_bfe_probe(dev, &puc_pccard_rscom));
return (ENXIO);
}
-static int
-puc_pccard_attach(device_t dev)
-{
-
- return (puc_attach(dev, &rscom_devices));
-}
-
static device_method_t puc_pccard_methods[] = {
/* Device interface */
DEVMETHOD(device_probe, puc_pccard_probe),
- DEVMETHOD(device_attach, puc_pccard_attach),
-
- DEVMETHOD(bus_alloc_resource, puc_alloc_resource),
- DEVMETHOD(bus_release_resource, puc_release_resource),
- DEVMETHOD(bus_get_resource, puc_get_resource),
- DEVMETHOD(bus_read_ivar, puc_read_ivar),
- DEVMETHOD(bus_setup_intr, puc_setup_intr),
- DEVMETHOD(bus_teardown_intr, puc_teardown_intr),
+ DEVMETHOD(device_attach, puc_bfe_attach),
+ DEVMETHOD(device_detach, puc_bfe_detach),
+
+ DEVMETHOD(bus_alloc_resource, puc_bus_alloc_resource),
+ DEVMETHOD(bus_release_resource, puc_bus_release_resource),
+ DEVMETHOD(bus_get_resource, puc_bus_get_resource),
+ DEVMETHOD(bus_read_ivar, puc_bus_read_ivar),
+ DEVMETHOD(bus_setup_intr, puc_bus_setup_intr),
+ DEVMETHOD(bus_teardown_intr, puc_bus_teardown_intr),
DEVMETHOD(bus_print_child, bus_generic_print_child),
DEVMETHOD(bus_driver_added, bus_generic_driver_added),
{ 0, 0 }
};
static driver_t puc_pccard_driver = {
- "puc",
+ puc_driver_name,
puc_pccard_methods,
sizeof(struct puc_softc),
};
OpenPOWER on IntegriCloud