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.
This commit is contained in:
parent
96cf0b6d56
commit
132580b5af
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=184564
@ -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));
|
||||
|
||||
|
@ -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);
|
||||
|
@ -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))
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
|
Loading…
Reference in New Issue
Block a user