summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--sys/i386/i386/bios.c3
-rw-r--r--sys/isa/isa_common.c22
-rw-r--r--sys/isa/isa_common.h3
-rw-r--r--sys/isa/isavar.h10
-rw-r--r--sys/isa/pnp.c2
5 files changed, 34 insertions, 6 deletions
diff --git a/sys/i386/i386/bios.c b/sys/i386/i386/bios.c
index 128bda8..a6d0978 100644
--- a/sys/i386/i386/bios.c
+++ b/sys/i386/i386/bios.c
@@ -699,9 +699,10 @@ pnpbios_identify(driver_t *driver, device_t parent)
(!(pd->attrib & PNPATTR_NOCONFIG) &&
PNPATTR_CONFIG(pd->attrib) != PNPATTR_CONFIG_STATIC)
? ISACFGATTR_DYNAMIC : 0);
+ isa_set_pnpbios_handle(dev, pd->handle);
ISA_SET_CONFIG_CALLBACK(parent, dev, pnpbios_set_config, 0);
pnp_parse_resources(dev, &pd->devdata[0],
- pd->size - sizeof(struct pnp_sysdev), 0);
+ pd->size - sizeof(struct pnp_sysdev), 0);
if (!device_get_desc(dev))
device_set_desc_copy(dev, pnp_eisaformat(pd->devid));
diff --git a/sys/isa/isa_common.c b/sys/isa/isa_common.c
index 2a108f9..eb0618e 100644
--- a/sys/isa/isa_common.c
+++ b/sys/isa/isa_common.c
@@ -467,9 +467,6 @@ isa_assign_resources(device_t child)
return (0);
}
-/*
- * Called after other devices have initialised to probe for isa devices.
- */
void
isa_probe_children(device_t dev)
{
@@ -762,6 +759,18 @@ isa_read_ivar(device_t bus, device_t dev, int index, uintptr_t * result)
*result = idev->id_config_attr;
break;
+ case ISA_IVAR_PNP_CSN:
+ *result = idev->id_pnp_csn;
+ break;
+
+ case ISA_IVAR_PNP_LDN:
+ *result = idev->id_pnp_ldn;
+ break;
+
+ case ISA_IVAR_PNPBIOS_HANDLE:
+ *result = idev->id_pnpbios_handle;
+ break;
+
default:
return (ENOENT);
}
@@ -1026,6 +1035,13 @@ static int
isa_child_location_str(device_t bus, device_t child, char *buf,
size_t buflen)
{
+#if 0
+ /* id_pnphandle isn't there yet */
+ struct isa_device *idev = DEVTOISA(child);
+
+ if (idev->id_vendorid)
+ snprintf(buf, buflen, "pnphandle=%d", idev->id_pnphandle);
+#endif
/* Nothing here yet */
*buf = '\0';
return (0);
diff --git a/sys/isa/isa_common.h b/sys/isa/isa_common.h
index 4d61d46..c6d6e43 100644
--- a/sys/isa/isa_common.h
+++ b/sys/isa/isa_common.h
@@ -56,6 +56,9 @@ struct isa_device {
isa_config_cb *id_config_cb; /* callback function */
void *id_config_arg; /* callback argument */
int id_config_attr; /* pnp config attributes */
+ int id_pnpbios_handle; /* pnp handle, if any */
+ int id_pnp_csn; /* pnp Card Number */
+ int id_pnp_ldn; /* pnp Logical device on card */
};
#define DEVTOISA(dev) ((struct isa_device *) device_get_ivars(dev))
diff --git a/sys/isa/isavar.h b/sys/isa/isavar.h
index 748833a..59d3bc9 100644
--- a/sys/isa/isavar.h
+++ b/sys/isa/isavar.h
@@ -48,7 +48,7 @@ typedef void isa_config_cb(void *arg, struct isa_config *config, int enable);
#define ISA_ORDER_PNPBIOS 10 /* plug-and-play BIOS inflexible hardware */
#define ISA_ORDER_SENSITIVE 20 /* legacy sensitive hardware */
#define ISA_ORDER_SPECULATIVE 30 /* legacy non-sensitive hardware */
-#define ISA_ORDER_PNP 40 /* plug-and-play hardware */
+#define ISA_ORDER_PNP 40 /* plug-and-play flexible hardware */
/*
* Limits on resources that we can manage
@@ -125,7 +125,10 @@ enum isa_device_ivars {
ISA_IVAR_SERIAL,
ISA_IVAR_LOGICALID,
ISA_IVAR_COMPATID,
- ISA_IVAR_CONFIGATTR
+ ISA_IVAR_CONFIGATTR,
+ ISA_IVAR_PNP_CSN,
+ ISA_IVAR_PNP_LDN,
+ ISA_IVAR_PNPBIOS_HANDLE
};
/*
@@ -152,6 +155,9 @@ ISA_ACCESSOR(serial, SERIAL, int)
ISA_ACCESSOR(logicalid, LOGICALID, int)
ISA_ACCESSOR(compatid, COMPATID, int)
ISA_ACCESSOR(configattr, CONFIGATTR, int)
+ISA_ACCESSOR(pnp_csn, PNP_CSN, int)
+ISA_ACCESSOR(pnp_ldn, PNP_LDN, int)
+ISA_ACCESSOR(pnpbios_handle, PNPBIOS_HANDLE, int)
/* Device class for ISA bridges. */
extern devclass_t isab_devclass;
diff --git a/sys/isa/pnp.c b/sys/isa/pnp.c
index 2b9db6b..6712f42 100644
--- a/sys/isa/pnp.c
+++ b/sys/isa/pnp.c
@@ -522,6 +522,8 @@ pnp_create_devices(device_t parent, pnp_id *p, int csn,
csnldn->ldn = ldn;
ISA_SET_CONFIG_CALLBACK(parent, dev, pnp_set_config,
csnldn);
+ isa_set_pnp_csn(dev, csn);
+ isa_set_pnp_ldn(dev, ldn);
ldn++;
startres = resp;
break;
OpenPOWER on IntegriCloud