Branch data Line data Source code
1 : : /* SPDX-License-Identifier: GPL-2.0-only */ 2 : : /* 3 : : * aQuantia Corporation Network Driver 4 : : * Copyright (C) 2014-2017 aQuantia Corporation. All rights reserved 5 : : */ 6 : : 7 : : /* File aq_utils.h: Useful macro and structures used in all layers of driver. */ 8 : : 9 : : #ifndef AQ_UTILS_H 10 : : #define AQ_UTILS_H 11 : : 12 : : #include "aq_common.h" 13 : : 14 : 29 : static inline void aq_utils_obj_set(atomic_t *flags, u32 mask) 15 : : { 16 : 29 : unsigned long flags_old, flags_new; 17 : : 18 : 29 : do { 19 : 29 : flags_old = atomic_read(flags); 20 : 29 : flags_new = flags_old | (mask); 21 [ - + ]: 58 : } while (atomic_cmpxchg(flags, flags_old, flags_new) != flags_old); 22 : 29 : } 23 : : 24 : 28 : static inline void aq_utils_obj_clear(atomic_t *flags, u32 mask) 25 : : { 26 : 28 : unsigned long flags_old, flags_new; 27 : : 28 : 28 : do { 29 : 28 : flags_old = atomic_read(flags); 30 : 28 : flags_new = flags_old & ~(mask); 31 [ - + ]: 56 : } while (atomic_cmpxchg(flags, flags_old, flags_new) != flags_old); 32 : 28 : } 33 : : 34 : 34193 : static inline bool aq_utils_obj_test(atomic_t *flags, u32 mask) 35 : : { 36 [ + + ]: 19385 : return atomic_read(flags) & mask; 37 : : } 38 : : 39 : : #endif /* AQ_UTILS_H */