Page MenuHomeFreeBSD

D21529.id61672.diff
No OneTemporary

D21529.id61672.diff

Index: share/man/man4/acpi_wmi.4
===================================================================
--- share/man/man4/acpi_wmi.4
+++ share/man/man4/acpi_wmi.4
@@ -24,7 +24,7 @@
.\"
.\" $FreeBSD$
.\"
-.Dd November 22, 2011
+.Dd Sep 5, 2019
.Dt ACPI_WMI 4
.Os
.Sh NAME
@@ -56,6 +56,13 @@
.It Pa /dev/wmistat%d
WMI status device.
.El
+.Sh SYSCTLS
+The following sysctl nodes are currently implemented:
+.Bl -tag -width indent
+.It Va dev.acpi_wmi.%d.bmof
+Managed Object Format (MOF) blob. You can obtain human readable output by bmf2mof in bmfdec tool. (https://github.com/pali/bmfdec)
+.El
+
.Sh EXAMPLES
.Bd -literal
# cat /dev/wmistat0
@@ -72,6 +79,20 @@
{8232DE3D-663D-4327-A8F4-E293ADB9BF05} 0 NO NO NO NO BG
{8F1F6436-9F42-42C8-BADC-0E9424F20C9A} 0 NO NO NO NO BH
{8F1F6435-9F42-42C8-BADC-0E9424F20C9A} 0 NO NO NO NO BI
+# sysctl -b dev.acpi_wmi.0.bmof |bmf2mof
+[abstract]
+class Lenovo_BIOSElement {
+};
+
+[WMI, Dynamic, Provider("WMIProv"), WmiExpense(1), Description("Bios Setting"),
+GUID("{51F5230E-9677-46cd-A1CF-C0B23EE34DB7}"), Locale("MS\\0x409")]
+class Lenovo_BiosSetting : Lenovo_BiosElement {
+ [key, read] String InstanceName;
+ [read] Boolean Active;
+ [WmiDataId(1), Description("BIOS setting")] String CurrentSetting;
+ };
+ bra. bra.
+
.Ed
.Sh SEE ALSO
.Xr acpi 4
@@ -91,6 +112,8 @@
.Pp
See http://www.microsoft.com/whdc/system/pnppwr/wmi/wmi-acpi.mspx for
the specification of ACPI-WMI.
+.Pp
+MOF part hasbeen inspired by the Linux wmi-bmof driver written by Andy Lutomirski .
.Pp
This manual page was written by
.An Michael Gmelin Aq Mt freebsd@grem.de .
Index: sys/dev/acpi_support/acpi_wmi.c
===================================================================
--- sys/dev/acpi_support/acpi_wmi.c
+++ sys/dev/acpi_support/acpi_wmi.c
@@ -62,6 +62,7 @@
#define ACPI_WMI_REGFLAG_METHOD 0x2 /* GUID flag: Method call */
#define ACPI_WMI_REGFLAG_STRING 0x4 /* GUID flag: String */
#define ACPI_WMI_REGFLAG_EVENT 0x8 /* GUID flag: Event */
+#define ACPI_WMI_BMOF_UUID "05901221-D566-11D1-B2F0-00A0C9062910"
/*
* acpi_wmi driver private structure
@@ -74,6 +75,8 @@
struct sbuf wmistat_sbuf; /* sbuf for /dev/wmistat output */
pid_t wmistat_open_pid; /* pid operating on /dev/wmistat */
int wmistat_bufptr; /* /dev/wmistat ptr to buffer position */
+ char *mofbuf;
+
TAILQ_HEAD(wmi_info_list_head, wmi_info) wmi_info_list;
};
@@ -274,6 +277,28 @@
}
ACPI_SERIAL_END(acpi_wmi);
+ if(acpi_wmi_provides_guid_string_method(dev,
+ ACPI_WMI_BMOF_UUID)){
+ ACPI_BUFFER out = { ACPI_ALLOCATE_BUFFER, NULL};
+ ACPI_OBJECT *obj;
+ device_printf(dev, "Embedded MOF found\n");
+ status = acpi_wmi_get_block_method(dev, ACPI_WMI_BMOF_UUID,
+ 0, &out);
+ if (ACPI_SUCCESS(status)){
+ obj = out.Pointer;
+ if (obj && obj->Type == ACPI_TYPE_BUFFER){
+ SYSCTL_ADD_OPAQUE
+ (device_get_sysctl_ctx(dev),
+ SYSCTL_CHILDREN(device_get_sysctl_tree(dev)),
+ OID_AUTO, "bmof",
+ CTLFLAG_RD | CTLFLAG_MPSAFE,
+ obj->Buffer.Pointer,
+ obj->Buffer.Length, "A", "MOF Blob");
+ }
+ }
+ sc->mofbuf = out.Pointer;
+ }
+
if (ret == 0) {
bus_generic_probe(dev);
ret = bus_generic_attach(dev);
@@ -299,7 +324,6 @@
ACPI_FUNCTION_TRACE((char *)(uintptr_t)__func__);
sc = device_get_softc(dev);
ACPI_SERIAL_BEGIN(acpi_wmi);
-
if (sc->wmistat_open_pid != 0) {
ret = EBUSY;
} else {
@@ -321,6 +345,9 @@
sc->wmistat_open_pid = 0;
destroy_dev(sc->wmistat_dev_t);
ret = 0;
+ if(sc->mofbuf){
+ AcpiOsFree(sc->mofbuf);
+ }
}
ACPI_SERIAL_END(acpi_wmi);

File Metadata

Mime Type
text/plain
Expires
Sat, Jan 31, 7:13 PM (7 h, 49 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
28161946
Default Alt Text
D21529.id61672.diff (3 KB)

Event Timeline