qcacld-3.0: Update beacon template from sme update config API

Currently sme_update_ht_config only update csr_session and sends updated
params to FW via VDEV_PARAM command. Same is not reflected in pe_session
and beacon template. Update beacon params in LIM by sending param update
message to LIM.

Change-Id: I1f926b4d2d5467c7702e03ff281879529c89f6f5
CRs-Fixed: 2055347
This commit is contained in:
Naveen Rawat
2017-06-01 10:54:19 -07:00
committed by snandini
parent 3d267b41f1
commit 8029a40b49
7 changed files with 90 additions and 0 deletions

View File

@@ -2561,6 +2561,14 @@ typedef struct sSirUpdateAPWPSIEsReq {
tSirAPWPSIEs APWPSIEs; tSirAPWPSIEs APWPSIEs;
} tSirUpdateAPWPSIEsReq, *tpSirUpdateAPWPSIEsReq; } tSirUpdateAPWPSIEsReq, *tpSirUpdateAPWPSIEsReq;
struct update_config {
uint16_t messageType; /* eWNI_SME_UPDATE_CONFIG */
uint16_t length;
uint8_t sme_session_id;
uint16_t capab;
uint32_t value;
};
/* /*
* enum sir_update_session_param_type - session param type * enum sir_update_session_param_type - session param type
* @SIR_PARAM_SSID_HIDDEN: ssidHidden parameter * @SIR_PARAM_SSID_HIDDEN: ssidHidden parameter

View File

@@ -259,6 +259,7 @@ enum eWniMsgTypes {
eWMI_SME_LL_STATS_IND, eWMI_SME_LL_STATS_IND,
eWNI_SME_DFS_CAC_COMPLETE, eWNI_SME_DFS_CAC_COMPLETE,
eWNI_SME_IPA_STATS_REQ_CMD, eWNI_SME_IPA_STATS_REQ_CMD,
eWNI_SME_UPDATE_CONFIG,
eWNI_SME_MSG_TYPES_END eWNI_SME_MSG_TYPES_END
}; };

View File

@@ -1394,6 +1394,7 @@ static void lim_process_messages(tpAniSirGlobal mac_ctx,
case eWNI_SME_SET_DUAL_MAC_CFG_REQ: case eWNI_SME_SET_DUAL_MAC_CFG_REQ:
case eWNI_SME_SET_ANTENNA_MODE_REQ: case eWNI_SME_SET_ANTENNA_MODE_REQ:
case eWNI_SME_UPDATE_ACCESS_POLICY_VENDOR_IE: case eWNI_SME_UPDATE_ACCESS_POLICY_VENDOR_IE:
case eWNI_SME_UPDATE_CONFIG:
/* These messages are from HDD. Need to respond to HDD */ /* These messages are from HDD. Need to respond to HDD */
lim_process_normal_hdd_msg(mac_ctx, msg, true); lim_process_normal_hdd_msg(mac_ctx, msg, true);
break; break;

View File

@@ -3938,6 +3938,48 @@ end:
return; return;
} }
static void lim_process_sme_update_config(tpAniSirGlobal mac_ctx,
struct update_config *msg)
{
tpPESession pe_session;
pe_debug("received eWNI_SME_UPDATE_HT_CONFIG message");
if (msg == NULL) {
pe_err("Buffer is Pointing to NULL");
return;
}
pe_session = pe_find_session_by_sme_session_id(mac_ctx,
msg->sme_session_id);
if (pe_session == NULL) {
pe_warn("Session does not exist for given BSSID");
return;
}
switch (msg->capab) {
case WNI_CFG_HT_CAP_INFO_ADVANCE_CODING:
pe_session->htConfig.ht_rx_ldpc = msg->value;
break;
case WNI_CFG_HT_CAP_INFO_TX_STBC:
pe_session->htConfig.ht_tx_stbc = msg->value;
break;
case WNI_CFG_HT_CAP_INFO_RX_STBC:
pe_session->htConfig.ht_rx_stbc = msg->value;
break;
case WNI_CFG_HT_CAP_INFO_SHORT_GI_20MHZ:
pe_session->htConfig.ht_sgi20 = msg->value;
break;
case WNI_CFG_HT_CAP_INFO_SHORT_GI_40MHZ:
pe_session->htConfig.ht_sgi40 = msg->value;
break;
}
if (LIM_IS_AP_ROLE(pe_session)) {
sch_set_fixed_beacon_fields(mac_ctx, pe_session);
lim_send_beacon_ind(mac_ctx, pe_session);
}
}
void void
lim_send_vdev_restart(tpAniSirGlobal pMac, lim_send_vdev_restart(tpAniSirGlobal pMac,
tpPESession psessionEntry, uint8_t sessionId) tpPESession psessionEntry, uint8_t sessionId)
@@ -5202,6 +5244,10 @@ bool lim_process_sme_req_messages(tpAniSirGlobal pMac,
case eWNI_SME_UPDATE_ACCESS_POLICY_VENDOR_IE: case eWNI_SME_UPDATE_ACCESS_POLICY_VENDOR_IE:
lim_process_sme_update_access_policy_vendor_ie(pMac, pMsgBuf); lim_process_sme_update_access_policy_vendor_ie(pMac, pMsgBuf);
break; break;
case eWNI_SME_UPDATE_CONFIG:
lim_process_sme_update_config(pMac,
(struct update_config *)pMsgBuf);
break;
default: default:
qdf_mem_free((void *)pMsg->bodyptr); qdf_mem_free((void *)pMsg->bodyptr);
pMsg->bodyptr = NULL; pMsg->bodyptr = NULL;

View File

@@ -1447,4 +1447,8 @@ void csr_neighbor_roam_process_scan_results(tpAniSirGlobal mac_ctx,
void csr_neighbor_roam_trigger_handoff(tpAniSirGlobal mac_ctx, void csr_neighbor_roam_trigger_handoff(tpAniSirGlobal mac_ctx,
uint8_t session_id); uint8_t session_id);
bool csr_is_ndi_started(tpAniSirGlobal mac_ctx, uint32_t session_id); bool csr_is_ndi_started(tpAniSirGlobal mac_ctx, uint32_t session_id);
QDF_STATUS csr_roam_update_config(tpAniSirGlobal mac_ctx, uint8_t session_id,
uint16_t capab, uint32_t value);
#endif #endif

View File

@@ -11033,6 +11033,7 @@ int sme_update_ht_config(tHalHandle hHal, uint8_t sessionId, uint16_t htCapab,
break; break;
} }
csr_roam_update_config(pMac, sessionId, htCapab, value);
return 0; return 0;
} }

View File

@@ -18932,6 +18932,35 @@ QDF_STATUS csr_queue_sme_command(tpAniSirGlobal mac_ctx, tSmeCmd *sme_cmd,
return status; return status;
} }
QDF_STATUS csr_roam_update_config(tpAniSirGlobal mac_ctx, uint8_t session_id,
uint16_t capab, uint32_t value)
{
struct update_config *msg;
QDF_STATUS status = QDF_STATUS_SUCCESS;
tCsrRoamSession *session = CSR_GET_SESSION(mac_ctx, session_id);
sme_debug("update HT config requested");
if (NULL == session) {
sme_err("Session does not exist for session id %d", session_id);
return QDF_STATUS_E_FAILURE;
}
msg = qdf_mem_malloc(sizeof(*msg));
if (NULL == msg) {
sme_err("malloc failed");
return QDF_STATUS_E_NOMEM;
}
msg->messageType = eWNI_SME_UPDATE_CONFIG;
msg->sme_session_id = session_id;
msg->capab = capab;
msg->value = value;
msg->length = sizeof(*msg);
status = umac_send_mb_message_to_mac(msg);
return status;
}
QDF_STATUS csr_roam_update_apwpsie(tpAniSirGlobal pMac, uint32_t sessionId, QDF_STATUS csr_roam_update_apwpsie(tpAniSirGlobal pMac, uint32_t sessionId,
tSirAPWPSIEs *pAPWPSIES) tSirAPWPSIEs *pAPWPSIES)
{ {