root/drivers/net/ethernet/aquantia/atlantic/aq_utils.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


DEFINITIONS

This source file includes following definitions.
  1. aq_utils_obj_set
  2. aq_utils_obj_clear
  3. aq_utils_obj_test

   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 static inline void aq_utils_obj_set(atomic_t *flags, u32 mask)
  15 {
  16         unsigned long flags_old, flags_new;
  17 
  18         do {
  19                 flags_old = atomic_read(flags);
  20                 flags_new = flags_old | (mask);
  21         } while (atomic_cmpxchg(flags, flags_old, flags_new) != flags_old);
  22 }
  23 
  24 static inline void aq_utils_obj_clear(atomic_t *flags, u32 mask)
  25 {
  26         unsigned long flags_old, flags_new;
  27 
  28         do {
  29                 flags_old = atomic_read(flags);
  30                 flags_new = flags_old & ~(mask);
  31         } while (atomic_cmpxchg(flags, flags_old, flags_new) != flags_old);
  32 }
  33 
  34 static inline bool aq_utils_obj_test(atomic_t *flags, u32 mask)
  35 {
  36         return atomic_read(flags) & mask;
  37 }
  38 
  39 #endif /* AQ_UTILS_H */

/* [<][>][^][v][top][bottom][index][help] */