forked from ~ljy/RK356X_SDK_RELEASE

hc
2024-01-05 071106ecf68c401173c58808b1cf5f68cc50d390
kernel/drivers/net/ethernet/aquantia/atlantic/aq_hw.h
....@@ -1,10 +1,8 @@
1
-/*
2
- * aQuantia Corporation Network Driver
3
- * Copyright (C) 2014-2017 aQuantia Corporation. All rights reserved
1
+/* SPDX-License-Identifier: GPL-2.0-only */
2
+/* Atlantic Network Driver
43 *
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.
4
+ * Copyright (C) 2014-2019 aQuantia Corporation
5
+ * Copyright (C) 2019-2020 Marvell International Ltd.
86 */
97
108 /* File aq_hw.h: Declaration of abstract interface for NIC hardware specific
....@@ -17,6 +15,31 @@
1715 #include "aq_common.h"
1816 #include "aq_rss.h"
1917 #include "hw_atl/hw_atl_utils.h"
18
+
19
+#define AQ_HW_MAC_COUNTER_HZ 312500000ll
20
+#define AQ_HW_PHY_COUNTER_HZ 160000000ll
21
+
22
+enum aq_tc_mode {
23
+ AQ_TC_MODE_INVALID = -1,
24
+ AQ_TC_MODE_8TCS,
25
+ AQ_TC_MODE_4TCS,
26
+};
27
+
28
+#define AQ_RX_FIRST_LOC_FVLANID 0U
29
+#define AQ_RX_LAST_LOC_FVLANID 15U
30
+#define AQ_RX_FIRST_LOC_FETHERT 16U
31
+#define AQ_RX_LAST_LOC_FETHERT 31U
32
+#define AQ_RX_FIRST_LOC_FL3L4 32U
33
+#define AQ_RX_LAST_LOC_FL3L4 39U
34
+#define AQ_RX_MAX_RXNFC_LOC AQ_RX_LAST_LOC_FL3L4
35
+#define AQ_VLAN_MAX_FILTERS \
36
+ (AQ_RX_LAST_LOC_FVLANID - AQ_RX_FIRST_LOC_FVLANID + 1U)
37
+#define AQ_RX_QUEUE_NOT_ASSIGNED 0xFFU
38
+
39
+#define AQ_FRAC_PER_NS 0x100000000LL
40
+
41
+/* Used for rate to Mbps conversion */
42
+#define AQ_MBPS_DIVISOR 125000 /* 1000000 / 8 */
2043
2144 /* NIC H/W capabilities */
2245 struct aq_hw_caps_s {
....@@ -35,7 +58,7 @@
3558 u32 mac_regs_count;
3659 u32 hw_alive_check_addr;
3760 u8 msix_irqs;
38
- u8 tcs;
61
+ u8 tcs_max;
3962 u8 rxd_alignment;
4063 u8 rxd_size;
4164 u8 txd_alignment;
....@@ -44,13 +67,21 @@
4467 u8 rx_rings;
4568 bool flow_control;
4669 bool is_64_dma;
70
+ bool op64bit;
71
+ u32 quirks;
72
+ u32 priv_data_len;
4773 };
4874
4975 struct aq_hw_link_status_s {
5076 unsigned int mbps;
77
+ bool full_duplex;
78
+ u32 lp_link_speed_msk;
79
+ u32 lp_flow_control;
5180 };
5281
5382 struct aq_stats_s {
83
+ u64 brc;
84
+ u64 btc;
5485 u64 uprc;
5586 u64 mprc;
5687 u64 bprc;
....@@ -77,6 +108,8 @@
77108 #define AQ_HW_IRQ_MSI 2U
78109 #define AQ_HW_IRQ_MSIX 3U
79110
111
+#define AQ_HW_SERVICE_IRQS 1U
112
+
80113 #define AQ_HW_POWER_STATE_D0 0U
81114 #define AQ_HW_POWER_STATE_D3 3U
82115
....@@ -84,6 +117,7 @@
84117 #define AQ_HW_FLAG_STOPPING 0x00000008U
85118 #define AQ_HW_FLAG_RESETTING 0x00000010U
86119 #define AQ_HW_FLAG_CLOSING 0x00000020U
120
+#define AQ_HW_PTP_AVAILABLE 0x01000000U
87121 #define AQ_HW_LINK_DOWN 0x04000000U
88122 #define AQ_HW_FLAG_ERR_UNPLUG 0x40000000U
89123 #define AQ_HW_FLAG_ERR_HW 0x80000000U
....@@ -103,7 +137,42 @@
103137 #define AQ_HW_TXD_MULTIPLE 8U
104138 #define AQ_HW_RXD_MULTIPLE 8U
105139
140
+#define AQ_HW_QUEUES_MAX 32U
106141 #define AQ_HW_MULTICAST_ADDRESS_MAX 32U
142
+
143
+#define AQ_HW_PTP_TC 2U
144
+
145
+#define AQ_HW_LED_BLINK 0x2U
146
+#define AQ_HW_LED_DEFAULT 0x0U
147
+
148
+#define AQ_HW_MEDIA_DETECT_CNT 6000
149
+
150
+enum aq_priv_flags {
151
+ AQ_HW_LOOPBACK_DMA_SYS,
152
+ AQ_HW_LOOPBACK_PKT_SYS,
153
+ AQ_HW_LOOPBACK_DMA_NET,
154
+ AQ_HW_LOOPBACK_PHYINT_SYS,
155
+ AQ_HW_LOOPBACK_PHYEXT_SYS,
156
+};
157
+
158
+#define AQ_HW_LOOPBACK_MASK (BIT(AQ_HW_LOOPBACK_DMA_SYS) |\
159
+ BIT(AQ_HW_LOOPBACK_PKT_SYS) |\
160
+ BIT(AQ_HW_LOOPBACK_DMA_NET) |\
161
+ BIT(AQ_HW_LOOPBACK_PHYINT_SYS) |\
162
+ BIT(AQ_HW_LOOPBACK_PHYEXT_SYS))
163
+
164
+#define ATL_HW_CHIP_MIPS 0x00000001U
165
+#define ATL_HW_CHIP_TPO2 0x00000002U
166
+#define ATL_HW_CHIP_RPF2 0x00000004U
167
+#define ATL_HW_CHIP_MPI_AQ 0x00000010U
168
+#define ATL_HW_CHIP_ATLANTIC 0x00800000U
169
+#define ATL_HW_CHIP_REVISION_A0 0x01000000U
170
+#define ATL_HW_CHIP_REVISION_B0 0x02000000U
171
+#define ATL_HW_CHIP_REVISION_B1 0x04000000U
172
+#define ATL_HW_CHIP_ANTIGUA 0x08000000U
173
+
174
+#define ATL_HW_IS_CHIP_FEATURE(_HW_, _F_) (!!(ATL_HW_CHIP_##_F_ & \
175
+ (_HW_)->chip_features))
107176
108177 struct aq_hw_s {
109178 atomic_t flags;
....@@ -112,7 +181,7 @@
112181 const struct aq_fw_ops *aq_fw_ops;
113182 void __iomem *mmio;
114183 struct aq_hw_link_status_s aq_link_status;
115
- struct hw_aq_atl_utils_mbox mbox;
184
+ struct hw_atl_utils_mbox mbox;
116185 struct hw_atl_stats_s last_stats;
117186 struct aq_stats_s curr_stats;
118187 u64 speed;
....@@ -123,13 +192,18 @@
123192 atomic_t dpc;
124193 u32 mbox_addr;
125194 u32 rpc_addr;
195
+ u32 settings_addr;
126196 u32 rpc_tid;
127
- struct hw_aq_atl_utils_fw_rpc rpc;
197
+ struct hw_atl_utils_fw_rpc rpc;
198
+ s64 ptp_clk_offset;
199
+ u16 phy_id;
200
+ void *priv;
128201 };
129202
130203 struct aq_ring_s;
131204 struct aq_ring_param_s;
132205 struct sk_buff;
206
+struct aq_rx_filter_l3l4;
133207
134208 struct aq_hw_ops {
135209
....@@ -146,6 +220,11 @@
146220 struct aq_ring_s *aq_ring);
147221
148222 int (*hw_set_mac_address)(struct aq_hw_s *self, u8 *mac_addr);
223
+
224
+ int (*hw_soft_reset)(struct aq_hw_s *self);
225
+
226
+ int (*hw_prepare)(struct aq_hw_s *self,
227
+ const struct aq_fw_ops **fw_ops);
149228
150229 int (*hw_reset)(struct aq_hw_s *self);
151230
....@@ -183,6 +262,23 @@
183262 int (*hw_packet_filter_set)(struct aq_hw_s *self,
184263 unsigned int packet_filter);
185264
265
+ int (*hw_filter_l3l4_set)(struct aq_hw_s *self,
266
+ struct aq_rx_filter_l3l4 *data);
267
+
268
+ int (*hw_filter_l3l4_clear)(struct aq_hw_s *self,
269
+ struct aq_rx_filter_l3l4 *data);
270
+
271
+ int (*hw_filter_l2_set)(struct aq_hw_s *self,
272
+ struct aq_rx_filter_l2 *data);
273
+
274
+ int (*hw_filter_l2_clear)(struct aq_hw_s *self,
275
+ struct aq_rx_filter_l2 *data);
276
+
277
+ int (*hw_filter_vlan_set)(struct aq_hw_s *self,
278
+ struct aq_rx_filter_vlan *aq_vlans);
279
+
280
+ int (*hw_filter_vlan_ctrl)(struct aq_hw_s *self, bool enable);
281
+
186282 int (*hw_multicast_list_set)(struct aq_hw_s *self,
187283 u8 ar_mac[AQ_HW_MULTICAST_ADDRESS_MAX]
188284 [ETH_ALEN],
....@@ -196,15 +292,54 @@
196292 int (*hw_rss_hash_set)(struct aq_hw_s *self,
197293 struct aq_rss_parameters *rss_params);
198294
295
+ int (*hw_tc_rate_limit_set)(struct aq_hw_s *self);
296
+
199297 int (*hw_get_regs)(struct aq_hw_s *self,
200298 const struct aq_hw_caps_s *aq_hw_caps,
201299 u32 *regs_buff);
202300
203301 struct aq_stats_s *(*hw_get_hw_stats)(struct aq_hw_s *self);
204302
205
- int (*hw_get_fw_version)(struct aq_hw_s *self, u32 *fw_version);
303
+ u32 (*hw_get_fw_version)(struct aq_hw_s *self);
206304
207
- int (*hw_set_power)(struct aq_hw_s *self, unsigned int power_state);
305
+ int (*hw_set_offload)(struct aq_hw_s *self,
306
+ struct aq_nic_cfg_s *aq_nic_cfg);
307
+
308
+ int (*hw_ring_hwts_rx_fill)(struct aq_hw_s *self,
309
+ struct aq_ring_s *aq_ring);
310
+
311
+ int (*hw_ring_hwts_rx_receive)(struct aq_hw_s *self,
312
+ struct aq_ring_s *ring);
313
+
314
+ void (*hw_get_ptp_ts)(struct aq_hw_s *self, u64 *stamp);
315
+
316
+ int (*hw_adj_clock_freq)(struct aq_hw_s *self, s32 delta);
317
+
318
+ int (*hw_adj_sys_clock)(struct aq_hw_s *self, s64 delta);
319
+
320
+ int (*hw_set_sys_clock)(struct aq_hw_s *self, u64 time, u64 ts);
321
+
322
+ int (*hw_ts_to_sys_clock)(struct aq_hw_s *self, u64 ts, u64 *time);
323
+
324
+ int (*hw_gpio_pulse)(struct aq_hw_s *self, u32 index, u64 start,
325
+ u32 period);
326
+
327
+ int (*hw_extts_gpio_enable)(struct aq_hw_s *self, u32 index,
328
+ u32 enable);
329
+
330
+ int (*hw_get_sync_ts)(struct aq_hw_s *self, u64 *ts);
331
+
332
+ u16 (*rx_extract_ts)(struct aq_hw_s *self, u8 *p, unsigned int len,
333
+ u64 *timestamp);
334
+
335
+ int (*extract_hwts)(struct aq_hw_s *self, u8 *p, unsigned int len,
336
+ u64 *timestamp);
337
+
338
+ int (*hw_set_fc)(struct aq_hw_s *self, u32 fc, u32 tc);
339
+
340
+ int (*hw_set_loopback)(struct aq_hw_s *self, u32 mode, bool enable);
341
+
342
+ int (*hw_get_mac_temp)(struct aq_hw_s *self, u32 *temp);
208343 };
209344
210345 struct aq_fw_ops {
....@@ -227,7 +362,43 @@
227362
228363 int (*update_stats)(struct aq_hw_s *self);
229364
365
+ int (*get_mac_temp)(struct aq_hw_s *self, int *temp);
366
+
367
+ int (*get_phy_temp)(struct aq_hw_s *self, int *temp);
368
+
369
+ u32 (*get_flow_control)(struct aq_hw_s *self, u32 *fcmode);
370
+
230371 int (*set_flow_control)(struct aq_hw_s *self);
372
+
373
+ int (*led_control)(struct aq_hw_s *self, u32 mode);
374
+
375
+ int (*set_phyloopback)(struct aq_hw_s *self, u32 mode, bool enable);
376
+
377
+ int (*set_power)(struct aq_hw_s *self, unsigned int power_state,
378
+ u8 *mac);
379
+
380
+ int (*send_fw_request)(struct aq_hw_s *self,
381
+ const struct hw_fw_request_iface *fw_req,
382
+ size_t size);
383
+
384
+ void (*enable_ptp)(struct aq_hw_s *self, int enable);
385
+
386
+ void (*adjust_ptp)(struct aq_hw_s *self, uint64_t adj);
387
+
388
+ int (*set_eee_rate)(struct aq_hw_s *self, u32 speed);
389
+
390
+ int (*get_eee_rate)(struct aq_hw_s *self, u32 *rate,
391
+ u32 *supported_rates);
392
+
393
+ int (*set_downshift)(struct aq_hw_s *self, u32 counter);
394
+
395
+ int (*set_media_detect)(struct aq_hw_s *self, bool enable);
396
+
397
+ u32 (*get_link_capabilities)(struct aq_hw_s *self);
398
+
399
+ int (*send_macsec_req)(struct aq_hw_s *self,
400
+ struct macsec_msg_fw_request *msg,
401
+ struct macsec_msg_fw_response *resp);
231402 };
232403
233404 #endif /* AQ_HW_H */