1 /* 2 * CDDL HEADER START 3 * 4 * The contents of this file are subject to the terms of the 5 * Common Development and Distribution License (the "License"). 6 * You may not use this file except in compliance with the License. 7 * 8 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 9 * or http://www.opensolaris.org/os/licensing. 10 * See the License for the specific language governing permissions 11 * and limitations under the License. 12 * 13 * When distributing Covered Code, include this CDDL HEADER in each 14 * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 15 * If applicable, add the following below this CDDL HEADER, with the 16 * fields enclosed by brackets "[]" replaced with your own identifying 17 * information: Portions Copyright [yyyy] [name of copyright owner] 18 * 19 * CDDL HEADER END 20 */ 21 22 /* 23 * Copyright 2009 Sun Microsystems, Inc. All rights reserved. 24 * Use is subject to license terms. 25 */ 26 27 #ifndef _HOTKEY_DRV_H 28 #define _HOTKEY_DRV_H 29 30 #ifdef __cplusplus 31 extern "C" { 32 #endif 33 34 #include <sys/types.h> 35 #include <sys/conf.h> 36 #include <sys/stat.h> 37 #include <sys/note.h> 38 #include <sys/modctl.h> 39 #include <sys/ddi.h> 40 #include <sys/sunddi.h> 41 #include <acpica/include/acpi.h> 42 #include <sys/acpica.h> 43 #include <sys/sysevent/eventdefs.h> 44 #include <sys/acpi_drv.h> 45 46 47 #define ID_LEN 9 48 49 struct acpi_drv_dev { 50 ACPI_HANDLE hdl; 51 char hid[ID_LEN]; /* ACPI HardwareId */ 52 char uid[ID_LEN]; /* ACPI UniqueId */ 53 ACPI_INTEGER adr; /* Bus device Id */ 54 int valid; /* the device state is valid */ 55 56 /* 57 * Unlike most other devices, when a battery is inserted or 58 * removed from the system, the device itself(the battery bay) 59 * is still considered to be present in the system. 60 * 61 * Value: 62 * 0 -- Off-line 63 * 1 -- On-line 64 * -1 -- Unknown 65 */ 66 int present; 67 enum acpi_drv_type type; 68 int index; /* device index */ 69 int minor; 70 }; 71 72 /* 73 * hotkey driver soft-state structure 74 */ 75 typedef struct hotkey_drv { 76 struct acpi_drv_dev dev; 77 dev_info_t *dip; 78 void *private; /* Vendor specific structure */ 79 kmutex_t *hotkey_lock; 80 int hotkey_method; 81 int modid; 82 int (*vendor_ioctl)(struct hotkey_drv *, 83 int cmd, intptr_t arg, int mode, 84 cred_t *cr, int *rval); 85 int (*vendor_fini)(struct hotkey_drv *); 86 boolean_t check_acpi_video; 87 void *acpi_video; 88 } hotkey_drv_t; 89 90 /* 91 * Collection of vendor specific hotkey support 92 */ 93 struct vendor_hotkey_drv { 94 const char *vid; 95 const char *module; 96 boolean_t enable; 97 }; 98 99 #define HOTKEY_DRV_OK 0 100 #define HOTKEY_DRV_ERR -1 101 #define HOTKEY_DBG_NOTICE 0x8000 102 #define HOTKEY_DBG_WARN 0x0001 103 104 #define HOTKEY_METHOD_NONE 0x0 105 #define HOTKEY_METHOD_VENDOR 0x1 106 #define HOTKEY_METHOD_ACPI_VIDEO 0x2 107 #define HOTKEY_METHOD_MISC (HOTKEY_METHOD_VENDOR | \ 108 HOTKEY_METHOD_ACPI_VIDEO) 109 /* 110 * Inter-source-file linkage ... 111 */ 112 extern struct hotkey_drv acpi_hotkey; 113 extern int hotkey_drv_debug; 114 int acpi_drv_set_int(ACPI_HANDLE dev, char *method, uint32_t aint); 115 void acpi_drv_gen_sysevent(struct acpi_drv_dev *devp, char *ev, uint32_t val); 116 int acpi_drv_dev_init(struct acpi_drv_dev *p); 117 118 int hotkey_init(hotkey_drv_t *htkp); 119 int hotkey_fini(hotkey_drv_t *htkp); 120 int acpi_drv_hotkey_ioctl(int cmd, intptr_t arg, int mode, cred_t *cr, 121 int *rval); 122 int acpi_video_ioctl(void *vidp, int cmd, intptr_t arg, int mode, cred_t *cr, 123 int *rval); 124 int hotkey_brightness_inc(hotkey_drv_t *htkp); 125 int hotkey_brightness_dec(hotkey_drv_t *htkp); 126 void hotkey_drv_gen_sysevent(dev_info_t *, char *); 127 128 #ifdef __cplusplus 129 } 130 #endif 131 132 #endif /* _HOTKEY_DRV_H */