hc
2024-10-22 8ac6c7a54ed1b98d142dce24b11c6de6a1e239a5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
/* 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;
 
   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