linux/drivers/net/ethernet/qlogic/qede/qede.h

/* SPDX-License-Identifier: (GPL-2.0-only OR BSD-3-Clause) */
/* QLogic qede NIC Driver
 * Copyright (c) 2015-2017  QLogic Corporation
 * Copyright (c) 2019-2020 Marvell International Ltd.
 */

#ifndef _QEDE_H_
#define _QEDE_H_
#include <linux/workqueue.h>
#include <linux/netdevice.h>
#include <linux/interrupt.h>
#include <linux/bitmap.h>
#include <linux/kernel.h>
#include <linux/mutex.h>
#include <linux/bpf.h>
#include <net/xdp.h>
#include <linux/qed/qede_rdma.h>
#include <linux/io.h>
#ifdef CONFIG_RFS_ACCEL
#include <linux/cpu_rmap.h>
#endif
#include <linux/qed/common_hsi.h>
#include <linux/qed/eth_common.h>
#include <linux/qed/qed_if.h>
#include <linux/qed/qed_chain.h>
#include <linux/qed/qed_eth_if.h>

#include <net/pkt_cls.h>
#include <net/tc_act/tc_gact.h>

#define DRV_MODULE_SYM

struct qede_stats_common {};

struct qede_stats_bb {};

struct qede_stats_ah {};

struct qede_stats {};

struct qede_vlan {};

struct qede_rdma_dev {};

struct qede_ptp;

#define QEDE_RFS_MAX_FLTR

enum qede_flags_bit {};

#define QEDE_DUMP_MAX_ARGS
enum qede_dump_cmd {};

struct qede_dump_info {};

struct qede_coalesce {};

struct qede_dev {};

enum QEDE_STATE {};

#define HILO_U64(hi, lo)

#define MAX_NUM_TC
#define MAX_NUM_PRI

/* The driver supports the new build_skb() API:
 * RX ring buffer contains pointer to kmalloc() data only,
 * skb are built only after the frame was DMA-ed.
 */
struct sw_rx_data {};

enum qede_agg_state {};

struct qede_agg_info {};

struct qede_rx_queue {};

db_prod;

struct sw_tx_bd {};

struct sw_tx_xdp {};

struct qede_tx_queue {};

#define BD_UNMAP_ADDR(bd)
#define BD_SET_UNMAP_ADDR_LEN(bd, maddr, len)
#define BD_UNMAP_LEN(bd)

struct qede_fastpath {};

/* Debug print definitions */
#define DP_NAME(edev)

#define XMIT_PLAIN
#define XMIT_L4_CSUM
#define XMIT_LSO
#define XMIT_ENC
#define XMIT_ENC_GSO_L4_CSUM

#define QEDE_CSUM_ERROR
#define QEDE_CSUM_UNNECESSARY
#define QEDE_TUNN_CSUM_UNNECESSARY

#define QEDE_SP_RECOVERY
#define QEDE_SP_RX_MODE
#define QEDE_SP_RSVD1
#define QEDE_SP_RSVD2
#define QEDE_SP_HW_ERR
#define QEDE_SP_ARFS_CONFIG
#define QEDE_SP_AER
#define QEDE_SP_DISABLE

#ifdef CONFIG_RFS_ACCEL
int qede_rx_flow_steer(struct net_device *dev, const struct sk_buff *skb,
		       u16 rxq_index, u32 flow_id);
#define QEDE_SP_TASK_POLL_DELAY
#endif

void qede_process_arfs_filters(struct qede_dev *edev, bool free_fltr);
void qede_poll_for_freeing_arfs_filters(struct qede_dev *edev);
void qede_arfs_filter_op(void *dev, void *filter, u8 fw_rc);
void qede_free_arfs(struct qede_dev *edev);
int qede_alloc_arfs(struct qede_dev *edev);
int qede_add_cls_rule(struct qede_dev *edev, struct ethtool_rxnfc *info);
int qede_delete_flow_filter(struct qede_dev *edev, u64 cookie);
int qede_get_cls_rule_entry(struct qede_dev *edev, struct ethtool_rxnfc *cmd);
int qede_get_cls_rule_all(struct qede_dev *edev, struct ethtool_rxnfc *info,
			  u32 *rule_locs);
int qede_get_arfs_filter_count(struct qede_dev *edev);

struct qede_reload_args {};

/* Datapath functions definition */
netdev_tx_t qede_start_xmit(struct sk_buff *skb, struct net_device *ndev);
int qede_xdp_transmit(struct net_device *dev, int n_frames,
		      struct xdp_frame **frames, u32 flags);
u16 qede_select_queue(struct net_device *dev, struct sk_buff *skb,
		      struct net_device *sb_dev);
netdev_features_t qede_features_check(struct sk_buff *skb,
				      struct net_device *dev,
				      netdev_features_t features);
int qede_alloc_rx_buffer(struct qede_rx_queue *rxq, bool allow_lazy);
int qede_free_tx_pkt(struct qede_dev *edev,
		     struct qede_tx_queue *txq, int *len);
int qede_poll(struct napi_struct *napi, int budget);
irqreturn_t qede_msix_fp_int(int irq, void *fp_cookie);

/* Filtering function definitions */
void qede_force_mac(void *dev, u8 *mac, bool forced);
void qede_udp_ports_update(void *dev, u16 vxlan_port, u16 geneve_port);
int qede_set_mac_addr(struct net_device *ndev, void *p);

int qede_vlan_rx_add_vid(struct net_device *dev, __be16 proto, u16 vid);
int qede_vlan_rx_kill_vid(struct net_device *dev, __be16 proto, u16 vid);
void qede_vlan_mark_nonconfigured(struct qede_dev *edev);
int qede_configure_vlan_filters(struct qede_dev *edev);

netdev_features_t qede_fix_features(struct net_device *dev,
				    netdev_features_t features);
int qede_set_features(struct net_device *dev, netdev_features_t features);
void qede_set_rx_mode(struct net_device *ndev);
void qede_config_rx_mode(struct net_device *ndev);
void qede_fill_rss_params(struct qede_dev *edev,
			  struct qed_update_vport_rss_params *rss, u8 *update);

int qede_xdp(struct net_device *dev, struct netdev_bpf *xdp);

#ifdef CONFIG_DCB
void qede_set_dcbnl_ops(struct net_device *ndev);
#endif

void qede_config_debug(uint debug, u32 *p_dp_module, u8 *p_dp_level);
void qede_set_ethtool_ops(struct net_device *netdev);
void qede_set_udp_tunnels(struct qede_dev *edev);
void qede_reload(struct qede_dev *edev,
		 struct qede_reload_args *args, bool is_locked);
int qede_change_mtu(struct net_device *dev, int new_mtu);
void qede_fill_by_demand_stats(struct qede_dev *edev);
void __qede_lock(struct qede_dev *edev);
void __qede_unlock(struct qede_dev *edev);
bool qede_has_rx_work(struct qede_rx_queue *rxq);
int qede_txq_has_work(struct qede_tx_queue *txq);
void qede_recycle_rx_bd_ring(struct qede_rx_queue *rxq, u8 count);
void qede_update_rx_prod(struct qede_dev *edev, struct qede_rx_queue *rxq);
int qede_add_tc_flower_fltr(struct qede_dev *edev, __be16 proto,
			    struct flow_cls_offload *f);

void qede_forced_speed_maps_init(void);
int qede_set_coalesce(struct net_device *dev, struct ethtool_coalesce *coal,
		      struct kernel_ethtool_coalesce *kernel_coal,
		      struct netlink_ext_ack *extack);
int qede_set_per_coalesce(struct net_device *dev, u32 queue,
			  struct ethtool_coalesce *coal);

#define RX_RING_SIZE_POW
#define RX_RING_SIZE
#define NUM_RX_BDS_MAX
#define NUM_RX_BDS_MIN
#define NUM_RX_BDS_KDUMP_MIN
#define NUM_RX_BDS_DEF

#define TX_RING_SIZE_POW
#define TX_RING_SIZE
#define NUM_TX_BDS_MAX
#define NUM_TX_BDS_MIN
#define NUM_TX_BDS_KDUMP_MIN
#define NUM_TX_BDS_DEF

#define QEDE_MIN_PKT_LEN
#define QEDE_RX_HDR_SIZE
#define QEDE_MAX_JUMBO_PACKET_SIZE
#define for_each_queue(i)
#define for_each_cos_in_txq(edev, var)

#endif /* _QEDE_H_ */