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