/*
 * Copyright (c) 2021, The Linux Foundation. All rights reserved.
 *
 * Copyright (c) 2022 Qualcomm Innovation Center, Inc. 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.
 */

#ifndef __EDMA_CFG_TX_H__
#define __EDMA_CFG_TX_H__

#define EDMA_TX_NAPI_WORK_MIN   16
#define EDMA_TX_NAPI_WORK_MAX	512

#define EDMA_TX_MITIGATION_TIMER_MIN	0	/* Tx mitigation timer's minimum value in microseconds */
#define EDMA_TX_MITIGATION_TIMER_MAX	1000	/* Tx mitigation timer's maximum value in microseconds */
#define EDMA_TX_MITIGATION_PKT_CNT_MIN	0	/* Tx mitigation packet count's minimum value */
#define EDMA_TX_MITIGATION_PKT_CNT_MAX	256	/* Tx mitigation packet count's maximum value */

void edma_cfg_tx_rings(struct edma_gbl_ctx *egc);
int32_t edma_cfg_tx_rings_alloc(struct edma_gbl_ctx *egc);
void edma_cfg_tx_rings_cleanup(struct edma_gbl_ctx *egc);
void edma_cfg_tx_napi_enable(struct edma_gbl_ctx *egc);
void edma_cfg_tx_napi_disable(struct edma_gbl_ctx *egc);
void edma_cfg_tx_napi_delete(struct edma_gbl_ctx *egc);
void edma_cfg_tx_napi_add(struct edma_gbl_ctx *egc, struct net_device *netdev);
void edma_cfg_tx_mapping(struct edma_gbl_ctx *egc);
void edma_cfg_tx_rings_enable(struct edma_gbl_ctx *egc);
void edma_cfg_tx_rings_disable(struct edma_gbl_ctx *egc);
void edma_cfg_tx_fill_per_port_tx_map(struct net_device *netdev, uint32_t macid);
#endif	/* __EDMA_CFG_TX_H__ */
