diff options
| author | Linus Torvalds <torvalds@linux-foundation.org> | 2015-05-17 00:04:56 -0400 |
|---|---|---|
| committer | Linus Torvalds <torvalds@linux-foundation.org> | 2015-05-17 00:04:56 -0400 |
| commit | 3f4741b1d863f624e8632b3283af5eabe35c2fca (patch) | |
| tree | 450df928579a5db36ca450ab44ae12d51d9fbe31 /drivers/staging | |
| parent | 148c46f3e12bfd877c4fcec986f55988f21b0857 (diff) | |
| parent | ec94efcdadab69f41d257a1054260f8295ab77ef (diff) | |
Merge tag 'staging-4.1-rc4' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/staging
Pull staging / IIO driver fixes from Greg KH:
"Here's some staging and iio driver fixes to resolve a number of
reported issues.
All of these have been in linux-next for a while"
* tag 'staging-4.1-rc4' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/staging: (31 commits)
iio: light: hid-sensor-prox: Fix memory leak in probe()
iio: adc: cc10001: Add delay before setting START bit
iio: adc: cc10001: Fix regulator_get_voltage() return value check
iio: adc: cc10001: Fix incorrect use of power-up/power-down register
staging: gdm724x: Correction of variable usage after applying ALIGN()
iio: adc: cc10001: Fix the channel number mapping
staging: vt6655: lock MACvWriteBSSIDAddress.
staging: vt6655: CARDbUpdateTSF bss timestamp correct tsf counter value.
staging: vt6655: vnt_tx_packet Correct TX order of OWNED_BY_NIC
staging: vt6655: Fix 80211 control and management status reporting.
staging: vt6655: implement IEEE80211_TX_STAT_NOACK_TRANSMITTED
staging: vt6655: device_free_tx_buf use only ieee80211_tx_status_irqsafe
staging: vt6656: use ieee80211_tx_info to select packet type.
staging: rtl8712: freeing an ERR_PTR
staging: sm750: remove incorrect __exit annotation
iio: kfifo: Set update_needed to false only if a buffer was allocated
iio: mcp320x: Fix occasional incorrect readings
iio: accel: mma9553: check input value for activity period
iio: accel: mma9553: add enable channel for activity
iio: accel: mma9551_core: prevent buffer overrun
...
Diffstat (limited to 'drivers/staging')
| -rw-r--r-- | drivers/staging/gdm724x/gdm_mux.c | 16 | ||||
| -rw-r--r-- | drivers/staging/rtl8712/rtl871x_ioctl_linux.c | 17 | ||||
| -rw-r--r-- | drivers/staging/sm750fb/sm750.c | 2 | ||||
| -rw-r--r-- | drivers/staging/vt6655/card.c | 10 | ||||
| -rw-r--r-- | drivers/staging/vt6655/card.h | 2 | ||||
| -rw-r--r-- | drivers/staging/vt6655/device_main.c | 42 | ||||
| -rw-r--r-- | drivers/staging/vt6656/rxtx.c | 14 |
7 files changed, 59 insertions, 44 deletions
diff --git a/drivers/staging/gdm724x/gdm_mux.c b/drivers/staging/gdm724x/gdm_mux.c index 8199b0a697bb..1cf24e4edf25 100644 --- a/drivers/staging/gdm724x/gdm_mux.c +++ b/drivers/staging/gdm724x/gdm_mux.c | |||
| @@ -158,7 +158,7 @@ static int up_to_host(struct mux_rx *r) | |||
| 158 | unsigned int start_flag; | 158 | unsigned int start_flag; |
| 159 | unsigned int payload_size; | 159 | unsigned int payload_size; |
| 160 | unsigned short packet_type; | 160 | unsigned short packet_type; |
| 161 | int dummy_cnt; | 161 | int total_len; |
| 162 | u32 packet_size_sum = r->offset; | 162 | u32 packet_size_sum = r->offset; |
| 163 | int index; | 163 | int index; |
| 164 | int ret = TO_HOST_INVALID_PACKET; | 164 | int ret = TO_HOST_INVALID_PACKET; |
| @@ -176,10 +176,10 @@ static int up_to_host(struct mux_rx *r) | |||
| 176 | break; | 176 | break; |
| 177 | } | 177 | } |
| 178 | 178 | ||
| 179 | dummy_cnt = ALIGN(MUX_HEADER_SIZE + payload_size, 4); | 179 | total_len = ALIGN(MUX_HEADER_SIZE + payload_size, 4); |
| 180 | 180 | ||
| 181 | if (len - packet_size_sum < | 181 | if (len - packet_size_sum < |
| 182 | MUX_HEADER_SIZE + payload_size + dummy_cnt) { | 182 | total_len) { |
| 183 | pr_err("invalid payload : %d %d %04x\n", | 183 | pr_err("invalid payload : %d %d %04x\n", |
| 184 | payload_size, len, packet_type); | 184 | payload_size, len, packet_type); |
| 185 | break; | 185 | break; |
| @@ -202,7 +202,7 @@ static int up_to_host(struct mux_rx *r) | |||
| 202 | break; | 202 | break; |
| 203 | } | 203 | } |
| 204 | 204 | ||
| 205 | packet_size_sum += MUX_HEADER_SIZE + payload_size + dummy_cnt; | 205 | packet_size_sum += total_len; |
| 206 | if (len - packet_size_sum <= MUX_HEADER_SIZE + 2) { | 206 | if (len - packet_size_sum <= MUX_HEADER_SIZE + 2) { |
| 207 | ret = r->callback(NULL, | 207 | ret = r->callback(NULL, |
| 208 | 0, | 208 | 0, |
| @@ -361,7 +361,6 @@ static int gdm_mux_send(void *priv_dev, void *data, int len, int tty_index, | |||
| 361 | struct mux_pkt_header *mux_header; | 361 | struct mux_pkt_header *mux_header; |
| 362 | struct mux_tx *t = NULL; | 362 | struct mux_tx *t = NULL; |
| 363 | static u32 seq_num = 1; | 363 | static u32 seq_num = 1; |
| 364 | int dummy_cnt; | ||
| 365 | int total_len; | 364 | int total_len; |
| 366 | int ret; | 365 | int ret; |
| 367 | unsigned long flags; | 366 | unsigned long flags; |
| @@ -374,9 +373,7 @@ static int gdm_mux_send(void *priv_dev, void *data, int len, int tty_index, | |||
| 374 | 373 | ||
| 375 | spin_lock_irqsave(&mux_dev->write_lock, flags); | 374 | spin_lock_irqsave(&mux_dev->write_lock, flags); |
| 376 | 375 | ||
| 377 | dummy_cnt = ALIGN(MUX_HEADER_SIZE + len, 4); | 376 | total_len = ALIGN(MUX_HEADER_SIZE + len, 4); |
| 378 | |||
| 379 | total_len = len + MUX_HEADER_SIZE + dummy_cnt; | ||
| 380 | 377 | ||
| 381 | t = alloc_mux_tx(total_len); | 378 | t = alloc_mux_tx(total_len); |
| 382 | if (!t) { | 379 | if (!t) { |
| @@ -392,7 +389,8 @@ static int gdm_mux_send(void *priv_dev, void *data, int len, int tty_index, | |||
| 392 | mux_header->packet_type = __cpu_to_le16(packet_type[tty_index]); | 389 | mux_header->packet_type = __cpu_to_le16(packet_type[tty_index]); |
| 393 | 390 | ||
| 394 | memcpy(t->buf+MUX_HEADER_SIZE, data, len); | 391 | memcpy(t->buf+MUX_HEADER_SIZE, data, len); |
| 395 | memset(t->buf+MUX_HEADER_SIZE+len, 0, dummy_cnt); | 392 | memset(t->buf+MUX_HEADER_SIZE+len, 0, total_len - MUX_HEADER_SIZE - |
| 393 | len); | ||
| 396 | 394 | ||
| 397 | t->len = total_len; | 395 | t->len = total_len; |
| 398 | t->callback = cb; | 396 | t->callback = cb; |
diff --git a/drivers/staging/rtl8712/rtl871x_ioctl_linux.c b/drivers/staging/rtl8712/rtl871x_ioctl_linux.c index 42fba3f5b593..cb0b6387789f 100644 --- a/drivers/staging/rtl8712/rtl871x_ioctl_linux.c +++ b/drivers/staging/rtl8712/rtl871x_ioctl_linux.c | |||
| @@ -1900,23 +1900,20 @@ static int r871x_mp_ioctl_hdl(struct net_device *dev, | |||
| 1900 | struct mp_ioctl_handler *phandler; | 1900 | struct mp_ioctl_handler *phandler; |
| 1901 | struct mp_ioctl_param *poidparam; | 1901 | struct mp_ioctl_param *poidparam; |
| 1902 | unsigned long BytesRead, BytesWritten, BytesNeeded; | 1902 | unsigned long BytesRead, BytesWritten, BytesNeeded; |
| 1903 | u8 *pparmbuf = NULL, bset; | 1903 | u8 *pparmbuf, bset; |
| 1904 | u16 len; | 1904 | u16 len; |
| 1905 | uint status; | 1905 | uint status; |
| 1906 | int ret = 0; | 1906 | int ret = 0; |
| 1907 | 1907 | ||
| 1908 | if ((!p->length) || (!p->pointer)) { | 1908 | if ((!p->length) || (!p->pointer)) |
| 1909 | ret = -EINVAL; | 1909 | return -EINVAL; |
| 1910 | goto _r871x_mp_ioctl_hdl_exit; | 1910 | |
| 1911 | } | ||
| 1912 | bset = (u8)(p->flags & 0xFFFF); | 1911 | bset = (u8)(p->flags & 0xFFFF); |
| 1913 | len = p->length; | 1912 | len = p->length; |
| 1914 | pparmbuf = NULL; | ||
| 1915 | pparmbuf = memdup_user(p->pointer, len); | 1913 | pparmbuf = memdup_user(p->pointer, len); |
| 1916 | if (IS_ERR(pparmbuf)) { | 1914 | if (IS_ERR(pparmbuf)) |
| 1917 | ret = PTR_ERR(pparmbuf); | 1915 | return PTR_ERR(pparmbuf); |
| 1918 | goto _r871x_mp_ioctl_hdl_exit; | 1916 | |
| 1919 | } | ||
| 1920 | poidparam = (struct mp_ioctl_param *)pparmbuf; | 1917 | poidparam = (struct mp_ioctl_param *)pparmbuf; |
| 1921 | if (poidparam->subcode >= MAX_MP_IOCTL_SUBCODE) { | 1918 | if (poidparam->subcode >= MAX_MP_IOCTL_SUBCODE) { |
| 1922 | ret = -EINVAL; | 1919 | ret = -EINVAL; |
diff --git a/drivers/staging/sm750fb/sm750.c b/drivers/staging/sm750fb/sm750.c index 3c7ea95dd9f9..dbbb2f879a29 100644 --- a/drivers/staging/sm750fb/sm750.c +++ b/drivers/staging/sm750fb/sm750.c | |||
| @@ -1250,7 +1250,7 @@ err_enable: | |||
| 1250 | return -ENODEV; | 1250 | return -ENODEV; |
| 1251 | } | 1251 | } |
| 1252 | 1252 | ||
| 1253 | static void __exit lynxfb_pci_remove(struct pci_dev *pdev) | 1253 | static void lynxfb_pci_remove(struct pci_dev *pdev) |
| 1254 | { | 1254 | { |
| 1255 | struct fb_info *info; | 1255 | struct fb_info *info; |
| 1256 | struct lynx_share *share; | 1256 | struct lynx_share *share; |
diff --git a/drivers/staging/vt6655/card.c b/drivers/staging/vt6655/card.c index 1cdcf49b2445..e00c0605d154 100644 --- a/drivers/staging/vt6655/card.c +++ b/drivers/staging/vt6655/card.c | |||
| @@ -362,12 +362,16 @@ bool CARDbSetPhyParameter(struct vnt_private *pDevice, u8 bb_type) | |||
| 362 | * Return Value: none | 362 | * Return Value: none |
| 363 | */ | 363 | */ |
| 364 | bool CARDbUpdateTSF(struct vnt_private *pDevice, unsigned char byRxRate, | 364 | bool CARDbUpdateTSF(struct vnt_private *pDevice, unsigned char byRxRate, |
| 365 | u64 qwBSSTimestamp, u64 qwLocalTSF) | 365 | u64 qwBSSTimestamp) |
| 366 | { | 366 | { |
| 367 | u64 local_tsf; | ||
| 367 | u64 qwTSFOffset = 0; | 368 | u64 qwTSFOffset = 0; |
| 368 | 369 | ||
| 369 | if (qwBSSTimestamp != qwLocalTSF) { | 370 | CARDbGetCurrentTSF(pDevice, &local_tsf); |
| 370 | qwTSFOffset = CARDqGetTSFOffset(byRxRate, qwBSSTimestamp, qwLocalTSF); | 371 | |
| 372 | if (qwBSSTimestamp != local_tsf) { | ||
| 373 | qwTSFOffset = CARDqGetTSFOffset(byRxRate, qwBSSTimestamp, | ||
| 374 | local_tsf); | ||
| 371 | /* adjust TSF, HW's TSF add TSF Offset reg */ | 375 | /* adjust TSF, HW's TSF add TSF Offset reg */ |
| 372 | VNSvOutPortD(pDevice->PortOffset + MAC_REG_TSFOFST, (u32)qwTSFOffset); | 376 | VNSvOutPortD(pDevice->PortOffset + MAC_REG_TSFOFST, (u32)qwTSFOffset); |
| 373 | VNSvOutPortD(pDevice->PortOffset + MAC_REG_TSFOFST + 4, (u32)(qwTSFOffset >> 32)); | 377 | VNSvOutPortD(pDevice->PortOffset + MAC_REG_TSFOFST + 4, (u32)(qwTSFOffset >> 32)); |
diff --git a/drivers/staging/vt6655/card.h b/drivers/staging/vt6655/card.h index 2dfc41952271..16cca49e680a 100644 --- a/drivers/staging/vt6655/card.h +++ b/drivers/staging/vt6655/card.h | |||
| @@ -83,7 +83,7 @@ bool CARDbRadioPowerOff(struct vnt_private *); | |||
| 83 | bool CARDbRadioPowerOn(struct vnt_private *); | 83 | bool CARDbRadioPowerOn(struct vnt_private *); |
| 84 | bool CARDbSetPhyParameter(struct vnt_private *, u8); | 84 | bool CARDbSetPhyParameter(struct vnt_private *, u8); |
| 85 | bool CARDbUpdateTSF(struct vnt_private *, unsigned char byRxRate, | 85 | bool CARDbUpdateTSF(struct vnt_private *, unsigned char byRxRate, |
| 86 | u64 qwBSSTimestamp, u64 qwLocalTSF); | 86 | u64 qwBSSTimestamp); |
| 87 | bool CARDbSetBeaconPeriod(struct vnt_private *, unsigned short wBeaconInterval); | 87 | bool CARDbSetBeaconPeriod(struct vnt_private *, unsigned short wBeaconInterval); |
| 88 | 88 | ||
| 89 | #endif /* __CARD_H__ */ | 89 | #endif /* __CARD_H__ */ |
diff --git a/drivers/staging/vt6655/device_main.c b/drivers/staging/vt6655/device_main.c index 4bb4f8ee4132..0343ae386f03 100644 --- a/drivers/staging/vt6655/device_main.c +++ b/drivers/staging/vt6655/device_main.c | |||
| @@ -912,7 +912,11 @@ static int vnt_int_report_rate(struct vnt_private *priv, | |||
| 912 | 912 | ||
| 913 | if (!(tsr1 & TSR1_TERR)) { | 913 | if (!(tsr1 & TSR1_TERR)) { |
| 914 | info->status.rates[0].idx = idx; | 914 | info->status.rates[0].idx = idx; |
| 915 | info->flags |= IEEE80211_TX_STAT_ACK; | 915 | |
| 916 | if (info->flags & IEEE80211_TX_CTL_NO_ACK) | ||
| 917 | info->flags |= IEEE80211_TX_STAT_NOACK_TRANSMITTED; | ||
| 918 | else | ||
| 919 | info->flags |= IEEE80211_TX_STAT_ACK; | ||
| 916 | } | 920 | } |
| 917 | 921 | ||
| 918 | return 0; | 922 | return 0; |
| @@ -937,9 +941,6 @@ static int device_tx_srv(struct vnt_private *pDevice, unsigned int uIdx) | |||
| 937 | /* Only the status of first TD in the chain is correct */ | 941 | /* Only the status of first TD in the chain is correct */ |
| 938 | if (pTD->m_td1TD1.byTCR & TCR_STP) { | 942 | if (pTD->m_td1TD1.byTCR & TCR_STP) { |
| 939 | if ((pTD->pTDInfo->byFlags & TD_FLAGS_NETIF_SKB) != 0) { | 943 | if ((pTD->pTDInfo->byFlags & TD_FLAGS_NETIF_SKB) != 0) { |
| 940 | |||
| 941 | vnt_int_report_rate(pDevice, pTD->pTDInfo, byTsr0, byTsr1); | ||
| 942 | |||
| 943 | if (!(byTsr1 & TSR1_TERR)) { | 944 | if (!(byTsr1 & TSR1_TERR)) { |
| 944 | if (byTsr0 != 0) { | 945 | if (byTsr0 != 0) { |
| 945 | pr_debug(" Tx[%d] OK but has error. tsr1[%02X] tsr0[%02X]\n", | 946 | pr_debug(" Tx[%d] OK but has error. tsr1[%02X] tsr0[%02X]\n", |
| @@ -958,6 +959,9 @@ static int device_tx_srv(struct vnt_private *pDevice, unsigned int uIdx) | |||
| 958 | (int)uIdx, byTsr1, byTsr0); | 959 | (int)uIdx, byTsr1, byTsr0); |
| 959 | } | 960 | } |
| 960 | } | 961 | } |
| 962 | |||
| 963 | vnt_int_report_rate(pDevice, pTD->pTDInfo, byTsr0, byTsr1); | ||
| 964 | |||
| 961 | device_free_tx_buf(pDevice, pTD); | 965 | device_free_tx_buf(pDevice, pTD); |
| 962 | pDevice->iTDUsed[uIdx]--; | 966 | pDevice->iTDUsed[uIdx]--; |
| 963 | } | 967 | } |
| @@ -989,10 +993,8 @@ static void device_free_tx_buf(struct vnt_private *pDevice, PSTxDesc pDesc) | |||
| 989 | skb->len, DMA_TO_DEVICE); | 993 | skb->len, DMA_TO_DEVICE); |
| 990 | } | 994 | } |
| 991 | 995 | ||
| 992 | if (pTDInfo->byFlags & TD_FLAGS_NETIF_SKB) | 996 | if (skb) |
| 993 | ieee80211_tx_status_irqsafe(pDevice->hw, skb); | 997 | ieee80211_tx_status_irqsafe(pDevice->hw, skb); |
| 994 | else | ||
| 995 | dev_kfree_skb_irq(skb); | ||
| 996 | 998 | ||
| 997 | pTDInfo->skb_dma = 0; | 999 | pTDInfo->skb_dma = 0; |
| 998 | pTDInfo->skb = NULL; | 1000 | pTDInfo->skb = NULL; |
| @@ -1204,14 +1206,6 @@ static int vnt_tx_packet(struct vnt_private *priv, struct sk_buff *skb) | |||
| 1204 | if (dma_idx == TYPE_AC0DMA) | 1206 | if (dma_idx == TYPE_AC0DMA) |
| 1205 | head_td->pTDInfo->byFlags = TD_FLAGS_NETIF_SKB; | 1207 | head_td->pTDInfo->byFlags = TD_FLAGS_NETIF_SKB; |
| 1206 | 1208 | ||
| 1207 | priv->iTDUsed[dma_idx]++; | ||
| 1208 | |||
| 1209 | /* Take ownership */ | ||
| 1210 | wmb(); | ||
| 1211 | head_td->m_td0TD0.f1Owner = OWNED_BY_NIC; | ||
| 1212 | |||
| 1213 | /* get Next */ | ||
| 1214 | wmb(); | ||
| 1215 | priv->apCurrTD[dma_idx] = head_td->next; | 1209 | priv->apCurrTD[dma_idx] = head_td->next; |
| 1216 | 1210 | ||
| 1217 | spin_unlock_irqrestore(&priv->lock, flags); | 1211 | spin_unlock_irqrestore(&priv->lock, flags); |
| @@ -1232,11 +1226,18 @@ static int vnt_tx_packet(struct vnt_private *priv, struct sk_buff *skb) | |||
| 1232 | 1226 | ||
| 1233 | head_td->buff_addr = cpu_to_le32(head_td->pTDInfo->skb_dma); | 1227 | head_td->buff_addr = cpu_to_le32(head_td->pTDInfo->skb_dma); |
| 1234 | 1228 | ||
| 1229 | /* Poll Transmit the adapter */ | ||
| 1230 | wmb(); | ||
| 1231 | head_td->m_td0TD0.f1Owner = OWNED_BY_NIC; | ||
| 1232 | wmb(); /* second memory barrier */ | ||
| 1233 | |||
| 1235 | if (head_td->pTDInfo->byFlags & TD_FLAGS_NETIF_SKB) | 1234 | if (head_td->pTDInfo->byFlags & TD_FLAGS_NETIF_SKB) |
| 1236 | MACvTransmitAC0(priv->PortOffset); | 1235 | MACvTransmitAC0(priv->PortOffset); |
| 1237 | else | 1236 | else |
| 1238 | MACvTransmit0(priv->PortOffset); | 1237 | MACvTransmit0(priv->PortOffset); |
| 1239 | 1238 | ||
| 1239 | priv->iTDUsed[dma_idx]++; | ||
| 1240 | |||
| 1240 | spin_unlock_irqrestore(&priv->lock, flags); | 1241 | spin_unlock_irqrestore(&priv->lock, flags); |
| 1241 | 1242 | ||
| 1242 | return 0; | 1243 | return 0; |
| @@ -1416,9 +1417,16 @@ static void vnt_bss_info_changed(struct ieee80211_hw *hw, | |||
| 1416 | 1417 | ||
| 1417 | priv->current_aid = conf->aid; | 1418 | priv->current_aid = conf->aid; |
| 1418 | 1419 | ||
| 1419 | if (changed & BSS_CHANGED_BSSID) | 1420 | if (changed & BSS_CHANGED_BSSID) { |
| 1421 | unsigned long flags; | ||
| 1422 | |||
| 1423 | spin_lock_irqsave(&priv->lock, flags); | ||
| 1424 | |||
| 1420 | MACvWriteBSSIDAddress(priv->PortOffset, (u8 *)conf->bssid); | 1425 | MACvWriteBSSIDAddress(priv->PortOffset, (u8 *)conf->bssid); |
| 1421 | 1426 | ||
| 1427 | spin_unlock_irqrestore(&priv->lock, flags); | ||
| 1428 | } | ||
| 1429 | |||
| 1422 | if (changed & BSS_CHANGED_BASIC_RATES) { | 1430 | if (changed & BSS_CHANGED_BASIC_RATES) { |
| 1423 | priv->basic_rates = conf->basic_rates; | 1431 | priv->basic_rates = conf->basic_rates; |
| 1424 | 1432 | ||
| @@ -1477,7 +1485,7 @@ static void vnt_bss_info_changed(struct ieee80211_hw *hw, | |||
| 1477 | if (changed & BSS_CHANGED_ASSOC && priv->op_mode != NL80211_IFTYPE_AP) { | 1485 | if (changed & BSS_CHANGED_ASSOC && priv->op_mode != NL80211_IFTYPE_AP) { |
| 1478 | if (conf->assoc) { | 1486 | if (conf->assoc) { |
| 1479 | CARDbUpdateTSF(priv, conf->beacon_rate->hw_value, | 1487 | CARDbUpdateTSF(priv, conf->beacon_rate->hw_value, |
| 1480 | conf->sync_device_ts, conf->sync_tsf); | 1488 | conf->sync_tsf); |
| 1481 | 1489 | ||
| 1482 | CARDbSetBeaconPeriod(priv, conf->beacon_int); | 1490 | CARDbSetBeaconPeriod(priv, conf->beacon_int); |
| 1483 | 1491 | ||
diff --git a/drivers/staging/vt6656/rxtx.c b/drivers/staging/vt6656/rxtx.c index f6c2cf8590c4..5c589962a1e8 100644 --- a/drivers/staging/vt6656/rxtx.c +++ b/drivers/staging/vt6656/rxtx.c | |||
| @@ -805,10 +805,18 @@ int vnt_tx_packet(struct vnt_private *priv, struct sk_buff *skb) | |||
| 805 | vnt_schedule_command(priv, WLAN_CMD_SETPOWER); | 805 | vnt_schedule_command(priv, WLAN_CMD_SETPOWER); |
| 806 | } | 806 | } |
| 807 | 807 | ||
| 808 | if (current_rate > RATE_11M) | 808 | if (current_rate > RATE_11M) { |
| 809 | pkt_type = priv->packet_type; | 809 | if (info->band == IEEE80211_BAND_5GHZ) { |
| 810 | else | 810 | pkt_type = PK_TYPE_11A; |
| 811 | } else { | ||
| 812 | if (tx_rate->flags & IEEE80211_TX_RC_USE_CTS_PROTECT) | ||
| 813 | pkt_type = PK_TYPE_11GB; | ||
| 814 | else | ||
| 815 | pkt_type = PK_TYPE_11GA; | ||
| 816 | } | ||
| 817 | } else { | ||
| 811 | pkt_type = PK_TYPE_11B; | 818 | pkt_type = PK_TYPE_11B; |
| 819 | } | ||
| 812 | 820 | ||
| 813 | spin_lock_irqsave(&priv->lock, flags); | 821 | spin_lock_irqsave(&priv->lock, flags); |
| 814 | 822 | ||
