qcacld-3.0: Add diag event for TDLS teardown

qcacld-2.0 to qcacld-3.0 propagation

Add diag event for TDLS teardown. Event contains reason for
teardown and peer mac address.

Change-Id: Ib04deac6cf7d61fae1a7bb0d0fb8f4dc652b3217
CRs-Fixed: 934448
This commit is contained in:
Abhishek Singh
2016-04-27 12:21:24 +05:30
committed by Gerrit - the friendly Code Review server
parent eca12f2624
commit 4ef5fe00a4
5 changed files with 88 additions and 1 deletions

View File

@@ -160,6 +160,30 @@ typedef enum eTDLSLinkStatus {
eTDLS_LINK_TEARING,
} tTDLSLinkStatus;
/**
* enum tdls_teardown_reason - Reason for TDLS teardown
* @eTDLS_TEARDOWN_EXT_CTRL: Reason ext ctrl.
* @eTDLS_TEARDOWN_CONCURRENCY: Reason concurrency.
* @eTDLS_TEARDOWN_RSSI_THRESHOLD: Reason rssi threshold.
* @eTDLS_TEARDOWN_TXRX_THRESHOLD: Reason txrx threshold.
* @eTDLS_TEARDOWN_BTCOEX: Reason BTCOEX.
* @eTDLS_TEARDOWN_SCAN: Reason scan.
* @eTDLS_TEARDOWN_BSS_DISCONNECT: Reason bss disconnected.
* @eTDLS_TEARDOWN_ANTENNA_SWITCH: Disconnected due to antenna switch
*
* Reason to indicate in diag event of tdls teardown.
*/
enum tdls_teardown_reason {
eTDLS_TEARDOWN_EXT_CTRL,
eTDLS_TEARDOWN_CONCURRENCY,
eTDLS_TEARDOWN_RSSI_THRESHOLD,
eTDLS_TEARDOWN_TXRX_THRESHOLD,
eTDLS_TEARDOWN_BTCOEX,
eTDLS_TEARDOWN_SCAN,
eTDLS_TEARDOWN_BSS_DISCONNECT,
eTDLS_TEARDOWN_ANTENNA_SWITCH,
};
/**
* enum tTDLSLinkReason - tdls link reason
*
@@ -625,4 +649,13 @@ static inline void wlan_hdd_tdls_exit(hdd_adapter_t *adapter)
static inline void hdd_tdls_pre_init(hdd_context_t *hdd_ctx) { }
#endif /* End of FEATURE_WLAN_TDLS */
#ifdef FEATURE_WLAN_DIAG_SUPPORT
void hdd_send_wlan_tdls_teardown_event(uint32_t reason,
uint8_t *peer_mac);
#else
static inline
void hdd_send_wlan_tdls_teardown_event(uint32_t reason,
uint8_t *peer_mac) {}
#endif /* FEATURE_WLAN_DIAG_SUPPORT */
#endif /* __HDD_TDLS_H */

View File

@@ -3209,6 +3209,8 @@ hdd_roam_tdls_status_update_handler(hdd_adapter_t *pAdapter,
pRoamInfo->peerMac.bytes, true);
wlan_hdd_tdls_indicate_teardown(pAdapter, curr_peer,
pRoamInfo->reasonCode);
hdd_send_wlan_tdls_teardown_event(eTDLS_TEARDOWN_BSS_DISCONNECT,
curr_peer->peerMac);
status = QDF_STATUS_SUCCESS;
break;
}
@@ -3388,6 +3390,9 @@ hdd_roam_tdls_status_update_handler(hdd_adapter_t *pAdapter,
wlan_hdd_tdls_indicate_teardown
(pHddTdlsCtx->pAdapter, curr_peer,
reason);
hdd_send_wlan_tdls_teardown_event(
eTDLS_TEARDOWN_BSS_DISCONNECT,
curr_peer->peerMac);
} else {
hddLog(LOGE,
FL
@@ -3436,6 +3441,9 @@ hdd_roam_tdls_status_update_handler(hdd_adapter_t *pAdapter,
wlan_hdd_tdls_indicate_teardown
(pHddTdlsCtx->pAdapter, curr_peer,
reason);
hdd_send_wlan_tdls_teardown_event(
eTDLS_TEARDOWN_BSS_DISCONNECT,
curr_peer->peerMac);
} else {
hddLog(LOGE,
FL

View File

@@ -85,6 +85,31 @@ static void wlan_hdd_tdls_determine_channel_opclass(hdd_context_t *hddctx,
}
}
#ifdef FEATURE_WLAN_DIAG_SUPPORT
/**
* hdd_send_wlan_tdls_teardown_event()- send TDLS teardown event
* @reason: reason for tear down.
* @peer_mac: peer mac
*
* This Function sends TDLS teardown diag event
*
* Return: void.
*/
void hdd_send_wlan_tdls_teardown_event(uint32_t reason,
uint8_t *peer_mac)
{
WLAN_HOST_DIAG_EVENT_DEF(tdls_tear_down,
struct host_event_tdls_teardown);
qdf_mem_zero(&tdls_tear_down,
sizeof(tdls_tear_down));
tdls_tear_down.reason = reason;
qdf_mem_copy(tdls_tear_down.peer_mac, peer_mac, MAC_ADDR_LEN);
WLAN_HOST_DIAG_EVENT_REPORT(&tdls_tear_down,
EVENT_WLAN_TDLS_TEARDOWN);
}
#endif
/**
* wlan_hdd_tdls_hash_key() - calculate tdls hash key given mac address
* @mac: mac address
@@ -168,6 +193,8 @@ void wlan_hdd_tdls_disable_offchan_and_teardown_links(hdd_context_t *hddctx)
curr_peer->pHddTdlsCtx->pAdapter,
curr_peer,
eSIR_MAC_TDLS_TEARDOWN_UNSPEC_REASON);
hdd_send_wlan_tdls_teardown_event(eTDLS_TEARDOWN_CONCURRENCY,
curr_peer->peerMac);
}
}
@@ -2764,6 +2791,9 @@ int wlan_hdd_tdls_scan_callback(hdd_adapter_t *pAdapter, struct wiphy *wiphy,
(connectedPeerList[i]->pHddTdlsCtx->
pAdapter, connectedPeerList[i],
eSIR_MAC_TDLS_TEARDOWN_UNSPEC_REASON);
hdd_send_wlan_tdls_teardown_event(
eTDLS_TEARDOWN_SCAN,
connectedPeerList[i]->peerMac);
}
}
/* schedule scan */
@@ -4117,6 +4147,9 @@ int wlan_hdd_tdls_extctrl_deconfig_peer(hdd_adapter_t *pAdapter,
} else {
wlan_hdd_tdls_indicate_teardown(pAdapter, pTdlsPeer,
eSIR_MAC_TDLS_TEARDOWN_UNSPEC_REASON);
hdd_send_wlan_tdls_teardown_event(
eTDLS_TEARDOWN_EXT_CTRL,
pTdlsPeer->peerMac);
}
if (0 != wlan_hdd_tdls_set_force_peer(pAdapter, peer, false)) {
QDF_TRACE(QDF_MODULE_ID_HDD, QDF_TRACE_LEVEL_ERROR,

View File

@@ -299,6 +299,18 @@ struct host_event_wlan_log_complete {
uint32_t reserved;
};
/**
* struct host_event_tdls_teardown - tdls teardown diag event
* @reason: reason for tear down
* @peer_mac: peer mac
*
* This structure contains tdls teardown diag event info
*/
struct host_event_tdls_teardown {
uint32_t reason;
uint8_t peer_mac[QDF_MAC_ADDR_SIZE];
};
/*-------------------------------------------------------------------------
Function declarations and documenation
------------------------------------------------------------------------*/

View File

@@ -1,5 +1,5 @@
/*
* Copyright (c) 2014-2015 The Linux Foundation. All rights reserved.
* Copyright (c) 2014-2016 The Linux Foundation. All rights reserved.
*
* Previously licensed under the ISC license by Qualcomm Atheros, Inc.
*
@@ -54,6 +54,7 @@ typedef enum {
EVENT_WLAN_WAKE_LOCK = 0xAA2, /* 96 bytes payload */
EVENT_WLAN_BEACON_RECEIVED = 0xAA6, /* FW event: 2726 */
EVENT_WLAN_LOG_COMPLETE = 0xAA7, /* 16 bytes payload */
EVENT_WLAN_TDLS_TEARDOWN = 0xAB5,
EVENT_MAX_ID = 0x0FFF
} event_id_enum_type;