2 * Copyright 2007-2009 Solarflare Communications Inc. All rights reserved.
4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions
7 * 1. Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer.
9 * 2. Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the
11 * documentation and/or other materials provided with the distribution.
13 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS AND
14 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
15 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
16 * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
17 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
18 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
19 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
20 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
21 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
22 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
25 * Ackowledgement to Fen Systems Ltd.
30 #ifndef _SYS_EFX_TYPES_H
31 #define _SYS_EFX_TYPES_H
42 * Solarflare NICs make extensive use of bitfields up to 128 bits
43 * wide. Since there is no native 128-bit datatype on most systems,
44 * and since 64-bit datatypes are inefficient on 32-bit systems and
45 * vice versa, we wrap accesses in a way that uses the most efficient
48 * The NICs are PCI devices and therefore little-endian. Since most
49 * of the quantities that we deal with are DMAed to/from host memory,
50 * we define our datatypes (efx_oword_t, efx_qword_t and efx_dword_t)
51 * to be little-endian.
53 * In the less common case of using PIO for individual register
54 * writes, we construct the little-endian datatype in host memory and
55 * then use non-swapping register access primitives, rather than
56 * constructing a native-endian datatype and relying on implicit
57 * byte-swapping. (We use a similar strategy for register reads.)
61 * NOTE: Field definitions here and elsewhere are done in terms of a lowest
62 * bit number (LBN) and a width.
65 #define EFX_DUMMY_FIELD_LBN 0
66 #define EFX_DUMMY_FIELD_WIDTH 0
68 #define EFX_BYTE_0_LBN 0
69 #define EFX_BYTE_0_WIDTH 8
71 #define EFX_BYTE_1_LBN 8
72 #define EFX_BYTE_1_WIDTH 8
74 #define EFX_BYTE_2_LBN 16
75 #define EFX_BYTE_2_WIDTH 8
77 #define EFX_BYTE_3_LBN 24
78 #define EFX_BYTE_3_WIDTH 8
80 #define EFX_BYTE_4_LBN 32
81 #define EFX_BYTE_4_WIDTH 8
83 #define EFX_BYTE_5_LBN 40
84 #define EFX_BYTE_5_WIDTH 8
86 #define EFX_BYTE_6_LBN 48
87 #define EFX_BYTE_6_WIDTH 8
89 #define EFX_BYTE_7_LBN 56
90 #define EFX_BYTE_7_WIDTH 8
92 #define EFX_WORD_0_LBN 0
93 #define EFX_WORD_0_WIDTH 16
95 #define EFX_WORD_1_LBN 16
96 #define EFX_WORD_1_WIDTH 16
98 #define EFX_WORD_2_LBN 32
99 #define EFX_WORD_2_WIDTH 16
101 #define EFX_WORD_3_LBN 48
102 #define EFX_WORD_3_WIDTH 16
104 #define EFX_DWORD_0_LBN 0
105 #define EFX_DWORD_0_WIDTH 32
107 #define EFX_DWORD_1_LBN 32
108 #define EFX_DWORD_1_WIDTH 32
110 #define EFX_DWORD_2_LBN 64
111 #define EFX_DWORD_2_WIDTH 32
113 #define EFX_DWORD_3_LBN 96
114 #define EFX_DWORD_3_WIDTH 32
116 #define EFX_QWORD_0_LBN 0
117 #define EFX_QWORD_0_WIDTH 64
119 #define EFX_QWORD_1_LBN 64
120 #define EFX_QWORD_1_WIDTH 64
122 /* Specified attribute (i.e. LBN ow WIDTH) of the specified field */
123 #define EFX_VAL(_field, _attribute) \
124 _field ## _ ## _attribute
126 /* Lowest bit number of the specified field */
127 #define EFX_LOW_BIT(_field) \
130 /* Width of the specified field */
131 #define EFX_WIDTH(_field) \
132 EFX_VAL(_field, WIDTH)
134 /* Highest bit number of the specified field */
135 #define EFX_HIGH_BIT(_field) \
136 (EFX_LOW_BIT(_field) + EFX_WIDTH(_field) - 1)
139 * 64-bit mask equal in width to the specified field.
141 * For example, a field with width 5 would have a mask of 0x000000000000001f.
143 #define EFX_MASK64(_field) \
144 ((EFX_WIDTH(_field) == 64) ? ~((uint64_t)0) : \
145 (((((uint64_t)1) << EFX_WIDTH(_field))) - 1))
147 * 32-bit mask equal in width to the specified field.
149 * For example, a field with width 5 would have a mask of 0x0000001f.
151 #define EFX_MASK32(_field) \
152 ((EFX_WIDTH(_field) == 32) ? ~((uint32_t)0) : \
153 (((((uint32_t)1) << EFX_WIDTH(_field))) - 1))
156 * 16-bit mask equal in width to the specified field.
158 * For example, a field with width 5 would have a mask of 0x001f.
160 #define EFX_MASK16(_field) \
161 ((EFX_WIDTH(_field) == 16) ? 0xffffu : \
162 (uint16_t)((1 << EFX_WIDTH(_field)) - 1))
165 * 8-bit mask equal in width to the specified field.
167 * For example, a field with width 5 would have a mask of 0x1f.
169 #define EFX_MASK8(_field) \
170 ((uint8_t)((1 << EFX_WIDTH(_field)) - 1))
175 * A byte (i.e. 8-bit) datatype
177 typedef union efx_byte_u {
182 * A word (i.e. 16-bit) datatype
184 * This datatype is defined to be little-endian.
186 typedef union efx_word_u {
187 efx_byte_t ew_byte[2];
193 * A doubleword (i.e. 32-bit) datatype
195 * This datatype is defined to be little-endian.
197 typedef union efx_dword_u {
198 efx_byte_t ed_byte[4];
199 efx_word_t ed_word[2];
206 * A quadword (i.e. 64-bit) datatype
208 * This datatype is defined to be little-endian.
210 typedef union efx_qword_u {
211 efx_byte_t eq_byte[8];
212 efx_word_t eq_word[4];
213 efx_dword_t eq_dword[2];
223 * An octword (i.e. 128-bit) datatype
225 * This datatype is defined to be little-endian.
227 typedef union efx_oword_u {
228 efx_byte_t eo_byte[16];
229 efx_word_t eo_word[8];
230 efx_dword_t eo_dword[4];
231 efx_qword_t eo_qword[2];
242 #define __SWAP16(_x) \
243 ((((_x) & 0xff) << 8) | \
244 (((_x) >> 8) & 0xff))
246 #define __SWAP32(_x) \
247 ((__SWAP16((_x) & 0xffff) << 16) | \
248 __SWAP16(((_x) >> 16) & 0xffff))
250 #define __SWAP64(_x) \
251 ((__SWAP32((_x) & 0xffffffff) << 32) | \
252 __SWAP32(((_x) >> 32) & 0xffffffff))
254 #define __NOSWAP16(_x) (_x)
255 #define __NOSWAP32(_x) (_x)
256 #define __NOSWAP64(_x) (_x)
258 #if EFSYS_IS_BIG_ENDIAN
260 #define __CPU_TO_LE_16(_x) (uint16_t)__SWAP16(_x)
261 #define __LE_TO_CPU_16(_x) (uint16_t)__SWAP16(_x)
262 #define __CPU_TO_BE_16(_x) (uint16_t)__NOSWAP16(_x)
263 #define __BE_TO_CPU_16(_x) (uint16_t)__NOSWAP16(_x)
265 #define __CPU_TO_LE_32(_x) (uint32_t)__SWAP32(_x)
266 #define __LE_TO_CPU_32(_x) (uint32_t)__SWAP32(_x)
267 #define __CPU_TO_BE_32(_x) (uint32_t)__NOSWAP32(_x)
268 #define __BE_TO_CPU_32(_x) (uint32_t)__NOSWAP32(_x)
270 #define __CPU_TO_LE_64(_x) (uint64_t)__SWAP64(_x)
271 #define __LE_TO_CPU_64(_x) (uint64_t)__SWAP64(_x)
272 #define __CPU_TO_BE_64(_x) (uint64_t)__NOSWAP64(_x)
273 #define __BE_TO_CPU_64(_x) (uint64_t)__NOSWAP64(_x)
275 #elif EFSYS_IS_LITTLE_ENDIAN
277 #define __CPU_TO_LE_16(_x) (uint16_t)__NOSWAP16(_x)
278 #define __LE_TO_CPU_16(_x) (uint16_t)__NOSWAP16(_x)
279 #define __CPU_TO_BE_16(_x) (uint16_t)__SWAP16(_x)
280 #define __BE_TO_CPU_16(_x) (uint16_t)__SWAP16(_x)
282 #define __CPU_TO_LE_32(_x) (uint32_t)__NOSWAP32(_x)
283 #define __LE_TO_CPU_32(_x) (uint32_t)__NOSWAP32(_x)
284 #define __CPU_TO_BE_32(_x) (uint32_t)__SWAP32(_x)
285 #define __BE_TO_CPU_32(_x) (uint32_t)__SWAP32(_x)
287 #define __CPU_TO_LE_64(_x) (uint64_t)__NOSWAP64(_x)
288 #define __LE_TO_CPU_64(_x) (uint64_t)__NOSWAP64(_x)
289 #define __CPU_TO_BE_64(_x) (uint64_t)__SWAP64(_x)
290 #define __BE_TO_CPU_64(_x) (uint64_t)__SWAP64(_x)
294 #error "Neither of EFSYS_IS_{BIG,LITTLE}_ENDIAN is set"
298 #define __NATIVE_8(_x) (uint8_t)(_x)
300 /* Format string for printing an efx_byte_t */
301 #define EFX_BYTE_FMT "0x%02x"
303 /* Format string for printing an efx_word_t */
304 #define EFX_WORD_FMT "0x%04x"
306 /* Format string for printing an efx_dword_t */
307 #define EFX_DWORD_FMT "0x%08x"
309 /* Format string for printing an efx_qword_t */
310 #define EFX_QWORD_FMT "0x%08x:%08x"
312 /* Format string for printing an efx_oword_t */
313 #define EFX_OWORD_FMT "0x%08x:%08x:%08x:%08x"
315 /* Parameters for printing an efx_byte_t */
316 #define EFX_BYTE_VAL(_byte) \
317 ((unsigned int)__NATIVE_8((_byte).eb_u8[0]))
319 /* Parameters for printing an efx_word_t */
320 #define EFX_WORD_VAL(_word) \
321 ((unsigned int)__LE_TO_CPU_16((_word).ew_u16[0]))
323 /* Parameters for printing an efx_dword_t */
324 #define EFX_DWORD_VAL(_dword) \
325 ((unsigned int)__LE_TO_CPU_32((_dword).ed_u32[0]))
327 /* Parameters for printing an efx_qword_t */
328 #define EFX_QWORD_VAL(_qword) \
329 ((unsigned int)__LE_TO_CPU_32((_qword).eq_u32[1])), \
330 ((unsigned int)__LE_TO_CPU_32((_qword).eq_u32[0]))
332 /* Parameters for printing an efx_oword_t */
333 #define EFX_OWORD_VAL(_oword) \
334 ((unsigned int)__LE_TO_CPU_32((_oword).eo_u32[3])), \
335 ((unsigned int)__LE_TO_CPU_32((_oword).eo_u32[2])), \
336 ((unsigned int)__LE_TO_CPU_32((_oword).eo_u32[1])), \
337 ((unsigned int)__LE_TO_CPU_32((_oword).eo_u32[0]))
340 * Stop lint complaining about some shifts.
344 #define FIX_LINT(_x) (_x + fix_lint)
346 #define FIX_LINT(_x) (_x)
350 * Extract bit field portion [low,high) from the native-endian element
351 * which contains bits [min,max).
353 * For example, suppose "element" represents the high 32 bits of a
354 * 64-bit value, and we wish to extract the bits belonging to the bit
355 * field occupying bits 28-45 of this 64-bit value.
357 * Then EFX_EXTRACT(_element, 32, 63, 28, 45) would give
361 * The result will contain the relevant bits filled in in the range
362 * [0,high-low), with garbage in bits [high-low+1,...).
364 #define EFX_EXTRACT_NATIVE(_element, _min, _max, _low, _high) \
365 ((FIX_LINT(_low > _max) || FIX_LINT(_high < _min)) ? \
368 ((_element) >> (_low - _min)) : \
369 ((_element) << (_min - _low))))
372 * Extract bit field portion [low,high) from the 64-bit little-endian
373 * element which contains bits [min,max)
375 #define EFX_EXTRACT64(_element, _min, _max, _low, _high) \
376 EFX_EXTRACT_NATIVE(__LE_TO_CPU_64(_element), _min, _max, _low, _high)
379 * Extract bit field portion [low,high) from the 32-bit little-endian
380 * element which contains bits [min,max)
382 #define EFX_EXTRACT32(_element, _min, _max, _low, _high) \
383 EFX_EXTRACT_NATIVE(__LE_TO_CPU_32(_element), _min, _max, _low, _high)
386 * Extract bit field portion [low,high) from the 16-bit little-endian
387 * element which contains bits [min,max)
389 #define EFX_EXTRACT16(_element, _min, _max, _low, _high) \
390 EFX_EXTRACT_NATIVE(__LE_TO_CPU_16(_element), _min, _max, _low, _high)
393 * Extract bit field portion [low,high) from the 8-bit
394 * element which contains bits [min,max)
396 #define EFX_EXTRACT8(_element, _min, _max, _low, _high) \
397 EFX_EXTRACT_NATIVE(__NATIVE_8(_element), _min, _max, _low, _high)
399 #define EFX_EXTRACT_OWORD64(_oword, _low, _high) \
400 (EFX_EXTRACT64((_oword).eo_u64[0], FIX_LINT(0), FIX_LINT(63), \
402 EFX_EXTRACT64((_oword).eo_u64[1], FIX_LINT(64), FIX_LINT(127), \
405 #define EFX_EXTRACT_OWORD32(_oword, _low, _high) \
406 (EFX_EXTRACT32((_oword).eo_u32[0], FIX_LINT(0), FIX_LINT(31), \
408 EFX_EXTRACT32((_oword).eo_u32[1], FIX_LINT(32), FIX_LINT(63), \
410 EFX_EXTRACT32((_oword).eo_u32[2], FIX_LINT(64), FIX_LINT(95), \
412 EFX_EXTRACT32((_oword).eo_u32[3], FIX_LINT(96), FIX_LINT(127), \
415 #define EFX_EXTRACT_QWORD64(_qword, _low, _high) \
416 (EFX_EXTRACT64((_qword).eq_u64[0], FIX_LINT(0), FIX_LINT(63), \
419 #define EFX_EXTRACT_QWORD32(_qword, _low, _high) \
420 (EFX_EXTRACT32((_qword).eq_u32[0], FIX_LINT(0), FIX_LINT(31), \
422 EFX_EXTRACT32((_qword).eq_u32[1], FIX_LINT(32), FIX_LINT(63), \
425 #define EFX_EXTRACT_DWORD(_dword, _low, _high) \
426 (EFX_EXTRACT32((_dword).ed_u32[0], FIX_LINT(0), FIX_LINT(31), \
429 #define EFX_EXTRACT_WORD(_word, _low, _high) \
430 (EFX_EXTRACT16((_word).ew_u16[0], FIX_LINT(0), FIX_LINT(15), \
433 #define EFX_EXTRACT_BYTE(_byte, _low, _high) \
434 (EFX_EXTRACT8((_byte).eb_u8[0], FIX_LINT(0), FIX_LINT(7), \
438 #define EFX_OWORD_FIELD64(_oword, _field) \
439 ((uint32_t)EFX_EXTRACT_OWORD64(_oword, EFX_LOW_BIT(_field), \
440 EFX_HIGH_BIT(_field)) & EFX_MASK32(_field))
442 #define EFX_OWORD_FIELD32(_oword, _field) \
443 (EFX_EXTRACT_OWORD32(_oword, EFX_LOW_BIT(_field), \
444 EFX_HIGH_BIT(_field)) & EFX_MASK32(_field))
446 #define EFX_QWORD_FIELD64(_qword, _field) \
447 ((uint32_t)EFX_EXTRACT_QWORD64(_qword, EFX_LOW_BIT(_field), \
448 EFX_HIGH_BIT(_field)) & EFX_MASK32(_field))
450 #define EFX_QWORD_FIELD32(_qword, _field) \
451 (EFX_EXTRACT_QWORD32(_qword, EFX_LOW_BIT(_field), \
452 EFX_HIGH_BIT(_field)) & EFX_MASK32(_field))
454 #define EFX_DWORD_FIELD(_dword, _field) \
455 (EFX_EXTRACT_DWORD(_dword, EFX_LOW_BIT(_field), \
456 EFX_HIGH_BIT(_field)) & EFX_MASK32(_field))
458 #define EFX_WORD_FIELD(_word, _field) \
459 (EFX_EXTRACT_WORD(_word, EFX_LOW_BIT(_field), \
460 EFX_HIGH_BIT(_field)) & EFX_MASK16(_field))
462 #define EFX_BYTE_FIELD(_byte, _field) \
463 (EFX_EXTRACT_BYTE(_byte, EFX_LOW_BIT(_field), \
464 EFX_HIGH_BIT(_field)) & EFX_MASK8(_field))
467 #define EFX_OWORD_IS_EQUAL64(_oword_a, _oword_b) \
468 ((_oword_a).eo_u64[0] == (_oword_b).eo_u64[0] && \
469 (_oword_a).eo_u64[1] == (_oword_b).eo_u64[1])
471 #define EFX_OWORD_IS_EQUAL32(_oword_a, _oword_b) \
472 ((_oword_a).eo_u32[0] == (_oword_b).eo_u32[0] && \
473 (_oword_a).eo_u32[1] == (_oword_b).eo_u32[1] && \
474 (_oword_a).eo_u32[2] == (_oword_b).eo_u32[2] && \
475 (_oword_a).eo_u32[3] == (_oword_b).eo_u32[3])
477 #define EFX_QWORD_IS_EQUAL64(_qword_a, _qword_b) \
478 ((_qword_a).eq_u64[0] == (_qword_b).eq_u64[0])
480 #define EFX_QWORD_IS_EQUAL32(_qword_a, _qword_b) \
481 ((_qword_a).eq_u32[0] == (_qword_b).eq_u32[0] && \
482 (_qword_a).eq_u32[1] == (_qword_b).eq_u32[1])
484 #define EFX_DWORD_IS_EQUAL(_dword_a, _dword_b) \
485 ((_dword_a).ed_u32[0] == (_dword_b).ed_u32[0])
487 #define EFX_WORD_IS_EQUAL(_word_a, _word_b) \
488 ((_word_a).ew_u16[0] == (_word_b).ew_u16[0])
490 #define EFX_BYTE_IS_EQUAL(_byte_a, _byte_b) \
491 ((_byte_a).eb_u8[0] == (_byte_b).eb_u8[0])
494 #define EFX_OWORD_IS_ZERO64(_oword) \
495 (((_oword).eo_u64[0] | \
496 (_oword).eo_u64[1]) == 0)
498 #define EFX_OWORD_IS_ZERO32(_oword) \
499 (((_oword).eo_u32[0] | \
500 (_oword).eo_u32[1] | \
501 (_oword).eo_u32[2] | \
502 (_oword).eo_u32[3]) == 0)
504 #define EFX_QWORD_IS_ZERO64(_qword) \
505 (((_qword).eq_u64[0]) == 0)
507 #define EFX_QWORD_IS_ZERO32(_qword) \
508 (((_qword).eq_u32[0] | \
509 (_qword).eq_u32[1]) == 0)
511 #define EFX_DWORD_IS_ZERO(_dword) \
512 (((_dword).ed_u32[0]) == 0)
514 #define EFX_WORD_IS_ZERO(_word) \
515 (((_word).ew_u16[0]) == 0)
517 #define EFX_BYTE_IS_ZERO(_byte) \
518 (((_byte).eb_u8[0]) == 0)
521 #define EFX_OWORD_IS_SET64(_oword) \
522 (((_oword).eo_u64[0] & \
523 (_oword).eo_u64[1]) == ~((uint64_t)0))
525 #define EFX_OWORD_IS_SET32(_oword) \
526 (((_oword).eo_u32[0] & \
527 (_oword).eo_u32[1] & \
528 (_oword).eo_u32[2] & \
529 (_oword).eo_u32[3]) == ~((uint32_t)0))
531 #define EFX_QWORD_IS_SET64(_qword) \
532 (((_qword).eq_u64[0]) == ~((uint32_t)0))
534 #define EFX_QWORD_IS_SET32(_qword) \
535 (((_qword).eq_u32[0] & \
536 (_qword).eq_u32[1]) == ~((uint32_t)0))
538 #define EFX_DWORD_IS_SET(_dword) \
539 ((_dword).ed_u32[0] == ~((uint32_t)0))
541 #define EFX_WORD_IS_SET(_word) \
542 ((_word).ew_u16[0] == ~((uint16_t)0))
544 #define EFX_BYTE_IS_SET(_byte) \
545 ((_byte).eb_u8[0] == ~((uint8_t)0))
548 * Construct bit field portion
550 * Creates the portion of the bit field [low,high) that lies within
551 * the range [min,max).
554 #define EFX_INSERT_NATIVE64(_min, _max, _low, _high, _value) \
555 (((_low > _max) || (_high < _min)) ? \
558 (((uint64_t)(_value)) << (_low - _min)) : \
559 (((uint64_t)(_value)) >> (_min - _low))))
561 #define EFX_INSERT_NATIVE32(_min, _max, _low, _high, _value) \
562 (((_low > _max) || (_high < _min)) ? \
565 (((uint32_t)(_value)) << (_low - _min)) : \
566 (((uint32_t)(_value)) >> (_min - _low))))
568 #define EFX_INSERT_NATIVE16(_min, _max, _low, _high, _value) \
569 (((_low > _max) || (_high < _min)) ? \
571 (uint16_t)((_low > _min) ? \
572 ((_value) << (_low - _min)) : \
573 ((_value) >> (_min - _low))))
575 #define EFX_INSERT_NATIVE8(_min, _max, _low, _high, _value) \
576 (((_low > _max) || (_high < _min)) ? \
578 (uint8_t)((_low > _min) ? \
579 ((_value) << (_low - _min)) : \
580 ((_value) >> (_min - _low))))
583 * Construct bit field portion
585 * Creates the portion of the named bit field that lies within the
588 #define EFX_INSERT_FIELD_NATIVE64(_min, _max, _field, _value) \
589 EFX_INSERT_NATIVE64(_min, _max, EFX_LOW_BIT(_field), \
590 EFX_HIGH_BIT(_field), _value)
592 #define EFX_INSERT_FIELD_NATIVE32(_min, _max, _field, _value) \
593 EFX_INSERT_NATIVE32(_min, _max, EFX_LOW_BIT(_field), \
594 EFX_HIGH_BIT(_field), _value)
596 #define EFX_INSERT_FIELD_NATIVE16(_min, _max, _field, _value) \
597 EFX_INSERT_NATIVE16(_min, _max, EFX_LOW_BIT(_field), \
598 EFX_HIGH_BIT(_field), _value)
600 #define EFX_INSERT_FIELD_NATIVE8(_min, _max, _field, _value) \
601 EFX_INSERT_NATIVE8(_min, _max, EFX_LOW_BIT(_field), \
602 EFX_HIGH_BIT(_field), _value)
605 * Construct bit field
607 * Creates the portion of the named bit fields that lie within the
610 #define EFX_INSERT_FIELDS64(_min, _max, \
611 _field1, _value1, _field2, _value2, _field3, _value3, \
612 _field4, _value4, _field5, _value5, _field6, _value6, \
613 _field7, _value7, _field8, _value8, _field9, _value9, \
614 _field10, _value10) \
616 EFX_INSERT_FIELD_NATIVE64(_min, _max, _field1, _value1) | \
617 EFX_INSERT_FIELD_NATIVE64(_min, _max, _field2, _value2) | \
618 EFX_INSERT_FIELD_NATIVE64(_min, _max, _field3, _value3) | \
619 EFX_INSERT_FIELD_NATIVE64(_min, _max, _field4, _value4) | \
620 EFX_INSERT_FIELD_NATIVE64(_min, _max, _field5, _value5) | \
621 EFX_INSERT_FIELD_NATIVE64(_min, _max, _field6, _value6) | \
622 EFX_INSERT_FIELD_NATIVE64(_min, _max, _field7, _value7) | \
623 EFX_INSERT_FIELD_NATIVE64(_min, _max, _field8, _value8) | \
624 EFX_INSERT_FIELD_NATIVE64(_min, _max, _field9, _value9) | \
625 EFX_INSERT_FIELD_NATIVE64(_min, _max, _field10, _value10))
627 #define EFX_INSERT_FIELDS32(_min, _max, \
628 _field1, _value1, _field2, _value2, _field3, _value3, \
629 _field4, _value4, _field5, _value5, _field6, _value6, \
630 _field7, _value7, _field8, _value8, _field9, _value9, \
631 _field10, _value10) \
633 EFX_INSERT_FIELD_NATIVE32(_min, _max, _field1, _value1) | \
634 EFX_INSERT_FIELD_NATIVE32(_min, _max, _field2, _value2) | \
635 EFX_INSERT_FIELD_NATIVE32(_min, _max, _field3, _value3) | \
636 EFX_INSERT_FIELD_NATIVE32(_min, _max, _field4, _value4) | \
637 EFX_INSERT_FIELD_NATIVE32(_min, _max, _field5, _value5) | \
638 EFX_INSERT_FIELD_NATIVE32(_min, _max, _field6, _value6) | \
639 EFX_INSERT_FIELD_NATIVE32(_min, _max, _field7, _value7) | \
640 EFX_INSERT_FIELD_NATIVE32(_min, _max, _field8, _value8) | \
641 EFX_INSERT_FIELD_NATIVE32(_min, _max, _field9, _value9) | \
642 EFX_INSERT_FIELD_NATIVE32(_min, _max, _field10, _value10))
644 #define EFX_INSERT_FIELDS16(_min, _max, \
645 _field1, _value1, _field2, _value2, _field3, _value3, \
646 _field4, _value4, _field5, _value5, _field6, _value6, \
647 _field7, _value7, _field8, _value8, _field9, _value9, \
648 _field10, _value10) \
650 EFX_INSERT_FIELD_NATIVE16(_min, _max, _field1, _value1) | \
651 EFX_INSERT_FIELD_NATIVE16(_min, _max, _field2, _value2) | \
652 EFX_INSERT_FIELD_NATIVE16(_min, _max, _field3, _value3) | \
653 EFX_INSERT_FIELD_NATIVE16(_min, _max, _field4, _value4) | \
654 EFX_INSERT_FIELD_NATIVE16(_min, _max, _field5, _value5) | \
655 EFX_INSERT_FIELD_NATIVE16(_min, _max, _field6, _value6) | \
656 EFX_INSERT_FIELD_NATIVE16(_min, _max, _field7, _value7) | \
657 EFX_INSERT_FIELD_NATIVE16(_min, _max, _field8, _value8) | \
658 EFX_INSERT_FIELD_NATIVE16(_min, _max, _field9, _value9) | \
659 EFX_INSERT_FIELD_NATIVE16(_min, _max, _field10, _value10))
661 #define EFX_INSERT_FIELDS8(_min, _max, \
662 _field1, _value1, _field2, _value2, _field3, _value3, \
663 _field4, _value4, _field5, _value5, _field6, _value6, \
664 _field7, _value7, _field8, _value8, _field9, _value9, \
665 _field10, _value10) \
667 EFX_INSERT_FIELD_NATIVE8(_min, _max, _field1, _value1) | \
668 EFX_INSERT_FIELD_NATIVE8(_min, _max, _field2, _value2) | \
669 EFX_INSERT_FIELD_NATIVE8(_min, _max, _field3, _value3) | \
670 EFX_INSERT_FIELD_NATIVE8(_min, _max, _field4, _value4) | \
671 EFX_INSERT_FIELD_NATIVE8(_min, _max, _field5, _value5) | \
672 EFX_INSERT_FIELD_NATIVE8(_min, _max, _field6, _value6) | \
673 EFX_INSERT_FIELD_NATIVE8(_min, _max, _field7, _value7) | \
674 EFX_INSERT_FIELD_NATIVE8(_min, _max, _field8, _value8) | \
675 EFX_INSERT_FIELD_NATIVE8(_min, _max, _field9, _value9) | \
676 EFX_INSERT_FIELD_NATIVE8(_min, _max, _field10, _value10))
678 #define EFX_POPULATE_OWORD64(_oword, \
679 _field1, _value1, _field2, _value2, _field3, _value3, \
680 _field4, _value4, _field5, _value5, _field6, _value6, \
681 _field7, _value7, _field8, _value8, _field9, _value9, \
682 _field10, _value10) \
684 _NOTE(CONSTANTCONDITION) \
685 (_oword).eo_u64[0] = EFX_INSERT_FIELDS64(0, 63, \
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) \
692 (_oword).eo_u64[1] = EFX_INSERT_FIELDS64(64, 127, \
693 _field1, _value1, _field2, _value2, \
694 _field3, _value3, _field4, _value4, \
695 _field5, _value5, _field6, _value6, \
696 _field7, _value7, _field8, _value8, \
697 _field9, _value9, _field10, _value10); \
698 _NOTE(CONSTANTCONDITION) \
701 #define EFX_POPULATE_OWORD32(_oword, \
702 _field1, _value1, _field2, _value2, _field3, _value3, \
703 _field4, _value4, _field5, _value5, _field6, _value6, \
704 _field7, _value7, _field8, _value8, _field9, _value9, \
705 _field10, _value10) \
707 _NOTE(CONSTANTCONDITION) \
708 (_oword).eo_u32[0] = EFX_INSERT_FIELDS32(0, 31, \
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[1] = EFX_INSERT_FIELDS32(32, 63, \
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[2] = EFX_INSERT_FIELDS32(64, 95, \
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) \
729 (_oword).eo_u32[3] = EFX_INSERT_FIELDS32(96, 127, \
730 _field1, _value1, _field2, _value2, \
731 _field3, _value3, _field4, _value4, \
732 _field5, _value5, _field6, _value6, \
733 _field7, _value7, _field8, _value8, \
734 _field9, _value9, _field10, _value10); \
735 _NOTE(CONSTANTCONDITION) \
738 #define EFX_POPULATE_QWORD64(_qword, \
739 _field1, _value1, _field2, _value2, _field3, _value3, \
740 _field4, _value4, _field5, _value5, _field6, _value6, \
741 _field7, _value7, _field8, _value8, _field9, _value9, \
742 _field10, _value10) \
744 _NOTE(CONSTANTCONDITION) \
745 (_qword).eq_u64[0] = EFX_INSERT_FIELDS64(0, 63, \
746 _field1, _value1, _field2, _value2, \
747 _field3, _value3, _field4, _value4, \
748 _field5, _value5, _field6, _value6, \
749 _field7, _value7, _field8, _value8, \
750 _field9, _value9, _field10, _value10); \
751 _NOTE(CONSTANTCONDITION) \
754 #define EFX_POPULATE_QWORD32(_qword, \
755 _field1, _value1, _field2, _value2, _field3, _value3, \
756 _field4, _value4, _field5, _value5, _field6, _value6, \
757 _field7, _value7, _field8, _value8, _field9, _value9, \
758 _field10, _value10) \
760 _NOTE(CONSTANTCONDITION) \
761 (_qword).eq_u32[0] = EFX_INSERT_FIELDS32(0, 31, \
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) \
768 (_qword).eq_u32[1] = EFX_INSERT_FIELDS32(32, 63, \
769 _field1, _value1, _field2, _value2, \
770 _field3, _value3, _field4, _value4, \
771 _field5, _value5, _field6, _value6, \
772 _field7, _value7, _field8, _value8, \
773 _field9, _value9, _field10, _value10); \
774 _NOTE(CONSTANTCONDITION) \
777 #define EFX_POPULATE_DWORD(_dword, \
778 _field1, _value1, _field2, _value2, _field3, _value3, \
779 _field4, _value4, _field5, _value5, _field6, _value6, \
780 _field7, _value7, _field8, _value8, _field9, _value9, \
781 _field10, _value10) \
783 _NOTE(CONSTANTCONDITION) \
784 (_dword).ed_u32[0] = EFX_INSERT_FIELDS32(0, 31, \
785 _field1, _value1, _field2, _value2, \
786 _field3, _value3, _field4, _value4, \
787 _field5, _value5, _field6, _value6, \
788 _field7, _value7, _field8, _value8, \
789 _field9, _value9, _field10, _value10); \
790 _NOTE(CONSTANTCONDITION) \
793 #define EFX_POPULATE_WORD(_word, \
794 _field1, _value1, _field2, _value2, _field3, _value3, \
795 _field4, _value4, _field5, _value5, _field6, _value6, \
796 _field7, _value7, _field8, _value8, _field9, _value9, \
797 _field10, _value10) \
799 _NOTE(CONSTANTCONDITION) \
800 (_word).ew_u16[0] = EFX_INSERT_FIELDS16(0, 15, \
801 _field1, _value1, _field2, _value2, \
802 _field3, _value3, _field4, _value4, \
803 _field5, _value5, _field6, _value6, \
804 _field7, _value7, _field8, _value8, \
805 _field9, _value9, _field10, _value10); \
806 _NOTE(CONSTANTCONDITION) \
809 #define EFX_POPULATE_BYTE(_byte, \
810 _field1, _value1, _field2, _value2, _field3, _value3, \
811 _field4, _value4, _field5, _value5, _field6, _value6, \
812 _field7, _value7, _field8, _value8, _field9, _value9, \
813 _field10, _value10) \
815 _NOTE(CONSTANTCONDITION) \
816 (_byte).eb_u8[0] = EFX_INSERT_FIELDS8(0, 7, \
817 _field1, _value1, _field2, _value2, \
818 _field3, _value3, _field4, _value4, \
819 _field5, _value5, _field6, _value6, \
820 _field7, _value7, _field8, _value8, \
821 _field9, _value9, _field10, _value10); \
822 _NOTE(CONSTANTCONDITION) \
825 /* Populate an octword field with various numbers of arguments */
826 #define EFX_POPULATE_OWORD_10 EFX_POPULATE_OWORD
828 #define EFX_POPULATE_OWORD_9(_oword, \
829 _field1, _value1, _field2, _value2, _field3, _value3, \
830 _field4, _value4, _field5, _value5, _field6, _value6, \
831 _field7, _value7, _field8, _value8, _field9, _value9) \
832 EFX_POPULATE_OWORD_10(_oword, EFX_DUMMY_FIELD, 0, \
833 _field1, _value1, _field2, _value2, _field3, _value3, \
834 _field4, _value4, _field5, _value5, _field6, _value6, \
835 _field7, _value7, _field8, _value8, _field9, _value9)
837 #define EFX_POPULATE_OWORD_8(_oword, \
838 _field1, _value1, _field2, _value2, _field3, _value3, \
839 _field4, _value4, _field5, _value5, _field6, _value6, \
840 _field7, _value7, _field8, _value8) \
841 EFX_POPULATE_OWORD_9(_oword, EFX_DUMMY_FIELD, 0, \
842 _field1, _value1, _field2, _value2, _field3, _value3, \
843 _field4, _value4, _field5, _value5, _field6, _value6, \
844 _field7, _value7, _field8, _value8)
846 #define EFX_POPULATE_OWORD_7(_oword, \
847 _field1, _value1, _field2, _value2, _field3, _value3, \
848 _field4, _value4, _field5, _value5, _field6, _value6, \
850 EFX_POPULATE_OWORD_8(_oword, EFX_DUMMY_FIELD, 0, \
851 _field1, _value1, _field2, _value2, _field3, _value3, \
852 _field4, _value4, _field5, _value5, _field6, _value6, \
855 #define EFX_POPULATE_OWORD_6(_oword, \
856 _field1, _value1, _field2, _value2, _field3, _value3, \
857 _field4, _value4, _field5, _value5, _field6, _value6) \
858 EFX_POPULATE_OWORD_7(_oword, EFX_DUMMY_FIELD, 0, \
859 _field1, _value1, _field2, _value2, _field3, _value3, \
860 _field4, _value4, _field5, _value5, _field6, _value6)
862 #define EFX_POPULATE_OWORD_5(_oword, \
863 _field1, _value1, _field2, _value2, _field3, _value3, \
864 _field4, _value4, _field5, _value5) \
865 EFX_POPULATE_OWORD_6(_oword, EFX_DUMMY_FIELD, 0, \
866 _field1, _value1, _field2, _value2, _field3, _value3, \
867 _field4, _value4, _field5, _value5)
869 #define EFX_POPULATE_OWORD_4(_oword, \
870 _field1, _value1, _field2, _value2, _field3, _value3, \
872 EFX_POPULATE_OWORD_5(_oword, EFX_DUMMY_FIELD, 0, \
873 _field1, _value1, _field2, _value2, _field3, _value3, \
876 #define EFX_POPULATE_OWORD_3(_oword, \
877 _field1, _value1, _field2, _value2, _field3, _value3) \
878 EFX_POPULATE_OWORD_4(_oword, EFX_DUMMY_FIELD, 0, \
879 _field1, _value1, _field2, _value2, _field3, _value3)
881 #define EFX_POPULATE_OWORD_2(_oword, \
882 _field1, _value1, _field2, _value2) \
883 EFX_POPULATE_OWORD_3(_oword, EFX_DUMMY_FIELD, 0, \
884 _field1, _value1, _field2, _value2)
886 #define EFX_POPULATE_OWORD_1(_oword, \
888 EFX_POPULATE_OWORD_2(_oword, EFX_DUMMY_FIELD, 0, \
891 #define EFX_ZERO_OWORD(_oword) \
892 EFX_POPULATE_OWORD_1(_oword, EFX_DUMMY_FIELD, 0)
894 #define EFX_SET_OWORD64(_oword) \
895 EFX_POPULATE_OWORD_2(_oword, \
896 EFX_QWORD_0, (uint64_t)-1, EFX_QWORD_1, (uint64_t)-1)
898 #define EFX_SET_OWORD32(_oword) \
899 EFX_POPULATE_OWORD_4(_oword, \
900 EFX_DWORD_0, 0xffffffff, EFX_DWORD_1, 0xffffffff, \
901 EFX_DWORD_2, 0xffffffff, EFX_DWORD_3, 0xffffffff)
903 /* Populate a quadword field with various numbers of arguments */
904 #define EFX_POPULATE_QWORD_10 EFX_POPULATE_QWORD
906 #define EFX_POPULATE_QWORD_9(_qword, \
907 _field1, _value1, _field2, _value2, _field3, _value3, \
908 _field4, _value4, _field5, _value5, _field6, _value6, \
909 _field7, _value7, _field8, _value8, _field9, _value9) \
910 EFX_POPULATE_QWORD_10(_qword, EFX_DUMMY_FIELD, 0, \
911 _field1, _value1, _field2, _value2, _field3, _value3, \
912 _field4, _value4, _field5, _value5, _field6, _value6, \
913 _field7, _value7, _field8, _value8, _field9, _value9)
915 #define EFX_POPULATE_QWORD_8(_qword, \
916 _field1, _value1, _field2, _value2, _field3, _value3, \
917 _field4, _value4, _field5, _value5, _field6, _value6, \
918 _field7, _value7, _field8, _value8) \
919 EFX_POPULATE_QWORD_9(_qword, EFX_DUMMY_FIELD, 0, \
920 _field1, _value1, _field2, _value2, _field3, _value3, \
921 _field4, _value4, _field5, _value5, _field6, _value6, \
922 _field7, _value7, _field8, _value8)
924 #define EFX_POPULATE_QWORD_7(_qword, \
925 _field1, _value1, _field2, _value2, _field3, _value3, \
926 _field4, _value4, _field5, _value5, _field6, _value6, \
928 EFX_POPULATE_QWORD_8(_qword, EFX_DUMMY_FIELD, 0, \
929 _field1, _value1, _field2, _value2, _field3, _value3, \
930 _field4, _value4, _field5, _value5, _field6, _value6, \
933 #define EFX_POPULATE_QWORD_6(_qword, \
934 _field1, _value1, _field2, _value2, _field3, _value3, \
935 _field4, _value4, _field5, _value5, _field6, _value6) \
936 EFX_POPULATE_QWORD_7(_qword, EFX_DUMMY_FIELD, 0, \
937 _field1, _value1, _field2, _value2, _field3, _value3, \
938 _field4, _value4, _field5, _value5, _field6, _value6)
940 #define EFX_POPULATE_QWORD_5(_qword, \
941 _field1, _value1, _field2, _value2, _field3, _value3, \
942 _field4, _value4, _field5, _value5) \
943 EFX_POPULATE_QWORD_6(_qword, EFX_DUMMY_FIELD, 0, \
944 _field1, _value1, _field2, _value2, _field3, _value3, \
945 _field4, _value4, _field5, _value5)
947 #define EFX_POPULATE_QWORD_4(_qword, \
948 _field1, _value1, _field2, _value2, _field3, _value3, \
950 EFX_POPULATE_QWORD_5(_qword, EFX_DUMMY_FIELD, 0, \
951 _field1, _value1, _field2, _value2, _field3, _value3, \
954 #define EFX_POPULATE_QWORD_3(_qword, \
955 _field1, _value1, _field2, _value2, _field3, _value3) \
956 EFX_POPULATE_QWORD_4(_qword, EFX_DUMMY_FIELD, 0, \
957 _field1, _value1, _field2, _value2, _field3, _value3)
959 #define EFX_POPULATE_QWORD_2(_qword, \
960 _field1, _value1, _field2, _value2) \
961 EFX_POPULATE_QWORD_3(_qword, EFX_DUMMY_FIELD, 0, \
962 _field1, _value1, _field2, _value2)
964 #define EFX_POPULATE_QWORD_1(_qword, \
966 EFX_POPULATE_QWORD_2(_qword, EFX_DUMMY_FIELD, 0, \
969 #define EFX_ZERO_QWORD(_qword) \
970 EFX_POPULATE_QWORD_1(_qword, EFX_DUMMY_FIELD, 0)
972 #define EFX_SET_QWORD64(_qword) \
973 EFX_POPULATE_QWORD_1(_qword, \
974 EFX_QWORD_0, (uint64_t)-1)
976 #define EFX_SET_QWORD32(_qword) \
977 EFX_POPULATE_QWORD_2(_qword, \
978 EFX_DWORD_0, 0xffffffff, EFX_DWORD_1, 0xffffffff)
980 /* Populate a dword field with various numbers of arguments */
981 #define EFX_POPULATE_DWORD_10 EFX_POPULATE_DWORD
983 #define EFX_POPULATE_DWORD_9(_dword, \
984 _field1, _value1, _field2, _value2, _field3, _value3, \
985 _field4, _value4, _field5, _value5, _field6, _value6, \
986 _field7, _value7, _field8, _value8, _field9, _value9) \
987 EFX_POPULATE_DWORD_10(_dword, EFX_DUMMY_FIELD, 0, \
988 _field1, _value1, _field2, _value2, _field3, _value3, \
989 _field4, _value4, _field5, _value5, _field6, _value6, \
990 _field7, _value7, _field8, _value8, _field9, _value9)
992 #define EFX_POPULATE_DWORD_8(_dword, \
993 _field1, _value1, _field2, _value2, _field3, _value3, \
994 _field4, _value4, _field5, _value5, _field6, _value6, \
995 _field7, _value7, _field8, _value8) \
996 EFX_POPULATE_DWORD_9(_dword, EFX_DUMMY_FIELD, 0, \
997 _field1, _value1, _field2, _value2, _field3, _value3, \
998 _field4, _value4, _field5, _value5, _field6, _value6, \
999 _field7, _value7, _field8, _value8)
1001 #define EFX_POPULATE_DWORD_7(_dword, \
1002 _field1, _value1, _field2, _value2, _field3, _value3, \
1003 _field4, _value4, _field5, _value5, _field6, _value6, \
1005 EFX_POPULATE_DWORD_8(_dword, EFX_DUMMY_FIELD, 0, \
1006 _field1, _value1, _field2, _value2, _field3, _value3, \
1007 _field4, _value4, _field5, _value5, _field6, _value6, \
1010 #define EFX_POPULATE_DWORD_6(_dword, \
1011 _field1, _value1, _field2, _value2, _field3, _value3, \
1012 _field4, _value4, _field5, _value5, _field6, _value6) \
1013 EFX_POPULATE_DWORD_7(_dword, EFX_DUMMY_FIELD, 0, \
1014 _field1, _value1, _field2, _value2, _field3, _value3, \
1015 _field4, _value4, _field5, _value5, _field6, _value6)
1017 #define EFX_POPULATE_DWORD_5(_dword, \
1018 _field1, _value1, _field2, _value2, _field3, _value3, \
1019 _field4, _value4, _field5, _value5) \
1020 EFX_POPULATE_DWORD_6(_dword, EFX_DUMMY_FIELD, 0, \
1021 _field1, _value1, _field2, _value2, _field3, _value3, \
1022 _field4, _value4, _field5, _value5)
1024 #define EFX_POPULATE_DWORD_4(_dword, \
1025 _field1, _value1, _field2, _value2, _field3, _value3, \
1027 EFX_POPULATE_DWORD_5(_dword, EFX_DUMMY_FIELD, 0, \
1028 _field1, _value1, _field2, _value2, _field3, _value3, \
1031 #define EFX_POPULATE_DWORD_3(_dword, \
1032 _field1, _value1, _field2, _value2, _field3, _value3) \
1033 EFX_POPULATE_DWORD_4(_dword, EFX_DUMMY_FIELD, 0, \
1034 _field1, _value1, _field2, _value2, _field3, _value3)
1036 #define EFX_POPULATE_DWORD_2(_dword, \
1037 _field1, _value1, _field2, _value2) \
1038 EFX_POPULATE_DWORD_3(_dword, EFX_DUMMY_FIELD, 0, \
1039 _field1, _value1, _field2, _value2)
1041 #define EFX_POPULATE_DWORD_1(_dword, \
1043 EFX_POPULATE_DWORD_2(_dword, EFX_DUMMY_FIELD, 0, \
1046 #define EFX_ZERO_DWORD(_dword) \
1047 EFX_POPULATE_DWORD_1(_dword, EFX_DUMMY_FIELD, 0)
1049 #define EFX_SET_DWORD(_dword) \
1050 EFX_POPULATE_DWORD_1(_dword, \
1051 EFX_DWORD_0, 0xffffffff)
1053 /* Populate a word field with various numbers of arguments */
1054 #define EFX_POPULATE_WORD_10 EFX_POPULATE_WORD
1056 #define EFX_POPULATE_WORD_9(_word, \
1057 _field1, _value1, _field2, _value2, _field3, _value3, \
1058 _field4, _value4, _field5, _value5, _field6, _value6, \
1059 _field7, _value7, _field8, _value8, _field9, _value9) \
1060 EFX_POPULATE_WORD_10(_word, EFX_DUMMY_FIELD, 0, \
1061 _field1, _value1, _field2, _value2, _field3, _value3, \
1062 _field4, _value4, _field5, _value5, _field6, _value6, \
1063 _field7, _value7, _field8, _value8, _field9, _value9)
1065 #define EFX_POPULATE_WORD_8(_word, \
1066 _field1, _value1, _field2, _value2, _field3, _value3, \
1067 _field4, _value4, _field5, _value5, _field6, _value6, \
1068 _field7, _value7, _field8, _value8) \
1069 EFX_POPULATE_WORD_9(_word, EFX_DUMMY_FIELD, 0, \
1070 _field1, _value1, _field2, _value2, _field3, _value3, \
1071 _field4, _value4, _field5, _value5, _field6, _value6, \
1072 _field7, _value7, _field8, _value8)
1074 #define EFX_POPULATE_WORD_7(_word, \
1075 _field1, _value1, _field2, _value2, _field3, _value3, \
1076 _field4, _value4, _field5, _value5, _field6, _value6, \
1078 EFX_POPULATE_WORD_8(_word, EFX_DUMMY_FIELD, 0, \
1079 _field1, _value1, _field2, _value2, _field3, _value3, \
1080 _field4, _value4, _field5, _value5, _field6, _value6, \
1083 #define EFX_POPULATE_WORD_6(_word, \
1084 _field1, _value1, _field2, _value2, _field3, _value3, \
1085 _field4, _value4, _field5, _value5, _field6, _value6) \
1086 EFX_POPULATE_WORD_7(_word, EFX_DUMMY_FIELD, 0, \
1087 _field1, _value1, _field2, _value2, _field3, _value3, \
1088 _field4, _value4, _field5, _value5, _field6, _value6)
1090 #define EFX_POPULATE_WORD_5(_word, \
1091 _field1, _value1, _field2, _value2, _field3, _value3, \
1092 _field4, _value4, _field5, _value5) \
1093 EFX_POPULATE_WORD_6(_word, EFX_DUMMY_FIELD, 0, \
1094 _field1, _value1, _field2, _value2, _field3, _value3, \
1095 _field4, _value4, _field5, _value5)
1097 #define EFX_POPULATE_WORD_4(_word, \
1098 _field1, _value1, _field2, _value2, _field3, _value3, \
1100 EFX_POPULATE_WORD_5(_word, EFX_DUMMY_FIELD, 0, \
1101 _field1, _value1, _field2, _value2, _field3, _value3, \
1104 #define EFX_POPULATE_WORD_3(_word, \
1105 _field1, _value1, _field2, _value2, _field3, _value3) \
1106 EFX_POPULATE_WORD_4(_word, EFX_DUMMY_FIELD, 0, \
1107 _field1, _value1, _field2, _value2, _field3, _value3)
1109 #define EFX_POPULATE_WORD_2(_word, \
1110 _field1, _value1, _field2, _value2) \
1111 EFX_POPULATE_WORD_3(_word, EFX_DUMMY_FIELD, 0, \
1112 _field1, _value1, _field2, _value2)
1114 #define EFX_POPULATE_WORD_1(_word, \
1116 EFX_POPULATE_WORD_2(_word, EFX_DUMMY_FIELD, 0, \
1119 #define EFX_ZERO_WORD(_word) \
1120 EFX_POPULATE_WORD_1(_word, EFX_DUMMY_FIELD, 0)
1122 #define EFX_SET_WORD(_word) \
1123 EFX_POPULATE_WORD_1(_word, \
1126 /* Populate a byte field with various numbers of arguments */
1127 #define EFX_POPULATE_BYTE_10 EFX_POPULATE_BYTE
1129 #define EFX_POPULATE_BYTE_9(_byte, \
1130 _field1, _value1, _field2, _value2, _field3, _value3, \
1131 _field4, _value4, _field5, _value5, _field6, _value6, \
1132 _field7, _value7, _field8, _value8, _field9, _value9) \
1133 EFX_POPULATE_BYTE_10(_byte, EFX_DUMMY_FIELD, 0, \
1134 _field1, _value1, _field2, _value2, _field3, _value3, \
1135 _field4, _value4, _field5, _value5, _field6, _value6, \
1136 _field7, _value7, _field8, _value8, _field9, _value9)
1138 #define EFX_POPULATE_BYTE_8(_byte, \
1139 _field1, _value1, _field2, _value2, _field3, _value3, \
1140 _field4, _value4, _field5, _value5, _field6, _value6, \
1141 _field7, _value7, _field8, _value8) \
1142 EFX_POPULATE_BYTE_9(_byte, EFX_DUMMY_FIELD, 0, \
1143 _field1, _value1, _field2, _value2, _field3, _value3, \
1144 _field4, _value4, _field5, _value5, _field6, _value6, \
1145 _field7, _value7, _field8, _value8)
1147 #define EFX_POPULATE_BYTE_7(_byte, \
1148 _field1, _value1, _field2, _value2, _field3, _value3, \
1149 _field4, _value4, _field5, _value5, _field6, _value6, \
1151 EFX_POPULATE_BYTE_8(_byte, EFX_DUMMY_FIELD, 0, \
1152 _field1, _value1, _field2, _value2, _field3, _value3, \
1153 _field4, _value4, _field5, _value5, _field6, _value6, \
1156 #define EFX_POPULATE_BYTE_6(_byte, \
1157 _field1, _value1, _field2, _value2, _field3, _value3, \
1158 _field4, _value4, _field5, _value5, _field6, _value6) \
1159 EFX_POPULATE_BYTE_7(_byte, EFX_DUMMY_FIELD, 0, \
1160 _field1, _value1, _field2, _value2, _field3, _value3, \
1161 _field4, _value4, _field5, _value5, _field6, _value6)
1163 #define EFX_POPULATE_BYTE_5(_byte, \
1164 _field1, _value1, _field2, _value2, _field3, _value3, \
1165 _field4, _value4, _field5, _value5) \
1166 EFX_POPULATE_BYTE_6(_byte, EFX_DUMMY_FIELD, 0, \
1167 _field1, _value1, _field2, _value2, _field3, _value3, \
1168 _field4, _value4, _field5, _value5)
1170 #define EFX_POPULATE_BYTE_4(_byte, \
1171 _field1, _value1, _field2, _value2, _field3, _value3, \
1173 EFX_POPULATE_BYTE_5(_byte, EFX_DUMMY_FIELD, 0, \
1174 _field1, _value1, _field2, _value2, _field3, _value3, \
1177 #define EFX_POPULATE_BYTE_3(_byte, \
1178 _field1, _value1, _field2, _value2, _field3, _value3) \
1179 EFX_POPULATE_BYTE_4(_byte, EFX_DUMMY_FIELD, 0, \
1180 _field1, _value1, _field2, _value2, _field3, _value3)
1182 #define EFX_POPULATE_BYTE_2(_byte, \
1183 _field1, _value1, _field2, _value2) \
1184 EFX_POPULATE_BYTE_3(_byte, EFX_DUMMY_FIELD, 0, \
1185 _field1, _value1, _field2, _value2)
1187 #define EFX_POPULATE_BYTE_1(_byte, \
1189 EFX_POPULATE_BYTE_2(_byte, EFX_DUMMY_FIELD, 0, \
1192 #define EFX_ZERO_BYTE(_byte) \
1193 EFX_POPULATE_BYTE_1(_byte, EFX_DUMMY_FIELD, 0)
1195 #define EFX_SET_BYTE(_byte) \
1196 EFX_POPULATE_BYTE_1(_byte, \
1200 * Modify a named field within an already-populated structure. Used
1201 * for read-modify-write operations.
1204 #define EFX_INSERT_FIELD64(_min, _max, _field, _value) \
1205 __CPU_TO_LE_64(EFX_INSERT_FIELD_NATIVE64(_min, _max, _field, _value))
1207 #define EFX_INSERT_FIELD32(_min, _max, _field, _value) \
1208 __CPU_TO_LE_32(EFX_INSERT_FIELD_NATIVE32(_min, _max, _field, _value))
1210 #define EFX_INSERT_FIELD16(_min, _max, _field, _value) \
1211 __CPU_TO_LE_16(EFX_INSERT_FIELD_NATIVE16(_min, _max, _field, _value))
1213 #define EFX_INSERT_FIELD8(_min, _max, _field, _value) \
1214 __NATIVE_8(EFX_INSERT_FIELD_NATIVE8(_min, _max, _field, _value))
1216 #define EFX_INPLACE_MASK64(_min, _max, _field) \
1217 EFX_INSERT_FIELD64(_min, _max, _field, EFX_MASK64(_field))
1219 #define EFX_INPLACE_MASK32(_min, _max, _field) \
1220 EFX_INSERT_FIELD32(_min, _max, _field, EFX_MASK32(_field))
1222 #define EFX_INPLACE_MASK16(_min, _max, _field) \
1223 EFX_INSERT_FIELD16(_min, _max, _field, EFX_MASK16(_field))
1225 #define EFX_INPLACE_MASK8(_min, _max, _field) \
1226 EFX_INSERT_FIELD8(_min, _max, _field, EFX_MASK8(_field))
1228 #define EFX_SET_OWORD_FIELD64(_oword, _field, _value) \
1230 _NOTE(CONSTANTCONDITION) \
1231 (_oword).eo_u64[0] = (((_oword).eo_u64[0] & \
1232 ~EFX_INPLACE_MASK64(0, 63, _field)) | \
1233 EFX_INSERT_FIELD64(0, 63, _field, _value)); \
1234 _NOTE(CONSTANTCONDITION) \
1235 (_oword).eo_u64[1] = (((_oword).eo_u64[1] & \
1236 ~EFX_INPLACE_MASK64(64, 127, _field)) | \
1237 EFX_INSERT_FIELD64(64, 127, _field, _value)); \
1238 _NOTE(CONSTANTCONDITION) \
1241 #define EFX_SET_OWORD_FIELD32(_oword, _field, _value) \
1243 _NOTE(CONSTANTCONDITION) \
1244 (_oword).eo_u32[0] = (((_oword).eo_u32[0] & \
1245 ~EFX_INPLACE_MASK32(0, 31, _field)) | \
1246 EFX_INSERT_FIELD32(0, 31, _field, _value)); \
1247 _NOTE(CONSTANTCONDITION) \
1248 (_oword).eo_u32[1] = (((_oword).eo_u32[1] & \
1249 ~EFX_INPLACE_MASK32(32, 63, _field)) | \
1250 EFX_INSERT_FIELD32(32, 63, _field, _value)); \
1251 _NOTE(CONSTANTCONDITION) \
1252 (_oword).eo_u32[2] = (((_oword).eo_u32[2] & \
1253 ~EFX_INPLACE_MASK32(64, 95, _field)) | \
1254 EFX_INSERT_FIELD32(64, 95, _field, _value)); \
1255 _NOTE(CONSTANTCONDITION) \
1256 (_oword).eo_u32[3] = (((_oword).eo_u32[3] & \
1257 ~EFX_INPLACE_MASK32(96, 127, _field)) | \
1258 EFX_INSERT_FIELD32(96, 127, _field, _value)); \
1259 _NOTE(CONSTANTCONDITION) \
1262 #define EFX_SET_QWORD_FIELD64(_qword, _field, _value) \
1264 _NOTE(CONSTANTCONDITION) \
1265 (_qword).eq_u64[0] = (((_qword).eq_u64[0] & \
1266 ~EFX_INPLACE_MASK64(0, 63, _field)) | \
1267 EFX_INSERT_FIELD64(0, 63, _field, _value)); \
1268 _NOTE(CONSTANTCONDITION) \
1271 #define EFX_SET_QWORD_FIELD32(_qword, _field, _value) \
1273 _NOTE(CONSTANTCONDITION) \
1274 (_qword).eq_u32[0] = (((_qword).eq_u32[0] & \
1275 ~EFX_INPLACE_MASK32(0, 31, _field)) | \
1276 EFX_INSERT_FIELD32(0, 31, _field, _value)); \
1277 _NOTE(CONSTANTCONDITION) \
1278 (_qword).eq_u32[1] = (((_qword).eq_u32[1] & \
1279 ~EFX_INPLACE_MASK32(32, 63, _field)) | \
1280 EFX_INSERT_FIELD32(32, 63, _field, _value)); \
1281 _NOTE(CONSTANTCONDITION) \
1284 #define EFX_SET_DWORD_FIELD(_dword, _field, _value) \
1286 _NOTE(CONSTANTCONDITION) \
1287 (_dword).ed_u32[0] = (((_dword).ed_u32[0] & \
1288 ~EFX_INPLACE_MASK32(0, 31, _field)) | \
1289 EFX_INSERT_FIELD32(0, 31, _field, _value)); \
1290 _NOTE(CONSTANTCONDITION) \
1293 #define EFX_SET_WORD_FIELD(_word, _field, _value) \
1295 _NOTE(CONSTANTCONDITION) \
1296 (_word).ew_u16[0] = (((_word).ew_u16[0] & \
1297 ~EFX_INPLACE_MASK16(0, 15, _field)) | \
1298 EFX_INSERT_FIELD16(0, 15, _field, _value)); \
1299 _NOTE(CONSTANTCONDITION) \
1302 #define EFX_SET_BYTE_FIELD(_byte, _field, _value) \
1304 _NOTE(CONSTANTCONDITION) \
1305 (_byte).eb_u8[0] = (((_byte).eb_u8[0] & \
1306 ~EFX_INPLACE_MASK8(0, 7, _field)) | \
1307 EFX_INSERT_FIELD8(0, 7, _field, _value)); \
1308 _NOTE(CONSTANTCONDITION) \
1312 * Set or clear a numbered bit within an octword.
1315 #define EFX_SHIFT64(_bit, _base) \
1316 (((_bit) >= (_base) && (_bit) < (_base) + 64) ? \
1317 ((uint64_t)1 << ((_bit) - (_base))) : \
1320 #define EFX_SHIFT32(_bit, _base) \
1321 (((_bit) >= (_base) && (_bit) < (_base) + 32) ? \
1322 ((uint32_t)1 << ((_bit) - (_base))) : \
1325 #define EFX_SHIFT16(_bit, _base) \
1326 (((_bit) >= (_base) && (_bit) < (_base) + 16) ? \
1327 (uint16_t)(1 << ((_bit) - (_base))) : \
1330 #define EFX_SHIFT8(_bit, _base) \
1331 (((_bit) >= (_base) && (_bit) < (_base) + 8) ? \
1332 (uint8_t)(1 << ((_bit) - (_base))) : \
1335 #define EFX_SET_OWORD_BIT64(_oword, _bit) \
1337 _NOTE(CONSTANTCONDITION) \
1338 (_oword).eo_u64[0] |= \
1339 __CPU_TO_LE_64(EFX_SHIFT64(_bit, FIX_LINT(0))); \
1340 (_oword).eo_u64[1] |= \
1341 __CPU_TO_LE_64(EFX_SHIFT64(_bit, FIX_LINT(64))); \
1342 _NOTE(CONSTANTCONDITION) \
1345 #define EFX_SET_OWORD_BIT32(_oword, _bit) \
1347 _NOTE(CONSTANTCONDITION) \
1348 (_oword).eo_u32[0] |= \
1349 __CPU_TO_LE_32(EFX_SHIFT32(_bit, FIX_LINT(0))); \
1350 (_oword).eo_u32[1] |= \
1351 __CPU_TO_LE_32(EFX_SHIFT32(_bit, FIX_LINT(32))); \
1352 (_oword).eo_u32[2] |= \
1353 __CPU_TO_LE_32(EFX_SHIFT32(_bit, FIX_LINT(64))); \
1354 (_oword).eo_u32[3] |= \
1355 __CPU_TO_LE_32(EFX_SHIFT32(_bit, FIX_LINT(96))); \
1356 _NOTE(CONSTANTCONDITION) \
1359 #define EFX_CLEAR_OWORD_BIT64(_oword, _bit) \
1361 _NOTE(CONSTANTCONDITION) \
1362 (_oword).eo_u64[0] &= \
1363 __CPU_TO_LE_64(~EFX_SHIFT64(_bit, FIX_LINT(0))); \
1364 (_oword).eo_u64[1] &= \
1365 __CPU_TO_LE_64(~EFX_SHIFT64(_bit, FIX_LINT(64))); \
1366 _NOTE(CONSTANTCONDITION) \
1369 #define EFX_CLEAR_OWORD_BIT32(_oword, _bit) \
1371 _NOTE(CONSTANTCONDITION) \
1372 (_oword).eo_u32[0] &= \
1373 __CPU_TO_LE_32(~EFX_SHIFT32(_bit, FIX_LINT(0))); \
1374 (_oword).eo_u32[1] &= \
1375 __CPU_TO_LE_32(~EFX_SHIFT32(_bit, FIX_LINT(32))); \
1376 (_oword).eo_u32[2] &= \
1377 __CPU_TO_LE_32(~EFX_SHIFT32(_bit, FIX_LINT(64))); \
1378 (_oword).eo_u32[3] &= \
1379 __CPU_TO_LE_32(~EFX_SHIFT32(_bit, FIX_LINT(96))); \
1380 _NOTE(CONSTANTCONDITION) \
1383 #define EFX_SET_QWORD_BIT64(_qword, _bit) \
1385 _NOTE(CONSTANTCONDITION) \
1386 (_qword).eq_u64[0] |= \
1387 __CPU_TO_LE_64(EFX_SHIFT64(_bit, FIX_LINT(0))); \
1388 _NOTE(CONSTANTCONDITION) \
1391 #define EFX_SET_QWORD_BIT32(_qword, _bit) \
1393 _NOTE(CONSTANTCONDITION) \
1394 (_qword).eq_u32[0] |= \
1395 __CPU_TO_LE_32(EFX_SHIFT32(_bit, FIX_LINT(0))); \
1396 (_qword).eq_u32[1] |= \
1397 __CPU_TO_LE_32(EFX_SHIFT32(_bit, FIX_LINT(32))); \
1398 _NOTE(CONSTANTCONDITION) \
1401 #define EFX_CLEAR_QWORD_BIT64(_qword, _bit) \
1403 _NOTE(CONSTANTCONDITION) \
1404 (_qword).eq_u64[0] &= \
1405 __CPU_TO_LE_64(~EFX_SHIFT64(_bit, FIX_LINT(0))); \
1406 _NOTE(CONSTANTCONDITION) \
1409 #define EFX_CLEAR_QWORD_BIT32(_qword, _bit) \
1411 _NOTE(CONSTANTCONDITION) \
1412 (_qword).eq_u32[0] &= \
1413 __CPU_TO_LE_32(~EFX_SHIFT32(_bit, FIX_LINT(0))); \
1414 (_qword).eq_u32[1] &= \
1415 __CPU_TO_LE_32(~EFX_SHIFT32(_bit, FIX_LINT(32))); \
1416 _NOTE(CONSTANTCONDITION) \
1419 #define EFX_SET_DWORD_BIT(_dword, _bit) \
1421 (_dword).ed_u32[0] |= \
1422 __CPU_TO_LE_32(EFX_SHIFT32(_bit, FIX_LINT(0))); \
1423 _NOTE(CONSTANTCONDITION) \
1426 #define EFX_CLEAR_DWORD_BIT(_dword, _bit) \
1428 (_dword).ed_u32[0] &= \
1429 __CPU_TO_LE_32(~EFX_SHIFT32(_bit, FIX_LINT(0))); \
1430 _NOTE(CONSTANTCONDITION) \
1433 #define EFX_SET_WORD_BIT(_word, _bit) \
1435 (_word).ew_u16[0] |= \
1436 __CPU_TO_LE_16(EFX_SHIFT16(_bit, FIX_LINT(0))); \
1437 _NOTE(CONSTANTCONDITION) \
1440 #define EFX_CLEAR_WORD_BIT(_word, _bit) \
1442 (_word).ew_u32[0] &= \
1443 __CPU_TO_LE_16(~EFX_SHIFT16(_bit, FIX_LINT(0))); \
1444 _NOTE(CONSTANTCONDITION) \
1447 #define EFX_SET_BYTE_BIT(_byte, _bit) \
1449 (_byte).eb_u8[0] |= \
1450 __NATIVE_8(EFX_SHIFT8(_bit, FIX_LINT(0))); \
1451 _NOTE(CONSTANTCONDITION) \
1454 #define EFX_CLEAR_BYTE_BIT(_byte, _bit) \
1456 (_byte).eb_u8[0] &= \
1457 __NATIVE_8(~EFX_SHIFT8(_bit, FIX_LINT(0))); \
1458 _NOTE(CONSTANTCONDITION) \
1461 #define EFX_OR_OWORD64(_oword1, _oword2) \
1463 (_oword1).eo_u64[0] |= (_oword2).eo_u64[0]; \
1464 (_oword1).eo_u64[1] |= (_oword2).eo_u64[1]; \
1465 _NOTE(CONSTANTCONDITION) \
1468 #define EFX_OR_OWORD32(_oword1, _oword2) \
1470 (_oword1).eo_u32[0] |= (_oword2).eo_u32[0]; \
1471 (_oword1).eo_u32[1] |= (_oword2).eo_u32[1]; \
1472 (_oword1).eo_u32[2] |= (_oword2).eo_u32[2]; \
1473 (_oword1).eo_u32[3] |= (_oword2).eo_u32[3]; \
1474 _NOTE(CONSTANTCONDITION) \
1477 #define EFX_AND_OWORD64(_oword1, _oword2) \
1479 (_oword1).eo_u64[0] &= (_oword2).eo_u64[0]; \
1480 (_oword1).eo_u64[1] &= (_oword2).eo_u64[1]; \
1481 _NOTE(CONSTANTCONDITION) \
1484 #define EFX_AND_OWORD32(_oword1, _oword2) \
1486 (_oword1).eo_u32[0] &= (_oword2).eo_u32[0]; \
1487 (_oword1).eo_u32[1] &= (_oword2).eo_u32[1]; \
1488 (_oword1).eo_u32[2] &= (_oword2).eo_u32[2]; \
1489 (_oword1).eo_u32[3] &= (_oword2).eo_u32[3]; \
1490 _NOTE(CONSTANTCONDITION) \
1493 #define EFX_OR_QWORD64(_qword1, _qword2) \
1495 (_qword1).eq_u64[0] |= (_qword2).eq_u64[0]; \
1496 _NOTE(CONSTANTCONDITION) \
1499 #define EFX_OR_QWORD32(_qword1, _qword2) \
1501 (_qword1).eq_u32[0] |= (_qword2).eq_u32[0]; \
1502 (_qword1).eq_u32[1] |= (_qword2).eq_u32[1]; \
1503 _NOTE(CONSTANTCONDITION) \
1506 #define EFX_AND_QWORD64(_qword1, _qword2) \
1508 (_qword1).eq_u64[0] &= (_qword2).eq_u64[0]; \
1509 _NOTE(CONSTANTCONDITION) \
1512 #define EFX_AND_QWORD32(_qword1, _qword2) \
1514 (_qword1).eq_u32[0] &= (_qword2).eq_u32[0]; \
1515 (_qword1).eq_u32[1] &= (_qword2).eq_u32[1]; \
1516 _NOTE(CONSTANTCONDITION) \
1519 #define EFX_OR_DWORD(_dword1, _dword2) \
1521 (_dword1).ed_u32[0] |= (_dword2).ed_u32[0]; \
1522 _NOTE(CONSTANTCONDITION) \
1525 #define EFX_AND_DWORD(_dword1, _dword2) \
1527 (_dword1).ed_u32[0] &= (_dword2).ed_u32[0]; \
1528 _NOTE(CONSTANTCONDITION) \
1531 #define EFX_OR_WORD(_word1, _word2) \
1533 (_word1).ew_u16[0] |= (_word2).ew_u16[0]; \
1534 _NOTE(CONSTANTCONDITION) \
1537 #define EFX_AND_WORD(_word1, _word2) \
1539 (_word1).ew_u16[0] &= (_word2).ew_u16[0]; \
1540 _NOTE(CONSTANTCONDITION) \
1543 #define EFX_OR_BYTE(_byte1, _byte2) \
1545 (_byte1).eb_u8[0] &= (_byte2).eb_u8[0]; \
1546 _NOTE(CONSTANTCONDITION) \
1549 #define EFX_AND_BYTE(_byte1, _byte2) \
1551 (_byte1).eb_u8[0] &= (_byte2).eb_u8[0]; \
1552 _NOTE(CONSTANTCONDITION) \
1555 #if EFSYS_USE_UINT64
1556 #define EFX_OWORD_FIELD EFX_OWORD_FIELD64
1557 #define EFX_QWORD_FIELD EFX_QWORD_FIELD64
1558 #define EFX_OWORD_IS_EQUAL EFX_OWORD_IS_EQUAL64
1559 #define EFX_QWORD_IS_EQUAL EFX_QWORD_IS_EQUAL64
1560 #define EFX_OWORD_IS_ZERO EFX_OWORD_IS_ZERO64
1561 #define EFX_QWORD_IS_ZERO EFX_QWORD_IS_ZERO64
1562 #define EFX_OWORD_IS_SET EFX_OWORD_IS_SET64
1563 #define EFX_QWORD_IS_SET EFX_QWORD_IS_SET64
1564 #define EFX_POPULATE_OWORD EFX_POPULATE_OWORD64
1565 #define EFX_POPULATE_QWORD EFX_POPULATE_QWORD64
1566 #define EFX_SET_OWORD EFX_SET_OWORD64
1567 #define EFX_SET_QWORD EFX_SET_QWORD64
1568 #define EFX_SET_OWORD_FIELD EFX_SET_OWORD_FIELD64
1569 #define EFX_SET_QWORD_FIELD EFX_SET_QWORD_FIELD64
1570 #define EFX_SET_OWORD_BIT EFX_SET_OWORD_BIT64
1571 #define EFX_CLEAR_OWORD_BIT EFX_CLEAR_OWORD_BIT64
1572 #define EFX_SET_QWORD_BIT EFX_SET_QWORD_BIT64
1573 #define EFX_CLEAR_QWORD_BIT EFX_CLEAR_QWORD_BIT64
1574 #define EFX_OR_OWORD EFX_OR_OWORD64
1575 #define EFX_AND_OWORD EFX_AND_OWORD64
1576 #define EFX_OR_QWORD EFX_OR_QWORD64
1577 #define EFX_AND_QWORD EFX_OR_QWORD64
1579 #define EFX_OWORD_FIELD EFX_OWORD_FIELD32
1580 #define EFX_QWORD_FIELD EFX_QWORD_FIELD32
1581 #define EFX_OWORD_IS_EQUAL EFX_OWORD_IS_EQUAL32
1582 #define EFX_QWORD_IS_EQUAL EFX_QWORD_IS_EQUAL32
1583 #define EFX_OWORD_IS_ZERO EFX_OWORD_IS_ZERO32
1584 #define EFX_QWORD_IS_ZERO EFX_QWORD_IS_ZERO32
1585 #define EFX_OWORD_IS_SET EFX_OWORD_IS_SET32
1586 #define EFX_QWORD_IS_SET EFX_QWORD_IS_SET32
1587 #define EFX_POPULATE_OWORD EFX_POPULATE_OWORD32
1588 #define EFX_POPULATE_QWORD EFX_POPULATE_QWORD32
1589 #define EFX_SET_OWORD EFX_SET_OWORD32
1590 #define EFX_SET_QWORD EFX_SET_QWORD32
1591 #define EFX_SET_OWORD_FIELD EFX_SET_OWORD_FIELD32
1592 #define EFX_SET_QWORD_FIELD EFX_SET_QWORD_FIELD32
1593 #define EFX_SET_OWORD_BIT EFX_SET_OWORD_BIT32
1594 #define EFX_CLEAR_OWORD_BIT EFX_CLEAR_OWORD_BIT32
1595 #define EFX_SET_QWORD_BIT EFX_SET_QWORD_BIT32
1596 #define EFX_CLEAR_QWORD_BIT EFX_CLEAR_QWORD_BIT32
1597 #define EFX_OR_OWORD EFX_OR_OWORD32
1598 #define EFX_AND_OWORD EFX_AND_OWORD32
1599 #define EFX_OR_QWORD EFX_OR_QWORD32
1600 #define EFX_AND_QWORD EFX_OR_QWORD32
1607 #endif /* _SYS_EFX_TYPES_H */