]>
Commit | Line | Data |
---|---|---|
2874c5fd | 1 | /* SPDX-License-Identifier: GPL-2.0-or-later */ |
b5996f11 | 2 | /* |
3 | * Copyright (c) 2014-2015 Hisilicon Limited. | |
b5996f11 | 4 | */ |
5 | ||
6 | #ifndef __HNS_ENET_H | |
7 | #define __HNS_ENET_H | |
8 | ||
9 | #include <linux/netdevice.h> | |
10 | #include <linux/of_net.h> | |
11 | #include <linux/of_mdio.h> | |
12 | #include <linux/timer.h> | |
13 | #include <linux/workqueue.h> | |
14 | ||
15 | #include "hnae.h" | |
16 | ||
406adee9 YZZ |
17 | #define HNS_DEBUG_OFFSET 6 |
18 | #define HNS_SRV_OFFSET 2 | |
19 | ||
b5996f11 | 20 | enum hns_nic_state { |
21 | NIC_STATE_TESTING = 0, | |
22 | NIC_STATE_RESETTING, | |
23 | NIC_STATE_REINITING, | |
24 | NIC_STATE_DOWN, | |
25 | NIC_STATE_DISABLED, | |
26 | NIC_STATE_REMOVING, | |
27 | NIC_STATE_SERVICE_INITED, | |
28 | NIC_STATE_SERVICE_SCHED, | |
29 | NIC_STATE2_RESET_REQUESTED, | |
30 | NIC_STATE_MAX | |
31 | }; | |
32 | ||
33 | struct hns_nic_ring_data { | |
34 | struct hnae_ring *ring; | |
35 | struct napi_struct napi; | |
ba2d0791 | 36 | cpumask_t mask; /* affinity mask */ |
b8c17f70 | 37 | u32 queue_index; |
b5996f11 | 38 | int (*poll_one)(struct hns_nic_ring_data *, int, void *); |
39 | void (*ex_process)(struct hns_nic_ring_data *, struct sk_buff *); | |
36eedfde | 40 | bool (*fini_process)(struct hns_nic_ring_data *); |
b5996f11 | 41 | }; |
42 | ||
13ac695e S |
43 | /* compatible the difference between two versions */ |
44 | struct hns_nic_ops { | |
45 | void (*fill_desc)(struct hnae_ring *ring, void *priv, | |
46 | int size, dma_addr_t dma, int frag_end, | |
47 | int buf_num, enum hns_desc_type type, int mtu); | |
48 | int (*maybe_stop_tx)(struct sk_buff **out_skb, | |
49 | int *bnum, struct hnae_ring *ring); | |
50 | void (*get_rxd_bnum)(u32 bnum_flag, int *out_bnum); | |
51 | }; | |
52 | ||
b5996f11 | 53 | struct hns_nic_priv { |
7b2acae6 | 54 | const struct fwnode_handle *fwnode; |
b5996f11 | 55 | u32 enet_ver; |
56 | u32 port_id; | |
57 | int phy_mode; | |
58 | int phy_led_val; | |
b5996f11 | 59 | struct net_device *netdev; |
60 | struct device *dev; | |
61 | struct hnae_handle *ae_handle; | |
62 | ||
13ac695e S |
63 | struct hns_nic_ops ops; |
64 | ||
b5996f11 | 65 | /* the cb for nic to manage the ring buffer, the first half of the |
66 | * array is for tx_ring and vice versa for the second half | |
67 | */ | |
68 | struct hns_nic_ring_data *ring_data; | |
69 | ||
70 | /* The most recently read link state */ | |
71 | int link; | |
72 | u64 tx_timeout_count; | |
73 | ||
74 | unsigned long state; | |
75 | ||
76 | struct timer_list service_timer; | |
77 | ||
78 | struct work_struct service_task; | |
79 | ||
80 | struct notifier_block notifier_block; | |
81 | }; | |
82 | ||
83 | #define tx_ring_data(priv, idx) ((priv)->ring_data[idx]) | |
84 | #define rx_ring_data(priv, idx) \ | |
85 | ((priv)->ring_data[(priv)->ae_handle->q_num + (idx)]) | |
86 | ||
87 | void hns_ethtool_set_ops(struct net_device *ndev); | |
88 | void hns_nic_net_reset(struct net_device *ndev); | |
89 | void hns_nic_net_reinit(struct net_device *netdev); | |
90 | int hns_nic_init_phy(struct net_device *ndev, struct hnae_handle *h); | |
27463ad9 YL |
91 | netdev_tx_t hns_nic_net_xmit_hw(struct net_device *ndev, |
92 | struct sk_buff *skb, | |
93 | struct hns_nic_ring_data *ring_data); | |
b5996f11 | 94 | |
95 | #endif /**__HNS_ENET_H */ |