Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
freebsd
GitHub Repository: freebsd/freebsd-src
Path: blob/main/usr.sbin/apmd/apmd.h
103499 views
1
/*-
2
* SPDX-License-Identifier: BSD-2-Clause
3
*
4
* APM (Advanced Power Management) Event Dispatcher
5
*
6
* Copyright (c) 1999 Mitsuru IWASAKI <[email protected]>
7
* Copyright (c) 1999 KOIE Hidetaka <[email protected]>
8
* All rights reserved.
9
*
10
* Redistribution and use in source and binary forms, with or without
11
* modification, are permitted provided that the following conditions
12
* are met:
13
* 1. Redistributions of source code must retain the above copyright
14
* notice, this list of conditions and the following disclaimer.
15
* 2. Redistributions in binary form must reproduce the above copyright
16
* notice, this list of conditions and the following disclaimer in the
17
* documentation and/or other materials provided with the distribution.
18
*
19
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
20
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
21
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
22
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
23
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
24
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
25
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
26
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
27
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
28
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
29
* SUCH DAMAGE.
30
*/
31
32
#define APMD_CONFIGFILE "/etc/apmd.conf"
33
#define APM_CTL_DEVICEFILE "/dev/apmctl"
34
#define APM_NORM_DEVICEFILE "/dev/apm"
35
#define APMD_PIDFILE "/var/run/apmd.pid"
36
#define NICE_INCR -20
37
38
enum {
39
EVENT_NOEVENT,
40
EVENT_STANDBYREQ,
41
EVENT_SUSPENDREQ,
42
EVENT_NORMRESUME,
43
EVENT_CRITRESUME,
44
EVENT_BATTERYLOW,
45
EVENT_POWERSTATECHANGE,
46
EVENT_UPDATETIME,
47
EVENT_CRITSUSPEND,
48
EVENT_USERSTANDBYREQ,
49
EVENT_USERSUSPENDREQ,
50
EVENT_STANDBYRESUME,
51
EVENT_CAPABILITIESCHANGE,
52
EVENT_MAX
53
};
54
55
struct event_cmd_op {
56
int (* act)(void *this);
57
void (* dump)(void *this, FILE * fp);
58
struct event_cmd * (* clone)(void *this);
59
void (* free)(void *this);
60
};
61
struct event_cmd {
62
struct event_cmd * next;
63
size_t len;
64
char * name;
65
struct event_cmd_op * op;
66
};
67
struct event_cmd_exec {
68
struct event_cmd evcmd;
69
char * line; /* Command line */
70
};
71
struct event_cmd_reject {
72
struct event_cmd evcmd;
73
};
74
75
struct event_config {
76
const char *name;
77
struct event_cmd * cmdlist;
78
int rejectable;
79
};
80
81
struct battery_watch_event {
82
struct battery_watch_event *next;
83
int level;
84
enum {
85
BATTERY_CHARGING,
86
BATTERY_DISCHARGING
87
} direction;
88
enum {
89
BATTERY_MINUTES,
90
BATTERY_PERCENT
91
} type;
92
int done;
93
struct event_cmd *cmdlist;
94
};
95
96
97
extern struct event_cmd_op event_cmd_exec_ops;
98
extern struct event_cmd_op event_cmd_reject_ops;
99
extern struct event_config events[EVENT_MAX];
100
extern struct battery_watch_event *battery_watch_list;
101
102
extern int register_battery_handlers(
103
int level, int direction,
104
struct event_cmd *cmdlist);
105
extern int register_apm_event_handlers(
106
bitstr_t bit_decl(evlist, EVENT_MAX),
107
struct event_cmd *cmdlist);
108
extern void free_event_cmd_list(struct event_cmd *p);
109
110
extern int yyparse(void);
111
112
void yyerror(const char *);
113
int yylex(void);
114
115
struct event_cmd *event_cmd_default_clone(void *);
116
int event_cmd_exec_act(void *);
117
void event_cmd_exec_dump(void *, FILE *);
118
struct event_cmd *event_cmd_exec_clone(void *);
119
void event_cmd_exec_free(void *);
120
int event_cmd_reject_act(void *);
121
struct event_cmd *clone_event_cmd_list(struct event_cmd *);
122
int exec_run_cmd(struct event_cmd *);
123
int exec_event_cmd(struct event_config *);
124
void read_config(void);
125
void dump_config(void);
126
void destroy_config(void);
127
void restart(void);
128
void enque_signal(int);
129
void wait_child(void);
130
int proc_signal(int);
131
void proc_apmevent(int);
132
void check_battery(void);
133
void event_loop(void);
134
135