175a6faf6SThomas Gleixner /* SPDX-License-Identifier: GPL-2.0-only */
2ad46bd5eSMark Starovoytov /* Atlantic Network Driver
3ad46bd5eSMark Starovoytov  *
4ad46bd5eSMark Starovoytov  * Copyright (C) 2014-2019 aQuantia Corporation
5ad46bd5eSMark Starovoytov  * Copyright (C) 2019-2020 Marvell International Ltd.
6bab6de8fSDavid VomLehn  */
7bab6de8fSDavid VomLehn 
8bab6de8fSDavid VomLehn /* File hw_atl_b0.h: Declaration of abstract interface for Atlantic hardware
9bab6de8fSDavid VomLehn  * specific functions.
10bab6de8fSDavid VomLehn  */
11bab6de8fSDavid VomLehn 
12bab6de8fSDavid VomLehn #ifndef HW_ATL_B0_H
13bab6de8fSDavid VomLehn #define HW_ATL_B0_H
14bab6de8fSDavid VomLehn 
15bab6de8fSDavid VomLehn #include "../aq_common.h"
16bab6de8fSDavid VomLehn 
174948293fSIgor Russkikh extern const struct aq_hw_caps_s hw_atl_b0_caps_aqc100;
184948293fSIgor Russkikh extern const struct aq_hw_caps_s hw_atl_b0_caps_aqc107;
194948293fSIgor Russkikh extern const struct aq_hw_caps_s hw_atl_b0_caps_aqc108;
204948293fSIgor Russkikh extern const struct aq_hw_caps_s hw_atl_b0_caps_aqc109;
2123e500e8SNikita Danilov extern const struct aq_hw_caps_s hw_atl_b0_caps_aqc111;
2223e500e8SNikita Danilov extern const struct aq_hw_caps_s hw_atl_b0_caps_aqc112;
234948293fSIgor Russkikh 
244948293fSIgor Russkikh #define hw_atl_b0_caps_aqc100s hw_atl_b0_caps_aqc100
254948293fSIgor Russkikh #define hw_atl_b0_caps_aqc107s hw_atl_b0_caps_aqc107
264948293fSIgor Russkikh #define hw_atl_b0_caps_aqc108s hw_atl_b0_caps_aqc108
274948293fSIgor Russkikh #define hw_atl_b0_caps_aqc109s hw_atl_b0_caps_aqc109
2823e500e8SNikita Danilov #define hw_atl_b0_caps_aqc111s hw_atl_b0_caps_aqc111
2923e500e8SNikita Danilov #define hw_atl_b0_caps_aqc112s hw_atl_b0_caps_aqc112
304948293fSIgor Russkikh 
314948293fSIgor Russkikh extern const struct aq_hw_ops hw_atl_ops_b0;
324948293fSIgor Russkikh 
334948293fSIgor Russkikh #define hw_atl_ops_b1 hw_atl_ops_b0
34bab6de8fSDavid VomLehn 
35e54dcf4bSIgor Russkikh int hw_atl_b0_hw_rss_hash_set(struct aq_hw_s *self,
36e54dcf4bSIgor Russkikh 			      struct aq_rss_parameters *rss_params);
3743c670c8SIgor Russkikh int hw_atl_b0_hw_offload_set(struct aq_hw_s *self,
3843c670c8SIgor Russkikh 			     struct aq_nic_cfg_s *aq_nic_cfg);
3943c670c8SIgor Russkikh 
4043c670c8SIgor Russkikh int hw_atl_b0_hw_ring_tx_start(struct aq_hw_s *self, struct aq_ring_s *ring);
4143c670c8SIgor Russkikh int hw_atl_b0_hw_ring_rx_start(struct aq_hw_s *self, struct aq_ring_s *ring);
4243c670c8SIgor Russkikh 
4343c670c8SIgor Russkikh int hw_atl_b0_hw_ring_rx_init(struct aq_hw_s *self, struct aq_ring_s *aq_ring,
4443c670c8SIgor Russkikh 			      struct aq_ring_param_s *aq_ring_param);
4543c670c8SIgor Russkikh int hw_atl_b0_hw_ring_rx_fill(struct aq_hw_s *self, struct aq_ring_s *ring,
4643c670c8SIgor Russkikh 			      unsigned int sw_tail_old);
4743c670c8SIgor Russkikh int hw_atl_b0_hw_ring_rx_receive(struct aq_hw_s *self, struct aq_ring_s *ring);
4843c670c8SIgor Russkikh 
4943c670c8SIgor Russkikh int hw_atl_b0_hw_ring_tx_init(struct aq_hw_s *self, struct aq_ring_s *aq_ring,
5043c670c8SIgor Russkikh 			      struct aq_ring_param_s *aq_ring_param);
5143c670c8SIgor Russkikh int hw_atl_b0_hw_ring_tx_xmit(struct aq_hw_s *self, struct aq_ring_s *ring,
5243c670c8SIgor Russkikh 			      unsigned int frags);
5343c670c8SIgor Russkikh int hw_atl_b0_hw_ring_tx_head_update(struct aq_hw_s *self,
5443c670c8SIgor Russkikh 				     struct aq_ring_s *ring);
5543c670c8SIgor Russkikh 
5643c670c8SIgor Russkikh int hw_atl_b0_hw_ring_tx_stop(struct aq_hw_s *self, struct aq_ring_s *ring);
5743c670c8SIgor Russkikh int hw_atl_b0_hw_ring_rx_stop(struct aq_hw_s *self, struct aq_ring_s *ring);
5843c670c8SIgor Russkikh 
5940f05e5bSMark Starovoytov void hw_atl_b0_hw_init_rx_rss_ctrl1(struct aq_hw_s *self);
6040f05e5bSMark Starovoytov 
61*76660757SJakub Kicinski int hw_atl_b0_hw_mac_addr_set(struct aq_hw_s *self, const u8 *mac_addr);
62e54dcf4bSIgor Russkikh 
633e168de5SIgor Russkikh int hw_atl_b0_set_fc(struct aq_hw_s *self, u32 fc, u32 tc);
64ecab7870SDmitry Bogdanov int hw_atl_b0_set_loopback(struct aq_hw_s *self, u32 mode, bool enable);
653e168de5SIgor Russkikh 
66e54dcf4bSIgor Russkikh int hw_atl_b0_hw_start(struct aq_hw_s *self);
67e54dcf4bSIgor Russkikh 
68e54dcf4bSIgor Russkikh int hw_atl_b0_hw_irq_enable(struct aq_hw_s *self, u64 mask);
69e54dcf4bSIgor Russkikh int hw_atl_b0_hw_irq_disable(struct aq_hw_s *self, u64 mask);
70e54dcf4bSIgor Russkikh int hw_atl_b0_hw_irq_read(struct aq_hw_s *self, u64 *mask);
71e54dcf4bSIgor Russkikh 
72e54dcf4bSIgor Russkikh int hw_atl_b0_hw_packet_filter_set(struct aq_hw_s *self,
73e54dcf4bSIgor Russkikh 				   unsigned int packet_filter);
74e54dcf4bSIgor Russkikh 
75bab6de8fSDavid VomLehn #endif /* HW_ATL_B0_H */
76