202 lines
5.7 KiB
Diff
202 lines
5.7 KiB
Diff
From d6164056687c7cd8ab664995c7a386c257a6b5a3 Mon Sep 17 00:00:00 2001
|
|
From: Andrew Lunn <andrew@lunn.ch>
|
|
Date: Sat, 29 Sep 2018 23:04:09 +0200
|
|
Subject: [PATCH 005/283] net: phy: Move linkmode helpers to somewhere public
|
|
|
|
mainline inclusion
|
|
from mainline-v4.20-rc1
|
|
commit b31cdffa2329fe330cd304ca26c250dd1520fb0a
|
|
category: feature
|
|
bugzilla: https://gitee.com/src-openeuler/kernel/issues/I8EJ0A
|
|
|
|
Reference: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=b31cdffa2329fe330cd304ca26c250dd1520fb0a
|
|
|
|
--------------------------------
|
|
|
|
phylink has some useful helpers to working with linkmode bitmaps.
|
|
Move them to there own header so other code can use them.
|
|
|
|
Signed-off-by: Andrew Lunn <andrew@lunn.ch>
|
|
Acked-by: Florian Fainelli <f.fainelli@gmail.com>
|
|
Reviewed-by: Maxime Chevallier <maxime.chevallier@bootlin.com>
|
|
Signed-off-by: David S. Miller <davem@davemloft.net>
|
|
Signed-off-by: Xiaodong Li <lixiaodong67@huawei.com>
|
|
---
|
|
drivers/net/ethernet/hisilicon/hns3/kcompat.h | 20 ------
|
|
drivers/net/phy/phylink.c | 27 --------
|
|
include/linux/linkmode.h | 67 +++++++++++++++++++
|
|
include/linux/mii.h | 1 +
|
|
include/linux/phy.h | 1 +
|
|
5 files changed, 69 insertions(+), 47 deletions(-)
|
|
create mode 100644 include/linux/linkmode.h
|
|
|
|
diff --git a/drivers/net/ethernet/hisilicon/hns3/kcompat.h b/drivers/net/ethernet/hisilicon/hns3/kcompat.h
|
|
index 5cf3a35ca607..8b5de09fa7f7 100644
|
|
--- a/drivers/net/ethernet/hisilicon/hns3/kcompat.h
|
|
+++ b/drivers/net/ethernet/hisilicon/hns3/kcompat.h
|
|
@@ -383,26 +383,6 @@ static inline __must_check size_t array3_size(size_t a, size_t b, size_t c)
|
|
|
|
#include <linux/bitmap.h>
|
|
|
|
-static inline void linkmode_set_bit(int nr, volatile unsigned long *addr)
|
|
-{
|
|
- __set_bit(nr, addr);
|
|
-}
|
|
-
|
|
-static inline void linkmode_copy(unsigned long *dst, const unsigned long *src)
|
|
-{
|
|
- bitmap_copy(dst, src, __ETHTOOL_LINK_MODE_MASK_NBITS);
|
|
-}
|
|
-
|
|
-static inline void linkmode_clear_bit(int nr, volatile unsigned long *addr)
|
|
-{
|
|
- __clear_bit(nr, addr);
|
|
-}
|
|
-
|
|
-static inline void linkmode_zero(unsigned long *dst)
|
|
-{
|
|
- bitmap_zero(dst, __ETHTOOL_LINK_MODE_MASK_NBITS);
|
|
-}
|
|
-
|
|
#else
|
|
|
|
#define HAS_LINK_MODE_OPS
|
|
diff --git a/drivers/net/phy/phylink.c b/drivers/net/phy/phylink.c
|
|
index 723611ac9102..227d5a1ef963 100644
|
|
--- a/drivers/net/phy/phylink.c
|
|
+++ b/drivers/net/phy/phylink.c
|
|
@@ -72,33 +72,6 @@ struct phylink {
|
|
struct sfp_bus *sfp_bus;
|
|
};
|
|
|
|
-static inline void linkmode_zero(unsigned long *dst)
|
|
-{
|
|
- bitmap_zero(dst, __ETHTOOL_LINK_MODE_MASK_NBITS);
|
|
-}
|
|
-
|
|
-static inline void linkmode_copy(unsigned long *dst, const unsigned long *src)
|
|
-{
|
|
- bitmap_copy(dst, src, __ETHTOOL_LINK_MODE_MASK_NBITS);
|
|
-}
|
|
-
|
|
-static inline void linkmode_and(unsigned long *dst, const unsigned long *a,
|
|
- const unsigned long *b)
|
|
-{
|
|
- bitmap_and(dst, a, b, __ETHTOOL_LINK_MODE_MASK_NBITS);
|
|
-}
|
|
-
|
|
-static inline void linkmode_or(unsigned long *dst, const unsigned long *a,
|
|
- const unsigned long *b)
|
|
-{
|
|
- bitmap_or(dst, a, b, __ETHTOOL_LINK_MODE_MASK_NBITS);
|
|
-}
|
|
-
|
|
-static inline bool linkmode_empty(const unsigned long *src)
|
|
-{
|
|
- return bitmap_empty(src, __ETHTOOL_LINK_MODE_MASK_NBITS);
|
|
-}
|
|
-
|
|
/**
|
|
* phylink_set_port_modes() - set the port type modes in the ethtool mask
|
|
* @mask: ethtool link mode mask
|
|
diff --git a/include/linux/linkmode.h b/include/linux/linkmode.h
|
|
new file mode 100644
|
|
index 000000000000..014fb86c7114
|
|
--- /dev/null
|
|
+++ b/include/linux/linkmode.h
|
|
@@ -0,0 +1,67 @@
|
|
+#ifndef __LINKMODE_H
|
|
+#define __LINKMODE_H
|
|
+
|
|
+#include <linux/bitmap.h>
|
|
+#include <linux/ethtool.h>
|
|
+#include <uapi/linux/ethtool.h>
|
|
+
|
|
+static inline void linkmode_zero(unsigned long *dst)
|
|
+{
|
|
+ bitmap_zero(dst, __ETHTOOL_LINK_MODE_MASK_NBITS);
|
|
+}
|
|
+
|
|
+static inline void linkmode_copy(unsigned long *dst, const unsigned long *src)
|
|
+{
|
|
+ bitmap_copy(dst, src, __ETHTOOL_LINK_MODE_MASK_NBITS);
|
|
+}
|
|
+
|
|
+static inline void linkmode_and(unsigned long *dst, const unsigned long *a,
|
|
+ const unsigned long *b)
|
|
+{
|
|
+ bitmap_and(dst, a, b, __ETHTOOL_LINK_MODE_MASK_NBITS);
|
|
+}
|
|
+
|
|
+static inline void linkmode_or(unsigned long *dst, const unsigned long *a,
|
|
+ const unsigned long *b)
|
|
+{
|
|
+ bitmap_or(dst, a, b, __ETHTOOL_LINK_MODE_MASK_NBITS);
|
|
+}
|
|
+
|
|
+static inline bool linkmode_empty(const unsigned long *src)
|
|
+{
|
|
+ return bitmap_empty(src, __ETHTOOL_LINK_MODE_MASK_NBITS);
|
|
+}
|
|
+
|
|
+static inline int linkmode_andnot(unsigned long *dst, const unsigned long *src1,
|
|
+ const unsigned long *src2)
|
|
+{
|
|
+ return bitmap_andnot(dst, src1, src2, __ETHTOOL_LINK_MODE_MASK_NBITS);
|
|
+}
|
|
+
|
|
+static inline void linkmode_set_bit(int nr, volatile unsigned long *addr)
|
|
+{
|
|
+ __set_bit(nr, addr);
|
|
+}
|
|
+
|
|
+static inline void linkmode_clear_bit(int nr, volatile unsigned long *addr)
|
|
+{
|
|
+ __clear_bit(nr, addr);
|
|
+}
|
|
+
|
|
+static inline void linkmode_change_bit(int nr, volatile unsigned long *addr)
|
|
+{
|
|
+ __change_bit(nr, addr);
|
|
+}
|
|
+
|
|
+static inline int linkmode_test_bit(int nr, volatile unsigned long *addr)
|
|
+{
|
|
+ return test_bit(nr, addr);
|
|
+}
|
|
+
|
|
+static inline int linkmode_equal(const unsigned long *src1,
|
|
+ const unsigned long *src2)
|
|
+{
|
|
+ return bitmap_equal(src1, src2, __ETHTOOL_LINK_MODE_MASK_NBITS);
|
|
+}
|
|
+
|
|
+#endif /* __LINKMODE_H */
|
|
diff --git a/include/linux/mii.h b/include/linux/mii.h
|
|
index 55000ee5c6ad..567047ef0309 100644
|
|
--- a/include/linux/mii.h
|
|
+++ b/include/linux/mii.h
|
|
@@ -10,6 +10,7 @@
|
|
|
|
|
|
#include <linux/if.h>
|
|
+#include <linux/linkmode.h>
|
|
#include <uapi/linux/mii.h>
|
|
|
|
struct ethtool_cmd;
|
|
diff --git a/include/linux/phy.h b/include/linux/phy.h
|
|
index cd6f637cbbfb..81532a61e995 100644
|
|
--- a/include/linux/phy.h
|
|
+++ b/include/linux/phy.h
|
|
@@ -19,6 +19,7 @@
|
|
#include <linux/compiler.h>
|
|
#include <linux/spinlock.h>
|
|
#include <linux/ethtool.h>
|
|
+#include <linux/linkmode.h>
|
|
#include <linux/mdio.h>
|
|
#include <linux/mii.h>
|
|
#include <linux/module.h>
|
|
--
|
|
2.34.1
|
|
|