diff options
author | imp <imp@FreeBSD.org> | 2008-11-02 18:48:54 +0000 |
---|---|---|
committer | imp <imp@FreeBSD.org> | 2008-11-02 18:48:54 +0000 |
commit | e4a289ae9df429422b7271131d81a416f660f896 (patch) | |
tree | 75daffb6fb9ee47bd587003a933fb3a9e9254f46 /sys/isa | |
parent | e0025a35ca7e80d6daca4e6d249bef6d86f3db89 (diff) | |
download | FreeBSD-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.c | 22 | ||||
-rw-r--r-- | sys/isa/isa_common.h | 3 | ||||
-rw-r--r-- | sys/isa/isavar.h | 10 | ||||
-rw-r--r-- | sys/isa/pnp.c | 2 |
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; |