Subversion Repositories Kolibri OS

Rev

Go to most recent revision | Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
6595 serge 1
/******************************************************************************
2
 *
3
 * Name: acmacros.h - C macros for the entire subsystem.
4
 *
5
 *****************************************************************************/
6
 
7
/*
8
 * Copyright (C) 2000 - 2015, 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 __ACMACROS_H__
45
#define __ACMACROS_H__
46
 
47
/*
48
 * Extract data using a pointer. Any more than a byte and we
49
 * get into potential aligment issues -- see the STORE macros below.
50
 * Use with care.
51
 */
52
#define ACPI_CAST8(ptr)                 ACPI_CAST_PTR (u8, (ptr))
53
#define ACPI_CAST16(ptr)                ACPI_CAST_PTR (u16, (ptr))
54
#define ACPI_CAST32(ptr)                ACPI_CAST_PTR (u32, (ptr))
55
#define ACPI_CAST64(ptr)                ACPI_CAST_PTR (u64, (ptr))
56
#define ACPI_GET8(ptr)                  (*ACPI_CAST8 (ptr))
57
#define ACPI_GET16(ptr)                 (*ACPI_CAST16 (ptr))
58
#define ACPI_GET32(ptr)                 (*ACPI_CAST32 (ptr))
59
#define ACPI_GET64(ptr)                 (*ACPI_CAST64 (ptr))
60
#define ACPI_SET8(ptr, val)             (*ACPI_CAST8 (ptr) = (u8) (val))
61
#define ACPI_SET16(ptr, val)            (*ACPI_CAST16 (ptr) = (u16) (val))
62
#define ACPI_SET32(ptr, val)            (*ACPI_CAST32 (ptr) = (u32) (val))
63
#define ACPI_SET64(ptr, val)            (*ACPI_CAST64 (ptr) = (u64) (val))
64
 
65
/*
66
 * printf() format helper. This macros is a workaround for the difficulties
67
 * with emitting 64-bit integers and 64-bit pointers with the same code
68
 * for both 32-bit and 64-bit hosts.
69
 */
70
#define ACPI_FORMAT_UINT64(i)           ACPI_HIDWORD(i), ACPI_LODWORD(i)
71
 
72
/*
73
 * Macros for moving data around to/from buffers that are possibly unaligned.
74
 * If the hardware supports the transfer of unaligned data, just do the store.
75
 * Otherwise, we have to move one byte at a time.
76
 */
77
#ifdef ACPI_BIG_ENDIAN
78
/*
79
 * Macros for big-endian machines
80
 */
81
 
82
/* These macros reverse the bytes during the move, converting little-endian to big endian */
83
 
84
	 /* Big Endian      <==        Little Endian */
85
	 /*  Hi...Lo                     Lo...Hi     */
86
/* 16-bit source, 16/32/64 destination */
87
 
88
#define ACPI_MOVE_16_TO_16(d, s)        {((  u8 *)(void *)(d))[0] = ((u8 *)(void *)(s))[1];\
89
			  ((  u8 *)(void *)(d))[1] = ((u8 *)(void *)(s))[0];}
90
 
91
#define ACPI_MOVE_16_TO_32(d, s)        {(*(u32 *)(void *)(d))=0;\
92
					  ((u8 *)(void *)(d))[2] = ((u8 *)(void *)(s))[1];\
93
					  ((u8 *)(void *)(d))[3] = ((u8 *)(void *)(s))[0];}
94
 
95
#define ACPI_MOVE_16_TO_64(d, s)        {(*(u64 *)(void *)(d))=0;\
96
							   ((u8 *)(void *)(d))[6] = ((u8 *)(void *)(s))[1];\
97
							   ((u8 *)(void *)(d))[7] = ((u8 *)(void *)(s))[0];}
98
 
99
/* 32-bit source, 16/32/64 destination */
100
 
101
#define ACPI_MOVE_32_TO_16(d, s)        ACPI_MOVE_16_TO_16(d, s)	/* Truncate to 16 */
102
 
103
#define ACPI_MOVE_32_TO_32(d, s)        {((  u8 *)(void *)(d))[0] = ((u8 *)(void *)(s))[3];\
104
									  ((  u8 *)(void *)(d))[1] = ((u8 *)(void *)(s))[2];\
105
									  ((  u8 *)(void *)(d))[2] = ((u8 *)(void *)(s))[1];\
106
									  ((  u8 *)(void *)(d))[3] = ((u8 *)(void *)(s))[0];}
107
 
108
#define ACPI_MOVE_32_TO_64(d, s)        {(*(u64 *)(void *)(d))=0;\
109
										   ((u8 *)(void *)(d))[4] = ((u8 *)(void *)(s))[3];\
110
										   ((u8 *)(void *)(d))[5] = ((u8 *)(void *)(s))[2];\
111
										   ((u8 *)(void *)(d))[6] = ((u8 *)(void *)(s))[1];\
112
										   ((u8 *)(void *)(d))[7] = ((u8 *)(void *)(s))[0];}
113
 
114
/* 64-bit source, 16/32/64 destination */
115
 
116
#define ACPI_MOVE_64_TO_16(d, s)        ACPI_MOVE_16_TO_16(d, s)	/* Truncate to 16 */
117
 
118
#define ACPI_MOVE_64_TO_32(d, s)        ACPI_MOVE_32_TO_32(d, s)	/* Truncate to 32 */
119
 
120
#define ACPI_MOVE_64_TO_64(d, s)        {((  u8 *)(void *)(d))[0] = ((u8 *)(void *)(s))[7];\
121
										 ((  u8 *)(void *)(d))[1] = ((u8 *)(void *)(s))[6];\
122
										 ((  u8 *)(void *)(d))[2] = ((u8 *)(void *)(s))[5];\
123
										 ((  u8 *)(void *)(d))[3] = ((u8 *)(void *)(s))[4];\
124
										 ((  u8 *)(void *)(d))[4] = ((u8 *)(void *)(s))[3];\
125
										 ((  u8 *)(void *)(d))[5] = ((u8 *)(void *)(s))[2];\
126
										 ((  u8 *)(void *)(d))[6] = ((u8 *)(void *)(s))[1];\
127
										 ((  u8 *)(void *)(d))[7] = ((u8 *)(void *)(s))[0];}
128
#else
129
/*
130
 * Macros for little-endian machines
131
 */
132
 
133
#ifndef ACPI_MISALIGNMENT_NOT_SUPPORTED
134
 
135
/* The hardware supports unaligned transfers, just do the little-endian move */
136
 
137
/* 16-bit source, 16/32/64 destination */
138
 
139
#define ACPI_MOVE_16_TO_16(d, s)        *(u16 *)(void *)(d) = *(u16 *)(void *)(s)
140
#define ACPI_MOVE_16_TO_32(d, s)        *(u32 *)(void *)(d) = *(u16 *)(void *)(s)
141
#define ACPI_MOVE_16_TO_64(d, s)        *(u64 *)(void *)(d) = *(u16 *)(void *)(s)
142
 
143
/* 32-bit source, 16/32/64 destination */
144
 
145
#define ACPI_MOVE_32_TO_16(d, s)        ACPI_MOVE_16_TO_16(d, s)	/* Truncate to 16 */
146
#define ACPI_MOVE_32_TO_32(d, s)        *(u32 *)(void *)(d) = *(u32 *)(void *)(s)
147
#define ACPI_MOVE_32_TO_64(d, s)        *(u64 *)(void *)(d) = *(u32 *)(void *)(s)
148
 
149
/* 64-bit source, 16/32/64 destination */
150
 
151
#define ACPI_MOVE_64_TO_16(d, s)        ACPI_MOVE_16_TO_16(d, s)	/* Truncate to 16 */
152
#define ACPI_MOVE_64_TO_32(d, s)        ACPI_MOVE_32_TO_32(d, s)	/* Truncate to 32 */
153
#define ACPI_MOVE_64_TO_64(d, s)        *(u64 *)(void *)(d) = *(u64 *)(void *)(s)
154
 
155
#else
156
/*
157
 * The hardware does not support unaligned transfers. We must move the
158
 * data one byte at a time. These macros work whether the source or
159
 * the destination (or both) is/are unaligned. (Little-endian move)
160
 */
161
 
162
/* 16-bit source, 16/32/64 destination */
163
 
164
#define ACPI_MOVE_16_TO_16(d, s)        {((  u8 *)(void *)(d))[0] = ((u8 *)(void *)(s))[0];\
165
										 ((  u8 *)(void *)(d))[1] = ((u8 *)(void *)(s))[1];}
166
 
167
#define ACPI_MOVE_16_TO_32(d, s)        {(*(u32 *)(void *)(d)) = 0; ACPI_MOVE_16_TO_16(d, s);}
168
#define ACPI_MOVE_16_TO_64(d, s)        {(*(u64 *)(void *)(d)) = 0; ACPI_MOVE_16_TO_16(d, s);}
169
 
170
/* 32-bit source, 16/32/64 destination */
171
 
172
#define ACPI_MOVE_32_TO_16(d, s)        ACPI_MOVE_16_TO_16(d, s)	/* Truncate to 16 */
173
 
174
#define ACPI_MOVE_32_TO_32(d, s)        {((  u8 *)(void *)(d))[0] = ((u8 *)(void *)(s))[0];\
175
										 ((  u8 *)(void *)(d))[1] = ((u8 *)(void *)(s))[1];\
176
										 ((  u8 *)(void *)(d))[2] = ((u8 *)(void *)(s))[2];\
177
										 ((  u8 *)(void *)(d))[3] = ((u8 *)(void *)(s))[3];}
178
 
179
#define ACPI_MOVE_32_TO_64(d, s)        {(*(u64 *)(void *)(d)) = 0; ACPI_MOVE_32_TO_32(d, s);}
180
 
181
/* 64-bit source, 16/32/64 destination */
182
 
183
#define ACPI_MOVE_64_TO_16(d, s)        ACPI_MOVE_16_TO_16(d, s)	/* Truncate to 16 */
184
#define ACPI_MOVE_64_TO_32(d, s)        ACPI_MOVE_32_TO_32(d, s)	/* Truncate to 32 */
185
#define ACPI_MOVE_64_TO_64(d, s)        {((  u8 *)(void *)(d))[0] = ((u8 *)(void *)(s))[0];\
186
										 ((  u8 *)(void *)(d))[1] = ((u8 *)(void *)(s))[1];\
187
										 ((  u8 *)(void *)(d))[2] = ((u8 *)(void *)(s))[2];\
188
										 ((  u8 *)(void *)(d))[3] = ((u8 *)(void *)(s))[3];\
189
										 ((  u8 *)(void *)(d))[4] = ((u8 *)(void *)(s))[4];\
190
										 ((  u8 *)(void *)(d))[5] = ((u8 *)(void *)(s))[5];\
191
										 ((  u8 *)(void *)(d))[6] = ((u8 *)(void *)(s))[6];\
192
										 ((  u8 *)(void *)(d))[7] = ((u8 *)(void *)(s))[7];}
193
#endif
194
#endif
195
 
196
/*
197
 * Fast power-of-two math macros for non-optimized compilers
198
 */
199
#define _ACPI_DIV(value, power_of2)     ((u32) ((value) >> (power_of2)))
200
#define _ACPI_MUL(value, power_of2)     ((u32) ((value) << (power_of2)))
201
#define _ACPI_MOD(value, divisor)       ((u32) ((value) & ((divisor) -1)))
202
 
203
#define ACPI_DIV_2(a)                   _ACPI_DIV(a, 1)
204
#define ACPI_MUL_2(a)                   _ACPI_MUL(a, 1)
205
#define ACPI_MOD_2(a)                   _ACPI_MOD(a, 2)
206
 
207
#define ACPI_DIV_4(a)                   _ACPI_DIV(a, 2)
208
#define ACPI_MUL_4(a)                   _ACPI_MUL(a, 2)
209
#define ACPI_MOD_4(a)                   _ACPI_MOD(a, 4)
210
 
211
#define ACPI_DIV_8(a)                   _ACPI_DIV(a, 3)
212
#define ACPI_MUL_8(a)                   _ACPI_MUL(a, 3)
213
#define ACPI_MOD_8(a)                   _ACPI_MOD(a, 8)
214
 
215
#define ACPI_DIV_16(a)                  _ACPI_DIV(a, 4)
216
#define ACPI_MUL_16(a)                  _ACPI_MUL(a, 4)
217
#define ACPI_MOD_16(a)                  _ACPI_MOD(a, 16)
218
 
219
#define ACPI_DIV_32(a)                  _ACPI_DIV(a, 5)
220
#define ACPI_MUL_32(a)                  _ACPI_MUL(a, 5)
221
#define ACPI_MOD_32(a)                  _ACPI_MOD(a, 32)
222
 
223
/* Test for ASCII character */
224
 
225
#define ACPI_IS_ASCII(c)                ((c) < 0x80)
226
 
227
/* Signed integers */
228
 
229
#define ACPI_SIGN_POSITIVE              0
230
#define ACPI_SIGN_NEGATIVE              1
231
 
232
/*
233
 * Rounding macros (Power of two boundaries only)
234
 */
235
#define ACPI_ROUND_DOWN(value, boundary)    (((acpi_size)(value)) & \
236
												(~(((acpi_size) boundary)-1)))
237
 
238
#define ACPI_ROUND_UP(value, boundary)      ((((acpi_size)(value)) + \
239
												(((acpi_size) boundary)-1)) & \
240
												(~(((acpi_size) boundary)-1)))
241
 
242
/* Note: sizeof(acpi_size) evaluates to either 4 or 8 (32- vs 64-bit mode) */
243
 
244
#define ACPI_ROUND_DOWN_TO_32BIT(a)         ACPI_ROUND_DOWN(a, 4)
245
#define ACPI_ROUND_DOWN_TO_64BIT(a)         ACPI_ROUND_DOWN(a, 8)
246
#define ACPI_ROUND_DOWN_TO_NATIVE_WORD(a)   ACPI_ROUND_DOWN(a, sizeof(acpi_size))
247
 
248
#define ACPI_ROUND_UP_TO_32BIT(a)           ACPI_ROUND_UP(a, 4)
249
#define ACPI_ROUND_UP_TO_64BIT(a)           ACPI_ROUND_UP(a, 8)
250
#define ACPI_ROUND_UP_TO_NATIVE_WORD(a)     ACPI_ROUND_UP(a, sizeof(acpi_size))
251
 
252
#define ACPI_ROUND_BITS_UP_TO_BYTES(a)      ACPI_DIV_8((a) + 7)
253
#define ACPI_ROUND_BITS_DOWN_TO_BYTES(a)    ACPI_DIV_8((a))
254
 
255
#define ACPI_ROUND_UP_TO_1K(a)              (((a) + 1023) >> 10)
256
 
257
/* Generic (non-power-of-two) rounding */
258
 
259
#define ACPI_ROUND_UP_TO(value, boundary)   (((value) + ((boundary)-1)) / (boundary))
260
 
261
#define ACPI_IS_MISALIGNED(value)           (((acpi_size) value) & (sizeof(acpi_size)-1))
262
 
263
/*
264
 * Bitmask creation
265
 * Bit positions start at zero.
266
 * MASK_BITS_ABOVE creates a mask starting AT the position and above
267
 * MASK_BITS_BELOW creates a mask starting one bit BELOW the position
268
 */
269
#define ACPI_MASK_BITS_ABOVE(position)      (~((ACPI_UINT64_MAX) << ((u32) (position))))
270
#define ACPI_MASK_BITS_BELOW(position)      ((ACPI_UINT64_MAX) << ((u32) (position)))
271
 
272
/* Bitfields within ACPI registers */
273
 
274
#define ACPI_REGISTER_PREPARE_BITS(val, pos, mask) \
275
	((val << pos) & mask)
276
 
277
#define ACPI_REGISTER_INSERT_VALUE(reg, pos, mask, val) \
278
	reg = (reg & (~(mask))) | ACPI_REGISTER_PREPARE_BITS(val, pos, mask)
279
 
280
#define ACPI_INSERT_BITS(target, mask, source) \
281
	target = ((target & (~(mask))) | (source & mask))
282
 
283
/* Generic bitfield macros and masks */
284
 
285
#define ACPI_GET_BITS(source_ptr, position, mask) \
286
	((*source_ptr >> position) & mask)
287
 
288
#define ACPI_SET_BITS(target_ptr, position, mask, value) \
289
	(*target_ptr |= ((value & mask) << position))
290
 
291
#define ACPI_1BIT_MASK      0x00000001
292
#define ACPI_2BIT_MASK      0x00000003
293
#define ACPI_3BIT_MASK      0x00000007
294
#define ACPI_4BIT_MASK      0x0000000F
295
#define ACPI_5BIT_MASK      0x0000001F
296
#define ACPI_6BIT_MASK      0x0000003F
297
#define ACPI_7BIT_MASK      0x0000007F
298
#define ACPI_8BIT_MASK      0x000000FF
299
#define ACPI_16BIT_MASK     0x0000FFFF
300
#define ACPI_24BIT_MASK     0x00FFFFFF
301
 
302
/* Macros to extract flag bits from position zero */
303
 
304
#define ACPI_GET_1BIT_FLAG(value)                   ((value) & ACPI_1BIT_MASK)
305
#define ACPI_GET_2BIT_FLAG(value)                   ((value) & ACPI_2BIT_MASK)
306
#define ACPI_GET_3BIT_FLAG(value)                   ((value) & ACPI_3BIT_MASK)
307
#define ACPI_GET_4BIT_FLAG(value)                   ((value) & ACPI_4BIT_MASK)
308
 
309
/* Macros to extract flag bits from position one and above */
310
 
311
#define ACPI_EXTRACT_1BIT_FLAG(field, position)     (ACPI_GET_1BIT_FLAG ((field) >> position))
312
#define ACPI_EXTRACT_2BIT_FLAG(field, position)     (ACPI_GET_2BIT_FLAG ((field) >> position))
313
#define ACPI_EXTRACT_3BIT_FLAG(field, position)     (ACPI_GET_3BIT_FLAG ((field) >> position))
314
#define ACPI_EXTRACT_4BIT_FLAG(field, position)     (ACPI_GET_4BIT_FLAG ((field) >> position))
315
 
316
/* ACPI Pathname helpers */
317
 
318
#define ACPI_IS_ROOT_PREFIX(c)      ((c) == (u8) 0x5C)	/* Backslash */
319
#define ACPI_IS_PARENT_PREFIX(c)    ((c) == (u8) 0x5E)	/* Carat */
320
#define ACPI_IS_PATH_SEPARATOR(c)   ((c) == (u8) 0x2E)	/* Period (dot) */
321
 
322
/*
323
 * An object of type struct acpi_namespace_node can appear in some contexts
324
 * where a pointer to an object of type union acpi_operand_object can also
325
 * appear. This macro is used to distinguish them.
326
 *
327
 * The "DescriptorType" field is the second field in both structures.
328
 */
329
#define ACPI_GET_DESCRIPTOR_PTR(d)      (((union acpi_descriptor *)(void *)(d))->common.common_pointer)
330
#define ACPI_SET_DESCRIPTOR_PTR(d, p)   (((union acpi_descriptor *)(void *)(d))->common.common_pointer = (p))
331
#define ACPI_GET_DESCRIPTOR_TYPE(d)     (((union acpi_descriptor *)(void *)(d))->common.descriptor_type)
332
#define ACPI_SET_DESCRIPTOR_TYPE(d, t)  (((union acpi_descriptor *)(void *)(d))->common.descriptor_type = (t))
333
 
334
/*
335
 * Macros for the master AML opcode table
336
 */
337
#if defined (ACPI_DISASSEMBLER) || defined (ACPI_DEBUG_OUTPUT)
338
#define ACPI_OP(name, Pargs, Iargs, obj_type, class, type, flags) \
339
	{name, (u32)(Pargs), (u32)(Iargs), (u32)(flags), obj_type, class, type}
340
#else
341
#define ACPI_OP(name, Pargs, Iargs, obj_type, class, type, flags) \
342
	{(u32)(Pargs), (u32)(Iargs), (u32)(flags), obj_type, class, type}
343
#endif
344
 
345
#define ARG_TYPE_WIDTH                  5
346
#define ARG_1(x)                        ((u32)(x))
347
#define ARG_2(x)                        ((u32)(x) << (1 * ARG_TYPE_WIDTH))
348
#define ARG_3(x)                        ((u32)(x) << (2 * ARG_TYPE_WIDTH))
349
#define ARG_4(x)                        ((u32)(x) << (3 * ARG_TYPE_WIDTH))
350
#define ARG_5(x)                        ((u32)(x) << (4 * ARG_TYPE_WIDTH))
351
#define ARG_6(x)                        ((u32)(x) << (5 * ARG_TYPE_WIDTH))
352
 
353
#define ARGI_LIST1(a)                   (ARG_1(a))
354
#define ARGI_LIST2(a, b)                (ARG_1(b)|ARG_2(a))
355
#define ARGI_LIST3(a, b, c)             (ARG_1(c)|ARG_2(b)|ARG_3(a))
356
#define ARGI_LIST4(a, b, c, d)          (ARG_1(d)|ARG_2(c)|ARG_3(b)|ARG_4(a))
357
#define ARGI_LIST5(a, b, c, d, e)       (ARG_1(e)|ARG_2(d)|ARG_3(c)|ARG_4(b)|ARG_5(a))
358
#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))
359
 
360
#define ARGP_LIST1(a)                   (ARG_1(a))
361
#define ARGP_LIST2(a, b)                (ARG_1(a)|ARG_2(b))
362
#define ARGP_LIST3(a, b, c)             (ARG_1(a)|ARG_2(b)|ARG_3(c))
363
#define ARGP_LIST4(a, b, c, d)          (ARG_1(a)|ARG_2(b)|ARG_3(c)|ARG_4(d))
364
#define ARGP_LIST5(a, b, c, d, e)       (ARG_1(a)|ARG_2(b)|ARG_3(c)|ARG_4(d)|ARG_5(e))
365
#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))
366
 
367
#define GET_CURRENT_ARG_TYPE(list)      (list & ((u32) 0x1F))
368
#define INCREMENT_ARG_LIST(list)        (list >>= ((u32) ARG_TYPE_WIDTH))
369
 
370
/*
371
 * Ascii error messages can be configured out
372
 */
373
#ifndef ACPI_NO_ERROR_MESSAGES
374
/*
375
 * Error reporting. Callers module and line number are inserted by AE_INFO,
376
 * the plist contains a set of parens to allow variable-length lists.
377
 * These macros are used for both the debug and non-debug versions of the code.
378
 */
379
#define ACPI_ERROR_NAMESPACE(s, e)          acpi_ut_namespace_error (AE_INFO, s, e);
380
#define ACPI_ERROR_METHOD(s, n, p, e)       acpi_ut_method_error (AE_INFO, s, n, p, e);
381
#define ACPI_WARN_PREDEFINED(plist)         acpi_ut_predefined_warning plist
382
#define ACPI_INFO_PREDEFINED(plist)         acpi_ut_predefined_info plist
383
#define ACPI_BIOS_ERROR_PREDEFINED(plist)   acpi_ut_predefined_bios_error plist
384
 
385
#else
386
 
387
/* No error messages */
388
 
389
#define ACPI_ERROR_NAMESPACE(s, e)
390
#define ACPI_ERROR_METHOD(s, n, p, e)
391
#define ACPI_WARN_PREDEFINED(plist)
392
#define ACPI_INFO_PREDEFINED(plist)
393
#define ACPI_BIOS_ERROR_PREDEFINED(plist)
394
 
395
#endif				/* ACPI_NO_ERROR_MESSAGES */
396
 
397
#if (!ACPI_REDUCED_HARDWARE)
398
#define ACPI_HW_OPTIONAL_FUNCTION(addr)     addr
399
#else
400
#define ACPI_HW_OPTIONAL_FUNCTION(addr)     NULL
401
#endif
402
 
403
/*
404
 * Some code only gets executed when the debugger is built in.
405
 * Note that this is entirely independent of whether the
406
 * DEBUG_PRINT stuff (set by ACPI_DEBUG_OUTPUT) is on, or not.
407
 */
408
#ifdef ACPI_DEBUGGER
409
#define ACPI_DEBUGGER_EXEC(a)           a
410
#else
411
#define ACPI_DEBUGGER_EXEC(a)
412
#endif
413
 
414
/*
415
 * Macros used for ACPICA utilities only
416
 */
417
 
418
/* Generate a UUID */
419
 
420
#define ACPI_INIT_UUID(a, b, c, d0, d1, d2, d3, d4, d5, d6, d7) \
421
	(a) & 0xFF, ((a) >> 8) & 0xFF, ((a) >> 16) & 0xFF, ((a) >> 24) & 0xFF, \
422
	(b) & 0xFF, ((b) >> 8) & 0xFF, \
423
	(c) & 0xFF, ((c) >> 8) & 0xFF, \
424
	(d0), (d1), (d2), (d3), (d4), (d5), (d6), (d7)
425
 
426
#define ACPI_IS_OCTAL_DIGIT(d)              (((char)(d) >= '0') && ((char)(d) <= '7'))
427
 
428
#endif				/* ACMACROS_H */