1 /* SPDX-License-Identifier: GPL-2.0-only */
2 /* Atlantic Network Driver
3  *
4  * Copyright (C) 2014-2019 aQuantia Corporation
5  * Copyright (C) 2019-2020 Marvell International Ltd.
6  */
7 
8 /* File hw_atl_b0.h: Declaration of abstract interface for Atlantic hardware
9  * specific functions.
10  */
11 
12 #ifndef HW_ATL_B0_H
13 #define HW_ATL_B0_H
14 
15 #include "../aq_common.h"
16 
17 extern const struct aq_hw_caps_s hw_atl_b0_caps_aqc100;
18 extern const struct aq_hw_caps_s hw_atl_b0_caps_aqc107;
19 extern const struct aq_hw_caps_s hw_atl_b0_caps_aqc108;
20 extern const struct aq_hw_caps_s hw_atl_b0_caps_aqc109;
21 extern const struct aq_hw_caps_s hw_atl_b0_caps_aqc111;
22 extern const struct aq_hw_caps_s hw_atl_b0_caps_aqc112;
23 
24 #define hw_atl_b0_caps_aqc100s hw_atl_b0_caps_aqc100
25 #define hw_atl_b0_caps_aqc107s hw_atl_b0_caps_aqc107
26 #define hw_atl_b0_caps_aqc108s hw_atl_b0_caps_aqc108
27 #define hw_atl_b0_caps_aqc109s hw_atl_b0_caps_aqc109
28 #define hw_atl_b0_caps_aqc111s hw_atl_b0_caps_aqc111
29 #define hw_atl_b0_caps_aqc112s hw_atl_b0_caps_aqc112
30 
31 extern const struct aq_hw_ops hw_atl_ops_b0;
32 
33 #define hw_atl_ops_b1 hw_atl_ops_b0
34 
35 int hw_atl_b0_hw_rss_hash_set(struct aq_hw_s *self,
36 			      struct aq_rss_parameters *rss_params);
37 int hw_atl_b0_hw_offload_set(struct aq_hw_s *self,
38 			     struct aq_nic_cfg_s *aq_nic_cfg);
39 
40 int hw_atl_b0_hw_ring_tx_start(struct aq_hw_s *self, struct aq_ring_s *ring);
41 int hw_atl_b0_hw_ring_rx_start(struct aq_hw_s *self, struct aq_ring_s *ring);
42 
43 int hw_atl_b0_hw_ring_rx_init(struct aq_hw_s *self, struct aq_ring_s *aq_ring,
44 			      struct aq_ring_param_s *aq_ring_param);
45 int hw_atl_b0_hw_ring_rx_fill(struct aq_hw_s *self, struct aq_ring_s *ring,
46 			      unsigned int sw_tail_old);
47 int hw_atl_b0_hw_ring_rx_receive(struct aq_hw_s *self, struct aq_ring_s *ring);
48 
49 int hw_atl_b0_hw_ring_tx_init(struct aq_hw_s *self, struct aq_ring_s *aq_ring,
50 			      struct aq_ring_param_s *aq_ring_param);
51 int hw_atl_b0_hw_ring_tx_xmit(struct aq_hw_s *self, struct aq_ring_s *ring,
52 			      unsigned int frags);
53 int hw_atl_b0_hw_ring_tx_head_update(struct aq_hw_s *self,
54 				     struct aq_ring_s *ring);
55 
56 int hw_atl_b0_hw_ring_tx_stop(struct aq_hw_s *self, struct aq_ring_s *ring);
57 int hw_atl_b0_hw_ring_rx_stop(struct aq_hw_s *self, struct aq_ring_s *ring);
58 
59 void hw_atl_b0_hw_init_rx_rss_ctrl1(struct aq_hw_s *self);
60 
61 int hw_atl_b0_hw_mac_addr_set(struct aq_hw_s *self, const u8 *mac_addr);
62 
63 int hw_atl_b0_set_fc(struct aq_hw_s *self, u32 fc, u32 tc);
64 int hw_atl_b0_set_loopback(struct aq_hw_s *self, u32 mode, bool enable);
65 
66 int hw_atl_b0_hw_start(struct aq_hw_s *self);
67 
68 int hw_atl_b0_hw_irq_enable(struct aq_hw_s *self, u64 mask);
69 int hw_atl_b0_hw_irq_disable(struct aq_hw_s *self, u64 mask);
70 int hw_atl_b0_hw_irq_read(struct aq_hw_s *self, u64 *mask);
71 
72 int hw_atl_b0_hw_packet_filter_set(struct aq_hw_s *self,
73 				   unsigned int packet_filter);
74 
75 #endif /* HW_ATL_B0_H */
76