Page MenuHomeFreeBSD

D8721.id22851.diff
No OneTemporary

D8721.id22851.diff

Index: sys/dev/acpica/acpi.c
===================================================================
--- sys/dev/acpica/acpi.c
+++ sys/dev/acpica/acpi.c
@@ -68,6 +68,8 @@
#include <dev/acpica/acpivar.h>
#include <dev/acpica/acpiio.h>
+#include <dev/pci/pcivar.h>
+
#include <vm/vm_param.h>
static MALLOC_DEFINE(M_ACPIDEV, "acpidev", "ACPI devices");
@@ -923,6 +925,21 @@
case ISA_IVAR_LOGICALID:
*(int *)result = acpi_isa_get_logicalid(child);
break;
+ case PCI_IVAR_CLASS:
+ if (!ad->acpi_cls_present)
+ return (ENOENT);
+ *(uint8_t*)result = (ad->acpi_cls_class >> 16) & 0xff;
+ break;
+ case PCI_IVAR_SUBCLASS:
+ if (!ad->acpi_cls_present)
+ return (ENOENT);
+ *(uint8_t*)result = (ad->acpi_cls_class >> 8) & 0xff;
+ break;
+ case PCI_IVAR_PROGIF:
+ if (!ad->acpi_cls_present)
+ return (ENOENT);
+ *(uint8_t*)result = (ad->acpi_cls_class >> 0) & 0xff;
+ break;
default:
return (ENOENT);
}
@@ -1965,6 +1982,8 @@
static ACPI_STATUS
acpi_probe_child(ACPI_HANDLE handle, UINT32 level, void *context, void **status)
{
+ ACPI_DEVICE_INFO *devinfo;
+ struct acpi_device *ad;
struct acpi_prw_data prw;
ACPI_OBJECT_TYPE type;
ACPI_HANDLE h;
@@ -2058,6 +2077,17 @@
* device not to have any resources.
*/
acpi_parse_resources(child, handle, &acpi_res_parse_set, NULL);
+
+ if (ACPI_SUCCESS(AcpiGetObjectInfo(handle, &devinfo))) {
+ if ((devinfo->Valid & ACPI_VALID_CLS) != 0 &&
+ devinfo->ClassCode.Length >= ACPI_PCICLS_STRING_SIZE) {
+ ad = device_get_ivars(child);
+ ad->acpi_cls_class = strtoul(devinfo->ClassCode.String,
+ NULL, 16);
+ ad->acpi_cls_present = true;
+ }
+ AcpiOsFree(devinfo);
+ }
break;
}
}
Index: sys/dev/acpica/acpivar.h
===================================================================
--- sys/dev/acpica/acpivar.h
+++ sys/dev/acpica/acpivar.h
@@ -86,6 +86,9 @@
void *ad_private;
int ad_flags;
+ bool acpi_cls_present; /* True if _CLS is present */
+ int acpi_cls_class;
+
/* Resources */
struct resource_list ad_rl;
};

File Metadata

Mime Type
text/plain
Expires
Fri, Feb 27, 1:56 PM (19 h, 52 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
29032038
Default Alt Text
D8721.id22851.diff (2 KB)

Event Timeline