Lines Matching +full:1 +full:- +full:d
1 /* SPDX-License-Identifier: BSD-3-Clause OR GPL-2.0 */
4 * Name: acmacros.h - C macros for the entire subsystem.
6 * Copyright (C) 2000 - 2025, Intel Corp.
15 * get into potential alignment issues -- see the STORE macros below.
33 * with emitting 64-bit integers and 64-bit pointers with the same code
34 * for both 32-bit and 64-bit hosts.
45 * Macros for big-endian machines
48 /* These macros reverse the bytes during the move, converting little-endian to big endian */
52 /* 16-bit source, 16/32/64 destination */
54 #define ACPI_MOVE_16_TO_16(d, s) {(( u8 *)(void *)(d))[0] = ((u8 *)(void *)(s))[1];\ argument
55 (( u8 *)(void *)(d))[1] = ((u8 *)(void *)(s))[0];}
57 #define ACPI_MOVE_16_TO_32(d, s) {(*(u32 *)(void *)(d))=0;\ argument
58 ((u8 *)(void *)(d))[2] = ((u8 *)(void *)(s))[1];\
59 ((u8 *)(void *)(d))[3] = ((u8 *)(void *)(s))[0];}
61 #define ACPI_MOVE_16_TO_64(d, s) {(*(u64 *)(void *)(d))=0;\ argument
62 ((u8 *)(void *)(d))[6] = ((u8 *)(void *)(s))[1];\
63 ((u8 *)(void *)(d))[7] = ((u8 *)(void *)(s))[0];}
65 /* 32-bit source, 16/32/64 destination */
67 #define ACPI_MOVE_32_TO_16(d, s) ACPI_MOVE_16_TO_16(d, s) /* Truncate to 16 */ argument
69 #define ACPI_MOVE_32_TO_32(d, s) {(( u8 *)(void *)(d))[0] = ((u8 *)(void *)(s))[3];\ argument
70 (( u8 *)(void *)(d))[1] = ((u8 *)(void *)(s))[2];\
71 (( u8 *)(void *)(d))[2] = ((u8 *)(void *)(s))[1];\
72 (( u8 *)(void *)(d))[3] = ((u8 *)(void *)(s))[0];}
74 #define ACPI_MOVE_32_TO_64(d, s) {(*(u64 *)(void *)(d))=0;\ argument
75 ((u8 *)(void *)(d))[4] = ((u8 *)(void *)(s))[3];\
76 ((u8 *)(void *)(d))[5] = ((u8 *)(void *)(s))[2];\
77 ((u8 *)(void *)(d))[6] = ((u8 *)(void *)(s))[1];\
78 ((u8 *)(void *)(d))[7] = ((u8 *)(void *)(s))[0];}
80 /* 64-bit source, 16/32/64 destination */
82 #define ACPI_MOVE_64_TO_16(d, s) ACPI_MOVE_16_TO_16(d, s) /* Truncate to 16 */ argument
84 #define ACPI_MOVE_64_TO_32(d, s) ACPI_MOVE_32_TO_32(d, s) /* Truncate to 32 */ argument
86 #define ACPI_MOVE_64_TO_64(d, s) {(( u8 *)(void *)(d))[0] = ((u8 *)(void *)(s))[7];\ argument
87 (( u8 *)(void *)(d))[1] = ((u8 *)(void *)(s))[6];\
88 (( u8 *)(void *)(d))[2] = ((u8 *)(void *)(s))[5];\
89 (( u8 *)(void *)(d))[3] = ((u8 *)(void *)(s))[4];\
90 (( u8 *)(void *)(d))[4] = ((u8 *)(void *)(s))[3];\
91 (( u8 *)(void *)(d))[5] = ((u8 *)(void *)(s))[2];\
92 (( u8 *)(void *)(d))[6] = ((u8 *)(void *)(s))[1];\
93 (( u8 *)(void *)(d))[7] = ((u8 *)(void *)(s))[0];}
96 * Macros for little-endian machines
101 /* The hardware supports unaligned transfers, just do the little-endian move */
103 /* 16-bit source, 16/32/64 destination */
105 #define ACPI_MOVE_16_TO_16(d, s) *(u16 *)(void *)(d) = *(u16 *)(void *)(s) argument
106 #define ACPI_MOVE_16_TO_32(d, s) *(u32 *)(void *)(d) = *(u16 *)(void *)(s) argument
107 #define ACPI_MOVE_16_TO_64(d, s) *(u64 *)(void *)(d) = *(u16 *)(void *)(s) argument
109 /* 32-bit source, 16/32/64 destination */
111 #define ACPI_MOVE_32_TO_16(d, s) ACPI_MOVE_16_TO_16(d, s) /* Truncate to 16 */ argument
112 #define ACPI_MOVE_32_TO_32(d, s) *(u32 *)(void *)(d) = *(u32 *)(void *)(s) argument
113 #define ACPI_MOVE_32_TO_64(d, s) *(u64 *)(void *)(d) = *(u32 *)(void *)(s) argument
115 /* 64-bit source, 16/32/64 destination */
117 #define ACPI_MOVE_64_TO_16(d, s) ACPI_MOVE_16_TO_16(d, s) /* Truncate to 16 */ argument
118 #define ACPI_MOVE_64_TO_32(d, s) ACPI_MOVE_32_TO_32(d, s) /* Truncate to 32 */ argument
119 #define ACPI_MOVE_64_TO_64(d, s) *(u64 *)(void *)(d) = *(u64 *)(void *)(s) argument
125 * the destination (or both) is/are unaligned. (Little-endian move)
128 /* 16-bit source, 16/32/64 destination */
130 #define ACPI_MOVE_16_TO_16(d, s) {(( u8 *)(void *)(d))[0] = ((u8 *)(void *)(s))[0];\ argument
131 (( u8 *)(void *)(d))[1] = ((u8 *)(void *)(s))[1];}
133 #define ACPI_MOVE_16_TO_32(d, s) {(*(u32 *)(void *)(d)) = 0; ACPI_MOVE_16_TO_16(d, s);} argument
134 #define ACPI_MOVE_16_TO_64(d, s) {(*(u64 *)(void *)(d)) = 0; ACPI_MOVE_16_TO_16(d, s);} argument
136 /* 32-bit source, 16/32/64 destination */
138 #define ACPI_MOVE_32_TO_16(d, s) ACPI_MOVE_16_TO_16(d, s) /* Truncate to 16 */ argument
140 #define ACPI_MOVE_32_TO_32(d, s) {(( u8 *)(void *)(d))[0] = ((u8 *)(void *)(s))[0];\ argument
141 (( u8 *)(void *)(d))[1] = ((u8 *)(void *)(s))[1];\
142 (( u8 *)(void *)(d))[2] = ((u8 *)(void *)(s))[2];\
143 (( u8 *)(void *)(d))[3] = ((u8 *)(void *)(s))[3];}
145 #define ACPI_MOVE_32_TO_64(d, s) {(*(u64 *)(void *)(d)) = 0; ACPI_MOVE_32_TO_32(d, s);} argument
147 /* 64-bit source, 16/32/64 destination */
149 #define ACPI_MOVE_64_TO_16(d, s) ACPI_MOVE_16_TO_16(d, s) /* Truncate to 16 */ argument
150 #define ACPI_MOVE_64_TO_32(d, s) ACPI_MOVE_32_TO_32(d, s) /* Truncate to 32 */ argument
151 #define ACPI_MOVE_64_TO_64(d, s) {(( u8 *)(void *)(d))[0] = ((u8 *)(void *)(s))[0];\ argument
152 (( u8 *)(void *)(d))[1] = ((u8 *)(void *)(s))[1];\
153 (( u8 *)(void *)(d))[2] = ((u8 *)(void *)(s))[2];\
154 (( u8 *)(void *)(d))[3] = ((u8 *)(void *)(s))[3];\
155 (( u8 *)(void *)(d))[4] = ((u8 *)(void *)(s))[4];\
156 (( u8 *)(void *)(d))[5] = ((u8 *)(void *)(s))[5];\
157 (( u8 *)(void *)(d))[6] = ((u8 *)(void *)(s))[6];\
158 (( u8 *)(void *)(d))[7] = ((u8 *)(void *)(s))[7];}
163 * Fast power-of-two math macros for non-optimized compilers
167 #define _ACPI_MOD(value, divisor) ((u32) ((value) & ((divisor) -1)))
169 #define ACPI_DIV_2(a) _ACPI_DIV(a, 1)
170 #define ACPI_MUL_2(a) _ACPI_MUL(a, 1)
196 #define ACPI_SIGN_NEGATIVE 1
202 (~(((acpi_size) boundary)-1)))
205 (((acpi_size) boundary)-1)) & \
206 (~(((acpi_size) boundary)-1)))
208 /* Note: sizeof(acpi_size) evaluates to either 4 or 8 (32- vs 64-bit mode) */
223 /* Generic (non-power-of-two) rounding */
225 #define ACPI_ROUND_UP_TO(value, boundary) (((value) + ((boundary)-1)) / (boundary))
227 #define ACPI_IS_MISALIGNED(value) (((acpi_size) value) & (sizeof(acpi_size)-1))
233 #define __ACPI_FIND_LAST_BIT_2(a, r) ((((u8) (a)) & 0x02) ? (r)+1 : (r))
250 #define ACPI_FIND_LAST_BIT_8(a) ((a) ? __ACPI_FIND_LAST_BIT_8 (a, 1) : 0)
251 #define ACPI_FIND_LAST_BIT_16(a) ((a) ? __ACPI_FIND_LAST_BIT_16 (a, 1) : 0)
252 #define ACPI_FIND_LAST_BIT_32(a) ((a) ? __ACPI_FIND_LAST_BIT_32 (a, 1) : 0)
253 #define ACPI_FIND_LAST_BIT_64(a) ((a) ? __ACPI_FIND_LAST_BIT_64 (a, 1) : 0)
255 #define __ACPI_FIND_FIRST_BIT_2(a, r) ((((u8) (a)) & 0x01) ? (r) : (r)+1)
272 #define ACPI_FIND_FIRST_BIT_8(a) ((a) ? __ACPI_FIND_FIRST_BIT_8 (a, 1) : 0)
273 #define ACPI_FIND_FIRST_BIT_16(a) ((a) ? __ACPI_FIND_FIRST_BIT_16 (a, 1) : 0)
274 #define ACPI_FIND_FIRST_BIT_32(a) ((a) ? __ACPI_FIND_FIRST_BIT_32 (a, 1) : 0)
275 #define ACPI_FIND_FIRST_BIT_64(a) ((a) ? __ACPI_FIND_FIRST_BIT_64 (a, 1) : 0)
279 /* Generic (power-of-two) rounding */
282 (((u16) 1) << ACPI_FIND_LAST_BIT_8 ((a) - 1)))
284 (((u16) 1) << (ACPI_FIND_LAST_BIT_8 ((a)) - 1)))
286 (((u32) 1) << ACPI_FIND_LAST_BIT_16 ((a) - 1)))
288 (((u32) 1) << (ACPI_FIND_LAST_BIT_16 ((a)) - 1)))
290 (((u64) 1) << ACPI_FIND_LAST_BIT_32 ((a) - 1)))
292 (((u64) 1) << (ACPI_FIND_LAST_BIT_32 ((a)) - 1)))
293 #define ACPI_IS_ALIGNED(a, s) (((a) & ((s) - 1)) == 0)
374 #define ACPI_GET_DESCRIPTOR_PTR(d) (((union acpi_descriptor *)(void *)(d))->common.common_poin… argument
375 #define ACPI_SET_DESCRIPTOR_PTR(d, p) (((union acpi_descriptor *)(void *)(d))->common.common_poin… argument
376 #define ACPI_GET_DESCRIPTOR_TYPE(d) (((union acpi_descriptor *)(void *)(d))->common.descriptor_… argument
377 #define ACPI_SET_DESCRIPTOR_TYPE(d, t) (((union acpi_descriptor *)(void *)(d))->common.descriptor_… argument
392 #define ARG_2(x) ((u32)(x) << (1 * ARG_TYPE_WIDTH))
401 #define ARGI_LIST4(a, b, c, d) (ARG_1(d)|ARG_2(c)|ARG_3(b)|ARG_4(a)) argument
402 #define ARGI_LIST5(a, b, c, d, e) (ARG_1(e)|ARG_2(d)|ARG_3(c)|ARG_4(b)|ARG_5(a)) argument
403 #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)) argument
408 #define ARGP_LIST4(a, b, c, d) (ARG_1(a)|ARG_2(b)|ARG_3(c)|ARG_4(d)) argument
409 #define ARGP_LIST5(a, b, c, d, e) (ARG_1(a)|ARG_2(b)|ARG_3(c)|ARG_4(d)|ARG_5(e)) argument
410 #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)) argument
421 * the plist contains a set of parens to allow variable-length lists.
422 * These macros are used for both the debug and non-debug versions of the code.
462 #define ACPI_IS_OCTAL_DIGIT(d) (((char)(d) >= '0') && ((char)(d) <= '7')) argument
465 * Macros used for the ASL-/ASL+ converter utility
477 #define ASL_CV_PRINT_ONE_COMMENT(a,b,c,d) cv_print_one_comment_type (a,b,c,d); argument
492 #define ASL_CV_PRINT_ONE_COMMENT(a,b,c,d) argument