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
This commit is contained in:
parent
0203b6d254
commit
ca5d922263
@ -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,
|
||||
|
@ -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;
|
||||
|
@ -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 +
|
||||
|
@ -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) {
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
|
@ -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);
|
||||
|
||||
|
@ -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);
|
||||
}
|
||||
|
@ -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);
|
||||
}
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
|
@ -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);
|
||||
|
@ -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);
|
||||
|
@ -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);
|
||||
|
||||
|
@ -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);
|
||||
|
@ -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);
|
||||
|
||||
|
@ -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");
|
||||
}
|
||||
|
||||
|
@ -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 <
|
||||
|
@ -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,
|
||||
|
@ -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
|
||||
|
||||
|
@ -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;
|
||||
|
||||
/*
|
||||
|
@ -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);
|
||||
|
@ -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);
|
||||
|
Loading…
Reference in New Issue
Block a user