]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
wifi: wext/libipw: move spy implementation to libipw
authorJohannes Berg <johannes.berg@intel.com>
Mon, 7 Oct 2024 19:02:53 +0000 (21:02 +0200)
committerJohannes Berg <johannes.berg@intel.com>
Tue, 8 Oct 2024 19:53:18 +0000 (21:53 +0200)
There's no driver left using this other than ipw2200,
so move the data bookkeeping and code into libipw.

Link: https://patch.msgid.link/20241007210254.037d864cda7d.Ib2197cb056ff05746d3521a5fba637062acb7314@changeid
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
drivers/net/wireless/intel/ipw2x00/Kconfig
drivers/net/wireless/intel/ipw2x00/Makefile
drivers/net/wireless/intel/ipw2x00/ipw2200.c
drivers/net/wireless/intel/ipw2x00/libipw.h
drivers/net/wireless/intel/ipw2x00/libipw_rx.c
drivers/net/wireless/intel/ipw2x00/libipw_spy.c [moved from net/wireless/wext-spy.c with 81% similarity]
include/net/iw_handler.h
net/wireless/Kconfig
net/wireless/Makefile

index d9c042772399978303e698d223b142bdf293920e..ce34118f1e9011286b386c052fcfbc815c3bc8a2 100644 (file)
@@ -7,7 +7,6 @@ config IPW2100
        tristate "Intel PRO/Wireless 2100 Network Connection"
        depends on PCI && CFG80211
        select WIRELESS_EXT
-       select WEXT_SPY
        select WEXT_PRIV
        select FW_LOADER
        select LIBIPW
@@ -68,7 +67,6 @@ config IPW2200
        depends on PCI && CFG80211
        select CFG80211_WEXT_EXPORT
        select WIRELESS_EXT
-       select WEXT_SPY
        select WEXT_PRIV
        select FW_LOADER
        select LIBIPW
@@ -156,7 +154,6 @@ config LIBIPW
        tristate
        depends on PCI && CFG80211
        select WIRELESS_EXT
-       select WEXT_SPY
        select CRYPTO
        select CRYPTO_MICHAEL_MIC
        select CRC32
index 60c5faccbe1548285165a291fd3ca321f9347bc5..91e6091c4ebf116c83aa9620fec95fb6031d878c 100644 (file)
@@ -13,6 +13,7 @@ libipw-objs := \
        libipw_rx.o \
        libipw_wx.o \
        libipw_geo.o \
+       libipw_spy.o \
        libipw_crypto.o \
        libipw_crypto_ccmp.o \
        libipw_crypto_tkip.o \
index f4fd1fc784b77c7d5081cb67c224284f0f87cbd3..0008b4615731b7c65ba5458783b66fe6d3129a60 100644 (file)
@@ -9856,10 +9856,10 @@ static iw_handler ipw_wx_handlers[] = {
        IW_HANDLER(SIOCGIWENCODE, ipw_wx_get_encode),
        IW_HANDLER(SIOCSIWPOWER, ipw_wx_set_power),
        IW_HANDLER(SIOCGIWPOWER, ipw_wx_get_power),
-       IW_HANDLER(SIOCSIWSPY, iw_handler_set_spy),
-       IW_HANDLER(SIOCGIWSPY, iw_handler_get_spy),
-       IW_HANDLER(SIOCSIWTHRSPY, iw_handler_set_thrspy),
-       IW_HANDLER(SIOCGIWTHRSPY, iw_handler_get_thrspy),
+       IW_HANDLER(SIOCSIWSPY, ipw_wx_set_spy),
+       IW_HANDLER(SIOCGIWSPY, ipw_wx_get_spy),
+       IW_HANDLER(SIOCSIWTHRSPY, ipw_wx_set_thrspy),
+       IW_HANDLER(SIOCGIWTHRSPY, ipw_wx_get_thrspy),
        IW_HANDLER(SIOCSIWGENIE, ipw_wx_set_genie),
        IW_HANDLER(SIOCGIWGENIE, ipw_wx_get_genie),
        IW_HANDLER(SIOCSIWMLME, ipw_wx_set_mlme),
@@ -11636,7 +11636,7 @@ static int ipw_pci_probe(struct pci_dev *pdev,
        priv->ieee->worst_rssi = -85;
 
        net_dev->netdev_ops = &ipw_netdev_ops;
-       priv->wireless_data.spy_data = &priv->ieee->spy_data;
+       priv->ieee->spy_enabled = true;
        net_dev->wireless_data = &priv->wireless_data;
        net_dev->wireless_handlers = &ipw_wx_handler_def;
        net_dev->ethtool_ops = &ipw_ethtool_ops;
index bc727c99ff3c9faf59b2163119669718d66a5c4e..3c20353e5a41237f4f618c99eb3bac9d2f5e07b9 100644 (file)
@@ -788,6 +788,7 @@ struct libipw_device {
 
        int iw_mode;            /* operating mode (IW_MODE_*) */
        struct iw_spy_data spy_data;    /* iwspy support */
+       bool spy_enabled;
 
        spinlock_t lock;
 
@@ -1083,4 +1084,16 @@ void libipw_crypto_tkip_exit(void);
 void libipw_crypto_ccmp_exit(void);
 void libipw_crypto_exit(void);
 
+
+int ipw_wx_set_spy(struct net_device *dev, struct iw_request_info *info,
+                  union iwreq_data *wrqu, char *extra);
+int ipw_wx_get_spy(struct net_device *dev, struct iw_request_info *info,
+                  union iwreq_data *wrqu, char *extra);
+int ipw_wx_set_thrspy(struct net_device *dev, struct iw_request_info *info,
+                     union iwreq_data *wrqu, char *extra);
+int ipw_wx_get_thrspy(struct net_device *dev, struct iw_request_info *info,
+                     union iwreq_data *wrqu, char *extra);
+void libipw_spy_update(struct net_device *dev, unsigned char *address,
+                      struct iw_quality *wstats);
+
 #endif                         /* LIBIPW_H */
index 1fe05e73a17ca45e6ca0767054ae1257ecd8837b..7e41cb7bbfe017225fd55da8896cb35a0e034c13 100644 (file)
@@ -393,7 +393,7 @@ int libipw_rx(struct libipw_device *ieee, struct sk_buff *skb,
                        wstats.updated |= IW_QUAL_QUAL_INVALID;
 
                /* Update spy records */
-               wireless_spy_update(ieee->dev, hdr->addr2, &wstats);
+               libipw_spy_update(ieee->dev, hdr->addr2, &wstats);
        }
 #endif                         /* IW_WIRELESS_SPY */
 #endif                         /* CONFIG_WIRELESS_EXT */
similarity index 81%
rename from net/wireless/wext-spy.c
rename to drivers/net/wireless/intel/ipw2x00/libipw_spy.c
index b379a03716539764e5c708f132dae17632bcc3e9..979aeb10aeeb4107feb41ea6ed771a2ede8eb5a3 100644 (file)
 #include <net/iw_handler.h>
 #include <net/arp.h>
 #include <net/wext.h>
+#include "libipw.h"
 
-static inline struct iw_spy_data *get_spydata(struct net_device *dev)
+static struct iw_spy_data *get_spydata(struct net_device *dev)
 {
-       /* This is the new way */
-       if (dev->wireless_data)
-               return dev->wireless_data->spy_data;
+       if (dev->wireless_data && dev->wireless_data->libipw &&
+           dev->wireless_data->libipw->spy_enabled)
+               return &dev->wireless_data->libipw->spy_data;
        return NULL;
 }
 
-int iw_handler_set_spy(struct net_device *     dev,
-                      struct iw_request_info * info,
-                      union iwreq_data *       wrqu,
-                      char *                   extra)
+int ipw_wx_set_spy(struct net_device *         dev,
+                  struct iw_request_info *     info,
+                  union iwreq_data *           wrqu,
+                  char *                       extra)
 {
        struct iw_spy_data *    spydata = get_spydata(dev);
        struct sockaddr *       address = (struct sockaddr *) extra;
@@ -36,15 +37,15 @@ int iw_handler_set_spy(struct net_device *  dev,
                return -EOPNOTSUPP;
 
        /* Disable spy collection while we copy the addresses.
-        * While we copy addresses, any call to wireless_spy_update()
+        * While we copy addresses, any call to libipw_spy_update()
         * will NOP. This is OK, as anyway the addresses are changing. */
        spydata->spy_number = 0;
 
-       /* We want to operate without locking, because wireless_spy_update()
+       /* We want to operate without locking, because libipw_spy_update()
         * most likely will happen in the interrupt handler, and therefore
         * have its own locking constraints and needs performance.
         * The rtnl_lock() make sure we don't race with the other iw_handlers.
-        * This make sure wireless_spy_update() "see" that the spy list
+        * This make sure libipw_spy_update() "see" that the spy list
         * is temporarily disabled. */
        smp_wmb();
 
@@ -69,12 +70,12 @@ int iw_handler_set_spy(struct net_device *  dev,
 
        return 0;
 }
-EXPORT_SYMBOL(iw_handler_set_spy);
+EXPORT_SYMBOL(ipw_wx_set_spy);
 
-int iw_handler_get_spy(struct net_device *     dev,
-                      struct iw_request_info * info,
-                      union iwreq_data *       wrqu,
-                      char *                   extra)
+int ipw_wx_get_spy(struct net_device *         dev,
+                  struct iw_request_info *     info,
+                  union iwreq_data *           wrqu,
+                  char *                       extra)
 {
        struct iw_spy_data *    spydata = get_spydata(dev);
        struct sockaddr *       address = (struct sockaddr *) extra;
@@ -101,16 +102,16 @@ int iw_handler_get_spy(struct net_device *        dev,
                spydata->spy_stat[i].updated &= ~IW_QUAL_ALL_UPDATED;
        return 0;
 }
-EXPORT_SYMBOL(iw_handler_get_spy);
+EXPORT_SYMBOL(ipw_wx_get_spy);
 
 /*------------------------------------------------------------------*/
 /*
  * Standard Wireless Handler : set spy threshold
  */
-int iw_handler_set_thrspy(struct net_device *  dev,
-                         struct iw_request_info *info,
-                         union iwreq_data *    wrqu,
-                         char *                extra)
+int ipw_wx_set_thrspy(struct net_device *      dev,
+                     struct iw_request_info *  info,
+                     union iwreq_data *        wrqu,
+                     char *                    extra)
 {
        struct iw_spy_data *    spydata = get_spydata(dev);
        struct iw_thrspy *      threshold = (struct iw_thrspy *) extra;
@@ -128,16 +129,16 @@ int iw_handler_set_thrspy(struct net_device *     dev,
 
        return 0;
 }
-EXPORT_SYMBOL(iw_handler_set_thrspy);
+EXPORT_SYMBOL(ipw_wx_set_thrspy);
 
 /*------------------------------------------------------------------*/
 /*
  * Standard Wireless Handler : get spy threshold
  */
-int iw_handler_get_thrspy(struct net_device *  dev,
-                         struct iw_request_info *info,
-                         union iwreq_data *    wrqu,
-                         char *                extra)
+int ipw_wx_get_thrspy(struct net_device *      dev,
+                     struct iw_request_info *  info,
+                     union iwreq_data *        wrqu,
+                     char *                    extra)
 {
        struct iw_spy_data *    spydata = get_spydata(dev);
        struct iw_thrspy *      threshold = (struct iw_thrspy *) extra;
@@ -152,7 +153,7 @@ int iw_handler_get_thrspy(struct net_device *       dev,
 
        return 0;
 }
-EXPORT_SYMBOL(iw_handler_get_thrspy);
+EXPORT_SYMBOL(ipw_wx_get_thrspy);
 
 /*------------------------------------------------------------------*/
 /*
@@ -189,9 +190,9 @@ static void iw_send_thrspy_event(struct net_device *        dev,
  * small, this is good enough. If we wanted to support larger number of
  * spy addresses, we should use something more efficient...
  */
-void wireless_spy_update(struct net_device *   dev,
-                        unsigned char *        address,
-                        struct iw_quality *    wstats)
+void libipw_spy_update(struct net_device *     dev,
+                      unsigned char *          address,
+                      struct iw_quality *      wstats)
 {
        struct iw_spy_data *    spydata = get_spydata(dev);
        int                     i;
@@ -229,4 +230,3 @@ void wireless_spy_update(struct net_device *        dev,
                }
        }
 }
-EXPORT_SYMBOL(wireless_spy_update);
index 7af1082ea9a0cc640fdf0e0e2d7ee4e9910c32bf..a7b502958d27626827ba78c1df021c26d840dafa 100644 (file)
@@ -418,8 +418,6 @@ struct iw_spy_data {
 struct libipw_device;
 /* The struct */
 struct iw_public_data {
-       /* Driver enhanced spy support */
-       struct iw_spy_data *            spy_data;
        /* Legacy structure managed by the ipw2x00-specific IEEE 802.11 layer */
        struct libipw_device *          libipw;
 };
@@ -443,22 +441,6 @@ static inline void wireless_nlevent_flush(void) {}
 /* We may need a function to send a stream of events to user space.
  * More on that later... */
 
-/* Standard handler for SIOCSIWSPY */
-int iw_handler_set_spy(struct net_device *dev, struct iw_request_info *info,
-                      union iwreq_data *wrqu, char *extra);
-/* Standard handler for SIOCGIWSPY */
-int iw_handler_get_spy(struct net_device *dev, struct iw_request_info *info,
-                      union iwreq_data *wrqu, char *extra);
-/* Standard handler for SIOCSIWTHRSPY */
-int iw_handler_set_thrspy(struct net_device *dev, struct iw_request_info *info,
-                         union iwreq_data *wrqu, char *extra);
-/* Standard handler for SIOCGIWTHRSPY */
-int iw_handler_get_thrspy(struct net_device *dev, struct iw_request_info *info,
-                         union iwreq_data *wrqu, char *extra);
-/* Driver call to update spy records */
-void wireless_spy_update(struct net_device *dev, unsigned char *address,
-                        struct iw_quality *wstats);
-
 /************************* INLINE FUNCTIONS *************************/
 /*
  * Function that are so simple that it's more efficient inlining them
index 733c53ad4de51768b0a7218eeedf19207f24c04c..8c8bd8b7570873686038ccd4873d85df6e54d863 100644 (file)
@@ -11,9 +11,6 @@ config WEXT_PROC
        depends on PROC_FS
        depends on WEXT_CORE
 
-config WEXT_SPY
-       bool
-
 config WEXT_PRIV
        bool
 
index 27f211bd9954599d1d9d74efe5c983a61b2a9fd7..62a83faf0e07d089e64674c8c530de49f8e08dea 100644 (file)
@@ -4,7 +4,6 @@ obj-y += tests/
 
 obj-$(CONFIG_WEXT_CORE) += wext-core.o
 obj-$(CONFIG_WEXT_PROC) += wext-proc.o
-obj-$(CONFIG_WEXT_SPY) += wext-spy.o
 obj-$(CONFIG_WEXT_PRIV) += wext-priv.o
 
 cfg80211-y += core.o sysfs.o radiotap.o util.o reg.o scan.o nl80211.o