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