forked from Qortal/Brooklyn
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
131 lines
2.7 KiB
131 lines
2.7 KiB
/* 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 <linux/netdevice.h> |
|
#include <linux/types.h> |
|
#include <linux/semaphore.h> |
|
#include <linux/workqueue.h> |
|
#include <linux/bitops.h> |
|
|
|
#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 |
|
|
|
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; |
|
|
|
struct hinic_txq_stats tx_stats; |
|
struct hinic_rxq_stats rx_stats; |
|
|
|
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
|
|
|