Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
freebsd
GitHub Repository: freebsd/freebsd-src
Path: blob/main/sys/dev/acpica/acpi_if.m
39507 views
1
#-
2
# Copyright (c) 2004 Nate Lawson
3
# All rights reserved.
4
#
5
# Redistribution and use in source and binary forms, with or without
6
# modification, are permitted provided that the following conditions
7
# are met:
8
# 1. Redistributions of source code must retain the above copyright
9
# notice, this list of conditions and the following disclaimer.
10
# 2. Redistributions in binary form must reproduce the above copyright
11
# notice, this list of conditions and the following disclaimer in the
12
# documentation and/or other materials provided with the distribution.
13
#
14
# THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
15
# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
16
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
17
# ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
18
# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
19
# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
20
# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
21
# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
22
# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
23
# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
24
# SUCH DAMAGE.
25
#
26
#
27
28
#include <sys/bus.h>
29
#include <sys/types.h>
30
31
#include <contrib/dev/acpica/include/acpi.h>
32
33
INTERFACE acpi;
34
35
#
36
# Callback function for each child handle traversed in acpi_scan_children().
37
#
38
# ACPI_HANDLE h: current child device being considered
39
#
40
# device_t *dev: pointer to the child's original device_t or NULL if there
41
# was none. The callback should store a new device in *dev if it has
42
# created one. The method implementation will automatically clean up the
43
# previous device and properly associate the current ACPI_HANDLE with it.
44
#
45
# level: current level being scanned
46
#
47
# void *arg: argument passed in original call to acpi_scan_children()
48
#
49
# Returns: AE_OK if the scan should continue, otherwise an error
50
#
51
HEADER {
52
typedef ACPI_STATUS (*acpi_scan_cb_t)(ACPI_HANDLE h, device_t *dev,
53
int level, void *arg);
54
55
struct acpi_bix;
56
struct acpi_bif;
57
struct acpi_bst;
58
};
59
60
#
61
# Default implementation for acpi_id_probe().
62
#
63
CODE {
64
static int
65
acpi_generic_id_probe(device_t bus, device_t dev, char **ids,
66
char **match)
67
{
68
return (ENXIO);
69
}
70
};
71
72
#
73
# Check a device for a match in a list of ID strings. The strings can be
74
# EISA PNP IDs or ACPI _HID/_CID values.
75
#
76
# device_t bus: parent bus for the device
77
#
78
# device_t dev: device being considered
79
#
80
# char **ids: array of ID strings to consider
81
#
82
# char **match: Pointer to store ID string matched or NULL if no match
83
# pass NULL if not needed.
84
#
85
# Returns: BUS_PROBE_DEFAULT if _HID match
86
# BUS_PROBE_LOW_PRIORITY if _CID match and not _HID match
87
# ENXIO if no match.
88
#
89
90
METHOD int id_probe {
91
device_t bus;
92
device_t dev;
93
char **ids;
94
char **match;
95
} DEFAULT acpi_generic_id_probe;
96
97
#
98
# Evaluate an ACPI method or object, given its path.
99
#
100
# device_t bus: parent bus for the device
101
#
102
# device_t dev: evaluate the object relative to this device's handle.
103
# Specify NULL to begin the search at the ACPI root.
104
#
105
# ACPI_STRING pathname: absolute or relative path to this object
106
#
107
# ACPI_OBJECT_LIST *parameters: array of arguments to pass to the object.
108
# Specify NULL if there are none.
109
#
110
# ACPI_BUFFER *ret: the result (if any) of the evaluation
111
# Specify NULL if there is none.
112
#
113
# Returns: AE_OK or an error value
114
#
115
METHOD ACPI_STATUS evaluate_object {
116
device_t bus;
117
device_t dev;
118
ACPI_STRING pathname;
119
ACPI_OBJECT_LIST *parameters;
120
ACPI_BUFFER *ret;
121
};
122
123
#
124
# Get property value from Device Specific Data
125
#
126
# device_t bus: parent bus for the device
127
#
128
# device_t dev: find property for this device's handle.
129
#
130
# const ACPI_STRING propname: name of the property
131
#
132
# const ACPI_OBJECT **value: property value output
133
# Specify NULL if ignored
134
#
135
# Returns: AE_OK or an error value
136
#
137
METHOD ACPI_STATUS get_property {
138
device_t bus;
139
device_t dev;
140
ACPI_STRING propname;
141
const ACPI_OBJECT **value;
142
};
143
144
#
145
# Get the highest power state (D0-D3) that is usable for a device when
146
# suspending/resuming. If a bus calls this when suspending a device, it
147
# must also call it when resuming.
148
#
149
# device_t bus: parent bus for the device
150
#
151
# device_t dev: check this device's appropriate power state
152
#
153
# int *dstate: if successful, contains the highest valid sleep state
154
#
155
# Returns: 0 on success or some other error value.
156
#
157
METHOD int pwr_for_sleep {
158
device_t bus;
159
device_t dev;
160
int *dstate;
161
};
162
163
#
164
# Rescan a subtree and optionally reattach devices to handles. Users
165
# specify a callback that is called for each ACPI_HANDLE of type Device
166
# that is a child of "dev".
167
#
168
# device_t bus: parent bus for the device
169
#
170
# device_t dev: begin the scan starting with this device's handle.
171
# Specify NULL to begin the scan at the ACPI root.
172
#
173
# int max_depth: number of levels to traverse (i.e., 1 means just the
174
# immediate children.
175
#
176
# acpi_scan_cb_t user_fn: called for each child handle
177
#
178
# void *arg: argument to pass to the callback function
179
#
180
# Returns: AE_OK or an error value, based on the callback return value
181
#
182
METHOD ACPI_STATUS scan_children {
183
device_t bus;
184
device_t dev;
185
int max_depth;
186
acpi_scan_cb_t user_fn;
187
void *arg;
188
};
189
190
#
191
# Query a given driver for its supported feature(s). This should be
192
# called by the parent bus before the driver is probed.
193
#
194
# driver_t *driver: child driver
195
#
196
# u_int *features: returned bitmask of all supported features
197
#
198
STATICMETHOD int get_features {
199
driver_t *driver;
200
u_int *features;
201
};
202
203
#
204
# Read embedded controller (EC) address space
205
#
206
# device_t dev: EC device
207
# u_int addr: Address to read from in EC space
208
# UINT64 *val: Location to store read value
209
# int width: Size of area to read in bytes
210
#
211
METHOD int ec_read {
212
device_t dev;
213
u_int addr;
214
UINT64 *val;
215
int width;
216
};
217
218
#
219
# Write embedded controller (EC) address space
220
#
221
# device_t dev: EC device
222
# u_int addr: Address to write to in EC space
223
# UINT64 val: Value to write
224
# int width: Size of value to write in bytes
225
#
226
METHOD int ec_write {
227
device_t dev;
228
u_int addr;
229
UINT64 val;
230
int width;
231
};
232
233
#
234
# Get battery information (_BIF or _BIX format)
235
#
236
# device_t dev: Battery device
237
# void *bix: Pointer to storage for _BIF or _BIX results
238
# size_t len: length of acpi_bif or acpi_bix.
239
#
240
METHOD int batt_get_info {
241
device_t dev;
242
void *bix;
243
size_t len;
244
};
245
246
#
247
# Get battery status (_BST format)
248
#
249
# device_t dev: Battery device
250
# struct acpi_bst *bst: Pointer to storage for _BST results
251
#
252
METHOD int batt_get_status {
253
device_t dev;
254
struct acpi_bst *bst;
255
};
256
257