12025cf9eSThomas Gleixner /* SPDX-License-Identifier: GPL-2.0-only */ 251ba902aSAviad Krawczyk /* 351ba902aSAviad Krawczyk * Huawei HiNIC PCI Express Linux driver 451ba902aSAviad Krawczyk * Copyright(c) 2017 Huawei Technologies Co., Ltd 551ba902aSAviad Krawczyk */ 651ba902aSAviad Krawczyk 751ba902aSAviad Krawczyk #ifndef HINIC_DEV_H 851ba902aSAviad Krawczyk #define HINIC_DEV_H 951ba902aSAviad Krawczyk 1051ba902aSAviad Krawczyk #include <linux/netdevice.h> 1151ba902aSAviad Krawczyk #include <linux/types.h> 1225a3ba61SAviad Krawczyk #include <linux/semaphore.h> 13c4d06d2dSAviad Krawczyk #include <linux/workqueue.h> 14c4d06d2dSAviad Krawczyk #include <linux/bitops.h> 1551ba902aSAviad Krawczyk 1651ba902aSAviad Krawczyk #include "hinic_hw_dev.h" 17c3e79bafSAviad Krawczyk #include "hinic_tx.h" 18c3e79bafSAviad Krawczyk #include "hinic_rx.h" 197dd29ee1SLuo bin #include "hinic_sriov.h" 2051ba902aSAviad Krawczyk 2151ba902aSAviad Krawczyk #define HINIC_DRV_NAME "hinic" 2251ba902aSAviad Krawczyk 234aa218a4SLuo bin #define LP_PKT_CNT 64 244aa218a4SLuo bin 25c4d06d2dSAviad Krawczyk enum hinic_flags { 26c4d06d2dSAviad Krawczyk HINIC_LINK_UP = BIT(0), 27c4d06d2dSAviad Krawczyk HINIC_INTF_UP = BIT(1), 28421e9526SXue Chaojing HINIC_RSS_ENABLE = BIT(2), 297dd29ee1SLuo bin HINIC_LINK_DOWN = BIT(3), 304aa218a4SLuo bin HINIC_LP_TEST = BIT(4), 31c4d06d2dSAviad Krawczyk }; 32c4d06d2dSAviad Krawczyk 33c4d06d2dSAviad Krawczyk struct hinic_rx_mode_work { 34c4d06d2dSAviad Krawczyk struct work_struct work; 35c4d06d2dSAviad Krawczyk u32 rx_mode; 36c4d06d2dSAviad Krawczyk }; 37c4d06d2dSAviad Krawczyk 38421e9526SXue Chaojing struct hinic_rss_type { 39421e9526SXue Chaojing u8 tcp_ipv6_ext; 40421e9526SXue Chaojing u8 ipv6_ext; 41421e9526SXue Chaojing u8 tcp_ipv6; 42421e9526SXue Chaojing u8 ipv6; 43421e9526SXue Chaojing u8 tcp_ipv4; 44421e9526SXue Chaojing u8 ipv4; 45421e9526SXue Chaojing u8 udp_ipv6; 46421e9526SXue Chaojing u8 udp_ipv4; 47421e9526SXue Chaojing }; 48421e9526SXue Chaojing 49421e9526SXue Chaojing enum hinic_rss_hash_type { 50421e9526SXue Chaojing HINIC_RSS_HASH_ENGINE_TYPE_XOR, 51421e9526SXue Chaojing HINIC_RSS_HASH_ENGINE_TYPE_TOEP, 52421e9526SXue Chaojing HINIC_RSS_HASH_ENGINE_TYPE_MAX, 53421e9526SXue Chaojing }; 54421e9526SXue Chaojing 55a0337c0dSLuo bin struct hinic_intr_coal_info { 56a0337c0dSLuo bin u8 pending_limt; 57a0337c0dSLuo bin u8 coalesce_timer_cfg; 58a0337c0dSLuo bin u8 resend_timer_cfg; 59a0337c0dSLuo bin }; 60a0337c0dSLuo bin 61253ac3a9SLuo bin enum hinic_dbg_type { 62253ac3a9SLuo bin HINIC_DBG_SQ_INFO, 63*626f0603SLuo bin HINIC_DBG_RQ_INFO, 64253ac3a9SLuo bin }; 65253ac3a9SLuo bin 66253ac3a9SLuo bin struct hinic_debug_priv { 67253ac3a9SLuo bin struct hinic_dev *dev; 68253ac3a9SLuo bin void *object; 69253ac3a9SLuo bin enum hinic_dbg_type type; 70253ac3a9SLuo bin struct dentry *root; 71253ac3a9SLuo bin int field_id[64]; 72253ac3a9SLuo bin }; 73253ac3a9SLuo bin 7451ba902aSAviad Krawczyk struct hinic_dev { 7551ba902aSAviad Krawczyk struct net_device *netdev; 7651ba902aSAviad Krawczyk struct hinic_hwdev *hwdev; 7751ba902aSAviad Krawczyk 7851ba902aSAviad Krawczyk u32 msg_enable; 7900e57a6dSAviad Krawczyk unsigned int tx_weight; 80e2585ea7SAviad Krawczyk unsigned int rx_weight; 81421e9526SXue Chaojing u16 num_qps; 82421e9526SXue Chaojing u16 max_qps; 8325a3ba61SAviad Krawczyk 84c4d06d2dSAviad Krawczyk unsigned int flags; 85c4d06d2dSAviad Krawczyk 8625a3ba61SAviad Krawczyk struct semaphore mgmt_lock; 8725a3ba61SAviad Krawczyk unsigned long *vlan_bitmap; 88c4d06d2dSAviad Krawczyk 89c4d06d2dSAviad Krawczyk struct hinic_rx_mode_work rx_mode_work; 90c4d06d2dSAviad Krawczyk struct workqueue_struct *workq; 91c3e79bafSAviad Krawczyk 92c3e79bafSAviad Krawczyk struct hinic_txq *txqs; 93c3e79bafSAviad Krawczyk struct hinic_rxq *rxqs; 94bcab6782SLuo bin u16 sq_depth; 95bcab6782SLuo bin u16 rq_depth; 96edd384f6SAviad Krawczyk 97edd384f6SAviad Krawczyk struct hinic_txq_stats tx_stats; 98edd384f6SAviad Krawczyk struct hinic_rxq_stats rx_stats; 99421e9526SXue Chaojing 100421e9526SXue Chaojing u8 rss_tmpl_idx; 101421e9526SXue Chaojing u8 rss_hash_engine; 102421e9526SXue Chaojing u16 num_rss; 103421e9526SXue Chaojing u16 rss_limit; 104421e9526SXue Chaojing struct hinic_rss_type rss_type; 1054fdc51bbSXue Chaojing u8 *rss_hkey_user; 1064fdc51bbSXue Chaojing s32 *rss_indir_user; 107a0337c0dSLuo bin struct hinic_intr_coal_info *rx_intr_coalesce; 108a0337c0dSLuo bin struct hinic_intr_coal_info *tx_intr_coalesce; 1097dd29ee1SLuo bin struct hinic_sriov_info sriov_info; 1104aa218a4SLuo bin int lb_test_rx_idx; 1114aa218a4SLuo bin int lb_pkt_len; 1124aa218a4SLuo bin u8 *lb_test_rx_buf; 113253ac3a9SLuo bin 114253ac3a9SLuo bin struct dentry *dbgfs_root; 115253ac3a9SLuo bin struct dentry *sq_dbgfs; 116*626f0603SLuo bin struct dentry *rq_dbgfs; 1175e126e7cSLuo bin struct devlink *devlink; 118c15850c7SLuo bin bool cable_unplugged; 119c15850c7SLuo bin bool module_unrecognized; 1205e126e7cSLuo bin }; 1215e126e7cSLuo bin 1225e126e7cSLuo bin struct hinic_devlink_priv { 1235e126e7cSLuo bin struct hinic_hwdev *hwdev; 124c15850c7SLuo bin struct devlink_health_reporter *hw_fault_reporter; 125c15850c7SLuo bin struct devlink_health_reporter *fw_fault_reporter; 12651ba902aSAviad Krawczyk }; 12751ba902aSAviad Krawczyk 12851ba902aSAviad Krawczyk #endif 129