1 /* SPDX-License-Identifier: GPL-2.0-only */ 2 /* 3 * Huawei HiNIC PCI Express Linux driver 4 * Copyright(c) 2017 Huawei Technologies Co., Ltd 5 */ 6 7 #ifndef HINIC_DEV_H 8 #define HINIC_DEV_H 9 10 #include <linux/netdevice.h> 11 #include <linux/types.h> 12 #include <linux/semaphore.h> 13 #include <linux/workqueue.h> 14 #include <linux/bitops.h> 15 16 #include "hinic_hw_dev.h" 17 #include "hinic_tx.h" 18 #include "hinic_rx.h" 19 #include "hinic_sriov.h" 20 21 #define HINIC_DRV_NAME "hinic" 22 23 #define LP_PKT_CNT 64 24 25 #define HINIC_MAX_JUMBO_FRAME_SIZE 15872 26 #define HINIC_MAX_MTU_SIZE (HINIC_MAX_JUMBO_FRAME_SIZE - ETH_HLEN - ETH_FCS_LEN) 27 #define HINIC_MIN_MTU_SIZE 256 28 29 enum hinic_flags { 30 HINIC_LINK_UP = BIT(0), 31 HINIC_INTF_UP = BIT(1), 32 HINIC_RSS_ENABLE = BIT(2), 33 HINIC_LINK_DOWN = BIT(3), 34 HINIC_LP_TEST = BIT(4), 35 }; 36 37 struct hinic_rx_mode_work { 38 struct work_struct work; 39 u32 rx_mode; 40 }; 41 42 struct hinic_rss_type { 43 u8 tcp_ipv6_ext; 44 u8 ipv6_ext; 45 u8 tcp_ipv6; 46 u8 ipv6; 47 u8 tcp_ipv4; 48 u8 ipv4; 49 u8 udp_ipv6; 50 u8 udp_ipv4; 51 }; 52 53 enum hinic_rss_hash_type { 54 HINIC_RSS_HASH_ENGINE_TYPE_XOR, 55 HINIC_RSS_HASH_ENGINE_TYPE_TOEP, 56 HINIC_RSS_HASH_ENGINE_TYPE_MAX, 57 }; 58 59 struct hinic_intr_coal_info { 60 u8 pending_limt; 61 u8 coalesce_timer_cfg; 62 u8 resend_timer_cfg; 63 }; 64 65 enum hinic_dbg_type { 66 HINIC_DBG_SQ_INFO, 67 HINIC_DBG_RQ_INFO, 68 HINIC_DBG_FUNC_TABLE, 69 }; 70 71 struct hinic_debug_priv { 72 struct hinic_dev *dev; 73 void *object; 74 enum hinic_dbg_type type; 75 struct dentry *root; 76 int field_id[64]; 77 }; 78 79 struct hinic_dev { 80 struct net_device *netdev; 81 struct hinic_hwdev *hwdev; 82 83 u32 msg_enable; 84 unsigned int tx_weight; 85 unsigned int rx_weight; 86 u16 num_qps; 87 u16 max_qps; 88 89 unsigned int flags; 90 91 struct semaphore mgmt_lock; 92 unsigned long *vlan_bitmap; 93 94 struct hinic_rx_mode_work rx_mode_work; 95 struct workqueue_struct *workq; 96 97 struct hinic_txq *txqs; 98 struct hinic_rxq *rxqs; 99 u16 sq_depth; 100 u16 rq_depth; 101 102 u8 rss_tmpl_idx; 103 u8 rss_hash_engine; 104 u16 num_rss; 105 u16 rss_limit; 106 struct hinic_rss_type rss_type; 107 u8 *rss_hkey_user; 108 s32 *rss_indir_user; 109 struct hinic_intr_coal_info *rx_intr_coalesce; 110 struct hinic_intr_coal_info *tx_intr_coalesce; 111 struct hinic_sriov_info sriov_info; 112 int lb_test_rx_idx; 113 int lb_pkt_len; 114 u8 *lb_test_rx_buf; 115 116 struct dentry *dbgfs_root; 117 struct dentry *sq_dbgfs; 118 struct dentry *rq_dbgfs; 119 struct dentry *func_tbl_dbgfs; 120 struct hinic_debug_priv *dbg; 121 struct devlink *devlink; 122 bool cable_unplugged; 123 bool module_unrecognized; 124 }; 125 126 struct hinic_devlink_priv { 127 struct hinic_hwdev *hwdev; 128 struct devlink_health_reporter *hw_fault_reporter; 129 struct devlink_health_reporter *fw_fault_reporter; 130 }; 131 132 #endif 133