1 /* SPDX-License-Identifier: GPL-2.0-only */
2 /*
3  *  FUJITSU Extended Socket Network Device driver
4  *  Copyright (c) 2015 FUJITSU LIMITED
5  */
6 
7 #ifndef FJES_H_
8 #define FJES_H_
9 
10 #include <linux/acpi.h>
11 
12 #include "fjes_hw.h"
13 
14 #define FJES_ACPI_SYMBOL	"Extended Socket"
15 #define FJES_MAX_QUEUES		1
16 #define FJES_TX_RETRY_INTERVAL	(20 * HZ)
17 #define FJES_TX_RETRY_TIMEOUT	(100)
18 #define FJES_TX_TX_STALL_TIMEOUT	(FJES_TX_RETRY_INTERVAL / 2)
19 #define FJES_OPEN_ZONE_UPDATE_WAIT	(300) /* msec */
20 #define FJES_IRQ_WATCH_DELAY	(HZ)
21 
22 /* board specific private data structure */
23 struct fjes_adapter {
24 	struct net_device *netdev;
25 	struct platform_device *plat_dev;
26 
27 	struct napi_struct napi;
28 	struct rtnl_link_stats64 stats64;
29 
30 	unsigned int tx_retry_count;
31 	unsigned long tx_start_jiffies;
32 	unsigned long rx_last_jiffies;
33 	bool unset_rx_last;
34 
35 	struct work_struct force_close_task;
36 	bool force_reset;
37 	bool open_guard;
38 
39 	bool irq_registered;
40 
41 	struct workqueue_struct *txrx_wq;
42 	struct workqueue_struct *control_wq;
43 
44 	struct work_struct tx_stall_task;
45 	struct work_struct raise_intr_rxdata_task;
46 
47 	struct work_struct unshare_watch_task;
48 	unsigned long unshare_watch_bitmask;
49 
50 	struct delayed_work interrupt_watch_task;
51 	bool interrupt_watch_enable;
52 
53 	struct fjes_hw hw;
54 
55 #ifdef CONFIG_DEBUG_FS
56 	struct dentry *dbg_adapter;
57 #endif
58 };
59 
60 extern char fjes_driver_name[];
61 extern char fjes_driver_version[];
62 extern const u32 fjes_support_mtu[];
63 
64 void fjes_set_ethtool_ops(struct net_device *);
65 
66 #ifdef CONFIG_DEBUG_FS
67 void fjes_dbg_adapter_init(struct fjes_adapter *adapter);
68 void fjes_dbg_adapter_exit(struct fjes_adapter *adapter);
69 void fjes_dbg_init(void);
70 void fjes_dbg_exit(void);
71 #else
fjes_dbg_adapter_init(struct fjes_adapter * adapter)72 static inline void fjes_dbg_adapter_init(struct fjes_adapter *adapter) {}
fjes_dbg_adapter_exit(struct fjes_adapter * adapter)73 static inline void fjes_dbg_adapter_exit(struct fjes_adapter *adapter) {}
fjes_dbg_init(void)74 static inline void fjes_dbg_init(void) {}
fjes_dbg_exit(void)75 static inline void fjes_dbg_exit(void) {}
76 #endif /* CONFIG_DEBUG_FS */
77 
78 #endif /* FJES_H_ */
79