summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPitani Venkata Rajesh Kumar <vpitan@codeaurora.org>2014-08-21 11:36:27 +0530
committerPitani Venkata Rajesh Kumar <vpitan@codeaurora.org>2014-08-21 11:37:52 +0530
commit2e197bd89ab2c0595de0b71b8d2c16f2ade2d34b (patch)
treee654d9f8aa98f4e3c4c8c7c4f729231be353a9e2
parentc6ff84e67ff3e4a2d5a31cf0ae9b343777402395 (diff)
parent8081cf8567ad117bc417c4d83456f7396a50c366 (diff)
Release 1.0.0.174 QCACLD WLAN Driver
Merge remote-tracking branch 'origin/caf/caf-wlan/master' into HEAD * origin/caf/caf-wlan/master: Cafstaging Release 1.0.0.174 qcacld: Serialize the link status response to MC thread. wlan: qcacld: PMK Length passed to firmware qcacld: CL 1059668 1062666 - update fw common interface files wlan: qcacld: Handle HO Fail Indication qca_cld: Record HTC TX credit information for debug purpose qcacld: CL 1062666 - update fw bmi header file Change-Id: I8cef91478b5c34d55723512fc08d86dc959f89ec
-rw-r--r--CORE/MAC/inc/qwlan_version.h4
-rw-r--r--CORE/MAC/inc/sirApi.h2
-rw-r--r--CORE/MAC/inc/wniApi.h1
-rw-r--r--CORE/MAC/src/include/sirParams.h8
-rw-r--r--CORE/MAC/src/pe/lim/limProcessMessageQueue.c14
-rw-r--r--CORE/SERVICES/COMMON/bmi_msg.h2
-rw-r--r--CORE/SERVICES/COMMON/wmi_tlv_defs.h62
-rw-r--r--CORE/SERVICES/COMMON/wmi_unified.h155
-rw-r--r--CORE/SERVICES/COMMON/wmi_version.h2
-rw-r--r--CORE/SERVICES/HTC/htc.c2
-rw-r--r--CORE/SERVICES/HTC/htc_internal.h17
-rw-r--r--CORE/SERVICES/HTC/htc_send.c31
-rw-r--r--CORE/SERVICES/WMA/wma.c94
-rw-r--r--CORE/SERVICES/WMI/wmi_unified.c9
-rw-r--r--CORE/SME/inc/csrInternal.h1
-rw-r--r--CORE/SME/src/csr/csrApiRoam.c33
-rw-r--r--CORE/SME/src/sme_common/sme_Api.c6
-rw-r--r--CORE/WDA/inc/wlan_qct_wda.h2
18 files changed, 318 insertions, 127 deletions
diff --git a/CORE/MAC/inc/qwlan_version.h b/CORE/MAC/inc/qwlan_version.h
index c1d74967a96f..2125102cfbf8 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 0
#define QWLAN_VERSION_EXTRA ""
-#define QWLAN_VERSION_BUILD 173
+#define QWLAN_VERSION_BUILD 174
-#define QWLAN_VERSIONSTR "1.0.0.173"
+#define QWLAN_VERSIONSTR "1.0.0.174"
#define AR6320_REV1_VERSION 0x5000000
diff --git a/CORE/MAC/inc/sirApi.h b/CORE/MAC/inc/sirApi.h
index d1ecbeb6834e..31e790cb95a7 100644
--- a/CORE/MAC/inc/sirApi.h
+++ b/CORE/MAC/inc/sirApi.h
@@ -4754,8 +4754,6 @@ typedef struct sSirSmeRoamOffloadSynchCnf
typedef struct sSirSmeHOFailureInd
{
- tANI_U16 messageType;
- tANI_U16 length;
tANI_U8 sessionId;
} tSirSmeHOFailureInd, *tpSirSmeHOFailureInd;
#endif
diff --git a/CORE/MAC/inc/wniApi.h b/CORE/MAC/inc/wniApi.h
index 88df89b4168a..02702f6bbeb4 100644
--- a/CORE/MAC/inc/wniApi.h
+++ b/CORE/MAC/inc/wniApi.h
@@ -388,6 +388,7 @@ enum eWniMsgTypes
from SME to PE*/
eWNI_SME_FT_ROAM_OFFLOAD_SYNCH_RSP,/* Roam Synch Indication Rsp
from PE toSME */
+ eWNI_SME_HO_FAIL_IND, /* Hand Off Failure Ind from WMA to SME */
#endif
#ifdef WLAN_FEATURE_NAN
eWNI_SME_NAN_EVENT,
diff --git a/CORE/MAC/src/include/sirParams.h b/CORE/MAC/src/include/sirParams.h
index 300cb5d81989..c4808ec75f1c 100644
--- a/CORE/MAC/src/include/sirParams.h
+++ b/CORE/MAC/src/include/sirParams.h
@@ -632,14 +632,12 @@ typedef struct sSirMbMsgP2p
#define SIR_HAL_SET_AUTO_SHUTDOWN_TIMER_REQ (SIR_HAL_ITC_MSG_TYPES_BEGIN + 281)
#endif
-#ifdef WLAN_FEATURE_ROAM_OFFLOAD
-#define SIR_HAL_HO_FAIL_IND (SIR_HAL_ITC_MSG_TYPES_BEGIN + 282)
-#endif
-#define SIR_HAL_SET_BASE_MACADDR_IND (SIR_HAL_ITC_MSG_TYPES_BEGIN + 283)
+#define SIR_HAL_SET_BASE_MACADDR_IND (SIR_HAL_ITC_MSG_TYPES_BEGIN + 282)
-#define SIR_HAL_UNIT_TEST_CMD (SIR_HAL_ITC_MSG_TYPES_BEGIN + 284)
+#define SIR_HAL_UNIT_TEST_CMD (SIR_HAL_ITC_MSG_TYPES_BEGIN + 283)
#define SIR_HAL_LINK_STATUS_GET_REQ (SIR_HAL_ITC_MSG_TYPES_BEGIN + 285)
+#define SIR_HAL_GET_LINK_STATUS_RSP_IND (SIR_HAL_ITC_MSG_TYPES_BEGIN + 286)
#define SIR_HAL_MSG_TYPES_END (SIR_HAL_MSG_TYPES_BEGIN + 0x1FF)
// CFG message types
diff --git a/CORE/MAC/src/pe/lim/limProcessMessageQueue.c b/CORE/MAC/src/pe/lim/limProcessMessageQueue.c
index bfcb0c9fc34c..a5f46480f45c 100644
--- a/CORE/MAC/src/pe/lim/limProcessMessageQueue.c
+++ b/CORE/MAC/src/pe/lim/limProcessMessageQueue.c
@@ -1933,20 +1933,6 @@ limProcessMessages(tpAniSirGlobal pMac, tpSirMsgQ limMsg)
limMsg->bodyptr = NULL;
break;
#endif
-#ifdef WLAN_FEATURE_ROAM_OFFLOAD
- case WDA_HO_FAIL_IND:
- {
- tSirSmeHOFailureInd *pRoamHOFailure;
- pRoamHOFailure = (tSirSmeHOFailureInd *)limMsg->bodyptr;
- VOS_TRACE(VOS_MODULE_ID_PE, VOS_TRACE_LEVEL_ERROR,
- ("LFR3: Hand-Off Failed with AP.Tear down the link")) ;
- limTearDownLinkWithAp(pMac,pRoamHOFailure->sessionId,
- eSIR_MAC_UNSPEC_FAILURE_REASON);
- vos_mem_free((v_VOID_t*)limMsg->bodyptr);
- limMsg->bodyptr = NULL;
- break;
- }
-#endif
default:
vos_mem_free((v_VOID_t*)limMsg->bodyptr);
limMsg->bodyptr = NULL;
diff --git a/CORE/SERVICES/COMMON/bmi_msg.h b/CORE/SERVICES/COMMON/bmi_msg.h
index fb5a37030b93..bff2ed63d076 100644
--- a/CORE/SERVICES/COMMON/bmi_msg.h
+++ b/CORE/SERVICES/COMMON/bmi_msg.h
@@ -265,6 +265,8 @@ PREPACK struct bmi_target_info {
#define TARGET_TYPE_AR6320V2 12
/* For Rome3.0 target_reg_tbl ID*/
#define TARGET_TYPE_AR6320V3 13
+/* For Tufello1.0 target_reg_tbl ID*/
+#define TARGET_TYPE_QCA9377V1 14
#define BMI_ROMPATCH_INSTALL 9
/*
diff --git a/CORE/SERVICES/COMMON/wmi_tlv_defs.h b/CORE/SERVICES/COMMON/wmi_tlv_defs.h
index 8d15ad6ccbd2..94a01e9cb167 100644
--- a/CORE/SERVICES/COMMON/wmi_tlv_defs.h
+++ b/CORE/SERVICES/COMMON/wmi_tlv_defs.h
@@ -438,13 +438,13 @@ typedef enum {
WMITLV_TAG_STRUC_wmi_host_auto_shutdown_event_fixed_param,
WMITLV_TAG_STRUC_wmi_update_whal_mib_stats_event_fixed_param,
WMITLV_TAG_STRUC_wmi_chan_avoid_update_cmd_param,
- WMITLV_TAG_STRUC_WOW_ACER_IOAC_PKT_PATTERN_T,
- WMITLV_TAG_STRUC_WOW_ACER_IOAC_TMR_PATTERN_T,
+ WMITLV_TAG_STRUC_WOW_IOAC_PKT_PATTERN_T,
+ WMITLV_TAG_STRUC_WOW_IOAC_TMR_PATTERN_T,
WMITLV_TAG_STRUC_WMI_WOW_IOAC_ADD_KEEPALIVE_CMD_fixed_param,
WMITLV_TAG_STRUC_WMI_WOW_IOAC_DEL_KEEPALIVE_CMD_fixed_param,
- WMITLV_TAG_STRUC_WOW_IOAC_KEEPALIVE_T,
- WMITLV_TAG_STRUC_WMI_WOW_ACER_IOAC_ADD_PATTERN_CMD_fixed_param,
- WMITLV_TAG_STRUC_WMI_WOW_ACER_IOAC_DEL_PATTERN_CMD_fixed_param,
+ WMITLV_TAG_STRUC_WMI_WOW_IOAC_KEEPALIVE_T,
+ WMITLV_TAG_STRUC_WMI_WOW_IOAC_ADD_PATTERN_CMD_fixed_param,
+ WMITLV_TAG_STRUC_WMI_WOW_IOAC_DEL_PATTERN_CMD_fixed_param,
WMITLV_TAG_STRUC_wmi_start_link_stats_cmd_fixed_param,
WMITLV_TAG_STRUC_wmi_clear_link_stats_cmd_fixed_param,
WMITLV_TAG_STRUC_wmi_request_link_stats_cmd_fixed_param,
@@ -502,6 +502,7 @@ typedef enum {
WMITLV_TAG_STRUC_wmi_lpi_handoff_event_fixed_param,
WMITLV_TAG_STRUC_wmi_vdev_rate_stats_event_fixed_param,
WMITLV_TAG_STRUC_wmi_vdev_rate_ht_info,
+ WMITLV_TAG_STRUC_wmi_ric_request_fixed_param
} WMITLV_TAG_ID;
/*
@@ -662,10 +663,10 @@ typedef enum {
OP(WMI_PDEV_SET_LED_CONFIG_CMDID)\
OP(WMI_HOST_AUTO_SHUTDOWN_CFG_CMDID) \
OP(WMI_CHAN_AVOID_UPDATE_CMDID) \
- OP(WMI_WOW_ACER_IOAC_ADD_KEEPALIVE_CMDID) \
- OP(WMI_WOW_ACER_IOAC_DEL_KEEPALIVE_CMDID) \
- OP(WMI_WOW_ACER_IOAC_ADD_WAKE_PATTERN_CMDID) \
- OP(WMI_WOW_ACER_IOAC_DEL_WAKE_PATTERN_CMDID) \
+ OP(WMI_WOW_IOAC_ADD_KEEPALIVE_CMDID) \
+ OP(WMI_WOW_IOAC_DEL_KEEPALIVE_CMDID) \
+ OP(WMI_WOW_IOAC_ADD_WAKE_PATTERN_CMDID) \
+ OP(WMI_WOW_IOAC_DEL_WAKE_PATTERN_CMDID) \
OP(WMI_REQUEST_LINK_STATS_CMDID) \
OP(WMI_START_LINK_STATS_CMDID) \
OP(WMI_CLEAR_LINK_STATS_CMDID) \
@@ -685,7 +686,8 @@ typedef enum {
OP(WMI_ROAM_SYNCH_COMPLETE) \
OP(WMI_EXTWOW_ENABLE_CMDID) \
OP(WMI_EXTWOW_SET_APP_TYPE1_PARAMS_CMDID) \
- OP(WMI_EXTWOW_SET_APP_TYPE2_PARAMS_CMDID)
+ OP(WMI_EXTWOW_SET_APP_TYPE2_PARAMS_CMDID) \
+ OP(WMI_ROAM_SET_RIC_REQUEST_CMDID)
/*
@@ -1433,6 +1435,12 @@ WMITLV_CREATE_PARAM_STRUC(WMI_ROAM_AP_PROFILE);
WMITLV_CREATE_PARAM_STRUC(WMI_ROAM_SYNCH_COMPLETE)
+#define WMITLV_TABLE_WMI_ROAM_SET_RIC_REQUEST_CMDID(id,op,buf,len) \
+ WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_STRUC_wmi_ric_request_fixed_param, wmi_ric_request_fixed_param, fixed_param, WMITLV_SIZE_FIX) \
+ WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_STRUC, wmi_ric_tspec, ric_tspec_list, WMITLV_SIZE_VAR)
+
+WMITLV_CREATE_PARAM_STRUC(WMI_ROAM_SET_RIC_REQUEST_CMDID);
+
/* Scan scheduler priority Table Cmd */
#define WMITLV_TABLE_WMI_SCAN_SCH_PRIO_TBL_CMDID(id,op,buf,len) \
WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_STRUC_wmi_scan_sch_priority_table_cmd_fixed_param, wmi_scan_sch_priority_table_cmd_fixed_param, fixed_param, WMITLV_SIZE_FIX) \
@@ -1476,32 +1484,32 @@ WMITLV_CREATE_PARAM_STRUC(WMI_DFS_PHYERR_FILTER_DIS_CMDID);
WMITLV_CREATE_PARAM_STRUC(WMI_WOW_ADD_WAKE_PATTERN_CMDID);
-/* Acer IOAC add keep alive cmd. */
-#define WMITLV_TABLE_WMI_WOW_ACER_IOAC_ADD_KEEPALIVE_CMDID(id,op,buf,len) \
+/* IOAC add keep alive cmd. */
+#define WMITLV_TABLE_WMI_WOW_IOAC_ADD_KEEPALIVE_CMDID(id,op,buf,len) \
WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_STRUC_WMI_WOW_IOAC_ADD_KEEPALIVE_CMD_fixed_param, WMI_WOW_IOAC_ADD_KEEPALIVE_CMD_fixed_param, fixed_param, WMITLV_SIZE_FIX) \
- WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_STRUC, WOW_IOAC_KEEPALIVE_T, keepalive_set, WMITLV_SIZE_VAR)
+ WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_STRUC, WMI_WOW_IOAC_KEEPALIVE_T, keepalive_set, WMITLV_SIZE_VAR)
-WMITLV_CREATE_PARAM_STRUC(WMI_WOW_ACER_IOAC_ADD_KEEPALIVE_CMDID);
+WMITLV_CREATE_PARAM_STRUC(WMI_WOW_IOAC_ADD_KEEPALIVE_CMDID);
-/* Acer IOAC del keep alive cmd. */
-#define WMITLV_TABLE_WMI_WOW_ACER_IOAC_DEL_KEEPALIVE_CMDID(id,op,buf,len) \
+/* IOAC del keep alive cmd. */
+#define WMITLV_TABLE_WMI_WOW_IOAC_DEL_KEEPALIVE_CMDID(id,op,buf,len) \
WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_STRUC_WMI_WOW_IOAC_DEL_KEEPALIVE_CMD_fixed_param, WMI_WOW_IOAC_DEL_KEEPALIVE_CMD_fixed_param, fixed_param, WMITLV_SIZE_FIX)
-WMITLV_CREATE_PARAM_STRUC(WMI_WOW_ACER_IOAC_DEL_KEEPALIVE_CMDID);
+WMITLV_CREATE_PARAM_STRUC(WMI_WOW_IOAC_DEL_KEEPALIVE_CMDID);
-/* WOW ACER IOAC Add Wake Pattern Cmd */
-#define WMITLV_TABLE_WMI_WOW_ACER_IOAC_ADD_WAKE_PATTERN_CMDID(id,op,buf,len) \
- WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_STRUC_WMI_WOW_ACER_IOAC_ADD_PATTERN_CMD_fixed_param, WMI_WOW_ACER_IOAC_ADD_PATTERN_CMD_fixed_param, fixed_param, WMITLV_SIZE_FIX) \
- WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_STRUC, WOW_ACER_IOAC_PKT_PATTERN_T, pattern_info_acer_pkt, WMITLV_SIZE_VAR) \
- WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_STRUC, WOW_ACER_IOAC_TMR_PATTERN_T, pattern_info_acer_tmr, WMITLV_SIZE_VAR)
+/* WOW IOAC Add Wake Pattern Cmd */
+#define WMITLV_TABLE_WMI_WOW_IOAC_ADD_WAKE_PATTERN_CMDID(id,op,buf,len) \
+ WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_STRUC_WMI_WOW_IOAC_ADD_PATTERN_CMD_fixed_param, WMI_WOW_IOAC_ADD_PATTERN_CMD_fixed_param, fixed_param, WMITLV_SIZE_FIX) \
+ WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_STRUC, WOW_IOAC_PKT_PATTERN_T, pattern_info_pkt, WMITLV_SIZE_VAR) \
+ WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_STRUC, WOW_IOAC_TMR_PATTERN_T, pattern_info_tmr, WMITLV_SIZE_VAR)
-WMITLV_CREATE_PARAM_STRUC(WMI_WOW_ACER_IOAC_ADD_WAKE_PATTERN_CMDID);
+WMITLV_CREATE_PARAM_STRUC(WMI_WOW_IOAC_ADD_WAKE_PATTERN_CMDID);
-/* WOW ACER IOAC Delete Wake Pattern Cmd */
-#define WMITLV_TABLE_WMI_WOW_ACER_IOAC_DEL_WAKE_PATTERN_CMDID(id,op,buf,len) \
- WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_STRUC_WMI_WOW_ACER_IOAC_DEL_PATTERN_CMD_fixed_param, WMI_WOW_ACER_IOAC_DEL_PATTERN_CMD_fixed_param, fixed_param, WMITLV_SIZE_FIX)
+/* WOW IOAC Delete Wake Pattern Cmd */
+#define WMITLV_TABLE_WMI_WOW_IOAC_DEL_WAKE_PATTERN_CMDID(id,op,buf,len) \
+ WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_STRUC_WMI_WOW_IOAC_DEL_PATTERN_CMD_fixed_param, WMI_WOW_IOAC_DEL_PATTERN_CMD_fixed_param, fixed_param, WMITLV_SIZE_FIX)
-WMITLV_CREATE_PARAM_STRUC(WMI_WOW_ACER_IOAC_DEL_WAKE_PATTERN_CMDID);
+WMITLV_CREATE_PARAM_STRUC(WMI_WOW_IOAC_DEL_WAKE_PATTERN_CMDID);
/* extwow enable Cmd */
#define WMITLV_TABLE_WMI_EXTWOW_ENABLE_CMDID(id,op,buf,len) \
diff --git a/CORE/SERVICES/COMMON/wmi_unified.h b/CORE/SERVICES/COMMON/wmi_unified.h
index 25451f75ac61..7402a59d40b2 100644
--- a/CORE/SERVICES/COMMON/wmi_unified.h
+++ b/CORE/SERVICES/COMMON/wmi_unified.h
@@ -366,6 +366,8 @@ typedef enum {
WMI_ROAM_SCAN_CMD,
/** roaming sme offload sync complete */
WMI_ROAM_SYNCH_COMPLETE,
+ /** set ric request element for 11r roaming */
+ WMI_ROAM_SET_RIC_REQUEST_CMDID,
/** offload scan specific commands */
/** set offload scan AP profile */
@@ -436,14 +438,14 @@ typedef enum {
WMI_WOW_ENABLE_CMDID,
/** host woke up from sleep event to FW. Generated in response to WOW Hardware event */
WMI_WOW_HOSTWAKEUP_FROM_SLEEP_CMDID,
- /* Acer IOAC add keep alive cmd. */
- WMI_WOW_ACER_IOAC_ADD_KEEPALIVE_CMDID,
- /* Acer IOAC del keep alive cmd. */
- WMI_WOW_ACER_IOAC_DEL_KEEPALIVE_CMDID,
- /* Acer IOAC add pattern for awake */
- WMI_WOW_ACER_IOAC_ADD_WAKE_PATTERN_CMDID,
- /* Acer IOAC deleta a wake pattern */
- WMI_WOW_ACER_IOAC_DEL_WAKE_PATTERN_CMDID,
+ /* IOAC add keep alive cmd. */
+ WMI_WOW_IOAC_ADD_KEEPALIVE_CMDID,
+ /* IOAC del keep alive cmd. */
+ WMI_WOW_IOAC_DEL_KEEPALIVE_CMDID,
+ /* IOAC add pattern for awake */
+ WMI_WOW_IOAC_ADD_WAKE_PATTERN_CMDID,
+ /* IOAC deleta a wake pattern */
+ WMI_WOW_IOAC_DEL_WAKE_PATTERN_CMDID,
/* D0-WOW enable or disable cmd */
WMI_D0_WOW_ENABLE_DISABLE_CMDID,
/* enable extend WoW */
@@ -2337,6 +2339,8 @@ typedef enum {
WMI_PDEV_PARAM_AUDIO_OVER_WLAN_LATENCY,
/** set DIRECT AUDIO Feature ENABLE */
WMI_PDEV_PARAM_AUDIO_OVER_WLAN_ENABLE,
+ /** pdev level whal mib stats update enable */
+ WMI_PDEV_PARAM_WHAL_MIB_STATS_UPDATE_ENABLE,
/** ht/vht info based on vdev */
WMI_PDEV_PARAM_VDEV_RATE_STATS_UPDATE_PERIOD,
} WMI_PDEV_PARAM;
@@ -5056,6 +5060,7 @@ typedef struct {
A_UINT32 tlv_header; /** TLV tag and len; tag equals WMITLV_TAG_STRUC_wmi_roam_11i_offload_fixed_param */
A_UINT32 flags; /** flags. see WMI_ROAM_OFFLOAD_FLAG_ above */
A_UINT32 pmk[ROAM_OFFLOAD_PMK_BYTES>>2]; /* pmk offload. As this 4 byte aligned, we don't declare it as tlv array */
+ A_UINT32 pmk_len; /**the length of pmk. in normal case it should be 32, but for LEAP, is should be 16*/
} wmi_roam_11i_offload_tlv_param;
/* This TLV will be filled only in case of 11R*/
@@ -5066,6 +5071,7 @@ typedef struct {
A_UINT32 r0kh_id[ROAM_OFFLOAD_R0KH_ID_MAX_LEN>>2];
A_UINT32 r0kh_id_len;
A_UINT32 psk_msk[ROAM_OFFLOAD_PSK_MSK_BYTES>>2]; /* psk/msk offload. As this 4 byte aligned, we don't declare it as tlv array */
+ A_UINT32 psk_msk_len; /**length of psk_msk*/
} wmi_roam_11r_offload_tlv_param;
/* This TLV will be filled only in case of ESE */
@@ -5102,6 +5108,39 @@ typedef struct {
triggered upon FINAL_BMISS **/
#define WMI_ROAM_REASON_HO_FAILED 0x5 /** LFR3.0 roaming failed, indicate the disconnection to host */
+/**whenever RIC request information change, host driver should pass all ric related information to firmware (now only support tsepc)
+* Once, 11r roaming happens, firmware can generate RIC request in reassoc request based on these informations
+*/
+typedef struct
+{
+ A_UINT32 tlv_header; /** TLV tag and len; tag equals WMITLV_TAG_STRUC_wmi_ric_request_fixed_param */
+ A_UINT32 vdev_id; /**unique id identifying the VDEV, generated by the caller*/
+ A_UINT32 num_ric_request; /**number of ric request ie send to firmware.(max value is 2 now)*/
+}wmi_ric_request_fixed_param;
+
+/**tspec element: refer to 8.4.2.32 of 802.11 2012 spec
+* these elements are used to construct tspec field in RIC request, which allow station to require specific TS when 11r roaming
+*/
+typedef struct{
+ A_UINT32 tlv_header;
+ A_UINT32 ts_info; /** bits value of TS Info field.*/
+ A_UINT32 nominal_msdu_size; /**Nominal MSDU Size field*/
+ A_UINT32 maximum_msdu_size; /**The Maximum MSDU Size field*/
+ A_UINT32 min_service_interval; /**The Minimum Service Interval field*/
+ A_UINT32 max_service_interval; /**The Maximum Service Interval field*/
+ A_UINT32 inactivity_interval; /**The Inactivity Interval field*/
+ A_UINT32 suspension_interval; /**The Suspension Interval field*/
+ A_UINT32 svc_start_time; /**The Service Start Time field*/
+ A_UINT32 min_data_rate; /**The Minimum Data Rate field*/
+ A_UINT32 mean_data_rate; /**The Mean Data Rate field*/
+ A_UINT32 peak_data_rate; /**The Peak Data Rate field*/
+ A_UINT32 max_burst_size; /**The Burst Size field*/
+ A_UINT32 delay_bound; /**The Delay Bound field*/
+ A_UINT32 min_phy_rate; /**The Minimum PHY Rate field*/
+ A_UINT32 surplus_bw_allowance; /**The Surplus Bandwidth Allowance field*/
+ A_UINT32 medium_time; /**The Medium Time field,in units of 32 us/s.*/
+} wmi_ric_tspec;
+
/** WMI_PROFILE_MATCH_EVENT: offload scan
* generated when ever atleast one of the matching profiles is found
* in recent NLO scan. no data is carried with the event.
@@ -5329,16 +5368,16 @@ when comparing wifi header.*/
#define WOW_DEFAULT_BITMASK_SIZE_DWORD 37
#define WOW_MAX_BITMAP_FILTERS 32
#define WOW_DEFAULT_MAGIG_PATTERN_MATCH_CNT 16
-#define WOW_ACER_EXTEND_PATTERN_MATCH_CNT 16
-#define WOW_ACER_SHORT_PATTERN_MATCH_CNT 8
+#define WOW_EXTEND_PATTERN_MATCH_CNT 16
+#define WOW_SHORT_PATTERN_MATCH_CNT 8
#define WOW_DEFAULT_EVT_BUF_SIZE 148 /* Maximum 148 bytes of the data is copied starting from header incase if the match is found.
The 148 comes from (128 - 14 ) payload size + 8bytes LLC + 26bytes MAC header*/
-#define WOW_DEFAULT_ACER_IOAC_PATTERN_SIZE 6
-#define WOW_DEFAULT_ACER_IOAC_PATTERN_SIZE_DWORD 2
-#define WOW_DEFAULT_ACER_IOAC_RANDOM_SIZE 6
-#define WOW_DEFAULT_ACER_IOAC_RANDOM_SIZE_DWORD 2
-#define WOW_DEFAULT_ACER_IOAC_KEEP_ALIVE_PKT_SIZE 120
-#define WOW_DEFAULT_ACER_IOAC_KEEP_ALIVE_PKT_SIZE_DWORD 30
+#define WOW_DEFAULT_IOAC_PATTERN_SIZE 6
+#define WOW_DEFAULT_IOAC_PATTERN_SIZE_DWORD 2
+#define WOW_DEFAULT_IOAC_RANDOM_SIZE 6
+#define WOW_DEFAULT_IOAC_RANDOM_SIZE_DWORD 2
+#define WOW_DEFAULT_IOAC_KEEP_ALIVE_PKT_SIZE 120
+#define WOW_DEFAULT_IOAC_KEEP_ALIVE_PKT_SIZE_DWORD 30
typedef enum pattern_type_e {
WOW_PATTERN_MIN = 0,
@@ -5349,8 +5388,8 @@ typedef enum pattern_type_e {
WOW_TIMER_PATTERN,
WOW_MAGIC_PATTERN,
WOW_IPV6_RA_PATTERN,
- WOW_ACER_IOAC_PKT_PATTERN,
- WOW_ACER_IOAC_TMR_PATTERN,
+ WOW_IOAC_PKT_PATTERN,
+ WOW_IOAC_TMR_PATTERN,
WOW_PATTERN_MAX
}WOW_PATTERN_TYPE;
@@ -5372,10 +5411,10 @@ typedef enum event_type_e {
WOW_HTT_EVENT,
WOW_RA_MATCH_EVENT,
WOW_HOST_AUTO_SHUTDOWN_EVENT,
- WOW_ACER_IOAC_MAGIC_EVENT,
- WOW_ACER_IOAC_SHORT_EVENT,
- WOW_ACER_IOAC_EXTEND_EVENT,
- WOW_ACER_IOAC_TIMER_EVENT,
+ WOW_IOAC_MAGIC_EVENT,
+ WOW_IOAC_SHORT_EVENT,
+ WOW_IOAC_EXTEND_EVENT,
+ WOW_IOAC_TIMER_EVENT,
WOW_DFS_PHYERR_RADAR_EVENT,
WOW_BEACON_EVENT,
}WOW_WAKE_EVENT_TYPE;
@@ -5402,10 +5441,10 @@ typedef enum wake_reason_e {
WOW_REASON_HTT_EVENT,
WOW_REASON_RA_MATCH,
WOW_REASON_HOST_AUTO_SHUTDOWN,
- WOW_REASON_ACER_IOAC_MAGIC_EVENT,
- WOW_REASON_ACER_IOAC_SHORT_EVENT,
- WOW_REASON_ACER_IOAC_EXTEND_EVENT,
- WOW_REASON_ACER_IOAC_TIMER_EVENT,
+ WOW_REASON_IOAC_MAGIC_EVENT,
+ WOW_REASON_IOAC_SHORT_EVENT,
+ WOW_REASON_IOAC_EXTEND_EVENT,
+ WOW_REASON_IOAC_TIMER_EVENT,
WOW_REASON_ROAM_HO,
WOW_REASON_DFS_PHYERR_RADADR_EVENT,
WOW_REASON_BEACON_RECV,
@@ -5461,20 +5500,20 @@ typedef enum wow_ioac_pattern_type {
WOW_IOAC_EXTEND_PATTERN,
} WOW_IOAC_PATTERN_TYPE;
-typedef struct acer_ioac_pkt_pattern_s {
- A_UINT32 tlv_header; /** TLV tag and len; tag equals WMITLV_TAG_STRUC_WOW_ACER_IOAC_PKT_PATTERN_T */
+typedef struct ioac_pkt_pattern_s {
+ A_UINT32 tlv_header; /** TLV tag and len; tag equals WMITLV_TAG_STRUC_WOW_IOAC_PKT_PATTERN_T */
A_UINT32 pattern_type;
- A_UINT32 pattern[WOW_DEFAULT_ACER_IOAC_PATTERN_SIZE_DWORD];
- A_UINT32 random[WOW_DEFAULT_ACER_IOAC_RANDOM_SIZE_DWORD];
+ A_UINT32 pattern[WOW_DEFAULT_IOAC_PATTERN_SIZE_DWORD];
+ A_UINT32 random[WOW_DEFAULT_IOAC_RANDOM_SIZE_DWORD];
A_UINT32 pattern_len;
A_UINT32 random_len;
-} WOW_ACER_IOAC_PKT_PATTERN_T;
+} WOW_IOAC_PKT_PATTERN_T;
-typedef struct acer_ioac_tmr_pattern_s {
- A_UINT32 tlv_header; /** TLV tag and len; tag equals WMITLV_TAG_STRUC_WOW_ACER_IOAC_TMR_PATTERN_T */
+typedef struct ioac_tmr_pattern_s {
+ A_UINT32 tlv_header; /** TLV tag and len; tag equals WMITLV_TAG_STRUC_WOW_IOAC_TMR_PATTERN_T */
A_UINT32 wake_in_s;
A_UINT32 vdev_id;
-} WOW_ACER_IOAC_TMR_PATTERN_T;
+} WOW_IOAC_TMR_PATTERN_T;
typedef struct {
A_UINT32 tlv_header; /** TLV tag and len; tag equals WMITLV_TAG_STRUC_WMI_WOW_IOAC_ADD_KEEPALIVE_CMD_fixed_param */
@@ -5486,32 +5525,32 @@ typedef struct {
A_UINT32 nID;
} WMI_WOW_IOAC_DEL_KEEPALIVE_CMD_fixed_param;
-typedef struct acer_ioac_keepalive_s {
- A_UINT32 tlv_header; /** TLV tag and len; tag equals WMITLV_TAG_STRUC_WOW_IOAC_KEEPALIVE_T */
- A_UINT32 keepalive_pkt_buf[WOW_DEFAULT_ACER_IOAC_KEEP_ALIVE_PKT_SIZE_DWORD];
+typedef struct ioac_keepalive_s {
+ A_UINT32 tlv_header; /** TLV tag and len; tag equals WMITLV_TAG_STRUC_WMI_WOW_IOAC_KEEPALIVE_T */
+ A_UINT32 keepalive_pkt_buf[WOW_DEFAULT_IOAC_KEEP_ALIVE_PKT_SIZE_DWORD];
A_UINT32 keepalive_pkt_len;
A_UINT32 period_in_ms;
A_UINT32 vdev_id;
-} WOW_IOAC_KEEPALIVE_T;
+} WMI_WOW_IOAC_KEEPALIVE_T;
typedef struct {
- A_UINT32 tlv_header; /** TLV tag and len; tag equals WMITLV_TAG_STRUC_WMI_WOW_ACER_IOAC_ADD_PATTERN_CMD_fixed_param */
+ A_UINT32 tlv_header; /** TLV tag and len; tag equals WMITLV_TAG_STRUC_WMI_WOW_IOAC_ADD_PATTERN_CMD_fixed_param */
A_UINT32 vdev_id;
A_UINT32 pattern_type;
/*
* Following this struct are these TLVs. Note that they are all array of structures
* but can have at most one element. Which TLV is empty or has one element depends
* on the field pattern_type. This is to emulate an union.
- * WOW_ACER_IOAC_PKT_PATTERN_T pattern_info_acer_pkt[];
- * WOW_ACER_IOAC_TMR_PATTERN_T pattern_info_acer_tmr[];
+ * WOW_IOAC_PKT_PATTERN_T pattern_info_pkt[];
+ * WOW_IOAC_TMR_PATTERN_T pattern_info_tmr[];
*/
-} WMI_WOW_ACER_IOAC_ADD_PATTERN_CMD_fixed_param;
+} WMI_WOW_IOAC_ADD_PATTERN_CMD_fixed_param;
typedef struct {
- A_UINT32 tlv_header; /** TLV tag and len; tag equals WMITLV_TAG_STRUC_WMI_WOW_ACER_IOAC_DEL_PATTERN_CMD_fixed_param */
+ A_UINT32 tlv_header; /** TLV tag and len; tag equals WMITLV_TAG_STRUC_WMI_WOW_IOAC_DEL_PATTERN_CMD_fixed_param */
A_UINT32 vdev_id;
A_UINT32 pattern_type;
-} WMI_WOW_ACER_IOAC_DEL_PATTERN_CMD_fixed_param;
+} WMI_WOW_IOAC_DEL_PATTERN_CMD_fixed_param;
typedef struct {
A_UINT32 tlv_header; /** TLV tag and len; tag equals WMITLV_TAG_STRUC_WMI_WOW_ADD_PATTERN_CMD_fixed_param */
@@ -5940,14 +5979,23 @@ typedef enum _WMI_NLO_CIPHER_ALGORITHM {
WMI_NLO_CIPHER_ALGO_WEP = 0x101,
} WMI_NLO_CIPHER_ALGORITHM;
+/* SSID broadcast type passed in NLO params */
+typedef enum _WMI_NLO_SSID_BcastNwType
+{
+ WMI_NLO_BCAST_UNKNOWN = 0,
+ WMI_NLO_BCAST_NORMAL = 1,
+ WMI_NLO_BCAST_HIDDEN = 2,
+} WMI_NLO_SSID_BcastNwType;
+
#define WMI_NLO_MAX_SSIDS 16
#define WMI_NLO_MAX_CHAN 48
-#define WMI_NLO_CONFIG_STOP (0x1 << 0)
-#define WMI_NLO_CONFIG_START (0x1 << 1)
-#define WMI_NLO_CONFIG_RESET (0x1 << 2)
-#define WMI_NLO_CONFIG_SLOW_SCAN (0x1 << 4)
-#define WMI_NLO_CONFIG_FAST_SCAN (0x1 << 5)
+#define WMI_NLO_CONFIG_STOP (0x1 << 0)
+#define WMI_NLO_CONFIG_START (0x1 << 1)
+#define WMI_NLO_CONFIG_RESET (0x1 << 2)
+#define WMI_NLO_CONFIG_SLOW_SCAN (0x1 << 4)
+#define WMI_NLO_CONFIG_FAST_SCAN (0x1 << 5)
+#define WMI_NLO_CONFIG_SSID_HIDE_EN (0x1 << 6)
/* NOTE: wmi_nlo_ssid_param structure can't be changed without breaking the compatibility */
typedef struct wmi_nlo_ssid_param
@@ -5969,6 +6017,14 @@ typedef struct wmi_nlo_auth_param
A_UINT32 valid;
A_UINT32 auth_type;
} wmi_nlo_auth_param;
+
+/* NOTE: wmi_nlo_bcast_nw_param structure can't be changed without breaking the compatibility */
+typedef struct wmi_nlo_bcast_nw_param
+{
+ A_UINT32 valid;
+ A_UINT32 bcast_nw_type;
+} wmi_nlo_bcast_nw_param;
+
/* NOTE: wmi_nlo_rssi_param structure can't be changed without breaking the compatibility */
typedef struct wmi_nlo_rssi_param
{
@@ -5982,6 +6038,7 @@ typedef struct nlo_configured_parameters {
wmi_nlo_enc_param enc_type;
wmi_nlo_auth_param auth_type;
wmi_nlo_rssi_param rssi_cond;
+ wmi_nlo_bcast_nw_param bcast_nw_type; /* indicates if the SSID is hidden or not */
} nlo_configured_parameters;
typedef struct wmi_nlo_config {
diff --git a/CORE/SERVICES/COMMON/wmi_version.h b/CORE/SERVICES/COMMON/wmi_version.h
index 831895f0bc6a..e3330ce69eb8 100644
--- a/CORE/SERVICES/COMMON/wmi_version.h
+++ b/CORE/SERVICES/COMMON/wmi_version.h
@@ -36,7 +36,7 @@
#define __WMI_VER_MINOR_ 0
/** WMI revision number has to be incremented when there is a
* change that may or may not break compatibility. */
-#define __WMI_REVISION_ 60
+#define __WMI_REVISION_ 61
/** The Version Namespace should not be normally changed. Only
* host and firmware of the same WMI namespace will work
diff --git a/CORE/SERVICES/HTC/htc.c b/CORE/SERVICES/HTC/htc.c
index a161bd9abee8..4058e31c705a 100644
--- a/CORE/SERVICES/HTC/htc.c
+++ b/CORE/SERVICES/HTC/htc.c
@@ -180,6 +180,7 @@ static void HTCCleanup(HTC_TARGET *target)
adf_os_spinlock_destroy(&target->HTCLock);
adf_os_spinlock_destroy(&target->HTCRxLock);
adf_os_spinlock_destroy(&target->HTCTxLock);
+ adf_os_spinlock_destroy(&target->HTCCreditLock);
/* free our instance */
A_FREE(target);
@@ -208,6 +209,7 @@ HTC_HANDLE HTCCreate(void *ol_sc, HTC_INIT_INFO *pInfo, adf_os_device_t osdev)
adf_os_spinlock_init(&target->HTCLock);
adf_os_spinlock_init(&target->HTCRxLock);
adf_os_spinlock_init(&target->HTCTxLock);
+ adf_os_spinlock_init(&target->HTCCreditLock);
do {
A_MEMCPY(&target->HTCInitInfo,pInfo,sizeof(HTC_INIT_INFO));
diff --git a/CORE/SERVICES/HTC/htc_internal.h b/CORE/SERVICES/HTC/htc_internal.h
index 4ea6113a6da7..c50e61dd27d6 100644
--- a/CORE/SERVICES/HTC/htc_internal.h
+++ b/CORE/SERVICES/HTC/htc_internal.h
@@ -86,6 +86,20 @@ extern "C" {
#define HTC_SERVICE_TX_PACKET_TAG HTC_TX_PACKET_TAG_INTERNAL
+#define HTC_CREDIT_HISTORY_MAX 1024
+
+typedef enum {
+ HTC_REQUEST_CREDIT,
+ HTC_PROCESS_CREDIT_REPORT,
+} htc_credit_exchange_type;
+
+typedef struct {
+ htc_credit_exchange_type type;
+ A_UINT64 time;
+ A_UINT32 tx_credit;
+ A_UINT32 htc_tx_queue_depth;
+} HTC_CREDIT_HISTORY;
+
typedef struct _HTC_ENDPOINT {
HTC_ENDPOINT_ID Id;
HTC_SERVICE_ID ServiceID; /* service ID this endpoint is bound to
@@ -146,6 +160,7 @@ typedef struct _HTC_TARGET {
adf_os_spinlock_t HTCLock;
adf_os_spinlock_t HTCRxLock;
adf_os_spinlock_t HTCTxLock;
+ adf_os_spinlock_t HTCCreditLock;
A_UINT32 HTCStateFlags;
void *host_handle;
HTC_INIT_INFO HTCInitInfo;
@@ -189,6 +204,8 @@ typedef struct _HTC_TARGET {
#define UNLOCK_HTC_RX(t) adf_os_spin_unlock_bh(&(t)->HTCRxLock);
#define LOCK_HTC_TX(t) adf_os_spin_lock_bh(&(t)->HTCTxLock);
#define UNLOCK_HTC_TX(t) adf_os_spin_unlock_bh(&(t)->HTCTxLock);
+#define LOCK_HTC_CREDIT(t) adf_os_spin_lock_bh(&(t)->HTCCreditLock);
+#define UNLOCK_HTC_CREDIT(t) adf_os_spin_unlock_bh(&(t)->HTCCreditLock);
#define GET_HTC_TARGET_FROM_HANDLE(hnd) ((HTC_TARGET *)(hnd))
diff --git a/CORE/SERVICES/HTC/htc_send.c b/CORE/SERVICES/HTC/htc_send.c
index 4b9257f342ed..6cc7bccf0e57 100644
--- a/CORE/SERVICES/HTC/htc_send.c
+++ b/CORE/SERVICES/HTC/htc_send.c
@@ -60,6 +60,20 @@ static unsigned ep_debug_mask = (1 << ENDPOINT_0) | (1 << ENDPOINT_1) | (1 << EN
#define ENABLE_BUNDLE_TX 0
#endif
+/* HTC Control Path Credit History */
+A_UINT32 g_htc_credit_history_idx = 0;
+HTC_CREDIT_HISTORY htc_credit_history_buffer[HTC_CREDIT_HISTORY_MAX];
+
+#define HTC_CREDIT_RECORD(a, b, c) { \
+ if (HTC_CREDIT_HISTORY_MAX <= g_htc_credit_history_idx) \
+ g_htc_credit_history_idx = 0; \
+ htc_credit_history_buffer[g_htc_credit_history_idx].type = a; \
+ htc_credit_history_buffer[g_htc_credit_history_idx].time = \
+ adf_get_boottime(); \
+ htc_credit_history_buffer[g_htc_credit_history_idx].tx_credit = b; \
+ htc_credit_history_buffer[g_htc_credit_history_idx].htc_tx_queue_depth = c; \
+ g_htc_credit_history_idx++; \
+} \
void HTC_dump_counter_info(HTC_HANDLE HTCHandle)
{
@@ -577,8 +591,16 @@ void GetHTCSendPacketsCreditBased(HTC_TARGET *target,
/* check if we need credits back from the target */
if (pEndpoint->TxCredits <= pEndpoint->TxCreditsPerMaxMsg) {
- /* tell the target we need credits ASAP! */
+ /* tell the target we need credits ASAP! */
sendFlags |= HTC_FLAGS_NEED_CREDIT_UPDATE;
+
+ if (pEndpoint->ServiceID == WMI_CONTROL_SVC) {
+ LOCK_HTC_CREDIT(target);
+ HTC_CREDIT_RECORD(HTC_REQUEST_CREDIT, pEndpoint->TxCredits,
+ HTC_PACKET_QUEUE_DEPTH(&pEndpoint->TxQueue));
+ UNLOCK_HTC_CREDIT(target);
+ }
+
INC_HTC_EP_STAT(pEndpoint, TxCreditLowIndications, 1);
#if DEBUG_CREDIT
AR_DEBUG_PRINTF(ATH_DEBUG_ERR,(" EP%d Needs Credits\n", pEndpoint->Id));
@@ -1590,6 +1612,13 @@ void HTCProcessCreditRpt(HTC_TARGET *target, HTC_CREDIT_REPORT *pRpt, int NumEnt
#else
pEndpoint->TxCredits += rpt_credits;
+ if (pEndpoint->ServiceID == WMI_CONTROL_SVC) {
+ LOCK_HTC_CREDIT(target);
+ HTC_CREDIT_RECORD(HTC_PROCESS_CREDIT_REPORT, pEndpoint->TxCredits,
+ HTC_PACKET_QUEUE_DEPTH(&pEndpoint->TxQueue));
+ UNLOCK_HTC_CREDIT(target);
+ }
+
if (pEndpoint->TxCredits && HTC_PACKET_QUEUE_DEPTH(&pEndpoint->TxQueue)) {
UNLOCK_HTC_TX(target);
#ifdef ATH_11AC_TXCOMPACT
diff --git a/CORE/SERVICES/WMA/wma.c b/CORE/SERVICES/WMA/wma.c
index 501badf39a6c..3bc97dd07256 100644
--- a/CORE/SERVICES/WMA/wma.c
+++ b/CORE/SERVICES/WMA/wma.c
@@ -2011,26 +2011,16 @@ static void wma_post_link_status(tAniGetLinkStatus *pGetLinkStatus,
}
}
-static int wma_link_status_event_handler(void *handle, u_int8_t *cmd_param_info,
- u_int32_t len)
+static int wma_link_status_rsp(tp_wma_handle wma, u_int8_t *buf)
{
- WMI_UPDATE_VDEV_RATE_STATS_EVENTID_param_tlvs *param_buf;
wmi_vdev_rate_stats_event_fixed_param *event;
wmi_vdev_rate_ht_info *ht_info;
- tp_wma_handle wma = (tp_wma_handle)handle;
struct wma_txrx_node *intr = wma->interfaces;
u_int8_t link_status = LINK_STATUS_LEGACY;
int i;
- param_buf =
- (WMI_UPDATE_VDEV_RATE_STATS_EVENTID_param_tlvs *)cmd_param_info;
- if (!param_buf) {
- WMA_LOGA("%s: Invalid stats event", __func__);
- return -1;
- }
-
- event = param_buf->fixed_param;
- ht_info = param_buf->ht_info;
+ event = (wmi_vdev_rate_stats_event_fixed_param *)buf;
+ ht_info = (wmi_vdev_rate_ht_info *)(buf + sizeof(*event));
WMA_LOGD("num_vdev_stats: %d", event->num_vdev_stats);
for (i = 0; (i < event->num_vdev_stats) && ht_info; i++) {
@@ -2063,6 +2053,54 @@ static int wma_link_status_event_handler(void *handle, u_int8_t *cmd_param_info,
return 0;
}
+static int wma_link_status_event_handler(void *handle, u_int8_t *cmd_param_info,
+ u_int32_t len)
+{
+ WMI_UPDATE_VDEV_RATE_STATS_EVENTID_param_tlvs *param_buf;
+ wmi_vdev_rate_stats_event_fixed_param *event;
+ vos_msg_t vos_msg = {0};
+ u_int32_t buf_size;
+ u_int8_t *buf;
+
+ param_buf =
+ (WMI_UPDATE_VDEV_RATE_STATS_EVENTID_param_tlvs *)cmd_param_info;
+ if (!param_buf) {
+ WMA_LOGA("%s: Invalid stats event", __func__);
+ return -EINVAL;
+ }
+
+ event = param_buf->fixed_param;
+ buf_size = sizeof(wmi_vdev_rate_stats_event_fixed_param) +
+ sizeof(wmi_vdev_rate_ht_info) * event->num_vdev_stats;
+ buf = vos_mem_malloc(buf_size);
+ if (!buf) {
+ WMA_LOGE("%s: Failed alloc memory for buf", __func__);
+ return -ENOMEM;
+ }
+
+ vos_mem_zero(buf, buf_size);
+ vos_mem_copy(buf, param_buf->fixed_param,
+ sizeof(wmi_vdev_rate_stats_event_fixed_param));
+ vos_mem_copy((buf + sizeof(wmi_vdev_rate_stats_event_fixed_param)),
+ param_buf->ht_info,
+ sizeof(wmi_vdev_rate_ht_info) * event->num_vdev_stats);
+
+ vos_msg.type = WDA_GET_LINK_STATUS_RSP_IND;
+ vos_msg.bodyptr = buf;
+ vos_msg.bodyval = 0;
+
+ if (VOS_STATUS_SUCCESS !=
+ vos_mq_post_message(VOS_MQ_ID_WDA, &vos_msg)) {
+ WMA_LOGP("%s: Failed to post WDA_GET_LINK_STATUS_RSP_IND msg",
+ __func__);
+ vos_mem_free(buf);
+ return -1;
+ }
+ WMA_LOGD("posted WDA_GET_LINK_STATUS_RSP_IND");
+
+ return 0;
+}
+
static int wma_stats_event_handler(void *handle, u_int8_t *cmd_param_info,
u_int32_t len)
{
@@ -2075,7 +2113,7 @@ static int wma_stats_event_handler(void *handle, u_int8_t *cmd_param_info,
param_buf = (WMI_UPDATE_STATS_EVENTID_param_tlvs *)cmd_param_info;
if (!param_buf) {
WMA_LOGA("%s: Invalid stats event", __func__);
- return -1;
+ return -EINVAL;
}
event = param_buf->fixed_param;
buf_size = sizeof(*event) +
@@ -2085,7 +2123,7 @@ static int wma_stats_event_handler(void *handle, u_int8_t *cmd_param_info,
buf = vos_mem_malloc(buf_size);
if (!buf) {
WMA_LOGE("%s: Failed alloc memory for buf", __func__);
- return -1;
+ return -ENOMEM;
}
vos_mem_zero(buf, buf_size);
vos_mem_copy(buf, event, sizeof(*event));
@@ -7412,6 +7450,7 @@ VOS_STATUS wma_roam_scan_offload_mode(tp_wma_handle wma_handle,
roam_offload_11r->r0kh_id_len);
vos_mem_copy (roam_offload_11r->psk_msk, roam_req->PSK_PMK,
sizeof(roam_req->PSK_PMK));
+ roam_offload_11r->psk_msk_len = roam_req->pmk_len;
roam_offload_11r->mdie_present = roam_req->MDID.mdiePresent;
roam_offload_11r->mdid = roam_req->MDID.mobilityDomain;
WMITLV_SET_HDR(&roam_offload_11r->tlv_header,
@@ -7431,6 +7470,7 @@ VOS_STATUS wma_roam_scan_offload_mode(tp_wma_handle wma_handle,
WMI_SET_ROAM_OFFLOAD_OKC_ENABLED(roam_offload_11i->flags);
vos_mem_copy (roam_offload_11i->pmk, roam_req->PSK_PMK,
sizeof(roam_req->PSK_PMK));
+ roam_offload_11i->pmk_len = roam_req->pmk_len;
WMITLV_SET_HDR(&roam_offload_11i->tlv_header,
WMITLV_TAG_STRUC_wmi_roam_11i_offload_tlv_param,
WMITLV_GET_STRUCT_TLVLEN
@@ -21746,6 +21786,10 @@ VOS_STATUS wma_mc_process_msg(v_VOID_t *vos_context, vos_msg_t *msg)
wma_process_link_status_req(wma_handle,
(tAniGetLinkStatus *)msg->bodyptr);
break;
+ case WDA_GET_LINK_STATUS_RSP_IND:
+ wma_link_status_rsp(wma_handle, msg->bodyptr);
+ vos_mem_free(msg->bodyptr);
+ break;
default:
WMA_LOGD("unknow msg type %x", msg->type);
/* Do Nothing? MSG Body should be freed at here */
@@ -22096,20 +22140,28 @@ static VOS_STATUS wma_tx_detach(tp_wma_handle wma_handle)
static void wma_roam_ho_fail_handler(tp_wma_handle wma, u_int32_t vdev_id)
{
tSirSmeHOFailureInd *ho_failure_ind;
+ vos_msg_t sme_msg = {0};
+ VOS_STATUS vos_status;
- ho_failure_ind = (tSirSmeHOFailureInd *) vos_mem_malloc
- (sizeof(tSirSmeHOFailureInd));
+ ho_failure_ind = vos_mem_malloc(sizeof(tSirSmeHOFailureInd));
if (NULL == ho_failure_ind) {
WMA_LOGE("%s: Memory allocation failure", __func__);
return;
}
- ho_failure_ind->messageType = WDA_HO_FAIL_IND;
- ho_failure_ind->length = sizeof(tSirSmeHOFailureInd);
ho_failure_ind->sessionId = vdev_id;
- wma_send_msg(wma, WDA_HO_FAIL_IND,
- (void *)ho_failure_ind, 0);
+ sme_msg.type = eWNI_SME_HO_FAIL_IND;
+ sme_msg.bodyptr = ho_failure_ind;
+ sme_msg.bodyval = 0;
+
+ vos_status = vos_mq_post_message(VOS_MODULE_ID_SME, &sme_msg);
+ if (!VOS_IS_STATUS_SUCCESS(vos_status)) {
+ WMA_LOGE("Fail to post eWNI_SME_HO_FAIL_IND msg to SME");
+ vos_mem_free(ho_failure_ind);
+ return;
+ }
+ return;
}
/* function : wma_roam_better_ap_handler
diff --git a/CORE/SERVICES/WMI/wmi_unified.c b/CORE/SERVICES/WMI/wmi_unified.c
index 42aee5b6d316..bf6e80d1cb7b 100644
--- a/CORE/SERVICES/WMI/wmi_unified.c
+++ b/CORE/SERVICES/WMI/wmi_unified.c
@@ -558,10 +558,10 @@ static u_int8_t* get_wmi_cmd_string(WMI_CMD_ID wmi_command)
CASE_RETURN_STRING(WMI_PDEV_SET_LED_CONFIG_CMDID);
CASE_RETURN_STRING(WMI_HOST_AUTO_SHUTDOWN_CFG_CMDID);
CASE_RETURN_STRING(WMI_CHAN_AVOID_UPDATE_CMDID);
- CASE_RETURN_STRING(WMI_WOW_ACER_IOAC_ADD_KEEPALIVE_CMDID);
- CASE_RETURN_STRING(WMI_WOW_ACER_IOAC_DEL_KEEPALIVE_CMDID);
- CASE_RETURN_STRING(WMI_WOW_ACER_IOAC_ADD_WAKE_PATTERN_CMDID);
- CASE_RETURN_STRING(WMI_WOW_ACER_IOAC_DEL_WAKE_PATTERN_CMDID);
+ CASE_RETURN_STRING(WMI_WOW_IOAC_ADD_KEEPALIVE_CMDID);
+ CASE_RETURN_STRING(WMI_WOW_IOAC_DEL_KEEPALIVE_CMDID);
+ CASE_RETURN_STRING(WMI_WOW_IOAC_ADD_WAKE_PATTERN_CMDID);
+ CASE_RETURN_STRING(WMI_WOW_IOAC_DEL_WAKE_PATTERN_CMDID);
CASE_RETURN_STRING(WMI_REQUEST_LINK_STATS_CMDID);
CASE_RETURN_STRING(WMI_START_LINK_STATS_CMDID);
CASE_RETURN_STRING(WMI_CLEAR_LINK_STATS_CMDID);
@@ -582,6 +582,7 @@ static u_int8_t* get_wmi_cmd_string(WMI_CMD_ID wmi_command)
CASE_RETURN_STRING(WMI_EXTWOW_SET_APP_TYPE1_PARAMS_CMDID);
CASE_RETURN_STRING(WMI_EXTWOW_SET_APP_TYPE2_PARAMS_CMDID);
CASE_RETURN_STRING(WMI_UNIT_TEST_CMDID);
+ CASE_RETURN_STRING(WMI_ROAM_SET_RIC_REQUEST_CMDID);
}
return "Invalid WMI cmd";
}
diff --git a/CORE/SME/inc/csrInternal.h b/CORE/SME/inc/csrInternal.h
index 118b30ef721e..c9083fd99da2 100644
--- a/CORE/SME/inc/csrInternal.h
+++ b/CORE/SME/inc/csrInternal.h
@@ -1523,6 +1523,7 @@ csrRoamUpdateAddIEs(tpAniSirGlobal pMac,
void csrProcessRoamOffloadSynchInd(tpAniSirGlobal pMac, void *pMsgBuf);
eHalStatus csrScanSaveRoamOffloadApToScanCache(tpAniSirGlobal pMac,
tSirSmeRoamOffloadSynchInd *pRoamOffloadSynchInd);
+void csrProcessHOFailInd(tpAniSirGlobal pMac, void *pMsgBuf);
#endif
#endif
diff --git a/CORE/SME/src/csr/csrApiRoam.c b/CORE/SME/src/csr/csrApiRoam.c
index ec3eb494723a..c9bda984760b 100644
--- a/CORE/SME/src/csr/csrApiRoam.c
+++ b/CORE/SME/src/csr/csrApiRoam.c
@@ -18536,6 +18536,39 @@ err_synch_rsp:
vos_mem_free(pFTRoamOffloadSynchRsp->pbssDescription);
pFTRoamOffloadSynchRsp->pbssDescription = NULL;
}
+
+
+/*----------------------------------------------------------------------------
+ * fn csrProcessHOFailInd
+ * brief This function will process the Hand Off Failure indication
+ * received from the firmware. It will trigger a disconnect on
+ * the session which the firmware reported a hand off failure
+ * param pMac global structure
+ * param pMsgBuf - Contains the session ID for which the handler should apply
+ * --------------------------------------------------------------------------*/
+void csrProcessHOFailInd(tpAniSirGlobal pMac, void *pMsgBuf)
+{
+ tSirSmeHOFailureInd *pSmeHOFailInd = (tSirSmeHOFailureInd *)pMsgBuf;
+ tANI_U32 sessionId;
+
+ if (pSmeHOFailInd)
+ sessionId = pSmeHOFailInd->sessionId;
+ else {
+ VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_ERROR,
+ "LFR3: Hand-Off Failure Ind is NULL");
+ return;
+ }
+ /* Roaming is supported only on Infra STA Mode. */
+ if (!csrRoamIsStaMode(pMac, sessionId)) {
+ VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_ERROR,
+ "LFR3:HO Fail cannot be handled for session %d",sessionId);
+ return;
+ }
+
+ VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_ERROR,
+ "LFR3:Issue Disconnect on session %d", sessionId);
+ csrRoamDisconnect(pMac, sessionId, eCSR_DISCONNECT_REASON_UNSPECIFIED);
+}
#endif
void csrInitOperatingClasses(tHalHandle hHal)
diff --git a/CORE/SME/src/sme_common/sme_Api.c b/CORE/SME/src/sme_common/sme_Api.c
index f5ae179de025..237baa79adb7 100644
--- a/CORE/SME/src/sme_common/sme_Api.c
+++ b/CORE/SME/src/sme_common/sme_Api.c
@@ -2248,6 +2248,12 @@ eHalStatus sme_ProcessMsg(tHalHandle hHal, vos_msg_t* pMsg)
csrProcessRoamOffloadSynchInd(pMac, pMsg->bodyptr);
vos_mem_free(pMsg->bodyptr);
break;
+ case eWNI_SME_HO_FAIL_IND:
+ VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_ERROR,
+ "LFR3:%s: Rcvd eWNI_SME_HO_FAIL_IND", __func__);
+ csrProcessHOFailInd(pMac, pMsg->bodyptr);
+ vos_mem_free(pMsg->bodyptr);
+ break;
#endif
case eWNI_PMC_ENTER_BMPS_RSP:
case eWNI_PMC_EXIT_BMPS_RSP:
diff --git a/CORE/WDA/inc/wlan_qct_wda.h b/CORE/WDA/inc/wlan_qct_wda.h
index 83a419d2799b..fb4cf660df67 100644
--- a/CORE/WDA/inc/wlan_qct_wda.h
+++ b/CORE/WDA/inc/wlan_qct_wda.h
@@ -826,7 +826,6 @@ tSirRetStatus uMacPostCtrlMsg(void* pSirGlobal, tSirMbMsg* pMb);
#ifdef WLAN_FEATURE_ROAM_OFFLOAD
#define WDA_ROAM_OFFLOAD_SYNCH_CNF SIR_HAL_ROAM_OFFLOAD_SYNCH_CNF
-#define WDA_HO_FAIL_IND SIR_HAL_HO_FAIL_IND
#endif
#ifdef WLAN_WAKEUP_EVENTS
#define WDA_WAKE_REASON_IND SIR_HAL_WAKE_REASON_IND
@@ -971,6 +970,7 @@ tSirRetStatus uMacPostCtrlMsg(void* pSirGlobal, tSirMbMsg* pMb);
#endif /* WLAN_FEATURE_LINK_LAYER_STATS */
#define WDA_LINK_STATUS_GET_REQ SIR_HAL_LINK_STATUS_GET_REQ
+#define WDA_GET_LINK_STATUS_RSP_IND SIR_HAL_GET_LINK_STATUS_RSP_IND
tSirRetStatus wdaPostCtrlMsg(tpAniSirGlobal pMac, tSirMsgQ *pMsg);