diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2012-10-07 18:14:06 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2012-10-07 18:14:06 -0400 |
commit | d8dc91b753b881c60c766c06aeec87675a07df4a (patch) | |
tree | 9a02f81fc5436b424d88c2340dcd6b0fe6ae6cca /include/acpi | |
parent | 7035cdf36d5c4d913f68ff97e1c2e5603500d946 (diff) | |
parent | 3f44ea0d1c3835872033a6633135e16f87161202 (diff) |
Merge branch 'release' of git://git.kernel.org/pub/scm/linux/kernel/git/lenb/linux
Pul ACPI & Power Management updates from Len Brown:
- acpidump utility added
- intel_idle driver now supports IVB Xeon
- turbostat utility can now count SMIs
- ACPI can now bind to USB3 hubs
- misc fixes
* 'release' of git://git.kernel.org/pub/scm/linux/kernel/git/lenb/linux: (49 commits)
ACPI: Add new sysfs interface to export device description
ACPI: Harden acpi_table_parse_entries() against BIOS bug
tools/power/turbostat: add option to count SMIs, re-name some options
tools/power turbostat: add [-d MSR#][-D MSR#] options to print counter deltas
intel_idle: enable IVB Xeon support
tools/power turbostat: add [-m MSR#] option
tools/power turbostat: make -M output pretty
tools/power turbostat: print more turbo-limit information
tools/power turbostat: delete unused line
tools/power turbostat: run on IVB Xeon
tools/power/acpi/acpidump: create acpidump(8), local make install targets
tools/power/acpi/acpidump: version 20101221 - find dynamic tables in sysfs
ACPI: run _OSC after ACPI_FULL_INITIALIZATION
tools/power/acpi/acpidump: create acpidump(8), local make install targets
tools/power/acpi/acpidump: version 20101221 - find dynamic tables in sysfs
tools/power/acpi/acpidump: version 20071116
tools/power/acpi/acpidump: version 20070714
tools/power/acpi/acpidump: version 20060606
tools/power/acpi/acpidump: version 20051111
xo15-ebook: convert to module_acpi_driver()
...
Diffstat (limited to 'include/acpi')
-rw-r--r-- | include/acpi/acbuffer.h | 235 | ||||
-rw-r--r-- | include/acpi/acnames.h | 3 | ||||
-rw-r--r-- | include/acpi/acpi_bus.h | 60 | ||||
-rw-r--r-- | include/acpi/acpixf.h | 7 | ||||
-rw-r--r-- | include/acpi/actbl.h | 60 | ||||
-rw-r--r-- | include/acpi/actbl1.h | 16 | ||||
-rw-r--r-- | include/acpi/actbl2.h | 123 | ||||
-rw-r--r-- | include/acpi/actbl3.h | 13 | ||||
-rw-r--r-- | include/acpi/actypes.h | 7 |
9 files changed, 444 insertions, 80 deletions
diff --git a/include/acpi/acbuffer.h b/include/acpi/acbuffer.h new file mode 100644 index 000000000000..a1e45cdd729a --- /dev/null +++ b/include/acpi/acbuffer.h | |||
@@ -0,0 +1,235 @@ | |||
1 | /****************************************************************************** | ||
2 | * | ||
3 | * Name: acbuffer.h - Support for buffers returned by ACPI predefined names | ||
4 | * | ||
5 | *****************************************************************************/ | ||
6 | |||
7 | /* | ||
8 | * Copyright (C) 2000 - 2012, Intel Corp. | ||
9 | * All rights reserved. | ||
10 | * | ||
11 | * Redistribution and use in source and binary forms, with or without | ||
12 | * modification, are permitted provided that the following conditions | ||
13 | * are met: | ||
14 | * 1. Redistributions of source code must retain the above copyright | ||
15 | * notice, this list of conditions, and the following disclaimer, | ||
16 | * without modification. | ||
17 | * 2. Redistributions in binary form must reproduce at minimum a disclaimer | ||
18 | * substantially similar to the "NO WARRANTY" disclaimer below | ||
19 | * ("Disclaimer") and any redistribution must be conditioned upon | ||
20 | * including a substantially similar Disclaimer requirement for further | ||
21 | * binary redistribution. | ||
22 | * 3. Neither the names of the above-listed copyright holders nor the names | ||
23 | * of any contributors may be used to endorse or promote products derived | ||
24 | * from this software without specific prior written permission. | ||
25 | * | ||
26 | * Alternatively, this software may be distributed under the terms of the | ||
27 | * GNU General Public License ("GPL") version 2 as published by the Free | ||
28 | * Software Foundation. | ||
29 | * | ||
30 | * NO WARRANTY | ||
31 | * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS | ||
32 | * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT | ||
33 | * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR | ||
34 | * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT | ||
35 | * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL | ||
36 | * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS | ||
37 | * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) | ||
38 | * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, | ||
39 | * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING | ||
40 | * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE | ||
41 | * POSSIBILITY OF SUCH DAMAGES. | ||
42 | */ | ||
43 | |||
44 | #ifndef __ACBUFFER_H__ | ||
45 | #define __ACBUFFER_H__ | ||
46 | |||
47 | /* | ||
48 | * Contains buffer structures for these predefined names: | ||
49 | * _FDE, _GRT, _GTM, _PLD, _SRT | ||
50 | */ | ||
51 | |||
52 | /* | ||
53 | * Note: C bitfields are not used for this reason: | ||
54 | * | ||
55 | * "Bitfields are great and easy to read, but unfortunately the C language | ||
56 | * does not specify the layout of bitfields in memory, which means they are | ||
57 | * essentially useless for dealing with packed data in on-disk formats or | ||
58 | * binary wire protocols." (Or ACPI tables and buffers.) "If you ask me, | ||
59 | * this decision was a design error in C. Ritchie could have picked an order | ||
60 | * and stuck with it." Norman Ramsey. | ||
61 | * See http://stackoverflow.com/a/1053662/41661 | ||
62 | */ | ||
63 | |||
64 | /* _FDE return value */ | ||
65 | |||
66 | struct acpi_fde_info { | ||
67 | u32 floppy0; | ||
68 | u32 floppy1; | ||
69 | u32 floppy2; | ||
70 | u32 floppy3; | ||
71 | u32 tape; | ||
72 | }; | ||
73 | |||
74 | /* | ||
75 | * _GRT return value | ||
76 | * _SRT input value | ||
77 | */ | ||
78 | struct acpi_grt_info { | ||
79 | u16 year; | ||
80 | u8 month; | ||
81 | u8 day; | ||
82 | u8 hour; | ||
83 | u8 minute; | ||
84 | u8 second; | ||
85 | u8 valid; | ||
86 | u16 milliseconds; | ||
87 | u16 timezone; | ||
88 | u8 daylight; | ||
89 | u8 reserved[3]; | ||
90 | }; | ||
91 | |||
92 | /* _GTM return value */ | ||
93 | |||
94 | struct acpi_gtm_info { | ||
95 | u32 pio_speed0; | ||
96 | u32 dma_speed0; | ||
97 | u32 pio_speed1; | ||
98 | u32 dma_speed1; | ||
99 | u32 flags; | ||
100 | }; | ||
101 | |||
102 | /* | ||
103 | * Formatted _PLD return value. The minimum size is a package containing | ||
104 | * one buffer. | ||
105 | * Revision 1: Buffer is 16 bytes (128 bits) | ||
106 | * Revision 2: Buffer is 20 bytes (160 bits) | ||
107 | * | ||
108 | * Note: This structure is returned from the acpi_decode_pld_buffer | ||
109 | * interface. | ||
110 | */ | ||
111 | struct acpi_pld_info { | ||
112 | u8 revision; | ||
113 | u8 ignore_color; | ||
114 | u32 color; | ||
115 | u16 width; | ||
116 | u16 height; | ||
117 | u8 user_visible; | ||
118 | u8 dock; | ||
119 | u8 lid; | ||
120 | u8 panel; | ||
121 | u8 vertical_position; | ||
122 | u8 horizontal_position; | ||
123 | u8 shape; | ||
124 | u8 group_orientation; | ||
125 | u8 group_token; | ||
126 | u8 group_position; | ||
127 | u8 bay; | ||
128 | u8 ejectable; | ||
129 | u8 ospm_eject_required; | ||
130 | u8 cabinet_number; | ||
131 | u8 card_cage_number; | ||
132 | u8 reference; | ||
133 | u8 rotation; | ||
134 | u8 order; | ||
135 | u8 reserved; | ||
136 | u16 vertical_offset; | ||
137 | u16 horizontal_offset; | ||
138 | }; | ||
139 | |||
140 | /* | ||
141 | * Macros to: | ||
142 | * 1) Convert a _PLD buffer to internal struct acpi_pld_info format - ACPI_PLD_GET* | ||
143 | * (Used by acpi_decode_pld_buffer) | ||
144 | * 2) Construct a _PLD buffer - ACPI_PLD_SET* | ||
145 | * (Intended for BIOS use only) | ||
146 | */ | ||
147 | #define ACPI_PLD_REV1_BUFFER_SIZE 16 /* For Revision 1 of the buffer (From ACPI spec) */ | ||
148 | #define ACPI_PLD_BUFFER_SIZE 20 /* For Revision 2 of the buffer (From ACPI spec) */ | ||
149 | |||
150 | /* First 32-bit dword, bits 0:32 */ | ||
151 | |||
152 | #define ACPI_PLD_GET_REVISION(dword) ACPI_GET_BITS (dword, 0, ACPI_7BIT_MASK) | ||
153 | #define ACPI_PLD_SET_REVISION(dword,value) ACPI_SET_BITS (dword, 0, ACPI_7BIT_MASK, value) /* Offset 0, Len 7 */ | ||
154 | |||
155 | #define ACPI_PLD_GET_IGNORE_COLOR(dword) ACPI_GET_BITS (dword, 7, ACPI_1BIT_MASK) | ||
156 | #define ACPI_PLD_SET_IGNORE_COLOR(dword,value) ACPI_SET_BITS (dword, 7, ACPI_1BIT_MASK, value) /* Offset 7, Len 1 */ | ||
157 | |||
158 | #define ACPI_PLD_GET_COLOR(dword) ACPI_GET_BITS (dword, 8, ACPI_24BIT_MASK) | ||
159 | #define ACPI_PLD_SET_COLOR(dword,value) ACPI_SET_BITS (dword, 8, ACPI_24BIT_MASK, value) /* Offset 8, Len 24 */ | ||
160 | |||
161 | /* Second 32-bit dword, bits 33:63 */ | ||
162 | |||
163 | #define ACPI_PLD_GET_WIDTH(dword) ACPI_GET_BITS (dword, 0, ACPI_16BIT_MASK) | ||
164 | #define ACPI_PLD_SET_WIDTH(dword,value) ACPI_SET_BITS (dword, 0, ACPI_16BIT_MASK, value) /* Offset 32+0=32, Len 16 */ | ||
165 | |||
166 | #define ACPI_PLD_GET_HEIGHT(dword) ACPI_GET_BITS (dword, 16, ACPI_16BIT_MASK) | ||
167 | #define ACPI_PLD_SET_HEIGHT(dword,value) ACPI_SET_BITS (dword, 16, ACPI_16BIT_MASK, value) /* Offset 32+16=48, Len 16 */ | ||
168 | |||
169 | /* Third 32-bit dword, bits 64:95 */ | ||
170 | |||
171 | #define ACPI_PLD_GET_USER_VISIBLE(dword) ACPI_GET_BITS (dword, 0, ACPI_1BIT_MASK) | ||
172 | #define ACPI_PLD_SET_USER_VISIBLE(dword,value) ACPI_SET_BITS (dword, 0, ACPI_1BIT_MASK, value) /* Offset 64+0=64, Len 1 */ | ||
173 | |||
174 | #define ACPI_PLD_GET_DOCK(dword) ACPI_GET_BITS (dword, 1, ACPI_1BIT_MASK) | ||
175 | #define ACPI_PLD_SET_DOCK(dword,value) ACPI_SET_BITS (dword, 1, ACPI_1BIT_MASK, value) /* Offset 64+1=65, Len 1 */ | ||
176 | |||
177 | #define ACPI_PLD_GET_LID(dword) ACPI_GET_BITS (dword, 2, ACPI_1BIT_MASK) | ||
178 | #define ACPI_PLD_SET_LID(dword,value) ACPI_SET_BITS (dword, 2, ACPI_1BIT_MASK, value) /* Offset 64+2=66, Len 1 */ | ||
179 | |||
180 | #define ACPI_PLD_GET_PANEL(dword) ACPI_GET_BITS (dword, 3, ACPI_3BIT_MASK) | ||
181 | #define ACPI_PLD_SET_PANEL(dword,value) ACPI_SET_BITS (dword, 3, ACPI_3BIT_MASK, value) /* Offset 64+3=67, Len 3 */ | ||
182 | |||
183 | #define ACPI_PLD_GET_VERTICAL(dword) ACPI_GET_BITS (dword, 6, ACPI_2BIT_MASK) | ||
184 | #define ACPI_PLD_SET_VERTICAL(dword,value) ACPI_SET_BITS (dword, 6, ACPI_2BIT_MASK, value) /* Offset 64+6=70, Len 2 */ | ||
185 | |||
186 | #define ACPI_PLD_GET_HORIZONTAL(dword) ACPI_GET_BITS (dword, 8, ACPI_2BIT_MASK) | ||
187 | #define ACPI_PLD_SET_HORIZONTAL(dword,value) ACPI_SET_BITS (dword, 8, ACPI_2BIT_MASK, value) /* Offset 64+8=72, Len 2 */ | ||
188 | |||
189 | #define ACPI_PLD_GET_SHAPE(dword) ACPI_GET_BITS (dword, 10, ACPI_4BIT_MASK) | ||
190 | #define ACPI_PLD_SET_SHAPE(dword,value) ACPI_SET_BITS (dword, 10, ACPI_4BIT_MASK, value) /* Offset 64+10=74, Len 4 */ | ||
191 | |||
192 | #define ACPI_PLD_GET_ORIENTATION(dword) ACPI_GET_BITS (dword, 14, ACPI_1BIT_MASK) | ||
193 | #define ACPI_PLD_SET_ORIENTATION(dword,value) ACPI_SET_BITS (dword, 14, ACPI_1BIT_MASK, value) /* Offset 64+14=78, Len 1 */ | ||
194 | |||
195 | #define ACPI_PLD_GET_TOKEN(dword) ACPI_GET_BITS (dword, 15, ACPI_8BIT_MASK) | ||
196 | #define ACPI_PLD_SET_TOKEN(dword,value) ACPI_SET_BITS (dword, 15, ACPI_8BIT_MASK, value) /* Offset 64+15=79, Len 8 */ | ||
197 | |||
198 | #define ACPI_PLD_GET_POSITION(dword) ACPI_GET_BITS (dword, 23, ACPI_8BIT_MASK) | ||
199 | #define ACPI_PLD_SET_POSITION(dword,value) ACPI_SET_BITS (dword, 23, ACPI_8BIT_MASK, value) /* Offset 64+23=87, Len 8 */ | ||
200 | |||
201 | #define ACPI_PLD_GET_BAY(dword) ACPI_GET_BITS (dword, 31, ACPI_1BIT_MASK) | ||
202 | #define ACPI_PLD_SET_BAY(dword,value) ACPI_SET_BITS (dword, 31, ACPI_1BIT_MASK, value) /* Offset 64+31=95, Len 1 */ | ||
203 | |||
204 | /* Fourth 32-bit dword, bits 96:127 */ | ||
205 | |||
206 | #define ACPI_PLD_GET_EJECTABLE(dword) ACPI_GET_BITS (dword, 0, ACPI_1BIT_MASK) | ||
207 | #define ACPI_PLD_SET_EJECTABLE(dword,value) ACPI_SET_BITS (dword, 0, ACPI_1BIT_MASK, value) /* Offset 96+0=96, Len 1 */ | ||
208 | |||
209 | #define ACPI_PLD_GET_OSPM_EJECT(dword) ACPI_GET_BITS (dword, 1, ACPI_1BIT_MASK) | ||
210 | #define ACPI_PLD_SET_OSPM_EJECT(dword,value) ACPI_SET_BITS (dword, 1, ACPI_1BIT_MASK, value) /* Offset 96+1=97, Len 1 */ | ||
211 | |||
212 | #define ACPI_PLD_GET_CABINET(dword) ACPI_GET_BITS (dword, 2, ACPI_8BIT_MASK) | ||
213 | #define ACPI_PLD_SET_CABINET(dword,value) ACPI_SET_BITS (dword, 2, ACPI_8BIT_MASK, value) /* Offset 96+2=98, Len 8 */ | ||
214 | |||
215 | #define ACPI_PLD_GET_CARD_CAGE(dword) ACPI_GET_BITS (dword, 10, ACPI_8BIT_MASK) | ||
216 | #define ACPI_PLD_SET_CARD_CAGE(dword,value) ACPI_SET_BITS (dword, 10, ACPI_8BIT_MASK, value) /* Offset 96+10=106, Len 8 */ | ||
217 | |||
218 | #define ACPI_PLD_GET_REFERENCE(dword) ACPI_GET_BITS (dword, 18, ACPI_1BIT_MASK) | ||
219 | #define ACPI_PLD_SET_REFERENCE(dword,value) ACPI_SET_BITS (dword, 18, ACPI_1BIT_MASK, value) /* Offset 96+18=114, Len 1 */ | ||
220 | |||
221 | #define ACPI_PLD_GET_ROTATION(dword) ACPI_GET_BITS (dword, 19, ACPI_4BIT_MASK) | ||
222 | #define ACPI_PLD_SET_ROTATION(dword,value) ACPI_SET_BITS (dword, 19, ACPI_4BIT_MASK, value) /* Offset 96+19=115, Len 4 */ | ||
223 | |||
224 | #define ACPI_PLD_GET_ORDER(dword) ACPI_GET_BITS (dword, 23, ACPI_5BIT_MASK) | ||
225 | #define ACPI_PLD_SET_ORDER(dword,value) ACPI_SET_BITS (dword, 23, ACPI_5BIT_MASK, value) /* Offset 96+23=119, Len 5 */ | ||
226 | |||
227 | /* Fifth 32-bit dword, bits 128:159 (Revision 2 of _PLD only) */ | ||
228 | |||
229 | #define ACPI_PLD_GET_VERT_OFFSET(dword) ACPI_GET_BITS (dword, 0, ACPI_16BIT_MASK) | ||
230 | #define ACPI_PLD_SET_VERT_OFFSET(dword,value) ACPI_SET_BITS (dword, 0, ACPI_16BIT_MASK, value) /* Offset 128+0=128, Len 16 */ | ||
231 | |||
232 | #define ACPI_PLD_GET_HORIZ_OFFSET(dword) ACPI_GET_BITS (dword, 16, ACPI_16BIT_MASK) | ||
233 | #define ACPI_PLD_SET_HORIZ_OFFSET(dword,value) ACPI_SET_BITS (dword, 16, ACPI_16BIT_MASK, value) /* Offset 128+16=144, Len 16 */ | ||
234 | |||
235 | #endif /* ACBUFFER_H */ | ||
diff --git a/include/acpi/acnames.h b/include/acpi/acnames.h index d988ac54f41e..745dd24e3cb5 100644 --- a/include/acpi/acnames.h +++ b/include/acpi/acnames.h | |||
@@ -63,11 +63,10 @@ | |||
63 | #define METHOD_NAME__PRW "_PRW" | 63 | #define METHOD_NAME__PRW "_PRW" |
64 | #define METHOD_NAME__SRS "_SRS" | 64 | #define METHOD_NAME__SRS "_SRS" |
65 | #define METHOD_NAME__CBA "_CBA" | 65 | #define METHOD_NAME__CBA "_CBA" |
66 | #define METHOD_NAME__PLD "_PLD" | ||
66 | 67 | ||
67 | /* Method names - these methods must appear at the namespace root */ | 68 | /* Method names - these methods must appear at the namespace root */ |
68 | 69 | ||
69 | #define METHOD_PATHNAME__BFS "\\_BFS" | ||
70 | #define METHOD_PATHNAME__GTS "\\_GTS" | ||
71 | #define METHOD_PATHNAME__PTS "\\_PTS" | 70 | #define METHOD_PATHNAME__PTS "\\_PTS" |
72 | #define METHOD_PATHNAME__SST "\\_SI._SST" | 71 | #define METHOD_PATHNAME__SST "\\_SI._SST" |
73 | #define METHOD_PATHNAME__WAK "\\_WAK" | 72 | #define METHOD_PATHNAME__WAK "\\_WAK" |
diff --git a/include/acpi/acpi_bus.h b/include/acpi/acpi_bus.h index bde976ee068d..0daa0fbd8654 100644 --- a/include/acpi/acpi_bus.h +++ b/include/acpi/acpi_bus.h | |||
@@ -54,37 +54,8 @@ acpi_status | |||
54 | acpi_evaluate_hotplug_ost(acpi_handle handle, u32 source_event, | 54 | acpi_evaluate_hotplug_ost(acpi_handle handle, u32 source_event, |
55 | u32 status_code, struct acpi_buffer *status_buf); | 55 | u32 status_code, struct acpi_buffer *status_buf); |
56 | 56 | ||
57 | struct acpi_pld { | ||
58 | unsigned int revision:7; /* 0 */ | ||
59 | unsigned int ignore_colour:1; /* 7 */ | ||
60 | unsigned int colour:24; /* 8 */ | ||
61 | unsigned int width:16; /* 32 */ | ||
62 | unsigned int height:16; /* 48 */ | ||
63 | unsigned int user_visible:1; /* 64 */ | ||
64 | unsigned int dock:1; /* 65 */ | ||
65 | unsigned int lid:1; /* 66 */ | ||
66 | unsigned int panel:3; /* 67 */ | ||
67 | unsigned int vertical_pos:2; /* 70 */ | ||
68 | unsigned int horizontal_pos:2; /* 72 */ | ||
69 | unsigned int shape:4; /* 74 */ | ||
70 | unsigned int group_orientation:1; /* 78 */ | ||
71 | unsigned int group_token:8; /* 79 */ | ||
72 | unsigned int group_position:8; /* 87 */ | ||
73 | unsigned int bay:1; /* 95 */ | ||
74 | unsigned int ejectable:1; /* 96 */ | ||
75 | unsigned int ospm_eject_required:1; /* 97 */ | ||
76 | unsigned int cabinet_number:8; /* 98 */ | ||
77 | unsigned int card_cage_number:8; /* 106 */ | ||
78 | unsigned int reference:1; /* 114 */ | ||
79 | unsigned int rotation:4; /* 115 */ | ||
80 | unsigned int order:5; /* 119 */ | ||
81 | unsigned int reserved:4; /* 124 */ | ||
82 | unsigned int vertical_offset:16; /* 128 */ | ||
83 | unsigned int horizontal_offset:16; /* 144 */ | ||
84 | } __attribute__((__packed__)); | ||
85 | |||
86 | acpi_status | 57 | acpi_status |
87 | acpi_get_physical_device_location(acpi_handle handle, struct acpi_pld *pld); | 58 | acpi_get_physical_device_location(acpi_handle handle, struct acpi_pld_info **pld); |
88 | #ifdef CONFIG_ACPI | 59 | #ifdef CONFIG_ACPI |
89 | 60 | ||
90 | #include <linux/proc_fs.h> | 61 | #include <linux/proc_fs.h> |
@@ -208,6 +179,7 @@ struct acpi_device_pnp { | |||
208 | struct list_head ids; /* _HID and _CIDs */ | 179 | struct list_head ids; /* _HID and _CIDs */ |
209 | acpi_device_name device_name; /* Driver-determined */ | 180 | acpi_device_name device_name; /* Driver-determined */ |
210 | acpi_device_class device_class; /* " */ | 181 | acpi_device_class device_class; /* " */ |
182 | union acpi_object *str_obj; /* unicode string for _STR method */ | ||
211 | }; | 183 | }; |
212 | 184 | ||
213 | #define acpi_device_bid(d) ((d)->pnp.bus_id) | 185 | #define acpi_device_bid(d) ((d)->pnp.bus_id) |
@@ -282,8 +254,16 @@ struct acpi_device_wakeup { | |||
282 | int prepare_count; | 254 | int prepare_count; |
283 | }; | 255 | }; |
284 | 256 | ||
285 | /* Device */ | 257 | struct acpi_device_physical_node { |
258 | u8 node_id; | ||
259 | struct list_head node; | ||
260 | struct device *dev; | ||
261 | }; | ||
262 | |||
263 | /* set maximum of physical nodes to 32 for expansibility */ | ||
264 | #define ACPI_MAX_PHYSICAL_NODE 32 | ||
286 | 265 | ||
266 | /* Device */ | ||
287 | struct acpi_device { | 267 | struct acpi_device { |
288 | int device_type; | 268 | int device_type; |
289 | acpi_handle handle; /* no handle for fixed hardware */ | 269 | acpi_handle handle; /* no handle for fixed hardware */ |
@@ -304,6 +284,10 @@ struct acpi_device { | |||
304 | struct device dev; | 284 | struct device dev; |
305 | struct acpi_bus_ops bus_ops; /* workaround for different code path for hotplug */ | 285 | struct acpi_bus_ops bus_ops; /* workaround for different code path for hotplug */ |
306 | enum acpi_bus_removal_type removal_type; /* indicate for different removal type */ | 286 | enum acpi_bus_removal_type removal_type; /* indicate for different removal type */ |
287 | u8 physical_node_count; | ||
288 | struct list_head physical_node_list; | ||
289 | struct mutex physical_node_lock; | ||
290 | DECLARE_BITMAP(physical_node_id_bitmap, ACPI_MAX_PHYSICAL_NODE); | ||
307 | }; | 291 | }; |
308 | 292 | ||
309 | static inline void *acpi_driver_data(struct acpi_device *d) | 293 | static inline void *acpi_driver_data(struct acpi_device *d) |
@@ -381,6 +365,19 @@ int acpi_match_device_ids(struct acpi_device *device, | |||
381 | int acpi_create_dir(struct acpi_device *); | 365 | int acpi_create_dir(struct acpi_device *); |
382 | void acpi_remove_dir(struct acpi_device *); | 366 | void acpi_remove_dir(struct acpi_device *); |
383 | 367 | ||
368 | |||
369 | /** | ||
370 | * module_acpi_driver(acpi_driver) - Helper macro for registering an ACPI driver | ||
371 | * @__acpi_driver: acpi_driver struct | ||
372 | * | ||
373 | * Helper macro for ACPI drivers which do not do anything special in module | ||
374 | * init/exit. This eliminates a lot of boilerplate. Each module may only | ||
375 | * use this macro once, and calling it replaces module_init() and module_exit() | ||
376 | */ | ||
377 | #define module_acpi_driver(__acpi_driver) \ | ||
378 | module_driver(__acpi_driver, acpi_bus_register_driver, \ | ||
379 | acpi_bus_unregister_driver) | ||
380 | |||
384 | /* | 381 | /* |
385 | * Bind physical devices with ACPI devices | 382 | * Bind physical devices with ACPI devices |
386 | */ | 383 | */ |
@@ -394,7 +391,6 @@ struct acpi_bus_type { | |||
394 | }; | 391 | }; |
395 | int register_acpi_bus_type(struct acpi_bus_type *); | 392 | int register_acpi_bus_type(struct acpi_bus_type *); |
396 | int unregister_acpi_bus_type(struct acpi_bus_type *); | 393 | int unregister_acpi_bus_type(struct acpi_bus_type *); |
397 | struct device *acpi_get_physical_device(acpi_handle); | ||
398 | 394 | ||
399 | struct acpi_pci_root { | 395 | struct acpi_pci_root { |
400 | struct list_head node; | 396 | struct list_head node; |
diff --git a/include/acpi/acpixf.h b/include/acpi/acpixf.h index 51405d32ac64..8b891dbead66 100644 --- a/include/acpi/acpixf.h +++ b/include/acpi/acpixf.h | |||
@@ -47,11 +47,12 @@ | |||
47 | 47 | ||
48 | /* Current ACPICA subsystem version in YYYYMMDD format */ | 48 | /* Current ACPICA subsystem version in YYYYMMDD format */ |
49 | 49 | ||
50 | #define ACPI_CA_VERSION 0x20120711 | 50 | #define ACPI_CA_VERSION 0x20120913 |
51 | 51 | ||
52 | #include <acpi/acconfig.h> | 52 | #include <acpi/acconfig.h> |
53 | #include <acpi/actypes.h> | 53 | #include <acpi/actypes.h> |
54 | #include <acpi/actbl.h> | 54 | #include <acpi/actbl.h> |
55 | #include <acpi/acbuffer.h> | ||
55 | 56 | ||
56 | extern u8 acpi_gbl_permanent_mmap; | 57 | extern u8 acpi_gbl_permanent_mmap; |
57 | 58 | ||
@@ -144,6 +145,10 @@ acpi_check_address_range(acpi_adr_space_type space_id, | |||
144 | acpi_physical_address address, | 145 | acpi_physical_address address, |
145 | acpi_size length, u8 warn); | 146 | acpi_size length, u8 warn); |
146 | 147 | ||
148 | acpi_status | ||
149 | acpi_decode_pld_buffer(u8 *in_buffer, | ||
150 | acpi_size length, struct acpi_pld_info **return_buffer); | ||
151 | |||
147 | /* | 152 | /* |
148 | * ACPI Memory management | 153 | * ACPI Memory management |
149 | */ | 154 | */ |
diff --git a/include/acpi/actbl.h b/include/acpi/actbl.h index 59a73e1b2845..4f94b1d812d5 100644 --- a/include/acpi/actbl.h +++ b/include/acpi/actbl.h | |||
@@ -79,9 +79,15 @@ | |||
79 | #pragma pack(1) | 79 | #pragma pack(1) |
80 | 80 | ||
81 | /* | 81 | /* |
82 | * Note about bitfields: The u8 type is used for bitfields in ACPI tables. | 82 | * Note: C bitfields are not used for this reason: |
83 | * This is the only type that is even remotely portable. Anything else is not | 83 | * |
84 | * portable, so do not use any other bitfield types. | 84 | * "Bitfields are great and easy to read, but unfortunately the C language |
85 | * does not specify the layout of bitfields in memory, which means they are | ||
86 | * essentially useless for dealing with packed data in on-disk formats or | ||
87 | * binary wire protocols." (Or ACPI tables and buffers.) "If you ask me, | ||
88 | * this decision was a design error in C. Ritchie could have picked an order | ||
89 | * and stuck with it." Norman Ramsey. | ||
90 | * See http://stackoverflow.com/a/1053662/41661 | ||
85 | */ | 91 | */ |
86 | 92 | ||
87 | /******************************************************************************* | 93 | /******************************************************************************* |
@@ -94,7 +100,7 @@ | |||
94 | struct acpi_table_header { | 100 | struct acpi_table_header { |
95 | char signature[ACPI_NAME_SIZE]; /* ASCII table signature */ | 101 | char signature[ACPI_NAME_SIZE]; /* ASCII table signature */ |
96 | u32 length; /* Length of table in bytes, including this header */ | 102 | u32 length; /* Length of table in bytes, including this header */ |
97 | u8 revision; /* ACPI Specification minor version # */ | 103 | u8 revision; /* ACPI Specification minor version number */ |
98 | u8 checksum; /* To make sum of entire table == 0 */ | 104 | u8 checksum; /* To make sum of entire table == 0 */ |
99 | char oem_id[ACPI_OEM_ID_SIZE]; /* ASCII OEM identification */ | 105 | char oem_id[ACPI_OEM_ID_SIZE]; /* ASCII OEM identification */ |
100 | char oem_table_id[ACPI_OEM_TABLE_ID_SIZE]; /* ASCII OEM table identification */ | 106 | char oem_table_id[ACPI_OEM_TABLE_ID_SIZE]; /* ASCII OEM table identification */ |
@@ -108,7 +114,7 @@ struct acpi_table_header { | |||
108 | * GAS - Generic Address Structure (ACPI 2.0+) | 114 | * GAS - Generic Address Structure (ACPI 2.0+) |
109 | * | 115 | * |
110 | * Note: Since this structure is used in the ACPI tables, it is byte aligned. | 116 | * Note: Since this structure is used in the ACPI tables, it is byte aligned. |
111 | * If misaliged access is not supported by the hardware, accesses to the | 117 | * If misaligned access is not supported by the hardware, accesses to the |
112 | * 64-bit Address field must be performed with care. | 118 | * 64-bit Address field must be performed with care. |
113 | * | 119 | * |
114 | ******************************************************************************/ | 120 | ******************************************************************************/ |
@@ -210,18 +216,18 @@ struct acpi_table_fadt { | |||
210 | u8 preferred_profile; /* Conveys preferred power management profile to OSPM. */ | 216 | u8 preferred_profile; /* Conveys preferred power management profile to OSPM. */ |
211 | u16 sci_interrupt; /* System vector of SCI interrupt */ | 217 | u16 sci_interrupt; /* System vector of SCI interrupt */ |
212 | u32 smi_command; /* 32-bit Port address of SMI command port */ | 218 | u32 smi_command; /* 32-bit Port address of SMI command port */ |
213 | u8 acpi_enable; /* Value to write to smi_cmd to enable ACPI */ | 219 | u8 acpi_enable; /* Value to write to SMI_CMD to enable ACPI */ |
214 | u8 acpi_disable; /* Value to write to smi_cmd to disable ACPI */ | 220 | u8 acpi_disable; /* Value to write to SMI_CMD to disable ACPI */ |
215 | u8 s4_bios_request; /* Value to write to SMI CMD to enter S4BIOS state */ | 221 | u8 s4_bios_request; /* Value to write to SMI_CMD to enter S4BIOS state */ |
216 | u8 pstate_control; /* Processor performance state control */ | 222 | u8 pstate_control; /* Processor performance state control */ |
217 | u32 pm1a_event_block; /* 32-bit Port address of Power Mgt 1a Event Reg Blk */ | 223 | u32 pm1a_event_block; /* 32-bit port address of Power Mgt 1a Event Reg Blk */ |
218 | u32 pm1b_event_block; /* 32-bit Port address of Power Mgt 1b Event Reg Blk */ | 224 | u32 pm1b_event_block; /* 32-bit port address of Power Mgt 1b Event Reg Blk */ |
219 | u32 pm1a_control_block; /* 32-bit Port address of Power Mgt 1a Control Reg Blk */ | 225 | u32 pm1a_control_block; /* 32-bit port address of Power Mgt 1a Control Reg Blk */ |
220 | u32 pm1b_control_block; /* 32-bit Port address of Power Mgt 1b Control Reg Blk */ | 226 | u32 pm1b_control_block; /* 32-bit port address of Power Mgt 1b Control Reg Blk */ |
221 | u32 pm2_control_block; /* 32-bit Port address of Power Mgt 2 Control Reg Blk */ | 227 | u32 pm2_control_block; /* 32-bit port address of Power Mgt 2 Control Reg Blk */ |
222 | u32 pm_timer_block; /* 32-bit Port address of Power Mgt Timer Ctrl Reg Blk */ | 228 | u32 pm_timer_block; /* 32-bit port address of Power Mgt Timer Ctrl Reg Blk */ |
223 | u32 gpe0_block; /* 32-bit Port address of General Purpose Event 0 Reg Blk */ | 229 | u32 gpe0_block; /* 32-bit port address of General Purpose Event 0 Reg Blk */ |
224 | u32 gpe1_block; /* 32-bit Port address of General Purpose Event 1 Reg Blk */ | 230 | u32 gpe1_block; /* 32-bit port address of General Purpose Event 1 Reg Blk */ |
225 | u8 pm1_event_length; /* Byte Length of ports at pm1x_event_block */ | 231 | u8 pm1_event_length; /* Byte Length of ports at pm1x_event_block */ |
226 | u8 pm1_control_length; /* Byte Length of ports at pm1x_control_block */ | 232 | u8 pm1_control_length; /* Byte Length of ports at pm1x_control_block */ |
227 | u8 pm2_control_length; /* Byte Length of ports at pm2_control_block */ | 233 | u8 pm2_control_length; /* Byte Length of ports at pm2_control_block */ |
@@ -229,12 +235,12 @@ struct acpi_table_fadt { | |||
229 | u8 gpe0_block_length; /* Byte Length of ports at gpe0_block */ | 235 | u8 gpe0_block_length; /* Byte Length of ports at gpe0_block */ |
230 | u8 gpe1_block_length; /* Byte Length of ports at gpe1_block */ | 236 | u8 gpe1_block_length; /* Byte Length of ports at gpe1_block */ |
231 | u8 gpe1_base; /* Offset in GPE number space where GPE1 events start */ | 237 | u8 gpe1_base; /* Offset in GPE number space where GPE1 events start */ |
232 | u8 cst_control; /* Support for the _CST object and C States change notification */ | 238 | u8 cst_control; /* Support for the _CST object and C-States change notification */ |
233 | u16 c2_latency; /* Worst case HW latency to enter/exit C2 state */ | 239 | u16 c2_latency; /* Worst case HW latency to enter/exit C2 state */ |
234 | u16 c3_latency; /* Worst case HW latency to enter/exit C3 state */ | 240 | u16 c3_latency; /* Worst case HW latency to enter/exit C3 state */ |
235 | u16 flush_size; /* Processor's memory cache line width, in bytes */ | 241 | u16 flush_size; /* Processor memory cache line width, in bytes */ |
236 | u16 flush_stride; /* Number of flush strides that need to be read */ | 242 | u16 flush_stride; /* Number of flush strides that need to be read */ |
237 | u8 duty_offset; /* Processor duty cycle index in processor's P_CNT reg */ | 243 | u8 duty_offset; /* Processor duty cycle index in processor P_CNT reg */ |
238 | u8 duty_width; /* Processor duty cycle value bit width in P_CNT register */ | 244 | u8 duty_width; /* Processor duty cycle value bit width in P_CNT register */ |
239 | u8 day_alarm; /* Index to day-of-month alarm in RTC CMOS RAM */ | 245 | u8 day_alarm; /* Index to day-of-month alarm in RTC CMOS RAM */ |
240 | u8 month_alarm; /* Index to month-of-year alarm in RTC CMOS RAM */ | 246 | u8 month_alarm; /* Index to month-of-year alarm in RTC CMOS RAM */ |
@@ -255,11 +261,11 @@ struct acpi_table_fadt { | |||
255 | struct acpi_generic_address xpm_timer_block; /* 64-bit Extended Power Mgt Timer Ctrl Reg Blk address */ | 261 | struct acpi_generic_address xpm_timer_block; /* 64-bit Extended Power Mgt Timer Ctrl Reg Blk address */ |
256 | struct acpi_generic_address xgpe0_block; /* 64-bit Extended General Purpose Event 0 Reg Blk address */ | 262 | struct acpi_generic_address xgpe0_block; /* 64-bit Extended General Purpose Event 0 Reg Blk address */ |
257 | struct acpi_generic_address xgpe1_block; /* 64-bit Extended General Purpose Event 1 Reg Blk address */ | 263 | struct acpi_generic_address xgpe1_block; /* 64-bit Extended General Purpose Event 1 Reg Blk address */ |
258 | struct acpi_generic_address sleep_control; /* 64-bit Sleep Control register */ | 264 | struct acpi_generic_address sleep_control; /* 64-bit Sleep Control register (ACPI 5.0) */ |
259 | struct acpi_generic_address sleep_status; /* 64-bit Sleep Status register */ | 265 | struct acpi_generic_address sleep_status; /* 64-bit Sleep Status register (ACPI 5.0) */ |
260 | }; | 266 | }; |
261 | 267 | ||
262 | /* Masks for FADT Boot Architecture Flags (boot_flags) */ | 268 | /* Masks for FADT Boot Architecture Flags (boot_flags) [Vx]=Introduced in this FADT revision */ |
263 | 269 | ||
264 | #define ACPI_FADT_LEGACY_DEVICES (1) /* 00: [V2] System has LPC or ISA bus devices */ | 270 | #define ACPI_FADT_LEGACY_DEVICES (1) /* 00: [V2] System has LPC or ISA bus devices */ |
265 | #define ACPI_FADT_8042 (1<<1) /* 01: [V3] System has an 8042 controller on port 60/64 */ | 271 | #define ACPI_FADT_8042 (1<<1) /* 01: [V3] System has an 8042 controller on port 60/64 */ |
@@ -272,13 +278,13 @@ struct acpi_table_fadt { | |||
272 | 278 | ||
273 | /* Masks for FADT flags */ | 279 | /* Masks for FADT flags */ |
274 | 280 | ||
275 | #define ACPI_FADT_WBINVD (1) /* 00: [V1] The wbinvd instruction works properly */ | 281 | #define ACPI_FADT_WBINVD (1) /* 00: [V1] The WBINVD instruction works properly */ |
276 | #define ACPI_FADT_WBINVD_FLUSH (1<<1) /* 01: [V1] wbinvd flushes but does not invalidate caches */ | 282 | #define ACPI_FADT_WBINVD_FLUSH (1<<1) /* 01: [V1] WBINVD flushes but does not invalidate caches */ |
277 | #define ACPI_FADT_C1_SUPPORTED (1<<2) /* 02: [V1] All processors support C1 state */ | 283 | #define ACPI_FADT_C1_SUPPORTED (1<<2) /* 02: [V1] All processors support C1 state */ |
278 | #define ACPI_FADT_C2_MP_SUPPORTED (1<<3) /* 03: [V1] C2 state works on MP system */ | 284 | #define ACPI_FADT_C2_MP_SUPPORTED (1<<3) /* 03: [V1] C2 state works on MP system */ |
279 | #define ACPI_FADT_POWER_BUTTON (1<<4) /* 04: [V1] Power button is handled as a control method device */ | 285 | #define ACPI_FADT_POWER_BUTTON (1<<4) /* 04: [V1] Power button is handled as a control method device */ |
280 | #define ACPI_FADT_SLEEP_BUTTON (1<<5) /* 05: [V1] Sleep button is handled as a control method device */ | 286 | #define ACPI_FADT_SLEEP_BUTTON (1<<5) /* 05: [V1] Sleep button is handled as a control method device */ |
281 | #define ACPI_FADT_FIXED_RTC (1<<6) /* 06: [V1] RTC wakeup status not in fixed register space */ | 287 | #define ACPI_FADT_FIXED_RTC (1<<6) /* 06: [V1] RTC wakeup status is not in fixed register space */ |
282 | #define ACPI_FADT_S4_RTC_WAKE (1<<7) /* 07: [V1] RTC alarm can wake system from S4 */ | 288 | #define ACPI_FADT_S4_RTC_WAKE (1<<7) /* 07: [V1] RTC alarm can wake system from S4 */ |
283 | #define ACPI_FADT_32BIT_TIMER (1<<8) /* 08: [V1] ACPI timer width is 32-bit (0=24-bit) */ | 289 | #define ACPI_FADT_32BIT_TIMER (1<<8) /* 08: [V1] ACPI timer width is 32-bit (0=24-bit) */ |
284 | #define ACPI_FADT_DOCKING_SUPPORTED (1<<9) /* 09: [V1] Docking supported */ | 290 | #define ACPI_FADT_DOCKING_SUPPORTED (1<<9) /* 09: [V1] Docking supported */ |
@@ -297,7 +303,7 @@ struct acpi_table_fadt { | |||
297 | 303 | ||
298 | /* Values for preferred_profile (Preferred Power Management Profiles) */ | 304 | /* Values for preferred_profile (Preferred Power Management Profiles) */ |
299 | 305 | ||
300 | enum acpi_prefered_pm_profiles { | 306 | enum acpi_preferred_pm_profiles { |
301 | PM_UNSPECIFIED = 0, | 307 | PM_UNSPECIFIED = 0, |
302 | PM_DESKTOP = 1, | 308 | PM_DESKTOP = 1, |
303 | PM_MOBILE = 2, | 309 | PM_MOBILE = 2, |
@@ -335,7 +341,7 @@ union acpi_name_union { | |||
335 | struct acpi_table_desc { | 341 | struct acpi_table_desc { |
336 | acpi_physical_address address; | 342 | acpi_physical_address address; |
337 | struct acpi_table_header *pointer; | 343 | struct acpi_table_header *pointer; |
338 | u32 length; /* Length fixed at 32 bits */ | 344 | u32 length; /* Length fixed at 32 bits (fixed in table header) */ |
339 | union acpi_name_union signature; | 345 | union acpi_name_union signature; |
340 | acpi_owner_id owner_id; | 346 | acpi_owner_id owner_id; |
341 | u8 flags; | 347 | u8 flags; |
diff --git a/include/acpi/actbl1.h b/include/acpi/actbl1.h index 300d14e7c5d5..280fc45b59dd 100644 --- a/include/acpi/actbl1.h +++ b/include/acpi/actbl1.h | |||
@@ -79,9 +79,15 @@ | |||
79 | #pragma pack(1) | 79 | #pragma pack(1) |
80 | 80 | ||
81 | /* | 81 | /* |
82 | * Note about bitfields: The u8 type is used for bitfields in ACPI tables. | 82 | * Note: C bitfields are not used for this reason: |
83 | * This is the only type that is even remotely portable. Anything else is not | 83 | * |
84 | * portable, so do not use any other bitfield types. | 84 | * "Bitfields are great and easy to read, but unfortunately the C language |
85 | * does not specify the layout of bitfields in memory, which means they are | ||
86 | * essentially useless for dealing with packed data in on-disk formats or | ||
87 | * binary wire protocols." (Or ACPI tables and buffers.) "If you ask me, | ||
88 | * this decision was a design error in C. Ritchie could have picked an order | ||
89 | * and stuck with it." Norman Ramsey. | ||
90 | * See http://stackoverflow.com/a/1053662/41661 | ||
85 | */ | 91 | */ |
86 | 92 | ||
87 | /******************************************************************************* | 93 | /******************************************************************************* |
@@ -489,7 +495,9 @@ enum acpi_hest_notify_types { | |||
489 | ACPI_HEST_NOTIFY_LOCAL = 2, | 495 | ACPI_HEST_NOTIFY_LOCAL = 2, |
490 | ACPI_HEST_NOTIFY_SCI = 3, | 496 | ACPI_HEST_NOTIFY_SCI = 3, |
491 | ACPI_HEST_NOTIFY_NMI = 4, | 497 | ACPI_HEST_NOTIFY_NMI = 4, |
492 | ACPI_HEST_NOTIFY_RESERVED = 5 /* 5 and greater are reserved */ | 498 | ACPI_HEST_NOTIFY_CMCI = 5, /* ACPI 5.0 */ |
499 | ACPI_HEST_NOTIFY_MCE = 6, /* ACPI 5.0 */ | ||
500 | ACPI_HEST_NOTIFY_RESERVED = 7 /* 7 and greater are reserved */ | ||
493 | }; | 501 | }; |
494 | 502 | ||
495 | /* Values for config_write_enable bitfield above */ | 503 | /* Values for config_write_enable bitfield above */ |
diff --git a/include/acpi/actbl2.h b/include/acpi/actbl2.h index d9ceb3d31629..1b2b356486d1 100644 --- a/include/acpi/actbl2.h +++ b/include/acpi/actbl2.h | |||
@@ -63,6 +63,8 @@ | |||
63 | */ | 63 | */ |
64 | #define ACPI_SIG_ASF "ASF!" /* Alert Standard Format table */ | 64 | #define ACPI_SIG_ASF "ASF!" /* Alert Standard Format table */ |
65 | #define ACPI_SIG_BOOT "BOOT" /* Simple Boot Flag Table */ | 65 | #define ACPI_SIG_BOOT "BOOT" /* Simple Boot Flag Table */ |
66 | #define ACPI_SIG_CSRT "CSRT" /* Core System Resource Table */ | ||
67 | #define ACPI_SIG_DBG2 "DBG2" /* Debug Port table type 2 */ | ||
66 | #define ACPI_SIG_DBGP "DBGP" /* Debug Port table */ | 68 | #define ACPI_SIG_DBGP "DBGP" /* Debug Port table */ |
67 | #define ACPI_SIG_DMAR "DMAR" /* DMA Remapping table */ | 69 | #define ACPI_SIG_DMAR "DMAR" /* DMA Remapping table */ |
68 | #define ACPI_SIG_HPET "HPET" /* High Precision Event Timer table */ | 70 | #define ACPI_SIG_HPET "HPET" /* High Precision Event Timer table */ |
@@ -96,9 +98,15 @@ | |||
96 | #pragma pack(1) | 98 | #pragma pack(1) |
97 | 99 | ||
98 | /* | 100 | /* |
99 | * Note about bitfields: The u8 type is used for bitfields in ACPI tables. | 101 | * Note: C bitfields are not used for this reason: |
100 | * This is the only type that is even remotely portable. Anything else is not | 102 | * |
101 | * portable, so do not use any other bitfield types. | 103 | * "Bitfields are great and easy to read, but unfortunately the C language |
104 | * does not specify the layout of bitfields in memory, which means they are | ||
105 | * essentially useless for dealing with packed data in on-disk formats or | ||
106 | * binary wire protocols." (Or ACPI tables and buffers.) "If you ask me, | ||
107 | * this decision was a design error in C. Ritchie could have picked an order | ||
108 | * and stuck with it." Norman Ramsey. | ||
109 | * See http://stackoverflow.com/a/1053662/41661 | ||
102 | */ | 110 | */ |
103 | 111 | ||
104 | /******************************************************************************* | 112 | /******************************************************************************* |
@@ -232,6 +240,115 @@ struct acpi_table_boot { | |||
232 | 240 | ||
233 | /******************************************************************************* | 241 | /******************************************************************************* |
234 | * | 242 | * |
243 | * CSRT - Core System Resource Table | ||
244 | * Version 0 | ||
245 | * | ||
246 | * Conforms to the "Core System Resource Table (CSRT)", November 14, 2011 | ||
247 | * | ||
248 | ******************************************************************************/ | ||
249 | |||
250 | struct acpi_table_csrt { | ||
251 | struct acpi_table_header header; /* Common ACPI table header */ | ||
252 | }; | ||
253 | |||
254 | /* Resource Group subtable */ | ||
255 | |||
256 | struct acpi_csrt_group { | ||
257 | u32 length; | ||
258 | u32 vendor_id; | ||
259 | u32 subvendor_id; | ||
260 | u16 device_id; | ||
261 | u16 subdevice_id; | ||
262 | u16 revision; | ||
263 | u16 reserved; | ||
264 | u32 info_length; | ||
265 | |||
266 | /* Shared data (length = info_length) immediately follows */ | ||
267 | }; | ||
268 | |||
269 | /* Resource Descriptor subtable */ | ||
270 | |||
271 | struct acpi_csrt_descriptor { | ||
272 | u32 length; | ||
273 | u16 type; | ||
274 | u16 subtype; | ||
275 | u32 uid; | ||
276 | |||
277 | /* Resource-specific information immediately follows */ | ||
278 | }; | ||
279 | |||
280 | /* Resource Types */ | ||
281 | |||
282 | #define ACPI_CSRT_TYPE_INTERRUPT 0x0001 | ||
283 | #define ACPI_CSRT_TYPE_TIMER 0x0002 | ||
284 | #define ACPI_CSRT_TYPE_DMA 0x0003 | ||
285 | |||
286 | /* Resource Subtypes */ | ||
287 | |||
288 | #define ACPI_CSRT_XRUPT_LINE 0x0000 | ||
289 | #define ACPI_CSRT_XRUPT_CONTROLLER 0x0001 | ||
290 | #define ACPI_CSRT_TIMER 0x0000 | ||
291 | #define ACPI_CSRT_DMA_CHANNEL 0x0000 | ||
292 | #define ACPI_CSRT_DMA_CONTROLLER 0x0001 | ||
293 | |||
294 | /******************************************************************************* | ||
295 | * | ||
296 | * DBG2 - Debug Port Table 2 | ||
297 | * Version 0 (Both main table and subtables) | ||
298 | * | ||
299 | * Conforms to "Microsoft Debug Port Table 2 (DBG2)", May 22 2012. | ||
300 | * | ||
301 | ******************************************************************************/ | ||
302 | |||
303 | struct acpi_table_dbg2 { | ||
304 | struct acpi_table_header header; /* Common ACPI table header */ | ||
305 | u32 info_offset; | ||
306 | u32 info_count; | ||
307 | }; | ||
308 | |||
309 | /* Debug Device Information Subtable */ | ||
310 | |||
311 | struct acpi_dbg2_device { | ||
312 | u8 revision; | ||
313 | u16 length; | ||
314 | u8 register_count; /* Number of base_address registers */ | ||
315 | u16 namepath_length; | ||
316 | u16 namepath_offset; | ||
317 | u16 oem_data_length; | ||
318 | u16 oem_data_offset; | ||
319 | u16 port_type; | ||
320 | u16 port_subtype; | ||
321 | u16 reserved; | ||
322 | u16 base_address_offset; | ||
323 | u16 address_size_offset; | ||
324 | /* | ||
325 | * Data that follows: | ||
326 | * base_address (required) - Each in 12-byte Generic Address Structure format. | ||
327 | * address_size (required) - Array of u32 sizes corresponding to each base_address register. | ||
328 | * Namepath (required) - Null terminated string. Single dot if not supported. | ||
329 | * oem_data (optional) - Length is oem_data_length. | ||
330 | */ | ||
331 | }; | ||
332 | |||
333 | /* Types for port_type field above */ | ||
334 | |||
335 | #define ACPI_DBG2_SERIAL_PORT 0x8000 | ||
336 | #define ACPI_DBG2_1394_PORT 0x8001 | ||
337 | #define ACPI_DBG2_USB_PORT 0x8002 | ||
338 | #define ACPI_DBG2_NET_PORT 0x8003 | ||
339 | |||
340 | /* Subtypes for port_subtype field above */ | ||
341 | |||
342 | #define ACPI_DBG2_16550_COMPATIBLE 0x0000 | ||
343 | #define ACPI_DBG2_16550_SUBSET 0x0001 | ||
344 | |||
345 | #define ACPI_DBG2_1394_STANDARD 0x0000 | ||
346 | |||
347 | #define ACPI_DBG2_USB_XHCI 0x0000 | ||
348 | #define ACPI_DBG2_USB_EHCI 0x0001 | ||
349 | |||
350 | /******************************************************************************* | ||
351 | * | ||
235 | * DBGP - Debug Port table | 352 | * DBGP - Debug Port table |
236 | * Version 1 | 353 | * Version 1 |
237 | * | 354 | * |
diff --git a/include/acpi/actbl3.h b/include/acpi/actbl3.h index f65a0ed869eb..8c61b5fe42a4 100644 --- a/include/acpi/actbl3.h +++ b/include/acpi/actbl3.h | |||
@@ -75,7 +75,6 @@ | |||
75 | /* Reserved table signatures */ | 75 | /* Reserved table signatures */ |
76 | 76 | ||
77 | #define ACPI_SIG_CSRT "CSRT" /* Core System Resources Table */ | 77 | #define ACPI_SIG_CSRT "CSRT" /* Core System Resources Table */ |
78 | #define ACPI_SIG_DBG2 "DBG2" /* Debug Port table 2 */ | ||
79 | #define ACPI_SIG_MATR "MATR" /* Memory Address Translation Table */ | 78 | #define ACPI_SIG_MATR "MATR" /* Memory Address Translation Table */ |
80 | #define ACPI_SIG_MSDM "MSDM" /* Microsoft Data Management Table */ | 79 | #define ACPI_SIG_MSDM "MSDM" /* Microsoft Data Management Table */ |
81 | #define ACPI_SIG_WPBT "WPBT" /* Windows Platform Binary Table */ | 80 | #define ACPI_SIG_WPBT "WPBT" /* Windows Platform Binary Table */ |
@@ -87,9 +86,15 @@ | |||
87 | #pragma pack(1) | 86 | #pragma pack(1) |
88 | 87 | ||
89 | /* | 88 | /* |
90 | * Note about bitfields: The u8 type is used for bitfields in ACPI tables. | 89 | * Note: C bitfields are not used for this reason: |
91 | * This is the only type that is even remotely portable. Anything else is not | 90 | * |
92 | * portable, so do not use any other bitfield types. | 91 | * "Bitfields are great and easy to read, but unfortunately the C language |
92 | * does not specify the layout of bitfields in memory, which means they are | ||
93 | * essentially useless for dealing with packed data in on-disk formats or | ||
94 | * binary wire protocols." (Or ACPI tables and buffers.) "If you ask me, | ||
95 | * this decision was a design error in C. Ritchie could have picked an order | ||
96 | * and stuck with it." Norman Ramsey. | ||
97 | * See http://stackoverflow.com/a/1053662/41661 | ||
93 | */ | 98 | */ |
94 | 99 | ||
95 | /******************************************************************************* | 100 | /******************************************************************************* |
diff --git a/include/acpi/actypes.h b/include/acpi/actypes.h index 3d00bd5bd7e3..a85bae968262 100644 --- a/include/acpi/actypes.h +++ b/include/acpi/actypes.h | |||
@@ -519,13 +519,6 @@ typedef u64 acpi_integer; | |||
519 | #define ACPI_SLEEP_TYPE_INVALID 0xFF | 519 | #define ACPI_SLEEP_TYPE_INVALID 0xFF |
520 | 520 | ||
521 | /* | 521 | /* |
522 | * Sleep/Wake flags | ||
523 | */ | ||
524 | #define ACPI_NO_OPTIONAL_METHODS 0x00 /* Do not execute any optional methods */ | ||
525 | #define ACPI_EXECUTE_GTS 0x01 /* For enter sleep interface */ | ||
526 | #define ACPI_EXECUTE_BFS 0x02 /* For leave sleep prep interface */ | ||
527 | |||
528 | /* | ||
529 | * Standard notify values | 522 | * Standard notify values |
530 | */ | 523 | */ |
531 | #define ACPI_NOTIFY_BUS_CHECK (u8) 0x00 | 524 | #define ACPI_NOTIFY_BUS_CHECK (u8) 0x00 |