Merge changes I87f9c706,I11d15457,I4c8d9b28,I3996ce76,Idee37eb6,If3ba082b,I8263688a into wlan-cld3.driver.lnx.1.1-dev

* changes:
  Release 5.1.0.22C
  qcacld-3.0: Update correct authtype during connect
  qcacld-3.0: Changes to support wmi tx bundle completion
  qcacld-3.0: Enable LRO, NAPI, Fastpath
  qcacld-3.0: Kbuild: Enable LRO
  qcacld-3.0: Update handling of WOW packet buffer
  qcacld-3.0: CL 1546701 - update fw common interface files
This commit is contained in:
Service qcabuildsw
2016-07-21 16:28:46 -07:00
committato da Gerrit - the friendly Code Review server
15 ha cambiato i file con 409 aggiunte e 287 eliminazioni

10
Kbuild
Vedi File

@@ -168,12 +168,10 @@ ifneq ($(CONFIG_ROME_IF),sdio)
endif
# Flag to enable LRO (Large Receive Offload)
ifeq ($(CONFIG_CNSS_EOS), y)
ifeq ($(CONFIG_INET_LRO), y)
CONFIG_WLAN_LRO := y
else
CONFIG_WLAN_LRO := n
endif
ifeq ($(CONFIG_INET_LRO), y)
CONFIG_WLAN_LRO := y
else
CONFIG_WLAN_LRO := n
endif
endif

Vedi File

@@ -442,16 +442,6 @@ gEnablePowerSaveOffload=2
#Enable firmware uart print
gEnablefwprint=0
#IPA config
gIPAConfig=0
gIPADescSize=800
gIPAPreFilterEnable=1
gIPARMEnable=1
gIPAIPv6Enable=1
IpaUcOffloadEnabled=0
gIpaUcStaOffload=0
#P2P Listen offload
gEnableP2pListenOffload=1
@@ -479,12 +469,6 @@ gEnableMCCAdaptiveScheduler=1
#Enable or Disable p2p device address administered
isP2pDeviceAddrAdministrated=0
#Enable Rx thread
gEnableRxThread=1
#Enable NAPI
gEnableNAPI=1
# Set Thermal Power limit
TxPower2g=10
TxPower5g=10
@@ -511,14 +495,6 @@ ssdp = 0
#Enable Memory Deep Sleep
gEnableMemDeepSleep=1
# Bus bandwidth threshold values in terms of number of packets
gBusBandwidthHighThreshold=2000
gBusBandwidthMediumThreshold=500
gBusBandwidthLowThreshold=150
# Bus bandwidth compute timeout value in ms
gBusBandwidthComputeInterval=100
# Regulatory Setting; 0=STRICT; 1=CUSTOM
gRegulatoryChangeCountry=1
# RA filtering rate limit param, the current value would not
@@ -600,20 +576,70 @@ gEnableTDLSOffChannel=1
# 1=Enable, 0=Disable (default)
gEnableMacAddrSpoof=0
################ Datapath feature set Begin ################
# Bus bandwidth threshold values in terms of number of packets
gBusBandwidthHighThreshold=2000
gBusBandwidthMediumThreshold=500
gBusBandwidthLowThreshold=150
# Bus bandwidth compute timeout value in ms
gBusBandwidthComputeInterval=100
# VHT Tx/Rx MCS values
# Valid values are 0,1,2. If commented out, the default value is 0.
# 0=MCS0-7, 1=MCS0-8, 2=MCS0-9
gVhtRxMCS=2
gVhtTxMCS=2
# VHT Tx/Rx MCS values for 2x2
# Valid values are 0,1,2. If commented out, the default value is 0.
# 0=MCS0-7, 1=MCS0-8, 2=MCS0-9
gEnable2x2=1
gVhtRxMCS2x2=2
gVhtTxMCS2x2=2
#IPA config
gIPAConfig=0
gIPADescSize=800
gIPAPreFilterEnable=1
gIPARMEnable=1
gIPAIPv6Enable=1
IpaUcOffloadEnabled=0
gIpaUcStaOffload=0
# Enable/Disable RX full reorder offload
gReorderOffloadSupported=1
# Enable CE classification
# 1 - enable(default) 0 - disable
gCEClassifyEnable=1
#Enable Rx thread
# 1 - enable 0 - disable(default)
gEnableRxThread=0
# Enable(Tx) fastpath for data traffic.
# 0 - disable
# 1 - enable
# 1 - enable(default) 0 - disable
gEnableFastPath=1
# This flag enables IP, TCP and UDP checksum offload
# 1 - enable(default) 0 - disable
gEnableIpTcpUdpChecksumOffload=1
# Enable NAPI
# 1 - enable(default) 0 - disable
gEnableNAPI=1
# Enable TCP Segmentation Offload
# 0 - disable
# 1 - enable
# 1 - enable(default) 0 - disable
TSOEnable=1
# Enable Large Receive Offload
# 0 - disable
# 1 - enable
# Enable Large Recieve Offload
# 1 - enable(default) 0 - disable
LROEnable=1
################ Datapath feature set End ################
END
# Note: Configuration parser would not read anything past the END marker

Vedi File

@@ -90,32 +90,6 @@ void cds_set_driver_state(enum cds_driver_state);
void cds_clear_driver_state(enum cds_driver_state);
enum cds_driver_state cds_get_driver_state(void);
/**
* cds_get_u16()- get 16 bit data in little endian
* @ptr: buffer that holds data
*
* Return: uint16_t data in little endian format
*/
static inline uint16_t cds_get_u16(uint8_t *ptr)
{
return ((uint16_t) (*(ptr+1) << 8)) |
((uint16_t) (*ptr));
}
/**
* cds_get_u32()- get 32 bit data in little endian
* @ptr: buffer that holds data
*
* Return: uint32_t data in little endian format
*/
static inline uint32_t cds_get_u32(uint8_t *ptr)
{
return (*(ptr+3) << 24) |
(*(ptr+2) << 16) |
(*(ptr+1) << 8) |
(*(ptr));
}
/**
* cds_is_driver_loading() - Is driver load in progress
*

Vedi File

@@ -99,6 +99,8 @@ typedef enum {
* @ht_present: ht element present or not
* @vht_present: vht element present or not
* @hs20_present: hs20 element present or not
* @ht_op_present: ht operation present or not
* @vht_op_present: vht operation present or not
*/
struct hdd_conn_flag {
uint8_t ht_present:1;
@@ -173,7 +175,7 @@ struct hdd_conn_flag {
* @ht_caps: holds ht capabilities info
* @vht_caps: holds vht capabilities info
* @hs20vendor_ie: holds passpoint/hs20 info
* @hdd_conn_flag: flag conn info params is present or not
* @conn_flag: flag conn info params is present or not
* @roam_count: roaming counter
* @signal: holds rssi info
* @assoc_status_code: holds assoc fail reason

Vedi File

@@ -3328,7 +3328,7 @@ fail:
*
* Return: Success(0) or reason code for failure
*/
static int32_t
static int
__hdd_cfg80211_get_station_cmd(struct wiphy *wiphy,
struct wireless_dev *wdev,
const void *data,
@@ -9465,8 +9465,8 @@ int wlan_hdd_cfg80211_connect_start(hdd_adapter_t *pAdapter,
}
pRoamProfile = &pWextState->roamProfile;
qdf_mem_zero(&hdd_sta_ctx->conn_info,
sizeof(hdd_sta_ctx->conn_info));
qdf_mem_zero(&hdd_sta_ctx->conn_info.conn_flag,
sizeof(hdd_sta_ctx->conn_info.conn_flag));
if (pRoamProfile) {
hdd_station_ctx_t *pHddStaCtx;

Vedi File

@@ -406,8 +406,10 @@ enum qca_nl80211_vendor_subcmds {
* latest cached information during the connected state , if queried
* when in disconnected state.
*
* @QCA_WLAN_VENDOR_ATTR_GET_STATION_INVALID: Invalid attribute
* @QCA_WLAN_VENDOR_ATTR_GET_STATION_INFO: bss info
* @QCA_WLAN_VENDOR_ATTR_GET_STATION_ASSOC_FAIL_REASON: assoc fail reason
* @QCA_WLAN_VENDOR_ATTR_GET_STATION_AFTER_LAST: After last
*/
enum qca_wlan_vendor_attr_get_station {
QCA_WLAN_VENDOR_ATTR_GET_STATION_INVALID = 0,
@@ -504,6 +506,7 @@ enum qca_wlan_auth_type {
* @QCA_WLAN_VENDOR_ATTR_GET_STATION_INFO_ASSOC_FAIL_REASON:
* Status Code Corresponding to the Association Failure.
* Unsigned 32 bit value.
* @QCA_WLAN_VENDOR_ATTR_GET_STATION_INFO_AFTER_LAST: After last
*/
enum qca_wlan_vendor_attr_get_station_info {
QCA_WLAN_VENDOR_ATTR_GET_STATION_INFO_INVALID = 0,

Vedi File

@@ -41,9 +41,9 @@
#define QWLAN_VERSION_MAJOR 5
#define QWLAN_VERSION_MINOR 1
#define QWLAN_VERSION_PATCH 0
#define QWLAN_VERSION_EXTRA "B"
#define QWLAN_VERSION_EXTRA "C"
#define QWLAN_VERSION_BUILD 22
#define QWLAN_VERSIONSTR "5.1.0.22B"
#define QWLAN_VERSIONSTR "5.1.0.22C"
#endif /* QWLAN_VERSION_H */

Vedi File

@@ -2077,6 +2077,8 @@ struct wmi_desc_t *wmi_desc_get(tp_wma_handle wma_handle);
void wmi_desc_put(tp_wma_handle wma_handle, struct wmi_desc_t *wmi_desc);
int wma_mgmt_tx_completion_handler(void *handle, uint8_t *cmpl_event_params,
uint32_t len);
int wma_mgmt_tx_bundle_completion_handler(void *handle,
uint8_t *cmpl_event_params, uint32_t len);
void wma_set_dfs_region(tp_wma_handle wma, uint8_t dfs_region);
uint32_t wma_get_vht_ch_width(void);
QDF_STATUS

Vedi File

@@ -2732,6 +2732,138 @@ static void wma_wow_wake_up_stats(tp_wma_handle wma, uint8_t *data,
return;
}
#ifdef FEATURE_WLAN_EXTSCAN
/**
* wma_extscan_get_eventid_from_tlvtag() - map tlv tag to corresponding event id
* @tag: WMI TLV tag
*
* Return:
* 0 if TLV tag is invalid
* else return corresponding WMI event id
*/
static int wma_extscan_get_eventid_from_tlvtag(uint32_t tag)
{
uint32_t event_id;
switch (tag) {
case WMITLV_TAG_STRUC_wmi_extscan_start_stop_event_fixed_param:
event_id = WMI_EXTSCAN_START_STOP_EVENTID;
break;
case WMITLV_TAG_STRUC_wmi_extscan_operation_event_fixed_param:
event_id = WMI_EXTSCAN_OPERATION_EVENTID;
break;
case WMITLV_TAG_STRUC_wmi_extscan_table_usage_event_fixed_param:
event_id = WMI_EXTSCAN_TABLE_USAGE_EVENTID;
break;
case WMITLV_TAG_STRUC_wmi_extscan_cached_results_event_fixed_param:
event_id = WMI_EXTSCAN_CACHED_RESULTS_EVENTID;
break;
case WMITLV_TAG_STRUC_wmi_extscan_wlan_change_results_event_fixed_param:
event_id = WMI_EXTSCAN_WLAN_CHANGE_RESULTS_EVENTID;
break;
case WMITLV_TAG_STRUC_wmi_extscan_hotlist_match_event_fixed_param:
event_id = WMI_EXTSCAN_HOTLIST_MATCH_EVENTID;
break;
case WMITLV_TAG_STRUC_wmi_extscan_capabilities_event_fixed_param:
event_id = WMI_EXTSCAN_CAPABILITIES_EVENTID;
break;
case WMITLV_TAG_STRUC_wmi_extscan_hotlist_ssid_match_event_fixed_param:
event_id = WMI_EXTSCAN_HOTLIST_SSID_MATCH_EVENTID;
break;
default:
event_id = 0;
WMA_LOGE("%s: Unknown tag: %d", __func__, tag);
break;
}
WMA_LOGI("%s: For tag %d WMI event 0x%x", __func__, tag, event_id);
return event_id;
}
#else
static int wma_extscan_get_eventid_from_tlvtag(uint32_t tag)
{
return 0;
}
#endif
/**
* wow_get_wmi_eventid() - map reason or tlv tag to corresponding event id
* @tag: WMI TLV tag
* @reason: WOW reason
*
* WOW reason type is primarily used to find the ID. If there could be
* multiple events that can be sent as a WOW event with same reason
* then tlv tag is used to identify the corresponding event.
*
* Return:
* 0 if TLV tag/reason is invalid
* else return corresponding WMI event id
*/
static int wow_get_wmi_eventid(int32_t reason, uint32_t tag)
{
uint32_t event_id;
switch (reason) {
case WOW_REASON_NLO_SCAN_COMPLETE:
event_id = WMI_NLO_SCAN_COMPLETE_EVENTID;
break;
case WOW_REASON_CSA_EVENT:
event_id = WMI_CSA_HANDLING_EVENTID;
break;
case WOW_REASON_LOW_RSSI:
event_id = WMI_ROAM_EVENTID;
break;
case WOW_REASON_CLIENT_KICKOUT_EVENT:
event_id = WMI_PEER_STA_KICKOUT_EVENTID;
break;
case WOW_REASON_EXTSCAN:
event_id = wma_extscan_get_eventid_from_tlvtag(tag);
break;
case WOW_REASON_RSSI_BREACH_EVENT:
event_id = WMI_RSSI_BREACH_EVENTID;
break;
case WOW_REASON_NAN_EVENT:
event_id = WMI_NAN_EVENTID;
break;
default:
WMA_LOGD(FL("Unexpected WOW reason : %s(%d)"),
wma_wow_wake_reason_str(reason), reason);
event_id = 0;
break;
}
return event_id;
}
/**
* tlv_check_required() - tells whether to check the wow packet buffer
* for proper TLV structure.
* @reason: WOW reason
*
* In most cases, wow wake up event carries the actual event buffer in
* wow_packet_buffer with some exceptions. This function is used to
* determine when to check for the TLVs in wow_packet_buffer.
*
* Return: true if check is required and false otherwise.
*/
static bool tlv_check_required(int32_t reason)
{
switch (reason) {
case WOW_REASON_PATTERN_MATCH_FOUND:
return false;
default:
return true;
}
}
/**
* wma_wow_wakeup_host_event() - wakeup host event handler
* @handle: wma handle
@@ -2753,7 +2885,9 @@ int wma_wow_wakeup_host_event(void *handle, uint8_t *event,
struct wma_txrx_node *node;
#endif /* FEATURE_WLAN_SCAN_PNO */
uint32_t wake_lock_duration = 0;
uint32_t wow_buf_pkt_len = 0;
void *wmi_cmd_struct_ptr = NULL;
uint32_t tlv_hdr, tag, wow_buf_pkt_len = 0, event_id = 0;
int tlv_ok_status;
param_buf = (WMI_WOW_WAKEUP_HOST_EVENTID_param_tlvs *) event;
if (!param_buf) {
@@ -2769,6 +2903,35 @@ int wma_wow_wakeup_host_event(void *handle, uint8_t *event,
qdf_event_set(&wma->wma_resume_event);
if (param_buf->wow_packet_buffer &&
tlv_check_required(wake_info->wake_reason)) {
/*
* In case of wow_packet_buffer, first 4 bytes is the length.
* Following the length is the actual buffer.
*/
wow_buf_pkt_len = *(uint32_t *)param_buf->wow_packet_buffer;
tlv_hdr = WMITLV_GET_HDR(
(uint8_t *)param_buf->wow_packet_buffer + 4);
tag = WMITLV_GET_TLVTAG(tlv_hdr);
event_id = wow_get_wmi_eventid(wake_info->wake_reason, tag);
if (!event_id) {
WMA_LOGE(FL("Unable to find matching ID"));
return -EINVAL;
}
tlv_ok_status = wmitlv_check_and_pad_event_tlvs(
handle, param_buf->wow_packet_buffer + 4,
wow_buf_pkt_len, event_id,
&wmi_cmd_struct_ptr);
if (tlv_ok_status != 0) {
WMA_LOGE(FL("Invalid TLVs, Length:%d event_id:%d status: %d"),
wow_buf_pkt_len, event_id, tlv_ok_status);
return -EINVAL;
}
}
switch (wake_info->wake_reason) {
case WOW_REASON_AUTH_REQ_RECV:
wake_lock_duration = WMA_AUTH_REQ_RECV_WAKE_LOCK_TIMEOUT;
@@ -2819,34 +2982,19 @@ int wma_wow_wakeup_host_event(void *handle, uint8_t *event,
break;
case WOW_REASON_NLO_SCAN_COMPLETE:
{
WMI_NLO_SCAN_COMPLETE_EVENTID_param_tlvs param;
WMA_LOGD("Host woken up due to pno scan complete reason");
/* First 4-bytes of wow_packet_buffer is the length */
if (param_buf->wow_packet_buffer) {
param.fixed_param = (wmi_nlo_event *)
(param_buf->wow_packet_buffer + 4);
wma_nlo_scan_cmp_evt_handler(handle,
(u_int8_t *)&param, sizeof(param));
} else
WMA_LOGD("No wow_packet_buffer present");
}
WMA_LOGD("Host woken up due to pno scan complete reason");
if (param_buf->wow_packet_buffer)
wma_nlo_scan_cmp_evt_handler(handle,
wmi_cmd_struct_ptr, wow_buf_pkt_len);
else
WMA_LOGD("No wow_packet_buffer present");
break;
#endif /* FEATURE_WLAN_SCAN_PNO */
case WOW_REASON_CSA_EVENT:
{
WMI_CSA_HANDLING_EVENTID_param_tlvs param;
WMA_LOGD("Host woken up because of CSA IE");
param.fixed_param = (wmi_csa_event_fixed_param *)
(((uint8_t *) wake_info)
+ sizeof(WOW_EVENT_INFO_fixed_param)
+ WOW_CSA_EVENT_OFFSET);
wma_csa_offload_handler(handle, (uint8_t *) &param,
sizeof(param));
}
wma_csa_offload_handler(handle, wmi_cmd_struct_ptr,
wow_buf_pkt_len);
break;
#ifdef FEATURE_WLAN_LPHB
@@ -2878,115 +3026,69 @@ int wma_wow_wakeup_host_event(void *handle, uint8_t *event,
break;
case WOW_REASON_LOW_RSSI:
{
/* WOW_REASON_LOW_RSSI is used for all roaming events.
* WMI_ROAM_REASON_BETTER_AP, WMI_ROAM_REASON_BMISS,
* WMI_ROAM_REASON_SUITABLE_AP will be handled by
* wma_roam_event_callback().
*/
WMI_ROAM_EVENTID_param_tlvs param;
wma_wow_wake_up_stats(wma, NULL, 0, WOW_REASON_LOW_RSSI);
WMA_LOGD("Host woken up because of roam event");
if (param_buf->wow_packet_buffer) {
/* Roam event is embedded in wow_packet_buffer */
WMA_LOGD("Host woken up because of roam event");
qdf_mem_copy((uint8_t *) &wow_buf_pkt_len,
param_buf->wow_packet_buffer, 4);
WMA_LOGD("wow_packet_buffer dump");
qdf_trace_hex_dump(QDF_MODULE_ID_WMA,
QDF_TRACE_LEVEL_DEBUG,
param_buf->wow_packet_buffer,
wow_buf_pkt_len);
if (wow_buf_pkt_len >= sizeof(param)) {
param.fixed_param =
(wmi_roam_event_fixed_param *)
(param_buf->wow_packet_buffer + 4);
wma_roam_event_callback(handle,
(uint8_t *) &
param,
sizeof(param));
} else {
WMA_LOGE("Wrong length for roam event = %d bytes",
wow_buf_pkt_len);
}
wma_roam_event_callback(handle, wmi_cmd_struct_ptr,
wow_buf_pkt_len);
} else {
/* No wow_packet_buffer means a better AP beacon
/*
* No wow_packet_buffer means a better AP beacon
* will follow in a later event.
*/
WMA_LOGD("Host woken up because of better AP beacon");
}
break;
}
case WOW_REASON_CLIENT_KICKOUT_EVENT:
{
WMI_PEER_STA_KICKOUT_EVENTID_param_tlvs param;
WMA_LOGD("Host woken up because of sta_kickout event");
if (param_buf->wow_packet_buffer) {
/* station kickout event embedded in wow_packet_buffer */
WMA_LOGD("Host woken up because of sta_kickout event");
qdf_mem_copy((u_int8_t *) &wow_buf_pkt_len,
param_buf->wow_packet_buffer, 4);
WMA_LOGD("wow_packet_buffer dump");
qdf_trace_hex_dump(QDF_MODULE_ID_WMA,
WMA_LOGD("wow_packet_buffer dump");
qdf_trace_hex_dump(QDF_MODULE_ID_WMA,
QDF_TRACE_LEVEL_DEBUG,
param_buf->wow_packet_buffer, wow_buf_pkt_len);
if (wow_buf_pkt_len >= sizeof(param)) {
param.fixed_param = (wmi_peer_sta_kickout_event_fixed_param *)
(param_buf->wow_packet_buffer + 4);
wma_peer_sta_kickout_event_handler(handle,
(u_int8_t *)&param, sizeof(param));
} else {
WMA_LOGE("Wrong length for sta_kickout event = %d bytes",
wow_buf_pkt_len);
}
wmi_cmd_struct_ptr, wow_buf_pkt_len);
} else {
WMA_LOGD("No wow_packet_buffer present");
}
break;
}
#ifdef FEATURE_WLAN_EXTSCAN
case WOW_REASON_EXTSCAN:
WMA_LOGD("Host woken up because of extscan reason");
wma_wow_wake_up_stats(wma, NULL, 0, WOW_REASON_EXTSCAN);
if (param_buf->wow_packet_buffer) {
wow_buf_pkt_len =
*(uint32_t *)param_buf->wow_packet_buffer;
if (param_buf->wow_packet_buffer)
wma_extscan_wow_event_callback(handle,
(u_int8_t *)(param_buf->wow_packet_buffer + 4),
wow_buf_pkt_len);
} else
wmi_cmd_struct_ptr, wow_buf_pkt_len);
else
WMA_LOGE("wow_packet_buffer is empty");
break;
#endif
case WOW_REASON_RSSI_BREACH_EVENT:
{
WMI_RSSI_BREACH_EVENTID_param_tlvs param;
wma_wow_wake_up_stats(wma, NULL, 0,
wma_wow_wake_up_stats(wma, NULL, 0,
WOW_REASON_RSSI_BREACH_EVENT);
WMA_LOGD("Host woken up because of rssi breach reason");
/* rssi breach event is embedded in wow_packet_buffer */
if (param_buf->wow_packet_buffer) {
qdf_mem_copy((u_int8_t *) &wow_buf_pkt_len,
param_buf->wow_packet_buffer, 4);
if (wow_buf_pkt_len >= sizeof(param)) {
param.fixed_param =
(wmi_rssi_breach_event_fixed_param *)
(param_buf->wow_packet_buffer + 4);
wma_rssi_breached_event_handler(handle,
(u_int8_t *)&param,
sizeof(param));
} else {
WMA_LOGE("%s: Wrong length: %d bytes",
__func__, wow_buf_pkt_len);
}
} else
WMA_LOGD("No wow_packet_buffer present");
}
WMA_LOGD("Host woken up because of rssi breach reason");
/* rssi breach event is embedded in wow_packet_buffer */
if (param_buf->wow_packet_buffer)
wma_rssi_breached_event_handler(handle,
wmi_cmd_struct_ptr, wow_buf_pkt_len);
else
WMA_LOGD("No wow_packet_buffer present");
break;
case WOW_REASON_NAN_EVENT:
WMA_LOGA("Host woken up due to NAN event reason");
wma_nan_rsp_event_handler(handle,
(uint8_t *)param_buf->wow_packet_buffer,
sizeof(WMI_NAN_EVENTID_param_tlvs));
wmi_cmd_struct_ptr, wow_buf_pkt_len);
break;
case WOW_REASON_NAN_DATA:
WMA_LOGD(FL("Host woken up for NAN data path event from FW"));
@@ -3006,6 +3108,9 @@ int wma_wow_wakeup_host_event(void *handle, uint8_t *event,
}
break;
default:
WMA_LOGE(FL("WOW reason %s(%d)- not handled"),
wma_wow_wake_reason_str(wake_info->wake_reason),
wake_info->wake_reason);
break;
}
@@ -3016,6 +3121,7 @@ int wma_wow_wakeup_host_event(void *handle, uint8_t *event,
WMA_LOGA("Holding %d msec wake_lock", wake_lock_duration);
}
wmitlv_free_allocated_event_tlvs(event_id, &wmi_cmd_struct_ptr);
return 0;
}

Vedi File

@@ -238,6 +238,8 @@ static void wma_set_default_tgt_config(tp_wma_handle wma_handle)
tgt_cfg.num_tids = (2 * (no_of_peers_supported + CFG_TGT_NUM_VDEV + 2));
tgt_cfg.scan_max_pending_req = wma_handle->max_scan;
WMI_RSRC_CFG_FLAG_MGMT_COMP_EVT_BUNDLE_SUPPORT_SET(tgt_cfg.flag1, 1);
WMITLV_SET_HDR(&tgt_cfg.tlv_header,
WMITLV_TAG_STRUC_wmi_resource_config,
WMITLV_GET_STRUCT_TLVLEN(wmi_resource_config));
@@ -4318,6 +4320,16 @@ int wma_rx_service_ready_event(void *handle, uint8_t *cmd_param_info,
return -EINVAL;
}
status = wmi_unified_register_event_handler(
wma_handle->wmi_handle,
WMI_MGMT_TX_BUNDLE_COMPLETION_EVENTID,
wma_mgmt_tx_bundle_completion_handler,
WMA_RX_SERIALIZER_CTX);
if (status) {
WMA_LOGE("Failed to register MGMT over WMI completion handler");
return -EINVAL;
}
} else {
WMA_LOGE("FW doesnot support WMI_SERVICE_MGMT_TX_WMI, Use HTT interface for Management Tx");
}

Vedi File

@@ -2451,6 +2451,51 @@ void wma_beacon_miss_handler(tp_wma_handle wma, uint32_t vdev_id)
wma_send_msg(wma, WMA_MISSED_BEACON_IND, (void *)beacon_miss_ind, 0);
}
/**
* wma_process_mgmt_tx_completion() - process mgmt completion
* @wma_handle: wma handle
* @desc_id: descriptor id
* @status: status
*
* Return: 0 for success or error code
*/
int wma_process_mgmt_tx_completion(tp_wma_handle wma_handle,
uint32_t desc_id, uint32_t status)
{
struct wmi_desc_t *wmi_desc;
ol_txrx_pdev_handle pdev = cds_get_context(QDF_MODULE_ID_TXRX);
if (pdev == NULL) {
WMA_LOGE("%s: NULL pdev pointer", __func__);
return -EINVAL;
}
WMA_LOGI("%s: status:%d wmi_desc_id:%d", __func__, status, desc_id);
wmi_desc = (struct wmi_desc_t *)
(&wma_handle->wmi_desc_pool.array[desc_id]);
if (!wmi_desc) {
WMA_LOGE("%s: Invalid wmi desc", __func__);
return -EINVAL;
}
if (wmi_desc->nbuf)
qdf_nbuf_unmap_single(pdev->osdev, wmi_desc->nbuf,
QDF_DMA_TO_DEVICE);
if (wmi_desc->tx_cmpl_cb)
wmi_desc->tx_cmpl_cb(wma_handle->mac_context,
wmi_desc->nbuf, 1);
if (wmi_desc->ota_post_proc_cb)
wmi_desc->ota_post_proc_cb((tpAniSirGlobal)
wma_handle->mac_context,
status);
wmi_desc_put(wma_handle, wmi_desc);
return 0;
}
/**
* wma_mgmt_tx_completion_handler() - wma mgmt Tx completion event handler
* @handle: wma handle
@@ -2466,18 +2511,6 @@ int wma_mgmt_tx_completion_handler(void *handle, uint8_t *cmpl_event_params,
tp_wma_handle wma_handle = (tp_wma_handle)handle;
WMI_MGMT_TX_COMPLETION_EVENTID_param_tlvs *param_buf;
wmi_mgmt_tx_compl_event_fixed_param *cmpl_params;
struct wmi_desc_t *wmi_desc;
ol_txrx_pdev_handle pdev = cds_get_context(QDF_MODULE_ID_TXRX);
if (!pdev) {
WMA_LOGE("%s: txrx pdev is NULL", __func__);
return -EINVAL;
}
if (pdev == NULL) {
WMA_LOGE("%s: NULL pdev pointer", __func__);
return -EINVAL;
}
param_buf = (WMI_MGMT_TX_COMPLETION_EVENTID_param_tlvs *)
cmpl_event_params;
@@ -2487,31 +2520,44 @@ int wma_mgmt_tx_completion_handler(void *handle, uint8_t *cmpl_event_params,
}
cmpl_params = param_buf->fixed_param;
WMA_LOGI("%s: status:%d wmi_desc_id:%d", __func__, cmpl_params->status,
cmpl_params->desc_id);
wma_process_mgmt_tx_completion(wma_handle,
cmpl_params->desc_id, cmpl_params->status);
wmi_desc = (struct wmi_desc_t *)
(&wma_handle->wmi_desc_pool.array[cmpl_params->desc_id]);
return 0;
}
if (!wmi_desc) {
WMA_LOGE("%s: Invalid wmi desc", __func__);
/**
* wma_mgmt_tx_bundle_completion_handler() - mgmt bundle comp handler
* @handle: wma handle
* @buf: buffer
* @len: length
*
* Return: 0 for success or error code
*/
int wma_mgmt_tx_bundle_completion_handler(void *handle, uint8_t *buf,
uint32_t len)
{
tp_wma_handle wma_handle = (tp_wma_handle)handle;
WMI_MGMT_TX_BUNDLE_COMPLETION_EVENTID_param_tlvs *param_buf;
wmi_mgmt_tx_compl_bundle_event_fixed_param *cmpl_params;
uint32_t num_reports;
uint32_t *desc_ids;
uint32_t *status;
int i;
param_buf = (WMI_MGMT_TX_BUNDLE_COMPLETION_EVENTID_param_tlvs *)buf;
if (!param_buf && !wma_handle) {
WMA_LOGE("%s: Invalid mgmt Tx completion event", __func__);
return -EINVAL;
}
cmpl_params = param_buf->fixed_param;
num_reports = cmpl_params->num_reports;
desc_ids = (uint32_t *)(param_buf->desc_ids);
status = (uint32_t *)(param_buf->status);
if (wmi_desc->nbuf)
qdf_nbuf_unmap_single(pdev->osdev, wmi_desc->nbuf,
QDF_DMA_TO_DEVICE);
if (wmi_desc->tx_cmpl_cb)
wmi_desc->tx_cmpl_cb(wma_handle->mac_context,
wmi_desc->nbuf, 1);
if (wmi_desc->ota_post_proc_cb)
wmi_desc->ota_post_proc_cb((tpAniSirGlobal)
wma_handle->mac_context,
cmpl_params->status);
wmi_desc_put(wma_handle, wmi_desc);
for (i = 0; i < num_reports; i++)
wma_process_mgmt_tx_completion(wma_handle,
desc_ids[i], status[i]);
return 0;
}

Vedi File

@@ -3259,61 +3259,6 @@ void wma_scan_cache_updated_ind(tp_wma_handle wma, uint8_t sessionId)
}
#ifdef FEATURE_WLAN_EXTSCAN
/**
* wma_extscan_get_eventid_from_tlvtag() - map tlv tag to corresponding event id
* @tag: WMI TLV tag
*
* Return:
* 0 if TLV tag is invalid
* else return corresponding WMI event id
*/
static int wma_extscan_get_eventid_from_tlvtag(uint32_t tag)
{
uint32_t event_id;
switch (tag) {
case WMITLV_TAG_STRUC_wmi_extscan_start_stop_event_fixed_param:
event_id = WMI_EXTSCAN_START_STOP_EVENTID;
break;
case WMITLV_TAG_STRUC_wmi_extscan_operation_event_fixed_param:
event_id = WMI_EXTSCAN_OPERATION_EVENTID;
break;
case WMITLV_TAG_STRUC_wmi_extscan_table_usage_event_fixed_param:
event_id = WMI_EXTSCAN_TABLE_USAGE_EVENTID;
break;
case WMITLV_TAG_STRUC_wmi_extscan_cached_results_event_fixed_param:
event_id = WMI_EXTSCAN_CACHED_RESULTS_EVENTID;
break;
case WMITLV_TAG_STRUC_wmi_extscan_wlan_change_results_event_fixed_param:
event_id = WMI_EXTSCAN_WLAN_CHANGE_RESULTS_EVENTID;
break;
case WMITLV_TAG_STRUC_wmi_extscan_hotlist_match_event_fixed_param:
event_id = WMI_EXTSCAN_HOTLIST_MATCH_EVENTID;
break;
case WMITLV_TAG_STRUC_wmi_extscan_capabilities_event_fixed_param:
event_id = WMI_EXTSCAN_CAPABILITIES_EVENTID;
break;
case WMITLV_TAG_STRUC_wmi_extscan_hotlist_ssid_match_event_fixed_param:
event_id = WMI_EXTSCAN_HOTLIST_SSID_MATCH_EVENTID;
break;
default:
event_id = 0;
WMA_LOGE("%s: Unknown tag: %d", __func__, tag);
break;
}
WMA_LOGI("%s: For tag %d WMI event 0x%x", __func__, tag, event_id);
return event_id;
}
/**
* wma_extscan_wow_event_callback() - extscan wow event callback
* @handle: WMA handle
@@ -3326,77 +3271,53 @@ static int wma_extscan_get_eventid_from_tlvtag(uint32_t tag)
* of event buffer is common tlv header, which is a combination
* of tag (higher 2 bytes) and length (lower 2 bytes). The tag is used to
* identify the event which triggered wow event.
* Payload is extracted and converted into generic tlv structure before
* being passed to this function.
*
* @Return: none
*/
void wma_extscan_wow_event_callback(void *handle, void *event, uint32_t len)
{
uint32_t id;
int tlv_ok_status = 0;
void *wmi_cmd_struct_ptr = NULL;
uint32_t tag = WMITLV_GET_TLVTAG(WMITLV_GET_HDR(event));
id = wma_extscan_get_eventid_from_tlvtag(tag);
if (!id) {
WMA_LOGE("%s: Invalid Tag: %d", __func__, tag);
return;
}
tlv_ok_status = wmitlv_check_and_pad_event_tlvs(
handle, event, len, id,
&wmi_cmd_struct_ptr);
if (tlv_ok_status != 0) {
WMA_LOGE("%s: Invalid Tag: %d could not check and pad tlvs",
__func__, tag);
return;
}
switch (tag) {
case WMITLV_TAG_STRUC_wmi_extscan_start_stop_event_fixed_param:
wma_extscan_start_stop_event_handler(handle,
wmi_cmd_struct_ptr, len);
wma_extscan_start_stop_event_handler(handle, event, len);
break;
case WMITLV_TAG_STRUC_wmi_extscan_operation_event_fixed_param:
wma_extscan_operations_event_handler(handle,
wmi_cmd_struct_ptr, len);
wma_extscan_operations_event_handler(handle, event, len);
break;
case WMITLV_TAG_STRUC_wmi_extscan_table_usage_event_fixed_param:
wma_extscan_table_usage_event_handler(handle,
wmi_cmd_struct_ptr, len);
wma_extscan_table_usage_event_handler(handle, event, len);
break;
case WMITLV_TAG_STRUC_wmi_extscan_cached_results_event_fixed_param:
wma_extscan_cached_results_event_handler(handle,
wmi_cmd_struct_ptr, len);
wma_extscan_cached_results_event_handler(handle, event, len);
break;
case WMITLV_TAG_STRUC_wmi_extscan_wlan_change_results_event_fixed_param:
wma_extscan_change_results_event_handler(handle,
wmi_cmd_struct_ptr, len);
wma_extscan_change_results_event_handler(handle, event, len);
break;
case WMITLV_TAG_STRUC_wmi_extscan_hotlist_match_event_fixed_param:
wma_extscan_hotlist_match_event_handler(handle,
wmi_cmd_struct_ptr, len);
wma_extscan_hotlist_match_event_handler(handle, event, len);
break;
case WMITLV_TAG_STRUC_wmi_extscan_capabilities_event_fixed_param:
wma_extscan_capabilities_event_handler(handle,
wmi_cmd_struct_ptr, len);
wma_extscan_capabilities_event_handler(handle, event, len);
break;
case WMITLV_TAG_STRUC_wmi_extscan_hotlist_ssid_match_event_fixed_param:
wma_extscan_hotlist_ssid_match_event_handler(handle,
wmi_cmd_struct_ptr, len);
event, len);
break;
default:
WMA_LOGE("%s: Unknown tag: %d", __func__, tag);
WMA_LOGE(FL("Unknown tag: %d"), tag);
break;
}
wmitlv_free_allocated_event_tlvs(id, &wmi_cmd_struct_ptr);
return;
}

Vedi File

@@ -723,6 +723,7 @@ typedef enum {
WMITLV_TAG_STRUC_wmi_pdev_set_reorder_timeout_val_cmd_fixed_param,
WMITLV_TAG_STRUC_wmi_peer_set_rx_blocksize_cmd_fixed_param,
WMITLV_TAG_STRUC_WMI_PDEV_SET_WAKEUP_CONFIG_CMDID_fixed_param,
WMITLV_TAG_STRUC_wmi_tlv_buf_len_param,
} WMITLV_TAG_ID;
/*
@@ -1290,7 +1291,9 @@ WMITLV_CREATE_PARAM_STRUC(WMI_RMV_BCN_FILTER_CMDID);
WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_STRUC, wmi_roam_offload_tlv_param, offload_param, WMITLV_SIZE_VAR) \
WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_STRUC, wmi_roam_11i_offload_tlv_param, offload_11i_param, WMITLV_SIZE_VAR) \
WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_STRUC, wmi_roam_11r_offload_tlv_param, offload_11r_param, WMITLV_SIZE_VAR) \
WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_STRUC, wmi_roam_ese_offload_tlv_param, offload_ese_param, WMITLV_SIZE_VAR)
WMITLV_ELEM(id, op, buf, len, WMITLV_TAG_ARRAY_STRUC, wmi_roam_ese_offload_tlv_param, offload_ese_param, WMITLV_SIZE_VAR) \
WMITLV_ELEM(id, op, buf, len, WMITLV_TAG_ARRAY_STRUC, wmi_tlv_buf_len_param, assoc_ie_len_param, WMITLV_SIZE_VAR) \
WMITLV_ELEM(id, op, buf, len, WMITLV_TAG_ARRAY_BYTE, A_UINT8, assoc_ie_buf, WMITLV_SIZE_VAR)
WMITLV_CREATE_PARAM_STRUC(WMI_ROAM_SCAN_MODE);

Vedi File

@@ -539,7 +539,7 @@ typedef enum {
/** configure thresholds for MAWC */
WMI_ROAM_CONFIGURE_MAWC_CMDID,
/** configure MultiBand Operation(refer WFA MBO spec) parameter */
WMI_ROAM_SET_MBO_PARAM_CMDID,
WMI_ROAM_SET_MBO_PARAM_CMDID, /* DEPRECATED */
/** offload scan specific commands */
/** set offload scan AP profile */
@@ -2489,6 +2489,24 @@ typedef struct {
A_UINT32 ie_data[1];
} wmi_ie_data;
/**
* TLV used for length/buffer
*/
typedef struct {
/**
* TLV tag and len; tag equals
* WMITLV_TAG_STRUC_wmi_tlv_buf_len_param
*/
A_UINT32 tlv_header;
A_UINT32 buf_len; /** Length of buf */
/**
* Following this structure is the TLV byte stream of buf
* of length buf_len:
* A_UINT8 buf[];
*
*/
} wmi_tlv_buf_len_param;
typedef struct {
/** Len of the SSID */
A_UINT32 ssid_len;
@@ -14234,6 +14252,15 @@ typedef struct {
A_UINT32 qtimer_high;
} wmi_vdev_tsf_report_event_fixed_param;
/**
* ie_id values:
* 0 to 255 are used for individual IEEE802.11 Information Element types
*/
#define WMI_SET_VDEV_IE_ID_SCAN_SET_DEFAULT_IE 256
/* source values: */
#define WMI_SET_VDEV_IE_SOURCE_HOST 0x0
typedef struct {
/** TLV tag and len; tag equals
* WMITLV_TAG_STRUC_wmi_vdev_set_ie_cmd_fixed_param */
@@ -14244,6 +14271,8 @@ typedef struct {
A_UINT32 ie_id;
/* ie_len corresponds to num of bytes in ie_data[] */
A_UINT32 ie_len;
/** source of this command */
A_UINT32 ie_source; /* see WMI_SET_VDEV_IE_SOURCE_ defs */
/*
* Following this structure is the TLV byte stream of ie data of length
* buf_len:
@@ -14681,7 +14710,7 @@ typedef struct {
* 1 - Allow to connect to MBO AP only
* Bit 1-31 : reserved.
*/
#define WMI_ROAM_MBO_FLAG_MBO_ONLY_MODE (1<<0)
#define WMI_ROAM_MBO_FLAG_MBO_ONLY_MODE (1<<0) /* DEPRECATED */
typedef struct {
/*
@@ -14695,7 +14724,7 @@ typedef struct {
A_UINT32 enable;
/** MBO flags, refer to definition of MBO flags*/
A_UINT32 flags;
} wmi_roam_set_mbo_fixed_param;
} wmi_roam_set_mbo_fixed_param; /* DEPRECATED */
typedef struct {
/*

Vedi File

@@ -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_ 274
#define __WMI_REVISION_ 275
/** The Version Namespace should not be normally changed. Only
* host and firmware of the same WMI namespace will work