summaryrefslogtreecommitdiff
path: root/sys/arch/hpc/include/config_hook.h
blob: efe3c2b3403239ac3b37a55813595de74f396340 (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
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
/*	$NetBSD: config_hook.h,v 1.7 2006/02/16 20:17:13 perry Exp $	*/

/*-
 * Copyright (c) 1999-2001
 *         Shin Takemura and PocketBSD Project. All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions
 * are met:
 * 1. Redistributions of source code must retain the above copyright
 *    notice, this list of conditions and the following disclaimer.
 * 2. Redistributions in binary form must reproduce the above copyright
 *    notice, this list of conditions and the following disclaimer in the
 *    documentation and/or other materials provided with the distribution.
 * 3. All advertising materials mentioning features or use of this software
 *    must display the following acknowledgement:
 *	This product includes software developed by the PocketBSD project
 *	and its contributors.
 * 4. Neither the name of the project nor the names of its contributors
 *    may be used to endorse or promote products derived from this software
 *    without specific prior written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 * SUCH DAMAGE.
 *
 */

#ifndef _CONFIG_HOOK_H_
#define _CONFIG_HOOK_H_

enum config_hook_mode {
	CONFIG_HOOK_SHARE,
	CONFIG_HOOK_REPLACE,
	CONFIG_HOOK_EXCLUSIVE,
};

typedef void *config_hook_tag;
typedef void *config_call_tag;

void	config_hook_init(void);
config_hook_tag config_hook(int, long, enum config_hook_mode,
    int (*func)(void *, int, long, void *), void *);
void	config_unhook(config_hook_tag);
int	__config_hook_call(int, long, void *, int);
config_call_tag config_connect(int, long);
void	config_disconnect(config_call_tag crx);
int	config_connected_call(config_call_tag, void *);

static __inline int
config_hook_call(int type, long id, void *msg)
{
	return __config_hook_call(type, id, msg, 0);
}

static __inline int
config_hook_call_reverse(int type, long id, void *msg)
{
	return __config_hook_call(type, id, msg, 1);
}

/*
 * hook types and IDs
 */
/* apm releted events */
#define CONFIG_HOOK_PMEVENT		0
#define CONFIG_HOOK_PMEVENT_STANDBYREQ		0
#define CONFIG_HOOK_PMEVENT_SUSPENDREQ		1
#define CONFIG_HOOK_PMEVENT_HARDPOWER		2
#define CONFIG_HOOK_PMEVENT_BATTERY		3
#define CONFIG_HOOK_PMEVENT_AC			4


/* get value */
#define CONFIG_HOOK_GET			1
/* set value and send event */
#define CONFIG_HOOK_SET			2
/* external event */
#define CONFIG_HOOK_EVENT		CONFIG_HOOK_SET


/* CONFIG_HOOK_GET/CONFIG_HOOK_SET/CONFIG_HOOK_EVENT event id's */
#define CONFIG_HOOK_POWER_COM0			0
#define CONFIG_HOOK_POWER_COM1			1
#define CONFIG_HOOK_POWER_COM2			2
#define CONFIG_HOOK_POWER_COM3			3
#define CONFIG_HOOK_POWER_LCDLIGHT		4
#define CONFIG_HOOK_POWER_LCD			5
#define CONFIG_HOOK_POWER_SPEAKER		6
#define CONFIG_HOOK_BUTTON_POWER		7
#define CONFIG_HOOK_BUTTON_OK			8
#define CONFIG_HOOK_BUTTON_CANCEL		9
#define CONFIG_HOOK_BUTTON_UP			10
#define CONFIG_HOOK_BUTTON_DOWN			11
#define CONFIG_HOOK_BUTTON_REC			12
#define CONFIG_HOOK_BUTTON_COVER		13
#define CONFIG_HOOK_BUTTON_LIGHT		14
#define CONFIG_HOOK_BUTTON_CONTRAST		15
#define CONFIG_HOOK_BUTTON_APP0			16
#define CONFIG_HOOK_BUTTON_APP1			17
#define CONFIG_HOOK_BUTTON_APP2			18
#define CONFIG_HOOK_BUTTON_APP3			19
#define CONFIG_HOOK_BUTTON_LEFT			20
#define CONFIG_HOOK_BUTTON_RIGHT		21
#define CONFIG_HOOK_BUTTON_CONTRAST_UP		22
#define CONFIG_HOOK_BUTTON_CONTRAST_DOWN	23
#define CONFIG_HOOK_BUTTON_LIGHT_UP		24
#define CONFIG_HOOK_BUTTON_LIGHT_DOWN		25
#define CONFIG_HOOK_LED				26
#define CONFIG_HOOK_LED_MAX			27
#define CONFIG_HOOK_CONTRAST			28
#define CONFIG_HOOK_CONTRAST_MAX		29
#define CONFIG_HOOK_BRIGHTNESS			30
#define CONFIG_HOOK_BRIGHTNESS_MAX		31
#define CONFIG_HOOK_COM0_CTS			32
#define CONFIG_HOOK_COM1_CTS			33
#define CONFIG_HOOK_COM2_CTS			34
#define CONFIG_HOOK_COM3_CTS			35
#define CONFIG_HOOK_COM0_DCD			36
#define CONFIG_HOOK_COM1_DCD			37
#define CONFIG_HOOK_COM2_DCD			38
#define CONFIG_HOOK_COM3_DCD			39
#define CONFIG_HOOK_COM0_RTS			40
#define CONFIG_HOOK_COM1_RTS			41
#define CONFIG_HOOK_COM2_RTS			42
#define CONFIG_HOOK_COM3_RTS			43
#define CONFIG_HOOK_COM0_DTR			44
#define CONFIG_HOOK_COM1_DTR			45
#define CONFIG_HOOK_COM2_DTR			46
#define CONFIG_HOOK_COM3_DTR			47
#define CONFIG_HOOK_BATTERYVAL			48
#define CONFIG_HOOK_ACADAPTER			49
#define CONFIG_HOOK_CHARGE			50

/* power control type */
#define CONFIG_HOOK_POWERCONTROL	3
#define CONFIG_HOOK_POWERCONTROL_COM0		CONFIG_HOOK_POWER_COM0
#define CONFIG_HOOK_POWERCONTROL_COM1		CONFIG_HOOK_POWER_COM1
#define CONFIG_HOOK_POWERCONTROL_COM2		CONFIG_HOOK_POWER_COM2
#define CONFIG_HOOK_POWERCONTROL_COM3		CONFIG_HOOK_POWER_COM3
#define CONFIG_HOOK_POWERCONTROL_LCDLIGHT	CONFIG_HOOK_POWER_LCDLIGHT
#define CONFIG_HOOK_POWERCONTROL_LCD		CONFIG_HOOK_POWER_LCD
#define CONFIG_HOOK_POWERCONTROL_SPEAKER	CONFIG_HOOK_POWER_SPEAKER
#define CONFIG_HOOK_POWERCONTROL_LED		CONFIG_HOOK_LED

/* button event type */
#define CONFIG_HOOK_BUTTONEVENT		4
#define CONFIG_HOOK_BUTTONEVENT_POWER		CONFIG_HOOK_BUTTON_POWER
#define CONFIG_HOOK_BUTTONEVENT_OK		CONFIG_HOOK_BUTTON_OK
#define CONFIG_HOOK_BUTTONEVENT_CANCEL		CONFIG_HOOK_BUTTON_CANCEL
#define CONFIG_HOOK_BUTTONEVENT_UP		CONFIG_HOOK_BUTTON_UP
#define CONFIG_HOOK_BUTTONEVENT_DOWN		CONFIG_HOOK_BUTTON_DOWN
#define CONFIG_HOOK_BUTTONEVENT_REC		CONFIG_HOOK_BUTTON_REC
#define CONFIG_HOOK_BUTTONEVENT_COVER		CONFIG_HOOK_BUTTON_COVER
#define CONFIG_HOOK_BUTTONEVENT_LIGHT		CONFIG_HOOK_BUTTON_LIGHT
#define CONFIG_HOOK_BUTTONEVENT_CONTRAST	CONFIG_HOOK_BUTTON_CONTRAST
#define CONFIG_HOOK_BUTTONEVENT_APP0		CONFIG_HOOK_BUTTON_APP0
#define CONFIG_HOOK_BUTTONEVENT_APP1		CONFIG_HOOK_BUTTON_APP1
#define CONFIG_HOOK_BUTTONEVENT_APP2		CONFIG_HOOK_BUTTON_APP2
#define CONFIG_HOOK_BUTTONEVENT_APP3		CONFIG_HOOK_BUTTON_APP3
#define CONFIG_HOOK_BUTTONEVENT_LEFT		CONFIG_HOOK_BUTTON_LEFT
#define CONFIG_HOOK_BUTTONEVENT_RIGHT		CONFIG_HOOK_BUTTON_RIGHT
#define CONFIG_HOOK_BUTTONEVENT_CONTRAST_UP	CONFIG_HOOK_BUTTON_CONTRAST_UP
#define CONFIG_HOOK_BUTTONEVENT_CONTRAST_DOWN	CONFIG_HOOK_BUTTON_CONTRAST_DOWN
#define CONFIG_HOOK_BUTTONEVENT_LIGHT_UP	CONFIG_HOOK_BUTTON_LIGHT_UP
#define CONFIG_HOOK_BUTTONEVENT_LIGHT_DOWN	CONFIG_HOOK_BUTTON_LIGHT_DOWN

/* PCI interrupt type */
#define CONFIG_HOOK_PCIINTR		5
#define CONFIG_HOOK_PCIINTR_ID(bus, dev, func) \
	(((bus) << 16) | ((dev) << 11) | ((func) << 8))
#define CONFIG_HOOK_PCIINTR_BUS(id)		(((id) >> 16) & 0xff)
#define CONFIG_HOOK_PCIINTR_DEVICE(id)		(((id) >> 11) & 0x1f)
#define CONFIG_HOOK_PCIINTR_FUNCTION(id)	(((id) >>  8) & 0x07)

#define CONFIG_HOOK_NTYPES 		6

/*
 * nicknames for including from configuration file.
 */
#ifdef CONFIG_HOOK_DEFINE_NICKNAME
/* type nicknames */
#define PMEVENT		CONFIG_HOOK_PMEVENT
#define SET		CONFIG_HOOK_SET
#define EVENT		CONFIG_HOOK_EVENT
#define GET		CONFIG_HOOK_GET
#define POWER		CONFIG_HOOK_POWERCONTROL
#define BUTTON		CONFIG_HOOK_BUTTONEVENT
#define PCIINTR		CONFIG_HOOK_PCIINTR

/* ID nicknames */
/* power contorol */
#define PWCTL_COM0	CONFIG_HOOK_POWER_COM0
#define PWCTL_COM1	CONFIG_HOOK_POWER_COM1
#define PWCTL_COM2	CONFIG_HOOK_POWER_COM2
#define PWCTL_COM3	CONFIG_HOOK_POWER_COM3
#define PWCTL_LCDLIGHT	CONFIG_HOOK_POWER_LCDLIGHT
#define PWCTL_LCD	CONFIG_HOOK_POWER_LCD
#define PWCTL_SPEAKER	CONFIG_HOOK_POWER_SPEAKER
#define PWCTL_LED	CONFIG_HOOK_LED
/* buttons */
#define BTN_POWER	CONFIG_HOOK_BUTTON_POWER
#define BTN_OK		CONFIG_HOOK_BUTTON_OK
#define BTN_CANCEL	CONFIG_HOOK_BUTTON_CANCEL
#define BTN_UP		CONFIG_HOOK_BUTTON_UP
#define BTN_DOWN	CONFIG_HOOK_BUTTON_DOWN
#define BTN_REC		CONFIG_HOOK_BUTTON_REC
#define BTN_COVER	CONFIG_HOOK_BUTTON_COVER
#define BTN_LIGHT	CONFIG_HOOK_BUTTON_LIGHT
#define BTN_CONTRAST	CONFIG_HOOK_BUTTON_CONTRAST
#define BTN_APP0	CONFIG_HOOK_BUTTON_APP0
#define BTN_APP1	CONFIG_HOOK_BUTTON_APP1
#define BTN_APP2	CONFIG_HOOK_BUTTON_APP2
#define BTN_APP3	CONFIG_HOOK_BUTTON_APP3
#define BTN_LEFT	CONFIG_HOOK_BUTTON_LEFT
#define BTN_RIGHT	CONFIG_HOOK_BUTTON_RIGHT
#define BTN_CONTRAST_UP	CONFIG_HOOK_BUTTON_CONTRAST_UP
#define BTN_CONTRAST_DN	CONFIG_HOOK_BUTTON_CONTRAST_DOWN
#define BTN_LIGHT_UP	CONFIG_HOOK_BUTTON_LIGHT_UP
#define BTN_LIGHT_DN	CONFIG_HOOK_BUTTON_LIGHT_DOWN
/* PMEVENT */
#define PME_STANBY	CONFIG_HOOK_PMEVENT_STANDBYREQ
#define PME_SUSPEND	CONFIG_HOOK_PMEVENT_SUSPENDREQ
#define PME_HARDPOWER	CONFIG_HOOK_PMEVENT_HARDPOWER
#define	PME_BATTERY	CONFIG_HOOK_PMEVENT_BATTERY
#define	PME_AC		CONFIG_HOOK_PMEVENT_AC
/* set/get */
#define POWER_COM0	CONFIG_HOOK_POWER_COM0	
#define POWER_COM1	CONFIG_HOOK_POWER_COM1	
#define POWER_COM2	CONFIG_HOOK_POWER_COM2	
#define POWER_COM3	CONFIG_HOOK_POWER_COM3	
#define POWER_LCDLIGHT	CONFIG_HOOK_POWER_LCDLIGHT
#define POWER_LCD	CONFIG_HOOK_POWER_LCD
#define POWER_SPEAKER	CONFIG_HOOK_POWER_SPEAKER
#define BUTTON_POWER	CONFIG_HOOK_BUTTON_POWER
#define BUTTON_OK	CONFIG_HOOK_BUTTON_OK
#define BUTTON_CANCEL	CONFIG_HOOK_BUTTON_CANCEL
#define BUTTON_UP	CONFIG_HOOK_BUTTON_UP
#define BUTTON_DOWN	CONFIG_HOOK_BUTTON_DOWN
#define BUTTON_REC	CONFIG_HOOK_BUTTON_REC
#define BUTTON_COVER	CONFIG_HOOK_BUTTON_COVER
#define BUTTON_LIGHT	CONFIG_HOOK_BUTTON_LIGHT
#define BUTTON_CONTRAST	CONFIG_HOOK_BUTTON_CONTRAST
#define BUTTON_APP0	CONFIG_HOOK_BUTTON_APP0
#define BUTTON_APP1	CONFIG_HOOK_BUTTON_APP1
#define BUTTON_APP2	CONFIG_HOOK_BUTTON_APP2
#define BUTTON_APP3	CONFIG_HOOK_BUTTON_APP3
#define BUTTON_LEFT	CONFIG_HOOK_BUTTON_LEFT
#define BUTTON_RIGHT	CONFIG_HOOK_BUTTON_RIGHT
#define BUTTON_CONTRAST_UP	CONFIG_HOOK_BUTTON_CONTRAST_UP
#define BUTTON_CONTRAST_DOWN	CONFIG_HOOK_BUTTON_CONTRAST_DOWN
#define BUTTON_LIFHT_UP	CONFIG_HOOK_BUTTON_LIGHT_UP
#define BUTTON_LIFHT_DOWN	CONFIG_HOOK_BUTTON_LIGHT_DOWN
#define LED		CONFIG_HOOK_LED
#define LED_MAX		CONFIG_HOOK_LED_MAX
#define CONTRAST	CONFIG_HOOK_CONTRAST
#define CONTRAST_MAX	CONFIG_HOOK_CONTRAST_MAX
#define BRIGHTNESS	CONFIG_HOOK_BRIGHTNESS
#define BRIGHTNESS_MAX	CONFIG_HOOK_BRIGHTNESS_MAX
#define COM0_CTS	CONFIG_HOOK_COM0_CTS
#define COM1_CTS	CONFIG_HOOK_COM1_CTS
#define COM2_CTS	CONFIG_HOOK_COM2_CTS
#define COM3_CTS	CONFIG_HOOK_COM3_CTS
#define COM0_DCD	CONFIG_HOOK_COM0_DCD
#define COM1_DCD	CONFIG_HOOK_COM1_DCD
#define COM2_DCD	CONFIG_HOOK_COM2_DCD
#define COM3_DCD	CONFIG_HOOK_COM3_DCD
#define COM0_RTS	CONFIG_HOOK_COM0_RTS
#define COM1_RTS	CONFIG_HOOK_COM1_RTS
#define COM2_RTS	CONFIG_HOOK_COM2_RTS
#define COM3_RTS	CONFIG_HOOK_COM3_RTS
#define COM0_DTR	CONFIG_HOOK_COM0_DTR
#define COM1_DTR	CONFIG_HOOK_COM1_DTR
#define COM2_DTR	CONFIG_HOOK_COM2_DTR
#define COM3_DTR	CONFIG_HOOK_COM3_DTR
#define BATTERYVAL	CONFIG_HOOK_BATTERYVAL
#define ACADAPTER	CONFIG_HOOK_ACADAPTER
#define CHARGE		CONFIG_HOOK_CHARGE
/* PCI interrupt */
#define PCIINTR_ID(bus, dev, func)	CONFIG_HOOK_PCIINTR_ID(bus, dev, func)
#define PCIINTR_00_00_00	PCIINTR_ID(0,  0, 0)
#define PCIINTR_00_00_01	PCIINTR_ID(0,  0, 1)
#define PCIINTR_00_01_00	PCIINTR_ID(0,  1, 0)
#define PCIINTR_00_12_00	PCIINTR_ID(0, 12, 0)
#define PCIINTR_00_12_02	PCIINTR_ID(0, 12, 2)
#define PCIINTR_00_16_00	PCIINTR_ID(0, 16, 0)
#define PCIINTR_00_19_00	PCIINTR_ID(0, 19, 0)
#define PCIINTR_00_19_02	PCIINTR_ID(0, 19, 2)
#endif /* CONFIG_HOOK_DEFINE_NICKNAME */

/*
 * POWERCONTROL value
 */
#define PWCTL_ON	((void *)1)
#define PWCTL_OFF	((void *)0)

/* CONFIG_HOOK typical value */
#define	CONFIG_HOOK_ON	1
#define CONFIG_HOOK_OFF	0

/*
 * CONFIG_HOOK_LED value
 */
#define CONFIG_HOOK_LED_ON	0	
#define	CONFIG_HOOK_LED_OFF	1
#define CONFIG_HOOK_LED_FLASH	2	/* flash 100msec */
#define CONFIG_HOOK_LED_FLASH2	3	/* flash 200msec */
#define CONFIG_HOOK_LED_FLASH5	4	/* flash 500msec */
#define CONFIG_HOOK_LED_BLINK	5	/* blink 1sec interval */
#define CONFIG_HOOK_LED_BLINK2	6	/* blink 2sec interval */

/*
 * CONFIG_HOOK_AC event value
 */
#define CONFIG_HOOK_AC_OFF		0
#define CONFIG_HOOK_AC_ON_CHARGE	1
#define CONFIG_HOOK_AC_ON_NOCHARGE	2
#define CONFIG_HOOK_AC_UNKNOWN		3

/*
 * CONFIG_HOOK_BATTERY event value
 */
#define CONFIG_HOOK_BATT_CRITICAL	0
#define CONFIG_HOOK_BATT_10P		1
#define CONFIG_HOOK_BATT_20P		2
#define CONFIG_HOOK_BATT_30P		3
#define CONFIG_HOOK_BATT_LOW		4
#define CONFIG_HOOK_BATT_40P		5
#define CONFIG_HOOK_BATT_50P		6
#define CONFIG_HOOK_BATT_60P		7
#define CONFIG_HOOK_BATT_70P		8
#define CONFIG_HOOK_BATT_HIGH		9
#define CONFIG_HOOK_BATT_80P		10
#define CONFIG_HOOK_BATT_90P		11
#define CONFIG_HOOK_BATT_100P		12
#define CONFIG_HOOK_BATT_UNKNOWN	13
#define CONFIG_HOOK_BATT_NO_SYSTEM_BATTERY	14

#define CONFIG_HOOK_MAXVALUE	14	/* max value, check in this file */
#define CONFIG_HOOK_VALUEP(p)						\
	((int)(p) >=  0 && (int)(p) <= CONFIG_HOOK_MAXVALUE)
#define CONFIG_HOOK_PTRP(p)	(!CONFIG_HOOK_VALUEP(p))

#endif /* _CONFIG_HOOK_H_ */