From ca5d92226337ece4308814bca33780d6686cf558 Mon Sep 17 00:00:00 2001 From: Ashish Kumar Dhanotiya Date: Thu, 29 Aug 2019 18:56:32 +0530 Subject: [PATCH] qcacld-3.0: Process rx_mgmt_pkt based on frequency As a part of 802.11ax amendment, 6GHz band operation is added. Since the 6 GHz channel numbers are overlapping with existing 2.4GHz and 5GHz channel numbers, use frequency to identify unique channel operation instead of channel number. Channel frequency is unique across bands. As part of above requirement add logic to process rx mgmt packets based on the frequencies instead of channel numbers. Change-Id: Ib063070738ecdb4f83379eafe50629778a490aae CRs-fixed: 2522693 --- .../p2p/core/src/wlan_p2p_off_chan_tx.c | 8 +++--- .../dispatcher/inc/wlan_p2p_public_struct.h | 4 +-- .../p2p/dispatcher/src/wlan_p2p_tgt_api.c | 2 +- components/tdls/core/src/wlan_tdls_mgmt.c | 8 +++--- .../dispatcher/inc/wlan_tdls_public_structs.h | 4 +-- .../tdls/dispatcher/src/wlan_tdls_tgt_api.c | 2 +- core/cds/src/i_cds_packet.h | 4 +-- core/hdd/inc/wlan_hdd_p2p.h | 4 +-- core/hdd/src/wlan_hdd_main.c | 4 +-- core/hdd/src/wlan_hdd_p2p.c | 27 +++++++----------- core/mac/inc/sir_api.h | 2 +- core/mac/src/pe/lim/lim_api.c | 2 +- .../mac/src/pe/lim/lim_process_action_frame.c | 18 ++++++------ core/mac/src/pe/lim/lim_process_auth_frame.c | 4 +-- .../src/pe/lim/lim_process_message_queue.c | 28 +++++++++++-------- .../src/pe/lim/lim_process_probe_req_frame.c | 3 +- core/mac/src/pe/lim/lim_scan_result_utils.c | 2 -- core/mac/src/pe/lim/lim_utils.c | 4 +-- core/mac/src/pe/lim/lim_utils.h | 4 +-- .../src/sys/legacy/src/utils/src/parser_api.c | 6 ++-- core/sap/src/sap_ch_select.c | 6 ++-- core/sme/src/csr/csr_api_scan.c | 22 ++++++++------- core/wma/inc/wma_types.h | 4 +-- core/wma/src/wma_mgmt.c | 2 +- os_if/p2p/src/wlan_cfg80211_p2p.c | 24 ++++++---------- os_if/tdls/src/wlan_cfg80211_tdls.c | 24 ++++++---------- 26 files changed, 104 insertions(+), 118 deletions(-) diff --git a/components/p2p/core/src/wlan_p2p_off_chan_tx.c b/components/p2p/core/src/wlan_p2p_off_chan_tx.c index b74e709e2de0..014d31691480 100644 --- a/components/p2p/core/src/wlan_p2p_off_chan_tx.c +++ b/components/p2p/core/src/wlan_p2p_off_chan_tx.c @@ -3015,10 +3015,10 @@ QDF_STATUS p2p_process_rx_mgmt( return QDF_STATUS_E_INVAL; } - p2p_debug("soc:%pK, frame_len:%d, rx_chan:%d, vdev_id:%d, frm_type:%d, rx_rssi:%d, buf:%pK", - p2p_soc_obj->soc, rx_mgmt->frame_len, - rx_mgmt->rx_chan, rx_mgmt->vdev_id, rx_mgmt->frm_type, - rx_mgmt->rx_rssi, rx_mgmt->buf); + p2p_debug("soc:%pK, frame_len:%d, rx_freq:%d, vdev_id:%d, frm_type:%d, rx_rssi:%d, buf:%pK", + p2p_soc_obj->soc, rx_mgmt->frame_len, + rx_mgmt->rx_freq, rx_mgmt->vdev_id, rx_mgmt->frm_type, + rx_mgmt->rx_rssi, rx_mgmt->buf); if (rx_mgmt->frm_type == MGMT_ACTION_VENDOR_SPECIFIC) { p2p_get_frame_info(rx_mgmt->buf, rx_mgmt->frame_len, diff --git a/components/p2p/dispatcher/inc/wlan_p2p_public_struct.h b/components/p2p/dispatcher/inc/wlan_p2p_public_struct.h index 0172ff34fb16..33fd71c70b40 100644 --- a/components/p2p/dispatcher/inc/wlan_p2p_public_struct.h +++ b/components/p2p/dispatcher/inc/wlan_p2p_public_struct.h @@ -103,7 +103,7 @@ struct p2p_event { /** * struct p2p_rx_mgmt_frame - rx mgmt frame structure * @frame_len: Frame length - * @rx_chan: RX channel + * @rx_freq: RX Frequency * @vdev_id: Vdev id * @frm_type: Frame type * @rx_rssi: RX rssi @@ -111,7 +111,7 @@ struct p2p_event { */ struct p2p_rx_mgmt_frame { uint32_t frame_len; - uint32_t rx_chan; + uint32_t rx_freq; uint32_t vdev_id; uint32_t frm_type; uint32_t rx_rssi; diff --git a/components/p2p/dispatcher/src/wlan_p2p_tgt_api.c b/components/p2p/dispatcher/src/wlan_p2p_tgt_api.c index 8615c665e28f..3416c87685aa 100644 --- a/components/p2p/dispatcher/src/wlan_p2p_tgt_api.c +++ b/components/p2p/dispatcher/src/wlan_p2p_tgt_api.c @@ -349,7 +349,7 @@ QDF_STATUS tgt_p2p_mgmt_frame_rx_cb(struct wlan_objmgr_psoc *psoc, pdata = (uint8_t *)qdf_nbuf_data(buf); rx_mgmt->frame_len = mgmt_rx_params->buf_len; - rx_mgmt->rx_chan = mgmt_rx_params->channel; + rx_mgmt->rx_freq = mgmt_rx_params->chan_freq; rx_mgmt->vdev_id = vdev_id; rx_mgmt->frm_type = frm_type; rx_mgmt->rx_rssi = mgmt_rx_params->snr + diff --git a/components/tdls/core/src/wlan_tdls_mgmt.c b/components/tdls/core/src/wlan_tdls_mgmt.c index 0d35db5fdd64..facd63fc9aaf 100644 --- a/components/tdls/core/src/wlan_tdls_mgmt.c +++ b/components/tdls/core/src/wlan_tdls_mgmt.c @@ -104,10 +104,10 @@ static QDF_STATUS tdls_process_rx_mgmt( return QDF_STATUS_E_INVAL; } - tdls_debug("soc:%pK, frame_len:%d, rx_chan:%d, vdev_id:%d, frm_type:%d, rx_rssi:%d, buf:%pK", - tdls_soc_obj->soc, rx_mgmt->frame_len, - rx_mgmt->rx_chan, rx_mgmt->vdev_id, rx_mgmt->frm_type, - rx_mgmt->rx_rssi, rx_mgmt->buf); + tdls_debug("soc:%pK, frame_len:%d, rx_freq:%d, vdev_id:%d, frm_type:%d, rx_rssi:%d, buf:%pK", + tdls_soc_obj->soc, rx_mgmt->frame_len, + rx_mgmt->rx_freq, rx_mgmt->vdev_id, rx_mgmt->frm_type, + rx_mgmt->rx_rssi, rx_mgmt->buf); if (rx_mgmt->buf[TDLS_PUBLIC_ACTION_FRAME_OFFSET + 1] == TDLS_PUBLIC_ACTION_DISC_RESP) { diff --git a/components/tdls/dispatcher/inc/wlan_tdls_public_structs.h b/components/tdls/dispatcher/inc/wlan_tdls_public_structs.h index d7f9fa24dda2..c4699a638d26 100644 --- a/components/tdls/dispatcher/inc/wlan_tdls_public_structs.h +++ b/components/tdls/dispatcher/inc/wlan_tdls_public_structs.h @@ -545,7 +545,7 @@ struct tdls_tx_cnf { /** * struct tdls_rx_mgmt_frame - rx mgmt frame structure * @frame_len: frame length - * @rx_chan: rx channel + * @rx_freq: rx freq * @vdev_id: vdev id * @frm_type: frame type * @rx_rssi: rx rssi @@ -553,7 +553,7 @@ struct tdls_tx_cnf { */ struct tdls_rx_mgmt_frame { uint32_t frame_len; - uint32_t rx_chan; + uint32_t rx_freq; uint32_t vdev_id; uint32_t frm_type; uint32_t rx_rssi; diff --git a/components/tdls/dispatcher/src/wlan_tdls_tgt_api.c b/components/tdls/dispatcher/src/wlan_tdls_tgt_api.c index a2927b7b91ae..311e74c5df8a 100644 --- a/components/tdls/dispatcher/src/wlan_tdls_tgt_api.c +++ b/components/tdls/dispatcher/src/wlan_tdls_tgt_api.c @@ -293,7 +293,7 @@ QDF_STATUS tgt_tdls_mgmt_frame_process_rx_cb( pdata = (uint8_t *)qdf_nbuf_data(buf); rx_mgmt->frame_len = mgmt_rx_params->buf_len; - rx_mgmt->rx_chan = mgmt_rx_params->channel; + rx_mgmt->rx_freq = mgmt_rx_params->chan_freq; rx_mgmt->vdev_id = vdev_id; rx_mgmt->frm_type = frm_type; rx_mgmt->rx_rssi = mgmt_rx_params->rssi; diff --git a/core/cds/src/i_cds_packet.h b/core/cds/src/i_cds_packet.h index 947bcd6fef0f..4bd19d1f5537 100644 --- a/core/cds/src/i_cds_packet.h +++ b/core/cds/src/i_cds_packet.h @@ -37,7 +37,7 @@ * Rx Packet Struct * Buffer for the packet received from WMA has pointers to 802.11 * frame fields and additional information based on the type of frame. - * @channel: Channel number + * @frequency: Frequency * @snr: Signal to noise ratio * @rssi: Received signal strength indicator, normalized to -96 dBm as * normal noise floor by adding -96 to snr. All the configured @@ -57,7 +57,7 @@ * @rssi_raw: rssi based on actual noise floor in hardware. */ typedef struct { - uint8_t channel; + uint32_t frequency; uint8_t snr; uint32_t rssi; uint32_t timestamp; diff --git a/core/hdd/inc/wlan_hdd_p2p.h b/core/hdd/inc/wlan_hdd_p2p.h index bd2413c35221..39d80f10f8a5 100644 --- a/core/hdd/inc/wlan_hdd_p2p.h +++ b/core/hdd/inc/wlan_hdd_p2p.h @@ -66,13 +66,13 @@ int hdd_set_p2p_noa(struct net_device *dev, uint8_t *command); * @frm_len: frame length * @pb_frames: frame bytes * @frame_type: frame type - * @rx_chan: channel on which frame was received + * @rx_freq: frequency on which frame was received * @rx_rssi: rssi * @rx_flags: rx flags of the frame */ void hdd_indicate_mgmt_frame_to_user(struct hdd_adapter *adapter, uint32_t frm_len, uint8_t *pb_frames, - uint8_t frame_type, uint32_t rx_chan, + uint8_t frame_type, uint32_t rx_freq, int8_t rx_rssi, enum rxmgmt_flags rx_flags); diff --git a/core/hdd/src/wlan_hdd_main.c b/core/hdd/src/wlan_hdd_main.c index b3bf82699e55..1ff362ecd5e8 100644 --- a/core/hdd/src/wlan_hdd_main.c +++ b/core/hdd/src/wlan_hdd_main.c @@ -9563,7 +9563,7 @@ void hdd_indicate_mgmt_frame(tSirSmeMgmtFrameInd *frame_ind) frame_ind->frame_len, frame_ind->frameBuf, frame_ind->frameType, - frame_ind->rxChan, + frame_ind->rx_freq, frame_ind->rxRssi, frame_ind->rx_flags); } @@ -9580,7 +9580,7 @@ void hdd_indicate_mgmt_frame(tSirSmeMgmtFrameInd *frame_ind) frame_ind->frame_len, frame_ind->frameBuf, frame_ind->frameType, - frame_ind->rxChan, + frame_ind->rx_freq, frame_ind->rxRssi, frame_ind->rx_flags); } diff --git a/core/hdd/src/wlan_hdd_p2p.c b/core/hdd/src/wlan_hdd_p2p.c index bc06f0de53be..f7e78d8a1bbe 100644 --- a/core/hdd/src/wlan_hdd_p2p.c +++ b/core/hdd/src/wlan_hdd_p2p.c @@ -981,18 +981,17 @@ wlan_hdd_cfg80211_convert_rxmgmt_flags(enum rxmgmt_flags flag, static void __hdd_indicate_mgmt_frame_to_user(struct hdd_adapter *adapter, uint32_t frm_len, uint8_t *pb_frames, - uint8_t frame_type, uint32_t rx_chan, + uint8_t frame_type, uint32_t rx_freq, int8_t rx_rssi, enum rxmgmt_flags rx_flags) { - uint16_t freq; uint8_t type = 0; uint8_t sub_type = 0; struct hdd_context *hdd_ctx; uint8_t *dest_addr; enum nl80211_rxmgmt_flags nl80211_flag = 0; - hdd_debug("Frame Type = %d Frame Length = %d", - frame_type, frm_len); + hdd_debug("Frame Type = %d Frame Length = %d freq = %d", + frame_type, frm_len, rx_freq); if (!adapter) { hdd_err("adapter is NULL"); @@ -1063,12 +1062,6 @@ __hdd_indicate_mgmt_frame_to_user(struct hdd_adapter *adapter, /* Channel indicated may be wrong. TODO */ /* Indicate an action frame. */ - if (rx_chan <= MAX_NO_OF_2_4_CHANNELS) - freq = ieee80211_channel_to_frequency(rx_chan, - NL80211_BAND_2GHZ); - else - freq = ieee80211_channel_to_frequency(rx_chan, - NL80211_BAND_5GHZ); if (hdd_is_qos_action_frame(pb_frames, frm_len)) sme_update_dsc_pto_up_mapping(hdd_ctx->mac_handle, @@ -1085,23 +1078,23 @@ __hdd_indicate_mgmt_frame_to_user(struct hdd_adapter *adapter, #if (LINUX_VERSION_CODE >= KERNEL_VERSION(3, 18, 0)) cfg80211_rx_mgmt(adapter->dev->ieee80211_ptr, - freq, rx_rssi * 100, pb_frames, + rx_freq, rx_rssi * 100, pb_frames, frm_len, NL80211_RXMGMT_FLAG_ANSWERED | nl80211_flag); #elif (LINUX_VERSION_CODE >= KERNEL_VERSION(3, 12, 0)) cfg80211_rx_mgmt(adapter->dev->ieee80211_ptr, - freq, rx_rssi * 100, pb_frames, + rx_freq, rx_rssi * 100, pb_frames, frm_len, NL80211_RXMGMT_FLAG_ANSWERED, GFP_ATOMIC); #else - cfg80211_rx_mgmt(adapter->dev->ieee80211_ptr, freq, - rx_rssi * 100, - pb_frames, frm_len, GFP_ATOMIC); + cfg80211_rx_mgmt(adapter->dev->ieee80211_ptr, rx_freq, + rx_rssi * 100, + pb_frames, frm_len, GFP_ATOMIC); #endif /* LINUX_VERSION_CODE */ } void hdd_indicate_mgmt_frame_to_user(struct hdd_adapter *adapter, uint32_t frm_len, uint8_t *pb_frames, - uint8_t frame_type, uint32_t rx_chan, + uint8_t frame_type, uint32_t rx_freq, int8_t rx_rssi, enum rxmgmt_flags rx_flags) { int errno; @@ -1112,7 +1105,7 @@ void hdd_indicate_mgmt_frame_to_user(struct hdd_adapter *adapter, return; __hdd_indicate_mgmt_frame_to_user(adapter, frm_len, pb_frames, - frame_type, rx_chan, + frame_type, rx_freq, rx_rssi, rx_flags); osif_vdev_sync_op_stop(vdev_sync); } diff --git a/core/mac/inc/sir_api.h b/core/mac/inc/sir_api.h index 0e095b8d9598..c0c997a135aa 100644 --- a/core/mac/inc/sir_api.h +++ b/core/mac/inc/sir_api.h @@ -1926,7 +1926,7 @@ enum rxmgmt_flags { typedef struct sSirSmeMgmtFrameInd { uint16_t frame_len; - uint32_t rxChan; + uint32_t rx_freq; uint8_t sessionId; uint8_t frameType; int8_t rxRssi; diff --git a/core/mac/src/pe/lim/lim_api.c b/core/mac/src/pe/lim/lim_api.c index 8425d84dbc00..931d35399196 100644 --- a/core/mac/src/pe/lim/lim_api.c +++ b/core/mac/src/pe/lim/lim_api.c @@ -1895,7 +1895,7 @@ lim_roam_gen_mbssid_beacon(struct mac_context *mac, bcn_prb_ptr = (uint8_t *)roam_ind + roam_ind->beaconProbeRespOffset; - rx_param.channel = wlan_freq_to_chan(roam_ind->chan_freq); + rx_param.chan_freq = roam_ind->chan_freq; rx_param.pdev_id = wlan_objmgr_pdev_get_pdev_id(mac->pdev); rx_param.rssi = roam_ind->rssi; diff --git a/core/mac/src/pe/lim/lim_process_action_frame.c b/core/mac/src/pe/lim/lim_process_action_frame.c index 756444bcbce4..b063f2e23459 100644 --- a/core/mac/src/pe/lim/lim_process_action_frame.c +++ b/core/mac/src/pe/lim/lim_process_action_frame.c @@ -1070,7 +1070,7 @@ static void __lim_process_qos_map_configure_frame(struct mac_context *mac_ctx, lim_send_sme_mgmt_frame_ind(mac_ctx, mac_hdr->fc.subType, (uint8_t *)mac_hdr, frame_len + sizeof(tSirMacMgmtHdr), 0, - WMA_GET_RX_CH(rx_pkt_info), session, + WMA_GET_RX_FREQ(rx_pkt_info), session, WMA_GET_RX_RSSI_NORMALIZED(rx_pkt_info), RXMGMT_FLAG_NONE); } @@ -1289,7 +1289,7 @@ __lim_process_radio_measure_request(struct mac_context *mac, uint8_t *pRxPacketI mac->rrm.rrmPEContext.prev_rrm_report_seq_num = curr_seq_num; lim_send_sme_mgmt_frame_ind(mac, pHdr->fc.subType, (uint8_t *)pHdr, frameLen + sizeof(tSirMacMgmtHdr), 0, - WMA_GET_RX_CH(pRxPacketInfo), pe_session, + WMA_GET_RX_FREQ(pRxPacketInfo), pe_session, WMA_GET_RX_RSSI_NORMALIZED(pRxPacketInfo), RXMGMT_FLAG_NONE); @@ -1519,7 +1519,7 @@ static void __lim_process_sa_query_response_action_frame(struct mac_context *mac (uint8_t *)pHdr, frame_len + sizeof(tSirMacMgmtHdr), 0, - WMA_GET_RX_CH(pRxPacketInfo), + WMA_GET_RX_FREQ(pRxPacketInfo), pe_session, WMA_GET_RX_RSSI_NORMALIZED( pRxPacketInfo), RXMGMT_FLAG_NONE); @@ -1941,7 +1941,7 @@ void lim_process_action_frame(struct mac_context *mac_ctx, (uint8_t *) mac_hdr, frame_len + sizeof(tSirMacMgmtHdr), session->smeSessionId, - WMA_GET_RX_CH(rx_pkt_info), + WMA_GET_RX_FREQ(rx_pkt_info), session, rssi, RXMGMT_FLAG_NONE); break; default: @@ -2029,7 +2029,7 @@ void lim_process_action_frame(struct mac_context *mac_ctx, frame_len + sizeof(tSirMacMgmtHdr), session->smeSessionId, - WMA_GET_RX_CH(rx_pkt_info), + WMA_GET_RX_FREQ(rx_pkt_info), session, WMA_GET_RX_RSSI_NORMALIZED( rx_pkt_info), RXMGMT_FLAG_NONE); @@ -2089,7 +2089,7 @@ void lim_process_action_frame(struct mac_context *mac_ctx, (uint8_t *) mac_hdr, frame_len + sizeof(tSirMacMgmtHdr), session->smeSessionId, - WMA_GET_RX_CH(rx_pkt_info), session, + WMA_GET_RX_FREQ(rx_pkt_info), session, WMA_GET_RX_RSSI_NORMALIZED( rx_pkt_info), RXMGMT_FLAG_NONE); break; @@ -2153,7 +2153,7 @@ void lim_process_action_frame(struct mac_context *mac_ctx, (uint8_t *)hdr, frame_len + sizeof(tSirMacMgmtHdr), session->smeSessionId, - WMA_GET_RX_CH(rx_pkt_info), + WMA_GET_RX_FREQ(rx_pkt_info), session, WMA_GET_RX_RSSI_NORMALIZED( rx_pkt_info), RXMGMT_FLAG_NONE); @@ -2173,7 +2173,7 @@ void lim_process_action_frame(struct mac_context *mac_ctx, mac_hdr->fc.subType, (uint8_t *) mac_hdr, frame_len + sizeof(tSirMacMgmtHdr), session->smeSessionId, - WMA_GET_RX_CH(rx_pkt_info), session, rssi, + WMA_GET_RX_FREQ(rx_pkt_info), session, rssi, RXMGMT_FLAG_NONE); break; default: @@ -2277,7 +2277,7 @@ void lim_process_action_frame_no_session(struct mac_context *mac, uint8_t *pBd) mac_hdr->fc.subType, (uint8_t *) mac_hdr, frame_len + sizeof(tSirMacMgmtHdr), 0, - WMA_GET_RX_CH(pBd), NULL, + WMA_GET_RX_FREQ(pBd), NULL, WMA_GET_RX_RSSI_NORMALIZED(pBd), RXMGMT_FLAG_NONE); break; diff --git a/core/mac/src/pe/lim/lim_process_auth_frame.c b/core/mac/src/pe/lim/lim_process_auth_frame.c index 1971d9a8118d..16c00fd19658 100644 --- a/core/mac/src/pe/lim/lim_process_auth_frame.c +++ b/core/mac/src/pe/lim/lim_process_auth_frame.c @@ -407,7 +407,7 @@ static void lim_process_sae_auth_frame(struct mac_context *mac_ctx, (uint8_t *)mac_hdr, frame_len + sizeof(tSirMacMgmtHdr), pe_session->smeSessionId, - WMA_GET_RX_CH(rx_pkt_info), pe_session, + WMA_GET_RX_FREQ(rx_pkt_info), pe_session, WMA_GET_RX_RSSI_NORMALIZED(rx_pkt_info), rx_flags); } @@ -1649,7 +1649,7 @@ bool lim_process_sae_preauth_frame(struct mac_context *mac, uint8_t *rx_pkt) (uint8_t *)dot11_hdr, frm_len + sizeof(tSirMacMgmtHdr), SME_SESSION_ID_ANY, - WMA_GET_RX_CH(rx_pkt), NULL, + WMA_GET_RX_FREQ(rx_pkt), NULL, WMA_GET_RX_RSSI_NORMALIZED(rx_pkt), RXMGMT_FLAG_NONE); return true; diff --git a/core/mac/src/pe/lim/lim_process_message_queue.c b/core/mac/src/pe/lim/lim_process_message_queue.c index 9131d89b5289..048a2a6312ef 100644 --- a/core/mac/src/pe/lim/lim_process_message_queue.c +++ b/core/mac/src/pe/lim/lim_process_message_queue.c @@ -631,7 +631,9 @@ __lim_pno_match_fwd_bcn_probepsp(struct mac_context *pmac, uint8_t *rx_pkt_info, result->ap[i].beaconPeriod = frame->beaconInterval; result->ap[i].capability = lim_get_u16((uint8_t *) &frame->capabilityInfo); - result->ap[i].channel = WMA_GET_RX_CH(rx_pkt_info); + result->ap[i].channel = wlan_reg_freq_to_chan( + pmac->pdev, + WMA_GET_RX_FREQ(rx_pkt_info)); result->ap[i].rssi = WMA_GET_RX_RSSI_NORMALIZED(rx_pkt_info); result->ap[i].rtt = 0; result->ap[i].rtt_sd = 0; @@ -682,7 +684,9 @@ __lim_ext_scan_forward_bcn_probe_rsp(struct mac_context *pmac, uint8_t *rx_pkt_i result->ap.beaconPeriod = frame->beaconInterval; result->ap.capability = lim_get_u16((uint8_t *) &frame->capabilityInfo); - result->ap.channel = WMA_GET_RX_CH(rx_pkt_info); + result->ap.channel = wlan_reg_freq_to_chan( + pmac->pdev, + WMA_GET_RX_FREQ(rx_pkt_info)); result->ap.rssi = WMA_GET_RX_RSSI_NORMALIZED(rx_pkt_info); result->ap.rtt = 0; result->ap.rtt_sd = 0; @@ -821,8 +825,8 @@ __lim_handle_beacon(struct mac_context *mac, struct scheduler_msg *pMsg, static void lim_fill_sap_bcn_pkt_meta(struct scan_cache_entry *scan_entry, cds_pkt_t *rx_pkt) { - rx_pkt->pkt_meta.channel = scan_entry->channel.chan_idx; - + rx_pkt->pkt_meta.frequency = scan_entry->channel.chan_freq; + pe_debug("rx pkt meta freq %d", rx_pkt->pkt_meta.frequency); rx_pkt->pkt_meta.mpdu_hdr_len = sizeof(struct ieee80211_frame); rx_pkt->pkt_meta.mpdu_len = scan_entry->raw_frame.len; rx_pkt->pkt_meta.mpdu_data_len = rx_pkt->pkt_meta.mpdu_len - @@ -947,7 +951,8 @@ void lim_handle_sap_beacon(struct wlan_objmgr_pdev *pdev, for (session_id = 0; session_id < mac_ctx->lim.maxBssId; session_id++) { if (filter->sap_channel[session_id] && (filter->sap_channel[session_id] == - scan_entry->channel.chan_idx)) { + wlan_reg_freq_to_chan(pdev, + scan_entry->channel.chan_freq))) { if (!pkt) { status = lim_allocate_and_get_bcn( mac_ctx, &pkt, &rx_pkt_info, @@ -1142,7 +1147,7 @@ lim_check_mgmt_registered_frames(struct mac_context *mac_ctx, uint8_t *buff_desc (uint8_t *) hdr, WMA_GET_RX_PAYLOAD_LEN(buff_desc) + sizeof(tSirMacMgmtHdr), mgmt_frame->sessionId, - WMA_GET_RX_CH(buff_desc), session_entry, + WMA_GET_RX_FREQ(buff_desc), session_entry, WMA_GET_RX_RSSI_NORMALIZED(buff_desc), RXMGMT_FLAG_NONE); @@ -1226,7 +1231,7 @@ lim_handle80211_frames(struct mac_context *mac, struct scheduler_msg *limMsg, struct pe_session *pe_session = NULL; uint8_t sessionId; bool isFrmFt = false; - uint8_t channel; + uint32_t frequency; bool is_hw_sbs_capable = false; *pDeferMsg = false; @@ -1235,14 +1240,15 @@ lim_handle80211_frames(struct mac_context *mac, struct scheduler_msg *limMsg, pHdr = WMA_GET_RX_MAC_HEADER(pRxPacketInfo); isFrmFt = WMA_GET_RX_FT_DONE(pRxPacketInfo); - channel = WMA_GET_RX_CH(pRxPacketInfo); + frequency = WMA_GET_RX_FREQ(pRxPacketInfo); fc = pHdr->fc; is_hw_sbs_capable = policy_mgr_is_hw_sbs_capable(mac->psoc); - if (IS_5G_CH(channel) && - (!is_hw_sbs_capable || - (is_hw_sbs_capable && wlan_reg_is_dfs_ch(mac->pdev, channel))) && + if (WLAN_REG_IS_5GHZ_CH_FREQ(frequency) && + (!is_hw_sbs_capable || + (is_hw_sbs_capable && + wlan_reg_is_dfs_for_freq(mac->pdev, frequency))) && mac->sap.SapDfsInfo.is_dfs_cac_timer_running) { pe_session = pe_find_session_by_bssid(mac, pHdr->bssId, &sessionId); diff --git a/core/mac/src/pe/lim/lim_process_probe_req_frame.c b/core/mac/src/pe/lim/lim_process_probe_req_frame.c index 45f1d75c3d9f..8d73ae0e3e7c 100644 --- a/core/mac/src/pe/lim/lim_process_probe_req_frame.c +++ b/core/mac/src/pe/lim/lim_process_probe_req_frame.c @@ -446,7 +446,8 @@ lim_indicate_probe_req_to_hdd(struct mac_context *mac, uint8_t *pBd, lim_send_sme_mgmt_frame_ind(mac, pHdr->fc.subType, (uint8_t *) pHdr, (frameLen + sizeof(tSirMacMgmtHdr)), - pe_session->smeSessionId, WMA_GET_RX_CH(pBd), + pe_session->smeSessionId, + WMA_GET_RX_FREQ(pBd), pe_session, WMA_GET_RX_RSSI_NORMALIZED(pBd), RXMGMT_FLAG_NONE); diff --git a/core/mac/src/pe/lim/lim_scan_result_utils.c b/core/mac/src/pe/lim/lim_scan_result_utils.c index d67f654aad56..226404482173 100644 --- a/core/mac/src/pe/lim/lim_scan_result_utils.c +++ b/core/mac/src/pe/lim/lim_scan_result_utils.c @@ -70,7 +70,6 @@ lim_collect_bss_description(struct mac_context *mac, uint32_t ieLen = 0; tpSirMacMgmtHdr pHdr; uint8_t channel_num; - uint8_t rx_channel; uint8_t rfBand = 0; pHdr = WMA_GET_RX_MAC_HEADER(pRxPacketInfo); @@ -82,7 +81,6 @@ lim_collect_bss_description(struct mac_context *mac, } ieLen = WMA_GET_RX_PAYLOAD_LEN(pRxPacketInfo) - SIR_MAC_B_PR_SSID_OFFSET; - rx_channel = WMA_GET_RX_CH(pRxPacketInfo); pBody = WMA_GET_RX_MPDU_DATA(pRxPacketInfo); rfBand = WMA_GET_RX_RFBAND(pRxPacketInfo); diff --git a/core/mac/src/pe/lim/lim_utils.c b/core/mac/src/pe/lim/lim_utils.c index 956080956d7e..53a25d34d0c6 100644 --- a/core/mac/src/pe/lim/lim_utils.c +++ b/core/mac/src/pe/lim/lim_utils.c @@ -7648,7 +7648,7 @@ enum rateid lim_get_min_session_txrate(struct pe_session *session) void lim_send_sme_mgmt_frame_ind(struct mac_context *mac_ctx, uint8_t frame_type, uint8_t *frame, uint32_t frame_len, - uint16_t session_id, uint32_t rx_channel, + uint16_t session_id, uint32_t rx_freq, struct pe_session *psession_entry, int8_t rx_rssi, enum rxmgmt_flags rx_flags) { @@ -7672,7 +7672,7 @@ void lim_send_sme_mgmt_frame_ind(struct mac_context *mac_ctx, uint8_t frame_type sme_mgmt_frame->sessionId = session_id; sme_mgmt_frame->frameType = frame_type; sme_mgmt_frame->rxRssi = rx_rssi; - sme_mgmt_frame->rxChan = rx_channel; + sme_mgmt_frame->rx_freq = rx_freq; sme_mgmt_frame->rx_flags = rx_flags; qdf_mem_zero(sme_mgmt_frame->frameBuf, frame_len); diff --git a/core/mac/src/pe/lim/lim_utils.h b/core/mac/src/pe/lim/lim_utils.h index c0f19a27c675..42cf5b33999b 100644 --- a/core/mac/src/pe/lim/lim_utils.h +++ b/core/mac/src/pe/lim/lim_utils.h @@ -193,7 +193,7 @@ void lim_update_short_slot_time(struct mac_context *mac, tSirMacAddr peerMacAddr * @frame_len: Length og mgmt frame * @session_id: session id * @psession_entry: PE Session Entry - * @rx_channel: Channel of where packet is received + * @rx_freq: Frequency on which packet is received * @rx_rssi: rssi value * @rx_flags: RXMGMT flags to be set for the frame. Defined in enum rxmgmt_flags * @@ -204,7 +204,7 @@ void lim_update_short_slot_time(struct mac_context *mac, tSirMacAddr peerMacAddr */ void lim_send_sme_mgmt_frame_ind(struct mac_context *mac_ctx, uint8_t frame_type, uint8_t *frame, uint32_t frame_len, - uint16_t session_id, uint32_t rx_channel, + uint16_t session_id, uint32_t rx_freq, struct pe_session *psession_entry, int8_t rx_rssi, enum rxmgmt_flags rx_flags); diff --git a/core/mac/src/sys/legacy/src/utils/src/parser_api.c b/core/mac/src/sys/legacy/src/utils/src/parser_api.c index da468b7e7ac4..fbda95321cee 100644 --- a/core/mac/src/sys/legacy/src/utils/src/parser_api.c +++ b/core/mac/src/sys/legacy/src/utils/src/parser_api.c @@ -4053,12 +4053,10 @@ sir_convert_beacon_frame2_struct(struct mac_context *mac, uint32_t status, nPayload; uint8_t *pPayload; tpSirMacMgmtHdr pHdr; - uint8_t mappedRXCh; pPayload = WMA_GET_RX_MPDU_DATA(pFrame); nPayload = WMA_GET_RX_PAYLOAD_LEN(pFrame); pHdr = WMA_GET_RX_MAC_HEADER(pFrame); - mappedRXCh = WMA_GET_RX_CH(pFrame); /* Zero-init our [out] parameter, */ qdf_mem_zero((uint8_t *) pBeaconStruct, sizeof(tSirProbeRespBeacon)); @@ -4222,7 +4220,9 @@ sir_convert_beacon_frame2_struct(struct mac_context *mac, } else if (pBeacon->HTInfo.present) { pBeaconStruct->channelNumber = pBeacon->HTInfo.primaryChannel; } else { - pBeaconStruct->channelNumber = mappedRXCh; + pBeaconStruct->channelNumber = + wlan_reg_freq_to_chan(mac->pdev, + WMA_GET_RX_FREQ(pFrame)); pe_debug_rl("In Beacon No Channel info"); } diff --git a/core/sap/src/sap_ch_select.c b/core/sap/src/sap_ch_select.c index f0405b04d0c9..33400a0a9d33 100644 --- a/core/sap/src/sap_ch_select.c +++ b/core/sap/src/sap_ch_select.c @@ -1453,8 +1453,10 @@ static void sap_compute_spect_weight(tSapChSelSpectInfo *pSpectInfoParams, for (chn_num = 0; chn_num < pSpectInfoParams->numSpectChans; chn_num++) { - channel_id = - util_scan_entry_channel_num(cur_node->entry); + channel_id = wlan_reg_freq_to_chan( + mac->pdev, + util_scan_entry_channel_frequency( + cur_node->entry)); if (pSpectCh && (channel_id == pSpectCh->chNum)) { if (pSpectCh->rssiAgr < diff --git a/core/sme/src/csr/csr_api_scan.c b/core/sme/src/csr/csr_api_scan.c index 274ddb30816d..f4ac7455a3aa 100644 --- a/core/sme/src/csr/csr_api_scan.c +++ b/core/sme/src/csr/csr_api_scan.c @@ -390,8 +390,7 @@ static void csr_scan_add_result(struct mac_context *mac_ctx, frm_type = MGMT_PROBE_RESP; rx_param.pdev_id = 0; - rx_param.channel = wlan_reg_freq_to_chan(mac_ctx->pdev, - bss_desc->chan_freq); + rx_param.chan_freq = bss_desc->chan_freq; rx_param.rssi = bss_desc->rssi; rx_param.tsf_delta = bss_desc->tsf_delta; @@ -2355,12 +2354,15 @@ static QDF_STATUS csr_fill_bss_from_scan_entry(struct mac_context *mac_ctx, enum channel_state ap_channel_state; ap_channel_state = - wlan_reg_get_channel_state(mac_ctx->pdev, - scan_entry->channel.chan_idx); + wlan_reg_get_channel_state( + mac_ctx->pdev, + wlan_reg_freq_to_chan( + mac_ctx->pdev, + scan_entry->channel.chan_freq)); if (ap_channel_state == CHANNEL_STATE_DISABLE || ap_channel_state == CHANNEL_STATE_INVALID) { sme_err("BSS %pM channel %d invalid, not populating this BSSID", - scan_entry->bssid.bytes, scan_entry->channel.chan_idx); + scan_entry->bssid.bytes, scan_entry->channel.chan_freq); return QDF_STATUS_E_INVAL; } @@ -2408,7 +2410,7 @@ static QDF_STATUS csr_fill_bss_from_scan_entry(struct mac_context *mac_ctx, bss_desc->beaconInterval = scan_entry->bcn_int; bss_desc->capabilityInfo = scan_entry->cap_info.value; - if (WLAN_REG_IS_5GHZ_CH(scan_entry->channel.chan_idx)) + if (WLAN_REG_IS_5GHZ_CH_FREQ(scan_entry->channel.chan_freq)) bss_desc->nwType = eSIR_11A_NW_TYPE; else if (scan_entry->phy_mode == WLAN_PHYMODE_11B) bss_desc->nwType = eSIR_11B_NW_TYPE; @@ -2419,9 +2421,7 @@ static QDF_STATUS csr_fill_bss_from_scan_entry(struct mac_context *mac_ctx, bss_desc->rssi_raw = scan_entry->rssi_raw; /* channel frequency what peer sent in beacon/probersp. */ - bss_desc->chan_freq = - wlan_reg_chan_to_freq(mac_ctx->pdev, - scan_entry->channel.chan_idx); + bss_desc->chan_freq = scan_entry->channel.chan_freq; bss_desc->received_time = scan_entry->scan_entry_time; bss_desc->startTSF[0] = @@ -2809,7 +2809,9 @@ void csr_init_occupied_channels_list(struct mac_context *mac_ctx, while (cur_lst) { cur_node = qdf_container_of(cur_lst, struct scan_cache_node, node); - ch = cur_node->entry->channel.chan_idx; + ch = wlan_reg_freq_to_chan( + pdev, + cur_node->entry->channel.chan_freq); csr_add_to_occupied_channels( mac_ctx, ch, sessionId, diff --git a/core/wma/inc/wma_types.h b/core/wma/inc/wma_types.h index 3e966a2c0d28..a7973ebcf9f7 100644 --- a/core/wma/inc/wma_types.h +++ b/core/wma/inc/wma_types.h @@ -57,8 +57,8 @@ #define WMA_GET_RX_UNKNOWN_UCAST(pRxMeta) 0 -#define WMA_GET_RX_CH(pRxMeta) \ - (((t_packetmeta *)pRxMeta)->channel) +#define WMA_GET_RX_FREQ(pRxMeta) \ + (((t_packetmeta *)pRxMeta)->frequency) #define WMA_GET_RX_FT_DONE(pRxMeta) 0 diff --git a/core/wma/src/wma_mgmt.c b/core/wma/src/wma_mgmt.c index 8b125b351489..0c58ae01f7f4 100644 --- a/core/wma/src/wma_mgmt.c +++ b/core/wma/src/wma_mgmt.c @@ -4303,7 +4303,7 @@ int wma_form_rx_packet(qdf_nbuf_t buf, * Fill in meta information needed by pe/lim * TODO: Try to maintain rx metainfo as part of skb->data. */ - rx_pkt->pkt_meta.channel = mgmt_rx_params->channel; + rx_pkt->pkt_meta.frequency = mgmt_rx_params->chan_freq; rx_pkt->pkt_meta.scan_src = mgmt_rx_params->flags; /* diff --git a/os_if/p2p/src/wlan_cfg80211_p2p.c b/os_if/p2p/src/wlan_cfg80211_p2p.c index 723246bc9786..480be2541e4b 100644 --- a/os_if/p2p/src/wlan_cfg80211_p2p.c +++ b/os_if/p2p/src/wlan_cfg80211_p2p.c @@ -53,7 +53,6 @@ static void wlan_p2p_rx_callback(void *user_data, struct wlan_objmgr_vdev *vdev; struct vdev_osif_priv *osif_priv; struct wireless_dev *wdev; - uint16_t freq; osif_debug("user data:%pK, vdev id:%d, rssi:%d, buf:%pK, len:%d", user_data, rx_frame->vdev_id, rx_frame->rx_rssi, @@ -84,27 +83,20 @@ static void wlan_p2p_rx_callback(void *user_data, goto fail; } - if (rx_frame->rx_chan <= MAX_NO_OF_2_4_CHANNELS) - freq = ieee80211_channel_to_frequency( - rx_frame->rx_chan, NL80211_BAND_2GHZ); - else - freq = ieee80211_channel_to_frequency( - rx_frame->rx_chan, NL80211_BAND_5GHZ); - osif_debug("Indicate frame over nl80211, vdev id:%d, idx:%d", rx_frame->vdev_id, wdev->netdev->ifindex); #if (LINUX_VERSION_CODE >= KERNEL_VERSION(3, 18, 0)) - cfg80211_rx_mgmt(wdev, freq, rx_frame->rx_rssi * 100, - rx_frame->buf, rx_frame->frame_len, - NL80211_RXMGMT_FLAG_ANSWERED); + cfg80211_rx_mgmt(wdev, rx_frame->rx_freq, rx_frame->rx_rssi * 100, + rx_frame->buf, rx_frame->frame_len, + NL80211_RXMGMT_FLAG_ANSWERED); #elif (LINUX_VERSION_CODE >= KERNEL_VERSION(3, 12, 0)) - cfg80211_rx_mgmt(wdev, freq, rx_frame->rx_rssi * 100, - rx_frame->buf, rx_frame->frame_len, - NL80211_RXMGMT_FLAG_ANSWERED, GFP_ATOMIC); + cfg80211_rx_mgmt(wdev, rx_frame->rx_freq, rx_frame->rx_rssi * 100, + rx_frame->buf, rx_frame->frame_len, + NL80211_RXMGMT_FLAG_ANSWERED, GFP_ATOMIC); #else - cfg80211_rx_mgmt(wdev, freq, rx_frame->rx_rssi * 100, - rx_frame->buf, rx_frame->frame_len, GFP_ATOMIC); + cfg80211_rx_mgmt(wdev, rx_frame->rx_freq, rx_frame->rx_rssi * 100, + rx_frame->buf, rx_frame->frame_len, GFP_ATOMIC); #endif /* LINUX_VERSION_CODE */ fail: wlan_objmgr_vdev_release_ref(vdev, WLAN_P2P_ID); diff --git a/os_if/tdls/src/wlan_cfg80211_tdls.c b/os_if/tdls/src/wlan_cfg80211_tdls.c index 2e631cf2f815..6ce4976a8662 100644 --- a/os_if/tdls/src/wlan_cfg80211_tdls.c +++ b/os_if/tdls/src/wlan_cfg80211_tdls.c @@ -623,7 +623,6 @@ void wlan_cfg80211_tdls_rx_callback(void *user_data, struct wlan_objmgr_vdev *vdev; struct vdev_osif_priv *osif_priv; struct wireless_dev *wdev; - uint16_t freq; osif_debug("user data:%pK, vdev id:%d, rssi:%d, buf:%pK, len:%d", user_data, rx_frame->vdev_id, rx_frame->rx_rssi, @@ -654,27 +653,20 @@ void wlan_cfg80211_tdls_rx_callback(void *user_data, goto fail; } - if (rx_frame->rx_chan <= TDLS_MAX_NO_OF_2_4_CHANNELS) - freq = ieee80211_channel_to_frequency( - rx_frame->rx_chan, NL80211_BAND_2GHZ); - else - freq = ieee80211_channel_to_frequency( - rx_frame->rx_chan, NL80211_BAND_5GHZ); - osif_notice("Indicate frame over nl80211, vdev id:%d, idx:%d", rx_frame->vdev_id, wdev->netdev->ifindex); #if (LINUX_VERSION_CODE >= KERNEL_VERSION(3, 18, 0)) - cfg80211_rx_mgmt(wdev, freq, rx_frame->rx_rssi * 100, - rx_frame->buf, rx_frame->frame_len, - NL80211_RXMGMT_FLAG_ANSWERED); + cfg80211_rx_mgmt(wdev, rx_frame->rx_freq, rx_frame->rx_rssi * 100, + rx_frame->buf, rx_frame->frame_len, + NL80211_RXMGMT_FLAG_ANSWERED); #elif (LINUX_VERSION_CODE >= KERNEL_VERSION(3, 12, 0)) - cfg80211_rx_mgmt(wdev, freq, rx_frame->rx_rssi * 100, - rx_frame->buf, rx_frame->frame_len, - NL80211_RXMGMT_FLAG_ANSWERED, GFP_ATOMIC); + cfg80211_rx_mgmt(wdev, rx_frame->rx_freq, rx_frame->rx_rssi * 100, + rx_frame->buf, rx_frame->frame_len, + NL80211_RXMGMT_FLAG_ANSWERED, GFP_ATOMIC); #else - cfg80211_rx_mgmt(wdev, freq, rx_frame->rx_rssi * 100, - rx_frame->buf, rx_frame->frame_len, GFP_ATOMIC); + cfg80211_rx_mgmt(wdev, rx_frame->rx_freq, rx_frame->rx_rssi * 100, + rx_frame->buf, rx_frame->frame_len, GFP_ATOMIC); #endif /* LINUX_VERSION_CODE */ fail: wlan_objmgr_vdev_release_ref(vdev, WLAN_TDLS_NB_ID);