summaryrefslogtreecommitdiffstats
path: root/sys/isa
diff options
context:
space:
mode:
authorimp <imp@FreeBSD.org>2008-11-02 18:48:54 +0000
committerimp <imp@FreeBSD.org>2008-11-02 18:48:54 +0000
commite4a289ae9df429422b7271131d81a416f660f896 (patch)
tree75daffb6fb9ee47bd587003a933fb3a9e9254f46 /sys/isa
parente0025a35ca7e80d6daca4e6d249bef6d86f3db89 (diff)
downloadFreeBSD-src-e4a289ae9df429422b7271131d81a416f660f896.zip
FreeBSD-src-e4a289ae9df429422b7271131d81a416f660f896.tar.gz
MFp4:
Make the ISA bus keep track of more PNP details. Plus a minor style fix while I'm here. More could be done here, but except for some SBCs that don't have ACPI, there's limited value to anybody in doing so.
Diffstat (limited to 'sys/isa')
-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
4 files changed, 32 insertions, 5 deletions
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