From 6828d58ce9946db2f43ed6bffeefa2b5858308d9 Mon Sep 17 00:00:00 2001 From: Frank Liu Date: Tue, 11 Apr 2017 22:37:03 +0800 Subject: [PATCH 1/8] qcacmn: TDLS component: south interface Add lmac_if layer changes for TDLS Change-Id: Ic842857ce7ebc83d2a22a8a8e23c60df1c3dbfc8 CRs-Fixed: 2011330 --- inc/target_if_tdls.h | 116 ++++++++++++++++++++++++++++ src/target_if_tdls.c | 176 +++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 292 insertions(+) create mode 100644 inc/target_if_tdls.h create mode 100644 src/target_if_tdls.c diff --git a/inc/target_if_tdls.h b/inc/target_if_tdls.h new file mode 100644 index 000000000000..7fe21cdf0c4e --- /dev/null +++ b/inc/target_if_tdls.h @@ -0,0 +1,116 @@ +/* + * Copyright (c) 2017 The Linux Foundation. All rights reserved. + * + * Permission to use, copy, modify, and/or distribute this software for + * any purpose with or without fee is hereby granted, provided that the + * above copyright notice and this permission notice appear in all + * copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL + * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE + * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL + * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR + * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER + * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR + * PERFORMANCE OF THIS SOFTWARE. + */ + +/** + * DOC: offload lmac interface APIs for tdls + * + */ + +#ifndef __TARGET_IF_TDLS_H__ +#define __TARGET_IF_TDLS_H__ + +struct tdls_info; +struct wlan_objmgr_psoc; +struct tdls_peer_update_state; +struct tdls_channel_switch_params; +struct sta_uapsd_trig_params; + +/** + * target_if_tdls_update_fw_state() - lmac handler to update tdls fw state + * @psoc: psoc object + * @param: tdls state parameter + * + * Return: QDF_STATUS + */ +QDF_STATUS +target_if_tdls_update_fw_state(struct wlan_objmgr_psoc *psoc, + struct tdls_info *param); + +/** + * target_if_tdls_update_peer_state() - lmac handler to update tdls peer state + * @psoc: psoc object + * @peer_params: tdls peer state params + * + * Return: QDF_STATUS + */ +QDF_STATUS +target_if_tdls_update_peer_state(struct wlan_objmgr_psoc *psoc, + struct tdls_peer_update_state *peer_params); + +/** + * target_if_tdls_set_offchan_mode() - lmac handler to set tdls off channel mode + * @psoc: psoc object + * @params: tdls channel swithc params + * + * Return: QDF_STATUS + */ +QDF_STATUS +target_if_tdls_set_offchan_mode(struct wlan_objmgr_psoc *psoc, + struct tdls_channel_switch_params *params); + +/** + * target_if_tdls_set_uapsd() - lmac handler to set uapsd auto trigger cmd + * @psoc: psoc object + * @params: upasd parameters + * + * This function sets the trigger + * uapsd params such as service interval, delay interval + * and suspend interval which will be used by the firmware + * to send trigger frames periodically when there is no + * traffic on the transmit side. + * + * Return: QDF_STATUS + */ +QDF_STATUS +target_if_tdls_set_uapsd(struct wlan_objmgr_psoc *psoc, + struct sta_uapsd_trig_params *params); + +/** + * target_if_tdls_register_event_handler() - lmac handler to register tdls event + * handler + * @psoc : psoc object + * @arg: argument passed to lmac + * + * Return: QDF_STATUS + */ +QDF_STATUS +target_if_tdls_register_event_handler(struct wlan_objmgr_psoc *psoc, + void *arg); + +/** + * target_if_tdls_unregister_event_handler() - lmac handler to unregister tdls + * event handler + * @psoc : psoc object + * @arg: argument passed to lmac + * + * Return: QDF_STATUS + */ +QDF_STATUS +target_if_tdls_unregister_event_handler(struct wlan_objmgr_psoc *psoc, + void *arg); + +/** + * target_if_tdls_register_tx_ops() - lmac handler to register tdls tx ops + * callback functions + * @tx_ops: wlan_lmac_if_tx_ops object + * + * Return: QDF_STATUS + */ +QDF_STATUS +target_if_tdls_register_tx_ops(struct wlan_lmac_if_tx_ops *tx_ops); +#endif diff --git a/src/target_if_tdls.c b/src/target_if_tdls.c new file mode 100644 index 000000000000..9f304f2bf2b8 --- /dev/null +++ b/src/target_if_tdls.c @@ -0,0 +1,176 @@ +/* + * Copyright (c) 2017 The Linux Foundation. All rights reserved. + * + * Permission to use, copy, modify, and/or distribute this software for + * any purpose with or without fee is hereby granted, provided that the + * above copyright notice and this permission notice appear in all + * copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL + * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE + * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL + * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR + * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER + * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR + * PERFORMANCE OF THIS SOFTWARE. + */ + +/** + * DOC: offload lmac interface APIs for tdls + * + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +static inline struct wlan_lmac_if_tdls_rx_ops * +target_if_tdls_get_rx_ops(struct wlan_objmgr_psoc *psoc) +{ + return &psoc->soc_cb.rx_ops.tdls_rx_ops; +} + +static int +target_if_tdls_event_handler(ol_scn_t scn, uint8_t *data, uint32_t datalen) +{ + struct wlan_objmgr_psoc *psoc; + struct wmi_unified *wmi_handle; + struct wlan_lmac_if_tdls_rx_ops *tdls_rx_ops; + struct tdls_event_info info; + QDF_STATUS status; + + if (!scn || !data) { + target_if_err("scn: 0x%p, data: 0x%p", scn, data); + return -EINVAL; + } + psoc = target_if_get_psoc_from_scn_hdl(scn); + if (!psoc) { + target_if_err("null psoc"); + return -EINVAL; + } + wmi_handle = GET_WMI_HDL_FROM_PSOC(psoc); + + if (wmi_extract_vdev_tdls_ev_param(wmi_handle, data, &info)) { + target_if_err("Failed to extract wmi tdls event"); + return -EINVAL; + } + + tdls_rx_ops = target_if_tdls_get_rx_ops(psoc); + if (tdls_rx_ops && tdls_rx_ops->tdls_ev_handler) { + status = tdls_rx_ops->tdls_ev_handler(psoc, &info); + if (QDF_IS_STATUS_ERROR(status)) { + target_if_err("fail to handle tdls event"); + return -EINVAL; + } + } + + return 0; +} + +QDF_STATUS +target_if_tdls_update_fw_state(struct wlan_objmgr_psoc *psoc, + struct tdls_info *param) +{ + QDF_STATUS status; + uint8_t tdls_state; + + if (TDLS_SUPPORT_EXP_TRIG_ONLY == param->tdls_state) + tdls_state = WMI_TDLS_ENABLE_PASSIVE; + else if (TDLS_SUPPORT_IMP_MODE == param->tdls_state || + TDLS_SUPPORT_EXT_CONTROL == param->tdls_state) + tdls_state = WMI_TDLS_ENABLE_CONNECTION_TRACKER_IN_HOST; + else + tdls_state = WMI_TDLS_DISABLE; + + status = wmi_unified_update_fw_tdls_state_cmd(psoc->tgt_if_handle, + param, tdls_state); + + target_if_debug("vdev_id %d", param->vdev_id); + return status; +} + +QDF_STATUS +target_if_tdls_update_peer_state(struct wlan_objmgr_psoc *psoc, + struct tdls_peer_update_state *peer_params) +{ + return QDF_STATUS_SUCCESS; +} + +QDF_STATUS +target_if_tdls_set_offchan_mode(struct wlan_objmgr_psoc *psoc, + struct tdls_channel_switch_params *params) +{ + QDF_STATUS status; + + status = wmi_unified_set_tdls_offchan_mode_cmd(psoc->tgt_if_handle, + params); + + return status; +} + +QDF_STATUS +target_if_tdls_set_uapsd(struct wlan_objmgr_psoc *psoc, + struct sta_uapsd_trig_params *params) +{ + QDF_STATUS ret; + + if (!WMI_SERVICE_IS_ENABLED(psoc->service_param.service_bitmap, + WMI_STA_UAPSD_BASIC_AUTO_TRIG) || + !WMI_SERVICE_IS_ENABLED(psoc->service_param.service_bitmap, + WMI_STA_UAPSD_VAR_AUTO_TRIG)) { + target_if_debug("Trigger uapsd is not supported vdev id %d", + params->vdevid); + return QDF_STATUS_SUCCESS; + } + ret = wmi_unified_set_sta_uapsd_auto_trig_cmd(psoc->tgt_if_handle, + params); + + if (QDF_IS_STATUS_ERROR(ret)) + target_if_err("Failed to send set uapsd param ret = %d", ret); + + return ret; +} + +QDF_STATUS +target_if_tdls_register_event_handler(struct wlan_objmgr_psoc *psoc, + void *arg) +{ + return wmi_unified_register_event(psoc->tgt_if_handle, + wmi_tdls_peer_event_id, + target_if_tdls_event_handler); +} + +QDF_STATUS +target_if_tdls_unregister_event_handler(struct wlan_objmgr_psoc *psoc, + void *arg) +{ + return wmi_unified_unregister_event(psoc->tgt_if_handle, + wmi_tdls_peer_event_id); +} + +QDF_STATUS +target_if_tdls_register_tx_ops(struct wlan_lmac_if_tx_ops *tx_ops) +{ + struct wlan_lmac_if_tdls_tx_ops *tdls_txops; + + tdls_txops = &tx_ops->tdls_tx_ops; + + tdls_txops->update_fw_state = target_if_tdls_update_fw_state; + tdls_txops->update_peer_state = target_if_tdls_update_peer_state; + tdls_txops->set_offchan_mode = target_if_tdls_set_offchan_mode; + tdls_txops->tdls_reg_ev_handler = target_if_tdls_register_event_handler; + tdls_txops->tdls_unreg_ev_handler = + target_if_tdls_unregister_event_handler; + tdls_txops->tdls_set_uapsd = target_if_tdls_set_uapsd; + + return QDF_STATUS_SUCCESS; +} From 97d14e4122677fa0f69fb029d0f7e53ea3d5ba5b Mon Sep 17 00:00:00 2001 From: Vivek Date: Sun, 4 Jun 2017 23:12:00 +0530 Subject: [PATCH 2/8] qcacmn: Add target information details to target_iflayer Add a new target_psoc_info structure in the target if layer with the following members wmi_handle target_type target_version target_revision Also update the psoc data member tgt_if_handle to point to target_psoc_info instead of pointing to WMI handle directly. Updated all calls to psoc_get_tgt_if_handle to target_if_get_wmi_handle which inturn calls psoc_get_tgt_if_handle and getting the tgt_if_handle returns the WMI handle CRs-Fixed: 2048277 Change-Id: Icb02d5f3c09f7f9bb7eff4d814ef3ce90ddb84bd --- src/target_if_tdls.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/target_if_tdls.c b/src/target_if_tdls.c index 9f304f2bf2b8..af4255be5d71 100644 --- a/src/target_if_tdls.c +++ b/src/target_if_tdls.c @@ -91,7 +91,7 @@ target_if_tdls_update_fw_state(struct wlan_objmgr_psoc *psoc, else tdls_state = WMI_TDLS_DISABLE; - status = wmi_unified_update_fw_tdls_state_cmd(psoc->tgt_if_handle, + status = wmi_unified_update_fw_tdls_state_cmd(GET_WMI_HDL_FROM_PSOC(psoc), param, tdls_state); target_if_debug("vdev_id %d", param->vdev_id); @@ -111,7 +111,7 @@ target_if_tdls_set_offchan_mode(struct wlan_objmgr_psoc *psoc, { QDF_STATUS status; - status = wmi_unified_set_tdls_offchan_mode_cmd(psoc->tgt_if_handle, + status = wmi_unified_set_tdls_offchan_mode_cmd(GET_WMI_HDL_FROM_PSOC(psoc), params); return status; @@ -131,7 +131,7 @@ target_if_tdls_set_uapsd(struct wlan_objmgr_psoc *psoc, params->vdevid); return QDF_STATUS_SUCCESS; } - ret = wmi_unified_set_sta_uapsd_auto_trig_cmd(psoc->tgt_if_handle, + ret = wmi_unified_set_sta_uapsd_auto_trig_cmd(GET_WMI_HDL_FROM_PSOC(psoc), params); if (QDF_IS_STATUS_ERROR(ret)) @@ -144,7 +144,7 @@ QDF_STATUS target_if_tdls_register_event_handler(struct wlan_objmgr_psoc *psoc, void *arg) { - return wmi_unified_register_event(psoc->tgt_if_handle, + return wmi_unified_register_event(GET_WMI_HDL_FROM_PSOC(psoc), wmi_tdls_peer_event_id, target_if_tdls_event_handler); } @@ -153,7 +153,7 @@ QDF_STATUS target_if_tdls_unregister_event_handler(struct wlan_objmgr_psoc *psoc, void *arg) { - return wmi_unified_unregister_event(psoc->tgt_if_handle, + return wmi_unified_unregister_event(GET_WMI_HDL_FROM_PSOC(psoc), wmi_tdls_peer_event_id); } From 33e2307f4221061a643ee8ce7589beafcbc9ca16 Mon Sep 17 00:00:00 2001 From: Jeff Johnson Date: Mon, 18 Sep 2017 10:09:05 -0700 Subject: [PATCH 3/8] qcacmn: target_if: Replace instances of unadorned %p Replace instances of unadorned %p in target_if. Change-Id: I1c8a1b98be2d12fcf8e1fadf4a889268dfe37058 CRs-Fixed: 2111274 --- src/target_if_tdls.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/target_if_tdls.c b/src/target_if_tdls.c index af4255be5d71..cff486f375ad 100644 --- a/src/target_if_tdls.c +++ b/src/target_if_tdls.c @@ -49,7 +49,7 @@ target_if_tdls_event_handler(ol_scn_t scn, uint8_t *data, uint32_t datalen) QDF_STATUS status; if (!scn || !data) { - target_if_err("scn: 0x%p, data: 0x%p", scn, data); + target_if_err("scn: 0x%pK, data: 0x%pK", scn, data); return -EINVAL; } psoc = target_if_get_psoc_from_scn_hdl(scn); From e52f36ef361bb87d2c15861209f915d6ef419c1f Mon Sep 17 00:00:00 2001 From: Sourav Mohapatra Date: Sun, 3 Dec 2017 11:44:44 +0530 Subject: [PATCH 4/8] qcacmn: Converge on wmi service/ext service is enable Converge on wmi service/ext service is enable Change-Id: Ib246befa72cce927bee157394cd22c7d1562d341 CRs-Fixed: 2152751 --- src/target_if_tdls.c | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/src/target_if_tdls.c b/src/target_if_tdls.c index cff486f375ad..e0a0ef23f916 100644 --- a/src/target_if_tdls.c +++ b/src/target_if_tdls.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2017 The Linux Foundation. All rights reserved. + * Copyright (c) 2017-2018 The Linux Foundation. All rights reserved. * * Permission to use, copy, modify, and/or distribute this software for * any purpose with or without fee is hereby granted, provided that the @@ -122,11 +122,12 @@ target_if_tdls_set_uapsd(struct wlan_objmgr_psoc *psoc, struct sta_uapsd_trig_params *params) { QDF_STATUS ret; + wmi_unified_t wmi_handle = GET_WMI_HDL_FROM_PSOC(psoc); - if (!WMI_SERVICE_IS_ENABLED(psoc->service_param.service_bitmap, - WMI_STA_UAPSD_BASIC_AUTO_TRIG) || - !WMI_SERVICE_IS_ENABLED(psoc->service_param.service_bitmap, - WMI_STA_UAPSD_VAR_AUTO_TRIG)) { + if (!wmi_service_enabled(wmi_handle, + wmi_sta_uapsd_basic_auto_trig) || + !wmi_service_enabled(wmi_handle, + wmi_sta_uapsd_var_auto_trig)) { target_if_debug("Trigger uapsd is not supported vdev id %d", params->vdevid); return QDF_STATUS_SUCCESS; From b6322f435410553bd1e4644032465b8114fe0e29 Mon Sep 17 00:00:00 2001 From: Akshay Kosigi Date: Tue, 6 Feb 2018 16:02:25 +0530 Subject: [PATCH 5/8] qcacmn: Replace void pointers with appropriate/common structure types Void pointer usage may lead to memory corruption due to wrong pointer is typecasted. Hence define structure for all, and modules internally typecasting based on their type Change-Id: I6271ed8aa3f94254fd85f41962f23ea36895154e CRs-Fixed: 2182452 --- src/target_if_tdls.c | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/src/target_if_tdls.c b/src/target_if_tdls.c index e0a0ef23f916..bbb3c32cf096 100644 --- a/src/target_if_tdls.c +++ b/src/target_if_tdls.c @@ -57,7 +57,7 @@ target_if_tdls_event_handler(ol_scn_t scn, uint8_t *data, uint32_t datalen) target_if_err("null psoc"); return -EINVAL; } - wmi_handle = GET_WMI_HDL_FROM_PSOC(psoc); + wmi_handle = get_wmi_unified_hdl_from_psoc(psoc); if (wmi_extract_vdev_tdls_ev_param(wmi_handle, data, &info)) { target_if_err("Failed to extract wmi tdls event"); @@ -122,7 +122,7 @@ target_if_tdls_set_uapsd(struct wlan_objmgr_psoc *psoc, struct sta_uapsd_trig_params *params) { QDF_STATUS ret; - wmi_unified_t wmi_handle = GET_WMI_HDL_FROM_PSOC(psoc); + wmi_unified_t wmi_handle = get_wmi_unified_hdl_from_psoc(psoc); if (!wmi_service_enabled(wmi_handle, wmi_sta_uapsd_basic_auto_trig) || @@ -145,17 +145,19 @@ QDF_STATUS target_if_tdls_register_event_handler(struct wlan_objmgr_psoc *psoc, void *arg) { - return wmi_unified_register_event(GET_WMI_HDL_FROM_PSOC(psoc), - wmi_tdls_peer_event_id, - target_if_tdls_event_handler); + return wmi_unified_register_event( + get_wmi_unified_hdl_from_psoc(psoc), + wmi_tdls_peer_event_id, + target_if_tdls_event_handler); } QDF_STATUS target_if_tdls_unregister_event_handler(struct wlan_objmgr_psoc *psoc, void *arg) { - return wmi_unified_unregister_event(GET_WMI_HDL_FROM_PSOC(psoc), - wmi_tdls_peer_event_id); + return wmi_unified_unregister_event( + get_wmi_unified_hdl_from_psoc(psoc), + wmi_tdls_peer_event_id); } QDF_STATUS From 4d01f9bf6a6c2071a37f0a2c900466b3f336d06b Mon Sep 17 00:00:00 2001 From: Tushnim Bhattacharyya Date: Thu, 30 Aug 2018 13:26:21 -0700 Subject: [PATCH 6/8] qcacmn: Fix NULL pointer dereference in tdls In target_if_tdls_update_fw_state, target_if_tdls_set_offchan_mode, & target_if_tdls_set_uapsd wmi_handle is derived & dereferenced with out a NULL check. Add a NULL check for wmi_handle before it is dereferenced. Change-Id: If741f69773a712cebcd1be889ca09d01eee97fae CRs-Fixed: 2305520 --- src/target_if_tdls.c | 26 ++++++++++++++++++++++---- 1 file changed, 22 insertions(+), 4 deletions(-) diff --git a/src/target_if_tdls.c b/src/target_if_tdls.c index bbb3c32cf096..f6b248e93d53 100644 --- a/src/target_if_tdls.c +++ b/src/target_if_tdls.c @@ -82,6 +82,13 @@ target_if_tdls_update_fw_state(struct wlan_objmgr_psoc *psoc, { QDF_STATUS status; uint8_t tdls_state; + struct wmi_unified *wmi_handle; + + wmi_handle = get_wmi_unified_hdl_from_psoc(psoc); + if (!wmi_handle) { + target_if_err("Invalid WMI handle"); + return QDF_STATUS_E_FAILURE; + } if (TDLS_SUPPORT_EXP_TRIG_ONLY == param->tdls_state) tdls_state = WMI_TDLS_ENABLE_PASSIVE; @@ -91,7 +98,7 @@ target_if_tdls_update_fw_state(struct wlan_objmgr_psoc *psoc, else tdls_state = WMI_TDLS_DISABLE; - status = wmi_unified_update_fw_tdls_state_cmd(GET_WMI_HDL_FROM_PSOC(psoc), + status = wmi_unified_update_fw_tdls_state_cmd(wmi_handle, param, tdls_state); target_if_debug("vdev_id %d", param->vdev_id); @@ -110,8 +117,14 @@ target_if_tdls_set_offchan_mode(struct wlan_objmgr_psoc *psoc, struct tdls_channel_switch_params *params) { QDF_STATUS status; + struct wmi_unified *wmi_handle; - status = wmi_unified_set_tdls_offchan_mode_cmd(GET_WMI_HDL_FROM_PSOC(psoc), + wmi_handle = get_wmi_unified_hdl_from_psoc(psoc); + if (!wmi_handle) { + target_if_err("Invalid WMI handle"); + return QDF_STATUS_E_FAILURE; + } + status = wmi_unified_set_tdls_offchan_mode_cmd(wmi_handle, params); return status; @@ -122,8 +135,13 @@ target_if_tdls_set_uapsd(struct wlan_objmgr_psoc *psoc, struct sta_uapsd_trig_params *params) { QDF_STATUS ret; - wmi_unified_t wmi_handle = get_wmi_unified_hdl_from_psoc(psoc); + struct wmi_unified *wmi_handle; + wmi_handle = get_wmi_unified_hdl_from_psoc(psoc); + if (!wmi_handle) { + target_if_err("Invalid WMI handle"); + return QDF_STATUS_E_FAILURE; + } if (!wmi_service_enabled(wmi_handle, wmi_sta_uapsd_basic_auto_trig) || !wmi_service_enabled(wmi_handle, @@ -132,7 +150,7 @@ target_if_tdls_set_uapsd(struct wlan_objmgr_psoc *psoc, params->vdevid); return QDF_STATUS_SUCCESS; } - ret = wmi_unified_set_sta_uapsd_auto_trig_cmd(GET_WMI_HDL_FROM_PSOC(psoc), + ret = wmi_unified_set_sta_uapsd_auto_trig_cmd(wmi_handle, params); if (QDF_IS_STATUS_ERROR(ret)) From d525947221764566890451afd3402ec8f817eba1 Mon Sep 17 00:00:00 2001 From: Frank Liu Date: Wed, 19 Sep 2018 16:23:57 +0800 Subject: [PATCH 7/8] qcacmn: Fix KW issue in tdls Potential NULL pointer dereferences of wmi_handle are found in these functions: target_if_tdls_event_handler() target_if_tdls_register_event_handler() target_if_tdls_unregister_event_handler() Do wmi_handle NULL check in the above functions. Change-Id: I7cb4b574750d6bc6538862aa24a0cf49831b7c25 CRs-Fixed: 2317029 --- src/target_if_tdls.c | 31 ++++++++++++++++++++++++------- 1 file changed, 24 insertions(+), 7 deletions(-) diff --git a/src/target_if_tdls.c b/src/target_if_tdls.c index f6b248e93d53..6adb2622319e 100644 --- a/src/target_if_tdls.c +++ b/src/target_if_tdls.c @@ -59,6 +59,11 @@ target_if_tdls_event_handler(ol_scn_t scn, uint8_t *data, uint32_t datalen) } wmi_handle = get_wmi_unified_hdl_from_psoc(psoc); + if (!wmi_handle) { + target_if_err("null wmi_handle"); + return -EINVAL; + } + if (wmi_extract_vdev_tdls_ev_param(wmi_handle, data, &info)) { target_if_err("Failed to extract wmi tdls event"); return -EINVAL; @@ -163,19 +168,31 @@ QDF_STATUS target_if_tdls_register_event_handler(struct wlan_objmgr_psoc *psoc, void *arg) { - return wmi_unified_register_event( - get_wmi_unified_hdl_from_psoc(psoc), - wmi_tdls_peer_event_id, - target_if_tdls_event_handler); + struct wmi_unified *wmi_handle; + + wmi_handle = get_wmi_unified_hdl_from_psoc(psoc); + if (!wmi_handle) { + target_if_err("null wmi_handle"); + return QDF_STATUS_E_INVAL; + } + return wmi_unified_register_event(wmi_handle, + wmi_tdls_peer_event_id, + target_if_tdls_event_handler); } QDF_STATUS target_if_tdls_unregister_event_handler(struct wlan_objmgr_psoc *psoc, void *arg) { - return wmi_unified_unregister_event( - get_wmi_unified_hdl_from_psoc(psoc), - wmi_tdls_peer_event_id); + struct wmi_unified *wmi_handle; + + wmi_handle = get_wmi_unified_hdl_from_psoc(psoc); + if (!wmi_handle) { + target_if_err("null wmi_handle"); + return QDF_STATUS_E_INVAL; + } + return wmi_unified_unregister_event(wmi_handle, + wmi_tdls_peer_event_id); } QDF_STATUS From d2bb8757a6df0f030414c0bab33cb90a58c8e089 Mon Sep 17 00:00:00 2001 From: Linux Build Service Account Date: Tue, 4 Dec 2018 15:49:52 +0530 Subject: [PATCH 8/8] Move target_if/tdls to components/target_if/tdls Change-Id: Ia72f8dddc21df49bab8ba63be38ce080d858c603 --- {inc => components/target_if/tdls/inc}/target_if_tdls.h | 0 {src => components/target_if/tdls/src}/target_if_tdls.c | 0 2 files changed, 0 insertions(+), 0 deletions(-) rename {inc => components/target_if/tdls/inc}/target_if_tdls.h (100%) rename {src => components/target_if/tdls/src}/target_if_tdls.c (100%) diff --git a/inc/target_if_tdls.h b/components/target_if/tdls/inc/target_if_tdls.h similarity index 100% rename from inc/target_if_tdls.h rename to components/target_if/tdls/inc/target_if_tdls.h diff --git a/src/target_if_tdls.c b/components/target_if/tdls/src/target_if_tdls.c similarity index 100% rename from src/target_if_tdls.c rename to components/target_if/tdls/src/target_if_tdls.c