1 /*
2  * Huawei HiNIC PCI Express Linux driver
3  * Copyright(c) 2017 Huawei Technologies Co., Ltd
4  *
5  * This program is free software; you can redistribute it and/or modify it
6  * under the terms and conditions of the GNU General Public License,
7  * version 2, as published by the Free Software Foundation.
8  *
9  * This program is distributed in the hope it will be useful, but WITHOUT
10  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
12  * for more details.
13  *
14  */
15 
16 #ifndef HINIC_DEV_H
17 #define HINIC_DEV_H
18 
19 #include <linux/netdevice.h>
20 #include <linux/types.h>
21 #include <linux/semaphore.h>
22 #include <linux/workqueue.h>
23 #include <linux/bitops.h>
24 
25 #include "hinic_hw_dev.h"
26 #include "hinic_tx.h"
27 #include "hinic_rx.h"
28 
29 #define HINIC_DRV_NAME          "hinic"
30 
31 enum hinic_flags {
32 	HINIC_LINK_UP = BIT(0),
33 	HINIC_INTF_UP = BIT(1),
34 };
35 
36 struct hinic_rx_mode_work {
37 	struct work_struct      work;
38 	u32                     rx_mode;
39 };
40 
41 struct hinic_dev {
42 	struct net_device               *netdev;
43 	struct hinic_hwdev              *hwdev;
44 
45 	u32                             msg_enable;
46 	unsigned int                    tx_weight;
47 	unsigned int                    rx_weight;
48 
49 	unsigned int                    flags;
50 
51 	struct semaphore                mgmt_lock;
52 	unsigned long                   *vlan_bitmap;
53 
54 	struct hinic_rx_mode_work       rx_mode_work;
55 	struct workqueue_struct         *workq;
56 
57 	struct hinic_txq                *txqs;
58 	struct hinic_rxq                *rxqs;
59 
60 	struct hinic_txq_stats          tx_stats;
61 	struct hinic_rxq_stats          rx_stats;
62 };
63 
64 #endif
65