diff options
| author | Anjaneedevi Kapparapu <akappa@codeaurora.org> | 2015-03-06 19:51:48 +0530 |
|---|---|---|
| committer | Anjaneedevi Kapparapu <akappa@codeaurora.org> | 2015-03-06 19:52:50 +0530 |
| commit | 29ce153a1af894ce6a803132d404e28900c745e2 (patch) | |
| tree | 7f141bac82b9d5b163c60176556f82dc224510fd | |
| parent | 903230916096d26fb412234595197922c9b730f5 (diff) | |
| parent | 4963fd68ed4a1bf0592448e1a2572cb5ac9552f1 (diff) | |
Release 4.0.10.49 QCACLD WLAN Driver
Merge remote-tracking branch 'origin/caf/caf-wlan/master' into HEAD
* origin/caf/caf-wlan/master:
Cafstaging Release 4.0.10.49
qcacld: limit vdev_ll_pause_start_timer call with TXRX_VDEV_LL_TXQ.
qcacld: Adjust Tx skb length by removing frag_head and ipa_head size
qcacld: Support for 5.9 GHz channels in the regulatory domain.
qcacld2.0: Adding debug count to track CE post nbuf errors.
Change-Id: Iaed49060cba16f3048c0093c788705acc132f235
| -rw-r--r-- | CORE/CLD_TXRX/TXRX/ol_tx.h | 2 | ||||
| -rw-r--r-- | CORE/CLD_TXRX/TXRX/ol_tx_queue.c | 5 | ||||
| -rw-r--r-- | CORE/HDD/src/wlan_hdd_assoc.c | 2 | ||||
| -rw-r--r-- | CORE/HDD/src/wlan_hdd_cfg80211.c | 17 | ||||
| -rw-r--r-- | CORE/HDD/src/wlan_hdd_hostapd.c | 4 | ||||
| -rw-r--r-- | CORE/HDD/src/wlan_hdd_ipa.c | 5 | ||||
| -rw-r--r-- | CORE/HDD/src/wlan_hdd_wext.c | 348 | ||||
| -rw-r--r-- | CORE/MAC/inc/qwlan_version.h | 4 | ||||
| -rw-r--r-- | CORE/MAC/inc/sirApi.h | 1 | ||||
| -rw-r--r-- | CORE/MAC/inc/sirMacProtDef.h | 2 | ||||
| -rw-r--r-- | CORE/SERVICES/HIF/PCIe/hif_pci.c | 82 | ||||
| -rw-r--r-- | CORE/SERVICES/HIF/PCIe/hif_pci.h | 5 | ||||
| -rw-r--r-- | CORE/SERVICES/HIF/PCIe/if_pci.c | 4 | ||||
| -rw-r--r-- | CORE/SERVICES/WMA/wlan_nv.c | 34 | ||||
| -rw-r--r-- | CORE/SERVICES/WMA/wma.c | 14 | ||||
| -rw-r--r-- | CORE/SERVICES/WMA/wma.h | 2 | ||||
| -rw-r--r-- | CORE/SME/inc/csrApi.h | 2 | ||||
| -rw-r--r-- | CORE/SME/src/csr/csrApiRoam.c | 26 | ||||
| -rw-r--r-- | CORE/SME/src/csr/csrApiScan.c | 32 | ||||
| -rw-r--r-- | CORE/VOSS/src/vos_nvitem.c | 161 | ||||
| -rwxr-xr-x | Kbuild | 7 | ||||
| -rw-r--r-- | wcnss/inc/wlan_nv.h | 37 |
22 files changed, 563 insertions, 233 deletions
diff --git a/CORE/CLD_TXRX/TXRX/ol_tx.h b/CORE/CLD_TXRX/TXRX/ol_tx.h index f099b1a58fbc..a2290ae0cc6b 100644 --- a/CORE/CLD_TXRX/TXRX/ol_tx.h +++ b/CORE/CLD_TXRX/TXRX/ol_tx.h @@ -73,6 +73,7 @@ ol_tx_reinject(struct ol_txrx_vdev_t *vdev, adf_nbuf_t msdu, u_int16_t peer_id); void ol_txrx_mgmt_tx_complete(void *ctxt, adf_nbuf_t netbuf, int err); +#ifdef QCA_SUPPORT_TXRX_VDEV_LL_TXQ /** * ol_tx_vdev_ll_pause_start_timer() - Start ll-q pause timer for specific virtual device * @vdev: the virtual device @@ -86,6 +87,7 @@ ol_txrx_mgmt_tx_complete(void *ctxt, adf_nbuf_t netbuf, int err); */ void ol_tx_vdev_ll_pause_start_timer(struct ol_txrx_vdev_t *vdev); +#endif void ol_tx_pdev_ll_pause_queue_send_all(struct ol_txrx_pdev_t *pdev); diff --git a/CORE/CLD_TXRX/TXRX/ol_tx_queue.c b/CORE/CLD_TXRX/TXRX/ol_tx_queue.c index 6022d229af45..235391a15eeb 100644 --- a/CORE/CLD_TXRX/TXRX/ol_tx_queue.c +++ b/CORE/CLD_TXRX/TXRX/ol_tx_queue.c @@ -588,11 +588,14 @@ ol_txrx_vdev_unpause(ol_txrx_vdev_handle vdev, u_int32_t reason) if (vdev->ll_pause.paused_reason & reason) { vdev->ll_pause.paused_reason &= ~reason; +#ifdef QCA_SUPPORT_TXRX_VDEV_LL_TXQ if (reason == OL_TXQ_PAUSE_REASON_VDEV_SUSPEND) { adf_os_spin_unlock_bh(&vdev->ll_pause.mutex); ol_tx_vdev_ll_pause_start_timer(vdev); } - else if (!vdev->ll_pause.paused_reason) { + else +#endif + if (!vdev->ll_pause.paused_reason) { adf_os_spin_unlock_bh(&vdev->ll_pause.mutex); ol_tx_vdev_ll_pause_queue_send(vdev); } else { diff --git a/CORE/HDD/src/wlan_hdd_assoc.c b/CORE/HDD/src/wlan_hdd_assoc.c index a7c7314e7007..e993e3c7261d 100644 --- a/CORE/HDD/src/wlan_hdd_assoc.c +++ b/CORE/HDD/src/wlan_hdd_assoc.c @@ -192,7 +192,7 @@ eCsrBand hdd_connGetConnectedBand( hdd_station_ctx_t *pHddStaCtx ) if ( staChannel > 0 && staChannel < 14 ) return eCSR_BAND_24; - else if (staChannel >= 36 && staChannel <= 165 ) + else if (staChannel >= 36 && staChannel <= 184 ) return eCSR_BAND_5G; else /* If station is not connected return as eCSR_BAND_ALL */ return eCSR_BAND_ALL; diff --git a/CORE/HDD/src/wlan_hdd_cfg80211.c b/CORE/HDD/src/wlan_hdd_cfg80211.c index 93c3947fabdf..0cdda413b49f 100644 --- a/CORE/HDD/src/wlan_hdd_cfg80211.c +++ b/CORE/HDD/src/wlan_hdd_cfg80211.c @@ -306,6 +306,23 @@ static struct ieee80211_channel hdd_channels_5_GHZ[] = HDD5GHZCHAN(5785,157, 0) , HDD5GHZCHAN(5805,161, 0) , HDD5GHZCHAN(5825,165, 0) , +#ifndef FEATURE_STATICALLY_ADD_11P_CHANNELS + HDD5GHZCHAN(5850,170, 0) , + HDD5GHZCHAN(5855,171, 0) , + HDD5GHZCHAN(5860,172, 0) , + HDD5GHZCHAN(5865,173, 0) , + HDD5GHZCHAN(5870,174, 0) , + HDD5GHZCHAN(5875,175, 0) , + HDD5GHZCHAN(5880,176, 0) , + HDD5GHZCHAN(5885,177, 0) , + HDD5GHZCHAN(5890,178, 0) , + HDD5GHZCHAN(5895,179, 0) , + HDD5GHZCHAN(5900,180, 0) , + HDD5GHZCHAN(5905,181, 0) , + HDD5GHZCHAN(5910,182, 0) , + HDD5GHZCHAN(5915,183, 0) , + HDD5GHZCHAN(5920,184, 0) , +#endif }; static struct ieee80211_rate g_mode_rates[] = diff --git a/CORE/HDD/src/wlan_hdd_hostapd.c b/CORE/HDD/src/wlan_hdd_hostapd.c index e41c109d3985..88f5223dd55d 100644 --- a/CORE/HDD/src/wlan_hdd_hostapd.c +++ b/CORE/HDD/src/wlan_hdd_hostapd.c @@ -3758,7 +3758,7 @@ static int __iw_softap_get_channel_list(struct net_device *dev, v_U32_t num_channels = 0; v_U8_t i = 0; v_U8_t bandStartChannel = RF_CHAN_1; - v_U8_t bandEndChannel = RF_CHAN_165; + v_U8_t bandEndChannel = RF_CHAN_184; hdd_adapter_t *pHostapdAdapter = (netdev_priv(dev)); tHalHandle hHal = WLAN_HDD_GET_HAL_CTX(pHostapdAdapter); tpChannelListInfo channel_list = (tpChannelListInfo) extra; @@ -3780,7 +3780,7 @@ static int __iw_softap_get_channel_list(struct net_device *dev, else if (eCSR_BAND_5G == curBand) { bandStartChannel = RF_CHAN_36; - bandEndChannel = RF_CHAN_165; + bandEndChannel = RF_CHAN_184; } hddLog(LOG1, FL("curBand = %d, bandStartChannel = %hu, " diff --git a/CORE/HDD/src/wlan_hdd_ipa.c b/CORE/HDD/src/wlan_hdd_ipa.c index ac1d22edcef0..bbb689658efc 100644 --- a/CORE/HDD/src/wlan_hdd_ipa.c +++ b/CORE/HDD/src/wlan_hdd_ipa.c @@ -2477,7 +2477,6 @@ static void hdd_ipa_send_pkt_to_tl(struct hdd_ipa_iface_context *iface_context, interface_id = adapter->sessionId; ++adapter->stats.tx_packets; - adapter->stats.tx_bytes += ipa_tx_desc->skb->len; adf_os_spin_unlock_bh(&iface_context->interface_lock); @@ -2489,12 +2488,16 @@ static void hdd_ipa_send_pkt_to_tl(struct hdd_ipa_iface_context *iface_context, #ifdef IPA_UC_STA_OFFLOAD NBUF_MAPPED_PADDR_LO(skb) = ipa_tx_desc->dma_addr + sizeof(struct frag_header) + sizeof(struct ipa_header); + ipa_tx_desc->skb->len -= + sizeof(struct frag_header) + sizeof(struct ipa_header); #else NBUF_MAPPED_PADDR_LO(skb) = ipa_tx_desc->dma_addr; #endif NBUF_OWNER_PRIV_DATA(skb) = (unsigned long)ipa_tx_desc; + adapter->stats.tx_bytes += ipa_tx_desc->skb->len; + skb = WLANTL_SendIPA_DataFrame(hdd_ipa->hdd_ctx->pvosContext, iface_context->tl_context, ipa_tx_desc->skb, interface_id); diff --git a/CORE/HDD/src/wlan_hdd_wext.c b/CORE/HDD/src/wlan_hdd_wext.c index f4e82261e009..6b5c1562f58c 100644 --- a/CORE/HDD/src/wlan_hdd_wext.c +++ b/CORE/HDD/src/wlan_hdd_wext.c @@ -129,7 +129,10 @@ static const hdd_freq_chan_map_t freq_chan_map[] = { {2412, 1}, {2417, 2}, {5520, 104}, {5540, 108}, {5560, 112}, {5580, 116}, {5600, 120}, {5620, 124}, {5640, 128}, {5660, 132}, {5680, 136}, {5700, 140}, {5720, 144}, {5745, 149}, {5765, 153}, {5785, 157}, {5805, 161}, - {5825, 165} }; + {5825, 165}, {5850, 170}, {5855, 171}, {5860, 172}, {5865, 173}, + {5870, 174}, {5875, 175}, {5880, 176}, {5885, 177}, {5890, 178}, + {5895, 179}, {5900, 180}, {5905, 181}, {5910, 182}, {5915, 183}, + {5920, 184} }; #define FREQ_CHAN_MAP_TABLE_SIZE (sizeof(freq_chan_map)/sizeof(freq_chan_map[0])) @@ -2898,18 +2901,12 @@ static int iw_get_linkspeed_priv(struct net_device *dev, /* Structure definitions for WLAN_SET_DOT11P_CHANNEL_SCHED */ #define NUM_AC (4) #define OCB_CHANNEL_MAX (5) -#define DOT11P_TX_PWR_MAX (23) #define AIFSN_MIN (2) #define AIFSN_MAX (15) #define CW_MIN (1) #define CW_MAX (10) #define HDD_OCB_SET_SCHED_TIME_OUT (1500) -#define NUM_DOT11P_CHANNELS 9 -static const uint32_t valid_dot11p_channels[NUM_DOT11P_CHANNELS] = { - 5860, 5870, 5880, 5890, 5900, 5910, 5920, 5875, 5905, -}; - /** * struct ocb_qos_params - QoS Parameters for each AC * @aifsn: Arbitration Inter-Frame Spacing @@ -2942,6 +2939,7 @@ struct ocb_channel { uint32_t tx_rate; struct ocb_qos_params qos_params[NUM_AC]; uint32_t per_packet_rx_stats; + uint32_t bandwidth; }; /** @@ -2957,34 +2955,14 @@ struct dot11p_channel_sched { }; /** - * dot11p_validate_channel() - Check if specified channel is valid - * @channel: Channel Frequency (MHz) - * - * Return: 0 on success. 1 on failure. - */ -static int dot11p_validate_channel(uint32_t channel) -{ - int i; - - for (i = 0; i < NUM_DOT11P_CHANNELS; i++) { - if (channel == valid_dot11p_channels[i]) { - return 0; - } - } - - return 1; -} - -/** - * dot11p_validate_qos_params() - Check if QoS parameters are valid + * dot11p_is_valid_qos() - Check if QoS parameters are valid * @qos_params: Array of QoS parameters * - * Return: 0 on success. 1 on failure. + * Return: true if valid, false otherwise. */ -static int dot11p_validate_qos_params(struct ocb_qos_params qos_params[]) +static bool dot11p_is_valid_qos(struct ocb_qos_params qos_params[]) { int i; - for (i = 0; i < NUM_AC; i++) { if ((!qos_params[i].aifsn) && (!qos_params[i].cwmin) && (!qos_params[i].cwmax)) { @@ -2994,50 +2972,177 @@ static int dot11p_validate_qos_params(struct ocb_qos_params qos_params[]) /* Validate AIFSN */ if ((qos_params[i].aifsn < AIFSN_MIN) || (qos_params[i].aifsn > AIFSN_MAX)) { - return 1; + return false; } /* Validate CWMin */ if ((qos_params[i].cwmin < CW_MIN) || (qos_params[i].cwmin > CW_MAX)) { - return 1; + return false; } /* Validate CWMax */ if ((qos_params[i].cwmax < CW_MIN) || (qos_params[i].cwmax > CW_MAX)) { - return 1; + return false; } } - return 0; + return true; } +#ifdef FEATURE_STATICALLY_ADD_11P_CHANNELS + +#define DOT11P_TX_PWR_MAX (30) +#define NUM_DOT11P_CHANNELS 9 +struct chan_info { + v_U32_t center_freq; + v_U32_t max_bandwidth; +}; + +struct chan_info valid_dot11p_channels[NUM_DOT11P_CHANNELS] = { + {5860, 10}, + {5870, 10}, + {5880, 10}, + {5890, 10}, + {5900, 10}, + {5910, 10}, + {5920, 10}, + {5875, 20}, + {5905, 20} +}; + /** - * dot11p_validate_sched() - Check if schedule is valid - * @sched: OCB channel schedule + * dot11p_is_valid_channel - returns true if the channel + * parameters is valid for a DSRC channel. This function of the + * function checks the channel parameters against a hardcoded + * list of valid channels based on the FCC rules. + * + * @param center_freq - the channel's center frequency + * @param bandwidth - the channel's bandwidth + * @param tx_power - transmit power * - * Return: 0 on success. 1 on failure. + * @return bool - true if the channel is valid, false otherwise */ -int dot11p_validate_sched(struct dot11p_channel_sched *sched) +static bool dot11p_is_valid_channel(struct wiphy *wiphy, + struct ocb_channel *channel) { int i; + for (i = 0; i < NUM_DOT11P_CHANNELS; i++) { + if (channel->channel_freq == valid_dot11p_channels[i].center_freq) { + if (channel->bandwidth == 0) + channel->bandwidth = valid_dot11p_channels[i].max_bandwidth; + else if (channel->bandwidth > + valid_dot11p_channels[i].max_bandwidth) + return false; + + if (channel->bandwidth != 5 && channel->bandwidth != 10 && + channel->bandwidth != 20) + return false; + if (channel->tx_power > DOT11P_TX_PWR_MAX) + return false; + + return true; + } + } + + return false; +} + +#else + +/** + * dot11p_is_valid_channel - returns true if the channel + * parameters is valid for a DSRC channel. + * + * @param center_freq - the channel's center frequency + * @param bandwidth - the channel's bandwidth + * @param tx_power - transmit power + * + * @return bool - true if the channel is valid, false otherwise + */ +static bool dot11p_is_valid_channel(struct wiphy *wiphy, + struct ocb_channel *channel) +{ + int band_idx, channel_idx; + struct ieee80211_supported_band* current_band; + struct ieee80211_channel* current_channel; + + for (band_idx = 0; band_idx < IEEE80211_NUM_BANDS; band_idx++) { + current_band = wiphy->bands[band_idx]; + if (!current_band) + continue; + + for (channel_idx = 0; channel_idx < current_band->n_channels; + channel_idx++) { + current_channel = ¤t_band->channels[channel_idx]; + + if (channel->channel_freq == current_channel->center_freq) { + if (current_channel->flags & IEEE80211_CHAN_DISABLED) + return false; + + switch (channel->bandwidth) { + case 0: + if (current_channel->flags & IEEE80211_CHAN_NO_10MHZ) + channel->bandwidth = 5; + else if (current_channel->flags & IEEE80211_CHAN_NO_20MHZ) + channel->bandwidth = 10; + else + channel->bandwidth = 20; + break; + case 5: + break; + case 10: + if (current_channel->flags & IEEE80211_CHAN_NO_10MHZ) + return false; + break; + case 20: + if (current_channel->flags & IEEE80211_CHAN_NO_20MHZ) + return false; + break; + default: + return false; + } + + if (channel->tx_power > current_channel->max_power) + return false; + + return true; + } + } + } + + return false; +} + +#endif + +/** + * dot11p_validate_sched - validates the schedule against the + * current regulatory domain. + * + * @param pAdapter - The current adapter with the wiphy + * structure + * @param sched - The schedule that was provided from the user application + * + * @return int - 0 if the schedule was validated + */ +static int dot11p_validate_sched(hdd_adapter_t *pAdapter, + struct dot11p_channel_sched *sched) +{ + int i; + hdd_context_t *pHddCtx = WLAN_HDD_GET_CTX(pAdapter); + if ((sched->num_channels > OCB_CHANNEL_MAX) || (sched->num_channels == 0)) { goto error; } for (i = 0; i < sched->num_channels; i++) { - /* Validate channel frequency */ - if (dot11p_validate_channel(sched->channels[i].channel_freq)) { - goto error; - } - - /* Validate TX Power */ - if (sched->channels[i].tx_power > DOT11P_TX_PWR_MAX) { + if (!dot11p_is_valid_channel(pHddCtx->wiphy, + &sched->channels[i])) goto error; - } /* Validate TX Rate */ switch (sched->channels[i].tx_rate) { @@ -3056,7 +3161,7 @@ int dot11p_validate_sched(struct dot11p_channel_sched *sched) } /* Validate QoS Params */ - if (dot11p_validate_qos_params(sched->channels[i].qos_params)) { + if (!(dot11p_is_valid_qos(sched->channels[i].qos_params))) { goto error; } @@ -3069,7 +3174,7 @@ int dot11p_validate_sched(struct dot11p_channel_sched *sched) return 0; error: - return 1; + return -1; } /** @@ -3204,7 +3309,7 @@ static int __iw_set_dot11p_channel_sched(struct net_device *dev, } sched = (struct dot11p_channel_sched *)extra; - if (dot11p_validate_sched(sched)) { + if (dot11p_validate_sched(adapter, sched)) { hddLog(LOGE, FL("OCB schedule validation failed!")); return -EINVAL; } @@ -3235,6 +3340,7 @@ static int __iw_set_dot11p_channel_sched(struct net_device *dev, sched_ptr = &sched_req->sched; sched_ptr->num_channels = 1; sched_ptr->channels[0].chan_freq = sched->channels[0].channel_freq; + sched_ptr->channels[0].bandwidth = sched->channels[0].bandwidth; sched_ptr->channels[0].tx_power = sched->channels[0].tx_power; sched_ptr->channels[0].tx_rate = sched->channels[0].tx_rate; for (i = 0; i < NUM_AC; i++) { @@ -5998,25 +6104,25 @@ static int __iw_setint_getnone(struct net_device *dev, break; } - case WE_SET_TXRX_FWSTATS: - { + case WE_SET_TXRX_FWSTATS: + { hddLog(LOG1, "WE_SET_TXRX_FWSTATS val %d", set_value); ret = process_wma_set_command((int)pAdapter->sessionId, - (int)WMA_VDEV_TXRX_FWSTATS_ENABLE_CMDID, - set_value, VDEV_CMD); - break; - } + (int)WMA_VDEV_TXRX_FWSTATS_ENABLE_CMDID, + set_value, VDEV_CMD); + break; + } - case WE_TXRX_FWSTATS_RESET: - { + case WE_TXRX_FWSTATS_RESET: + { hddLog(LOG1, "WE_TXRX_FWSTATS_RESET val %d", set_value); ret = process_wma_set_command((int)pAdapter->sessionId, - (int)WMA_VDEV_TXRX_FWSTATS_RESET_CMDID, - set_value, VDEV_CMD); - break; - } + (int)WMA_VDEV_TXRX_FWSTATS_RESET_CMDID, + set_value, VDEV_CMD); + break; + } - case WE_PPS_PAID_MATCH: + case WE_PPS_PAID_MATCH: { if(pAdapter->device_mode != WLAN_HDD_INFRA_STATION) return EINVAL; @@ -6028,19 +6134,19 @@ static int __iw_setint_getnone(struct net_device *dev, break; } - case WE_PPS_GID_MATCH: - { - if(pAdapter->device_mode != WLAN_HDD_INFRA_STATION) - return EINVAL; - hddLog(LOG1, "WMI_VDEV_PPS_GID_MATCH val %d ", set_value); + case WE_PPS_GID_MATCH: + { + if(pAdapter->device_mode != WLAN_HDD_INFRA_STATION) + return EINVAL; + hddLog(LOG1, "WMI_VDEV_PPS_GID_MATCH val %d ", set_value); ret = process_wma_set_command((int)pAdapter->sessionId, (int)WMI_VDEV_PPS_GID_MATCH, set_value, PPS_CMD); break; } - case WE_PPS_EARLY_TIM_CLEAR: - { + case WE_PPS_EARLY_TIM_CLEAR: + { if(pAdapter->device_mode != WLAN_HDD_INFRA_STATION) return EINVAL; hddLog(LOG1, " WMI_VDEV_PPS_EARLY_TIM_CLEAR val %d ", set_value); @@ -6050,7 +6156,7 @@ static int __iw_setint_getnone(struct net_device *dev, break; } - case WE_PPS_EARLY_DTIM_CLEAR: + case WE_PPS_EARLY_DTIM_CLEAR: { if(pAdapter->device_mode != WLAN_HDD_INFRA_STATION) return EINVAL; @@ -6061,7 +6167,7 @@ static int __iw_setint_getnone(struct net_device *dev, break; } - case WE_PPS_EOF_PAD_DELIM: + case WE_PPS_EOF_PAD_DELIM: { if(pAdapter->device_mode != WLAN_HDD_INFRA_STATION) return EINVAL; @@ -6072,7 +6178,7 @@ static int __iw_setint_getnone(struct net_device *dev, break; } - case WE_PPS_MACADDR_MISMATCH: + case WE_PPS_MACADDR_MISMATCH: { if(pAdapter->device_mode != WLAN_HDD_INFRA_STATION) return EINVAL; @@ -6083,7 +6189,7 @@ static int __iw_setint_getnone(struct net_device *dev, break; } - case WE_PPS_DELIM_CRC_FAIL: + case WE_PPS_DELIM_CRC_FAIL: { if(pAdapter->device_mode != WLAN_HDD_INFRA_STATION) return EINVAL; @@ -6095,7 +6201,7 @@ static int __iw_setint_getnone(struct net_device *dev, } - case WE_PPS_GID_NSTS_ZERO: + case WE_PPS_GID_NSTS_ZERO: { if(pAdapter->device_mode != WLAN_HDD_INFRA_STATION) return EINVAL; @@ -6107,7 +6213,7 @@ static int __iw_setint_getnone(struct net_device *dev, } - case WE_PPS_RSSI_CHECK: + case WE_PPS_RSSI_CHECK: { if(pAdapter->device_mode != WLAN_HDD_INFRA_STATION) return EINVAL; @@ -6144,7 +6250,7 @@ static int __iw_setint_getnone(struct net_device *dev, { hddLog(LOG1, "WE_SET_QPOWER_MAX_PSPOLL_COUNT val %d", set_value); - ret = process_wma_set_command((int)pAdapter->sessionId, + ret = process_wma_set_command((int)pAdapter->sessionId, (int)WMI_STA_PS_PARAM_QPOWER_PSPOLL_COUNT, set_value, QPOWER_CMD); break; @@ -6879,7 +6985,7 @@ static int __iw_setnone_getint(struct net_device *dev, break; } - case WE_GET_PPS_PAID_MATCH: + case WE_GET_PPS_PAID_MATCH: { hddLog(LOG1, "GET WMI_VDEV_PPS_PAID_MATCH"); *value = wma_cli_get_command(wmapvosContext, @@ -6889,7 +6995,7 @@ static int __iw_setnone_getint(struct net_device *dev, break; } - case WE_GET_PPS_GID_MATCH: + case WE_GET_PPS_GID_MATCH: { hddLog(LOG1, "GET WMI_VDEV_PPS_GID_MATCH"); *value = wma_cli_get_command(wmapvosContext, @@ -6897,9 +7003,9 @@ static int __iw_setnone_getint(struct net_device *dev, (int)WMI_VDEV_PPS_GID_MATCH, PPS_CMD); break; - } + } - case WE_GET_PPS_EARLY_TIM_CLEAR: + case WE_GET_PPS_EARLY_TIM_CLEAR: { hddLog(LOG1, "GET WMI_VDEV_PPS_EARLY_TIM_CLEAR"); *value = wma_cli_get_command(wmapvosContext, @@ -6907,9 +7013,9 @@ static int __iw_setnone_getint(struct net_device *dev, (int)WMI_VDEV_PPS_EARLY_TIM_CLEAR, PPS_CMD); break; - } + } - case WE_GET_PPS_EARLY_DTIM_CLEAR: + case WE_GET_PPS_EARLY_DTIM_CLEAR: { hddLog(LOG1, "GET WMI_VDEV_PPS_EARLY_DTIM_CLEAR"); *value = wma_cli_get_command(wmapvosContext, @@ -6917,9 +7023,9 @@ static int __iw_setnone_getint(struct net_device *dev, (int)WMI_VDEV_PPS_EARLY_DTIM_CLEAR, PPS_CMD); break; - } + } - case WE_GET_PPS_EOF_PAD_DELIM: + case WE_GET_PPS_EOF_PAD_DELIM: { hddLog(LOG1, "GET WMI_VDEV_PPS_EOF_PAD_DELIM"); *value = wma_cli_get_command(wmapvosContext, @@ -6927,9 +7033,9 @@ static int __iw_setnone_getint(struct net_device *dev, (int)WMI_VDEV_PPS_EOF_PAD_DELIM, PPS_CMD); break; - } + } - case WE_GET_PPS_MACADDR_MISMATCH: + case WE_GET_PPS_MACADDR_MISMATCH: { hddLog(LOG1, "GET WMI_VDEV_PPS_MACADDR_MISMATCH"); *value = wma_cli_get_command(wmapvosContext, @@ -6937,9 +7043,9 @@ static int __iw_setnone_getint(struct net_device *dev, (int)WMI_VDEV_PPS_MACADDR_MISMATCH, PPS_CMD); break; - } + } - case WE_GET_PPS_DELIM_CRC_FAIL: + case WE_GET_PPS_DELIM_CRC_FAIL: { hddLog(LOG1, "GET WMI_VDEV_PPS_DELIM_CRC_FAIL"); *value = wma_cli_get_command(wmapvosContext, @@ -6947,9 +7053,9 @@ static int __iw_setnone_getint(struct net_device *dev, (int)WMI_VDEV_PPS_DELIM_CRC_FAIL, PPS_CMD); break; - } + } - case WE_GET_PPS_GID_NSTS_ZERO: + case WE_GET_PPS_GID_NSTS_ZERO: { hddLog(LOG1, "GET WMI_VDEV_PPS_GID_NSTS_ZERO"); *value = wma_cli_get_command(wmapvosContext, @@ -6957,10 +7063,10 @@ static int __iw_setnone_getint(struct net_device *dev, (int)WMI_VDEV_PPS_GID_NSTS_ZERO, PPS_CMD); break; - } + } - case WE_GET_PPS_RSSI_CHECK: - { + case WE_GET_PPS_RSSI_CHECK: + { hddLog(LOG1, "GET WMI_VDEV_PPS_RSSI_CHECK"); *value = wma_cli_get_command(wmapvosContext, @@ -6968,7 +7074,7 @@ static int __iw_setnone_getint(struct net_device *dev, (int)WMI_VDEV_PPS_RSSI_CHECK, PPS_CMD); break; - } + } case WE_GET_QPOWER_MAX_PSPOLL_COUNT: { @@ -10808,57 +10914,57 @@ static const struct iw_priv_args we_private_args[] = { "get_pwrgating" }, { WE_GET_PPS_PAID_MATCH, - 0, - IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, - "get_paid_match"}, + 0, + IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, + "get_paid_match"}, { WE_GET_PPS_GID_MATCH, - 0, - IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, - "get_gid_match"}, + 0, + IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, + "get_gid_match"}, { WE_GET_PPS_EARLY_TIM_CLEAR, - 0, - IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, - "get_tim_clear"}, + 0, + IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, + "get_tim_clear"}, { WE_GET_PPS_EARLY_DTIM_CLEAR, - 0, - IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, - "get_dtim_clear"}, + 0, + IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, + "get_dtim_clear"}, { WE_GET_PPS_EOF_PAD_DELIM, - 0, - IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, - "get_eof_delim"}, + 0, + IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, + "get_eof_delim"}, { WE_GET_PPS_MACADDR_MISMATCH, - 0, - IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, - "get_mac_match"}, + 0, + IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, + "get_mac_match"}, { WE_GET_PPS_DELIM_CRC_FAIL, - 0, - IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, - "get_delim_fail"}, + 0, + IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, + "get_delim_fail"}, { WE_GET_PPS_GID_NSTS_ZERO, - 0, - IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, - "get_nsts_zero"}, + 0, + IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, + "get_nsts_zero"}, { WE_GET_PPS_RSSI_CHECK, - 0, - IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, - "get_rssi_chk"}, + 0, + IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, + "get_rssi_chk"}, { WE_GET_QPOWER_MAX_PSPOLL_COUNT, 0, diff --git a/CORE/MAC/inc/qwlan_version.h b/CORE/MAC/inc/qwlan_version.h index 5683b9a2e08b..308d8278d40e 100644 --- a/CORE/MAC/inc/qwlan_version.h +++ b/CORE/MAC/inc/qwlan_version.h @@ -42,9 +42,9 @@ BRIEF DESCRIPTION: #define QWLAN_VERSION_MINOR 0 #define QWLAN_VERSION_PATCH 10 #define QWLAN_VERSION_EXTRA "" -#define QWLAN_VERSION_BUILD 48 +#define QWLAN_VERSION_BUILD 49 -#define QWLAN_VERSIONSTR "4.0.10.48" +#define QWLAN_VERSIONSTR "4.0.10.49" #define AR6320_REV1_VERSION 0x5000000 diff --git a/CORE/MAC/inc/sirApi.h b/CORE/MAC/inc/sirApi.h index 022e6826dc04..353c9d932657 100644 --- a/CORE/MAC/inc/sirApi.h +++ b/CORE/MAC/inc/sirApi.h @@ -5625,6 +5625,7 @@ typedef struct sir_qos_params { typedef struct sir_ocb_channel { uint32_t chan_freq; + uint32_t bandwidth; uint32_t duration; uint32_t start_guard_interval; uint32_t end_guard_interval; diff --git a/CORE/MAC/inc/sirMacProtDef.h b/CORE/MAC/inc/sirMacProtDef.h index ce040d1e6ef1..c22001747aeb 100644 --- a/CORE/MAC/inc/sirMacProtDef.h +++ b/CORE/MAC/inc/sirMacProtDef.h @@ -55,6 +55,8 @@ #define SIR_11B_CHANNEL_END 14 #define SIR_11A_FREQUENCY_OFFSET 4 #define SIR_11B_FREQUENCY_OFFSET 1 +#define SIR_11P_CHANNEL_BEGIN 170 +#define SIR_11P_CHANNEL_END 184 /// Current version of 802.11 #define SIR_MAC_PROTOCOL_VERSION 0 diff --git a/CORE/SERVICES/HIF/PCIe/hif_pci.c b/CORE/SERVICES/HIF/PCIe/hif_pci.c index f325517b8813..21d3fd3f4083 100644 --- a/CORE/SERVICES/HIF/PCIe/hif_pci.c +++ b/CORE/SERVICES/HIF/PCIe/hif_pci.c @@ -1458,6 +1458,46 @@ HIFDiagWriteAccess(HIF_DEVICE *hif_device, A_UINT32 address, A_UINT32 data) } } +/** + * hif_dump_pipe_debug_count() - Log error count + * @hif_device: HIF device pointer. + * + * Output the pipe error counts of each pipe to log file + * + * Return: N/A + */ +void hif_dump_pipe_debug_count(HIF_DEVICE *hif_device) +{ + struct HIF_CE_state *hif_state; + struct hif_pci_softc *sc; + int pipe_num; + + if (hif_device == NULL) { + AR_DEBUG_PRINTF(ATH_DEBUG_ERR, ( + "%s hif_device is NULL", __func__)); + return; + } + hif_state = (struct HIF_CE_state *)hif_device; + if (hif_state == NULL) { + AR_DEBUG_PRINTF(ATH_DEBUG_ERR, ( + "%s hif_state is NULL", __func__)); + return; + } + sc = hif_state->sc; + for (pipe_num=0; pipe_num < sc->ce_count; pipe_num++) { + struct HIF_CE_pipe_info *pipe_info; + + pipe_info = &hif_state->pipe_info[pipe_num]; + AR_DEBUG_PRINTF(ATH_DEBUG_ERR, ( + "%s pipe_id = %d, recv_bufs_needed = %d, nbuf_alloc_err_count = %u, nbuf_dma_err_count = %u, nbuf_ce_enqueue_err_count = %u", + __func__, pipe_info->pipe_num, + atomic_read(&pipe_info->recv_bufs_needed), + pipe_info->nbuf_alloc_err_count, + pipe_info->nbuf_dma_err_count, + pipe_info->nbuf_ce_enqueue_err_count)); + } +} + static int hif_post_recv_buffers_for_pipe(struct HIF_CE_pipe_info *pipe_info) { @@ -1467,6 +1507,7 @@ hif_post_recv_buffers_for_pipe(struct HIF_CE_pipe_info *pipe_info) struct hif_pci_softc *sc = hif_state->sc; struct ol_softc *scn = sc->ol_sc; a_status_t ret; + uint32_t bufs_posted = 0; buf_sz = pipe_info->buf_sz; if (buf_sz == 0) { @@ -1487,8 +1528,14 @@ hif_post_recv_buffers_for_pipe(struct HIF_CE_pipe_info *pipe_info) nbuf = adf_nbuf_alloc(scn->adf_dev, buf_sz, 0, 4, FALSE); if (!nbuf) { - AR_DEBUG_PRINTF(ATH_DEBUG_ERR, ("%s buf alloc error [%d] needed %d\n", __FUNCTION__, pipe_info->pipe_num, atomic_read(&pipe_info->recv_bufs_needed))); + AR_DEBUG_PRINTF(ATH_DEBUG_ERR, + ("%s buf alloc error [%d] needed %d\n", + __func__, pipe_info->pipe_num, + atomic_read(&pipe_info->recv_bufs_needed))); atomic_inc(&pipe_info->recv_bufs_needed); + adf_os_spin_lock_bh(&pipe_info->recv_bufs_needed_lock); + pipe_info->nbuf_alloc_err_count++; + adf_os_spin_unlock_bh(&pipe_info->recv_bufs_needed_lock); return 1; } @@ -1516,20 +1563,47 @@ hif_post_recv_buffers_for_pipe(struct HIF_CE_pipe_info *pipe_info) ret = adf_nbuf_map_single(scn->adf_dev, nbuf, ADF_OS_DMA_FROM_DEVICE); if (unlikely(ret != A_STATUS_OK)) { - AR_DEBUG_PRINTF(ATH_DEBUG_ERR, ("%s mapping error\n", __FUNCTION__)); + AR_DEBUG_PRINTF(ATH_DEBUG_ERR, ("%s mapping error\n", __func__)); adf_nbuf_free(nbuf); atomic_inc(&pipe_info->recv_bufs_needed); + adf_os_spin_lock_bh(&pipe_info->recv_bufs_needed_lock); + pipe_info->nbuf_dma_err_count++; + adf_os_spin_unlock_bh(&pipe_info->recv_bufs_needed_lock); return 1; } CE_data = adf_nbuf_get_frag_paddr_lo(nbuf, 0); - pci_dma_sync_single_for_device(scn->sc_osdev->bdev, CE_data, buf_sz, PCI_DMA_FROMDEVICE); + pci_dma_sync_single_for_device(scn->sc_osdev->bdev, CE_data, + buf_sz, PCI_DMA_FROMDEVICE); status = CE_recv_buf_enqueue(ce_hdl, (void *)nbuf, CE_data); A_ASSERT(status == EOK); + if (status != EOK) { + AR_DEBUG_PRINTF(ATH_DEBUG_ERR, + ("%s CE_recv_buf_enqueue error [%d] needed %d\n", + __func__, pipe_info->pipe_num, + atomic_read(&pipe_info->recv_bufs_needed))); + atomic_inc(&pipe_info->recv_bufs_needed); + adf_nbuf_free(nbuf); + adf_os_spin_lock_bh(&pipe_info->recv_bufs_needed_lock); + pipe_info->nbuf_ce_enqueue_err_count++; + adf_os_spin_unlock_bh(&pipe_info->recv_bufs_needed_lock); + return 1; + } adf_os_spin_lock_bh(&pipe_info->recv_bufs_needed_lock); - } + bufs_posted++; + } + pipe_info->nbuf_alloc_err_count = + (pipe_info->nbuf_alloc_err_count > bufs_posted)? + pipe_info->nbuf_alloc_err_count - bufs_posted : 0; + pipe_info->nbuf_dma_err_count = + (pipe_info->nbuf_dma_err_count > bufs_posted)? + pipe_info->nbuf_dma_err_count - bufs_posted : 0; + pipe_info->nbuf_ce_enqueue_err_count = + (pipe_info->nbuf_ce_enqueue_err_count > bufs_posted)? + pipe_info->nbuf_ce_enqueue_err_count - bufs_posted : 0; + adf_os_spin_unlock_bh(&pipe_info->recv_bufs_needed_lock); return 0; diff --git a/CORE/SERVICES/HIF/PCIe/hif_pci.h b/CORE/SERVICES/HIF/PCIe/hif_pci.h index f2ae2dbefe34..2ab94a80e76a 100644 --- a/CORE/SERVICES/HIF/PCIe/hif_pci.h +++ b/CORE/SERVICES/HIF/PCIe/hif_pci.h @@ -90,6 +90,10 @@ struct HIF_CE_pipe_info { struct HIF_CE_completion_state_list *completion_space_list; struct HIF_CE_completion_state *completion_freeq_head; struct HIF_CE_completion_state *completion_freeq_tail; + /* adding three counts for debugging ring buffer errors */ + uint32_t nbuf_alloc_err_count; + uint32_t nbuf_dma_err_count; + uint32_t nbuf_ce_enqueue_err_count; } ; struct HIF_CE_state { @@ -146,6 +150,7 @@ void priv_dump_agc(struct hif_pci_softc *sc); void priv_start_cap_chaninfo(struct hif_pci_softc *sc); void priv_dump_chaninfo(struct hif_pci_softc *sc); void priv_dump_bbwatchdog(struct hif_pci_softc *sc); +void hif_dump_pipe_debug_count(HIF_DEVICE *hif_device); #define CE_HTT_T2H_MSG 1 #define CE_HTT_H2T_MSG 4 diff --git a/CORE/SERVICES/HIF/PCIe/if_pci.c b/CORE/SERVICES/HIF/PCIe/if_pci.c index 1f5c4fe02be2..4e253e4dc527 100644 --- a/CORE/SERVICES/HIF/PCIe/if_pci.c +++ b/CORE/SERVICES/HIF/PCIe/if_pci.c @@ -1671,6 +1671,8 @@ hif_pci_remove(struct pci_dev *pdev) pci_disable_msi(pdev); + hif_dump_pipe_debug_count(sc->hif_device); + hif_deinit_adf_ctx(scn); A_FREE(scn); A_FREE(sc->hif_device); @@ -1719,6 +1721,8 @@ void hif_pci_shutdown(struct pci_dev *pdev) if (!vos_is_ssr_ready(__func__)) printk("Host driver is not ready for SSR, attempting anyway\n"); + hif_dump_pipe_debug_count(sc->hif_device); + if (!WLAN_IS_EPPING_ENABLED(vos_get_conparam())) hdd_wlan_shutdown(); diff --git a/CORE/SERVICES/WMA/wlan_nv.c b/CORE/SERVICES/WMA/wlan_nv.c index d273e218ef69..14342c18cafb 100644 --- a/CORE/SERVICES/WMA/wlan_nv.c +++ b/CORE/SERVICES/WMA/wlan_nv.c @@ -896,6 +896,23 @@ const sHalNv nvDefaults = {NV_CHANNEL_ENABLE, 30}, //RF_CHAN_161, {NV_CHANNEL_ENABLE, 0}, //RF_CHAN_165, + // 802.11p + {NV_CHANNEL_DISABLE, 30}, //RF_CHAN_170, + {NV_CHANNEL_DISABLE, 30}, //RF_CHAN_171, + {NV_CHANNEL_ENABLE, 30}, //RF_CHAN_172, + {NV_CHANNEL_DISABLE, 30}, //RF_CHAN_173, + {NV_CHANNEL_ENABLE, 30}, //RF_CHAN_174, + {NV_CHANNEL_ENABLE, 30}, //RF_CHAN_175, + {NV_CHANNEL_ENABLE, 30}, //RF_CHAN_176, + {NV_CHANNEL_DISABLE, 30}, //RF_CHAN_177, + {NV_CHANNEL_ENABLE, 30}, //RF_CHAN_178, + {NV_CHANNEL_DISABLE, 30}, //RF_CHAN_179, + {NV_CHANNEL_ENABLE, 30}, //RF_CHAN_180, + {NV_CHANNEL_ENABLE, 30}, //RF_CHAN_181, + {NV_CHANNEL_ENABLE, 30}, //RF_CHAN_182, + {NV_CHANNEL_DISABLE, 30}, //RF_CHAN_183, + {NV_CHANNEL_ENABLE, 30}, //RF_CHAN_184, + //2.4GHz Band, channel bonded channels {NV_CHANNEL_ENABLE, 22}, //RF_CHAN_BOND_3, {NV_CHANNEL_ENABLE, 30}, //RF_CHAN_BOND_4, @@ -1045,6 +1062,23 @@ const sHalNv nvDefaults = {NV_CHANNEL_DISABLE, 0}, //RF_CHAN_161, {NV_CHANNEL_DISABLE, 0}, //RF_CHAN_165, + // 802.11p + {NV_CHANNEL_DISABLE, 30}, //RF_CHAN_170, + {NV_CHANNEL_DISABLE, 30}, //RF_CHAN_171, + {NV_CHANNEL_ENABLE, 30}, //RF_CHAN_172, + {NV_CHANNEL_DISABLE, 30}, //RF_CHAN_173, + {NV_CHANNEL_ENABLE, 30}, //RF_CHAN_174, + {NV_CHANNEL_DISABLE, 30}, //RF_CHAN_175, + {NV_CHANNEL_ENABLE, 30}, //RF_CHAN_176, + {NV_CHANNEL_DISABLE, 30}, //RF_CHAN_177, + {NV_CHANNEL_ENABLE, 30}, //RF_CHAN_178, + {NV_CHANNEL_DISABLE, 30}, //RF_CHAN_179, + {NV_CHANNEL_ENABLE, 30}, //RF_CHAN_180, + {NV_CHANNEL_DISABLE, 30}, //RF_CHAN_181, + {NV_CHANNEL_ENABLE, 30}, //RF_CHAN_182, + {NV_CHANNEL_DISABLE, 30}, //RF_CHAN_183, + {NV_CHANNEL_ENABLE, 30}, //RF_CHAN_184, + //2.4GHz Band, channel bonded channels {NV_CHANNEL_ENABLE, 20}, //RF_CHAN_BOND_3, {NV_CHANNEL_ENABLE, 20}, //RF_CHAN_BOND_4, diff --git a/CORE/SERVICES/WMA/wma.c b/CORE/SERVICES/WMA/wma.c index e40e103b2a9f..ae4babb9a405 100644 --- a/CORE/SERVICES/WMA/wma.c +++ b/CORE/SERVICES/WMA/wma.c @@ -23196,7 +23196,19 @@ static void wma_ocb_set_sched_req(void *wma_handle, req.chan = OCB_FREQ_TO_CHAN(sched->channels[0].chan_freq); req.max_txpow = sched->channels[0].tx_power; - req.is_half_rate = TRUE; + switch (sched->channels[0].bandwidth) { + case 10: + req.is_half_rate = true; + req.is_quarter_rate = false; + break; + case 5: + req.is_half_rate = false; + req.is_quarter_rate = true; + break; + default: + req.is_half_rate = false; + req.is_quarter_rate = false; + } if (wma->interfaces[vdev_id].vdev_up) { wma->interfaces[vdev_id].vdev_up = FALSE; diff --git a/CORE/SERVICES/WMA/wma.h b/CORE/SERVICES/WMA/wma.h index 74b0c025c259..dfa249e08cdb 100644 --- a/CORE/SERVICES/WMA/wma.h +++ b/CORE/SERVICES/WMA/wma.h @@ -110,7 +110,7 @@ #define WMA_11G_CHANNEL_BEGIN 1 #define WMA_11G_CHANNEL_END 14 -#define WMA_11P_CHANNEL_BEGIN (172) +#define WMA_11P_CHANNEL_BEGIN (170) #define WMA_11P_CHANNEL_END (184) #define WMA_LOGD(args...) \ diff --git a/CORE/SME/inc/csrApi.h b/CORE/SME/inc/csrApi.h index dde4a284a76a..fda5849b635f 100644 --- a/CORE/SME/inc/csrApi.h +++ b/CORE/SME/inc/csrApi.h @@ -750,7 +750,7 @@ typedef enum #define CSR_CB_CENTER_CHANNEL_OFFSET 2 #define CSR_MAX_24GHz_CHANNEL_NUMBER ( SIR_11B_CHANNEL_END ) #define CSR_MIN_5GHz_CHANNEL_NUMBER ( SIR_11A_CHANNEL_BEGIN ) -#define CSR_MAX_5GHz_CHANNEL_NUMBER ( SIR_11A_CHANNEL_END ) +#define CSR_MAX_5GHz_CHANNEL_NUMBER ( SIR_11P_CHANNEL_END ) // WEP keysize (in bits)... typedef enum diff --git a/CORE/SME/src/csr/csrApiRoam.c b/CORE/SME/src/csr/csrApiRoam.c index fd651672a5f9..80b46879179f 100644 --- a/CORE/SME/src/csr/csrApiRoam.c +++ b/CORE/SME/src/csr/csrApiRoam.c @@ -453,7 +453,6 @@ static tChannelPwrLimit csrFindChannelPwr(tChannelListWithPower * pdefaultPowerT return 0; } -#define NUM_DOT11P_CHANNELS 9 eHalStatus csrUpdateChannelList(tpAniSirGlobal pMac) { tSirUpdateChanList *pChanList; @@ -465,13 +464,6 @@ eHalStatus csrUpdateChannelList(tpAniSirGlobal pMac) tANI_U8 i, j, social_channel[MAX_SOCIAL_CHANNELS] = {1,6,11}; tANI_U8 channel_state; - /* Temporarily add list of 802.11P channels statically */ - /* TODO-OCB: Remove after channels are added to reg domain */ - tANI_U8 dot11p_channels[NUM_DOT11P_CHANNELS] = { - 172, 174, 176, 178, 180, 182, 184, 175, 181, - }; - tANI_U8 dot11p_power = 23; - if (CSR_IS_5G_BAND_ONLY(pMac)) { for (i = 0; i < MAX_SOCIAL_CHANNELS; i++) @@ -482,10 +474,6 @@ eHalStatus csrUpdateChannelList(tpAniSirGlobal pMac) } } - if (pMac->enable_dot11p) { - numChan += NUM_DOT11P_CHANNELS; - } - bufLen = sizeof(tSirUpdateChanList) + (sizeof(tSirUpdateChanParam) * (numChan)); @@ -538,20 +526,6 @@ eHalStatus csrUpdateChannelList(tpAniSirGlobal pMac) } } - if (pMac->enable_dot11p) { - /* Add 5.9 GHz channels */ - for (j = 0; j < NUM_DOT11P_CHANNELS; j++) { - pChanList->chanParam[num_channel].chanId = dot11p_channels[j]; - pChanList->chanParam[num_channel].pwr = dot11p_power; - pChanList->chanParam[num_channel].dfsSet = VOS_FALSE; - if ((pChanList->chanParam[num_channel].chanId != 175) - && (pChanList->chanParam[num_channel].chanId != 181)) { - pChanList->chanParam[num_channel].half_rate = VOS_TRUE; - } - num_channel++; - } - } - msg.type = WDA_UPDATE_CHAN_LIST_REQ; msg.reserved = 0; msg.bodyptr = pChanList; diff --git a/CORE/SME/src/csr/csrApiScan.c b/CORE/SME/src/csr/csrApiScan.c index e76c6311cdad..8590d6bff524 100644 --- a/CORE/SME/src/csr/csrApiScan.c +++ b/CORE/SME/src/csr/csrApiScan.c @@ -54,6 +54,7 @@ #define MIN_CHN_TIME_TO_FIND_GO 100 #define MAX_CHN_TIME_TO_FIND_GO 100 #define DIRECT_SSID_LEN 7 +#define MIN_11P_CHANNEL 170 /* * Purpose of HIDDEN_TIMER @@ -6185,9 +6186,10 @@ eHalStatus csrScanCopyRequest(tpAniSirGlobal pMac, tCsrScanRequest *pDstReq, tCs { NVchannel_state = vos_nv_getChannelEnabledState( pSrcReq->ChannelInfo.ChannelList[index]); - if ((NV_CHANNEL_ENABLE == NVchannel_state) || + if (pSrcReq->ChannelInfo.ChannelList[index] < MIN_11P_CHANNEL && + ((NV_CHANNEL_ENABLE == NVchannel_state) || ((NV_CHANNEL_DFS == NVchannel_state) && - !skip_dfs_chnl)) + !skip_dfs_chnl))) { pDstReq->ChannelInfo.ChannelList[new_index] = pSrcReq->ChannelInfo.ChannelList[index]; @@ -6208,9 +6210,10 @@ eHalStatus csrScanCopyRequest(tpAniSirGlobal pMac, tCsrScanRequest *pDstReq, tCs * that is the only way to find p2p peers. * This can happen only if band is set to 5Ghz mode. */ - if((csrRoamIsValidChannel(pMac, pSrcReq->ChannelInfo.ChannelList[index])) || + if(pSrcReq->ChannelInfo.ChannelList[index] < MIN_11P_CHANNEL && + ((csrRoamIsValidChannel(pMac, pSrcReq->ChannelInfo.ChannelList[index])) || ((eCSR_SCAN_P2P_DISCOVERY == pSrcReq->requestType) && - CSR_IS_SOCIAL_CHANNEL(pSrcReq->ChannelInfo.ChannelList[index]))) + CSR_IS_SOCIAL_CHANNEL(pSrcReq->ChannelInfo.ChannelList[index])))) { if( ((pSrcReq->skipDfsChnlInP2pSearch || skip_dfs_chnl) && @@ -6273,13 +6276,22 @@ eHalStatus csrScanCopyRequest(tpAniSirGlobal pMac, tCsrScanRequest *pDstReq, tCs } else { - smsLog(pMac, LOGE, FL("Couldn't get the valid Channel" + smsLog(pMac, LOGE, FL("Couldn't get the valid Channel" " List, keeping requester's list")); - vos_mem_copy(pDstReq->ChannelInfo.ChannelList, - pSrcReq->ChannelInfo.ChannelList, - pSrcReq->ChannelInfo.numOfChannels - * sizeof(*pDstReq->ChannelInfo.ChannelList)); - pDstReq->ChannelInfo.numOfChannels = pSrcReq->ChannelInfo.numOfChannels; + new_index = 0; + for ( index = 0; + index < pSrcReq->ChannelInfo.numOfChannels; + index++ ) + { + if (pSrcReq->ChannelInfo.ChannelList[index] < + MIN_11P_CHANNEL) + { + pDstReq->ChannelInfo.ChannelList[new_index] = + pSrcReq->ChannelInfo.ChannelList[index]; + new_index++; + } + } + pDstReq->ChannelInfo.numOfChannels = new_index; } }//Allocate memory for Channel List } diff --git a/CORE/VOSS/src/vos_nvitem.c b/CORE/VOSS/src/vos_nvitem.c index 72d1d8a4fb53..7897df5b2f48 100644 --- a/CORE/VOSS/src/vos_nvitem.c +++ b/CORE/VOSS/src/vos_nvitem.c @@ -85,32 +85,33 @@ static v_BOOL_t init_by_reg_core = VOS_FALSE; */ /* Only these channels all allow active scan on all world regulatory domains */ -#define REG_RULE_2GHZ_CH01_11 REG_RULE(2412-10, 2462+10, 40, 0, 20, 0) +#define REG_RULE_2GHZ_CH01_11 REG_RULE(2412-10, 2462+10, 40, 0, 20, 0) /* We enable active scan on these a case by case basis by regulatory domain */ -#define REG_RULE_2GHZ_CH12_13 REG_RULE(2467-10, 2472+10, 40, 0, 20,\ +#define REG_RULE_2GHZ_CH12_13 REG_RULE(2467-10, 2472+10, 40, 0, 20,\ NL80211_RRF_PASSIVE_SCAN) -#define REG_RULE_2GHZ_CH14 REG_RULE(2484-10, 2484+10, 40, 0, 20,\ +#define REG_RULE_2GHZ_CH14 REG_RULE(2484-10, 2484+10, 40, 0, 20,\ NL80211_RRF_PASSIVE_SCAN | NL80211_RRF_NO_OFDM) /* We allow IBSS on these on a case by case basis by regulatory domain */ -#define REG_RULE_5GHZ_5150_5350 REG_RULE(5150-10, 5350+10, 80, 0, 30,\ +#define REG_RULE_5GHZ_5150_5350 REG_RULE(5150-10, 5350+10, 80, 0, 30,\ NL80211_RRF_PASSIVE_SCAN | NL80211_RRF_NO_IBSS) -#define REG_RULE_5GHZ_5470_5850 REG_RULE(5470-10, 5850+10, 80, 0, 30,\ +#define REG_RULE_5GHZ_5470_5925 REG_RULE(5470-10, 5925+10, 80, 0, 30,\ NL80211_RRF_PASSIVE_SCAN | NL80211_RRF_NO_IBSS) -#define REG_RULE_5GHZ_5725_5850 REG_RULE(5725-10, 5850+10, 80, 0, 30,\ +#define REG_RULE_5GHZ_5725_5925 REG_RULE(5725-10, 5925+10, 80, 0, 30,\ NL80211_RRF_PASSIVE_SCAN | NL80211_RRF_NO_IBSS) -#define REG_RULE_2GHZ_ALL REG_RULE_2GHZ_CH01_11, \ +#define REG_RULE_2GHZ_ALL REG_RULE_2GHZ_CH01_11, \ REG_RULE_2GHZ_CH12_13, \ REG_RULE_2GHZ_CH14 -#define REG_RULE_5GHZ_ALL REG_RULE_5GHZ_5150_5350, \ - REG_RULE_5GHZ_5470_5850 +#define REG_RULE_5GHZ_ALL REG_RULE_5GHZ_5150_5350, \ + REG_RULE_5GHZ_5470_5925 /* This one skips what we call "mid band" */ -#define REG_RULE_5GHZ_NO_MIDBAND REG_RULE_5GHZ_5150_5350, \ - REG_RULE_5GHZ_5725_5850 +#define REG_RULE_5GHZ_NO_MIDBAND REG_RULE_5GHZ_5150_5350, \ + REG_RULE_5GHZ_5725_5925 + #define WORLD_SKU_MASK 0x00F0 #define WORLD_SKU_PREFIX 0x0060 @@ -402,6 +403,24 @@ const tRfChannelProps rfChannels[NUM_RF_CHANNELS] = { 5785, 157, RF_SUBBAND_5_HIGH_GHZ}, //RF_CHAN_157, { 5805, 161, RF_SUBBAND_5_HIGH_GHZ}, //RF_CHAN_161, { 5825, 165, RF_SUBBAND_5_HIGH_GHZ}, //RF_CHAN_165, + + /* 5.9GHz 10 MHz bandwidth (802.11p) */ + { 5850, 170, RF_SUBBAND_5_HIGH_GHZ}, //RF_CHAN_170, + { 5855, 171, RF_SUBBAND_5_HIGH_GHZ}, //RF_CHAN_171, + { 5860, 172, RF_SUBBAND_5_HIGH_GHZ}, //RF_CHAN_172, + { 5865, 173, RF_SUBBAND_5_HIGH_GHZ}, //RF_CHAN_173, + { 5870, 174, RF_SUBBAND_5_HIGH_GHZ}, //RF_CHAN_174, + { 5875, 175, RF_SUBBAND_5_HIGH_GHZ}, //RF_CHAN_175, + { 5880, 176, RF_SUBBAND_5_HIGH_GHZ}, //RF_CHAN_176, + { 5885, 177, RF_SUBBAND_5_HIGH_GHZ}, //RF_CHAN_177, + { 5890, 178, RF_SUBBAND_5_HIGH_GHZ}, //RF_CHAN_178, + { 5895, 179, RF_SUBBAND_5_HIGH_GHZ}, //RF_CHAN_179, + { 5900, 180, RF_SUBBAND_5_HIGH_GHZ}, //RF_CHAN_180, + { 5905, 181, RF_SUBBAND_5_HIGH_GHZ}, //RF_CHAN_181, + { 5910, 182, RF_SUBBAND_5_HIGH_GHZ}, //RF_CHAN_182, + { 5915, 183, RF_SUBBAND_5_HIGH_GHZ}, //RF_CHAN_183, + { 5920, 184, RF_SUBBAND_5_HIGH_GHZ}, //RF_CHAN_184, + { 2422, 3 , NUM_RF_SUBBANDS}, //RF_CHAN_BOND_3, { 2427, 4 , NUM_RF_SUBBANDS}, //RF_CHAN_BOND_4, { 2432, 5 , NUM_RF_SUBBANDS}, //RF_CHAN_BOND_5, @@ -863,7 +882,7 @@ VOS_STATUS vos_nv_getChannelListWithPower(tChannelListWithPower *channels20MHz / channels20MHz[count++].pwr = regChannels[i].pwrLimit; } } - for( i = RF_CHAN_36; i <= RF_CHAN_165; i++ ) + for( i = RF_CHAN_36; i <= RF_CHAN_184; i++ ) { if( regChannels[i].enabled ) { @@ -938,7 +957,7 @@ VOS_STATUS vos_nv_getSupportedChannels( v_U8_t *p20MhzChannels, int *pNum20MhzCh { p20MhzChannels[count++] = rfChannels[i].channelNum; } - for( i = RF_CHAN_36; i <= RF_CHAN_165; i++ ) + for( i = RF_CHAN_36; i <= RF_CHAN_184; i++ ) { p20MhzChannels[count++] = rfChannels[i].channelNum; } @@ -986,7 +1005,7 @@ eNVChannelEnabledType vos_nv_getChannelEnabledState v_U32_t channelLoop; eRfChannels channelEnum = INVALID_RF_CHANNEL; - for(channelLoop = 0; channelLoop <= RF_CHAN_165; channelLoop++) + for(channelLoop = 0; channelLoop <= RF_CHAN_184; channelLoop++) { if(rfChannels[channelLoop].channelNum == rfChannel) { @@ -1295,6 +1314,26 @@ VOS_STATUS vos_nv_getRegDomainFromCountryCode( v_REGDOMAIN_t *pRegDomain, return VOS_STATUS_SUCCESS; } +#ifdef FEATURE_STATICALLY_ADD_11P_CHANNELS +#define DEFAULT_11P_POWER (30) +// Returns whether a channel is valid for DSRC. +static int is_dsrc_channel(v_U16_t center_freq) +{ + switch (center_freq) { + case 5860: + case 5870: + case 5880: + case 5890: + case 5900: + case 5910: + case 5920: + case 5875: + case 5905: + return 1; + } + return 0; +} +#endif /* create_linux_regulatory_entry to populate internal structures from wiphy */ static int create_linux_regulatory_entry(struct wiphy *wiphy, @@ -1307,7 +1346,7 @@ static int create_linux_regulatory_entry(struct wiphy *wiphy, #if (LINUX_VERSION_CODE < KERNEL_VERSION(3,9,0)) && !defined(WITH_BACKPORTS) int err; #endif - const struct ieee80211_reg_rule *reg_rule; + const struct ieee80211_reg_rule *reg_rule; pVosContext = vos_get_global_context(VOS_MODULE_ID_SYS, NULL); if (NULL != pVosContext) @@ -1360,6 +1399,13 @@ static int create_linux_regulatory_entry(struct wiphy *wiphy, else m = wiphy->bands[i-1]->n_channels + m; + if (pnvEFSTable == NULL) + { + VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR, + "error: pnvEFSTable is NULL, probably not parsed nv.bin yet"); + return -1; + } + for (j = 0; j < wiphy->bands[i]->n_channels; j++) { /* k = (m + j) is internal current channel index for 20MHz channel @@ -1368,13 +1414,11 @@ static int create_linux_regulatory_entry(struct wiphy *wiphy, k = m + j; n = bw20_ch_index_to_bw40_ch_index(k); - if (n == -1) - return -1; - /* If the regulatory rules for a country do not explicilty * require a passive scan on a frequency, lift the passive * scan restriction - */ + * When getting the regulatory rule, specify the smallest bandwidth. + * That's 5 MHz. A larger bandwidth may not fit into the frequency range. */ #if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,9,0)) || defined(WITH_BACKPORTS) reg_rule = freq_reg_info(wiphy, MHZ_TO_KHZ(wiphy->bands[i]->channels[j].center_freq)); @@ -1416,18 +1460,25 @@ static int create_linux_regulatory_entry(struct wiphy *wiphy, } } +#ifdef FEATURE_STATICALLY_ADD_11P_CHANNELS + if (is_dsrc_channel(wiphy->bands[i]->channels[j].center_freq)) + { + pnvEFSTable->halnv.tables.regDomains[temp_reg_domain]. + channels[k].enabled = NV_CHANNEL_ENABLE; + + /* max_power is in dBm */ + pnvEFSTable->halnv.tables.regDomains[temp_reg_domain].channels[k].pwrLimit = + DEFAULT_11P_POWER; + } + else +#endif if (wiphy->bands[i]->channels[j].flags & IEEE80211_CHAN_DISABLED) { - if (pnvEFSTable == NULL) - { - VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR, - "error: pnvEFSTable is NULL, probably not parsed nv.bin yet"); - return -1; - } pnvEFSTable->halnv.tables.regDomains[temp_reg_domain].channels[k].enabled = NV_CHANNEL_DISABLE; - pnvEFSTable->halnv.tables.regDomains[temp_reg_domain].channels[n].enabled = - NV_CHANNEL_DISABLE; + if (n != -1) + pnvEFSTable->halnv.tables.regDomains[temp_reg_domain].channels[n].enabled = + NV_CHANNEL_DISABLE; } /* nv cannot distinguish between DFS and passive channels */ @@ -1443,20 +1494,23 @@ static int create_linux_regulatory_entry(struct wiphy *wiphy, /* Disable the center channel if neither HT40+ nor HT40- is allowed */ - if ((wiphy->bands[i]->channels[j].flags & IEEE80211_CHAN_NO_HT40) == - IEEE80211_CHAN_NO_HT40 ) + if (n != -1) { - pnvEFSTable->halnv.tables.regDomains[temp_reg_domain].channels[n].enabled = - NV_CHANNEL_DISABLE; - } - else - { - pnvEFSTable->halnv.tables.regDomains[temp_reg_domain].channels[n].enabled = - NV_CHANNEL_DFS; + if ((wiphy->bands[i]->channels[j].flags & IEEE80211_CHAN_NO_HT40) == + IEEE80211_CHAN_NO_HT40 ) + { + pnvEFSTable->halnv.tables.regDomains[temp_reg_domain].channels[n].enabled = + NV_CHANNEL_DISABLE; + } + else + { + pnvEFSTable->halnv.tables.regDomains[temp_reg_domain].channels[n].enabled = + NV_CHANNEL_DFS; - /* 40MHz channel power is half of 20MHz (-3dB) ?? */ - pnvEFSTable->halnv.tables.regDomains[temp_reg_domain].channels[n].pwrLimit = - (tANI_S8) (((wiphy->bands[i]->channels[j].max_power))-3); + /* 40MHz channel power is half of 20MHz (-3dB) ?? */ + pnvEFSTable->halnv.tables.regDomains[temp_reg_domain].channels[n].pwrLimit = + (tANI_S8) (((wiphy->bands[i]->channels[j].max_power))-3); + } } if ((wiphy->bands[i]->channels[j].flags & IEEE80211_CHAN_NO_80MHZ) == 0) { @@ -1482,19 +1536,22 @@ static int create_linux_regulatory_entry(struct wiphy *wiphy, /* Disable the center channel if neither HT40+ nor HT40- is allowed */ - if ((wiphy->bands[i]->channels[j].flags & IEEE80211_CHAN_NO_HT40) == - IEEE80211_CHAN_NO_HT40 ) - { - pnvEFSTable->halnv.tables.regDomains[temp_reg_domain].channels[n].enabled = - NV_CHANNEL_DISABLE; - } - else + if (n != -1) { - pnvEFSTable->halnv.tables.regDomains[temp_reg_domain].channels[n].enabled = - NV_CHANNEL_ENABLE; - /* 40MHz channel power is half of 20MHz (-3dB) */ - pnvEFSTable->halnv.tables.regDomains[temp_reg_domain].channels[n].pwrLimit = - (tANI_S8) (((wiphy->bands[i]->channels[j].max_power))-3); + if ((wiphy->bands[i]->channels[j].flags & IEEE80211_CHAN_NO_HT40) == + IEEE80211_CHAN_NO_HT40 ) + { + pnvEFSTable->halnv.tables.regDomains[temp_reg_domain].channels[n].enabled = + NV_CHANNEL_DISABLE; + } + else + { + pnvEFSTable->halnv.tables.regDomains[temp_reg_domain].channels[n].enabled = + NV_CHANNEL_ENABLE; + /* 40MHz channel power is half of 20MHz (-3dB) */ + pnvEFSTable->halnv.tables.regDomains[temp_reg_domain].channels[n].pwrLimit = + (tANI_S8) (((wiphy->bands[i]->channels[j].max_power))-3); + } } if ((wiphy->bands[i]->channels[j].flags & IEEE80211_CHAN_NO_80MHZ) == 0) { @@ -1795,7 +1852,7 @@ VOS_STATUS vos_init_wiphy_from_nv_bin(void) #endif } else if (REGDOMAIN_WORLD == - pnvEFSTable->halnv.tables.defaultCountryTable.regDomain) { + pnvEFSTable->halnv.tables.defaultCountryTable.regDomain) { reg_domain = pnvEFSTable->halnv.tables.defaultCountryTable.regDomain; #if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,14,0)) || defined(WITH_BACKPORTS) @@ -264,6 +264,9 @@ CONFIG_TARGET_RAMDUMP_AFTER_KERNEL_PANIC := 1 #Flag to enable Stats Ext implementation CONFIG_FEATURE_STATS_EXT := 1 +#Flag to force the inclusion of the 802.11p channels because support +#for these channels has not yet been added to the kernel. +CONFIG_STATICALLY_ADD_11P_CHANNELS := n ifeq ($(CONFIG_CFG80211),y) HAVE_CFG80211 := 1 @@ -1347,6 +1350,10 @@ ifdef CPTCFG_QCA_CLD_WLAN CDEFINES += -DWITH_BACKPORTS endif +ifeq ($(CONFIG_STATICALLY_ADD_11P_CHANNELS),y) +CDEFINES += -DFEATURE_STATICALLY_ADD_11P_CHANNELS +endif + KBUILD_CPPFLAGS += $(CDEFINES) # Currently, for versions of gcc which support it, the kernel Makefile diff --git a/wcnss/inc/wlan_nv.h b/wcnss/inc/wlan_nv.h index c4522fd7d241..5c00fbe57e62 100644 --- a/wcnss/inc/wlan_nv.h +++ b/wcnss/inc/wlan_nv.h @@ -286,6 +286,23 @@ typedef enum RF_CHAN_161, RF_CHAN_165, + // 802.11p + RF_CHAN_170, + RF_CHAN_171, + RF_CHAN_172, + RF_CHAN_173, + RF_CHAN_174, + RF_CHAN_175, + RF_CHAN_176, + RF_CHAN_177, + RF_CHAN_178, + RF_CHAN_179, + RF_CHAN_180, + RF_CHAN_181, + RF_CHAN_182, + RF_CHAN_183, + RF_CHAN_184, + //CHANNEL BONDED CHANNELS RF_CHAN_BOND_3, RF_CHAN_BOND_4, @@ -332,11 +349,11 @@ typedef enum MAX_2_4GHZ_CHANNEL = RF_CHAN_14, MIN_5GHZ_CHANNEL = RF_CHAN_240, - MAX_5GHZ_CHANNEL = RF_CHAN_165, + MAX_5GHZ_CHANNEL = RF_CHAN_184, NUM_5GHZ_CHANNELS = (MAX_5GHZ_CHANNEL - MIN_5GHZ_CHANNEL + 1), MIN_20MHZ_RF_CHANNEL = RF_CHAN_1, - MAX_20MHZ_RF_CHANNEL = RF_CHAN_165, + MAX_20MHZ_RF_CHANNEL = RF_CHAN_184, NUM_20MHZ_RF_CHANNELS = (MAX_20MHZ_RF_CHANNEL - MIN_20MHZ_RF_CHANNEL + 1), MIN_40MHZ_RF_CHANNEL = RF_CHAN_BOND_3, @@ -440,10 +457,10 @@ typedef PACKED_PRE struct PACKED_POST uint8 nv_TxBBFSel9MHz : 1; uint8 hwParam1 : 7; uint8 hwParam2; - + uint16 custom_tcxo_reg8; uint16 custom_tcxo_reg9; - + uint32 hwParam3; uint32 hwParam4; uint32 hwParam5; @@ -598,7 +615,7 @@ typedef enum #ifdef WCN_PRONTO HAL_PHY_RATE_VHT_20MHZ_MCS_1NSS_NGI_86_5_MBPS, #endif - + /*11AC rate 20MHZ Shortl GI*/ HAL_PHY_RATE_VHT_20MHZ_MCS_1NSS_SGI_7_2_MBPS, HAL_PHY_RATE_VHT_20MHZ_MCS_1NSS_SGI_14_4_MBPS, @@ -612,7 +629,7 @@ typedef enum #ifdef WCN_PRONTO HAL_PHY_RATE_VHT_20MHZ_MCS_1NSS_SGI_96_1_MBPS, #endif - + /*11AC rates 40MHZ normal GI*/ HAL_PHY_RATE_VHT_40MHZ_MCS_1NSS_CB_NGI_13_5_MBPS , HAL_PHY_RATE_VHT_40MHZ_MCS_1NSS_CB_NGI_27_MBPS, @@ -624,7 +641,7 @@ typedef enum HAL_PHY_RATE_VHT_40MHZ_MCS_1NSS_CB_NGI_135_MBPS, HAL_PHY_RATE_VHT_40MHZ_MCS_1NSS_CB_NGI_162_MBPS, HAL_PHY_RATE_VHT_40MHZ_MCS_1NSS_CB_NGI_180_MBPS, - + /*11AC rates 40MHZ short GI*/ HAL_PHY_RATE_VHT_40MHZ_MCS_1NSS_CB_SGI_15_MBPS , HAL_PHY_RATE_VHT_40MHZ_MCS_1NSS_CB_SGI_30_MBPS, @@ -636,7 +653,7 @@ typedef enum HAL_PHY_RATE_VHT_40MHZ_MCS_1NSS_CB_SGI_150_MBPS, HAL_PHY_RATE_VHT_40MHZ_MCS_1NSS_CB_SGI_180_MBPS, HAL_PHY_RATE_VHT_40MHZ_MCS_1NSS_CB_SGI_200_MBPS, - + /*11AC rates 80 MHZ normal GI*/ HAL_PHY_RATE_VHT_80MHZ_MCS_1NSS_CB_NGI_29_3_MBPS , HAL_PHY_RATE_VHT_80MHZ_MCS_1NSS_CB_NGI_58_5_MBPS, @@ -648,7 +665,7 @@ typedef enum HAL_PHY_RATE_VHT_80MHZ_MCS_1NSS_CB_NGI_292_5_MBPS, HAL_PHY_RATE_VHT_80MHZ_MCS_1NSS_CB_NGI_351_MBPS, HAL_PHY_RATE_VHT_80MHZ_MCS_1NSS_CB_NGI_390_MBPS, - + /*11AC rates 80 MHZ short GI*/ HAL_PHY_RATE_VHT_80MHZ_MCS_1NSS_CB_SGI_32_5_MBPS , HAL_PHY_RATE_VHT_80MHZ_MCS_1NSS_CB_SGI_65_MBPS, @@ -705,7 +722,7 @@ typedef PACKED_PRE struct PACKED_POST typedef PACKED_PRE struct PACKED_POST { - uint8 skuID; + uint8 skuID; uint8 tpcMode2G; uint8 tpcMode5G; uint8 configItem1; |
