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 | = 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 { |
43 | u8 ; |
44 | u8 ; |
45 | u8 ; |
46 | u8 ; |
47 | u8 ; |
48 | u8 ; |
49 | u8 ; |
50 | u8 ; |
51 | }; |
52 | |
53 | enum { |
54 | , |
55 | , |
56 | , |
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 ; |
103 | u8 ; |
104 | u16 ; |
105 | u16 ; |
106 | struct hinic_rss_type ; |
107 | u8 *; |
108 | s32 *; |
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 | |