summaryrefslogtreecommitdiff
path: root/usr/src/uts/common/sys/hotkey_drv.h
blob: dc036eefcf2c791efb0731641d38bee6c2d9951c (plain)
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 */