diff options
| author | Pitani Venkata Rajesh Kumar <vpitan@codeaurora.org> | 2014-08-21 11:36:27 +0530 |
|---|---|---|
| committer | Pitani Venkata Rajesh Kumar <vpitan@codeaurora.org> | 2014-08-21 11:37:52 +0530 |
| commit | 2e197bd89ab2c0595de0b71b8d2c16f2ade2d34b (patch) | |
| tree | e654d9f8aa98f4e3c4c8c7c4f729231be353a9e2 | |
| parent | c6ff84e67ff3e4a2d5a31cf0ae9b343777402395 (diff) | |
| parent | 8081cf8567ad117bc417c4d83456f7396a50c366 (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.h | 4 | ||||
| -rw-r--r-- | CORE/MAC/inc/sirApi.h | 2 | ||||
| -rw-r--r-- | CORE/MAC/inc/wniApi.h | 1 | ||||
| -rw-r--r-- | CORE/MAC/src/include/sirParams.h | 8 | ||||
| -rw-r--r-- | CORE/MAC/src/pe/lim/limProcessMessageQueue.c | 14 | ||||
| -rw-r--r-- | CORE/SERVICES/COMMON/bmi_msg.h | 2 | ||||
| -rw-r--r-- | CORE/SERVICES/COMMON/wmi_tlv_defs.h | 62 | ||||
| -rw-r--r-- | CORE/SERVICES/COMMON/wmi_unified.h | 155 | ||||
| -rw-r--r-- | CORE/SERVICES/COMMON/wmi_version.h | 2 | ||||
| -rw-r--r-- | CORE/SERVICES/HTC/htc.c | 2 | ||||
| -rw-r--r-- | CORE/SERVICES/HTC/htc_internal.h | 17 | ||||
| -rw-r--r-- | CORE/SERVICES/HTC/htc_send.c | 31 | ||||
| -rw-r--r-- | CORE/SERVICES/WMA/wma.c | 94 | ||||
| -rw-r--r-- | CORE/SERVICES/WMI/wmi_unified.c | 9 | ||||
| -rw-r--r-- | CORE/SME/inc/csrInternal.h | 1 | ||||
| -rw-r--r-- | CORE/SME/src/csr/csrApiRoam.c | 33 | ||||
| -rw-r--r-- | CORE/SME/src/sme_common/sme_Api.c | 6 | ||||
| -rw-r--r-- | CORE/WDA/inc/wlan_qct_wda.h | 2 |
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); |
