1 | /* $NetBSD: sysmon_envsysvar.h,v 1.47 2014/11/23 10:00:20 ozaki-r Exp $ */ |
2 | |
3 | /*- |
4 | * Copyright (c) 2007, 2008 Juan Romero Pardines. |
5 | * All rights reserved. |
6 | * |
7 | * Redistribution and use in source and binary forms, with or without |
8 | * modification, are permitted provided that the following conditions |
9 | * are met: |
10 | * 1. Redistributions of source code must retain the above copyright |
11 | * notice, this list of conditions and the following disclaimer. |
12 | * 2. Redistributions in binary form must reproduce the above copyright |
13 | * notice, this list of conditions and the following disclaimer in the |
14 | * documentation and/or other materials provided with the distribution. |
15 | * |
16 | * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR |
17 | * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES |
18 | * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. |
19 | * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, |
20 | * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT |
21 | * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
22 | * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
23 | * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
24 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF |
25 | * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
26 | */ |
27 | |
28 | #ifndef _DEV_SYSMON_ENVSYSVAR_H_ |
29 | #define _DEV_SYSMON_ENVSYSVAR_H_ |
30 | |
31 | #include <sys/param.h> |
32 | #include <sys/types.h> |
33 | #include <sys/conf.h> |
34 | #include <sys/kernel.h> |
35 | #include <sys/systm.h> |
36 | #include <sys/mutex.h> |
37 | #include <sys/workqueue.h> |
38 | #include <sys/condvar.h> |
39 | |
40 | #include <dev/sysmon/sysmonvar.h> |
41 | #include <prop/proplib.h> |
42 | |
43 | #ifdef _KERNEL_OPT |
44 | #include "opt_envsys.h" |
45 | #endif |
46 | |
47 | enum sme_descr_type { |
48 | SME_DESC_UNITS = 1, |
49 | SME_DESC_STATES, |
50 | SME_DESC_DRIVE_STATES, |
51 | SME_DESC_BATTERY_CAPACITY, |
52 | SME_DESC_INDICATOR |
53 | }; |
54 | |
55 | #ifdef ENVSYS_DEBUG |
56 | #define DPRINTF(x) printf x |
57 | #else |
58 | #define DPRINTF(x) |
59 | #endif |
60 | |
61 | #ifdef ENVSYS_OBJECTS_DEBUG |
62 | #define DPRINTFOBJ(x) printf x |
63 | #else |
64 | #define DPRINTFOBJ(x) |
65 | #endif |
66 | |
67 | /* |
68 | * Default timeout value for the callouts if no specified. |
69 | */ |
70 | #define SME_EVENTS_DEFTIMEOUT 30 |
71 | |
72 | /* |
73 | * struct used by a sysmon envsys event. |
74 | */ |
75 | typedef struct sme_event { |
76 | struct work see_wk; |
77 | LIST_ENTRY(sme_event) see_list; |
78 | struct sysmon_envsys *see_sme; /* device associated */ |
79 | struct penvsys_state see_pes; /* our power envsys */ |
80 | envsys_data_t *see_edata; /* our sensor data */ |
81 | int see_type; /* type of the event */ |
82 | int see_evstate; /* state of prev event */ |
83 | int see_evvalue; /* value of prev event */ |
84 | int see_flags; /* see above */ |
85 | #define SEE_EVENT_WORKING 0x0001 /* This event is busy */ |
86 | } sme_event_t; |
87 | |
88 | /* |
89 | * struct by a sysmon envsys event set by a driver. |
90 | */ |
91 | typedef struct sme_event_drv { |
92 | struct sysmon_envsys *sed_sme; |
93 | prop_dictionary_t sed_sdict; |
94 | envsys_data_t *sed_edata; |
95 | int sed_powertype; |
96 | } sme_event_drv_t; |
97 | |
98 | struct sme_descr_entry { |
99 | int type; |
100 | int crittype; |
101 | const char *desc; |
102 | }; |
103 | |
104 | /* |
105 | * common stuff. |
106 | */ |
107 | extern kmutex_t sme_global_mtx; /* for the sme linked list and dict */ |
108 | extern prop_dictionary_t sme_propd; /* the global sensor dictionary */ |
109 | |
110 | /* |
111 | * linked list for the sysmon envsys devices. |
112 | */ |
113 | LIST_HEAD(sysmon_envsys_lh, sysmon_envsys); |
114 | extern struct sysmon_envsys_lh sysmon_envsys_list; |
115 | |
116 | /* |
117 | * functions to handle sysmon envsys devices. |
118 | */ |
119 | int sme_update_dictionary(struct sysmon_envsys *); |
120 | int sme_update_sensor_dictionary(prop_object_t, envsys_data_t *, bool); |
121 | int sme_userset_dictionary(struct sysmon_envsys *, |
122 | prop_dictionary_t, prop_array_t); |
123 | prop_dictionary_t sme_sensor_dictionary_get(prop_array_t, const char *); |
124 | struct sysmon_envsys *sysmon_envsys_find(const char *); |
125 | void sysmon_envsys_acquire(struct sysmon_envsys *, bool); |
126 | void sysmon_envsys_release(struct sysmon_envsys *, bool); |
127 | |
128 | /* |
129 | * functions to handle sysmon envsys events. |
130 | */ |
131 | int sme_event_register(prop_dictionary_t, envsys_data_t *, |
132 | struct sysmon_envsys *, sysmon_envsys_lim_t *, |
133 | uint32_t, int, int); |
134 | int sme_event_unregister(struct sysmon_envsys *, const char *, int); |
135 | int sme_event_unregister_sensor(struct sysmon_envsys *, envsys_data_t *); |
136 | void sme_event_unregister_all(struct sysmon_envsys *); |
137 | void sme_event_drvadd(void *); |
138 | int sme_events_init(struct sysmon_envsys *); |
139 | void sme_events_destroy(struct sysmon_envsys *); |
140 | void sme_events_halt_callout(struct sysmon_envsys *); |
141 | void sme_events_check(void *); |
142 | void sme_events_worker(struct work *, void *); |
143 | void sme_deliver_event(sme_event_t *); |
144 | int sme_update_limits(struct sysmon_envsys *, envsys_data_t *); |
145 | void sme_schedule_callout(struct sysmon_envsys *); |
146 | |
147 | /* |
148 | * common functions to create/update objects in a dictionary. |
149 | */ |
150 | int sme_sensor_upbool(prop_dictionary_t, const char *, bool); |
151 | int sme_sensor_upint32(prop_dictionary_t, const char *, int32_t); |
152 | int sme_sensor_upuint32(prop_dictionary_t, const char *, uint32_t); |
153 | int sme_sensor_upstring(prop_dictionary_t, const char *, const char *); |
154 | |
155 | const struct sme_descr_entry *sme_find_table_entry(enum sme_descr_type, int); |
156 | const struct sme_descr_entry * sme_find_table_desc(enum sme_descr_type, |
157 | const char *); |
158 | |
159 | #endif /* _DEV_SYSMON_ENVSYSVAR_H_ */ |
160 | |