/* * 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: Contains p2p north bound interface definitions */ #ifndef _WLAN_P2P_UCFG_API_H_ #define _WLAN_P2P_UCFG_API_H_ #include struct wlan_objmgr_psoc; struct p2p_roc_req; struct p2p_event; struct p2p_rx_mgmt_frame; struct p2p_tx_cnf; struct p2p_mgmt_tx; struct p2p_ps_config; struct p2p_lo_start; struct p2p_lo_event; /** * p2p_rx_callback() - Callback for rx mgmt frame * @user_data: user data associated to this rx mgmt frame. * @rx_frame: RX mgmt frame * * This callback will be used to give rx frames to hdd. * * Return: None */ typedef void (*p2p_rx_callback)(void *user_data, struct p2p_rx_mgmt_frame *rx_frame); /** * p2p_action_tx_cnf_callback() - Callback for tx confirmation * @user_data: user data associated to this tx confirmation * @tx_cnf: tx confirmation information * * This callback will be used to give tx mgmt frame confirmation to * hdd. * * Return: None */ typedef void (*p2p_action_tx_cnf_callback)(void *user_data, struct p2p_tx_cnf *tx_cnf); /** * p2p_lo_event_callback() - Callback for listen offload event * @user_data: user data associated to this lo event * @p2p_lo_event: listen offload event information * * This callback will be used to give listen offload event to hdd. * * Return: None */ typedef void (*p2p_lo_event_callback)(void *user_data, struct p2p_lo_event *p2p_lo_event); /** * p2p_event_callback() - Callback for P2P event * @user_data: user data associated to this p2p event * @p2p_event: p2p event information * * This callback will be used to give p2p event to hdd. * * Return: None */ typedef void (*p2p_event_callback)(void *user_data, struct p2p_event *p2p_event); /** * struct p2p_start_param - p2p soc start parameters. Below callbacks * will be registered by the HDD * @rx_callback: Function pointer to hdd rx callback. This * function will be used to give rx frames to hdd * @rx_cb_data: RX callback user data * @event_cb: Founction pointer to hdd p2p event callback. * This function will be used to give p2p event * to hdd * @event_cb_data: Pointer to p2p event callback user data * @tx_cnf_cb: Function pointer to hdd tx confirm callback. * This function will be used to give tx confirm * to hdd * @tx_cnf_cb_data: Pointer to p2p tx confirm callback user data * @lo_event_cb: Founction pointer to p2p listen offload * callback. This function will be used to give * listen offload stopped event to hdd * @lo_event_cb_data: Pointer to p2p listen offload callback user data */ struct p2p_start_param { p2p_rx_callback rx_cb; void *rx_cb_data; p2p_event_callback event_cb; void *event_cb_data; p2p_action_tx_cnf_callback tx_cnf_cb; void *tx_cnf_cb_data; p2p_lo_event_callback lo_event_cb; void *lo_event_cb_data; }; /** * ucfg_p2p_init() - P2P component initialization * * This function gets called when dispatcher initializing. * * Return: QDF_STATUS_SUCCESS - in case of success */ QDF_STATUS ucfg_p2p_init(void); /** * ucfg_p2p_deinit() - P2P component de-init * * This function gets called when dispatcher de-init. * * Return: QDF_STATUS_SUCCESS - in case of success */ QDF_STATUS ucfg_p2p_deinit(void); /** * ucfg_p2p_psoc_open() - Open P2P component * @soc: soc context * * This function gets called when dispatcher opening. * * Return: QDF_STATUS_SUCCESS - in case of success */ QDF_STATUS ucfg_p2p_psoc_open(struct wlan_objmgr_psoc *soc); /** * ucfg_p2p_psoc_close() - Close P2P component * @soc: soc context * * This function gets called when dispatcher closing. * * Return: QDF_STATUS_SUCCESS - in case of success */ QDF_STATUS ucfg_p2p_psoc_close(struct wlan_objmgr_psoc *soc); /** * ucfg_p2p_psoc_start() - Start P2P component * @soc: soc context * @req: P2P start parameters * * This function gets called when up layer starting up. * * Return: QDF_STATUS_SUCCESS - in case of success */ QDF_STATUS ucfg_p2p_psoc_start(struct wlan_objmgr_psoc *soc, struct p2p_start_param *req); /** * ucfg_p2p_psoc_stop() - Stop P2P component * @soc: soc context * * This function gets called when up layer exit. * * Return: QDF_STATUS_SUCCESS - in case of success */ QDF_STATUS ucfg_p2p_psoc_stop(struct wlan_objmgr_psoc *soc); /** * ucfg_p2p_roc_req() - Roc request * @soc: soc context * @roc_req: Roc request parameters * @cookie: return cookie to caller * * This function delivers roc request to P2P component. * * Return: QDF_STATUS_SUCCESS - in case of success */ QDF_STATUS ucfg_p2p_roc_req(struct wlan_objmgr_psoc *soc, struct p2p_roc_req *roc_req, uint64_t *cookie); /** * ucfg_p2p_roc_cancel_req() - Cancel roc request * @soc: soc context * @cookie: Find out the roc request by cookie * * This function delivers cancel roc request to P2P component. * * Return: QDF_STATUS_SUCCESS - in case of success */ QDF_STATUS ucfg_p2p_roc_cancel_req(struct wlan_objmgr_psoc *soc, uint64_t cookie); /** * ucfg_p2p_cleanup_roc() - Cleanup roc request by vdev * @vdev: pointer to vdev object * * This function call P2P API to cleanup roc request by vdev. * * Return: QDF_STATUS_SUCCESS - in case of success */ QDF_STATUS ucfg_p2p_cleanup_roc(struct wlan_objmgr_vdev *vdev); /** * ucfg_p2p_mgmt_tx() - Mgmt frame tx request * @soc: soc context * @mgmt_frm: TX mgmt frame parameters * @cookie: Return the cookie to caller * * This function delivers mgmt frame tx request to P2P component. * * Return: QDF_STATUS_SUCCESS - in case of success */ QDF_STATUS ucfg_p2p_mgmt_tx(struct wlan_objmgr_psoc *soc, struct p2p_mgmt_tx *mgmt_frm, uint64_t *cookie); /** * ucfg_p2p_mgmt_tx_cancel() - Cancel mgmt frame tx request * @soc: soc context * @cookie: Find out the mgmt tx request by cookie * * This function delivers cancel mgmt frame tx request request to P2P * component. * * Return: QDF_STATUS_SUCCESS - in case of success */ QDF_STATUS ucfg_p2p_mgmt_tx_cancel(struct wlan_objmgr_psoc *soc, uint64_t cookie); /** * ucfg_p2p_set_ps() - P2P set power save * @soc: soc context * @ps_config: power save configure * * This function delivers p2p power save request to P2P component. * * Return: QDF_STATUS_SUCCESS - in case of success */ QDF_STATUS ucfg_p2p_set_ps(struct wlan_objmgr_psoc *soc, struct p2p_ps_config *ps_config); /** * ucfg_p2p_lo_start() - Listen offload start request * @soc: soc context * @p2p_lo_start: lo start parameters * * This function delivers listen offload start request to P2P * component. * * Return: QDF_STATUS_SUCCESS - in case of success */ QDF_STATUS ucfg_p2p_lo_start(struct wlan_objmgr_psoc *soc, struct p2p_lo_start *p2p_lo_start); /** * ucfg_p2p_lo_stop() - Listen offload stop request * @soc: soc context * @vdev_id: vdev id * * This function delivers listen offload stop request to P2P component. * * Return: QDF_STATUS_SUCCESS - in case of success */ QDF_STATUS ucfg_p2p_lo_stop(struct wlan_objmgr_psoc *soc, uint32_t vdev_id); /** * p2p_peer_authorized() - Process peer authorized event * @vdev: vdev structure to which peer is associated * @mac_addr: peer mac address * * This function handles disables noa whenever a legacy station * complete 4-way handshake after association. * * Return: void */ void p2p_peer_authorized(struct wlan_objmgr_vdev *vdev, uint8_t *mac_addr); /** * ucfg_p2p_set_noa() - Disable/Enable NOA * @soc: soc context * @vdev_id: vdev id * @disable_noa: TRUE - Disable NoA, FALSE - Enable NoA * * This function send wmi command to enable / disable NoA. * * Return: QDF_STATUS_SUCCESS - in case of success */ QDF_STATUS ucfg_p2p_set_noa(struct wlan_objmgr_psoc *soc, uint32_t vdev_id, bool disable_noa); #endif /* _WLAN_P2P_UCFG_API_H_ */