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