diff options
Diffstat (limited to 'drivers/staging/wilc1000/wilc_wlan.c')
-rw-r--r-- | drivers/staging/wilc1000/wilc_wlan.c | 26 |
1 files changed, 15 insertions, 11 deletions
diff --git a/drivers/staging/wilc1000/wilc_wlan.c b/drivers/staging/wilc1000/wilc_wlan.c index 95eaf8fdf4f2..d46876edcfeb 100644 --- a/drivers/staging/wilc1000/wilc_wlan.c +++ b/drivers/staging/wilc1000/wilc_wlan.c @@ -6,7 +6,7 @@ #include <linux/if_ether.h> #include <linux/ip.h> -#include "wilc_wfi_netdevice.h" +#include "wilc_wfi_cfgoperations.h" #include "wilc_wlan_cfg.h" static inline bool is_wilc1000(u32 id) @@ -267,6 +267,7 @@ static int wilc_wlan_txq_add_cfg_pkt(struct wilc_vif *vif, u8 *buffer, tqe->tx_complete_func = NULL; tqe->priv = NULL; tqe->ack_idx = NOT_TCP_ACK; + tqe->vif = vif; wilc_wlan_txq_add_to_head(vif, tqe); @@ -295,6 +296,7 @@ int wilc_wlan_txq_add_net_pkt(struct net_device *dev, void *priv, u8 *buffer, tqe->buffer_size = buffer_size; tqe->tx_complete_func = tx_complete_fn; tqe->priv = priv; + tqe->vif = vif; tqe->ack_idx = NOT_TCP_ACK; if (vif->ack_filter.enabled) @@ -326,6 +328,7 @@ int wilc_wlan_txq_add_mgmt_pkt(struct net_device *dev, void *priv, u8 *buffer, tqe->tx_complete_func = tx_complete_fn; tqe->priv = priv; tqe->ack_idx = NOT_TCP_ACK; + tqe->vif = vif; wilc_wlan_txq_add_to_tail(dev, tqe); return 1; } @@ -482,7 +485,7 @@ void host_sleep_notify(struct wilc *wilc) } EXPORT_SYMBOL_GPL(host_sleep_notify); -int wilc_wlan_handle_txq(struct net_device *dev, u32 *txq_count) +int wilc_wlan_handle_txq(struct wilc *wilc, u32 *txq_count) { int i, entries = 0; u32 sum; @@ -494,17 +497,20 @@ int wilc_wlan_handle_txq(struct net_device *dev, u32 *txq_count) int counter; int timeout; u32 vmm_table[WILC_VMM_TBL_SIZE]; - struct wilc_vif *vif = netdev_priv(dev); - struct wilc *wilc = vif->wilc; const struct wilc_hif_func *func; u8 *txb = wilc->tx_buffer; + struct net_device *dev; + struct wilc_vif *vif; if (wilc->quit) goto out; mutex_lock(&wilc->txq_add_to_head_cs); - wilc_wlan_txq_filter_dup_tcp_ack(dev); tqe = wilc_wlan_txq_get_first(wilc); + if (!tqe) + goto out; + dev = tqe->vif->ndev; + wilc_wlan_txq_filter_dup_tcp_ack(dev); i = 0; sum = 0; do { @@ -629,6 +635,7 @@ int wilc_wlan_handle_txq(struct net_device *dev, u32 *txq_count) if (!tqe) break; + vif = tqe->vif; if (vmm_table[i] == 0) break; @@ -648,8 +655,7 @@ int wilc_wlan_handle_txq(struct net_device *dev, u32 *txq_count) if (tqe->type == WILC_CFG_PKT) { buffer_offset = ETH_CONFIG_PKT_HDR_OFFSET; } else if (tqe->type == WILC_NET_PKT) { - bssid = ((struct tx_complete_data *)(tqe->priv))->bssid; - + bssid = tqe->vif->bssid; buffer_offset = ETH_ETHERNET_HDR_OFFSET; memcpy(&txb[offset + 8], bssid, 6); } else { @@ -709,9 +715,6 @@ static void wilc_wlan_handle_rx_buff(struct wilc *wilc, u8 *buffer, int size) break; if (pkt_offset & IS_MANAGMEMENT) { - pkt_offset &= ~(IS_MANAGMEMENT | - IS_MANAGMEMENT_CALLBACK | - IS_MGMT_STATUS_SUCCES); buff_ptr += HOST_HDR_OFFSET; wilc_wfi_mgmt_rx(wilc, buff_ptr, pkt_len); } else { @@ -1199,10 +1202,11 @@ int wilc_wlan_cfg_get_val(struct wilc *wl, u16 wid, u8 *buffer, u32 buffer_size) } int wilc_send_config_pkt(struct wilc_vif *vif, u8 mode, struct wid *wids, - u32 count, u32 drv) + u32 count) { int i; int ret = 0; + u32 drv = wilc_get_vif_idx(vif); if (mode == WILC_GET_CFG) { for (i = 0; i < count; i++) { |