blob: a8bc27cb05165aad0e59aeaf492d164fa972d220 [file] [log] [blame]
/*
* Copyright (c) 2020-2021, The Linux Foundation. All rights reserved.
* Copyright (c) 2021-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 __NSS_DP_SYN_DP__
#define __NSS_DP_SYN_DP__
#include "syn_dma_desc.h"
#include "syn_dp_rx.h"
#include "syn_dp_tx.h"
/*
* The driver uses kernel DMA constructs that assume an architecture
* where the view of physical addresses is consistent between SoC and
* IO device(SynopsysGMAC).
* Note that this may not be compatible for platforms where this
* assumption is not true, for example IO devices with IOMMU support.
*/
#if defined(CONFIG_ARM_SMMU) || \
defined(CONFIG_IOMMU_SUPPORT)
#error "Build Error: Platform is enabled with IOMMU/SMMU support."
#endif
#define SYN_DP_MINI_JUMBO_FRAME_MTU 1978
#define SYN_DP_MAX_DESC_BUFF_LEN 0x1FFF /* Max size of buffer that can be programed into one field of desc */
#define SYN_DP_SKB_ALLOC_SIZE (SYN_DP_MINI_JUMBO_FRAME_MTU + NET_IP_ALIGN)
#define SYN_DP_SKB_HEADROOM 128
#define SYN_DP_PAGE_MODE_SKB_SIZE 256 /* SKB head buffer size for page mode */
#define SYN_DP_QUEUE_INDEX 0 /* Only one Tx DMA channel 0 enabled */
extern int tx_requeue_stop;
extern int tx_desc_threshold_size;
extern int tx_completion_load_balance;
extern int tx_completion_load_balance_threshold;
extern int tx_completion_load_balance_cpu;
/*
* syn_dp_info
* Synopysys GMAC Dataplane information
*/
struct syn_dp_info {
struct syn_dp_info_rx dp_info_rx;
struct syn_dp_info_tx dp_info_tx;
void __iomem *mac_base;
dma_addr_t rx_desc_dma_addr;
dma_addr_t tx_desc_dma_addr;
int napi_added;
};
/*
* GMAC TX/Rx APIs
*/
int syn_dp_cfg_rx_setup_rings(struct syn_dp_info *dev_info);
void syn_dp_cfg_rx_cleanup_rings(struct syn_dp_info *dev_info);
int syn_dp_cfg_tx_setup_rings(struct syn_dp_info *dev_info);
void syn_dp_cfg_tx_cleanup_rings(struct syn_dp_info *dev_info);
int syn_dp_rx(struct syn_dp_info_rx *rx_info, int budget);
int syn_dp_rx_refill(struct syn_dp_info_rx *rx_info);
int syn_dp_rx_refill_page_mode(struct syn_dp_info_rx *rx_info);
int syn_dp_tx(struct syn_dp_info_tx *tx_info, struct sk_buff *skb);
int syn_dp_tx_complete(struct syn_dp_info_tx *tx_info, int budget);
#endif /* __NSS_DP_SYN_DP__ */