diff options
Diffstat (limited to 'kernel/drivers/staging/vt6656')
-rw-r--r-- | kernel/drivers/staging/vt6656/baseband.c | 2 | ||||
-rw-r--r-- | kernel/drivers/staging/vt6656/card.c | 9 | ||||
-rw-r--r-- | kernel/drivers/staging/vt6656/device.h | 4 | ||||
-rw-r--r-- | kernel/drivers/staging/vt6656/int.c | 14 | ||||
-rw-r--r-- | kernel/drivers/staging/vt6656/main_usb.c | 49 | ||||
-rw-r--r-- | kernel/drivers/staging/vt6656/power.c | 10 | ||||
-rw-r--r-- | kernel/drivers/staging/vt6656/rxtx.c | 14 | ||||
-rw-r--r-- | kernel/drivers/staging/vt6656/usbpipe.c | 8 |
8 files changed, 61 insertions, 49 deletions
diff --git a/kernel/drivers/staging/vt6656/baseband.c b/kernel/drivers/staging/vt6656/baseband.c index 26b16772f..e5be261f2 100644 --- a/kernel/drivers/staging/vt6656/baseband.c +++ b/kernel/drivers/staging/vt6656/baseband.c @@ -527,7 +527,6 @@ void vnt_set_short_slot_time(struct vnt_private *priv) void vnt_set_vga_gain_offset(struct vnt_private *priv, u8 data) { - vnt_control_out_u8(priv, MESSAGE_REQUEST_BBREG, 0xE7, data); /* patch for 3253B0 Baseband with Cardbus module */ @@ -811,7 +810,6 @@ void vnt_update_pre_ed_threshold(struct vnt_private *priv, int scanning) cr_206 = 0x38; } break; - } if (ed_inx == priv->bb_pre_ed_index && !scanning) diff --git a/kernel/drivers/staging/vt6656/card.c b/kernel/drivers/staging/vt6656/card.c index 67ff13f4f..927243ebc 100644 --- a/kernel/drivers/staging/vt6656/card.c +++ b/kernel/drivers/staging/vt6656/card.c @@ -82,7 +82,7 @@ void vnt_set_channel(struct vnt_private *priv, u32 connection_channel) connection_channel, 0, 0, NULL); vnt_control_out_u8(priv, MESSAGE_REQUEST_MACREG, MAC_REG_CHANNEL, - (u8)(connection_channel|0x80)); + (u8)(connection_channel | 0x80)); } /* @@ -285,7 +285,6 @@ void vnt_set_rspinf(struct vnt_private *priv, u8 bb_type) vnt_get_phy_field(priv, 14, vnt_get_cck_rate(priv, RATE_11M), PK_TYPE_11B, &phy[3]); - /*RSPINF_a_6*/ vnt_calculate_ofdm_rate(RATE_6M, bb_type, &tx_rate[0], &rsv_time[0]); @@ -389,7 +388,7 @@ void vnt_update_ifs(struct vnt_private *priv) } } - if (ofdm_rate == true) + if (ofdm_rate) max_min = 4; else max_min = 5; @@ -473,7 +472,7 @@ int vnt_ofdm_min_rate(struct vnt_private *priv) int ii; for (ii = RATE_54M; ii >= RATE_6M; ii--) { - if ((priv->basic_rates) & ((u16)(1 << ii))) + if ((priv->basic_rates) & ((u16)BIT(ii))) return true; } @@ -508,7 +507,7 @@ u8 vnt_get_pkt_type(struct vnt_private *priv) u64 vnt_get_tsf_offset(u8 rx_rate, u64 tsf1, u64 tsf2) { u64 tsf_offset = 0; - u16 rx_bcn_offset = 0; + u16 rx_bcn_offset; rx_bcn_offset = cwRXBCNTSFOff[rx_rate % MAX_RATE]; diff --git a/kernel/drivers/staging/vt6656/device.h b/kernel/drivers/staging/vt6656/device.h index f71d59fa3..dec36f296 100644 --- a/kernel/drivers/staging/vt6656/device.h +++ b/kernel/drivers/staging/vt6656/device.h @@ -364,7 +364,7 @@ struct vnt_private { /* Power save */ u16 current_aid; - /* Beacon releated */ + /* Beacon related */ u16 seq_counter; enum vnt_cmd_state command_state; @@ -389,6 +389,8 @@ struct vnt_private { u8 bb_pre_ed_rssi; u8 bb_pre_ed_index; + u16 wake_up_count; + /* command timer */ struct delayed_work run_command_work; diff --git a/kernel/drivers/staging/vt6656/int.c b/kernel/drivers/staging/vt6656/int.c index 2ef70e470..14b8ebc65 100644 --- a/kernel/drivers/staging/vt6656/int.c +++ b/kernel/drivers/staging/vt6656/int.c @@ -149,10 +149,18 @@ void vnt_int_process_data(struct vnt_private *priv) priv->op_mode == NL80211_IFTYPE_AP) vnt_schedule_command(priv, WLAN_CMD_BECON_SEND); - if (int_data->isr0 & ISR_TBTT) { - if (priv->hw->conf.flags & IEEE80211_CONF_PS) + if (int_data->isr0 & ISR_TBTT && + priv->hw->conf.flags & IEEE80211_CONF_PS) { + if (!priv->wake_up_count) + priv->wake_up_count = + priv->hw->conf.listen_interval; + + --priv->wake_up_count; + + /* Turn on wake up to listen next beacon */ + if (priv->wake_up_count == 1) vnt_schedule_command(priv, - WLAN_CMD_TBTT_WAKEUP); + WLAN_CMD_TBTT_WAKEUP); } priv->current_tsf = le64_to_cpu(int_data->tsf); diff --git a/kernel/drivers/staging/vt6656/main_usb.c b/kernel/drivers/staging/vt6656/main_usb.c index 766fdcece..01e642db3 100644 --- a/kernel/drivers/staging/vt6656/main_usb.c +++ b/kernel/drivers/staging/vt6656/main_usb.c @@ -507,13 +507,8 @@ static void vnt_tx_80211(struct ieee80211_hw *hw, { struct vnt_private *priv = hw->priv; - ieee80211_stop_queues(hw); - - if (vnt_tx_packet(priv, skb)) { + if (vnt_tx_packet(priv, skb)) ieee80211_free_txskb(hw, skb); - - ieee80211_wake_queues(hw); - } } static int vnt_start(struct ieee80211_hw *hw) @@ -522,7 +517,7 @@ static int vnt_start(struct ieee80211_hw *hw) priv->rx_buf_sz = MAX_TOTAL_SIZE_WITH_ALL_HEADERS; - if (vnt_alloc_bufs(priv) == false) { + if (!vnt_alloc_bufs(priv)) { dev_dbg(&priv->usb->dev, "vnt_alloc_bufs fail...\n"); return -ENOMEM; } @@ -757,6 +752,26 @@ static void vnt_bss_info_changed(struct ieee80211_hw *hw, vnt_mac_reg_bits_off(priv, MAC_REG_TCR, TCR_AUTOBCNTX); } } + + if (changed & (BSS_CHANGED_ASSOC | BSS_CHANGED_BEACON_INFO) && + priv->op_mode != NL80211_IFTYPE_AP) { + if (conf->assoc && conf->beacon_rate) { + vnt_mac_reg_bits_on(priv, MAC_REG_TFTCTL, + TFTCTL_TSFCNTREN); + + vnt_adjust_tsf(priv, conf->beacon_rate->hw_value, + conf->sync_tsf, priv->current_tsf); + + vnt_mac_set_beacon_interval(priv, conf->beacon_int); + + vnt_reset_next_tbtt(priv, conf->beacon_int); + } else { + vnt_clear_current_tsf(priv); + + vnt_mac_reg_bits_off(priv, MAC_REG_TFTCTL, + TFTCTL_TSFCNTREN); + } + } } static u64 vnt_prepare_multicast(struct ieee80211_hw *hw, @@ -785,8 +800,7 @@ static void vnt_configure(struct ieee80211_hw *hw, u8 rx_mode = 0; int rc; - *total_flags &= FIF_ALLMULTI | FIF_OTHER_BSS | FIF_PROMISC_IN_BSS | - FIF_BCN_PRBRESP_PROMISC; + *total_flags &= FIF_ALLMULTI | FIF_OTHER_BSS | FIF_BCN_PRBRESP_PROMISC; rc = vnt_control_in(priv, MESSAGE_TYPE_READ, MAC_REG_RCR, MESSAGE_REQUEST_MACREG, sizeof(u8), &rx_mode); @@ -796,14 +810,6 @@ static void vnt_configure(struct ieee80211_hw *hw, dev_dbg(&priv->usb->dev, "rx mode in = %x\n", rx_mode); - if (changed_flags & FIF_PROMISC_IN_BSS) { - /* unconditionally log net taps */ - if (*total_flags & FIF_PROMISC_IN_BSS) - rx_mode |= RCR_UNICAST; - else - rx_mode &= ~RCR_UNICAST; - } - if (changed_flags & FIF_ALLMULTI) { if (*total_flags & FIF_ALLMULTI) { if (priv->mc_list_count > 2) @@ -987,10 +993,11 @@ vt6656_probe(struct usb_interface *intf, const struct usb_device_id *id) wiphy->interface_modes = BIT(NL80211_IFTYPE_STATION) | BIT(NL80211_IFTYPE_ADHOC) | BIT(NL80211_IFTYPE_AP); - priv->hw->flags = IEEE80211_HW_RX_INCLUDES_FCS | - IEEE80211_HW_REPORTS_TX_ACK_STATUS | - IEEE80211_HW_SIGNAL_DBM | - IEEE80211_HW_TIMING_BEACON_ONLY; + ieee80211_hw_set(priv->hw, TIMING_BEACON_ONLY); + ieee80211_hw_set(priv->hw, SIGNAL_DBM); + ieee80211_hw_set(priv->hw, RX_INCLUDES_FCS); + ieee80211_hw_set(priv->hw, REPORTS_TX_ACK_STATUS); + ieee80211_hw_set(priv->hw, SUPPORTS_PS); priv->hw->max_signal = 100; diff --git a/kernel/drivers/staging/vt6656/power.c b/kernel/drivers/staging/vt6656/power.c index 0ffbaed5d..13afce279 100644 --- a/kernel/drivers/staging/vt6656/power.c +++ b/kernel/drivers/staging/vt6656/power.c @@ -59,10 +59,9 @@ void vnt_enable_power_saving(struct vnt_private *priv, u16 listen_interval) /* set period of power up before TBTT */ vnt_mac_write_word(priv, MAC_REG_PWBT, C_PWBT); - if (priv->op_mode != NL80211_IFTYPE_ADHOC) { + if (priv->op_mode != NL80211_IFTYPE_ADHOC) /* set AID */ vnt_mac_write_word(priv, MAC_REG_AIDATIM, aid); - } /* Warren:06-18-2004,the sequence must follow * PSEN->AUTOSLEEP->GO2DOZE @@ -85,11 +84,10 @@ void vnt_enable_power_saving(struct vnt_private *priv, u16 listen_interval) /* first time set listen next beacon */ vnt_mac_reg_bits_on(priv, MAC_REG_PSCTL, PSCTL_LNBCN); - } else { + } else /* always listen beacon */ vnt_mac_reg_bits_on(priv, MAC_REG_PSCTL, PSCTL_ALBCN); - } dev_dbg(&priv->usb->dev, "PS:Power Saving Mode Enable...\n"); } @@ -109,7 +107,7 @@ void vnt_disable_power_saving(struct vnt_private *priv) /* disable power saving hw function */ vnt_control_out(priv, MESSAGE_TYPE_DISABLE_PS, 0, - 0, 0, NULL); + 0, 0, NULL); /* clear AutoSleep */ vnt_mac_reg_bits_off(priv, MAC_REG_PSCFG, PSCFG_AUTOSLEEP); @@ -134,7 +132,7 @@ int vnt_next_tbtt_wakeup(struct vnt_private *priv) struct ieee80211_conf *conf = &hw->conf; int wake_up = false; - if (conf->listen_interval == 1) { + if (conf->listen_interval > 1) { /* Turn on wake up to listen next beacon */ vnt_mac_reg_bits_on(priv, MAC_REG_PSCTL, PSCTL_LNBCN); wake_up = true; diff --git a/kernel/drivers/staging/vt6656/rxtx.c b/kernel/drivers/staging/vt6656/rxtx.c index 5c589962a..efb54f53b 100644 --- a/kernel/drivers/staging/vt6656/rxtx.c +++ b/kernel/drivers/staging/vt6656/rxtx.c @@ -45,8 +45,11 @@ #include "usbpipe.h" static const u16 vnt_time_stampoff[2][MAX_RATE] = { - {384, 288, 226, 209, 54, 43, 37, 31, 28, 25, 24, 23},/* Long Preamble */ - {384, 192, 130, 113, 54, 43, 37, 31, 28, 25, 24, 23},/* Short Preamble */ + /* Long Preamble */ + {384, 288, 226, 209, 54, 43, 37, 31, 28, 25, 24, 23}, + + /* Short Preamble */ + {384, 192, 130, 113, 54, 43, 37, 31, 28, 25, 24, 23}, }; static const u16 vnt_fb_opt0[2][5] = { @@ -87,7 +90,7 @@ static struct vnt_usb_send_context return NULL; context = priv->tx_context[ii]; - if (context->in_use == false) { + if (!context->in_use) { context->in_use = true; memset(context->data, 0, MAX_TOTAL_SIZE_WITH_ALL_HEADERS); @@ -98,9 +101,12 @@ static struct vnt_usb_send_context } } - if (ii == priv->num_tx_context) + if (ii == priv->num_tx_context) { dev_dbg(&priv->usb->dev, "%s No Free Tx Context\n", __func__); + ieee80211_stop_queues(priv->hw); + } + return NULL; } diff --git a/kernel/drivers/staging/vt6656/usbpipe.c b/kernel/drivers/staging/vt6656/usbpipe.c index 88bf518f2..c975c3b87 100644 --- a/kernel/drivers/staging/vt6656/usbpipe.c +++ b/kernel/drivers/staging/vt6656/usbpipe.c @@ -141,7 +141,7 @@ int vnt_start_interrupt_urb(struct vnt_private *priv) { int status = STATUS_FAILURE; - if (priv->int_buf.in_use == true) + if (priv->int_buf.in_use) return STATUS_FAILURE; priv->int_buf.in_use = true; @@ -168,7 +168,6 @@ static void vnt_submit_rx_urb_complete(struct urb *urb) { struct vnt_rcb *rcb = urb->context; struct vnt_private *priv = rcb->priv; - unsigned long flags; switch (urb->status) { case 0: @@ -184,8 +183,6 @@ static void vnt_submit_rx_urb_complete(struct urb *urb) } if (urb->actual_length) { - spin_lock_irqsave(&priv->lock, flags); - if (vnt_rx_data(priv, rcb, urb->actual_length)) { rcb->skb = dev_alloc_skb(priv->rx_buf_sz); if (!rcb->skb) { @@ -193,7 +190,6 @@ static void vnt_submit_rx_urb_complete(struct urb *urb) "Failed to re-alloc rx skb\n"); rcb->in_use = false; - spin_unlock_irqrestore(&priv->lock, flags); return; } } else { @@ -203,8 +199,6 @@ static void vnt_submit_rx_urb_complete(struct urb *urb) urb->transfer_buffer = skb_put(rcb->skb, skb_tailroom(rcb->skb)); - - spin_unlock_irqrestore(&priv->lock, flags); } if (usb_submit_urb(urb, GFP_ATOMIC)) { |