1 /*- 2 * BSD LICENSE 3 * 4 * Copyright 2017 NXP. 5 * 6 * Redistribution and use in source and binary forms, with or without 7 * modification, are permitted provided that the following conditions 8 * are met: 9 * 10 * * Redistributions of source code must retain the above copyright 11 * notice, this list of conditions and the following disclaimer. 12 * * Redistributions in binary form must reproduce the above copyright 13 * notice, this list of conditions and the following disclaimer in 14 * the documentation and/or other materials provided with the 15 * distribution. 16 * * Neither the name of NXP nor the names of its 17 * contributors may be used to endorse or promote products derived 18 * from this software without specific prior written permission. 19 * 20 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 21 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 22 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 23 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 24 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 25 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 26 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 27 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 28 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 29 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 30 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 31 */ 32 33 #ifndef __DPAA_BITS_H 34 #define __DPAA_BITS_H 35 36 /* Bitfield stuff. */ 37 #define BITS_PER_ULONG (sizeof(unsigned long) << 3) 38 #define SHIFT_PER_ULONG (((1 << 5) == BITS_PER_ULONG) ? 5 : 6) 39 #define BITS_MASK(idx) (1UL << ((idx) & (BITS_PER_ULONG - 1))) 40 #define BITS_IDX(idx) ((idx) >> SHIFT_PER_ULONG) 41 42 static inline void dpaa_set_bits(unsigned long mask, 43 volatile unsigned long *p) 44 { 45 *p |= mask; 46 } 47 48 static inline void dpaa_set_bit(int idx, volatile unsigned long *bits) 49 { 50 dpaa_set_bits(BITS_MASK(idx), bits + BITS_IDX(idx)); 51 } 52 53 static inline void dpaa_clear_bits(unsigned long mask, 54 volatile unsigned long *p) 55 { 56 *p &= ~mask; 57 } 58 59 static inline void dpaa_clear_bit(int idx, 60 volatile unsigned long *bits) 61 { 62 dpaa_clear_bits(BITS_MASK(idx), bits + BITS_IDX(idx)); 63 } 64 65 #endif /* __DPAA_BITS_H */ 66