summaryrefslogtreecommitdiffstats
path: root/sys/pc98/cbus/pckbd.c
diff options
context:
space:
mode:
authornyan <nyan@FreeBSD.org>2001-06-17 04:43:28 +0000
committernyan <nyan@FreeBSD.org>2001-06-17 04:43:28 +0000
commit2d7a18646d9dafd5b5b7707fa718b1a2bec62683 (patch)
tree91e30cbf1e2d23d2589b0733ff70437c9257c339 /sys/pc98/cbus/pckbd.c
parent714cc67ab669e57482b4991f6b38771231a73aca (diff)
downloadFreeBSD-src-2d7a18646d9dafd5b5b7707fa718b1a2bec62683.zip
FreeBSD-src-2d7a18646d9dafd5b5b7707fa718b1a2bec62683.tar.gz
Allocate all resources using keyboard controller.
Diffstat (limited to 'sys/pc98/cbus/pckbd.c')
-rw-r--r--sys/pc98/cbus/pckbd.c45
1 files changed, 37 insertions, 8 deletions
diff --git a/sys/pc98/cbus/pckbd.c b/sys/pc98/cbus/pckbd.c
index 223bf0c..9825f89 100644
--- a/sys/pc98/cbus/pckbd.c
+++ b/sys/pc98/cbus/pckbd.c
@@ -74,6 +74,8 @@ static driver_t pckbd_driver = {
DRIVER_MODULE(pckbd, isa, pckbd_driver, pckbd_devclass, 0, 0);
+static bus_addr_t pckbd_iat[] = {0, 2};
+
static int pckbd_probe_unit(int unit, int port, int irq,
int flags);
static int pckbd_attach_unit(int unit, keyboard_t **kbd,
@@ -84,14 +86,30 @@ static timeout_t pckbd_timeout;
static int
pckbdprobe(device_t dev)
{
+ struct resource *res;
+ int error, rid;
+
/* Check isapnp ids */
if (isa_get_vendorid(dev))
return (ENXIO);
device_set_desc(dev, "PC-98 Keyboard");
- return pckbd_probe_unit(device_get_unit(dev), isa_get_port(dev),
- (1 << isa_get_irq(dev)), device_get_flags(dev));
+ rid = 0;
+ res = isa_alloc_resourcev(dev, SYS_RES_IOPORT, &rid, pckbd_iat, 2,
+ RF_ACTIVE);
+ if (res == NULL)
+ return ENXIO;
+ isa_load_resourcev(res, pckbd_iat, 2);
+
+ error = pckbd_probe_unit(device_get_unit(dev),
+ isa_get_port(dev),
+ (1 << isa_get_irq(dev)),
+ device_get_flags(dev));
+
+ bus_release_resource(dev, SYS_RES_IOPORT, rid, res);
+
+ return (error);
}
static int
@@ -100,15 +118,26 @@ pckbdattach(device_t dev)
keyboard_t *kbd;
void *ih;
struct resource *res;
- int zero = 0;
+ int error, rid;
+
+ rid = 0;
+ res = isa_alloc_resourcev(dev, SYS_RES_IOPORT, &rid, pckbd_iat, 2,
+ RF_ACTIVE);
+ if (res == NULL)
+ return ENXIO;
+ isa_load_resourcev(res, pckbd_iat, 2);
- pckbd_attach_unit(device_get_unit(dev), &kbd, isa_get_port(dev),
- (1 << isa_get_irq(dev)), device_get_flags(dev));
+ error = pckbd_attach_unit(device_get_unit(dev), &kbd,
+ isa_get_port(dev),
+ (1 << isa_get_irq(dev)),
+ device_get_flags(dev));
- res = bus_alloc_resource(dev, SYS_RES_IRQ, &zero, 0ul, ~0ul, 1,
- RF_SHAREABLE | RF_ACTIVE);
+ rid = 0;
+ res = bus_alloc_resource(dev, SYS_RES_IRQ, &rid, 0, ~0, 1, RF_ACTIVE);
+ if (res == NULL)
+ return ENXIO;
BUS_SETUP_INTR(device_get_parent(dev), dev, res, INTR_TYPE_TTY,
- pckbd_isa_intr, kbd, &ih);
+ pckbd_isa_intr, kbd, &ih);
return (0);
}
OpenPOWER on IntegriCloud