1
2
3
4
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
20 #define HINIC_DRV_NAME "hinic"
21
22 enum hinic_flags {
23 HINIC_LINK_UP = BIT(0),
24 HINIC_INTF_UP = BIT(1),
25 HINIC_RSS_ENABLE = BIT(2),
26 };
27
28 struct hinic_rx_mode_work {
29 struct work_struct work;
30 u32 rx_mode;
31 };
32
33 struct hinic_rss_type {
34 u8 tcp_ipv6_ext;
35 u8 ipv6_ext;
36 u8 tcp_ipv6;
37 u8 ipv6;
38 u8 tcp_ipv4;
39 u8 ipv4;
40 u8 udp_ipv6;
41 u8 udp_ipv4;
42 };
43
44 enum hinic_rss_hash_type {
45 HINIC_RSS_HASH_ENGINE_TYPE_XOR,
46 HINIC_RSS_HASH_ENGINE_TYPE_TOEP,
47 HINIC_RSS_HASH_ENGINE_TYPE_MAX,
48 };
49
50 struct hinic_dev {
51 struct net_device *netdev;
52 struct hinic_hwdev *hwdev;
53
54 u32 msg_enable;
55 unsigned int tx_weight;
56 unsigned int rx_weight;
57 u16 num_qps;
58 u16 max_qps;
59
60 unsigned int flags;
61
62 struct semaphore mgmt_lock;
63 unsigned long *vlan_bitmap;
64
65 struct hinic_rx_mode_work rx_mode_work;
66 struct workqueue_struct *workq;
67
68 struct hinic_txq *txqs;
69 struct hinic_rxq *rxqs;
70
71 struct hinic_txq_stats tx_stats;
72 struct hinic_rxq_stats rx_stats;
73
74 u8 rss_tmpl_idx;
75 u8 rss_hash_engine;
76 u16 num_rss;
77 u16 rss_limit;
78 struct hinic_rss_type rss_type;
79 u8 *rss_hkey_user;
80 s32 *rss_indir_user;
81 };
82
83 #endif