diff --git a/os_if/linux/p2p/src/wlan_cfg80211_p2p.c b/os_if/linux/p2p/src/wlan_cfg80211_p2p.c index 5f383e732e35..2cfe0f3bf346 100644 --- a/os_if/linux/p2p/src/wlan_cfg80211_p2p.c +++ b/os_if/linux/p2p/src/wlan_cfg80211_p2p.c @@ -168,6 +168,7 @@ fail: wlan_objmgr_vdev_release_ref(vdev, WLAN_P2P_ID); } +#ifdef FEATURE_P2P_LISTEN_OFFLOAD /** * wlan_p2p_lo_event_callback() - Callback for listen offload event * @user_data: pointer to soc object @@ -238,6 +239,18 @@ fail: wlan_objmgr_vdev_release_ref(vdev, WLAN_P2P_ID); } +static inline void wlan_p2p_init_lo_event(struct p2p_start_param *start_param, + struct wlan_objmgr_psoc *psoc) +{ + start_param->lo_event_cb = wlan_p2p_lo_event_callback; + start_param->lo_event_cb_data = psoc; +} +#else +static inline void wlan_p2p_init_lo_event(struct p2p_start_param *start_param, + struct wlan_objmgr_psoc *psoc) +{ +} +#endif /* FEATURE_P2P_LISTEN_OFFLOAD */ /** * wlan_p2p_event_callback() - Callback for P2P event * @user_data: pointer to soc object @@ -321,8 +334,7 @@ QDF_STATUS wlan_p2p_start(struct wlan_objmgr_psoc *psoc) start_param.event_cb_data = psoc; start_param.tx_cnf_cb = wlan_p2p_action_tx_cnf_callback; start_param.tx_cnf_cb_data = psoc; - start_param.lo_event_cb = wlan_p2p_lo_event_callback; - start_param.lo_event_cb_data = psoc; + wlan_p2p_init_lo_event(&start_param, psoc); return ucfg_p2p_psoc_start(psoc, &start_param); } diff --git a/qdf/inc/qdf_mem.h b/qdf/inc/qdf_mem.h index 9c8125704024..ec91397a4f73 100644 --- a/qdf/inc/qdf_mem.h +++ b/qdf/inc/qdf_mem.h @@ -109,6 +109,9 @@ void *qdf_mem_malloc_debug(size_t size, const char *file, uint32_t line, #define qdf_mem_malloc(size) \ qdf_mem_malloc_debug(size, __FILE__, __LINE__, QDF_RET_IP, 0) +#define qdf_mem_malloc_fl(size, func, line) \ + qdf_mem_malloc_debug(size, func, line, QDF_RET_IP, 0) + #define qdf_mem_malloc_atomic(size) \ qdf_mem_malloc_debug(size, __FILE__, __LINE__, QDF_RET_IP, GFP_ATOMIC) /** @@ -200,8 +203,42 @@ void qdf_mem_free_consistent_debug(qdf_device_t osdev, void *dev, qdf_mem_free_consistent_debug(osdev, dev, size, vaddr, paddr, memctx, \ __FILE__, __LINE__) #else -void *qdf_mem_malloc(qdf_size_t size); -void *qdf_mem_malloc_atomic(qdf_size_t size); + +/** + * qdf_mem_malloc() - allocation QDF memory + * @size: Number of bytes of memory to allocate. + * + * This function will dynamicallly allocate the specified number of bytes of + * memory. + * + * Return: + * Upon successful allocate, returns a non-NULL pointer to the allocated + * memory. If this function is unable to allocate the amount of memory + * specified (for any reason) it returns NULL. + */ +#define qdf_mem_malloc(size) \ + qdf_mem_malloc_fl(size, __func__, __LINE__) + +void *qdf_mem_malloc_fl(qdf_size_t size, const char *func, uint32_t line); + +/** + * qdf_mem_malloc_atomic() - allocation QDF memory atomically + * @size: Number of bytes of memory to allocate. + * + * This function will dynamicallly allocate the specified number of bytes of + * memory. + * + * Return: + * Upon successful allocate, returns a non-NULL pointer to the allocated + * memory. If this function is unable to allocate the amount of memory + * specified (for any reason) it returns NULL. + */ +#define qdf_mem_malloc_atomic(size) \ + qdf_mem_malloc_atomic_fl(size, __func__, __LINE__) + +void *qdf_mem_malloc_atomic_fl(qdf_size_t size, + const char *func, + uint32_t line); /** * qdf_mem_free() - free QDF memory diff --git a/qdf/linux/src/qdf_mem.c b/qdf/linux/src/qdf_mem.c index d42fbbaeaa91..453d1f45fa9c 100644 --- a/qdf/linux/src/qdf_mem.c +++ b/qdf/linux/src/qdf_mem.c @@ -1158,19 +1158,7 @@ static void qdf_mem_debug_init(void) {} static void qdf_mem_debug_exit(void) {} -/** - * qdf_mem_malloc() - allocation QDF memory - * @size: Number of bytes of memory to allocate. - * - * This function will dynamicallly allocate the specified number of bytes of - * memory. - * - * Return: - * Upon successful allocate, returns a non-NULL pointer to the allocated - * memory. If this function is unable to allocate the amount of memory - * specified (for any reason) it returns NULL. - */ -void *qdf_mem_malloc(size_t size) +void *qdf_mem_malloc_fl(size_t size, const char *func, uint32_t line) { void *ptr; @@ -1179,28 +1167,19 @@ void *qdf_mem_malloc(size_t size) return ptr; ptr = kzalloc(size, qdf_mem_malloc_flags()); - if (!ptr) + if (!ptr) { + qdf_nofl_warn("Failed to malloc %zuB @ %s:%d", + size, func, line); return NULL; + } qdf_mem_kmalloc_inc(ksize(ptr)); return ptr; } -qdf_export_symbol(qdf_mem_malloc); +qdf_export_symbol(qdf_mem_malloc_fl); -/** - * qdf_mem_malloc_atomic() - allocation QDF memory atomically - * @size: Number of bytes of memory to allocate. - * - * This function will dynamicallly allocate the specified number of bytes of - * memory. - * - * Return: - * Upon successful allocate, returns a non-NULL pointer to the allocated - * memory. If this function is unable to allocate the amount of memory - * specified (for any reason) it returns NULL. - */ -void *qdf_mem_malloc_atomic(size_t size) +void *qdf_mem_malloc_atomic_fl(size_t size, const char *func, uint32_t line) { void *ptr; @@ -1209,15 +1188,17 @@ void *qdf_mem_malloc_atomic(size_t size) return ptr; ptr = kzalloc(size, GFP_ATOMIC); - if (!ptr) + if (!ptr) { + qdf_nofl_warn("Failed to malloc %zuB @ %s:%d", + size, func, line); return NULL; + } qdf_mem_kmalloc_inc(ksize(ptr)); return ptr; } - -qdf_export_symbol(qdf_mem_malloc_atomic); +qdf_export_symbol(qdf_mem_malloc_atomic_fl); /** * qdf_mem_free() - free QDF memory diff --git a/target_if/dfs/src/target_if_dfs.c b/target_if/dfs/src/target_if_dfs.c index 13541614fcd6..41f7ee33dad7 100644 --- a/target_if/dfs/src/target_if_dfs.c +++ b/target_if/dfs/src/target_if_dfs.c @@ -119,6 +119,7 @@ static int target_if_radar_event_handler( struct wlan_objmgr_psoc *psoc; struct wlan_objmgr_pdev *pdev; struct wlan_lmac_if_dfs_rx_ops *dfs_rx_ops; + struct wmi_unified *wmi_handle; if (!scn || !data) { target_if_err("scn: %pK, data: %pK", scn, data); @@ -135,8 +136,15 @@ static int target_if_radar_event_handler( target_if_err("Invalid dfs_rx_ops: %pK", dfs_rx_ops); return -EINVAL; } + + wmi_handle = get_wmi_unified_hdl_from_psoc(psoc); + if (!wmi_handle) { + target_if_err("Invalid WMI context"); + return -EINVAL; + } + if (QDF_IS_STATUS_ERROR(wmi_extract_wlan_radar_event_info( - GET_WMI_HDL_FROM_PSOC(psoc), data, + wmi_handle, data, &wlan_radar_event, datalen))) { target_if_err("failed to extract wlan radar event"); return -EFAULT; diff --git a/target_if/dfs/src/target_if_dfs_full_offload.c b/target_if/dfs/src/target_if_dfs_full_offload.c index eba5c80dfdc3..654d59b4368c 100644 --- a/target_if/dfs/src/target_if_dfs_full_offload.c +++ b/target_if/dfs/src/target_if_dfs_full_offload.c @@ -46,6 +46,7 @@ static int target_if_dfs_cac_complete_event_handler( struct wlan_objmgr_pdev *pdev; int ret = 0; uint32_t vdev_id = 0; + struct wmi_unified *wmi_handle; if (!scn || !data) { target_if_err("scn: %pK, data: %pK", scn, data); @@ -64,8 +65,14 @@ static int target_if_dfs_cac_complete_event_handler( return -EINVAL; } - if (wmi_extract_dfs_cac_complete_event(GET_WMI_HDL_FROM_PSOC(psoc), - data, &vdev_id, datalen) != QDF_STATUS_SUCCESS) { + wmi_handle = get_wmi_unified_hdl_from_psoc(psoc); + if (!wmi_handle) { + target_if_err("Invalid WMI handle"); + return -EINVAL; + } + + if (wmi_extract_dfs_cac_complete_event(wmi_handle, data, &vdev_id, + datalen) != QDF_STATUS_SUCCESS) { target_if_err("failed to extract cac complete event"); return -EFAULT; } @@ -109,6 +116,7 @@ static int target_if_dfs_radar_detection_event_handler( struct wlan_objmgr_pdev *pdev = NULL; struct wlan_lmac_if_dfs_rx_ops *dfs_rx_ops; int ret = 0; + struct wmi_unified *wmi_handle; if (!scn || !data) { target_if_err("scn: %pK, data: %pK", scn, data); @@ -127,8 +135,15 @@ static int target_if_dfs_radar_detection_event_handler( return -EINVAL; } - if (wmi_extract_dfs_radar_detection_event(GET_WMI_HDL_FROM_PSOC(psoc), - data, &radar, datalen) != QDF_STATUS_SUCCESS) { + wmi_handle = get_wmi_unified_hdl_from_psoc(psoc); + if (!wmi_handle) { + target_if_err("Invalid WMI handle"); + return -EINVAL; + } + + if (wmi_extract_dfs_radar_detection_event(wmi_handle, data, &radar, + datalen) + != QDF_STATUS_SUCCESS) { target_if_err("failed to extract cac complete event"); return -EFAULT; } diff --git a/target_if/p2p/inc/target_if_p2p.h b/target_if/p2p/inc/target_if_p2p.h index dcb46b9519e9..1306e781554b 100644 --- a/target_if/p2p/inc/target_if_p2p.h +++ b/target_if/p2p/inc/target_if_p2p.h @@ -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 @@ -29,13 +29,7 @@ struct wlan_objmgr_psoc; struct p2p_ps_config; struct p2p_lo_start; -/** - * target_if_p2p_register_tx_ops() - Register P2P component TX OPS - * @tx_ops: lmac if transmit ops - * - * Return: None - */ -void target_if_p2p_register_tx_ops(struct wlan_lmac_if_tx_ops *tx_ops); +#ifdef FEATURE_P2P_LISTEN_OFFLOAD /** * target_if_p2p_register_lo_event_handler() - Register lo event handler @@ -49,18 +43,6 @@ void target_if_p2p_register_tx_ops(struct wlan_lmac_if_tx_ops *tx_ops); QDF_STATUS target_if_p2p_register_lo_event_handler( struct wlan_objmgr_psoc *psoc, void *arg); -/** - * target_if_p2p_register_noa_event_handler() - Register noa event handler - * @psoc: soc object - * @arg: additional argument - * - * Target interface API to register P2P noa event handler. - * - * Return: QDF_STATUS_SUCCESS - in case of success - */ -QDF_STATUS target_if_p2p_register_noa_event_handler( - struct wlan_objmgr_psoc *psoc, void *arg); - /** * target_if_p2p_unregister_lo_event_handler() - Unregister lo event handler * @psoc: soc object @@ -73,6 +55,51 @@ QDF_STATUS target_if_p2p_register_noa_event_handler( QDF_STATUS target_if_p2p_unregister_lo_event_handler( struct wlan_objmgr_psoc *psoc, void *arg); +/** + * target_if_p2p_lo_start() - Start listen offload + * @psoc: soc object + * @lo_start: lo start information + * + * Target interface API to start listen offload. + * + * Return: QDF_STATUS_SUCCESS - in case of success + */ +QDF_STATUS target_if_p2p_lo_start(struct wlan_objmgr_psoc *psoc, + struct p2p_lo_start *lo_start); + +/** + * target_if_p2p_lo_stop() - Stop listen offload + * @psoc: soc object + * @vdev_id: vdev id + * + * Target interface API to stop listen offload. + * + * Return: QDF_STATUS_SUCCESS - in case of success + */ +QDF_STATUS target_if_p2p_lo_stop(struct wlan_objmgr_psoc *psoc, + uint32_t vdev_id); +#endif + +/** + * target_if_p2p_register_tx_ops() - Register P2P component TX OPS + * @tx_ops: lmac if transmit ops + * + * Return: None + */ +void target_if_p2p_register_tx_ops(struct wlan_lmac_if_tx_ops *tx_ops); + +/** + * target_if_p2p_register_noa_event_handler() - Register noa event handler + * @psoc: soc object + * @arg: additional argument + * + * Target interface API to register P2P noa event handler. + * + * Return: QDF_STATUS_SUCCESS - in case of success + */ +QDF_STATUS target_if_p2p_register_noa_event_handler( + struct wlan_objmgr_psoc *psoc, void *arg); + /** * target_if_p2p_unregister_noa_event_handler() - Unregister noa event handler * @psoc: soc object @@ -95,31 +122,7 @@ QDF_STATUS target_if_p2p_unregister_noa_event_handler( * Return: QDF_STATUS_SUCCESS - in case of success */ QDF_STATUS target_if_p2p_set_ps(struct wlan_objmgr_psoc *psoc, - struct p2p_ps_config *ps_config); - -/** - * target_if_p2p_lo_start() - Start listen offload - * @psoc: soc object - * @lo_start: lo start information - * - * Target interface API to start listen offload. - * - * Return: QDF_STATUS_SUCCESS - in case of success - */ -QDF_STATUS target_if_p2p_lo_start(struct wlan_objmgr_psoc *psoc, - struct p2p_lo_start *lo_start); - -/** - * target_if_p2p_lo_stop() - Stop listen offload - * @psoc: soc object - * @vdev_id: vdev id - * - * Target interface API to stop listen offload. - * - * Return: QDF_STATUS_SUCCESS - in case of success - */ -QDF_STATUS target_if_p2p_lo_stop(struct wlan_objmgr_psoc *psoc, - uint32_t vdev_id); + struct p2p_ps_config *ps_config); /** * target_if_p2p_set_noa() - Disable / Enable NOA diff --git a/target_if/p2p/src/target_if_p2p.c b/target_if/p2p/src/target_if_p2p.c index 746b4f6cb81a..af30938c89f7 100644 --- a/target_if/p2p/src/target_if_p2p.c +++ b/target_if/p2p/src/target_if_p2p.c @@ -32,6 +32,18 @@ target_if_psoc_get_p2p_rx_ops(struct wlan_objmgr_psoc *psoc) return &(psoc->soc_cb.rx_ops.p2p); } +#ifdef FEATURE_P2P_LISTEN_OFFLOAD +static inline void +target_if_p2p_lo_register_tx_ops(struct wlan_lmac_if_p2p_tx_ops *p2p_tx_ops) +{ + p2p_tx_ops->lo_start = target_if_p2p_lo_start; + p2p_tx_ops->lo_stop = target_if_p2p_lo_stop; + p2p_tx_ops->reg_lo_ev_handler = + target_if_p2p_register_lo_event_handler; + p2p_tx_ops->unreg_lo_ev_handler = + target_if_p2p_unregister_lo_event_handler; +} + /** * target_p2p_lo_event_handler() - WMI callback for lo stop event * @scn: pointer to scn @@ -98,6 +110,90 @@ static int target_p2p_lo_event_handler(ol_scn_t scn, uint8_t *data, return qdf_status_to_os_return(status); } +QDF_STATUS target_if_p2p_register_lo_event_handler( + struct wlan_objmgr_psoc *psoc, void *arg) +{ + int status; + wmi_unified_t wmi_handle = lmac_get_wmi_unified_hdl(psoc); + + target_if_debug("psoc:%pK, arg:%pK", psoc, arg); + + if (!wmi_handle) { + target_if_err("Invalid wmi handle"); + return QDF_STATUS_E_INVAL; + } + + status = wmi_unified_register_event(wmi_handle, + wmi_p2p_lo_stop_event_id, + target_p2p_lo_event_handler); + + target_if_debug("wmi register lo event handle, status:%d", status); + + return status == 0 ? QDF_STATUS_SUCCESS : QDF_STATUS_E_FAILURE; +} + +QDF_STATUS target_if_p2p_unregister_lo_event_handler( + struct wlan_objmgr_psoc *psoc, void *arg) +{ + int status; + wmi_unified_t wmi_handle = lmac_get_wmi_unified_hdl(psoc); + + target_if_debug("psoc:%pK, arg:%pK", psoc, arg); + + if (!wmi_handle) { + target_if_err("Invalid wmi handle"); + return QDF_STATUS_E_INVAL; + } + + status = wmi_unified_unregister_event(wmi_handle, + wmi_p2p_lo_stop_event_id); + + target_if_debug("wmi unregister lo event handle, status:%d", status); + + return status == 0 ? QDF_STATUS_SUCCESS : QDF_STATUS_E_FAILURE; +} + +QDF_STATUS target_if_p2p_lo_start(struct wlan_objmgr_psoc *psoc, + struct p2p_lo_start *lo_start) +{ + wmi_unified_t wmi_handle = lmac_get_wmi_unified_hdl(psoc); + + if (!wmi_handle) { + target_if_err("Invalid wmi handle"); + return QDF_STATUS_E_INVAL; + } + + if (!lo_start) { + target_if_err("lo start parameters is null"); + return QDF_STATUS_E_INVAL; + } + target_if_debug("psoc:%pK, vdev_id:%d", psoc, lo_start->vdev_id); + + return wmi_unified_p2p_lo_start_cmd(wmi_handle, lo_start); +} + +QDF_STATUS target_if_p2p_lo_stop(struct wlan_objmgr_psoc *psoc, + uint32_t vdev_id) +{ + wmi_unified_t wmi_handle = lmac_get_wmi_unified_hdl(psoc); + + target_if_debug("psoc:%pK, vdev_id:%d", psoc, vdev_id); + + if (!wmi_handle) { + target_if_err("Invalid wmi handle"); + return QDF_STATUS_E_INVAL; + } + + return wmi_unified_p2p_lo_stop_cmd(wmi_handle, + (uint8_t)vdev_id); +} +#else +static inline void +target_if_p2p_lo_register_tx_ops(struct wlan_lmac_if_p2p_tx_ops *p2p_tx_ops) +{ +} +#endif /* FEATURE_P2P_LISTEN_OFFLOAD */ + /** * target_p2p_noa_event_handler() - WMI callback for noa event * @scn: pointer to scn @@ -164,29 +260,6 @@ static int target_p2p_noa_event_handler(ol_scn_t scn, uint8_t *data, return qdf_status_to_os_return(status); } -QDF_STATUS target_if_p2p_register_lo_event_handler( - struct wlan_objmgr_psoc *psoc, void *arg) -{ - int status; - wmi_unified_t wmi_handle = lmac_get_wmi_unified_hdl(psoc); - - target_if_debug("psoc:%pK, arg:%pK", psoc, arg); - - if (!wmi_handle) { - target_if_err("Invalid wmi handle"); - return QDF_STATUS_E_INVAL; - } - - status = wmi_unified_register_event(wmi_handle, - wmi_p2p_lo_stop_event_id, - target_p2p_lo_event_handler); - - target_if_debug("wmi register lo event handle, status:%d", - status); - - return status == 0 ? QDF_STATUS_SUCCESS : QDF_STATUS_E_FAILURE; -} - QDF_STATUS target_if_p2p_register_noa_event_handler( struct wlan_objmgr_psoc *psoc, void *arg) { @@ -210,28 +283,6 @@ QDF_STATUS target_if_p2p_register_noa_event_handler( return status == 0 ? QDF_STATUS_SUCCESS : QDF_STATUS_E_FAILURE; } -QDF_STATUS target_if_p2p_unregister_lo_event_handler( - struct wlan_objmgr_psoc *psoc, void *arg) -{ - int status; - wmi_unified_t wmi_handle = lmac_get_wmi_unified_hdl(psoc); - - target_if_debug("psoc:%pK, arg:%pK", psoc, arg); - - if (!wmi_handle) { - target_if_err("Invalid wmi handle"); - return QDF_STATUS_E_INVAL; - } - - status = wmi_unified_unregister_event(wmi_handle, - wmi_p2p_lo_stop_event_id); - - target_if_debug("wmi unregister lo event handle, status:%d", - status); - - return status == 0 ? QDF_STATUS_SUCCESS : QDF_STATUS_E_FAILURE; -} - QDF_STATUS target_if_p2p_unregister_noa_event_handler( struct wlan_objmgr_psoc *psoc, void *arg) { @@ -297,41 +348,6 @@ QDF_STATUS target_if_p2p_set_ps(struct wlan_objmgr_psoc *psoc, return status; } -QDF_STATUS target_if_p2p_lo_start(struct wlan_objmgr_psoc *psoc, - struct p2p_lo_start *lo_start) -{ - wmi_unified_t wmi_handle = lmac_get_wmi_unified_hdl(psoc); - - if (!wmi_handle) { - target_if_err("Invalid wmi handle"); - return QDF_STATUS_E_INVAL; - } - - if (!lo_start) { - target_if_err("lo start parameters is null"); - return QDF_STATUS_E_INVAL; - } - target_if_debug("psoc:%pK, vdev_id:%d", psoc, lo_start->vdev_id); - - return wmi_unified_p2p_lo_start_cmd(wmi_handle, lo_start); -} - -QDF_STATUS target_if_p2p_lo_stop(struct wlan_objmgr_psoc *psoc, - uint32_t vdev_id) -{ - wmi_unified_t wmi_handle = lmac_get_wmi_unified_hdl(psoc); - - target_if_debug("psoc:%pK, vdev_id:%d", psoc, vdev_id); - - if (!wmi_handle) { - target_if_err("Invalid wmi handle"); - return QDF_STATUS_E_INVAL; - } - - return wmi_unified_p2p_lo_stop_cmd(wmi_handle, - (uint8_t)vdev_id); -} - QDF_STATUS target_if_p2p_set_noa(struct wlan_objmgr_psoc *psoc, uint32_t vdev_id, bool disable_noa) { @@ -363,15 +379,11 @@ void target_if_p2p_register_tx_ops(struct wlan_lmac_if_tx_ops *tx_ops) p2p_tx_ops = &tx_ops->p2p; p2p_tx_ops->set_ps = target_if_p2p_set_ps; - p2p_tx_ops->lo_start = target_if_p2p_lo_start; - p2p_tx_ops->lo_stop = target_if_p2p_lo_stop; p2p_tx_ops->set_noa = target_if_p2p_set_noa; - p2p_tx_ops->reg_lo_ev_handler = - target_if_p2p_register_lo_event_handler; p2p_tx_ops->reg_noa_ev_handler = target_if_p2p_register_noa_event_handler; - p2p_tx_ops->unreg_lo_ev_handler = - target_if_p2p_unregister_lo_event_handler; p2p_tx_ops->unreg_noa_ev_handler = target_if_p2p_unregister_noa_event_handler; + /* register P2P listen offload callbacks */ + target_if_p2p_lo_register_tx_ops(p2p_tx_ops); } diff --git a/umac/global_umac_dispatcher/lmac_if/inc/wlan_lmac_if_def.h b/umac/global_umac_dispatcher/lmac_if/inc/wlan_lmac_if_def.h index c9b77deb08d9..ec3736232e05 100644 --- a/umac/global_umac_dispatcher/lmac_if/inc/wlan_lmac_if_def.h +++ b/umac/global_umac_dispatcher/lmac_if/inc/wlan_lmac_if_def.h @@ -213,18 +213,20 @@ struct p2p_lo_start; struct wlan_lmac_if_p2p_tx_ops { QDF_STATUS (*set_ps)(struct wlan_objmgr_psoc *psoc, struct p2p_ps_config *ps_config); +#ifdef FEATURE_P2P_LISTEN_OFFLOAD QDF_STATUS (*lo_start)(struct wlan_objmgr_psoc *psoc, struct p2p_lo_start *lo_start); QDF_STATUS (*lo_stop)(struct wlan_objmgr_psoc *psoc, uint32_t vdev_id); - QDF_STATUS (*set_noa)(struct wlan_objmgr_psoc *psoc, - uint32_t vdev_id, bool disable_noa); QDF_STATUS (*reg_lo_ev_handler)(struct wlan_objmgr_psoc *psoc, void *arg); - QDF_STATUS (*reg_noa_ev_handler)(struct wlan_objmgr_psoc *psoc, - void *arg); QDF_STATUS (*unreg_lo_ev_handler)(struct wlan_objmgr_psoc *psoc, void *arg); +#endif + QDF_STATUS (*set_noa)(struct wlan_objmgr_psoc *psoc, + uint32_t vdev_id, bool disable_noa); + QDF_STATUS (*reg_noa_ev_handler)(struct wlan_objmgr_psoc *psoc, + void *arg); QDF_STATUS (*unreg_noa_ev_handler)(struct wlan_objmgr_psoc *psoc, void *arg); }; @@ -828,8 +830,10 @@ struct p2p_lo_event; * @noa_ev_handler: function pointer to give noa event */ struct wlan_lmac_if_p2p_rx_ops { +#ifdef FEATURE_P2P_LISTEN_OFFLOAD QDF_STATUS (*lo_ev_handler)(struct wlan_objmgr_psoc *psoc, struct p2p_lo_event *event_info); +#endif QDF_STATUS (*noa_ev_handler)(struct wlan_objmgr_psoc *psoc, struct p2p_noa_info *event_info); }; diff --git a/umac/global_umac_dispatcher/lmac_if/src/wlan_lmac_if.c b/umac/global_umac_dispatcher/lmac_if/src/wlan_lmac_if.c index a6eb0f8fcfcf..1f4dae90eac9 100644 --- a/umac/global_umac_dispatcher/lmac_if/src/wlan_lmac_if.c +++ b/umac/global_umac_dispatcher/lmac_if/src/wlan_lmac_if.c @@ -292,6 +292,7 @@ static void wlan_lmac_if_umac_reg_rx_ops_register( } #ifdef CONVERGED_P2P_ENABLE +#ifdef FEATURE_P2P_LISTEN_OFFLOAD static void wlan_lmac_if_umac_rx_ops_register_p2p( struct wlan_lmac_if_rx_ops *rx_ops) { @@ -299,6 +300,13 @@ static void wlan_lmac_if_umac_rx_ops_register_p2p( rx_ops->p2p.noa_ev_handler = tgt_p2p_noa_event_cb; } #else +static void wlan_lmac_if_umac_rx_ops_register_p2p( + struct wlan_lmac_if_rx_ops *rx_ops) +{ + rx_ops->p2p.noa_ev_handler = tgt_p2p_noa_event_cb; +} +#endif +#else static void wlan_lmac_if_umac_rx_ops_register_p2p( struct wlan_lmac_if_rx_ops *rx_ops) { diff --git a/umac/p2p/core/src/wlan_p2p_main.c b/umac/p2p/core/src/wlan_p2p_main.c index b6d3cdc1878e..f66f05718d37 100644 --- a/umac/p2p/core/src/wlan_p2p_main.c +++ b/umac/p2p/core/src/wlan_p2p_main.c @@ -789,6 +789,20 @@ QDF_STATUS p2p_psoc_object_close(struct wlan_objmgr_psoc *soc) return QDF_STATUS_SUCCESS; } +#ifdef FEATURE_P2P_LISTEN_OFFLOAD +static inline void p2p_init_lo_event(struct p2p_start_param *start_param, + struct p2p_start_param *req) +{ + start_param->lo_event_cb = req->lo_event_cb; + start_param->lo_event_cb_data = req->lo_event_cb_data; +} +#else +static inline void p2p_init_lo_event(struct p2p_start_param *start_param, + struct p2p_start_param *req) +{ +} +#endif + QDF_STATUS p2p_psoc_start(struct wlan_objmgr_psoc *soc, struct p2p_start_param *req) { @@ -818,8 +832,7 @@ QDF_STATUS p2p_psoc_start(struct wlan_objmgr_psoc *soc, start_param->event_cb_data = req->event_cb_data; start_param->tx_cnf_cb = req->tx_cnf_cb; start_param->tx_cnf_cb_data = req->tx_cnf_cb_data; - start_param->lo_event_cb = req->lo_event_cb; - start_param->lo_event_cb_data = req->lo_event_cb_data; + p2p_init_lo_event(start_param, req); p2p_soc_obj->start_param = start_param; wlan_p2p_init_connection_status(p2p_soc_obj); @@ -995,6 +1008,7 @@ QDF_STATUS p2p_process_evt(struct scheduler_msg *msg) return status; } +#ifdef FEATURE_P2P_LISTEN_OFFLOAD QDF_STATUS p2p_process_lo_stop( struct p2p_lo_stop_event *lo_stop_event) { @@ -1034,6 +1048,7 @@ QDF_STATUS p2p_process_lo_stop( return QDF_STATUS_SUCCESS; } +#endif QDF_STATUS p2p_process_noa(struct p2p_noa_event *noa_event) { diff --git a/umac/p2p/core/src/wlan_p2p_main.h b/umac/p2p/core/src/wlan_p2p_main.h index 5a313abfd51b..ef0fc484794e 100644 --- a/umac/p2p/core/src/wlan_p2p_main.h +++ b/umac/p2p/core/src/wlan_p2p_main.h @@ -354,6 +354,7 @@ QDF_STATUS p2p_process_cmd(struct scheduler_msg *msg); */ QDF_STATUS p2p_process_evt(struct scheduler_msg *msg); +#ifdef FEATURE_P2P_LISTEN_OFFLOAD /** * p2p_process_lo_stop() - Process lo stop event * @lo_stop_event: listen offload stop event information @@ -365,7 +366,13 @@ QDF_STATUS p2p_process_evt(struct scheduler_msg *msg); */ QDF_STATUS p2p_process_lo_stop( struct p2p_lo_stop_event *lo_stop_event); - +#else +static inline QDF_STATUS p2p_process_lo_stop( + struct p2p_lo_stop_event *lo_stop_event) +{ + return QDF_STATUS_SUCCESS; +} +#endif /** * p2p_process_noa() - Process noa event * @noa_event: noa event information diff --git a/umac/p2p/dispatcher/inc/wlan_p2p_tgt_api.h b/umac/p2p/dispatcher/inc/wlan_p2p_tgt_api.h index 9f2b140ab742..5412063263bd 100644 --- a/umac/p2p/dispatcher/inc/wlan_p2p_tgt_api.h +++ b/umac/p2p/dispatcher/inc/wlan_p2p_tgt_api.h @@ -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 @@ -34,6 +34,20 @@ struct p2p_lo_event; struct mgmt_rx_event_params; enum mgmt_frame_type; +#ifdef FEATURE_P2P_LISTEN_OFFLOAD + +/** + * tgt_p2p_lo_event_cb() - Listen offload stop request + * @psoc: soc object + * @event_info: lo stop event buffer + * + * This function gets called from target interface. + * + * Return: QDF_STATUS_SUCCESS - in case of success + */ +QDF_STATUS tgt_p2p_lo_event_cb(struct wlan_objmgr_psoc *psoc, + struct p2p_lo_event *event_info); + /** * tgt_p2p_register_lo_ev_handler() - register lo event * @psoc: soc object @@ -45,17 +59,6 @@ enum mgmt_frame_type; QDF_STATUS tgt_p2p_register_lo_ev_handler( struct wlan_objmgr_psoc *psoc); -/** - * tgt_p2p_register_noa_ev_handler() - register noa event - * @psoc: soc object - * - * p2p tgt api to register noa event handler. - * - * Return: QDF_STATUS_SUCCESS - in case of success - */ -QDF_STATUS tgt_p2p_register_noa_ev_handler( - struct wlan_objmgr_psoc *psoc); - /** * tgt_p2p_unregister_lo_ev_handler() - unregister lo event * @psoc: soc object @@ -66,6 +69,30 @@ QDF_STATUS tgt_p2p_register_noa_ev_handler( */ QDF_STATUS tgt_p2p_unregister_lo_ev_handler( struct wlan_objmgr_psoc *psoc); +#else +static inline QDF_STATUS tgt_p2p_register_lo_ev_handler( + struct wlan_objmgr_psoc *psoc) +{ + return QDF_STATUS_SUCCESS; +} + +static inline QDF_STATUS tgt_p2p_unregister_lo_ev_handler( + struct wlan_objmgr_psoc *psoc) +{ + return QDF_STATUS_SUCCESS; +} +#endif + +/** + * tgt_p2p_register_noa_ev_handler() - register noa event + * @psoc: soc object + * + * p2p tgt api to register noa event handler. + * + * Return: QDF_STATUS_SUCCESS - in case of success + */ +QDF_STATUS tgt_p2p_register_noa_ev_handler( + struct wlan_objmgr_psoc *psoc); /** * tgt_p2p_unregister_noa_ev_handler() - unregister noa event @@ -151,16 +178,4 @@ QDF_STATUS tgt_p2p_mgmt_frame_rx_cb(struct wlan_objmgr_psoc *psoc, QDF_STATUS tgt_p2p_noa_event_cb(struct wlan_objmgr_psoc *psoc, struct p2p_noa_info *event_info); -/** - * tgt_p2p_lo_event_cb() - Listen offload stop request - * @psoc: soc object - * @event_info: lo stop event buffer - * - * This function gets called from target interface. - * - * Return: QDF_STATUS_SUCCESS - in case of success - */ -QDF_STATUS tgt_p2p_lo_event_cb(struct wlan_objmgr_psoc *psoc, - struct p2p_lo_event *event_info); - #endif /* _WLAN_P2P_TGT_API_H_ */ diff --git a/umac/p2p/dispatcher/inc/wlan_p2p_ucfg_api.h b/umac/p2p/dispatcher/inc/wlan_p2p_ucfg_api.h index 25f0d532c876..0cdc9bd32281 100644 --- a/umac/p2p/dispatcher/inc/wlan_p2p_ucfg_api.h +++ b/umac/p2p/dispatcher/inc/wlan_p2p_ucfg_api.h @@ -110,8 +110,10 @@ struct p2p_start_param { void *event_cb_data; p2p_action_tx_cnf_callback tx_cnf_cb; void *tx_cnf_cb_data; +#ifdef FEATURE_P2P_LISTEN_OFFLOAD p2p_lo_event_callback lo_event_cb; void *lo_event_cb_data; +#endif }; /** @@ -277,6 +279,7 @@ QDF_STATUS ucfg_p2p_mgmt_tx_cancel(struct wlan_objmgr_psoc *soc, QDF_STATUS ucfg_p2p_set_ps(struct wlan_objmgr_psoc *soc, struct p2p_ps_config *ps_config); +#ifdef FEATURE_P2P_LISTEN_OFFLOAD /** * ucfg_p2p_lo_start() - Listen offload start request * @soc: soc context @@ -301,6 +304,7 @@ QDF_STATUS ucfg_p2p_lo_start(struct wlan_objmgr_psoc *soc, */ QDF_STATUS ucfg_p2p_lo_stop(struct wlan_objmgr_psoc *soc, uint32_t vdev_id); +#endif /** * p2p_peer_authorized() - Process peer authorized event diff --git a/umac/p2p/dispatcher/src/wlan_p2p_tgt_api.c b/umac/p2p/dispatcher/src/wlan_p2p_tgt_api.c index 17e289de96f9..8fd2236f053d 100644 --- a/umac/p2p/dispatcher/src/wlan_p2p_tgt_api.c +++ b/umac/p2p/dispatcher/src/wlan_p2p_tgt_api.c @@ -43,6 +43,7 @@ wlan_psoc_get_p2p_tx_ops(struct wlan_objmgr_psoc *psoc) return &(psoc->soc_cb.tx_ops.p2p); } +#ifdef FEATURE_P2P_LISTEN_OFFLOAD QDF_STATUS tgt_p2p_register_lo_ev_handler( struct wlan_objmgr_psoc *psoc) { @@ -58,21 +59,6 @@ QDF_STATUS tgt_p2p_register_lo_ev_handler( return status; } -QDF_STATUS tgt_p2p_register_noa_ev_handler( - struct wlan_objmgr_psoc *psoc) -{ - struct wlan_lmac_if_p2p_tx_ops *p2p_ops; - QDF_STATUS status = QDF_STATUS_E_FAILURE; - - p2p_ops = wlan_psoc_get_p2p_tx_ops(psoc); - if (p2p_ops && p2p_ops->reg_noa_ev_handler) { - status = p2p_ops->reg_noa_ev_handler(psoc, NULL); - p2p_debug("register noa event, status:%d", status); - } - - return status; -} - QDF_STATUS tgt_p2p_unregister_lo_ev_handler( struct wlan_objmgr_psoc *psoc) { @@ -88,6 +74,69 @@ QDF_STATUS tgt_p2p_unregister_lo_ev_handler( return status; } +QDF_STATUS tgt_p2p_lo_event_cb(struct wlan_objmgr_psoc *psoc, + struct p2p_lo_event *event_info) +{ + struct p2p_lo_stop_event *lo_stop_event; + struct scheduler_msg msg = {0}; + struct p2p_soc_priv_obj *p2p_soc_obj; + + p2p_debug("soc:%pK, event_info:%pK", psoc, event_info); + + if (!psoc) { + p2p_err("psoc context passed is NULL"); + if (event_info) + qdf_mem_free(event_info); + return QDF_STATUS_E_INVAL; + } + + p2p_soc_obj = wlan_objmgr_psoc_get_comp_private_obj(psoc, + WLAN_UMAC_COMP_P2P); + if (!p2p_soc_obj) { + p2p_err("p2p soc object is NULL"); + if (event_info) + qdf_mem_free(event_info); + return QDF_STATUS_E_INVAL; + } + + if (!event_info) { + p2p_err("invalid lo stop event information"); + return QDF_STATUS_E_INVAL; + } + + lo_stop_event = qdf_mem_malloc(sizeof(*lo_stop_event)); + if (!lo_stop_event) { + p2p_err("Failed to allocate p2p lo stop event"); + qdf_mem_free(event_info); + return QDF_STATUS_E_NOMEM; + } + + lo_stop_event->p2p_soc_obj = p2p_soc_obj; + lo_stop_event->lo_event = event_info; + msg.type = P2P_EVENT_LO_STOPPED; + msg.bodyptr = lo_stop_event; + msg.callback = p2p_process_evt; + scheduler_post_msg(QDF_MODULE_ID_TARGET_IF, &msg); + + return QDF_STATUS_SUCCESS; +} +#endif /* FEATURE_P2P_LISTEN_OFFLOAD */ + +QDF_STATUS tgt_p2p_register_noa_ev_handler( + struct wlan_objmgr_psoc *psoc) +{ + struct wlan_lmac_if_p2p_tx_ops *p2p_ops; + QDF_STATUS status = QDF_STATUS_E_FAILURE; + + p2p_ops = wlan_psoc_get_p2p_tx_ops(psoc); + if (p2p_ops && p2p_ops->reg_noa_ev_handler) { + status = p2p_ops->reg_noa_ev_handler(psoc, NULL); + p2p_debug("register noa event, status:%d", status); + } + + return status; +} + QDF_STATUS tgt_p2p_unregister_noa_ev_handler( struct wlan_objmgr_psoc *psoc) { @@ -288,50 +337,3 @@ QDF_STATUS tgt_p2p_noa_event_cb(struct wlan_objmgr_psoc *psoc, return QDF_STATUS_SUCCESS; } - -QDF_STATUS tgt_p2p_lo_event_cb(struct wlan_objmgr_psoc *psoc, - struct p2p_lo_event *event_info) -{ - struct p2p_lo_stop_event *lo_stop_event; - struct scheduler_msg msg = {0}; - struct p2p_soc_priv_obj *p2p_soc_obj; - - p2p_debug("soc:%pK, event_info:%pK", psoc, event_info); - - if (!psoc) { - p2p_err("psoc context passed is NULL"); - if (event_info) - qdf_mem_free(event_info); - return QDF_STATUS_E_INVAL; - } - - p2p_soc_obj = wlan_objmgr_psoc_get_comp_private_obj(psoc, - WLAN_UMAC_COMP_P2P); - if (!p2p_soc_obj) { - p2p_err("p2p soc object is NULL"); - if (event_info) - qdf_mem_free(event_info); - return QDF_STATUS_E_INVAL; - } - - if (!event_info) { - p2p_err("invalid lo stop event information"); - return QDF_STATUS_E_INVAL; - } - - lo_stop_event = qdf_mem_malloc(sizeof(*lo_stop_event)); - if (!lo_stop_event) { - p2p_err("Failed to allocate p2p lo stop event"); - qdf_mem_free(event_info); - return QDF_STATUS_E_NOMEM; - } - - lo_stop_event->p2p_soc_obj = p2p_soc_obj; - lo_stop_event->lo_event = event_info; - msg.type = P2P_EVENT_LO_STOPPED; - msg.bodyptr = lo_stop_event; - msg.callback = p2p_process_evt; - scheduler_post_msg(QDF_MODULE_ID_TARGET_IF, &msg); - - return QDF_STATUS_SUCCESS; -} diff --git a/umac/p2p/dispatcher/src/wlan_p2p_ucfg_api.c b/umac/p2p/dispatcher/src/wlan_p2p_ucfg_api.c index 1f64b96b8e14..cfeddc9967c4 100644 --- a/umac/p2p/dispatcher/src/wlan_p2p_ucfg_api.c +++ b/umac/p2p/dispatcher/src/wlan_p2p_ucfg_api.c @@ -463,6 +463,7 @@ QDF_STATUS ucfg_p2p_set_ps(struct wlan_objmgr_psoc *soc, return status; } +#ifdef FEATURE_P2P_LISTEN_OFFLOAD QDF_STATUS ucfg_p2p_lo_start(struct wlan_objmgr_psoc *soc, struct p2p_lo_start *p2p_lo_start) { @@ -511,6 +512,7 @@ QDF_STATUS ucfg_p2p_lo_stop(struct wlan_objmgr_psoc *soc, return status; } +#endif QDF_STATUS ucfg_p2p_set_noa(struct wlan_objmgr_psoc *soc, uint32_t vdev_id, bool disable_noa) diff --git a/wmi/inc/wmi_unified_api.h b/wmi/inc/wmi_unified_api.h index 5bfe07e37ebf..a4274ac17dc7 100644 --- a/wmi/inc/wmi_unified_api.h +++ b/wmi/inc/wmi_unified_api.h @@ -574,11 +574,13 @@ QDF_STATUS wmi_unified_set_p2pgo_noa_req_cmd(void *wmi_hdl, struct p2p_ps_params *noa); #ifdef CONVERGED_P2P_ENABLE +#ifdef FEATURE_P2P_LISTEN_OFFLOAD QDF_STATUS wmi_unified_p2p_lo_start_cmd(void *wmi_hdl, struct p2p_lo_start *param); QDF_STATUS wmi_unified_p2p_lo_stop_cmd(void *wmi_hdl, uint8_t vdev_id); #endif +#endif QDF_STATUS wmi_unified_set_smps_params(void *wmi_hdl, uint8_t vdev_id, int value); diff --git a/wmi/inc/wmi_unified_priv.h b/wmi/inc/wmi_unified_priv.h index 3094382df6e2..858b9a449f06 100644 --- a/wmi/inc/wmi_unified_priv.h +++ b/wmi/inc/wmi_unified_priv.h @@ -343,7 +343,7 @@ QDF_STATUS (*send_set_p2pgo_oppps_req_cmd)(wmi_unified_t wmi_handle, QDF_STATUS (*send_set_p2pgo_noa_req_cmd)(wmi_unified_t wmi_handle, struct p2p_ps_params *noa); -#ifdef CONVERGED_P2P_ENABLE +#ifdef FEATURE_P2P_LISTEN_OFFLOAD QDF_STATUS (*send_p2p_lo_start_cmd)(wmi_unified_t wmi_handle, struct p2p_lo_start *param); @@ -1276,8 +1276,10 @@ QDF_STATUS (*extract_swba_noa_info)(wmi_unified_t wmi_handle, void *evt_buf, uint32_t idx, wmi_host_p2p_noa_info *p2p_desc); #ifdef CONVERGED_P2P_ENABLE +#ifdef FEATURE_P2P_LISTEN_OFFLOAD QDF_STATUS (*extract_p2p_lo_stop_ev_param)(wmi_unified_t wmi_handle, void *evt_buf, struct p2p_lo_event *param); +#endif QDF_STATUS (*extract_p2p_noa_ev_param)(wmi_unified_t wmi_handle, void *evt_buf, struct p2p_noa_info *param); diff --git a/wmi/src/wmi_unified_api.c b/wmi/src/wmi_unified_api.c index a84d30782d53..28e5ac0eb619 100644 --- a/wmi/src/wmi_unified_api.c +++ b/wmi/src/wmi_unified_api.c @@ -1032,7 +1032,7 @@ QDF_STATUS wmi_unified_set_p2pgo_noa_req_cmd(void *wmi_hdl, return QDF_STATUS_E_FAILURE; } -#ifdef CONVERGED_P2P_ENABLE +#ifdef FEATURE_P2P_LISTEN_OFFLOAD /** * wmi_unified_p2p_lo_start_cmd() - send p2p lo start request to fw * @wmi_hdl: wmi handle @@ -1073,13 +1073,13 @@ QDF_STATUS wmi_unified_p2p_lo_stop_cmd(void *wmi_hdl, uint8_t vdev_id) return QDF_STATUS_E_INVAL; } - if (wmi_handle->ops->send_p2p_lo_start_cmd) + if (wmi_handle->ops->send_p2p_lo_stop_cmd) return wmi_handle->ops->send_p2p_lo_stop_cmd(wmi_handle, vdev_id); return QDF_STATUS_E_FAILURE; } -#endif /* End of CONVERGED_P2P_ENABLE */ +#endif /* End of FEATURE_P2P_LISTEN_OFFLOAD*/ /** * wmi_get_temperature() - get pdev temperature req @@ -5791,6 +5791,7 @@ QDF_STATUS wmi_extract_swba_noa_info(void *wmi_hdl, void *evt_buf, } #ifdef CONVERGED_P2P_ENABLE +#ifdef FEATURE_P2P_LISTEN_OFFLOAD /** * wmi_extract_p2p_lo_stop_ev_param() - extract p2p lo stop param from event * @wmi_handle: wmi handle @@ -5815,6 +5816,7 @@ QDF_STATUS wmi_extract_p2p_lo_stop_ev_param(void *wmi_hdl, void *evt_buf, return QDF_STATUS_E_FAILURE; } +#endif /** * wmi_extract_p2p_noa_ev_param() - extract p2p noa param from event diff --git a/wmi/src/wmi_unified_tlv.c b/wmi/src/wmi_unified_tlv.c index 5598b3af8a21..18e5bfcd8779 100644 --- a/wmi/src/wmi_unified_tlv.c +++ b/wmi/src/wmi_unified_tlv.c @@ -3704,7 +3704,7 @@ end: return status; } -#ifdef CONVERGED_P2P_ENABLE +#ifdef FEATURE_P2P_LISTEN_OFFLOAD /** * send_p2p_lo_start_cmd_tlv() - send p2p lo start request to fw * @wmi_handle: wmi handle @@ -3845,7 +3845,7 @@ static QDF_STATUS send_p2p_lo_stop_cmd_tlv(wmi_unified_t wmi_handle, return QDF_STATUS_SUCCESS; } -#endif /* End of CONVERGED_P2P_ENABLE */ +#endif /* End of FEATURE_P2P_LISTEN_OFFLOAD */ /** * send_get_temperature_cmd_tlv() - get pdev temperature req @@ -18549,6 +18549,7 @@ static QDF_STATUS extract_p2p_noa_ev_param_tlv( return QDF_STATUS_SUCCESS; } +#ifdef FEATURE_P2P_LISTEN_OFFLOAD /** * extract_p2p_lo_stop_ev_param_tlv() - extract p2p lo stop * information from event @@ -18585,6 +18586,7 @@ static QDF_STATUS extract_p2p_lo_stop_ev_param_tlv( return QDF_STATUS_SUCCESS; } +#endif #endif /* End of CONVERGED_P2P_ENABLE */ /** @@ -21959,7 +21961,7 @@ struct wmi_ops tlv_ops = { .send_get_temperature_cmd = send_get_temperature_cmd_tlv, .send_set_p2pgo_oppps_req_cmd = send_set_p2pgo_oppps_req_cmd_tlv, .send_set_p2pgo_noa_req_cmd = send_set_p2pgo_noa_req_cmd_tlv, -#ifdef CONVERGED_P2P_ENABLE +#ifdef FEATURE_P2P_LISTEN_OFFLOAD .send_p2p_lo_start_cmd = send_p2p_lo_start_cmd_tlv, .send_p2p_lo_stop_cmd = send_p2p_lo_stop_cmd_tlv, #endif @@ -22244,8 +22246,10 @@ struct wmi_ops tlv_ops = { .extract_swba_noa_info = extract_swba_noa_info_tlv, #ifdef CONVERGED_P2P_ENABLE .extract_p2p_noa_ev_param = extract_p2p_noa_ev_param_tlv, +#ifdef FEATURE_P2P_LISTEN_OFFLOAD .extract_p2p_lo_stop_ev_param = extract_p2p_lo_stop_ev_param_tlv, +#endif #endif .extract_offchan_data_tx_compl_param = extract_offchan_data_tx_compl_param_tlv,