device/pnp: Ability to set vendor specific logical device config

According to the PNP ISA v1.0a spec, config registers in the range of
0xf0 up to 0xfe are vendor defined and may be used for any purpose.
Config register 0xff is reserved and is defined as such.

Currently, only vendor specific registers 0xf0, 0xf1, 0xf4, and 0xfa
are able to be set using the PNP_MSCx bit flag masks.

This patch adds support for all 15 vendor specific config registers,
and updates the existing superio pnp_info to use them where appropriate.

Change-Id: Id43b85f74e3192b17dbd7e54c4c6136a2e59ad55
Signed-off-by: Damien Zammit <damien@zamaudio.com>
Reviewed-on: https://review.coreboot.org/12808
Tested-by: build bot (Jenkins)
Reviewed-by: Alexandru Gagniuc <mr.nuke.me@gmail.com>
This commit is contained in:
Damien Zammit
2015-12-28 23:04:47 +11:00
committed by Martin Roth
parent 43a1f780ff
commit 62c0276f94
4 changed files with 95 additions and 17 deletions

View File

@@ -296,13 +296,68 @@ static void get_resources(device_t dev, struct pnp_info *info)
resource->size = 1;
resource->flags |= IORESOURCE_IRQ;
}
if (info->flags & PNP_MSC2) {
resource = new_resource(dev, PNP_IDX_MSC2);
resource->size = 1;
resource->flags |= IORESOURCE_IRQ;
}
if (info->flags & PNP_MSC3) {
resource = new_resource(dev, PNP_IDX_MSC3);
resource->size = 1;
resource->flags |= IORESOURCE_IRQ;
}
if (info->flags & PNP_MSC4) {
resource = new_resource(dev, PNP_IDX_MSC4);
resource->size = 1;
resource->flags |= IORESOURCE_IRQ;
}
if (info->flags & PNP_MSC10) {
resource = new_resource(dev, PNP_IDX_MSC10);
if (info->flags & PNP_MSC5) {
resource = new_resource(dev, PNP_IDX_MSC5);
resource->size = 1;
resource->flags |= IORESOURCE_IRQ;
}
if (info->flags & PNP_MSC6) {
resource = new_resource(dev, PNP_IDX_MSC6);
resource->size = 1;
resource->flags |= IORESOURCE_IRQ;
}
if (info->flags & PNP_MSC7) {
resource = new_resource(dev, PNP_IDX_MSC7);
resource->size = 1;
resource->flags |= IORESOURCE_IRQ;
}
if (info->flags & PNP_MSC8) {
resource = new_resource(dev, PNP_IDX_MSC8);
resource->size = 1;
resource->flags |= IORESOURCE_IRQ;
}
if (info->flags & PNP_MSC9) {
resource = new_resource(dev, PNP_IDX_MSC9);
resource->size = 1;
resource->flags |= IORESOURCE_IRQ;
}
if (info->flags & PNP_MSCA) {
resource = new_resource(dev, PNP_IDX_MSCA);
resource->size = 1;
resource->flags |= IORESOURCE_IRQ;
}
if (info->flags & PNP_MSCB) {
resource = new_resource(dev, PNP_IDX_MSCB);
resource->size = 1;
resource->flags |= IORESOURCE_IRQ;
}
if (info->flags & PNP_MSCC) {
resource = new_resource(dev, PNP_IDX_MSCC);
resource->size = 1;
resource->flags |= IORESOURCE_IRQ;
}
if (info->flags & PNP_MSCD) {
resource = new_resource(dev, PNP_IDX_MSCD);
resource->size = 1;
resource->flags |= IORESOURCE_IRQ;
}
if (info->flags & PNP_MSCE) {
resource = new_resource(dev, PNP_IDX_MSCE);
resource->size = 1;
resource->flags |= IORESOURCE_IRQ;
}