1 #ifndef __LINKMODE_H 2 #define __LINKMODE_H 3 4 #include <linux/bitmap.h> 5 6 static inline void linkmode_set_bit(int nr, volatile unsigned long *addr) 7 { 8 __set_bit(nr, addr); 9 } 10 11 static inline void linkmode_set_bit_array(const int *array, int array_size, 12 unsigned long *addr) 13 { 14 int i; 15 16 for (i = 0; i < array_size; i++) 17 linkmode_set_bit(array[i], addr); 18 } 19 20 #include <linux/ethtool.h> 21 #include <uapi/linux/ethtool.h> 22 23 static inline void linkmode_zero(unsigned long *dst) 24 { 25 bitmap_zero(dst, __ETHTOOL_LINK_MODE_MASK_NBITS); 26 } 27 28 static inline void linkmode_copy(unsigned long *dst, const unsigned long *src) 29 { 30 bitmap_copy(dst, src, __ETHTOOL_LINK_MODE_MASK_NBITS); 31 } 32 33 static inline void linkmode_and(unsigned long *dst, const unsigned long *a, 34 const unsigned long *b) 35 { 36 bitmap_and(dst, a, b, __ETHTOOL_LINK_MODE_MASK_NBITS); 37 } 38 39 static inline void linkmode_or(unsigned long *dst, const unsigned long *a, 40 const unsigned long *b) 41 { 42 bitmap_or(dst, a, b, __ETHTOOL_LINK_MODE_MASK_NBITS); 43 } 44 45 static inline bool linkmode_empty(const unsigned long *src) 46 { 47 return bitmap_empty(src, __ETHTOOL_LINK_MODE_MASK_NBITS); 48 } 49 50 static inline int linkmode_andnot(unsigned long *dst, const unsigned long *src1, 51 const unsigned long *src2) 52 { 53 return bitmap_andnot(dst, src1, src2, __ETHTOOL_LINK_MODE_MASK_NBITS); 54 } 55 56 static inline void linkmode_clear_bit(int nr, volatile unsigned long *addr) 57 { 58 __clear_bit(nr, addr); 59 } 60 61 static inline void linkmode_mod_bit(int nr, volatile unsigned long *addr, 62 int set) 63 { 64 if (set) 65 linkmode_set_bit(nr, addr); 66 else 67 linkmode_clear_bit(nr, addr); 68 } 69 70 static inline int linkmode_test_bit(int nr, const volatile unsigned long *addr) 71 { 72 return test_bit(nr, addr); 73 } 74 75 static inline int linkmode_equal(const unsigned long *src1, 76 const unsigned long *src2) 77 { 78 return bitmap_equal(src1, src2, __ETHTOOL_LINK_MODE_MASK_NBITS); 79 } 80 81 static inline int linkmode_intersects(const unsigned long *src1, 82 const unsigned long *src2) 83 { 84 return bitmap_intersects(src1, src2, __ETHTOOL_LINK_MODE_MASK_NBITS); 85 } 86 87 static inline int linkmode_subset(const unsigned long *src1, 88 const unsigned long *src2) 89 { 90 return bitmap_subset(src1, src2, __ETHTOOL_LINK_MODE_MASK_NBITS); 91 } 92 93 void linkmode_resolve_pause(const unsigned long *local_adv, 94 const unsigned long *partner_adv, 95 bool *tx_pause, bool *rx_pause); 96 97 void linkmode_set_pause(unsigned long *advertisement, bool tx, bool rx); 98 99 #endif /* __LINKMODE_H */ 100