acmacros.h (27f7c583) | acmacros.h (db2bae30) |
---|---|
1/****************************************************************************** 2 * 3 * Name: acmacros.h - C macros for the entire subsystem. | 1/****************************************************************************** 2 * 3 * Name: acmacros.h - C macros for the entire subsystem. |
4 * $Revision: 1.191 $ | 4 * $Revision: 1.199 $ |
5 * 6 *****************************************************************************/ 7 8/****************************************************************************** 9 * 10 * 1. Copyright Notice 11 * | 5 * 6 *****************************************************************************/ 7 8/****************************************************************************** 9 * 10 * 1. Copyright Notice 11 * |
12 * Some or all of this work - Copyright (c) 1999 - 2006, Intel Corp. | 12 * Some or all of this work - Copyright (c) 1999 - 2008, Intel Corp. |
13 * All rights reserved. 14 * 15 * 2. License 16 * 17 * 2.1. This is your license from Intel Corp. under its intellectual property 18 * rights. You may have additional license terms from the party that provided 19 * you this software, covering your right to use that party's intellectual 20 * property rights. --- 103 unchanged lines hidden (view full) --- 124#define ACPI_LOWORD(l) ((UINT16)(UINT32)(l)) 125#define ACPI_HIWORD(l) ((UINT16)((((UINT32)(l)) >> 16) & 0xFFFF)) 126#define ACPI_LOBYTE(l) ((UINT8)(UINT16)(l)) 127#define ACPI_HIBYTE(l) ((UINT8)((((UINT16)(l)) >> 8) & 0xFF)) 128 129#define ACPI_SET_BIT(target,bit) ((target) |= (bit)) 130#define ACPI_CLEAR_BIT(target,bit) ((target) &= ~(bit)) 131#define ACPI_MIN(a,b) (((a)<(b))?(a):(b)) | 13 * All rights reserved. 14 * 15 * 2. License 16 * 17 * 2.1. This is your license from Intel Corp. under its intellectual property 18 * rights. You may have additional license terms from the party that provided 19 * you this software, covering your right to use that party's intellectual 20 * property rights. --- 103 unchanged lines hidden (view full) --- 124#define ACPI_LOWORD(l) ((UINT16)(UINT32)(l)) 125#define ACPI_HIWORD(l) ((UINT16)((((UINT32)(l)) >> 16) & 0xFFFF)) 126#define ACPI_LOBYTE(l) ((UINT8)(UINT16)(l)) 127#define ACPI_HIBYTE(l) ((UINT8)((((UINT16)(l)) >> 8) & 0xFF)) 128 129#define ACPI_SET_BIT(target,bit) ((target) |= (bit)) 130#define ACPI_CLEAR_BIT(target,bit) ((target) &= ~(bit)) 131#define ACPI_MIN(a,b) (((a)<(b))?(a):(b)) |
132#define ACPI_MAX(a,b) (((a)>(b))?(a):(b)) |
|
132 133/* Size calculation */ 134 135#define ACPI_ARRAY_LENGTH(x) (sizeof(x) / sizeof((x)[0])) 136 137 | 133 134/* Size calculation */ 135 136#define ACPI_ARRAY_LENGTH(x) (sizeof(x) / sizeof((x)[0])) 137 138 |
138#if ACPI_MACHINE_WIDTH == 16 139 | |
140/* | 139/* |
141 * For 16-bit addresses, we have to assume that the upper 32 bits 142 * (out of 64) are zero. 143 */ 144#define ACPI_LODWORD(l) ((UINT32)(l)) 145#define ACPI_HIDWORD(l) ((UINT32)(0)) 146 147#define ACPI_GET_ADDRESS(a) ((a).Lo) 148#define ACPI_STORE_ADDRESS(a,b) {(a).Hi=0;(a).Lo=(UINT32)(b);} 149#define ACPI_VALID_ADDRESS(a) ((a).Hi | (a).Lo) 150 151#else 152#ifdef ACPI_NO_INTEGER64_SUPPORT 153/* 154 * ACPI_INTEGER is 32-bits, no 64-bit support on this platform 155 */ 156#define ACPI_LODWORD(l) ((UINT32)(l)) 157#define ACPI_HIDWORD(l) ((UINT32)(0)) 158 159#define ACPI_GET_ADDRESS(a) (a) 160#define ACPI_STORE_ADDRESS(a,b) ((a)=(b)) 161#define ACPI_VALID_ADDRESS(a) (a) 162 163#else 164 165/* 166 * Full 64-bit address/integer on both 32-bit and 64-bit platforms 167 */ 168#define ACPI_LODWORD(l) ((UINT32)(UINT64)(l)) 169#define ACPI_HIDWORD(l) ((UINT32)(((*(UINT64_STRUCT *)(void *)(&l))).Hi)) 170 171#define ACPI_GET_ADDRESS(a) (a) 172#define ACPI_STORE_ADDRESS(a,b) ((a)=(ACPI_PHYSICAL_ADDRESS)(b)) 173#define ACPI_VALID_ADDRESS(a) (a) 174#endif 175#endif 176 177/* 178 * printf() format helpers 179 */ 180 181/* Split 64-bit integer into two 32-bit values. Use with %8.8X%8.8X */ 182 183#define ACPI_FORMAT_UINT64(i) ACPI_HIDWORD(i),ACPI_LODWORD(i) 184 185/* 186 * Extract data using a pointer. Any more than a byte and we | 140 * Extract data using a pointer. Any more than a byte and we |
187 * get into potential aligment issues -- see the STORE macros below. 188 * Use with care. 189 */ 190#define ACPI_GET8(ptr) *ACPI_CAST_PTR (UINT8, ptr) 191#define ACPI_GET16(ptr) *ACPI_CAST_PTR (UINT16, ptr) 192#define ACPI_GET32(ptr) *ACPI_CAST_PTR (UINT32, ptr) 193#define ACPI_GET64(ptr) *ACPI_CAST_PTR (UINT64, ptr) 194#define ACPI_SET8(ptr) *ACPI_CAST_PTR (UINT8, ptr) 195#define ACPI_SET16(ptr) *ACPI_CAST_PTR (UINT16, ptr) 196#define ACPI_SET32(ptr) *ACPI_CAST_PTR (UINT32, ptr) 197#define ACPI_SET64(ptr) *ACPI_CAST_PTR (UINT64, ptr) 198 199/* 200 * Pointer manipulation 201 */ 202#define ACPI_CAST_PTR(t, p) ((t *) (ACPI_UINTPTR_T) (p)) 203#define ACPI_CAST_INDIRECT_PTR(t, p) ((t **) (ACPI_UINTPTR_T) (p)) | 141 * get into potential aligment issues -- see the STORE macros below. 142 * Use with care. 143 */ 144#define ACPI_GET8(ptr) *ACPI_CAST_PTR (UINT8, ptr) 145#define ACPI_GET16(ptr) *ACPI_CAST_PTR (UINT16, ptr) 146#define ACPI_GET32(ptr) *ACPI_CAST_PTR (UINT32, ptr) 147#define ACPI_GET64(ptr) *ACPI_CAST_PTR (UINT64, ptr) 148#define ACPI_SET8(ptr) *ACPI_CAST_PTR (UINT8, ptr) 149#define ACPI_SET16(ptr) *ACPI_CAST_PTR (UINT16, ptr) 150#define ACPI_SET32(ptr) *ACPI_CAST_PTR (UINT32, ptr) 151#define ACPI_SET64(ptr) *ACPI_CAST_PTR (UINT64, ptr) 152 153/* 154 * Pointer manipulation 155 */ 156#define ACPI_CAST_PTR(t, p) ((t *) (ACPI_UINTPTR_T) (p)) 157#define ACPI_CAST_INDIRECT_PTR(t, p) ((t **) (ACPI_UINTPTR_T) (p)) |
204#define ACPI_ADD_PTR(t,a,b) ACPI_CAST_PTR (t, (ACPI_CAST_PTR (UINT8,(a)) + (ACPI_NATIVE_UINT)(b))) 205#define ACPI_PTR_DIFF(a,b) (ACPI_NATIVE_UINT) (ACPI_CAST_PTR (UINT8,(a)) - ACPI_CAST_PTR (UINT8,(b))) | 158#define ACPI_ADD_PTR(t, a, b) ACPI_CAST_PTR (t, (ACPI_CAST_PTR (UINT8, (a)) + (ACPI_SIZE)(b))) 159#define ACPI_PTR_DIFF(a, b) (ACPI_SIZE) (ACPI_CAST_PTR (UINT8, (a)) - ACPI_CAST_PTR (UINT8, (b))) |
206 207/* Pointer/Integer type conversions */ 208 | 160 161/* Pointer/Integer type conversions */ 162 |
209#define ACPI_TO_POINTER(i) ACPI_ADD_PTR (void,(void *) NULL,(ACPI_NATIVE_UINT) i) 210#define ACPI_TO_INTEGER(p) ACPI_PTR_DIFF (p,(void *) NULL) 211#define ACPI_OFFSET(d,f) (ACPI_SIZE) ACPI_PTR_DIFF (&(((d *)0)->f),(void *) NULL) 212 213#if ACPI_MACHINE_WIDTH == 16 214#define ACPI_STORE_POINTER(d,s) ACPI_MOVE_32_TO_32(d,s) 215#define ACPI_PHYSADDR_TO_PTR(i) (void *)(i) 216#define ACPI_PTR_TO_PHYSADDR(i) (UINT32) ACPI_CAST_PTR (UINT8,(i)) 217#else | 163#define ACPI_TO_POINTER(i) ACPI_ADD_PTR (void, (void *) NULL,(ACPI_SIZE) i) 164#define ACPI_TO_INTEGER(p) ACPI_PTR_DIFF (p, (void *) NULL) 165#define ACPI_OFFSET(d, f) (ACPI_SIZE) ACPI_PTR_DIFF (&(((d *)0)->f), (void *) NULL) |
218#define ACPI_PHYSADDR_TO_PTR(i) ACPI_TO_POINTER(i) 219#define ACPI_PTR_TO_PHYSADDR(i) ACPI_TO_INTEGER(i) | 166#define ACPI_PHYSADDR_TO_PTR(i) ACPI_TO_POINTER(i) 167#define ACPI_PTR_TO_PHYSADDR(i) ACPI_TO_INTEGER(i) |
220#endif | |
221 222#ifndef ACPI_MISALIGNMENT_NOT_SUPPORTED | 168 169#ifndef ACPI_MISALIGNMENT_NOT_SUPPORTED |
223#define ACPI_COMPARE_NAME(a,b) (*ACPI_CAST_PTR (UINT32,(a)) == *ACPI_CAST_PTR (UINT32,(b))) | 170#define ACPI_COMPARE_NAME(a,b) (*ACPI_CAST_PTR (UINT32, (a)) == *ACPI_CAST_PTR (UINT32, (b))) |
224#else | 171#else |
225#define ACPI_COMPARE_NAME(a,b) (!ACPI_STRNCMP (ACPI_CAST_PTR (char,(a)), ACPI_CAST_PTR (char,(b)), ACPI_NAME_SIZE)) | 172#define ACPI_COMPARE_NAME(a,b) (!ACPI_STRNCMP (ACPI_CAST_PTR (char, (a)), ACPI_CAST_PTR (char, (b)), ACPI_NAME_SIZE)) |
226#endif 227 228/* | 173#endif 174 175/* |
176 * Full 64-bit integer must be available on both 32-bit and 64-bit platforms 177 */ 178typedef struct acpi_integer_overlay 179{ 180 UINT32 LoDword; 181 UINT32 HiDword; 182 183} ACPI_INTEGER_OVERLAY; 184 185#define ACPI_LODWORD(Integer) (ACPI_CAST_PTR (ACPI_INTEGER_OVERLAY, &Integer)->LoDword) 186#define ACPI_HIDWORD(Integer) (ACPI_CAST_PTR (ACPI_INTEGER_OVERLAY, &Integer)->HiDword) 187 188/* 189 * printf() format helpers 190 */ 191 192/* Split 64-bit integer into two 32-bit values. Use with %8.8X%8.8X */ 193 194#define ACPI_FORMAT_UINT64(i) ACPI_HIDWORD(i), ACPI_LODWORD(i) 195 196#if ACPI_MACHINE_WIDTH == 64 197#define ACPI_FORMAT_NATIVE_UINT(i) ACPI_FORMAT_UINT64(i) 198#else 199#define ACPI_FORMAT_NATIVE_UINT(i) 0, (i) 200#endif 201 202 203/* |
|
229 * Macros for moving data around to/from buffers that are possibly unaligned. 230 * If the hardware supports the transfer of unaligned data, just do the store. 231 * Otherwise, we have to move one byte at a time. 232 */ 233#ifdef ACPI_BIG_ENDIAN 234/* 235 * Macros for big-endian machines 236 */ 237 | 204 * Macros for moving data around to/from buffers that are possibly unaligned. 205 * If the hardware supports the transfer of unaligned data, just do the store. 206 * Otherwise, we have to move one byte at a time. 207 */ 208#ifdef ACPI_BIG_ENDIAN 209/* 210 * Macros for big-endian machines 211 */ 212 |
238/* This macro sets a buffer index, starting from the end of the buffer */ 239 240#define ACPI_BUFFER_INDEX(BufLen,BufOffset,ByteGran) ((BufLen) - (((BufOffset)+1) * (ByteGran))) 241 | |
242/* These macros reverse the bytes during the move, converting little-endian to big endian */ 243 244 /* Big Endian <== Little Endian */ 245 /* Hi...Lo Lo...Hi */ 246/* 16-bit source, 16/32/64 destination */ 247 | 213/* These macros reverse the bytes during the move, converting little-endian to big endian */ 214 215 /* Big Endian <== Little Endian */ 216 /* Hi...Lo Lo...Hi */ 217/* 16-bit source, 16/32/64 destination */ 218 |
248#define ACPI_MOVE_16_TO_16(d,s) {(( UINT8 *)(void *)(d))[0] = ((UINT8 *)(void *)(s))[1];\ | 219#define ACPI_MOVE_16_TO_16(d, s) {(( UINT8 *)(void *)(d))[0] = ((UINT8 *)(void *)(s))[1];\ |
249 (( UINT8 *)(void *)(d))[1] = ((UINT8 *)(void *)(s))[0];} 250 | 220 (( UINT8 *)(void *)(d))[1] = ((UINT8 *)(void *)(s))[0];} 221 |
251#define ACPI_MOVE_16_TO_32(d,s) {(*(UINT32 *)(void *)(d))=0;\ | 222#define ACPI_MOVE_16_TO_32(d, s) {(*(UINT32 *)(void *)(d))=0;\ |
252 ((UINT8 *)(void *)(d))[2] = ((UINT8 *)(void *)(s))[1];\ 253 ((UINT8 *)(void *)(d))[3] = ((UINT8 *)(void *)(s))[0];} 254 | 223 ((UINT8 *)(void *)(d))[2] = ((UINT8 *)(void *)(s))[1];\ 224 ((UINT8 *)(void *)(d))[3] = ((UINT8 *)(void *)(s))[0];} 225 |
255#define ACPI_MOVE_16_TO_64(d,s) {(*(UINT64 *)(void *)(d))=0;\ | 226#define ACPI_MOVE_16_TO_64(d, s) {(*(UINT64 *)(void *)(d))=0;\ |
256 ((UINT8 *)(void *)(d))[6] = ((UINT8 *)(void *)(s))[1];\ 257 ((UINT8 *)(void *)(d))[7] = ((UINT8 *)(void *)(s))[0];} 258 259/* 32-bit source, 16/32/64 destination */ 260 | 227 ((UINT8 *)(void *)(d))[6] = ((UINT8 *)(void *)(s))[1];\ 228 ((UINT8 *)(void *)(d))[7] = ((UINT8 *)(void *)(s))[0];} 229 230/* 32-bit source, 16/32/64 destination */ 231 |
261#define ACPI_MOVE_32_TO_16(d,s) ACPI_MOVE_16_TO_16(d,s) /* Truncate to 16 */ | 232#define ACPI_MOVE_32_TO_16(d, s) ACPI_MOVE_16_TO_16(d, s) /* Truncate to 16 */ |
262 | 233 |
263#define ACPI_MOVE_32_TO_32(d,s) {(( UINT8 *)(void *)(d))[0] = ((UINT8 *)(void *)(s))[3];\ | 234#define ACPI_MOVE_32_TO_32(d, s) {(( UINT8 *)(void *)(d))[0] = ((UINT8 *)(void *)(s))[3];\ |
264 (( UINT8 *)(void *)(d))[1] = ((UINT8 *)(void *)(s))[2];\ 265 (( UINT8 *)(void *)(d))[2] = ((UINT8 *)(void *)(s))[1];\ 266 (( UINT8 *)(void *)(d))[3] = ((UINT8 *)(void *)(s))[0];} 267 | 235 (( UINT8 *)(void *)(d))[1] = ((UINT8 *)(void *)(s))[2];\ 236 (( UINT8 *)(void *)(d))[2] = ((UINT8 *)(void *)(s))[1];\ 237 (( UINT8 *)(void *)(d))[3] = ((UINT8 *)(void *)(s))[0];} 238 |
268#define ACPI_MOVE_32_TO_64(d,s) {(*(UINT64 *)(void *)(d))=0;\ | 239#define ACPI_MOVE_32_TO_64(d, s) {(*(UINT64 *)(void *)(d))=0;\ |
269 ((UINT8 *)(void *)(d))[4] = ((UINT8 *)(void *)(s))[3];\ 270 ((UINT8 *)(void *)(d))[5] = ((UINT8 *)(void *)(s))[2];\ 271 ((UINT8 *)(void *)(d))[6] = ((UINT8 *)(void *)(s))[1];\ 272 ((UINT8 *)(void *)(d))[7] = ((UINT8 *)(void *)(s))[0];} 273 274/* 64-bit source, 16/32/64 destination */ 275 | 240 ((UINT8 *)(void *)(d))[4] = ((UINT8 *)(void *)(s))[3];\ 241 ((UINT8 *)(void *)(d))[5] = ((UINT8 *)(void *)(s))[2];\ 242 ((UINT8 *)(void *)(d))[6] = ((UINT8 *)(void *)(s))[1];\ 243 ((UINT8 *)(void *)(d))[7] = ((UINT8 *)(void *)(s))[0];} 244 245/* 64-bit source, 16/32/64 destination */ 246 |
276#define ACPI_MOVE_64_TO_16(d,s) ACPI_MOVE_16_TO_16(d,s) /* Truncate to 16 */ | 247#define ACPI_MOVE_64_TO_16(d, s) ACPI_MOVE_16_TO_16(d, s) /* Truncate to 16 */ |
277 | 248 |
278#define ACPI_MOVE_64_TO_32(d,s) ACPI_MOVE_32_TO_32(d,s) /* Truncate to 32 */ | 249#define ACPI_MOVE_64_TO_32(d, s) ACPI_MOVE_32_TO_32(d, s) /* Truncate to 32 */ |
279 | 250 |
280#define ACPI_MOVE_64_TO_64(d,s) {(( UINT8 *)(void *)(d))[0] = ((UINT8 *)(void *)(s))[7];\ | 251#define ACPI_MOVE_64_TO_64(d, s) {(( UINT8 *)(void *)(d))[0] = ((UINT8 *)(void *)(s))[7];\ |
281 (( UINT8 *)(void *)(d))[1] = ((UINT8 *)(void *)(s))[6];\ 282 (( UINT8 *)(void *)(d))[2] = ((UINT8 *)(void *)(s))[5];\ 283 (( UINT8 *)(void *)(d))[3] = ((UINT8 *)(void *)(s))[4];\ 284 (( UINT8 *)(void *)(d))[4] = ((UINT8 *)(void *)(s))[3];\ 285 (( UINT8 *)(void *)(d))[5] = ((UINT8 *)(void *)(s))[2];\ 286 (( UINT8 *)(void *)(d))[6] = ((UINT8 *)(void *)(s))[1];\ 287 (( UINT8 *)(void *)(d))[7] = ((UINT8 *)(void *)(s))[0];} 288#else 289/* 290 * Macros for little-endian machines 291 */ 292 | 252 (( UINT8 *)(void *)(d))[1] = ((UINT8 *)(void *)(s))[6];\ 253 (( UINT8 *)(void *)(d))[2] = ((UINT8 *)(void *)(s))[5];\ 254 (( UINT8 *)(void *)(d))[3] = ((UINT8 *)(void *)(s))[4];\ 255 (( UINT8 *)(void *)(d))[4] = ((UINT8 *)(void *)(s))[3];\ 256 (( UINT8 *)(void *)(d))[5] = ((UINT8 *)(void *)(s))[2];\ 257 (( UINT8 *)(void *)(d))[6] = ((UINT8 *)(void *)(s))[1];\ 258 (( UINT8 *)(void *)(d))[7] = ((UINT8 *)(void *)(s))[0];} 259#else 260/* 261 * Macros for little-endian machines 262 */ 263 |
293/* This macro sets a buffer index, starting from the beginning of the buffer */ 294 295#define ACPI_BUFFER_INDEX(BufLen,BufOffset,ByteGran) (BufOffset) 296 | |
297#ifndef ACPI_MISALIGNMENT_NOT_SUPPORTED 298 299/* The hardware supports unaligned transfers, just do the little-endian move */ 300 | 264#ifndef ACPI_MISALIGNMENT_NOT_SUPPORTED 265 266/* The hardware supports unaligned transfers, just do the little-endian move */ 267 |
301#if ACPI_MACHINE_WIDTH == 16 302 303/* No 64-bit integers */ | |
304/* 16-bit source, 16/32/64 destination */ 305 | 268/* 16-bit source, 16/32/64 destination */ 269 |
306#define ACPI_MOVE_16_TO_16(d,s) *(UINT16 *)(void *)(d) = *(UINT16 *)(void *)(s) 307#define ACPI_MOVE_16_TO_32(d,s) *(UINT32 *)(void *)(d) = *(UINT16 *)(void *)(s) 308#define ACPI_MOVE_16_TO_64(d,s) ACPI_MOVE_16_TO_32(d,s) | 270#define ACPI_MOVE_16_TO_16(d, s) *(UINT16 *)(void *)(d) = *(UINT16 *)(void *)(s) 271#define ACPI_MOVE_16_TO_32(d, s) *(UINT32 *)(void *)(d) = *(UINT16 *)(void *)(s) 272#define ACPI_MOVE_16_TO_64(d, s) *(UINT64 *)(void *)(d) = *(UINT16 *)(void *)(s) |
309 310/* 32-bit source, 16/32/64 destination */ 311 | 273 274/* 32-bit source, 16/32/64 destination */ 275 |
312#define ACPI_MOVE_32_TO_16(d,s) ACPI_MOVE_16_TO_16(d,s) /* Truncate to 16 */ 313#define ACPI_MOVE_32_TO_32(d,s) *(UINT32 *)(void *)(d) = *(UINT32 *)(void *)(s) 314#define ACPI_MOVE_32_TO_64(d,s) ACPI_MOVE_32_TO_32(d,s) | 276#define ACPI_MOVE_32_TO_16(d, s) ACPI_MOVE_16_TO_16(d, s) /* Truncate to 16 */ 277#define ACPI_MOVE_32_TO_32(d, s) *(UINT32 *)(void *)(d) = *(UINT32 *)(void *)(s) 278#define ACPI_MOVE_32_TO_64(d, s) *(UINT64 *)(void *)(d) = *(UINT32 *)(void *)(s) |
315 316/* 64-bit source, 16/32/64 destination */ 317 | 279 280/* 64-bit source, 16/32/64 destination */ 281 |
318#define ACPI_MOVE_64_TO_16(d,s) ACPI_MOVE_16_TO_16(d,s) /* Truncate to 16 */ 319#define ACPI_MOVE_64_TO_32(d,s) ACPI_MOVE_32_TO_32(d,s) /* Truncate to 32 */ 320#define ACPI_MOVE_64_TO_64(d,s) ACPI_MOVE_32_TO_32(d,s) | 282#define ACPI_MOVE_64_TO_16(d, s) ACPI_MOVE_16_TO_16(d, s) /* Truncate to 16 */ 283#define ACPI_MOVE_64_TO_32(d, s) ACPI_MOVE_32_TO_32(d, s) /* Truncate to 32 */ 284#define ACPI_MOVE_64_TO_64(d, s) *(UINT64 *)(void *)(d) = *(UINT64 *)(void *)(s) |
321 322#else | 285 286#else |
323/* 16-bit source, 16/32/64 destination */ 324 325#define ACPI_MOVE_16_TO_16(d,s) *(UINT16 *)(void *)(d) = *(UINT16 *)(void *)(s) 326#define ACPI_MOVE_16_TO_32(d,s) *(UINT32 *)(void *)(d) = *(UINT16 *)(void *)(s) 327#define ACPI_MOVE_16_TO_64(d,s) *(UINT64 *)(void *)(d) = *(UINT16 *)(void *)(s) 328 329/* 32-bit source, 16/32/64 destination */ 330 331#define ACPI_MOVE_32_TO_16(d,s) ACPI_MOVE_16_TO_16(d,s) /* Truncate to 16 */ 332#define ACPI_MOVE_32_TO_32(d,s) *(UINT32 *)(void *)(d) = *(UINT32 *)(void *)(s) 333#define ACPI_MOVE_32_TO_64(d,s) *(UINT64 *)(void *)(d) = *(UINT32 *)(void *)(s) 334 335/* 64-bit source, 16/32/64 destination */ 336 337#define ACPI_MOVE_64_TO_16(d,s) ACPI_MOVE_16_TO_16(d,s) /* Truncate to 16 */ 338#define ACPI_MOVE_64_TO_32(d,s) ACPI_MOVE_32_TO_32(d,s) /* Truncate to 32 */ 339#define ACPI_MOVE_64_TO_64(d,s) *(UINT64 *)(void *)(d) = *(UINT64 *)(void *)(s) 340#endif 341 342#else | |
343/* | 287/* |
344 * The hardware does not support unaligned transfers. We must move the 345 * data one byte at a time. These macros work whether the source or | 288 * The hardware does not support unaligned transfers. We must move the 289 * data one byte at a time. These macros work whether the source or |
346 * the destination (or both) is/are unaligned. (Little-endian move) 347 */ 348 349/* 16-bit source, 16/32/64 destination */ 350 | 290 * the destination (or both) is/are unaligned. (Little-endian move) 291 */ 292 293/* 16-bit source, 16/32/64 destination */ 294 |
351#define ACPI_MOVE_16_TO_16(d,s) {(( UINT8 *)(void *)(d))[0] = ((UINT8 *)(void *)(s))[0];\ | 295#define ACPI_MOVE_16_TO_16(d, s) {(( UINT8 *)(void *)(d))[0] = ((UINT8 *)(void *)(s))[0];\ |
352 (( UINT8 *)(void *)(d))[1] = ((UINT8 *)(void *)(s))[1];} 353 | 296 (( UINT8 *)(void *)(d))[1] = ((UINT8 *)(void *)(s))[1];} 297 |
354#define ACPI_MOVE_16_TO_32(d,s) {(*(UINT32 *)(void *)(d)) = 0; ACPI_MOVE_16_TO_16(d,s);} 355#define ACPI_MOVE_16_TO_64(d,s) {(*(UINT64 *)(void *)(d)) = 0; ACPI_MOVE_16_TO_16(d,s);} | 298#define ACPI_MOVE_16_TO_32(d, s) {(*(UINT32 *)(void *)(d)) = 0; ACPI_MOVE_16_TO_16(d, s);} 299#define ACPI_MOVE_16_TO_64(d, s) {(*(UINT64 *)(void *)(d)) = 0; ACPI_MOVE_16_TO_16(d, s);} |
356 357/* 32-bit source, 16/32/64 destination */ 358 | 300 301/* 32-bit source, 16/32/64 destination */ 302 |
359#define ACPI_MOVE_32_TO_16(d,s) ACPI_MOVE_16_TO_16(d,s) /* Truncate to 16 */ | 303#define ACPI_MOVE_32_TO_16(d, s) ACPI_MOVE_16_TO_16(d, s) /* Truncate to 16 */ |
360 | 304 |
361#define ACPI_MOVE_32_TO_32(d,s) {(( UINT8 *)(void *)(d))[0] = ((UINT8 *)(void *)(s))[0];\ | 305#define ACPI_MOVE_32_TO_32(d, s) {(( UINT8 *)(void *)(d))[0] = ((UINT8 *)(void *)(s))[0];\ |
362 (( UINT8 *)(void *)(d))[1] = ((UINT8 *)(void *)(s))[1];\ 363 (( UINT8 *)(void *)(d))[2] = ((UINT8 *)(void *)(s))[2];\ 364 (( UINT8 *)(void *)(d))[3] = ((UINT8 *)(void *)(s))[3];} 365 | 306 (( UINT8 *)(void *)(d))[1] = ((UINT8 *)(void *)(s))[1];\ 307 (( UINT8 *)(void *)(d))[2] = ((UINT8 *)(void *)(s))[2];\ 308 (( UINT8 *)(void *)(d))[3] = ((UINT8 *)(void *)(s))[3];} 309 |
366#define ACPI_MOVE_32_TO_64(d,s) {(*(UINT64 *)(void *)(d)) = 0; ACPI_MOVE_32_TO_32(d,s);} | 310#define ACPI_MOVE_32_TO_64(d, s) {(*(UINT64 *)(void *)(d)) = 0; ACPI_MOVE_32_TO_32(d, s);} |
367 368/* 64-bit source, 16/32/64 destination */ 369 | 311 312/* 64-bit source, 16/32/64 destination */ 313 |
370#define ACPI_MOVE_64_TO_16(d,s) ACPI_MOVE_16_TO_16(d,s) /* Truncate to 16 */ 371#define ACPI_MOVE_64_TO_32(d,s) ACPI_MOVE_32_TO_32(d,s) /* Truncate to 32 */ 372#define ACPI_MOVE_64_TO_64(d,s) {(( UINT8 *)(void *)(d))[0] = ((UINT8 *)(void *)(s))[0];\ | 314#define ACPI_MOVE_64_TO_16(d, s) ACPI_MOVE_16_TO_16(d, s) /* Truncate to 16 */ 315#define ACPI_MOVE_64_TO_32(d, s) ACPI_MOVE_32_TO_32(d, s) /* Truncate to 32 */ 316#define ACPI_MOVE_64_TO_64(d, s) {(( UINT8 *)(void *)(d))[0] = ((UINT8 *)(void *)(s))[0];\ |
373 (( UINT8 *)(void *)(d))[1] = ((UINT8 *)(void *)(s))[1];\ 374 (( UINT8 *)(void *)(d))[2] = ((UINT8 *)(void *)(s))[2];\ 375 (( UINT8 *)(void *)(d))[3] = ((UINT8 *)(void *)(s))[3];\ 376 (( UINT8 *)(void *)(d))[4] = ((UINT8 *)(void *)(s))[4];\ 377 (( UINT8 *)(void *)(d))[5] = ((UINT8 *)(void *)(s))[5];\ 378 (( UINT8 *)(void *)(d))[6] = ((UINT8 *)(void *)(s))[6];\ 379 (( UINT8 *)(void *)(d))[7] = ((UINT8 *)(void *)(s))[7];} 380#endif 381#endif 382 | 317 (( UINT8 *)(void *)(d))[1] = ((UINT8 *)(void *)(s))[1];\ 318 (( UINT8 *)(void *)(d))[2] = ((UINT8 *)(void *)(s))[2];\ 319 (( UINT8 *)(void *)(d))[3] = ((UINT8 *)(void *)(s))[3];\ 320 (( UINT8 *)(void *)(d))[4] = ((UINT8 *)(void *)(s))[4];\ 321 (( UINT8 *)(void *)(d))[5] = ((UINT8 *)(void *)(s))[5];\ 322 (( UINT8 *)(void *)(d))[6] = ((UINT8 *)(void *)(s))[6];\ 323 (( UINT8 *)(void *)(d))[7] = ((UINT8 *)(void *)(s))[7];} 324#endif 325#endif 326 |
383/* Macros based on machine integer width */ | |
384 | 327 |
385#if ACPI_MACHINE_WIDTH == 16 386#define ACPI_MOVE_SIZE_TO_16(d,s) ACPI_MOVE_16_TO_16(d,s) 387 388#elif ACPI_MACHINE_WIDTH == 32 389#define ACPI_MOVE_SIZE_TO_16(d,s) ACPI_MOVE_32_TO_16(d,s) 390 391#elif ACPI_MACHINE_WIDTH == 64 392#define ACPI_MOVE_SIZE_TO_16(d,s) ACPI_MOVE_64_TO_16(d,s) 393 394#else 395#error unknown ACPI_MACHINE_WIDTH 396#endif 397 398 | |
399/* 400 * Fast power-of-two math macros for non-optimized compilers 401 */ | 328/* 329 * Fast power-of-two math macros for non-optimized compilers 330 */ |
402#define _ACPI_DIV(value,PowerOf2) ((UINT32) ((value) >> (PowerOf2))) 403#define _ACPI_MUL(value,PowerOf2) ((UINT32) ((value) << (PowerOf2))) 404#define _ACPI_MOD(value,Divisor) ((UINT32) ((value) & ((Divisor) -1))) | 331#define _ACPI_DIV(value, PowerOf2) ((UINT32) ((value) >> (PowerOf2))) 332#define _ACPI_MUL(value, PowerOf2) ((UINT32) ((value) << (PowerOf2))) 333#define _ACPI_MOD(value, Divisor) ((UINT32) ((value) & ((Divisor) -1))) |
405 | 334 |
406#define ACPI_DIV_2(a) _ACPI_DIV(a,1) 407#define ACPI_MUL_2(a) _ACPI_MUL(a,1) 408#define ACPI_MOD_2(a) _ACPI_MOD(a,2) | 335#define ACPI_DIV_2(a) _ACPI_DIV(a, 1) 336#define ACPI_MUL_2(a) _ACPI_MUL(a, 1) 337#define ACPI_MOD_2(a) _ACPI_MOD(a, 2) |
409 | 338 |
410#define ACPI_DIV_4(a) _ACPI_DIV(a,2) 411#define ACPI_MUL_4(a) _ACPI_MUL(a,2) 412#define ACPI_MOD_4(a) _ACPI_MOD(a,4) | 339#define ACPI_DIV_4(a) _ACPI_DIV(a, 2) 340#define ACPI_MUL_4(a) _ACPI_MUL(a, 2) 341#define ACPI_MOD_4(a) _ACPI_MOD(a, 4) |
413 | 342 |
414#define ACPI_DIV_8(a) _ACPI_DIV(a,3) 415#define ACPI_MUL_8(a) _ACPI_MUL(a,3) 416#define ACPI_MOD_8(a) _ACPI_MOD(a,8) | 343#define ACPI_DIV_8(a) _ACPI_DIV(a, 3) 344#define ACPI_MUL_8(a) _ACPI_MUL(a, 3) 345#define ACPI_MOD_8(a) _ACPI_MOD(a, 8) |
417 | 346 |
418#define ACPI_DIV_16(a) _ACPI_DIV(a,4) 419#define ACPI_MUL_16(a) _ACPI_MUL(a,4) 420#define ACPI_MOD_16(a) _ACPI_MOD(a,16) | 347#define ACPI_DIV_16(a) _ACPI_DIV(a, 4) 348#define ACPI_MUL_16(a) _ACPI_MUL(a, 4) 349#define ACPI_MOD_16(a) _ACPI_MOD(a, 16) |
421 | 350 |
422#define ACPI_DIV_32(a) _ACPI_DIV(a,5) 423#define ACPI_MUL_32(a) _ACPI_MUL(a,5) 424#define ACPI_MOD_32(a) _ACPI_MOD(a,32) | 351#define ACPI_DIV_32(a) _ACPI_DIV(a, 5) 352#define ACPI_MUL_32(a) _ACPI_MUL(a, 5) 353#define ACPI_MOD_32(a) _ACPI_MOD(a, 32) |
425 426/* 427 * Rounding macros (Power of two boundaries only) 428 */ | 354 355/* 356 * Rounding macros (Power of two boundaries only) 357 */ |
429#define ACPI_ROUND_DOWN(value,boundary) (((ACPI_NATIVE_UINT)(value)) & \ 430 (~(((ACPI_NATIVE_UINT) boundary)-1))) | 358#define ACPI_ROUND_DOWN(value, boundary) (((ACPI_SIZE)(value)) & \ 359 (~(((ACPI_SIZE) boundary)-1))) |
431 | 360 |
432#define ACPI_ROUND_UP(value,boundary) ((((ACPI_NATIVE_UINT)(value)) + \ 433 (((ACPI_NATIVE_UINT) boundary)-1)) & \ 434 (~(((ACPI_NATIVE_UINT) boundary)-1))) | 361#define ACPI_ROUND_UP(value, boundary) ((((ACPI_SIZE)(value)) + \ 362 (((ACPI_SIZE) boundary)-1)) & \ 363 (~(((ACPI_SIZE) boundary)-1))) |
435 | 364 |
436/* Note: sizeof(ACPI_NATIVE_UINT) evaluates to either 2, 4, or 8 */ | 365/* Note: sizeof(ACPI_SIZE) evaluates to either 4 or 8 (32- vs 64-bit mode) */ |
437 | 366 |
438#define ACPI_ROUND_DOWN_TO_32BIT(a) ACPI_ROUND_DOWN(a,4) 439#define ACPI_ROUND_DOWN_TO_64BIT(a) ACPI_ROUND_DOWN(a,8) 440#define ACPI_ROUND_DOWN_TO_NATIVE_WORD(a) ACPI_ROUND_DOWN(a,sizeof(ACPI_NATIVE_UINT)) | 367#define ACPI_ROUND_DOWN_TO_32BIT(a) ACPI_ROUND_DOWN(a, 4) 368#define ACPI_ROUND_DOWN_TO_64BIT(a) ACPI_ROUND_DOWN(a, 8) 369#define ACPI_ROUND_DOWN_TO_NATIVE_WORD(a) ACPI_ROUND_DOWN(a, sizeof(ACPI_SIZE)) |
441 | 370 |
442#define ACPI_ROUND_UP_TO_32BIT(a) ACPI_ROUND_UP(a,4) 443#define ACPI_ROUND_UP_TO_64BIT(a) ACPI_ROUND_UP(a,8) 444#define ACPI_ROUND_UP_TO_NATIVE_WORD(a) ACPI_ROUND_UP(a,sizeof(ACPI_NATIVE_UINT)) | 371#define ACPI_ROUND_UP_TO_32BIT(a) ACPI_ROUND_UP(a, 4) 372#define ACPI_ROUND_UP_TO_64BIT(a) ACPI_ROUND_UP(a, 8) 373#define ACPI_ROUND_UP_TO_NATIVE_WORD(a) ACPI_ROUND_UP(a, sizeof(ACPI_SIZE)) |
445 446#define ACPI_ROUND_BITS_UP_TO_BYTES(a) ACPI_DIV_8((a) + 7) 447#define ACPI_ROUND_BITS_DOWN_TO_BYTES(a) ACPI_DIV_8((a)) 448 449#define ACPI_ROUND_UP_TO_1K(a) (((a) + 1023) >> 10) 450 451/* Generic (non-power-of-two) rounding */ 452 | 374 375#define ACPI_ROUND_BITS_UP_TO_BYTES(a) ACPI_DIV_8((a) + 7) 376#define ACPI_ROUND_BITS_DOWN_TO_BYTES(a) ACPI_DIV_8((a)) 377 378#define ACPI_ROUND_UP_TO_1K(a) (((a) + 1023) >> 10) 379 380/* Generic (non-power-of-two) rounding */ 381 |
453#define ACPI_ROUND_UP_TO(value,boundary) (((value) + ((boundary)-1)) / (boundary)) | 382#define ACPI_ROUND_UP_TO(value, boundary) (((value) + ((boundary)-1)) / (boundary)) |
454 | 383 |
455#define ACPI_IS_MISALIGNED(value) (((ACPI_NATIVE_UINT)value) & (sizeof(ACPI_NATIVE_UINT)-1)) | 384#define ACPI_IS_MISALIGNED(value) (((ACPI_SIZE) value) & (sizeof(ACPI_SIZE)-1)) |
456 457/* 458 * Bitmask creation 459 * Bit positions start at zero. 460 * MASK_BITS_ABOVE creates a mask starting AT the position and above 461 * MASK_BITS_BELOW creates a mask starting one bit BELOW the position 462 */ 463#define ACPI_MASK_BITS_ABOVE(position) (~((ACPI_INTEGER_MAX) << ((UINT32) (position)))) 464#define ACPI_MASK_BITS_BELOW(position) ((ACPI_INTEGER_MAX) << ((UINT32) (position))) 465 | 385 386/* 387 * Bitmask creation 388 * Bit positions start at zero. 389 * MASK_BITS_ABOVE creates a mask starting AT the position and above 390 * MASK_BITS_BELOW creates a mask starting one bit BELOW the position 391 */ 392#define ACPI_MASK_BITS_ABOVE(position) (~((ACPI_INTEGER_MAX) << ((UINT32) (position)))) 393#define ACPI_MASK_BITS_BELOW(position) ((ACPI_INTEGER_MAX) << ((UINT32) (position))) 394 |
466#define ACPI_IS_OCTAL_DIGIT(d) (((char)(d) >= '0') && ((char)(d) <= '7')) 467 468 | |
469/* Bitfields within ACPI registers */ 470 471#define ACPI_REGISTER_PREPARE_BITS(Val, Pos, Mask) ((Val << Pos) & Mask) 472#define ACPI_REGISTER_INSERT_VALUE(Reg, Pos, Mask, Val) Reg = (Reg & (~(Mask))) | ACPI_REGISTER_PREPARE_BITS(Val, Pos, Mask) 473 474#define ACPI_INSERT_BITS(Target, Mask, Source) Target = ((Target & (~(Mask))) | (Source & Mask)) 475 | 395/* Bitfields within ACPI registers */ 396 397#define ACPI_REGISTER_PREPARE_BITS(Val, Pos, Mask) ((Val << Pos) & Mask) 398#define ACPI_REGISTER_INSERT_VALUE(Reg, Pos, Mask, Val) Reg = (Reg & (~(Mask))) | ACPI_REGISTER_PREPARE_BITS(Val, Pos, Mask) 399 400#define ACPI_INSERT_BITS(Target, Mask, Source) Target = ((Target & (~(Mask))) | (Source & Mask)) 401 |
476/* Generate a UUID */ 477 478#define ACPI_INIT_UUID(a,b,c,d0,d1,d2,d3,d4,d5,d6,d7) \ 479 (a) & 0xFF, ((a) >> 8) & 0xFF, ((a) >> 16) & 0xFF, ((a) >> 24) & 0xFF, \ 480 (b) & 0xFF, ((b) >> 8) & 0xFF, \ 481 (c) & 0xFF, ((c) >> 8) & 0xFF, \ 482 (d0), (d1), (d2), (d3), (d4), (d5), (d6), (d7) 483 | |
484/* | 402/* |
485 * An ACPI_NAMESPACE_NODE * can appear in some contexts, 486 * where a pointer to an ACPI_OPERAND_OBJECT can also 487 * appear. This macro is used to distinguish them. | 403 * An ACPI_NAMESPACE_NODE can appear in some contexts 404 * where a pointer to an ACPI_OPERAND_OBJECT can also 405 * appear. This macro is used to distinguish them. |
488 * 489 * The "Descriptor" field is the first field in both structures. 490 */ 491#define ACPI_GET_DESCRIPTOR_TYPE(d) (((ACPI_DESCRIPTOR *)(void *)(d))->Common.DescriptorType) | 406 * 407 * The "Descriptor" field is the first field in both structures. 408 */ 409#define ACPI_GET_DESCRIPTOR_TYPE(d) (((ACPI_DESCRIPTOR *)(void *)(d))->Common.DescriptorType) |
492#define ACPI_SET_DESCRIPTOR_TYPE(d,t) (((ACPI_DESCRIPTOR *)(void *)(d))->Common.DescriptorType = t) | 410#define ACPI_SET_DESCRIPTOR_TYPE(d, t) (((ACPI_DESCRIPTOR *)(void *)(d))->Common.DescriptorType = t) |
493 | 411 |
494 | |
495/* Macro to test the object type */ 496 497#define ACPI_GET_OBJECT_TYPE(d) (((ACPI_OPERAND_OBJECT *)(void *)(d))->Common.Type) 498 | 412/* Macro to test the object type */ 413 414#define ACPI_GET_OBJECT_TYPE(d) (((ACPI_OPERAND_OBJECT *)(void *)(d))->Common.Type) 415 |
499/* Macro to check the table flags for SINGLE or MULTIPLE tables are allowed */ 500 501#define ACPI_IS_SINGLE_TABLE(x) (((x) & 0x01) == ACPI_TABLE_SINGLE ? 1 : 0) 502 | |
503/* 504 * Macros for the master AML opcode table 505 */ | 416/* 417 * Macros for the master AML opcode table 418 */ |
506#if defined(ACPI_DISASSEMBLER) || defined (ACPI_DEBUG_OUTPUT) 507#define ACPI_OP(Name,PArgs,IArgs,ObjType,Class,Type,Flags) {Name,(UINT32)(PArgs),(UINT32)(IArgs),(UINT32)(Flags),ObjType,Class,Type} | 419#if defined (ACPI_DISASSEMBLER) || defined (ACPI_DEBUG_OUTPUT) 420#define ACPI_OP(Name, PArgs, IArgs, ObjType, Class, Type, Flags) \ 421 {Name, (UINT32)(PArgs), (UINT32)(IArgs), (UINT32)(Flags), ObjType, Class, Type} |
508#else | 422#else |
509#define ACPI_OP(Name,PArgs,IArgs,ObjType,Class,Type,Flags) {(UINT32)(PArgs),(UINT32)(IArgs),(UINT32)(Flags),ObjType,Class,Type} | 423#define ACPI_OP(Name, PArgs, IArgs, ObjType, Class, Type, Flags) \ 424 {(UINT32)(PArgs), (UINT32)(IArgs), (UINT32)(Flags), ObjType, Class, Type} |
510#endif 511 512#ifdef ACPI_DISASSEMBLER 513#define ACPI_DISASM_ONLY_MEMBERS(a) a; 514#else 515#define ACPI_DISASM_ONLY_MEMBERS(a) 516#endif 517 518#define ARG_TYPE_WIDTH 5 519#define ARG_1(x) ((UINT32)(x)) 520#define ARG_2(x) ((UINT32)(x) << (1 * ARG_TYPE_WIDTH)) 521#define ARG_3(x) ((UINT32)(x) << (2 * ARG_TYPE_WIDTH)) 522#define ARG_4(x) ((UINT32)(x) << (3 * ARG_TYPE_WIDTH)) 523#define ARG_5(x) ((UINT32)(x) << (4 * ARG_TYPE_WIDTH)) 524#define ARG_6(x) ((UINT32)(x) << (5 * ARG_TYPE_WIDTH)) 525 526#define ARGI_LIST1(a) (ARG_1(a)) | 425#endif 426 427#ifdef ACPI_DISASSEMBLER 428#define ACPI_DISASM_ONLY_MEMBERS(a) a; 429#else 430#define ACPI_DISASM_ONLY_MEMBERS(a) 431#endif 432 433#define ARG_TYPE_WIDTH 5 434#define ARG_1(x) ((UINT32)(x)) 435#define ARG_2(x) ((UINT32)(x) << (1 * ARG_TYPE_WIDTH)) 436#define ARG_3(x) ((UINT32)(x) << (2 * ARG_TYPE_WIDTH)) 437#define ARG_4(x) ((UINT32)(x) << (3 * ARG_TYPE_WIDTH)) 438#define ARG_5(x) ((UINT32)(x) << (4 * ARG_TYPE_WIDTH)) 439#define ARG_6(x) ((UINT32)(x) << (5 * ARG_TYPE_WIDTH)) 440 441#define ARGI_LIST1(a) (ARG_1(a)) |
527#define ARGI_LIST2(a,b) (ARG_1(b)|ARG_2(a)) 528#define ARGI_LIST3(a,b,c) (ARG_1(c)|ARG_2(b)|ARG_3(a)) 529#define ARGI_LIST4(a,b,c,d) (ARG_1(d)|ARG_2(c)|ARG_3(b)|ARG_4(a)) 530#define ARGI_LIST5(a,b,c,d,e) (ARG_1(e)|ARG_2(d)|ARG_3(c)|ARG_4(b)|ARG_5(a)) 531#define ARGI_LIST6(a,b,c,d,e,f) (ARG_1(f)|ARG_2(e)|ARG_3(d)|ARG_4(c)|ARG_5(b)|ARG_6(a)) | 442#define ARGI_LIST2(a, b) (ARG_1(b)|ARG_2(a)) 443#define ARGI_LIST3(a, b, c) (ARG_1(c)|ARG_2(b)|ARG_3(a)) 444#define ARGI_LIST4(a, b, c, d) (ARG_1(d)|ARG_2(c)|ARG_3(b)|ARG_4(a)) 445#define ARGI_LIST5(a, b, c, d, e) (ARG_1(e)|ARG_2(d)|ARG_3(c)|ARG_4(b)|ARG_5(a)) 446#define ARGI_LIST6(a, b, c, d, e, f) (ARG_1(f)|ARG_2(e)|ARG_3(d)|ARG_4(c)|ARG_5(b)|ARG_6(a)) |
532 533#define ARGP_LIST1(a) (ARG_1(a)) | 447 448#define ARGP_LIST1(a) (ARG_1(a)) |
534#define ARGP_LIST2(a,b) (ARG_1(a)|ARG_2(b)) 535#define ARGP_LIST3(a,b,c) (ARG_1(a)|ARG_2(b)|ARG_3(c)) 536#define ARGP_LIST4(a,b,c,d) (ARG_1(a)|ARG_2(b)|ARG_3(c)|ARG_4(d)) 537#define ARGP_LIST5(a,b,c,d,e) (ARG_1(a)|ARG_2(b)|ARG_3(c)|ARG_4(d)|ARG_5(e)) 538#define ARGP_LIST6(a,b,c,d,e,f) (ARG_1(a)|ARG_2(b)|ARG_3(c)|ARG_4(d)|ARG_5(e)|ARG_6(f)) | 449#define ARGP_LIST2(a, b) (ARG_1(a)|ARG_2(b)) 450#define ARGP_LIST3(a, b, c) (ARG_1(a)|ARG_2(b)|ARG_3(c)) 451#define ARGP_LIST4(a, b, c, d) (ARG_1(a)|ARG_2(b)|ARG_3(c)|ARG_4(d)) 452#define ARGP_LIST5(a, b, c, d, e) (ARG_1(a)|ARG_2(b)|ARG_3(c)|ARG_4(d)|ARG_5(e)) 453#define ARGP_LIST6(a, b, c, d, e, f) (ARG_1(a)|ARG_2(b)|ARG_3(c)|ARG_4(d)|ARG_5(e)|ARG_6(f)) |
539 540#define GET_CURRENT_ARG_TYPE(List) (List & ((UINT32) 0x1F)) 541#define INCREMENT_ARG_LIST(List) (List >>= ((UINT32) ARG_TYPE_WIDTH)) 542 543 544#if defined (ACPI_DEBUG_OUTPUT) || !defined (ACPI_NO_ERROR_MESSAGES) 545/* 546 * Module name is include in both debug and non-debug versions primarily for 547 * error messages. The __FILE__ macro is not very useful for this, because it 548 * often includes the entire pathname to the module 549 */ | 454 455#define GET_CURRENT_ARG_TYPE(List) (List & ((UINT32) 0x1F)) 456#define INCREMENT_ARG_LIST(List) (List >>= ((UINT32) ARG_TYPE_WIDTH)) 457 458 459#if defined (ACPI_DEBUG_OUTPUT) || !defined (ACPI_NO_ERROR_MESSAGES) 460/* 461 * Module name is include in both debug and non-debug versions primarily for 462 * error messages. The __FILE__ macro is not very useful for this, because it 463 * often includes the entire pathname to the module 464 */ |
550#define ACPI_MODULE_NAME(Name) static char ACPI_UNUSED_VAR *_AcpiModuleName = Name; | 465#define ACPI_MODULE_NAME(Name) static const char ACPI_UNUSED_VAR _AcpiModuleName[] = Name; |
551#else 552#define ACPI_MODULE_NAME(Name) 553#endif 554 555/* 556 * Ascii error messages can be configured out 557 */ 558#ifndef ACPI_NO_ERROR_MESSAGES 559#define AE_INFO _AcpiModuleName, __LINE__ 560 561/* 562 * Error reporting. Callers module and line number are inserted by AE_INFO, 563 * the plist contains a set of parens to allow variable-length lists. 564 * These macros are used for both the debug and non-debug versions of the code. 565 */ 566#define ACPI_INFO(plist) AcpiUtInfo plist 567#define ACPI_WARNING(plist) AcpiUtWarning plist 568#define ACPI_EXCEPTION(plist) AcpiUtException plist 569#define ACPI_ERROR(plist) AcpiUtError plist | 466#else 467#define ACPI_MODULE_NAME(Name) 468#endif 469 470/* 471 * Ascii error messages can be configured out 472 */ 473#ifndef ACPI_NO_ERROR_MESSAGES 474#define AE_INFO _AcpiModuleName, __LINE__ 475 476/* 477 * Error reporting. Callers module and line number are inserted by AE_INFO, 478 * the plist contains a set of parens to allow variable-length lists. 479 * These macros are used for both the debug and non-debug versions of the code. 480 */ 481#define ACPI_INFO(plist) AcpiUtInfo plist 482#define ACPI_WARNING(plist) AcpiUtWarning plist 483#define ACPI_EXCEPTION(plist) AcpiUtException plist 484#define ACPI_ERROR(plist) AcpiUtError plist |
570#define ACPI_ERROR_NAMESPACE(s,e) AcpiNsReportError (AE_INFO, s, e); 571#define ACPI_ERROR_METHOD(s,n,p,e) AcpiNsReportMethodError (AE_INFO, s, n, p, e); | 485#define ACPI_ERROR_NAMESPACE(s, e) AcpiNsReportError (AE_INFO, s, e); 486#define ACPI_ERROR_METHOD(s, n, p, e) AcpiNsReportMethodError (AE_INFO, s, n, p, e); |
572 573#else 574 575/* No error messages */ 576 577#define ACPI_INFO(plist) 578#define ACPI_WARNING(plist) 579#define ACPI_EXCEPTION(plist) 580#define ACPI_ERROR(plist) | 487 488#else 489 490/* No error messages */ 491 492#define ACPI_INFO(plist) 493#define ACPI_WARNING(plist) 494#define ACPI_EXCEPTION(plist) 495#define ACPI_ERROR(plist) |
581#define ACPI_ERROR_NAMESPACE(s,e) 582#define ACPI_ERROR_METHOD(s,n,p,e) | 496#define ACPI_ERROR_NAMESPACE(s, e) 497#define ACPI_ERROR_METHOD(s, n, p, e) |
583#endif 584 585/* 586 * Debug macros that are conditionally compiled 587 */ 588#ifdef ACPI_DEBUG_OUTPUT 589 590/* --- 4 unchanged lines hidden (view full) --- 595 596/* 597 * Function entry tracing 598 */ 599 600/* 601 * If ACPI_GET_FUNCTION_NAME was not defined in the compiler-dependent header, 602 * define it now. This is the case where there the compiler does not support | 498#endif 499 500/* 501 * Debug macros that are conditionally compiled 502 */ 503#ifdef ACPI_DEBUG_OUTPUT 504 505/* --- 4 unchanged lines hidden (view full) --- 510 511/* 512 * Function entry tracing 513 */ 514 515/* 516 * If ACPI_GET_FUNCTION_NAME was not defined in the compiler-dependent header, 517 * define it now. This is the case where there the compiler does not support |
603 * a __FUNCTION__ macro or equivalent. We save the function name on the 604 * local stack. | 518 * a __FUNCTION__ macro or equivalent. |
605 */ 606#ifndef ACPI_GET_FUNCTION_NAME 607#define ACPI_GET_FUNCTION_NAME _AcpiFunctionName 608/* 609 * The Name parameter should be the procedure name as a quoted string. | 519 */ 520#ifndef ACPI_GET_FUNCTION_NAME 521#define ACPI_GET_FUNCTION_NAME _AcpiFunctionName 522/* 523 * The Name parameter should be the procedure name as a quoted string. |
610 * This is declared as a local string ("MyFunctionName") so that it can 611 * be also used by the function exit macros below. | 524 * The function name is also used by the function exit macros below. |
612 * Note: (const char) is used to be compatible with the debug interfaces 613 * and macros such as __FUNCTION__. 614 */ | 525 * Note: (const char) is used to be compatible with the debug interfaces 526 * and macros such as __FUNCTION__. 527 */ |
615#define ACPI_FUNCTION_NAME(Name) const char *_AcpiFunctionName = #Name; | 528#define ACPI_FUNCTION_NAME(Name) static const char _AcpiFunctionName[] = #Name; |
616 617#else 618/* Compiler supports __FUNCTION__ (or equivalent) -- Ignore this macro */ 619 620#define ACPI_FUNCTION_NAME(Name) 621#endif 622 623#define ACPI_FUNCTION_TRACE(a) ACPI_FUNCTION_NAME(a) \ 624 AcpiUtTrace(ACPI_DEBUG_PARAMETERS) | 529 530#else 531/* Compiler supports __FUNCTION__ (or equivalent) -- Ignore this macro */ 532 533#define ACPI_FUNCTION_NAME(Name) 534#endif 535 536#define ACPI_FUNCTION_TRACE(a) ACPI_FUNCTION_NAME(a) \ 537 AcpiUtTrace(ACPI_DEBUG_PARAMETERS) |
625#define ACPI_FUNCTION_TRACE_PTR(a,b) ACPI_FUNCTION_NAME(a) \ 626 AcpiUtTracePtr(ACPI_DEBUG_PARAMETERS,(void *)b) 627#define ACPI_FUNCTION_TRACE_U32(a,b) ACPI_FUNCTION_NAME(a) \ 628 AcpiUtTraceU32(ACPI_DEBUG_PARAMETERS,(UINT32)b) 629#define ACPI_FUNCTION_TRACE_STR(a,b) ACPI_FUNCTION_NAME(a) \ 630 AcpiUtTraceStr(ACPI_DEBUG_PARAMETERS,(char *)b) | 538#define ACPI_FUNCTION_TRACE_PTR(a, b) ACPI_FUNCTION_NAME(a) \ 539 AcpiUtTracePtr(ACPI_DEBUG_PARAMETERS, (void *)b) 540#define ACPI_FUNCTION_TRACE_U32(a, b) ACPI_FUNCTION_NAME(a) \ 541 AcpiUtTraceU32(ACPI_DEBUG_PARAMETERS, (UINT32)b) 542#define ACPI_FUNCTION_TRACE_STR(a, b) ACPI_FUNCTION_NAME(a) \ 543 AcpiUtTraceStr(ACPI_DEBUG_PARAMETERS, (char *)b) |
631 632#define ACPI_FUNCTION_ENTRY() AcpiUtTrackStackPtr() 633 634/* 635 * Function exit tracing. | 544 545#define ACPI_FUNCTION_ENTRY() AcpiUtTrackStackPtr() 546 547/* 548 * Function exit tracing. |
636 * WARNING: These macros include a return statement. This is usually considered | 549 * WARNING: These macros include a return statement. This is usually considered |
637 * bad form, but having a separate exit macro is very ugly and difficult to maintain. 638 * One of the FUNCTION_TRACE macros above must be used in conjunction with these macros 639 * so that "_AcpiFunctionName" is defined. 640 * 641 * Note: the DO_WHILE0 macro is used to prevent some compilers from complaining 642 * about these constructs. 643 */ 644#ifdef ACPI_USE_DO_WHILE_0 --- 51 unchanged lines hidden (view full) --- 696#define return_UINT32(s) return_VALUE(s) 697 698#endif /* ACPI_SIMPLE_RETURN_MACROS */ 699 700 701/* Conditional execution */ 702 703#define ACPI_DEBUG_EXEC(a) a | 550 * bad form, but having a separate exit macro is very ugly and difficult to maintain. 551 * One of the FUNCTION_TRACE macros above must be used in conjunction with these macros 552 * so that "_AcpiFunctionName" is defined. 553 * 554 * Note: the DO_WHILE0 macro is used to prevent some compilers from complaining 555 * about these constructs. 556 */ 557#ifdef ACPI_USE_DO_WHILE_0 --- 51 unchanged lines hidden (view full) --- 609#define return_UINT32(s) return_VALUE(s) 610 611#endif /* ACPI_SIMPLE_RETURN_MACROS */ 612 613 614/* Conditional execution */ 615 616#define ACPI_DEBUG_EXEC(a) a |
704#define ACPI_NORMAL_EXEC(a) 705 706#define ACPI_DEBUG_DEFINE(a) a; | |
707#define ACPI_DEBUG_ONLY_MEMBERS(a) a; 708#define _VERBOSE_STRUCTURES 709 710 | 617#define ACPI_DEBUG_ONLY_MEMBERS(a) a; 618#define _VERBOSE_STRUCTURES 619 620 |
711/* Stack and buffer dumping */ | 621/* Various object display routines for debug */ |
712 | 622 |
713#define ACPI_DUMP_STACK_ENTRY(a) AcpiExDumpOperand((a),0) 714#define ACPI_DUMP_OPERANDS(a,b,c,d,e) AcpiExDumpOperands(a,b,c,d,e,_AcpiModuleName,__LINE__) | 623#define ACPI_DUMP_STACK_ENTRY(a) AcpiExDumpOperand((a), 0) 624#define ACPI_DUMP_OPERANDS(a, b ,c) AcpiExDumpOperands(a, b, c) 625#define ACPI_DUMP_ENTRY(a, b) AcpiNsDumpEntry (a, b) 626#define ACPI_DUMP_PATHNAME(a, b, c, d) AcpiNsDumpPathname(a, b, c, d) 627#define ACPI_DUMP_BUFFER(a, b) AcpiUtDumpBuffer((UINT8 *) a, b, DB_BYTE_DISPLAY, _COMPONENT) |
715 | 628 |
716 717#define ACPI_DUMP_ENTRY(a,b) AcpiNsDumpEntry (a,b) 718#define ACPI_DUMP_PATHNAME(a,b,c,d) AcpiNsDumpPathname(a,b,c,d) 719#define ACPI_DUMP_RESOURCE_LIST(a) AcpiRsDumpResourceList(a) 720#define ACPI_DUMP_BUFFER(a,b) AcpiUtDumpBuffer((UINT8 *)a,b,DB_BYTE_DISPLAY,_COMPONENT) 721 | |
722/* 723 * Master debug print macros 724 * Print iff: 725 * 1) Debug print for the current component is enabled 726 * 2) Debug error level or trace level for the print statement is enabled 727 */ 728#define ACPI_DEBUG_PRINT(plist) AcpiUtDebugPrint plist 729#define ACPI_DEBUG_PRINT_RAW(plist) AcpiUtDebugPrintRaw plist 730 731 732#else 733/* 734 * This is the non-debug case -- make everything go away, 735 * leaving no executable debug code! 736 */ 737#define ACPI_DEBUG_EXEC(a) | 629/* 630 * Master debug print macros 631 * Print iff: 632 * 1) Debug print for the current component is enabled 633 * 2) Debug error level or trace level for the print statement is enabled 634 */ 635#define ACPI_DEBUG_PRINT(plist) AcpiUtDebugPrint plist 636#define ACPI_DEBUG_PRINT_RAW(plist) AcpiUtDebugPrintRaw plist 637 638 639#else 640/* 641 * This is the non-debug case -- make everything go away, 642 * leaving no executable debug code! 643 */ 644#define ACPI_DEBUG_EXEC(a) |
738#define ACPI_NORMAL_EXEC(a) a; 739 740#define ACPI_DEBUG_DEFINE(a) | |
741#define ACPI_DEBUG_ONLY_MEMBERS(a) 742#define ACPI_FUNCTION_NAME(a) 743#define ACPI_FUNCTION_TRACE(a) | 645#define ACPI_DEBUG_ONLY_MEMBERS(a) 646#define ACPI_FUNCTION_NAME(a) 647#define ACPI_FUNCTION_TRACE(a) |
744#define ACPI_FUNCTION_TRACE_PTR(a,b) 745#define ACPI_FUNCTION_TRACE_U32(a,b) 746#define ACPI_FUNCTION_TRACE_STR(a,b) | 648#define ACPI_FUNCTION_TRACE_PTR(a, b) 649#define ACPI_FUNCTION_TRACE_U32(a, b) 650#define ACPI_FUNCTION_TRACE_STR(a, b) |
747#define ACPI_FUNCTION_EXIT 748#define ACPI_FUNCTION_STATUS_EXIT(s) 749#define ACPI_FUNCTION_VALUE_EXIT(s) 750#define ACPI_FUNCTION_ENTRY() 751#define ACPI_DUMP_STACK_ENTRY(a) | 651#define ACPI_FUNCTION_EXIT 652#define ACPI_FUNCTION_STATUS_EXIT(s) 653#define ACPI_FUNCTION_VALUE_EXIT(s) 654#define ACPI_FUNCTION_ENTRY() 655#define ACPI_DUMP_STACK_ENTRY(a) |
752#define ACPI_DUMP_OPERANDS(a,b,c,d,e) 753#define ACPI_DUMP_ENTRY(a,b) 754#define ACPI_DUMP_TABLES(a,b) 755#define ACPI_DUMP_PATHNAME(a,b,c,d) 756#define ACPI_DUMP_RESOURCE_LIST(a) 757#define ACPI_DUMP_BUFFER(a,b) | 656#define ACPI_DUMP_OPERANDS(a, b, c) 657#define ACPI_DUMP_ENTRY(a, b) 658#define ACPI_DUMP_TABLES(a, b) 659#define ACPI_DUMP_PATHNAME(a, b, c, d) 660#define ACPI_DUMP_BUFFER(a, b) |
758#define ACPI_DEBUG_PRINT(pl) 759#define ACPI_DEBUG_PRINT_RAW(pl) 760 761#define return_VOID return 762#define return_ACPI_STATUS(s) return(s) 763#define return_VALUE(s) return(s) 764#define return_UINT8(s) return(s) 765#define return_UINT32(s) return(s) --- 9 unchanged lines hidden (view full) --- 775#ifdef ACPI_DEBUGGER 776#define ACPI_DEBUGGER_EXEC(a) a 777#else 778#define ACPI_DEBUGGER_EXEC(a) 779#endif 780 781 782/* | 661#define ACPI_DEBUG_PRINT(pl) 662#define ACPI_DEBUG_PRINT_RAW(pl) 663 664#define return_VOID return 665#define return_ACPI_STATUS(s) return(s) 666#define return_VALUE(s) return(s) 667#define return_UINT8(s) return(s) 668#define return_UINT32(s) return(s) --- 9 unchanged lines hidden (view full) --- 678#ifdef ACPI_DEBUGGER 679#define ACPI_DEBUGGER_EXEC(a) a 680#else 681#define ACPI_DEBUGGER_EXEC(a) 682#endif 683 684 685/* |
783 * For 16-bit code, we want to shrink some things even though 784 * we are using ACPI_DEBUG_OUTPUT to get the debug output 785 */ 786#if ACPI_MACHINE_WIDTH == 16 787#undef ACPI_DEBUG_ONLY_MEMBERS 788#undef _VERBOSE_STRUCTURES 789#define ACPI_DEBUG_ONLY_MEMBERS(a) 790#endif 791 792 793#ifdef ACPI_DEBUG_OUTPUT 794/* 795 * 1) Set name to blanks 796 * 2) Copy the object name 797 */ 798#define ACPI_ADD_OBJECT_NAME(a,b) ACPI_MEMSET (a->Common.Name, ' ', sizeof (a->Common.Name));\ 799 ACPI_STRNCPY (a->Common.Name, AcpiGbl_NsTypeNames[b], sizeof (a->Common.Name)) 800#else 801 802#define ACPI_ADD_OBJECT_NAME(a,b) 803#endif 804 805 806/* | |
807 * Memory allocation tracking (DEBUG ONLY) 808 */ | 686 * Memory allocation tracking (DEBUG ONLY) 687 */ |
688#define ACPI_MEM_PARAMETERS _COMPONENT, _AcpiModuleName, __LINE__ 689 |
|
809#ifndef ACPI_DBG_TRACK_ALLOCATIONS 810 811/* Memory allocation */ 812 | 690#ifndef ACPI_DBG_TRACK_ALLOCATIONS 691 692/* Memory allocation */ 693 |
813#define ACPI_ALLOCATE(a) AcpiUtAllocate((ACPI_SIZE)(a),_COMPONENT,_AcpiModuleName,__LINE__) 814#define ACPI_ALLOCATE_ZEROED(a) AcpiUtAllocateZeroed((ACPI_SIZE)(a), _COMPONENT,_AcpiModuleName,__LINE__) | 694#define ACPI_ALLOCATE(a) AcpiUtAllocate((ACPI_SIZE) (a), ACPI_MEM_PARAMETERS) 695#define ACPI_ALLOCATE_ZEROED(a) AcpiUtAllocateZeroed((ACPI_SIZE) (a), ACPI_MEM_PARAMETERS) |
815#define ACPI_FREE(a) AcpiOsFree(a) 816#define ACPI_MEM_TRACKING(a) 817 818#else 819 820/* Memory allocation */ 821 | 696#define ACPI_FREE(a) AcpiOsFree(a) 697#define ACPI_MEM_TRACKING(a) 698 699#else 700 701/* Memory allocation */ 702 |
822#define ACPI_ALLOCATE(a) AcpiUtAllocateAndTrack((ACPI_SIZE)(a),_COMPONENT,_AcpiModuleName,__LINE__) 823#define ACPI_ALLOCATE_ZEROED(a) AcpiUtAllocateZeroedAndTrack((ACPI_SIZE)(a), _COMPONENT,_AcpiModuleName,__LINE__) 824#define ACPI_FREE(a) AcpiUtFreeAndTrack(a,_COMPONENT,_AcpiModuleName,__LINE__) | 703#define ACPI_ALLOCATE(a) AcpiUtAllocateAndTrack((ACPI_SIZE) (a), ACPI_MEM_PARAMETERS) 704#define ACPI_ALLOCATE_ZEROED(a) AcpiUtAllocateZeroedAndTrack((ACPI_SIZE) (a), ACPI_MEM_PARAMETERS) 705#define ACPI_FREE(a) AcpiUtFreeAndTrack(a, ACPI_MEM_PARAMETERS) |
825#define ACPI_MEM_TRACKING(a) a 826 827#endif /* ACPI_DBG_TRACK_ALLOCATIONS */ 828 | 706#define ACPI_MEM_TRACKING(a) a 707 708#endif /* ACPI_DBG_TRACK_ALLOCATIONS */ 709 |
710 711/* 712 * Macros used for ACPICA utilities only 713 */ 714 715/* Generate a UUID */ 716 717#define ACPI_INIT_UUID(a, b, c, d0, d1, d2, d3, d4, d5, d6, d7) \ 718 (a) & 0xFF, ((a) >> 8) & 0xFF, ((a) >> 16) & 0xFF, ((a) >> 24) & 0xFF, \ 719 (b) & 0xFF, ((b) >> 8) & 0xFF, \ 720 (c) & 0xFF, ((c) >> 8) & 0xFF, \ 721 (d0), (d1), (d2), (d3), (d4), (d5), (d6), (d7) 722 723#define ACPI_IS_OCTAL_DIGIT(d) (((char)(d) >= '0') && ((char)(d) <= '7')) 724 725 |
|
829#endif /* ACMACROS_H */ | 726#endif /* ACMACROS_H */ |