/* * Copyright (c) 2016 The Linux Foundation. All rights reserved. * * Previously licensed under the ISC license by Qualcomm Atheros, Inc. * * * 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. */ /* * This file was originally distributed by Qualcomm Atheros, Inc. * under proprietary terms before Copyright ownership was assigned * to the Linux Foundation. */ /** * @file cdp_txrx_flow_ctrl_legacy.h * @brief Define the host data path legacy flow control API * functions */ #ifndef _CDP_TXRX_FC_LEG_H_ #define _CDP_TXRX_FC_LEG_H_ /** * enum netif_action_type - Type of actions on netif queues * @WLAN_STOP_ALL_NETIF_QUEUE: stop all netif queues * @WLAN_START_ALL_NETIF_QUEUE: start all netif queues * @WLAN_WAKE_ALL_NETIF_QUEUE: wake all netif queues * @WLAN_STOP_ALL_NETIF_QUEUE_N_CARRIER: stop all queues and off carrier * @WLAN_START_ALL_NETIF_QUEUE_N_CARRIER: start all queues and on carrier * @WLAN_NETIF_TX_DISABLE: disable tx * @WLAN_NETIF_TX_DISABLE_N_CARRIER: disable tx and off carrier * @WLAN_NETIF_CARRIER_ON: on carrier * @WLAN_NETIF_CARRIER_OFF: off carrier */ enum netif_action_type { WLAN_STOP_ALL_NETIF_QUEUE = 1, WLAN_START_ALL_NETIF_QUEUE, WLAN_WAKE_ALL_NETIF_QUEUE, WLAN_STOP_ALL_NETIF_QUEUE_N_CARRIER, WLAN_START_ALL_NETIF_QUEUE_N_CARRIER, WLAN_NETIF_TX_DISABLE, WLAN_NETIF_TX_DISABLE_N_CARRIER, WLAN_NETIF_CARRIER_ON, WLAN_NETIF_CARRIER_OFF, WLAN_NETIF_ACTION_TYPE_MAX, }; /** * enum netif_reason_type - reason for netif queue action * @WLAN_CONTROL_PATH: action from control path * @WLAN_DATA_FLOW_CONTROL: because of flow control * @WLAN_FW_PAUSE: because of firmware pause * @WLAN_TX_ABORT: because of tx abort * @WLAN_VDEV_STOP: because of vdev stop * @WLAN_PEER_UNAUTHORISED: because of peer is unauthorised * @WLAN_THERMAL_MITIGATION: because of thermal mitigation */ enum netif_reason_type { WLAN_CONTROL_PATH = 1, WLAN_DATA_FLOW_CONTROL, WLAN_FW_PAUSE, WLAN_TX_ABORT, WLAN_VDEV_STOP, WLAN_PEER_UNAUTHORISED, WLAN_THERMAL_MITIGATION, WLAN_REASON_TYPE_MAX, }; #ifdef QCA_LL_LEGACY_TX_FLOW_CONTROL /** * ol_txrx_tx_flow_control_fp - tx flow control notification * function from txrx to OS shim * @osif_dev - the virtual device's OS shim object * @tx_resume - tx os q should be resumed or not */ typedef void (*ol_txrx_tx_flow_control_fp)(void *osif_dev, bool tx_resume); int ol_txrx_register_tx_flow_control(uint8_t vdev_id, ol_txrx_tx_flow_control_fp flowControl, void *osif_fc_ctx); int ol_txrx_deregister_tx_flow_control_cb(uint8_t vdev_id); void ol_txrx_flow_control_cb(ol_txrx_vdev_handle vdev, bool tx_resume); bool ol_txrx_get_tx_resource(uint8_t sta_id, unsigned int low_watermark, unsigned int high_watermark_offset); int ol_txrx_ll_set_tx_pause_q_depth(uint8_t vdev_id, int pause_q_depth); #endif /* QCA_LL_LEGACY_TX_FLOW_CONTROL */ void ol_txrx_vdev_flush(ol_txrx_vdev_handle data_vdev); #ifdef CONFIG_ICNSS static inline void ol_txrx_vdev_pause(ol_txrx_vdev_handle vdev, uint32_t reason) { return; } #else void ol_txrx_vdev_pause(ol_txrx_vdev_handle vdev, uint32_t reason); #endif #ifdef CONFIG_ICNSS static inline void ol_txrx_vdev_unpause(ol_txrx_vdev_handle data_vdev, uint32_t reason) { return; } #else void ol_txrx_vdev_unpause(ol_txrx_vdev_handle data_vdev, uint32_t reason); #endif #endif /* _CDP_TXRX_FC_LEG_H_ */