/* SPDX-License-Identifier: GPL-2.0-only */ /* * Huawei HiNIC PCI Express Linux driver * Copyright(c) 2017 Huawei Technologies Co., Ltd */ #ifndef HINIC_DEV_H #define HINIC_DEV_H #include #include #include #include #include #include "hinic_hw_dev.h" #include "hinic_tx.h" #include "hinic_rx.h" #include "hinic_sriov.h" #define HINIC_DRV_NAME "hinic" #define LP_PKT_CNT 64 #define HINIC_MAX_JUMBO_FRAME_SIZE 15872 #define HINIC_MAX_MTU_SIZE (HINIC_MAX_JUMBO_FRAME_SIZE - ETH_HLEN - ETH_FCS_LEN) #define HINIC_MIN_MTU_SIZE 256 enum hinic_flags { HINIC_LINK_UP = BIT(0), HINIC_INTF_UP = BIT(1), HINIC_RSS_ENABLE = BIT(2), HINIC_LINK_DOWN = BIT(3), HINIC_LP_TEST = BIT(4), }; struct hinic_rx_mode_work { struct work_struct work; u32 rx_mode; }; struct hinic_rss_type { u8 tcp_ipv6_ext; u8 ipv6_ext; u8 tcp_ipv6; u8 ipv6; u8 tcp_ipv4; u8 ipv4; u8 udp_ipv6; u8 udp_ipv4; }; enum hinic_rss_hash_type { HINIC_RSS_HASH_ENGINE_TYPE_XOR, HINIC_RSS_HASH_ENGINE_TYPE_TOEP, HINIC_RSS_HASH_ENGINE_TYPE_MAX, }; struct hinic_intr_coal_info { u8 pending_limt; u8 coalesce_timer_cfg; u8 resend_timer_cfg; }; enum hinic_dbg_type { HINIC_DBG_SQ_INFO, HINIC_DBG_RQ_INFO, HINIC_DBG_FUNC_TABLE, }; struct hinic_debug_priv { struct hinic_dev *dev; void *object; enum hinic_dbg_type type; struct dentry *root; int field_id[64]; }; struct hinic_dev { struct net_device *netdev; struct hinic_hwdev *hwdev; u32 msg_enable; unsigned int tx_weight; unsigned int rx_weight; u16 num_qps; u16 max_qps; unsigned int flags; struct semaphore mgmt_lock; unsigned long *vlan_bitmap; struct hinic_rx_mode_work rx_mode_work; struct workqueue_struct *workq; struct hinic_txq *txqs; struct hinic_rxq *rxqs; u16 sq_depth; u16 rq_depth; u8 rss_tmpl_idx; u8 rss_hash_engine; u16 num_rss; u16 rss_limit; struct hinic_rss_type rss_type; u8 *rss_hkey_user; s32 *rss_indir_user; struct hinic_intr_coal_info *rx_intr_coalesce; struct hinic_intr_coal_info *tx_intr_coalesce; struct hinic_sriov_info sriov_info; int lb_test_rx_idx; int lb_pkt_len; u8 *lb_test_rx_buf; struct dentry *dbgfs_root; struct dentry *sq_dbgfs; struct dentry *rq_dbgfs; struct dentry *func_tbl_dbgfs; struct hinic_debug_priv *dbg; struct devlink *devlink; bool cable_unplugged; bool module_unrecognized; }; struct hinic_devlink_priv { struct hinic_hwdev *hwdev; struct devlink_health_reporter *hw_fault_reporter; struct devlink_health_reporter *fw_fault_reporter; }; #endif