15db2f26eSSascha Wildner#- 25db2f26eSSascha Wildner# Copyright (c) 2009 Michael Gmelin 35db2f26eSSascha Wildner# All rights reserved. 45db2f26eSSascha Wildner# 55db2f26eSSascha Wildner# Redistribution and use in source and binary forms, with or without 65db2f26eSSascha Wildner# modification, are permitted provided that the following conditions 75db2f26eSSascha Wildner# are met: 85db2f26eSSascha Wildner# 1. Redistributions of source code must retain the above copyright 95db2f26eSSascha Wildner# notice, this list of conditions and the following disclaimer. 105db2f26eSSascha Wildner# 2. Redistributions in binary form must reproduce the above copyright 115db2f26eSSascha Wildner# notice, this list of conditions and the following disclaimer in the 125db2f26eSSascha Wildner# documentation and/or other materials provided with the distribution. 135db2f26eSSascha Wildner# 145db2f26eSSascha Wildner# THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 155db2f26eSSascha Wildner# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 165db2f26eSSascha Wildner# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 175db2f26eSSascha Wildner# ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 185db2f26eSSascha Wildner# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 195db2f26eSSascha Wildner# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 205db2f26eSSascha Wildner# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 215db2f26eSSascha Wildner# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 225db2f26eSSascha Wildner# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 235db2f26eSSascha Wildner# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 245db2f26eSSascha Wildner# SUCH DAMAGE. 255db2f26eSSascha Wildner# 26*0ce067b7SSascha Wildner# $FreeBSD: head/sys/dev/acpi_support/acpi_wmi_if.m 195185 2009-06-30 09:51:41Z rpaulo $ 275db2f26eSSascha Wildner# 285db2f26eSSascha Wildner 295db2f26eSSascha Wildner#include <sys/bus.h> 305db2f26eSSascha Wildner#include <sys/types.h> 315db2f26eSSascha Wildner#include "acpi.h" 325db2f26eSSascha Wildner 335db2f26eSSascha WildnerINTERFACE acpi_wmi; 345db2f26eSSascha Wildner 355db2f26eSSascha Wildner# 365db2f26eSSascha Wildner# Default implementation for acpi_wmi_generic_provides_guid_string(). 375db2f26eSSascha Wildner# 385db2f26eSSascha WildnerCODE { 395db2f26eSSascha Wildner static int 405db2f26eSSascha Wildner acpi_wmi_generic_provides_guid_string(device_t dev, const char* guid_string) 415db2f26eSSascha Wildner { 425db2f26eSSascha Wildner return 0; 435db2f26eSSascha Wildner } 445db2f26eSSascha Wildner}; 455db2f26eSSascha Wildner 465db2f26eSSascha Wildner 475db2f26eSSascha Wildner# 485db2f26eSSascha Wildner# Check if given GUID exists in WMI 495db2f26eSSascha Wildner# Returns number of instances (max_instace+1) or 0 if guid doesn't exist 505db2f26eSSascha Wildner# 515db2f26eSSascha Wildner# device_t dev: Device to probe 525db2f26eSSascha Wildner# const char* guid_string: String form of the GUID 535db2f26eSSascha Wildner# 545db2f26eSSascha WildnerMETHOD int provides_guid_string { 555db2f26eSSascha Wildner device_t dev; 565db2f26eSSascha Wildner const char* guid_string; 575db2f26eSSascha Wildner} DEFAULT acpi_wmi_generic_provides_guid_string; 585db2f26eSSascha Wildner 595db2f26eSSascha Wildner# 605db2f26eSSascha Wildner# Evaluate a WMI method call 615db2f26eSSascha Wildner# 625db2f26eSSascha Wildner# device_t dev: Device to use 635db2f26eSSascha Wildner# const char* guid_string: String form of the GUID 645db2f26eSSascha Wildner# UINT8 instance: instance id 655db2f26eSSascha Wildner# UINT32 method_id: method to call 665db2f26eSSascha Wildner# const ACPI_BUFFER* in: input data 675db2f26eSSascha Wildner# ACPI_BUFFER* out: output buffer 685db2f26eSSascha Wildner# 695db2f26eSSascha WildnerMETHOD ACPI_STATUS evaluate_call { 705db2f26eSSascha Wildner device_t dev; 715db2f26eSSascha Wildner const char *guid_string; 725db2f26eSSascha Wildner UINT8 instance; 735db2f26eSSascha Wildner UINT32 method_id; 745db2f26eSSascha Wildner const ACPI_BUFFER *in; 755db2f26eSSascha Wildner ACPI_BUFFER *out; 765db2f26eSSascha Wildner}; 775db2f26eSSascha Wildner 785db2f26eSSascha Wildner# 795db2f26eSSascha Wildner# Get content of a WMI block 805db2f26eSSascha Wildner# 815db2f26eSSascha Wildner# device_t dev: Device to use 825db2f26eSSascha Wildner# const char* guid_string: String form of the GUID 835db2f26eSSascha Wildner# UINT8 instance: instance id 845db2f26eSSascha Wildner# ACPI_BUFFER* out: output buffer 855db2f26eSSascha Wildner# 865db2f26eSSascha WildnerMETHOD ACPI_STATUS get_block { 875db2f26eSSascha Wildner device_t dev; 885db2f26eSSascha Wildner const char *guid_string; 895db2f26eSSascha Wildner UINT8 instance; 905db2f26eSSascha Wildner ACPI_BUFFER *out; 915db2f26eSSascha Wildner}; 925db2f26eSSascha Wildner# 935db2f26eSSascha Wildner# Write to a WMI data block 945db2f26eSSascha Wildner# 955db2f26eSSascha Wildner# device_t dev: Device to use 965db2f26eSSascha Wildner# const char* guid_string: String form of the GUID 975db2f26eSSascha Wildner# UINT8 instance: instance id 985db2f26eSSascha Wildner# const ACPI_BUFFER* in: input data 995db2f26eSSascha Wildner# 1005db2f26eSSascha WildnerMETHOD ACPI_STATUS set_block { 1015db2f26eSSascha Wildner device_t dev; 1025db2f26eSSascha Wildner const char *guid_string; 1035db2f26eSSascha Wildner UINT8 instance; 1045db2f26eSSascha Wildner const ACPI_BUFFER *in; 1055db2f26eSSascha Wildner}; 1065db2f26eSSascha Wildner 1075db2f26eSSascha Wildner# 1085db2f26eSSascha Wildner# Install wmi event handler 1095db2f26eSSascha Wildner# 1105db2f26eSSascha Wildner# device_t dev: Device to use 1115db2f26eSSascha Wildner# const char* guid_string: String form of the GUID 1125db2f26eSSascha Wildner# ACPI_NOTIFY_HANDLER handler: Handler 1135db2f26eSSascha Wildner# void* data: Payload 1145db2f26eSSascha Wildner# 1155db2f26eSSascha WildnerMETHOD ACPI_STATUS install_event_handler { 1165db2f26eSSascha Wildner device_t dev; 1175db2f26eSSascha Wildner const char *guid_string; 1185db2f26eSSascha Wildner ACPI_NOTIFY_HANDLER handler; 1195db2f26eSSascha Wildner void *data; 1205db2f26eSSascha Wildner}; 1215db2f26eSSascha Wildner 1225db2f26eSSascha Wildner# 1235db2f26eSSascha Wildner# Remove wmi event handler 1245db2f26eSSascha Wildner# 1255db2f26eSSascha Wildner# device_t dev: Device to use 1265db2f26eSSascha Wildner# const char* guid_string: String form of the GUID 1275db2f26eSSascha Wildner# 1285db2f26eSSascha WildnerMETHOD ACPI_STATUS remove_event_handler { 1295db2f26eSSascha Wildner device_t dev; 1305db2f26eSSascha Wildner const char *guid_string; 1315db2f26eSSascha Wildner}; 1325db2f26eSSascha Wildner 1335db2f26eSSascha Wildner 1345db2f26eSSascha Wildner# 1355db2f26eSSascha Wildner# Get event data associated to an event 1365db2f26eSSascha Wildner# 1375db2f26eSSascha Wildner# device_t dev: Device to use 1385db2f26eSSascha Wildner# UINT32 event_id: event id 1395db2f26eSSascha Wildner# ACPI_BUFFER* out: output buffer 1405db2f26eSSascha Wildner# 1415db2f26eSSascha WildnerMETHOD ACPI_STATUS get_event_data { 1425db2f26eSSascha Wildner device_t dev; 1435db2f26eSSascha Wildner UINT32 event_id; 1445db2f26eSSascha Wildner ACPI_BUFFER *out; 1455db2f26eSSascha Wildner}; 146