1 /* SPDX-License-Identifier: BSD-3-Clause
3 * Copyright(c) 2019-2020 Xilinx, Inc.
4 * Copyright(c) 2007-2019 Solarflare Communications Inc.
6 * Ackowledgement to Fen Systems Ltd.
9 #ifndef _SYS_EFX_TYPES_H
10 #define _SYS_EFX_TYPES_H
13 #include "efx_annote.h"
22 * Solarflare NICs make extensive use of bitfields up to 128 bits
23 * wide. Since there is no native 128-bit datatype on most systems,
24 * and since 64-bit datatypes are inefficient on 32-bit systems and
25 * vice versa, we wrap accesses in a way that uses the most efficient
28 * The NICs are PCI devices and therefore little-endian. Since most
29 * of the quantities that we deal with are DMAed to/from host memory,
30 * we define our datatypes (efx_oword_t, efx_qword_t and efx_dword_t)
31 * to be little-endian.
33 * In the less common case of using PIO for individual register
34 * writes, we construct the little-endian datatype in host memory and
35 * then use non-swapping register access primitives, rather than
36 * constructing a native-endian datatype and relying on implicit
37 * byte-swapping. (We use a similar strategy for register reads.)
41 * NOTE: Field definitions here and elsewhere are done in terms of a lowest
42 * bit number (LBN) and a width.
45 #define EFX_DUMMY_FIELD_LBN 0
46 #define EFX_DUMMY_FIELD_WIDTH 0
48 #define EFX_BYTE_0_LBN 0
49 #define EFX_BYTE_0_WIDTH 8
51 #define EFX_BYTE_1_LBN 8
52 #define EFX_BYTE_1_WIDTH 8
54 #define EFX_BYTE_2_LBN 16
55 #define EFX_BYTE_2_WIDTH 8
57 #define EFX_BYTE_3_LBN 24
58 #define EFX_BYTE_3_WIDTH 8
60 #define EFX_BYTE_4_LBN 32
61 #define EFX_BYTE_4_WIDTH 8
63 #define EFX_BYTE_5_LBN 40
64 #define EFX_BYTE_5_WIDTH 8
66 #define EFX_BYTE_6_LBN 48
67 #define EFX_BYTE_6_WIDTH 8
69 #define EFX_BYTE_7_LBN 56
70 #define EFX_BYTE_7_WIDTH 8
72 #define EFX_WORD_0_LBN 0
73 #define EFX_WORD_0_WIDTH 16
75 #define EFX_WORD_1_LBN 16
76 #define EFX_WORD_1_WIDTH 16
78 #define EFX_WORD_2_LBN 32
79 #define EFX_WORD_2_WIDTH 16
81 #define EFX_WORD_3_LBN 48
82 #define EFX_WORD_3_WIDTH 16
84 #define EFX_DWORD_0_LBN 0
85 #define EFX_DWORD_0_WIDTH 32
87 #define EFX_DWORD_1_LBN 32
88 #define EFX_DWORD_1_WIDTH 32
90 #define EFX_DWORD_2_LBN 64
91 #define EFX_DWORD_2_WIDTH 32
93 #define EFX_DWORD_3_LBN 96
94 #define EFX_DWORD_3_WIDTH 32
97 * There are intentionally no EFX_QWORD_0 or EFX_QWORD_1 field definitions
98 * here as the implementaion of EFX_QWORD_FIELD and EFX_OWORD_FIELD do not
99 * support field widths larger than 32 bits.
102 /* Specified attribute (i.e. LBN ow WIDTH) of the specified field */
103 #define EFX_VAL(_field, _attribute) \
104 _field ## _ ## _attribute
106 /* Lowest bit number of the specified field */
107 #define EFX_LOW_BIT(_field) \
110 /* Width of the specified field */
111 #define EFX_WIDTH(_field) \
112 EFX_VAL(_field, WIDTH)
114 /* Highest bit number of the specified field */
115 #define EFX_HIGH_BIT(_field) \
116 (EFX_LOW_BIT(_field) + EFX_WIDTH(_field) - 1)
119 * 64-bit mask equal in width to the specified field.
121 * For example, a field with width 5 would have a mask of 0x000000000000001f.
123 #define EFX_MASK64(_field) \
124 ((EFX_WIDTH(_field) == 64) ? ~((uint64_t)0) : \
125 (((((uint64_t)1) << EFX_WIDTH(_field))) - 1))
127 * 32-bit mask equal in width to the specified field.
129 * For example, a field with width 5 would have a mask of 0x0000001f.
131 #define EFX_MASK32(_field) \
132 ((EFX_WIDTH(_field) == 32) ? ~((uint32_t)0) : \
133 (((((uint32_t)1) << EFX_WIDTH(_field))) - 1))
136 * 16-bit mask equal in width to the specified field.
138 * For example, a field with width 5 would have a mask of 0x001f.
140 #define EFX_MASK16(_field) \
141 ((EFX_WIDTH(_field) == 16) ? 0xffffu : \
142 (uint16_t)((1 << EFX_WIDTH(_field)) - 1))
145 * 8-bit mask equal in width to the specified field.
147 * For example, a field with width 5 would have a mask of 0x1f.
149 #define EFX_MASK8(_field) \
150 ((uint8_t)((1 << EFX_WIDTH(_field)) - 1))
155 * A byte (i.e. 8-bit) datatype
157 typedef union efx_byte_u {
162 * A word (i.e. 16-bit) datatype
164 * This datatype is defined to be little-endian.
166 typedef union efx_word_u {
167 efx_byte_t ew_byte[2];
173 * A doubleword (i.e. 32-bit) datatype
175 * This datatype is defined to be little-endian.
177 typedef union efx_dword_u {
178 efx_byte_t ed_byte[4];
179 efx_word_t ed_word[2];
186 * A quadword (i.e. 64-bit) datatype
188 * This datatype is defined to be little-endian.
190 typedef union efx_qword_u {
191 efx_byte_t eq_byte[8];
192 efx_word_t eq_word[4];
193 efx_dword_t eq_dword[2];
203 * An octword (i.e. 128-bit) datatype
205 * This datatype is defined to be little-endian.
207 typedef union efx_oword_u {
208 efx_byte_t eo_byte[16];
209 efx_word_t eo_word[8];
210 efx_dword_t eo_dword[4];
211 efx_qword_t eo_qword[2];
212 #if EFSYS_HAS_SSE2_M128
225 #define __SWAP16(_x) \
226 ((((_x) & 0xff) << 8) | \
227 (((_x) >> 8) & 0xff))
229 #define __SWAP32(_x) \
230 ((__SWAP16((_x) & 0xffff) << 16) | \
231 __SWAP16(((_x) >> 16) & 0xffff))
233 #define __SWAP64(_x) \
234 ((__SWAP32((_x) & 0xffffffff) << 32) | \
235 __SWAP32(((_x) >> 32) & 0xffffffff))
237 #define __NOSWAP16(_x) (_x)
238 #define __NOSWAP32(_x) (_x)
239 #define __NOSWAP64(_x) (_x)
241 #if EFSYS_IS_BIG_ENDIAN
243 #define __CPU_TO_LE_16(_x) ((uint16_t)__SWAP16(_x))
244 #define __LE_TO_CPU_16(_x) ((uint16_t)__SWAP16(_x))
245 #define __CPU_TO_BE_16(_x) ((uint16_t)__NOSWAP16(_x))
246 #define __BE_TO_CPU_16(_x) ((uint16_t)__NOSWAP16(_x))
248 #define __CPU_TO_LE_32(_x) ((uint32_t)__SWAP32(_x))
249 #define __LE_TO_CPU_32(_x) ((uint32_t)__SWAP32(_x))
250 #define __CPU_TO_BE_32(_x) ((uint32_t)__NOSWAP32(_x))
251 #define __BE_TO_CPU_32(_x) ((uint32_t)__NOSWAP32(_x))
253 #define __CPU_TO_LE_64(_x) ((uint64_t)__SWAP64(_x))
254 #define __LE_TO_CPU_64(_x) ((uint64_t)__SWAP64(_x))
255 #define __CPU_TO_BE_64(_x) ((uint64_t)__NOSWAP64(_x))
256 #define __BE_TO_CPU_64(_x) ((uint64_t)__NOSWAP64(_x))
258 #elif EFSYS_IS_LITTLE_ENDIAN
260 #define __CPU_TO_LE_16(_x) ((uint16_t)__NOSWAP16(_x))
261 #define __LE_TO_CPU_16(_x) ((uint16_t)__NOSWAP16(_x))
262 #define __CPU_TO_BE_16(_x) ((uint16_t)__SWAP16(_x))
263 #define __BE_TO_CPU_16(_x) ((uint16_t)__SWAP16(_x))
265 #define __CPU_TO_LE_32(_x) ((uint32_t)__NOSWAP32(_x))
266 #define __LE_TO_CPU_32(_x) ((uint32_t)__NOSWAP32(_x))
267 #define __CPU_TO_BE_32(_x) ((uint32_t)__SWAP32(_x))
268 #define __BE_TO_CPU_32(_x) ((uint32_t)__SWAP32(_x))
270 #define __CPU_TO_LE_64(_x) ((uint64_t)__NOSWAP64(_x))
271 #define __LE_TO_CPU_64(_x) ((uint64_t)__NOSWAP64(_x))
272 #define __CPU_TO_BE_64(_x) ((uint64_t)__SWAP64(_x))
273 #define __BE_TO_CPU_64(_x) ((uint64_t)__SWAP64(_x))
277 #error "Neither of EFSYS_IS_{BIG,LITTLE}_ENDIAN is set"
281 #define __NATIVE_8(_x) (uint8_t)(_x)
283 /* Format string for printing an efx_byte_t */
284 #define EFX_BYTE_FMT "0x%02x"
286 /* Format string for printing an efx_word_t */
287 #define EFX_WORD_FMT "0x%04x"
289 /* Format string for printing an efx_dword_t */
290 #define EFX_DWORD_FMT "0x%08x"
292 /* Format string for printing an efx_qword_t */
293 #define EFX_QWORD_FMT "0x%08x:%08x"
295 /* Format string for printing an efx_oword_t */
296 #define EFX_OWORD_FMT "0x%08x:%08x:%08x:%08x"
298 /* Parameters for printing an efx_byte_t */
299 #define EFX_BYTE_VAL(_byte) \
300 ((unsigned int)__NATIVE_8((_byte).eb_u8[0]))
302 /* Parameters for printing an efx_word_t */
303 #define EFX_WORD_VAL(_word) \
304 ((unsigned int)__LE_TO_CPU_16((_word).ew_u16[0]))
306 /* Parameters for printing an efx_dword_t */
307 #define EFX_DWORD_VAL(_dword) \
308 ((unsigned int)__LE_TO_CPU_32((_dword).ed_u32[0]))
310 /* Parameters for printing an efx_qword_t */
311 #define EFX_QWORD_VAL(_qword) \
312 ((unsigned int)__LE_TO_CPU_32((_qword).eq_u32[1])), \
313 ((unsigned int)__LE_TO_CPU_32((_qword).eq_u32[0]))
315 /* Parameters for printing an efx_oword_t */
316 #define EFX_OWORD_VAL(_oword) \
317 ((unsigned int)__LE_TO_CPU_32((_oword).eo_u32[3])), \
318 ((unsigned int)__LE_TO_CPU_32((_oword).eo_u32[2])), \
319 ((unsigned int)__LE_TO_CPU_32((_oword).eo_u32[1])), \
320 ((unsigned int)__LE_TO_CPU_32((_oword).eo_u32[0]))
323 * Stop lint complaining about some shifts.
327 #define FIX_LINT(_x) (_x + fix_lint)
329 #define FIX_LINT(_x) (_x)
333 * Saturation arithmetic subtract with minimum equal to zero.
335 * Use saturating arithmetic to ensure a non-negative result. This
336 * avoids undefined behaviour (and compiler warnings) when used as a
339 #define EFX_SSUB(_val, _sub) \
340 ((_val) > (_sub) ? ((_val) - (_sub)) : 0)
343 * Extract bit field portion [low,high) from the native-endian element
344 * which contains bits [min,max).
346 * For example, suppose "element" represents the high 32 bits of a
347 * 64-bit value, and we wish to extract the bits belonging to the bit
348 * field occupying bits 28-45 of this 64-bit value.
350 * Then EFX_EXTRACT(_element, 32, 63, 28, 45) would give
354 * The result will contain the relevant bits filled in in the range
355 * [0,high-low), with garbage in bits [high-low+1,...).
357 #define EFX_EXTRACT_NATIVE(_element, _min, _max, _low, _high) \
358 ((FIX_LINT(_low > _max) || FIX_LINT(_high < _min)) ? \
361 ((_element) >> EFX_SSUB(_low, _min)) : \
362 ((_element) << EFX_SSUB(_min, _low))))
365 * Extract bit field portion [low,high) from the 64-bit little-endian
366 * element which contains bits [min,max)
368 #define EFX_EXTRACT64(_element, _min, _max, _low, _high) \
369 EFX_EXTRACT_NATIVE(__LE_TO_CPU_64(_element), _min, _max, _low, _high)
372 * Extract bit field portion [low,high) from the 32-bit little-endian
373 * element which contains bits [min,max)
375 #define EFX_EXTRACT32(_element, _min, _max, _low, _high) \
376 EFX_EXTRACT_NATIVE(__LE_TO_CPU_32(_element), _min, _max, _low, _high)
379 * Extract bit field portion [low,high) from the 16-bit little-endian
380 * element which contains bits [min,max)
382 #define EFX_EXTRACT16(_element, _min, _max, _low, _high) \
383 EFX_EXTRACT_NATIVE(__LE_TO_CPU_16(_element), _min, _max, _low, _high)
386 * Extract bit field portion [low,high) from the 8-bit
387 * element which contains bits [min,max)
389 #define EFX_EXTRACT8(_element, _min, _max, _low, _high) \
390 EFX_EXTRACT_NATIVE(__NATIVE_8(_element), _min, _max, _low, _high)
392 #define EFX_EXTRACT_OWORD64(_oword, _low, _high) \
393 (EFX_EXTRACT64((_oword).eo_u64[0], FIX_LINT(0), FIX_LINT(63), \
395 EFX_EXTRACT64((_oword).eo_u64[1], FIX_LINT(64), FIX_LINT(127), \
398 #define EFX_EXTRACT_OWORD32(_oword, _low, _high) \
399 (EFX_EXTRACT32((_oword).eo_u32[0], FIX_LINT(0), FIX_LINT(31), \
401 EFX_EXTRACT32((_oword).eo_u32[1], FIX_LINT(32), FIX_LINT(63), \
403 EFX_EXTRACT32((_oword).eo_u32[2], FIX_LINT(64), FIX_LINT(95), \
405 EFX_EXTRACT32((_oword).eo_u32[3], FIX_LINT(96), FIX_LINT(127), \
408 #define EFX_EXTRACT_QWORD64(_qword, _low, _high) \
409 (EFX_EXTRACT64((_qword).eq_u64[0], FIX_LINT(0), FIX_LINT(63), \
412 #define EFX_EXTRACT_QWORD32(_qword, _low, _high) \
413 (EFX_EXTRACT32((_qword).eq_u32[0], FIX_LINT(0), FIX_LINT(31), \
415 EFX_EXTRACT32((_qword).eq_u32[1], FIX_LINT(32), FIX_LINT(63), \
418 #define EFX_EXTRACT_DWORD(_dword, _low, _high) \
419 (EFX_EXTRACT32((_dword).ed_u32[0], FIX_LINT(0), FIX_LINT(31), \
422 #define EFX_EXTRACT_WORD(_word, _low, _high) \
423 (EFX_EXTRACT16((_word).ew_u16[0], FIX_LINT(0), FIX_LINT(15), \
426 #define EFX_EXTRACT_BYTE(_byte, _low, _high) \
427 (EFX_EXTRACT8((_byte).eb_u8[0], FIX_LINT(0), FIX_LINT(7), \
431 #define EFX_OWORD_FIELD64(_oword, _field) \
432 ((uint32_t)EFX_EXTRACT_OWORD64(_oword, EFX_LOW_BIT(_field), \
433 EFX_HIGH_BIT(_field)) & EFX_MASK32(_field))
435 #define EFX_OWORD_FIELD32(_oword, _field) \
436 (EFX_EXTRACT_OWORD32(_oword, EFX_LOW_BIT(_field), \
437 EFX_HIGH_BIT(_field)) & EFX_MASK32(_field))
439 #define EFX_QWORD_FIELD64(_qword, _field) \
440 ((uint32_t)EFX_EXTRACT_QWORD64(_qword, EFX_LOW_BIT(_field), \
441 EFX_HIGH_BIT(_field)) & EFX_MASK32(_field))
443 #define EFX_QWORD_FIELD32(_qword, _field) \
444 (EFX_EXTRACT_QWORD32(_qword, EFX_LOW_BIT(_field), \
445 EFX_HIGH_BIT(_field)) & EFX_MASK32(_field))
447 #define EFX_DWORD_FIELD(_dword, _field) \
448 (EFX_EXTRACT_DWORD(_dword, EFX_LOW_BIT(_field), \
449 EFX_HIGH_BIT(_field)) & EFX_MASK32(_field))
451 #define EFX_WORD_FIELD(_word, _field) \
452 (EFX_EXTRACT_WORD(_word, EFX_LOW_BIT(_field), \
453 EFX_HIGH_BIT(_field)) & EFX_MASK16(_field))
455 #define EFX_BYTE_FIELD(_byte, _field) \
456 (EFX_EXTRACT_BYTE(_byte, EFX_LOW_BIT(_field), \
457 EFX_HIGH_BIT(_field)) & EFX_MASK8(_field))
460 #define EFX_OWORD_IS_EQUAL64(_oword_a, _oword_b) \
461 ((_oword_a).eo_u64[0] == (_oword_b).eo_u64[0] && \
462 (_oword_a).eo_u64[1] == (_oword_b).eo_u64[1])
464 #define EFX_OWORD_IS_EQUAL32(_oword_a, _oword_b) \
465 ((_oword_a).eo_u32[0] == (_oword_b).eo_u32[0] && \
466 (_oword_a).eo_u32[1] == (_oword_b).eo_u32[1] && \
467 (_oword_a).eo_u32[2] == (_oword_b).eo_u32[2] && \
468 (_oword_a).eo_u32[3] == (_oword_b).eo_u32[3])
470 #define EFX_QWORD_IS_EQUAL64(_qword_a, _qword_b) \
471 ((_qword_a).eq_u64[0] == (_qword_b).eq_u64[0])
473 #define EFX_QWORD_IS_EQUAL32(_qword_a, _qword_b) \
474 ((_qword_a).eq_u32[0] == (_qword_b).eq_u32[0] && \
475 (_qword_a).eq_u32[1] == (_qword_b).eq_u32[1])
477 #define EFX_DWORD_IS_EQUAL(_dword_a, _dword_b) \
478 ((_dword_a).ed_u32[0] == (_dword_b).ed_u32[0])
480 #define EFX_WORD_IS_EQUAL(_word_a, _word_b) \
481 ((_word_a).ew_u16[0] == (_word_b).ew_u16[0])
483 #define EFX_BYTE_IS_EQUAL(_byte_a, _byte_b) \
484 ((_byte_a).eb_u8[0] == (_byte_b).eb_u8[0])
487 #define EFX_OWORD_IS_ZERO64(_oword) \
488 (((_oword).eo_u64[0] | \
489 (_oword).eo_u64[1]) == 0)
491 #define EFX_OWORD_IS_ZERO32(_oword) \
492 (((_oword).eo_u32[0] | \
493 (_oword).eo_u32[1] | \
494 (_oword).eo_u32[2] | \
495 (_oword).eo_u32[3]) == 0)
497 #define EFX_QWORD_IS_ZERO64(_qword) \
498 (((_qword).eq_u64[0]) == 0)
500 #define EFX_QWORD_IS_ZERO32(_qword) \
501 (((_qword).eq_u32[0] | \
502 (_qword).eq_u32[1]) == 0)
504 #define EFX_DWORD_IS_ZERO(_dword) \
505 (((_dword).ed_u32[0]) == 0)
507 #define EFX_WORD_IS_ZERO(_word) \
508 (((_word).ew_u16[0]) == 0)
510 #define EFX_BYTE_IS_ZERO(_byte) \
511 (((_byte).eb_u8[0]) == 0)
514 #define EFX_OWORD_IS_SET64(_oword) \
515 (((_oword).eo_u64[0] & \
516 (_oword).eo_u64[1]) == ~((uint64_t)0))
518 #define EFX_OWORD_IS_SET32(_oword) \
519 (((_oword).eo_u32[0] & \
520 (_oword).eo_u32[1] & \
521 (_oword).eo_u32[2] & \
522 (_oword).eo_u32[3]) == ~((uint32_t)0))
524 #define EFX_QWORD_IS_SET64(_qword) \
525 (((_qword).eq_u64[0]) == ~((uint64_t)0))
527 #define EFX_QWORD_IS_SET32(_qword) \
528 (((_qword).eq_u32[0] & \
529 (_qword).eq_u32[1]) == ~((uint32_t)0))
531 #define EFX_DWORD_IS_SET(_dword) \
532 ((_dword).ed_u32[0] == ~((uint32_t)0))
534 #define EFX_WORD_IS_SET(_word) \
535 ((_word).ew_u16[0] == ~((uint16_t)0))
537 #define EFX_BYTE_IS_SET(_byte) \
538 ((_byte).eb_u8[0] == ~((uint8_t)0))
541 * Construct bit field portion
543 * Creates the portion of the bit field [low,high) that lies within
544 * the range [min,max).
547 #define EFX_INSERT_NATIVE64(_min, _max, _low, _high, _value) \
548 (((_low > _max) || (_high < _min)) ? \
551 (((uint64_t)(_value)) << EFX_SSUB(_low, _min)) :\
552 (((uint64_t)(_value)) >> EFX_SSUB(_min, _low))))
554 #define EFX_INSERT_NATIVE32(_min, _max, _low, _high, _value) \
555 (((_low > _max) || (_high < _min)) ? \
558 (((uint32_t)(_value)) << EFX_SSUB(_low, _min)) :\
559 (((uint32_t)(_value)) >> EFX_SSUB(_min, _low))))
561 #define EFX_INSERT_NATIVE16(_min, _max, _low, _high, _value) \
562 (((_low > _max) || (_high < _min)) ? \
564 (uint16_t)((_low > _min) ? \
565 ((_value) << EFX_SSUB(_low, _min)) : \
566 ((_value) >> EFX_SSUB(_min, _low))))
568 #define EFX_INSERT_NATIVE8(_min, _max, _low, _high, _value) \
569 (((_low > _max) || (_high < _min)) ? \
571 (uint8_t)((_low > _min) ? \
572 ((_value) << EFX_SSUB(_low, _min)) : \
573 ((_value) >> EFX_SSUB(_min, _low))))
576 * Construct bit field portion
578 * Creates the portion of the named bit field that lies within the
581 #define EFX_INSERT_FIELD_NATIVE64(_min, _max, _field, _value) \
582 EFX_INSERT_NATIVE64(_min, _max, EFX_LOW_BIT(_field), \
583 EFX_HIGH_BIT(_field), _value)
585 #define EFX_INSERT_FIELD_NATIVE32(_min, _max, _field, _value) \
586 EFX_INSERT_NATIVE32(_min, _max, EFX_LOW_BIT(_field), \
587 EFX_HIGH_BIT(_field), _value)
589 #define EFX_INSERT_FIELD_NATIVE16(_min, _max, _field, _value) \
590 EFX_INSERT_NATIVE16(_min, _max, EFX_LOW_BIT(_field), \
591 EFX_HIGH_BIT(_field), _value)
593 #define EFX_INSERT_FIELD_NATIVE8(_min, _max, _field, _value) \
594 EFX_INSERT_NATIVE8(_min, _max, EFX_LOW_BIT(_field), \
595 EFX_HIGH_BIT(_field), _value)
598 * Construct bit field
600 * Creates the portion of the named bit fields that lie within the
603 #define EFX_INSERT_FIELDS64(_min, _max, \
604 _field1, _value1, _field2, _value2, _field3, _value3, \
605 _field4, _value4, _field5, _value5, _field6, _value6, \
606 _field7, _value7, _field8, _value8, _field9, _value9, \
607 _field10, _value10) \
609 EFX_INSERT_FIELD_NATIVE64(_min, _max, _field1, _value1) | \
610 EFX_INSERT_FIELD_NATIVE64(_min, _max, _field2, _value2) | \
611 EFX_INSERT_FIELD_NATIVE64(_min, _max, _field3, _value3) | \
612 EFX_INSERT_FIELD_NATIVE64(_min, _max, _field4, _value4) | \
613 EFX_INSERT_FIELD_NATIVE64(_min, _max, _field5, _value5) | \
614 EFX_INSERT_FIELD_NATIVE64(_min, _max, _field6, _value6) | \
615 EFX_INSERT_FIELD_NATIVE64(_min, _max, _field7, _value7) | \
616 EFX_INSERT_FIELD_NATIVE64(_min, _max, _field8, _value8) | \
617 EFX_INSERT_FIELD_NATIVE64(_min, _max, _field9, _value9) | \
618 EFX_INSERT_FIELD_NATIVE64(_min, _max, _field10, _value10))
620 #define EFX_INSERT_FIELDS32(_min, _max, \
621 _field1, _value1, _field2, _value2, _field3, _value3, \
622 _field4, _value4, _field5, _value5, _field6, _value6, \
623 _field7, _value7, _field8, _value8, _field9, _value9, \
624 _field10, _value10) \
626 EFX_INSERT_FIELD_NATIVE32(_min, _max, _field1, _value1) | \
627 EFX_INSERT_FIELD_NATIVE32(_min, _max, _field2, _value2) | \
628 EFX_INSERT_FIELD_NATIVE32(_min, _max, _field3, _value3) | \
629 EFX_INSERT_FIELD_NATIVE32(_min, _max, _field4, _value4) | \
630 EFX_INSERT_FIELD_NATIVE32(_min, _max, _field5, _value5) | \
631 EFX_INSERT_FIELD_NATIVE32(_min, _max, _field6, _value6) | \
632 EFX_INSERT_FIELD_NATIVE32(_min, _max, _field7, _value7) | \
633 EFX_INSERT_FIELD_NATIVE32(_min, _max, _field8, _value8) | \
634 EFX_INSERT_FIELD_NATIVE32(_min, _max, _field9, _value9) | \
635 EFX_INSERT_FIELD_NATIVE32(_min, _max, _field10, _value10))
637 #define EFX_INSERT_FIELDS16(_min, _max, \
638 _field1, _value1, _field2, _value2, _field3, _value3, \
639 _field4, _value4, _field5, _value5, _field6, _value6, \
640 _field7, _value7, _field8, _value8, _field9, _value9, \
641 _field10, _value10) \
643 EFX_INSERT_FIELD_NATIVE16(_min, _max, _field1, _value1) | \
644 EFX_INSERT_FIELD_NATIVE16(_min, _max, _field2, _value2) | \
645 EFX_INSERT_FIELD_NATIVE16(_min, _max, _field3, _value3) | \
646 EFX_INSERT_FIELD_NATIVE16(_min, _max, _field4, _value4) | \
647 EFX_INSERT_FIELD_NATIVE16(_min, _max, _field5, _value5) | \
648 EFX_INSERT_FIELD_NATIVE16(_min, _max, _field6, _value6) | \
649 EFX_INSERT_FIELD_NATIVE16(_min, _max, _field7, _value7) | \
650 EFX_INSERT_FIELD_NATIVE16(_min, _max, _field8, _value8) | \
651 EFX_INSERT_FIELD_NATIVE16(_min, _max, _field9, _value9) | \
652 EFX_INSERT_FIELD_NATIVE16(_min, _max, _field10, _value10))
654 #define EFX_INSERT_FIELDS8(_min, _max, \
655 _field1, _value1, _field2, _value2, _field3, _value3, \
656 _field4, _value4, _field5, _value5, _field6, _value6, \
657 _field7, _value7, _field8, _value8, _field9, _value9, \
658 _field10, _value10) \
660 EFX_INSERT_FIELD_NATIVE8(_min, _max, _field1, _value1) | \
661 EFX_INSERT_FIELD_NATIVE8(_min, _max, _field2, _value2) | \
662 EFX_INSERT_FIELD_NATIVE8(_min, _max, _field3, _value3) | \
663 EFX_INSERT_FIELD_NATIVE8(_min, _max, _field4, _value4) | \
664 EFX_INSERT_FIELD_NATIVE8(_min, _max, _field5, _value5) | \
665 EFX_INSERT_FIELD_NATIVE8(_min, _max, _field6, _value6) | \
666 EFX_INSERT_FIELD_NATIVE8(_min, _max, _field7, _value7) | \
667 EFX_INSERT_FIELD_NATIVE8(_min, _max, _field8, _value8) | \
668 EFX_INSERT_FIELD_NATIVE8(_min, _max, _field9, _value9) | \
669 EFX_INSERT_FIELD_NATIVE8(_min, _max, _field10, _value10))
671 #define EFX_POPULATE_OWORD64(_oword, \
672 _field1, _value1, _field2, _value2, _field3, _value3, \
673 _field4, _value4, _field5, _value5, _field6, _value6, \
674 _field7, _value7, _field8, _value8, _field9, _value9, \
675 _field10, _value10) \
677 _NOTE(CONSTANTCONDITION) \
678 (_oword).eo_u64[0] = EFX_INSERT_FIELDS64(0, 63, \
679 _field1, _value1, _field2, _value2, \
680 _field3, _value3, _field4, _value4, \
681 _field5, _value5, _field6, _value6, \
682 _field7, _value7, _field8, _value8, \
683 _field9, _value9, _field10, _value10); \
684 _NOTE(CONSTANTCONDITION) \
685 (_oword).eo_u64[1] = EFX_INSERT_FIELDS64(64, 127, \
686 _field1, _value1, _field2, _value2, \
687 _field3, _value3, _field4, _value4, \
688 _field5, _value5, _field6, _value6, \
689 _field7, _value7, _field8, _value8, \
690 _field9, _value9, _field10, _value10); \
691 _NOTE(CONSTANTCONDITION) \
694 #define EFX_POPULATE_OWORD32(_oword, \
695 _field1, _value1, _field2, _value2, _field3, _value3, \
696 _field4, _value4, _field5, _value5, _field6, _value6, \
697 _field7, _value7, _field8, _value8, _field9, _value9, \
698 _field10, _value10) \
700 _NOTE(CONSTANTCONDITION) \
701 (_oword).eo_u32[0] = EFX_INSERT_FIELDS32(0, 31, \
702 _field1, _value1, _field2, _value2, \
703 _field3, _value3, _field4, _value4, \
704 _field5, _value5, _field6, _value6, \
705 _field7, _value7, _field8, _value8, \
706 _field9, _value9, _field10, _value10); \
707 _NOTE(CONSTANTCONDITION) \
708 (_oword).eo_u32[1] = EFX_INSERT_FIELDS32(32, 63, \
709 _field1, _value1, _field2, _value2, \
710 _field3, _value3, _field4, _value4, \
711 _field5, _value5, _field6, _value6, \
712 _field7, _value7, _field8, _value8, \
713 _field9, _value9, _field10, _value10); \
714 _NOTE(CONSTANTCONDITION) \
715 (_oword).eo_u32[2] = EFX_INSERT_FIELDS32(64, 95, \
716 _field1, _value1, _field2, _value2, \
717 _field3, _value3, _field4, _value4, \
718 _field5, _value5, _field6, _value6, \
719 _field7, _value7, _field8, _value8, \
720 _field9, _value9, _field10, _value10); \
721 _NOTE(CONSTANTCONDITION) \
722 (_oword).eo_u32[3] = EFX_INSERT_FIELDS32(96, 127, \
723 _field1, _value1, _field2, _value2, \
724 _field3, _value3, _field4, _value4, \
725 _field5, _value5, _field6, _value6, \
726 _field7, _value7, _field8, _value8, \
727 _field9, _value9, _field10, _value10); \
728 _NOTE(CONSTANTCONDITION) \
731 #define EFX_POPULATE_QWORD64(_qword, \
732 _field1, _value1, _field2, _value2, _field3, _value3, \
733 _field4, _value4, _field5, _value5, _field6, _value6, \
734 _field7, _value7, _field8, _value8, _field9, _value9, \
735 _field10, _value10) \
737 _NOTE(CONSTANTCONDITION) \
738 (_qword).eq_u64[0] = EFX_INSERT_FIELDS64(0, 63, \
739 _field1, _value1, _field2, _value2, \
740 _field3, _value3, _field4, _value4, \
741 _field5, _value5, _field6, _value6, \
742 _field7, _value7, _field8, _value8, \
743 _field9, _value9, _field10, _value10); \
744 _NOTE(CONSTANTCONDITION) \
747 #define EFX_POPULATE_QWORD32(_qword, \
748 _field1, _value1, _field2, _value2, _field3, _value3, \
749 _field4, _value4, _field5, _value5, _field6, _value6, \
750 _field7, _value7, _field8, _value8, _field9, _value9, \
751 _field10, _value10) \
753 _NOTE(CONSTANTCONDITION) \
754 (_qword).eq_u32[0] = EFX_INSERT_FIELDS32(0, 31, \
755 _field1, _value1, _field2, _value2, \
756 _field3, _value3, _field4, _value4, \
757 _field5, _value5, _field6, _value6, \
758 _field7, _value7, _field8, _value8, \
759 _field9, _value9, _field10, _value10); \
760 _NOTE(CONSTANTCONDITION) \
761 (_qword).eq_u32[1] = EFX_INSERT_FIELDS32(32, 63, \
762 _field1, _value1, _field2, _value2, \
763 _field3, _value3, _field4, _value4, \
764 _field5, _value5, _field6, _value6, \
765 _field7, _value7, _field8, _value8, \
766 _field9, _value9, _field10, _value10); \
767 _NOTE(CONSTANTCONDITION) \
770 #define EFX_POPULATE_DWORD(_dword, \
771 _field1, _value1, _field2, _value2, _field3, _value3, \
772 _field4, _value4, _field5, _value5, _field6, _value6, \
773 _field7, _value7, _field8, _value8, _field9, _value9, \
774 _field10, _value10) \
776 _NOTE(CONSTANTCONDITION) \
777 (_dword).ed_u32[0] = EFX_INSERT_FIELDS32(0, 31, \
778 _field1, _value1, _field2, _value2, \
779 _field3, _value3, _field4, _value4, \
780 _field5, _value5, _field6, _value6, \
781 _field7, _value7, _field8, _value8, \
782 _field9, _value9, _field10, _value10); \
783 _NOTE(CONSTANTCONDITION) \
786 #define EFX_POPULATE_WORD(_word, \
787 _field1, _value1, _field2, _value2, _field3, _value3, \
788 _field4, _value4, _field5, _value5, _field6, _value6, \
789 _field7, _value7, _field8, _value8, _field9, _value9, \
790 _field10, _value10) \
792 _NOTE(CONSTANTCONDITION) \
793 (_word).ew_u16[0] = EFX_INSERT_FIELDS16(0, 15, \
794 _field1, _value1, _field2, _value2, \
795 _field3, _value3, _field4, _value4, \
796 _field5, _value5, _field6, _value6, \
797 _field7, _value7, _field8, _value8, \
798 _field9, _value9, _field10, _value10); \
799 _NOTE(CONSTANTCONDITION) \
802 #define EFX_POPULATE_BYTE(_byte, \
803 _field1, _value1, _field2, _value2, _field3, _value3, \
804 _field4, _value4, _field5, _value5, _field6, _value6, \
805 _field7, _value7, _field8, _value8, _field9, _value9, \
806 _field10, _value10) \
808 _NOTE(CONSTANTCONDITION) \
809 (_byte).eb_u8[0] = EFX_INSERT_FIELDS8(0, 7, \
810 _field1, _value1, _field2, _value2, \
811 _field3, _value3, _field4, _value4, \
812 _field5, _value5, _field6, _value6, \
813 _field7, _value7, _field8, _value8, \
814 _field9, _value9, _field10, _value10); \
815 _NOTE(CONSTANTCONDITION) \
818 /* Populate an octword field with various numbers of arguments */
819 #define EFX_POPULATE_OWORD_10 EFX_POPULATE_OWORD
821 #define EFX_POPULATE_OWORD_9(_oword, \
822 _field1, _value1, _field2, _value2, _field3, _value3, \
823 _field4, _value4, _field5, _value5, _field6, _value6, \
824 _field7, _value7, _field8, _value8, _field9, _value9) \
825 EFX_POPULATE_OWORD_10(_oword, EFX_DUMMY_FIELD, 0, \
826 _field1, _value1, _field2, _value2, _field3, _value3, \
827 _field4, _value4, _field5, _value5, _field6, _value6, \
828 _field7, _value7, _field8, _value8, _field9, _value9)
830 #define EFX_POPULATE_OWORD_8(_oword, \
831 _field1, _value1, _field2, _value2, _field3, _value3, \
832 _field4, _value4, _field5, _value5, _field6, _value6, \
833 _field7, _value7, _field8, _value8) \
834 EFX_POPULATE_OWORD_9(_oword, EFX_DUMMY_FIELD, 0, \
835 _field1, _value1, _field2, _value2, _field3, _value3, \
836 _field4, _value4, _field5, _value5, _field6, _value6, \
837 _field7, _value7, _field8, _value8)
839 #define EFX_POPULATE_OWORD_7(_oword, \
840 _field1, _value1, _field2, _value2, _field3, _value3, \
841 _field4, _value4, _field5, _value5, _field6, _value6, \
843 EFX_POPULATE_OWORD_8(_oword, EFX_DUMMY_FIELD, 0, \
844 _field1, _value1, _field2, _value2, _field3, _value3, \
845 _field4, _value4, _field5, _value5, _field6, _value6, \
848 #define EFX_POPULATE_OWORD_6(_oword, \
849 _field1, _value1, _field2, _value2, _field3, _value3, \
850 _field4, _value4, _field5, _value5, _field6, _value6) \
851 EFX_POPULATE_OWORD_7(_oword, EFX_DUMMY_FIELD, 0, \
852 _field1, _value1, _field2, _value2, _field3, _value3, \
853 _field4, _value4, _field5, _value5, _field6, _value6)
855 #define EFX_POPULATE_OWORD_5(_oword, \
856 _field1, _value1, _field2, _value2, _field3, _value3, \
857 _field4, _value4, _field5, _value5) \
858 EFX_POPULATE_OWORD_6(_oword, EFX_DUMMY_FIELD, 0, \
859 _field1, _value1, _field2, _value2, _field3, _value3, \
860 _field4, _value4, _field5, _value5)
862 #define EFX_POPULATE_OWORD_4(_oword, \
863 _field1, _value1, _field2, _value2, _field3, _value3, \
865 EFX_POPULATE_OWORD_5(_oword, EFX_DUMMY_FIELD, 0, \
866 _field1, _value1, _field2, _value2, _field3, _value3, \
869 #define EFX_POPULATE_OWORD_3(_oword, \
870 _field1, _value1, _field2, _value2, _field3, _value3) \
871 EFX_POPULATE_OWORD_4(_oword, EFX_DUMMY_FIELD, 0, \
872 _field1, _value1, _field2, _value2, _field3, _value3)
874 #define EFX_POPULATE_OWORD_2(_oword, \
875 _field1, _value1, _field2, _value2) \
876 EFX_POPULATE_OWORD_3(_oword, EFX_DUMMY_FIELD, 0, \
877 _field1, _value1, _field2, _value2)
879 #define EFX_POPULATE_OWORD_1(_oword, \
881 EFX_POPULATE_OWORD_2(_oword, EFX_DUMMY_FIELD, 0, \
884 #define EFX_ZERO_OWORD(_oword) \
885 EFX_POPULATE_OWORD_1(_oword, EFX_DUMMY_FIELD, 0)
887 #define EFX_SET_OWORD(_oword) \
888 EFX_POPULATE_OWORD_4(_oword, \
889 EFX_DWORD_0, 0xffffffff, EFX_DWORD_1, 0xffffffff, \
890 EFX_DWORD_2, 0xffffffff, EFX_DWORD_3, 0xffffffff)
892 /* Populate a quadword field with various numbers of arguments */
893 #define EFX_POPULATE_QWORD_10 EFX_POPULATE_QWORD
895 #define EFX_POPULATE_QWORD_9(_qword, \
896 _field1, _value1, _field2, _value2, _field3, _value3, \
897 _field4, _value4, _field5, _value5, _field6, _value6, \
898 _field7, _value7, _field8, _value8, _field9, _value9) \
899 EFX_POPULATE_QWORD_10(_qword, EFX_DUMMY_FIELD, 0, \
900 _field1, _value1, _field2, _value2, _field3, _value3, \
901 _field4, _value4, _field5, _value5, _field6, _value6, \
902 _field7, _value7, _field8, _value8, _field9, _value9)
904 #define EFX_POPULATE_QWORD_8(_qword, \
905 _field1, _value1, _field2, _value2, _field3, _value3, \
906 _field4, _value4, _field5, _value5, _field6, _value6, \
907 _field7, _value7, _field8, _value8) \
908 EFX_POPULATE_QWORD_9(_qword, EFX_DUMMY_FIELD, 0, \
909 _field1, _value1, _field2, _value2, _field3, _value3, \
910 _field4, _value4, _field5, _value5, _field6, _value6, \
911 _field7, _value7, _field8, _value8)
913 #define EFX_POPULATE_QWORD_7(_qword, \
914 _field1, _value1, _field2, _value2, _field3, _value3, \
915 _field4, _value4, _field5, _value5, _field6, _value6, \
917 EFX_POPULATE_QWORD_8(_qword, EFX_DUMMY_FIELD, 0, \
918 _field1, _value1, _field2, _value2, _field3, _value3, \
919 _field4, _value4, _field5, _value5, _field6, _value6, \
922 #define EFX_POPULATE_QWORD_6(_qword, \
923 _field1, _value1, _field2, _value2, _field3, _value3, \
924 _field4, _value4, _field5, _value5, _field6, _value6) \
925 EFX_POPULATE_QWORD_7(_qword, EFX_DUMMY_FIELD, 0, \
926 _field1, _value1, _field2, _value2, _field3, _value3, \
927 _field4, _value4, _field5, _value5, _field6, _value6)
929 #define EFX_POPULATE_QWORD_5(_qword, \
930 _field1, _value1, _field2, _value2, _field3, _value3, \
931 _field4, _value4, _field5, _value5) \
932 EFX_POPULATE_QWORD_6(_qword, EFX_DUMMY_FIELD, 0, \
933 _field1, _value1, _field2, _value2, _field3, _value3, \
934 _field4, _value4, _field5, _value5)
936 #define EFX_POPULATE_QWORD_4(_qword, \
937 _field1, _value1, _field2, _value2, _field3, _value3, \
939 EFX_POPULATE_QWORD_5(_qword, EFX_DUMMY_FIELD, 0, \
940 _field1, _value1, _field2, _value2, _field3, _value3, \
943 #define EFX_POPULATE_QWORD_3(_qword, \
944 _field1, _value1, _field2, _value2, _field3, _value3) \
945 EFX_POPULATE_QWORD_4(_qword, EFX_DUMMY_FIELD, 0, \
946 _field1, _value1, _field2, _value2, _field3, _value3)
948 #define EFX_POPULATE_QWORD_2(_qword, \
949 _field1, _value1, _field2, _value2) \
950 EFX_POPULATE_QWORD_3(_qword, EFX_DUMMY_FIELD, 0, \
951 _field1, _value1, _field2, _value2)
953 #define EFX_POPULATE_QWORD_1(_qword, \
955 EFX_POPULATE_QWORD_2(_qword, EFX_DUMMY_FIELD, 0, \
958 #define EFX_ZERO_QWORD(_qword) \
959 EFX_POPULATE_QWORD_1(_qword, EFX_DUMMY_FIELD, 0)
961 #define EFX_SET_QWORD(_qword) \
962 EFX_POPULATE_QWORD_2(_qword, \
963 EFX_DWORD_0, 0xffffffff, EFX_DWORD_1, 0xffffffff)
965 /* Populate a dword field with various numbers of arguments */
966 #define EFX_POPULATE_DWORD_10 EFX_POPULATE_DWORD
968 #define EFX_POPULATE_DWORD_9(_dword, \
969 _field1, _value1, _field2, _value2, _field3, _value3, \
970 _field4, _value4, _field5, _value5, _field6, _value6, \
971 _field7, _value7, _field8, _value8, _field9, _value9) \
972 EFX_POPULATE_DWORD_10(_dword, EFX_DUMMY_FIELD, 0, \
973 _field1, _value1, _field2, _value2, _field3, _value3, \
974 _field4, _value4, _field5, _value5, _field6, _value6, \
975 _field7, _value7, _field8, _value8, _field9, _value9)
977 #define EFX_POPULATE_DWORD_8(_dword, \
978 _field1, _value1, _field2, _value2, _field3, _value3, \
979 _field4, _value4, _field5, _value5, _field6, _value6, \
980 _field7, _value7, _field8, _value8) \
981 EFX_POPULATE_DWORD_9(_dword, EFX_DUMMY_FIELD, 0, \
982 _field1, _value1, _field2, _value2, _field3, _value3, \
983 _field4, _value4, _field5, _value5, _field6, _value6, \
984 _field7, _value7, _field8, _value8)
986 #define EFX_POPULATE_DWORD_7(_dword, \
987 _field1, _value1, _field2, _value2, _field3, _value3, \
988 _field4, _value4, _field5, _value5, _field6, _value6, \
990 EFX_POPULATE_DWORD_8(_dword, EFX_DUMMY_FIELD, 0, \
991 _field1, _value1, _field2, _value2, _field3, _value3, \
992 _field4, _value4, _field5, _value5, _field6, _value6, \
995 #define EFX_POPULATE_DWORD_6(_dword, \
996 _field1, _value1, _field2, _value2, _field3, _value3, \
997 _field4, _value4, _field5, _value5, _field6, _value6) \
998 EFX_POPULATE_DWORD_7(_dword, EFX_DUMMY_FIELD, 0, \
999 _field1, _value1, _field2, _value2, _field3, _value3, \
1000 _field4, _value4, _field5, _value5, _field6, _value6)
1002 #define EFX_POPULATE_DWORD_5(_dword, \
1003 _field1, _value1, _field2, _value2, _field3, _value3, \
1004 _field4, _value4, _field5, _value5) \
1005 EFX_POPULATE_DWORD_6(_dword, EFX_DUMMY_FIELD, 0, \
1006 _field1, _value1, _field2, _value2, _field3, _value3, \
1007 _field4, _value4, _field5, _value5)
1009 #define EFX_POPULATE_DWORD_4(_dword, \
1010 _field1, _value1, _field2, _value2, _field3, _value3, \
1012 EFX_POPULATE_DWORD_5(_dword, EFX_DUMMY_FIELD, 0, \
1013 _field1, _value1, _field2, _value2, _field3, _value3, \
1016 #define EFX_POPULATE_DWORD_3(_dword, \
1017 _field1, _value1, _field2, _value2, _field3, _value3) \
1018 EFX_POPULATE_DWORD_4(_dword, EFX_DUMMY_FIELD, 0, \
1019 _field1, _value1, _field2, _value2, _field3, _value3)
1021 #define EFX_POPULATE_DWORD_2(_dword, \
1022 _field1, _value1, _field2, _value2) \
1023 EFX_POPULATE_DWORD_3(_dword, EFX_DUMMY_FIELD, 0, \
1024 _field1, _value1, _field2, _value2)
1026 #define EFX_POPULATE_DWORD_1(_dword, \
1028 EFX_POPULATE_DWORD_2(_dword, EFX_DUMMY_FIELD, 0, \
1031 #define EFX_ZERO_DWORD(_dword) \
1032 EFX_POPULATE_DWORD_1(_dword, EFX_DUMMY_FIELD, 0)
1034 #define EFX_SET_DWORD(_dword) \
1035 EFX_POPULATE_DWORD_1(_dword, \
1036 EFX_DWORD_0, 0xffffffff)
1038 /* Populate a word field with various numbers of arguments */
1039 #define EFX_POPULATE_WORD_10 EFX_POPULATE_WORD
1041 #define EFX_POPULATE_WORD_9(_word, \
1042 _field1, _value1, _field2, _value2, _field3, _value3, \
1043 _field4, _value4, _field5, _value5, _field6, _value6, \
1044 _field7, _value7, _field8, _value8, _field9, _value9) \
1045 EFX_POPULATE_WORD_10(_word, EFX_DUMMY_FIELD, 0, \
1046 _field1, _value1, _field2, _value2, _field3, _value3, \
1047 _field4, _value4, _field5, _value5, _field6, _value6, \
1048 _field7, _value7, _field8, _value8, _field9, _value9)
1050 #define EFX_POPULATE_WORD_8(_word, \
1051 _field1, _value1, _field2, _value2, _field3, _value3, \
1052 _field4, _value4, _field5, _value5, _field6, _value6, \
1053 _field7, _value7, _field8, _value8) \
1054 EFX_POPULATE_WORD_9(_word, EFX_DUMMY_FIELD, 0, \
1055 _field1, _value1, _field2, _value2, _field3, _value3, \
1056 _field4, _value4, _field5, _value5, _field6, _value6, \
1057 _field7, _value7, _field8, _value8)
1059 #define EFX_POPULATE_WORD_7(_word, \
1060 _field1, _value1, _field2, _value2, _field3, _value3, \
1061 _field4, _value4, _field5, _value5, _field6, _value6, \
1063 EFX_POPULATE_WORD_8(_word, EFX_DUMMY_FIELD, 0, \
1064 _field1, _value1, _field2, _value2, _field3, _value3, \
1065 _field4, _value4, _field5, _value5, _field6, _value6, \
1068 #define EFX_POPULATE_WORD_6(_word, \
1069 _field1, _value1, _field2, _value2, _field3, _value3, \
1070 _field4, _value4, _field5, _value5, _field6, _value6) \
1071 EFX_POPULATE_WORD_7(_word, EFX_DUMMY_FIELD, 0, \
1072 _field1, _value1, _field2, _value2, _field3, _value3, \
1073 _field4, _value4, _field5, _value5, _field6, _value6)
1075 #define EFX_POPULATE_WORD_5(_word, \
1076 _field1, _value1, _field2, _value2, _field3, _value3, \
1077 _field4, _value4, _field5, _value5) \
1078 EFX_POPULATE_WORD_6(_word, EFX_DUMMY_FIELD, 0, \
1079 _field1, _value1, _field2, _value2, _field3, _value3, \
1080 _field4, _value4, _field5, _value5)
1082 #define EFX_POPULATE_WORD_4(_word, \
1083 _field1, _value1, _field2, _value2, _field3, _value3, \
1085 EFX_POPULATE_WORD_5(_word, EFX_DUMMY_FIELD, 0, \
1086 _field1, _value1, _field2, _value2, _field3, _value3, \
1089 #define EFX_POPULATE_WORD_3(_word, \
1090 _field1, _value1, _field2, _value2, _field3, _value3) \
1091 EFX_POPULATE_WORD_4(_word, EFX_DUMMY_FIELD, 0, \
1092 _field1, _value1, _field2, _value2, _field3, _value3)
1094 #define EFX_POPULATE_WORD_2(_word, \
1095 _field1, _value1, _field2, _value2) \
1096 EFX_POPULATE_WORD_3(_word, EFX_DUMMY_FIELD, 0, \
1097 _field1, _value1, _field2, _value2)
1099 #define EFX_POPULATE_WORD_1(_word, \
1101 EFX_POPULATE_WORD_2(_word, EFX_DUMMY_FIELD, 0, \
1104 #define EFX_ZERO_WORD(_word) \
1105 EFX_POPULATE_WORD_1(_word, EFX_DUMMY_FIELD, 0)
1107 #define EFX_SET_WORD(_word) \
1108 EFX_POPULATE_WORD_1(_word, \
1111 /* Populate a byte field with various numbers of arguments */
1112 #define EFX_POPULATE_BYTE_10 EFX_POPULATE_BYTE
1114 #define EFX_POPULATE_BYTE_9(_byte, \
1115 _field1, _value1, _field2, _value2, _field3, _value3, \
1116 _field4, _value4, _field5, _value5, _field6, _value6, \
1117 _field7, _value7, _field8, _value8, _field9, _value9) \
1118 EFX_POPULATE_BYTE_10(_byte, EFX_DUMMY_FIELD, 0, \
1119 _field1, _value1, _field2, _value2, _field3, _value3, \
1120 _field4, _value4, _field5, _value5, _field6, _value6, \
1121 _field7, _value7, _field8, _value8, _field9, _value9)
1123 #define EFX_POPULATE_BYTE_8(_byte, \
1124 _field1, _value1, _field2, _value2, _field3, _value3, \
1125 _field4, _value4, _field5, _value5, _field6, _value6, \
1126 _field7, _value7, _field8, _value8) \
1127 EFX_POPULATE_BYTE_9(_byte, EFX_DUMMY_FIELD, 0, \
1128 _field1, _value1, _field2, _value2, _field3, _value3, \
1129 _field4, _value4, _field5, _value5, _field6, _value6, \
1130 _field7, _value7, _field8, _value8)
1132 #define EFX_POPULATE_BYTE_7(_byte, \
1133 _field1, _value1, _field2, _value2, _field3, _value3, \
1134 _field4, _value4, _field5, _value5, _field6, _value6, \
1136 EFX_POPULATE_BYTE_8(_byte, EFX_DUMMY_FIELD, 0, \
1137 _field1, _value1, _field2, _value2, _field3, _value3, \
1138 _field4, _value4, _field5, _value5, _field6, _value6, \
1141 #define EFX_POPULATE_BYTE_6(_byte, \
1142 _field1, _value1, _field2, _value2, _field3, _value3, \
1143 _field4, _value4, _field5, _value5, _field6, _value6) \
1144 EFX_POPULATE_BYTE_7(_byte, EFX_DUMMY_FIELD, 0, \
1145 _field1, _value1, _field2, _value2, _field3, _value3, \
1146 _field4, _value4, _field5, _value5, _field6, _value6)
1148 #define EFX_POPULATE_BYTE_5(_byte, \
1149 _field1, _value1, _field2, _value2, _field3, _value3, \
1150 _field4, _value4, _field5, _value5) \
1151 EFX_POPULATE_BYTE_6(_byte, EFX_DUMMY_FIELD, 0, \
1152 _field1, _value1, _field2, _value2, _field3, _value3, \
1153 _field4, _value4, _field5, _value5)
1155 #define EFX_POPULATE_BYTE_4(_byte, \
1156 _field1, _value1, _field2, _value2, _field3, _value3, \
1158 EFX_POPULATE_BYTE_5(_byte, EFX_DUMMY_FIELD, 0, \
1159 _field1, _value1, _field2, _value2, _field3, _value3, \
1162 #define EFX_POPULATE_BYTE_3(_byte, \
1163 _field1, _value1, _field2, _value2, _field3, _value3) \
1164 EFX_POPULATE_BYTE_4(_byte, EFX_DUMMY_FIELD, 0, \
1165 _field1, _value1, _field2, _value2, _field3, _value3)
1167 #define EFX_POPULATE_BYTE_2(_byte, \
1168 _field1, _value1, _field2, _value2) \
1169 EFX_POPULATE_BYTE_3(_byte, EFX_DUMMY_FIELD, 0, \
1170 _field1, _value1, _field2, _value2)
1172 #define EFX_POPULATE_BYTE_1(_byte, \
1174 EFX_POPULATE_BYTE_2(_byte, EFX_DUMMY_FIELD, 0, \
1177 #define EFX_ZERO_BYTE(_byte) \
1178 EFX_POPULATE_BYTE_1(_byte, EFX_DUMMY_FIELD, 0)
1180 #define EFX_SET_BYTE(_byte) \
1181 EFX_POPULATE_BYTE_1(_byte, \
1185 * Modify a named field within an already-populated structure. Used
1186 * for read-modify-write operations.
1189 #define EFX_INSERT_FIELD64(_min, _max, _field, _value) \
1190 __CPU_TO_LE_64(EFX_INSERT_FIELD_NATIVE64(_min, _max, _field, _value))
1192 #define EFX_INSERT_FIELD32(_min, _max, _field, _value) \
1193 __CPU_TO_LE_32(EFX_INSERT_FIELD_NATIVE32(_min, _max, _field, _value))
1195 #define EFX_INSERT_FIELD16(_min, _max, _field, _value) \
1196 __CPU_TO_LE_16(EFX_INSERT_FIELD_NATIVE16(_min, _max, _field, _value))
1198 #define EFX_INSERT_FIELD8(_min, _max, _field, _value) \
1199 __NATIVE_8(EFX_INSERT_FIELD_NATIVE8(_min, _max, _field, _value))
1201 #define EFX_INPLACE_MASK64(_min, _max, _field) \
1202 EFX_INSERT_FIELD64(_min, _max, _field, EFX_MASK64(_field))
1204 #define EFX_INPLACE_MASK32(_min, _max, _field) \
1205 EFX_INSERT_FIELD32(_min, _max, _field, EFX_MASK32(_field))
1207 #define EFX_INPLACE_MASK16(_min, _max, _field) \
1208 EFX_INSERT_FIELD16(_min, _max, _field, EFX_MASK16(_field))
1210 #define EFX_INPLACE_MASK8(_min, _max, _field) \
1211 EFX_INSERT_FIELD8(_min, _max, _field, EFX_MASK8(_field))
1213 #define EFX_SET_OWORD_FIELD64(_oword, _field, _value) \
1215 _NOTE(CONSTANTCONDITION) \
1216 (_oword).eo_u64[0] = (((_oword).eo_u64[0] & \
1217 ~EFX_INPLACE_MASK64(0, 63, _field)) | \
1218 EFX_INSERT_FIELD64(0, 63, _field, _value)); \
1219 _NOTE(CONSTANTCONDITION) \
1220 (_oword).eo_u64[1] = (((_oword).eo_u64[1] & \
1221 ~EFX_INPLACE_MASK64(64, 127, _field)) | \
1222 EFX_INSERT_FIELD64(64, 127, _field, _value)); \
1223 _NOTE(CONSTANTCONDITION) \
1226 #define EFX_SET_OWORD_FIELD32(_oword, _field, _value) \
1228 _NOTE(CONSTANTCONDITION) \
1229 (_oword).eo_u32[0] = (((_oword).eo_u32[0] & \
1230 ~EFX_INPLACE_MASK32(0, 31, _field)) | \
1231 EFX_INSERT_FIELD32(0, 31, _field, _value)); \
1232 _NOTE(CONSTANTCONDITION) \
1233 (_oword).eo_u32[1] = (((_oword).eo_u32[1] & \
1234 ~EFX_INPLACE_MASK32(32, 63, _field)) | \
1235 EFX_INSERT_FIELD32(32, 63, _field, _value)); \
1236 _NOTE(CONSTANTCONDITION) \
1237 (_oword).eo_u32[2] = (((_oword).eo_u32[2] & \
1238 ~EFX_INPLACE_MASK32(64, 95, _field)) | \
1239 EFX_INSERT_FIELD32(64, 95, _field, _value)); \
1240 _NOTE(CONSTANTCONDITION) \
1241 (_oword).eo_u32[3] = (((_oword).eo_u32[3] & \
1242 ~EFX_INPLACE_MASK32(96, 127, _field)) | \
1243 EFX_INSERT_FIELD32(96, 127, _field, _value)); \
1244 _NOTE(CONSTANTCONDITION) \
1247 #define EFX_SET_QWORD_FIELD64(_qword, _field, _value) \
1249 _NOTE(CONSTANTCONDITION) \
1250 (_qword).eq_u64[0] = (((_qword).eq_u64[0] & \
1251 ~EFX_INPLACE_MASK64(0, 63, _field)) | \
1252 EFX_INSERT_FIELD64(0, 63, _field, _value)); \
1253 _NOTE(CONSTANTCONDITION) \
1256 #define EFX_SET_QWORD_FIELD32(_qword, _field, _value) \
1258 _NOTE(CONSTANTCONDITION) \
1259 (_qword).eq_u32[0] = (((_qword).eq_u32[0] & \
1260 ~EFX_INPLACE_MASK32(0, 31, _field)) | \
1261 EFX_INSERT_FIELD32(0, 31, _field, _value)); \
1262 _NOTE(CONSTANTCONDITION) \
1263 (_qword).eq_u32[1] = (((_qword).eq_u32[1] & \
1264 ~EFX_INPLACE_MASK32(32, 63, _field)) | \
1265 EFX_INSERT_FIELD32(32, 63, _field, _value)); \
1266 _NOTE(CONSTANTCONDITION) \
1269 #define EFX_SET_DWORD_FIELD(_dword, _field, _value) \
1271 _NOTE(CONSTANTCONDITION) \
1272 (_dword).ed_u32[0] = (((_dword).ed_u32[0] & \
1273 ~EFX_INPLACE_MASK32(0, 31, _field)) | \
1274 EFX_INSERT_FIELD32(0, 31, _field, _value)); \
1275 _NOTE(CONSTANTCONDITION) \
1278 #define EFX_SET_WORD_FIELD(_word, _field, _value) \
1280 _NOTE(CONSTANTCONDITION) \
1281 (_word).ew_u16[0] = (((_word).ew_u16[0] & \
1282 ~EFX_INPLACE_MASK16(0, 15, _field)) | \
1283 EFX_INSERT_FIELD16(0, 15, _field, _value)); \
1284 _NOTE(CONSTANTCONDITION) \
1287 #define EFX_SET_BYTE_FIELD(_byte, _field, _value) \
1289 _NOTE(CONSTANTCONDITION) \
1290 (_byte).eb_u8[0] = (((_byte).eb_u8[0] & \
1291 ~EFX_INPLACE_MASK8(0, 7, _field)) | \
1292 EFX_INSERT_FIELD8(0, 7, _field, _value)); \
1293 _NOTE(CONSTANTCONDITION) \
1297 * Set or clear a numbered bit within an octword.
1300 #define EFX_SHIFT64(_bit, _base) \
1301 (((_bit) >= (_base) && (_bit) < (_base) + 64) ? \
1302 ((uint64_t)1 << EFX_SSUB((_bit), (_base))) : \
1305 #define EFX_SHIFT32(_bit, _base) \
1306 (((_bit) >= (_base) && (_bit) < (_base) + 32) ? \
1307 ((uint32_t)1 << EFX_SSUB((_bit),(_base))) : \
1310 #define EFX_SHIFT16(_bit, _base) \
1311 (((_bit) >= (_base) && (_bit) < (_base) + 16) ? \
1312 (uint16_t)(1 << EFX_SSUB((_bit), (_base))) : \
1315 #define EFX_SHIFT8(_bit, _base) \
1316 (((_bit) >= (_base) && (_bit) < (_base) + 8) ? \
1317 (uint8_t)(1 << EFX_SSUB((_bit), (_base))) : \
1320 #define EFX_SET_OWORD_BIT64(_oword, _bit) \
1322 _NOTE(CONSTANTCONDITION) \
1323 (_oword).eo_u64[0] |= \
1324 __CPU_TO_LE_64(EFX_SHIFT64(_bit, FIX_LINT(0))); \
1325 (_oword).eo_u64[1] |= \
1326 __CPU_TO_LE_64(EFX_SHIFT64(_bit, FIX_LINT(64))); \
1327 _NOTE(CONSTANTCONDITION) \
1330 #define EFX_SET_OWORD_BIT32(_oword, _bit) \
1332 _NOTE(CONSTANTCONDITION) \
1333 (_oword).eo_u32[0] |= \
1334 __CPU_TO_LE_32(EFX_SHIFT32(_bit, FIX_LINT(0))); \
1335 (_oword).eo_u32[1] |= \
1336 __CPU_TO_LE_32(EFX_SHIFT32(_bit, FIX_LINT(32))); \
1337 (_oword).eo_u32[2] |= \
1338 __CPU_TO_LE_32(EFX_SHIFT32(_bit, FIX_LINT(64))); \
1339 (_oword).eo_u32[3] |= \
1340 __CPU_TO_LE_32(EFX_SHIFT32(_bit, FIX_LINT(96))); \
1341 _NOTE(CONSTANTCONDITION) \
1344 #define EFX_CLEAR_OWORD_BIT64(_oword, _bit) \
1346 _NOTE(CONSTANTCONDITION) \
1347 (_oword).eo_u64[0] &= \
1348 __CPU_TO_LE_64(~EFX_SHIFT64(_bit, FIX_LINT(0))); \
1349 (_oword).eo_u64[1] &= \
1350 __CPU_TO_LE_64(~EFX_SHIFT64(_bit, FIX_LINT(64))); \
1351 _NOTE(CONSTANTCONDITION) \
1354 #define EFX_CLEAR_OWORD_BIT32(_oword, _bit) \
1356 _NOTE(CONSTANTCONDITION) \
1357 (_oword).eo_u32[0] &= \
1358 __CPU_TO_LE_32(~EFX_SHIFT32(_bit, FIX_LINT(0))); \
1359 (_oword).eo_u32[1] &= \
1360 __CPU_TO_LE_32(~EFX_SHIFT32(_bit, FIX_LINT(32))); \
1361 (_oword).eo_u32[2] &= \
1362 __CPU_TO_LE_32(~EFX_SHIFT32(_bit, FIX_LINT(64))); \
1363 (_oword).eo_u32[3] &= \
1364 __CPU_TO_LE_32(~EFX_SHIFT32(_bit, FIX_LINT(96))); \
1365 _NOTE(CONSTANTCONDITION) \
1368 #define EFX_TEST_OWORD_BIT64(_oword, _bit) \
1369 (((_oword).eo_u64[0] & \
1370 __CPU_TO_LE_64(EFX_SHIFT64(_bit, FIX_LINT(0)))) || \
1371 ((_oword).eo_u64[1] & \
1372 __CPU_TO_LE_64(EFX_SHIFT64(_bit, FIX_LINT(64)))))
1374 #define EFX_TEST_OWORD_BIT32(_oword, _bit) \
1375 (((_oword).eo_u32[0] & \
1376 __CPU_TO_LE_32(EFX_SHIFT32(_bit, FIX_LINT(0)))) || \
1377 ((_oword).eo_u32[1] & \
1378 __CPU_TO_LE_32(EFX_SHIFT32(_bit, FIX_LINT(32)))) || \
1379 ((_oword).eo_u32[2] & \
1380 __CPU_TO_LE_32(EFX_SHIFT32(_bit, FIX_LINT(64)))) || \
1381 ((_oword).eo_u32[3] & \
1382 __CPU_TO_LE_32(EFX_SHIFT32(_bit, FIX_LINT(96)))))
1385 #define EFX_SET_QWORD_BIT64(_qword, _bit) \
1387 _NOTE(CONSTANTCONDITION) \
1388 (_qword).eq_u64[0] |= \
1389 __CPU_TO_LE_64(EFX_SHIFT64(_bit, FIX_LINT(0))); \
1390 _NOTE(CONSTANTCONDITION) \
1393 #define EFX_SET_QWORD_BIT32(_qword, _bit) \
1395 _NOTE(CONSTANTCONDITION) \
1396 (_qword).eq_u32[0] |= \
1397 __CPU_TO_LE_32(EFX_SHIFT32(_bit, FIX_LINT(0))); \
1398 (_qword).eq_u32[1] |= \
1399 __CPU_TO_LE_32(EFX_SHIFT32(_bit, FIX_LINT(32))); \
1400 _NOTE(CONSTANTCONDITION) \
1403 #define EFX_CLEAR_QWORD_BIT64(_qword, _bit) \
1405 _NOTE(CONSTANTCONDITION) \
1406 (_qword).eq_u64[0] &= \
1407 __CPU_TO_LE_64(~EFX_SHIFT64(_bit, FIX_LINT(0))); \
1408 _NOTE(CONSTANTCONDITION) \
1411 #define EFX_CLEAR_QWORD_BIT32(_qword, _bit) \
1413 _NOTE(CONSTANTCONDITION) \
1414 (_qword).eq_u32[0] &= \
1415 __CPU_TO_LE_32(~EFX_SHIFT32(_bit, FIX_LINT(0))); \
1416 (_qword).eq_u32[1] &= \
1417 __CPU_TO_LE_32(~EFX_SHIFT32(_bit, FIX_LINT(32))); \
1418 _NOTE(CONSTANTCONDITION) \
1421 #define EFX_TEST_QWORD_BIT64(_qword, _bit) \
1422 (((_qword).eq_u64[0] & \
1423 __CPU_TO_LE_64(EFX_SHIFT64(_bit, FIX_LINT(0)))) != 0)
1425 #define EFX_TEST_QWORD_BIT32(_qword, _bit) \
1426 (((_qword).eq_u32[0] & \
1427 __CPU_TO_LE_32(EFX_SHIFT32(_bit, FIX_LINT(0)))) || \
1428 ((_qword).eq_u32[1] & \
1429 __CPU_TO_LE_32(EFX_SHIFT32(_bit, FIX_LINT(32)))))
1432 #define EFX_SET_DWORD_BIT(_dword, _bit) \
1434 (_dword).ed_u32[0] |= \
1435 __CPU_TO_LE_32(EFX_SHIFT32(_bit, FIX_LINT(0))); \
1436 _NOTE(CONSTANTCONDITION) \
1439 #define EFX_CLEAR_DWORD_BIT(_dword, _bit) \
1441 (_dword).ed_u32[0] &= \
1442 __CPU_TO_LE_32(~EFX_SHIFT32(_bit, FIX_LINT(0))); \
1443 _NOTE(CONSTANTCONDITION) \
1446 #define EFX_TEST_DWORD_BIT(_dword, _bit) \
1447 (((_dword).ed_u32[0] & \
1448 __CPU_TO_LE_32(EFX_SHIFT32(_bit, FIX_LINT(0)))) != 0)
1451 #define EFX_SET_WORD_BIT(_word, _bit) \
1453 (_word).ew_u16[0] |= \
1454 __CPU_TO_LE_16(EFX_SHIFT16(_bit, FIX_LINT(0))); \
1455 _NOTE(CONSTANTCONDITION) \
1458 #define EFX_CLEAR_WORD_BIT(_word, _bit) \
1460 (_word).ew_u32[0] &= \
1461 __CPU_TO_LE_16(~EFX_SHIFT16(_bit, FIX_LINT(0))); \
1462 _NOTE(CONSTANTCONDITION) \
1465 #define EFX_TEST_WORD_BIT(_word, _bit) \
1466 (((_word).ew_u16[0] & \
1467 __CPU_TO_LE_16(EFX_SHIFT16(_bit, FIX_LINT(0)))) != 0)
1470 #define EFX_SET_BYTE_BIT(_byte, _bit) \
1472 (_byte).eb_u8[0] |= \
1473 __NATIVE_8(EFX_SHIFT8(_bit, FIX_LINT(0))); \
1474 _NOTE(CONSTANTCONDITION) \
1477 #define EFX_CLEAR_BYTE_BIT(_byte, _bit) \
1479 (_byte).eb_u8[0] &= \
1480 __NATIVE_8(~EFX_SHIFT8(_bit, FIX_LINT(0))); \
1481 _NOTE(CONSTANTCONDITION) \
1484 #define EFX_TEST_BYTE_BIT(_byte, _bit) \
1485 (((_byte).eb_u8[0] & \
1486 __NATIVE_8(EFX_SHIFT8(_bit, FIX_LINT(0)))) != 0)
1489 #define EFX_OR_OWORD64(_oword1, _oword2) \
1491 (_oword1).eo_u64[0] |= (_oword2).eo_u64[0]; \
1492 (_oword1).eo_u64[1] |= (_oword2).eo_u64[1]; \
1493 _NOTE(CONSTANTCONDITION) \
1496 #define EFX_OR_OWORD32(_oword1, _oword2) \
1498 (_oword1).eo_u32[0] |= (_oword2).eo_u32[0]; \
1499 (_oword1).eo_u32[1] |= (_oword2).eo_u32[1]; \
1500 (_oword1).eo_u32[2] |= (_oword2).eo_u32[2]; \
1501 (_oword1).eo_u32[3] |= (_oword2).eo_u32[3]; \
1502 _NOTE(CONSTANTCONDITION) \
1505 #define EFX_AND_OWORD64(_oword1, _oword2) \
1507 (_oword1).eo_u64[0] &= (_oword2).eo_u64[0]; \
1508 (_oword1).eo_u64[1] &= (_oword2).eo_u64[1]; \
1509 _NOTE(CONSTANTCONDITION) \
1512 #define EFX_AND_OWORD32(_oword1, _oword2) \
1514 (_oword1).eo_u32[0] &= (_oword2).eo_u32[0]; \
1515 (_oword1).eo_u32[1] &= (_oword2).eo_u32[1]; \
1516 (_oword1).eo_u32[2] &= (_oword2).eo_u32[2]; \
1517 (_oword1).eo_u32[3] &= (_oword2).eo_u32[3]; \
1518 _NOTE(CONSTANTCONDITION) \
1521 #define EFX_OR_QWORD64(_qword1, _qword2) \
1523 (_qword1).eq_u64[0] |= (_qword2).eq_u64[0]; \
1524 _NOTE(CONSTANTCONDITION) \
1527 #define EFX_OR_QWORD32(_qword1, _qword2) \
1529 (_qword1).eq_u32[0] |= (_qword2).eq_u32[0]; \
1530 (_qword1).eq_u32[1] |= (_qword2).eq_u32[1]; \
1531 _NOTE(CONSTANTCONDITION) \
1534 #define EFX_AND_QWORD64(_qword1, _qword2) \
1536 (_qword1).eq_u64[0] &= (_qword2).eq_u64[0]; \
1537 _NOTE(CONSTANTCONDITION) \
1540 #define EFX_AND_QWORD32(_qword1, _qword2) \
1542 (_qword1).eq_u32[0] &= (_qword2).eq_u32[0]; \
1543 (_qword1).eq_u32[1] &= (_qword2).eq_u32[1]; \
1544 _NOTE(CONSTANTCONDITION) \
1547 #define EFX_OR_DWORD(_dword1, _dword2) \
1549 (_dword1).ed_u32[0] |= (_dword2).ed_u32[0]; \
1550 _NOTE(CONSTANTCONDITION) \
1553 #define EFX_AND_DWORD(_dword1, _dword2) \
1555 (_dword1).ed_u32[0] &= (_dword2).ed_u32[0]; \
1556 _NOTE(CONSTANTCONDITION) \
1559 #define EFX_OR_WORD(_word1, _word2) \
1561 (_word1).ew_u16[0] |= (_word2).ew_u16[0]; \
1562 _NOTE(CONSTANTCONDITION) \
1565 #define EFX_AND_WORD(_word1, _word2) \
1567 (_word1).ew_u16[0] &= (_word2).ew_u16[0]; \
1568 _NOTE(CONSTANTCONDITION) \
1571 #define EFX_OR_BYTE(_byte1, _byte2) \
1573 (_byte1).eb_u8[0] |= (_byte2).eb_u8[0]; \
1574 _NOTE(CONSTANTCONDITION) \
1577 #define EFX_AND_BYTE(_byte1, _byte2) \
1579 (_byte1).eb_u8[0] &= (_byte2).eb_u8[0]; \
1580 _NOTE(CONSTANTCONDITION) \
1583 #if EFSYS_USE_UINT64
1584 #define EFX_OWORD_FIELD EFX_OWORD_FIELD64
1585 #define EFX_QWORD_FIELD EFX_QWORD_FIELD64
1586 #define EFX_OWORD_IS_EQUAL EFX_OWORD_IS_EQUAL64
1587 #define EFX_QWORD_IS_EQUAL EFX_QWORD_IS_EQUAL64
1588 #define EFX_OWORD_IS_ZERO EFX_OWORD_IS_ZERO64
1589 #define EFX_QWORD_IS_ZERO EFX_QWORD_IS_ZERO64
1590 #define EFX_OWORD_IS_SET EFX_OWORD_IS_SET64
1591 #define EFX_QWORD_IS_SET EFX_QWORD_IS_SET64
1592 #define EFX_POPULATE_OWORD EFX_POPULATE_OWORD64
1593 #define EFX_POPULATE_QWORD EFX_POPULATE_QWORD64
1594 #define EFX_SET_OWORD_FIELD EFX_SET_OWORD_FIELD64
1595 #define EFX_SET_QWORD_FIELD EFX_SET_QWORD_FIELD64
1596 #define EFX_SET_OWORD_BIT EFX_SET_OWORD_BIT64
1597 #define EFX_CLEAR_OWORD_BIT EFX_CLEAR_OWORD_BIT64
1598 #define EFX_TEST_OWORD_BIT EFX_TEST_OWORD_BIT64
1599 #define EFX_SET_QWORD_BIT EFX_SET_QWORD_BIT64
1600 #define EFX_CLEAR_QWORD_BIT EFX_CLEAR_QWORD_BIT64
1601 #define EFX_TEST_QWORD_BIT EFX_TEST_QWORD_BIT64
1602 #define EFX_OR_OWORD EFX_OR_OWORD64
1603 #define EFX_AND_OWORD EFX_AND_OWORD64
1604 #define EFX_OR_QWORD EFX_OR_QWORD64
1605 #define EFX_AND_QWORD EFX_AND_QWORD64
1607 #define EFX_OWORD_FIELD EFX_OWORD_FIELD32
1608 #define EFX_QWORD_FIELD EFX_QWORD_FIELD32
1609 #define EFX_OWORD_IS_EQUAL EFX_OWORD_IS_EQUAL32
1610 #define EFX_QWORD_IS_EQUAL EFX_QWORD_IS_EQUAL32
1611 #define EFX_OWORD_IS_ZERO EFX_OWORD_IS_ZERO32
1612 #define EFX_QWORD_IS_ZERO EFX_QWORD_IS_ZERO32
1613 #define EFX_OWORD_IS_SET EFX_OWORD_IS_SET32
1614 #define EFX_QWORD_IS_SET EFX_QWORD_IS_SET32
1615 #define EFX_POPULATE_OWORD EFX_POPULATE_OWORD32
1616 #define EFX_POPULATE_QWORD EFX_POPULATE_QWORD32
1617 #define EFX_SET_OWORD_FIELD EFX_SET_OWORD_FIELD32
1618 #define EFX_SET_QWORD_FIELD EFX_SET_QWORD_FIELD32
1619 #define EFX_SET_OWORD_BIT EFX_SET_OWORD_BIT32
1620 #define EFX_CLEAR_OWORD_BIT EFX_CLEAR_OWORD_BIT32
1621 #define EFX_TEST_OWORD_BIT EFX_TEST_OWORD_BIT32
1622 #define EFX_SET_QWORD_BIT EFX_SET_QWORD_BIT32
1623 #define EFX_CLEAR_QWORD_BIT EFX_CLEAR_QWORD_BIT32
1624 #define EFX_TEST_QWORD_BIT EFX_TEST_QWORD_BIT32
1625 #define EFX_OR_OWORD EFX_OR_OWORD32
1626 #define EFX_AND_OWORD EFX_AND_OWORD32
1627 #define EFX_OR_QWORD EFX_OR_QWORD32
1628 #define EFX_AND_QWORD EFX_AND_QWORD32
1636 #endif /* _SYS_EFX_TYPES_H */