Back to home page

OSCL-LXR

 
 

    


0001 #ifndef __LINKMODE_H
0002 #define __LINKMODE_H
0003 
0004 #include <linux/bitmap.h>
0005 #include <linux/ethtool.h>
0006 #include <uapi/linux/ethtool.h>
0007 
0008 static inline void linkmode_zero(unsigned long *dst)
0009 {
0010     bitmap_zero(dst, __ETHTOOL_LINK_MODE_MASK_NBITS);
0011 }
0012 
0013 static inline void linkmode_copy(unsigned long *dst, const unsigned long *src)
0014 {
0015     bitmap_copy(dst, src, __ETHTOOL_LINK_MODE_MASK_NBITS);
0016 }
0017 
0018 static inline void linkmode_and(unsigned long *dst, const unsigned long *a,
0019                 const unsigned long *b)
0020 {
0021     bitmap_and(dst, a, b, __ETHTOOL_LINK_MODE_MASK_NBITS);
0022 }
0023 
0024 static inline void linkmode_or(unsigned long *dst, const unsigned long *a,
0025                 const unsigned long *b)
0026 {
0027     bitmap_or(dst, a, b, __ETHTOOL_LINK_MODE_MASK_NBITS);
0028 }
0029 
0030 static inline bool linkmode_empty(const unsigned long *src)
0031 {
0032     return bitmap_empty(src, __ETHTOOL_LINK_MODE_MASK_NBITS);
0033 }
0034 
0035 static inline int linkmode_andnot(unsigned long *dst, const unsigned long *src1,
0036                   const unsigned long *src2)
0037 {
0038     return bitmap_andnot(dst, src1, src2,  __ETHTOOL_LINK_MODE_MASK_NBITS);
0039 }
0040 
0041 static inline void linkmode_set_bit(int nr, volatile unsigned long *addr)
0042 {
0043     __set_bit(nr, addr);
0044 }
0045 
0046 static inline void linkmode_set_bit_array(const int *array, int array_size,
0047                       unsigned long *addr)
0048 {
0049     int i;
0050 
0051     for (i = 0; i < array_size; i++)
0052         linkmode_set_bit(array[i], addr);
0053 }
0054 
0055 static inline void linkmode_clear_bit(int nr, volatile unsigned long *addr)
0056 {
0057     __clear_bit(nr, addr);
0058 }
0059 
0060 static inline void linkmode_mod_bit(int nr, volatile unsigned long *addr,
0061                     int set)
0062 {
0063     if (set)
0064         linkmode_set_bit(nr, addr);
0065     else
0066         linkmode_clear_bit(nr, addr);
0067 }
0068 
0069 static inline int linkmode_test_bit(int nr, const volatile unsigned long *addr)
0070 {
0071     return test_bit(nr, addr);
0072 }
0073 
0074 static inline int linkmode_equal(const unsigned long *src1,
0075                  const unsigned long *src2)
0076 {
0077     return bitmap_equal(src1, src2, __ETHTOOL_LINK_MODE_MASK_NBITS);
0078 }
0079 
0080 static inline int linkmode_intersects(const unsigned long *src1,
0081                       const unsigned long *src2)
0082 {
0083     return bitmap_intersects(src1, src2, __ETHTOOL_LINK_MODE_MASK_NBITS);
0084 }
0085 
0086 static inline int linkmode_subset(const unsigned long *src1,
0087                   const unsigned long *src2)
0088 {
0089     return bitmap_subset(src1, src2, __ETHTOOL_LINK_MODE_MASK_NBITS);
0090 }
0091 
0092 void linkmode_resolve_pause(const unsigned long *local_adv,
0093                 const unsigned long *partner_adv,
0094                 bool *tx_pause, bool *rx_pause);
0095 
0096 void linkmode_set_pause(unsigned long *advertisement, bool tx, bool rx);
0097 
0098 #endif /* __LINKMODE_H */