Signed-off-by: Mike McCormack <[email protected]>
---
 drivers/staging/rtl8192e/ieee80211/ieee80211.h     |   18 +++++++-----------
 .../staging/rtl8192e/ieee80211/ieee80211_module.c  |    4 ++--
 .../staging/rtl8192e/ieee80211/ieee80211_softmac.c |    4 ++--
 drivers/staging/rtl8192e/r8192E_core.c             |    9 ++++++---
 drivers/staging/rtl8192e/r819xE_cmdpkt.c           |    2 +-
 drivers/staging/rtl8192e/r819xE_firmware.c         |    2 +-
 6 files changed, 19 insertions(+), 20 deletions(-)

diff --git a/drivers/staging/rtl8192e/ieee80211/ieee80211.h 
b/drivers/staging/rtl8192e/ieee80211/ieee80211.h
index 3ca3881..ec45854 100644
--- a/drivers/staging/rtl8192e/ieee80211/ieee80211.h
+++ b/drivers/staging/rtl8192e/ieee80211/ieee80211.h
@@ -1793,8 +1793,14 @@ typedef enum _HW_VARIABLES{
 
 #define RT_CHECK_FOR_HANG_PERIOD 2
 
+/* partial clone of mac80211's ieee80211_ops struct */
+struct ieee80211_ops {
+       int (*tx)(struct ieee80211_device *hw, struct sk_buff *skb);
+};
+
 struct ieee80211_device {
        struct net_device *dev;
+       const struct ieee80211_ops *ops;
         struct ieee80211_security sec;
 
        bool    need_sw_enc;
@@ -2116,16 +2122,6 @@ struct ieee80211_device {
                                   struct ieee80211_network * network, u16 
type);
         int (*is_qos_active) (struct ieee80211_device *ieee, struct sk_buff 
*skb);
 
-       /* Softmac-generated frames (mamagement) are TXed via this
-        * callback if the flag IEEE_SOFTMAC_SINGLE_QUEUE is
-        * not set. As some cards may have different HW queues that
-        * one might want to use for data and management frames
-        * the option to have two callbacks might be useful.
-        * This fucntion can't sleep.
-        */
-       int (*softmac_hard_start_xmit)(struct sk_buff *skb,
-                              struct ieee80211_device *ieee80211);
-
        /* used instead of hard_start_xmit (not softmac_hard_start_xmit)
         * if the IEEE_SOFTMAC_TX_QUEUE feature is used to TX data
         * frames. I the option IEEE_SOFTMAC_SINGLE_QUEUE is also set
@@ -2377,7 +2373,7 @@ static inline int ieee80211_is_cck_rate(u8 rate)
 
 /* ieee80211.c */
 void free_ieee80211(struct net_device *dev);
-struct net_device *alloc_ieee80211(int sizeof_priv);
+struct net_device *alloc_ieee80211(int sizeof_priv, const struct ieee80211_ops 
*ops);
 
 int ieee80211_set_encryption(struct ieee80211_device *ieee);
 
diff --git a/drivers/staging/rtl8192e/ieee80211/ieee80211_module.c 
b/drivers/staging/rtl8192e/ieee80211/ieee80211_module.c
index 663b0b8..a3acd6e 100644
--- a/drivers/staging/rtl8192e/ieee80211/ieee80211_module.c
+++ b/drivers/staging/rtl8192e/ieee80211/ieee80211_module.c
@@ -95,7 +95,7 @@ static inline void ieee80211_networks_initialize(struct 
ieee80211_device *ieee)
 }
 
 
-struct net_device *alloc_ieee80211(int sizeof_priv)
+struct net_device *alloc_ieee80211(int sizeof_priv, const struct ieee80211_ops 
*ops)
 {
        struct ieee80211_device *ieee;
        struct net_device *dev;
@@ -112,6 +112,7 @@ struct net_device *alloc_ieee80211(int sizeof_priv)
        ieee = netdev_priv(dev);
 
        memset(ieee, 0, sizeof(struct ieee80211_device) + sizeof_priv);
+       ieee->ops = ops;
        ieee->dev = dev;
 
        err = ieee80211_networks_allocate(ieee);
@@ -122,7 +123,6 @@ struct net_device *alloc_ieee80211(int sizeof_priv)
        }
        ieee80211_networks_initialize(ieee);
 
-
        /* Default fragmentation threshold is maximum payload size */
        ieee->fts = DEFAULT_FTS;
        ieee->scan_age = DEFAULT_MAX_SCAN_AGE;
diff --git a/drivers/staging/rtl8192e/ieee80211/ieee80211_softmac.c 
b/drivers/staging/rtl8192e/ieee80211/ieee80211_softmac.c
index f6922d4..49c006f 100644
--- a/drivers/staging/rtl8192e/ieee80211/ieee80211_softmac.c
+++ b/drivers/staging/rtl8192e/ieee80211/ieee80211_softmac.c
@@ -268,7 +268,7 @@ inline void softmac_mgmt_xmit(struct sk_buff *skb, struct 
ieee80211_device *ieee
                         * */
                        skb_queue_tail(&ieee->skb_waitQ[tcb_desc->queue_index], 
skb);
                } else {
-                       ieee->softmac_hard_start_xmit(skb, ieee);
+                       ieee->ops->tx(ieee, skb);
                }
                spin_unlock(&ieee->mgmt_tx_lock);
        }
@@ -308,7 +308,7 @@ inline void softmac_ps_mgmt_xmit(struct sk_buff *skb, 
struct ieee80211_device *i
                else
                        ieee->seq_ctrl[0]++;
 
-               ieee->softmac_hard_start_xmit(skb, ieee);
+               ieee->ops->tx(ieee, skb);
 
        }
 }
diff --git a/drivers/staging/rtl8192e/r8192E_core.c 
b/drivers/staging/rtl8192e/r8192E_core.c
index 58d800f..3d0c93c 100644
--- a/drivers/staging/rtl8192e/r8192E_core.c
+++ b/drivers/staging/rtl8192e/r8192E_core.c
@@ -848,7 +848,7 @@ static void rtl8192_hard_data_xmit(struct sk_buff *skb,
  * If the ring is full packet are dropped (for data frame the queue
  * is stopped before this can happen).
  */
-static int rtl8192_hard_start_xmit(struct sk_buff *skb, struct 
ieee80211_device *ieee80211)
+static int rtl8192_hard_start_xmit(struct ieee80211_device *ieee80211, struct 
sk_buff *skb)
 {
        struct r8192_priv *priv = ieee80211_priv(ieee80211->dev);
        int ret;
@@ -1918,7 +1918,6 @@ static void rtl8192_init_priv_variable(struct r8192_priv 
*priv)
        priv->ieee80211->host_decrypt = 1;
        priv->ieee80211->start_send_beacons = rtl8192_start_beacon;
        priv->ieee80211->stop_send_beacons = rtl8192_stop_beacon;
-       priv->ieee80211->softmac_hard_start_xmit = rtl8192_hard_start_xmit;
        priv->ieee80211->set_chan = rtl8192_set_chan;
        priv->ieee80211->link_change = rtl8192_link_change;
        priv->ieee80211->softmac_data_hard_start_xmit = rtl8192_hard_data_xmit;
@@ -4524,6 +4523,10 @@ static const struct net_device_ops rtl8192_netdev_ops = {
        .ndo_start_xmit =               ieee80211_rtl_xmit,
 };
 
+static const struct ieee80211_ops r8192e_ops = {
+       .tx =                           rtl8192_hard_start_xmit,
+};
+
 static int __devinit rtl8192_pci_probe(struct pci_dev *pdev,
                         const struct pci_device_id *id)
 {
@@ -4544,7 +4547,7 @@ static int __devinit rtl8192_pci_probe(struct pci_dev 
*pdev,
        //pci_set_wmi(pdev);
        pci_set_dma_mask(pdev, 0xffffff00ULL);
        pci_set_consistent_dma_mask(pdev,0xffffff00ULL);
-       dev = alloc_ieee80211(sizeof(struct r8192_priv));
+       dev = alloc_ieee80211(sizeof(struct r8192_priv), &r8192e_ops);
        if (!dev) {
                ret = -ENOMEM;
                goto fail_free;
diff --git a/drivers/staging/rtl8192e/r819xE_cmdpkt.c 
b/drivers/staging/rtl8192e/r819xE_cmdpkt.c
index 756e066..a64a4d8 100644
--- a/drivers/staging/rtl8192e/r819xE_cmdpkt.c
+++ b/drivers/staging/rtl8192e/r819xE_cmdpkt.c
@@ -101,7 +101,7 @@ RT_STATUS cmpk_message_handle_tx(
                 *seg_ptr++ = ((i+3)<frag_length)?code_virtual_address[i+0]:0;
             }
             skb_put(skb, i);
-            priv->ieee80211->softmac_hard_start_xmit(skb, priv->ieee80211);
+            priv->ieee80211->ops->tx(priv->ieee80211, skb);
 
             code_virtual_address += frag_length;
             frag_offset += frag_length;
diff --git a/drivers/staging/rtl8192e/r819xE_firmware.c 
b/drivers/staging/rtl8192e/r819xE_firmware.c
index d9e8b5a..71b0a24 100644
--- a/drivers/staging/rtl8192e/r819xE_firmware.c
+++ b/drivers/staging/rtl8192e/r819xE_firmware.c
@@ -93,7 +93,7 @@ static bool fw_download_code(struct r8192_priv *priv, u8 
*code_virtual_address,
                }
                tcb_desc->txbuf_size = (u16)i;
                skb_put(skb, i);
-               priv->ieee80211->softmac_hard_start_xmit(skb, priv->ieee80211);
+               priv->ieee80211->ops->tx(priv->ieee80211, skb);
 
                code_virtual_address += frag_length;
                frag_offset += frag_length;
-- 
1.7.0.4


_______________________________________________
devel mailing list
[email protected]
http://driverdev.linuxdriverproject.org/mailman/listinfo/devel

Reply via email to