1 1.6 rin /* $NetBSD: wmi_acpivar.h,v 1.7 2020/04/16 23:29:52 rin Exp $ */ 2 1.1 jruoho 3 1.1 jruoho /*- 4 1.1 jruoho * Copyright (c) 2009, 2010 Jukka Ruohonen <jruohonen (at) iki.fi> 5 1.1 jruoho * All rights reserved. 6 1.1 jruoho * 7 1.1 jruoho * Redistribution and use in source and binary forms, with or without 8 1.1 jruoho * modification, are permitted provided that the following conditions 9 1.1 jruoho * are met: 10 1.1 jruoho * 11 1.1 jruoho * 1. Redistributions of source code must retain the above copyright 12 1.1 jruoho * notice, this list of conditions and the following disclaimer. 13 1.1 jruoho * 2. Redistributions in binary form must reproduce the above copyright 14 1.1 jruoho * notice, this list of conditions and the following disclaimer in the 15 1.1 jruoho * documentation and/or other materials provided with the distribution. 16 1.1 jruoho * 17 1.1 jruoho * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 18 1.1 jruoho * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 19 1.1 jruoho * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 20 1.1 jruoho * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 21 1.1 jruoho * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 22 1.1 jruoho * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 23 1.1 jruoho * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 24 1.1 jruoho * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 25 1.1 jruoho * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 26 1.1 jruoho * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 27 1.1 jruoho * SUCH DAMAGE. 28 1.1 jruoho */ 29 1.1 jruoho 30 1.2 jruoho #ifndef _SYS_DEV_ACPI_WMI_WMI_ACPIVAR_H 31 1.2 jruoho #define _SYS_DEV_ACPI_WMI_WMI_ACPIVAR_H 32 1.1 jruoho 33 1.7 rin #include <sys/cdefs.h> 34 1.7 rin __KERNEL_RCSID(0, "$NetBSD: wmi_acpivar.h,v 1.7 2020/04/16 23:29:52 rin Exp $"); 35 1.7 rin 36 1.1 jruoho ACPI_STATUS acpi_wmi_event_register(device_t, ACPI_NOTIFY_HANDLER); 37 1.1 jruoho ACPI_STATUS acpi_wmi_event_deregister(device_t); 38 1.1 jruoho ACPI_STATUS acpi_wmi_event_get(device_t, uint32_t, ACPI_BUFFER *); 39 1.1 jruoho 40 1.1 jruoho int acpi_wmi_guid_match(device_t, const char *); 41 1.1 jruoho 42 1.1 jruoho ACPI_STATUS acpi_wmi_data_query(device_t, const char *, 43 1.1 jruoho uint8_t, ACPI_BUFFER *); 44 1.1 jruoho ACPI_STATUS acpi_wmi_data_write(device_t, const char *, 45 1.1 jruoho uint8_t, ACPI_BUFFER *); 46 1.1 jruoho 47 1.1 jruoho ACPI_STATUS acpi_wmi_method(device_t, const char *, uint8_t, 48 1.1 jruoho uint32_t, ACPI_BUFFER *, ACPI_BUFFER *); 49 1.1 jruoho 50 1.3 pgoyette struct guid_t { 51 1.3 pgoyette 52 1.3 pgoyette /* 53 1.3 pgoyette * The GUID itself. The used format is the usual 32-16-16-64-bit 54 1.3 pgoyette * representation. All except the fourth field are in native byte 55 1.3 pgoyette * order. A 32-16-16-16-48-bit hexadecimal notation with hyphens 56 1.3 pgoyette * is used for human-readable GUIDs. 57 1.3 pgoyette */ 58 1.3 pgoyette struct { 59 1.3 pgoyette uint32_t data1; 60 1.3 pgoyette uint16_t data2; 61 1.3 pgoyette uint16_t data3; 62 1.3 pgoyette uint8_t data4[8]; 63 1.3 pgoyette } __packed; 64 1.3 pgoyette 65 1.3 pgoyette union { 66 1.3 pgoyette char oid[2]; /* ACPI object ID. */ 67 1.3 pgoyette 68 1.3 pgoyette struct { 69 1.3 pgoyette uint8_t nid; /* Notification value. */ 70 1.3 pgoyette uint8_t res; /* Reserved. */ 71 1.3 pgoyette } __packed; 72 1.3 pgoyette } __packed; 73 1.3 pgoyette 74 1.3 pgoyette uint8_t count; /* Number of instances. */ 75 1.3 pgoyette uint8_t flags; /* Additional flags. */ 76 1.3 pgoyette 77 1.3 pgoyette } __packed; 78 1.3 pgoyette 79 1.3 pgoyette #define ACPI_WMI_FLAG_EXPENSIVE 0x01 80 1.3 pgoyette #define ACPI_WMI_FLAG_METHOD 0x02 81 1.3 pgoyette #define ACPI_WMI_FLAG_STRING 0x04 82 1.3 pgoyette #define ACPI_WMI_FLAG_EVENT 0x08 83 1.3 pgoyette #define ACPI_WMI_FLAG_DATA (ACPI_WMI_FLAG_EXPENSIVE | \ 84 1.3 pgoyette ACPI_WMI_FLAG_STRING) 85 1.3 pgoyette 86 1.3 pgoyette struct wmi_t { 87 1.3 pgoyette struct guid_t guid; 88 1.3 pgoyette bool eevent; 89 1.3 pgoyette 90 1.3 pgoyette SIMPLEQ_ENTRY(wmi_t) wmi_link; 91 1.3 pgoyette }; 92 1.3 pgoyette 93 1.3 pgoyette struct acpi_wmi_softc { 94 1.5 jruoho device_t sc_dev; 95 1.5 jruoho device_t sc_child; 96 1.5 jruoho device_t sc_ecdev; 97 1.4 jruoho struct acpi_devnode *sc_node; 98 1.5 jruoho ACPI_NOTIFY_HANDLER sc_handler; 99 1.4 jruoho 100 1.3 pgoyette SIMPLEQ_HEAD(, wmi_t) wmi_head; 101 1.4 jruoho }; 102 1.3 pgoyette 103 1.3 pgoyette #define UGET16(x) (*(uint16_t *)(x)) 104 1.3 pgoyette #define UGET64(x) (*(uint64_t *)(x)) 105 1.3 pgoyette 106 1.3 pgoyette #define HEXCHAR(x) (((x) >= '0' && (x) <= '9') || \ 107 1.3 pgoyette ((x) >= 'a' && (x) <= 'f') || \ 108 1.3 pgoyette ((x) >= 'A' && (x) <= 'F')) 109 1.4 jruoho 110 1.3 pgoyette #define GUIDCMP(a, b) \ 111 1.3 pgoyette ((a)->data1 == (b)->data1 && \ 112 1.3 pgoyette (a)->data2 == (b)->data2 && \ 113 1.3 pgoyette (a)->data3 == (b)->data3 && \ 114 1.3 pgoyette UGET64((a)->data4) == UGET64((b)->data4)) 115 1.3 pgoyette 116 1.2 jruoho #endif /* !_SYS_DEV_ACPI_WMI_WMI_ACPIVAR_H */ 117