175a6faf6SThomas Gleixner /* SPDX-License-Identifier: GPL-2.0-only */ 2071a0204SIgor Russkikh /* Atlantic Network Driver 3071a0204SIgor Russkikh * 4071a0204SIgor Russkikh * Copyright (C) 2014-2019 aQuantia Corporation 5071a0204SIgor Russkikh * Copyright (C) 2019-2020 Marvell International Ltd. 6753f4783SDavid VomLehn */ 7753f4783SDavid VomLehn 81a713f87SIgor Russkikh /* File aq_hw.h: Declaration of abstract interface for NIC hardware specific 9753f4783SDavid VomLehn * functions. 10753f4783SDavid VomLehn */ 11753f4783SDavid VomLehn 12753f4783SDavid VomLehn #ifndef AQ_HW_H 13753f4783SDavid VomLehn #define AQ_HW_H 14753f4783SDavid VomLehn 15753f4783SDavid VomLehn #include "aq_common.h" 16db550615SIgor Russkikh #include "aq_rss.h" 171a713f87SIgor Russkikh #include "hw_atl/hw_atl_utils.h" 18753f4783SDavid VomLehn 19910479a9SEgor Pomozov #define AQ_HW_MAC_COUNTER_HZ 312500000ll 20910479a9SEgor Pomozov #define AQ_HW_PHY_COUNTER_HZ 160000000ll 21910479a9SEgor Pomozov 220aa7bc3eSDmitry Bezrukov enum aq_tc_mode { 230aa7bc3eSDmitry Bezrukov AQ_TC_MODE_INVALID = -1, 240aa7bc3eSDmitry Bezrukov AQ_TC_MODE_8TCS, 250aa7bc3eSDmitry Bezrukov AQ_TC_MODE_4TCS, 260aa7bc3eSDmitry Bezrukov }; 270aa7bc3eSDmitry Bezrukov 2854bcb3d1SDmitry Bogdanov #define AQ_RX_FIRST_LOC_FVLANID 0U 2954bcb3d1SDmitry Bogdanov #define AQ_RX_LAST_LOC_FVLANID 15U 309a8cac4bSDmitry Bogdanov #define AQ_RX_FIRST_LOC_FETHERT 16U 319a8cac4bSDmitry Bogdanov #define AQ_RX_LAST_LOC_FETHERT 31U 32a6ed6f22SDmitry Bogdanov #define AQ_RX_FIRST_LOC_FL3L4 32U 33a6ed6f22SDmitry Bogdanov #define AQ_RX_LAST_LOC_FL3L4 39U 34a6ed6f22SDmitry Bogdanov #define AQ_RX_MAX_RXNFC_LOC AQ_RX_LAST_LOC_FL3L4 3554bcb3d1SDmitry Bogdanov #define AQ_VLAN_MAX_FILTERS \ 3654bcb3d1SDmitry Bogdanov (AQ_RX_LAST_LOC_FVLANID - AQ_RX_FIRST_LOC_FVLANID + 1U) 377975d2afSDmitry Bogdanov #define AQ_RX_QUEUE_NOT_ASSIGNED 0xFFU 38a6ed6f22SDmitry Bogdanov 39519f0cefSMark Starovoytov #define AQ_FRAC_PER_NS 0x100000000LL 40519f0cefSMark Starovoytov 417327699fSMark Starovoytov /* Used for rate to Mbps conversion */ 427327699fSMark Starovoytov #define AQ_MBPS_DIVISOR 125000 /* 1000000 / 8 */ 437327699fSMark Starovoytov 44753f4783SDavid VomLehn /* NIC H/W capabilities */ 45753f4783SDavid VomLehn struct aq_hw_caps_s { 46753f4783SDavid VomLehn u64 hw_features; 47753f4783SDavid VomLehn u64 link_speed_msk; 48753f4783SDavid VomLehn unsigned int hw_priv_flags; 494948293fSIgor Russkikh u32 media_type; 50c1af5427SAnton Mikaev u32 rxds_max; 51c1af5427SAnton Mikaev u32 txds_max; 52c1af5427SAnton Mikaev u32 rxds_min; 53c1af5427SAnton Mikaev u32 txds_min; 54753f4783SDavid VomLehn u32 txhwb_alignment; 55753f4783SDavid VomLehn u32 irq_mask; 56753f4783SDavid VomLehn u32 vecs; 57753f4783SDavid VomLehn u32 mtu; 58753f4783SDavid VomLehn u32 mac_regs_count; 5976c19c6cSIgor Russkikh u32 hw_alive_check_addr; 60753f4783SDavid VomLehn u8 msix_irqs; 618ce84271SDmitry Bezrukov u8 tcs_max; 62753f4783SDavid VomLehn u8 rxd_alignment; 63753f4783SDavid VomLehn u8 rxd_size; 64753f4783SDavid VomLehn u8 txd_alignment; 65753f4783SDavid VomLehn u8 txd_size; 66753f4783SDavid VomLehn u8 tx_rings; 67753f4783SDavid VomLehn u8 rx_rings; 68753f4783SDavid VomLehn bool flow_control; 69753f4783SDavid VomLehn bool is_64_dma; 701e41b3feSPavel Belous bool op64bit; 7123e500e8SNikita Danilov u32 quirks; 72b3f0c79cSIgor Russkikh u32 priv_data_len; 73753f4783SDavid VomLehn }; 74753f4783SDavid VomLehn 75753f4783SDavid VomLehn struct aq_hw_link_status_s { 76753f4783SDavid VomLehn unsigned int mbps; 77071a0204SIgor Russkikh bool full_duplex; 782b53b04dSDmitry Bogdanov u32 lp_link_speed_msk; 792b53b04dSDmitry Bogdanov u32 lp_flow_control; 80753f4783SDavid VomLehn }; 81753f4783SDavid VomLehn 82be08d839SIgor Russkikh struct aq_stats_s { 83*2087ced0SDmitry Bogdanov u64 brc; 84*2087ced0SDmitry Bogdanov u64 btc; 85be08d839SIgor Russkikh u64 uprc; 86be08d839SIgor Russkikh u64 mprc; 87be08d839SIgor Russkikh u64 bprc; 88be08d839SIgor Russkikh u64 erpt; 89be08d839SIgor Russkikh u64 uptc; 90be08d839SIgor Russkikh u64 mptc; 91be08d839SIgor Russkikh u64 bptc; 92be08d839SIgor Russkikh u64 erpr; 93be08d839SIgor Russkikh u64 mbtc; 94be08d839SIgor Russkikh u64 bbtc; 95be08d839SIgor Russkikh u64 mbrc; 96be08d839SIgor Russkikh u64 bbrc; 97be08d839SIgor Russkikh u64 ubrc; 98be08d839SIgor Russkikh u64 ubtc; 99be08d839SIgor Russkikh u64 dpc; 100be08d839SIgor Russkikh u64 dma_pkt_rc; 101be08d839SIgor Russkikh u64 dma_pkt_tc; 102be08d839SIgor Russkikh u64 dma_oct_rc; 103be08d839SIgor Russkikh u64 dma_oct_tc; 104be08d839SIgor Russkikh }; 105be08d839SIgor Russkikh 106753f4783SDavid VomLehn #define AQ_HW_IRQ_INVALID 0U 107753f4783SDavid VomLehn #define AQ_HW_IRQ_LEGACY 1U 108753f4783SDavid VomLehn #define AQ_HW_IRQ_MSI 2U 109753f4783SDavid VomLehn #define AQ_HW_IRQ_MSIX 3U 110753f4783SDavid VomLehn 1113dd3e236SIgor Russkikh #define AQ_HW_SERVICE_IRQS 1U 1123dd3e236SIgor Russkikh 113753f4783SDavid VomLehn #define AQ_HW_POWER_STATE_D0 0U 114753f4783SDavid VomLehn #define AQ_HW_POWER_STATE_D3 3U 115753f4783SDavid VomLehn 116753f4783SDavid VomLehn #define AQ_HW_FLAG_STARTED 0x00000004U 117753f4783SDavid VomLehn #define AQ_HW_FLAG_STOPPING 0x00000008U 118753f4783SDavid VomLehn #define AQ_HW_FLAG_RESETTING 0x00000010U 119753f4783SDavid VomLehn #define AQ_HW_FLAG_CLOSING 0x00000020U 120910479a9SEgor Pomozov #define AQ_HW_PTP_AVAILABLE 0x01000000U 121753f4783SDavid VomLehn #define AQ_HW_LINK_DOWN 0x04000000U 122753f4783SDavid VomLehn #define AQ_HW_FLAG_ERR_UNPLUG 0x40000000U 123753f4783SDavid VomLehn #define AQ_HW_FLAG_ERR_HW 0x80000000U 124753f4783SDavid VomLehn 125753f4783SDavid VomLehn #define AQ_HW_FLAG_ERRORS (AQ_HW_FLAG_ERR_HW | AQ_HW_FLAG_ERR_UNPLUG) 126753f4783SDavid VomLehn 127db550615SIgor Russkikh #define AQ_NIC_FLAGS_IS_NOT_READY (AQ_NIC_FLAG_STOPPING | \ 128db550615SIgor Russkikh AQ_NIC_FLAG_RESETTING | AQ_NIC_FLAG_CLOSING | \ 129db550615SIgor Russkikh AQ_NIC_FLAG_ERR_UNPLUG | AQ_NIC_FLAG_ERR_HW) 130db550615SIgor Russkikh 131db550615SIgor Russkikh #define AQ_NIC_FLAGS_IS_NOT_TX_READY (AQ_NIC_FLAGS_IS_NOT_READY | \ 132db550615SIgor Russkikh AQ_NIC_LINK_DOWN) 133db550615SIgor Russkikh 1344948293fSIgor Russkikh #define AQ_HW_MEDIA_TYPE_TP 1U 1354948293fSIgor Russkikh #define AQ_HW_MEDIA_TYPE_FIBRE 2U 1364948293fSIgor Russkikh 137c1af5427SAnton Mikaev #define AQ_HW_TXD_MULTIPLE 8U 138c1af5427SAnton Mikaev #define AQ_HW_RXD_MULTIPLE 8U 139c1af5427SAnton Mikaev 140a83fe6b6SDmitry Bezrukov #define AQ_HW_QUEUES_MAX 32U 14194b3b542SIgor Russkikh #define AQ_HW_MULTICAST_ADDRESS_MAX 32U 14294b3b542SIgor Russkikh 1438ce84271SDmitry Bezrukov #define AQ_HW_PTP_TC 2U 1448ce84271SDmitry Bezrukov 145d1287ce4SNikita Danilov #define AQ_HW_LED_BLINK 0x2U 146d1287ce4SNikita Danilov #define AQ_HW_LED_DEFAULT 0x0U 147d1287ce4SNikita Danilov 14860db5e40SIgor Russkikh #define AQ_HW_MEDIA_DETECT_CNT 6000 14960db5e40SIgor Russkikh 150ea4b4d7fSIgor Russkikh enum aq_priv_flags { 151ea4b4d7fSIgor Russkikh AQ_HW_LOOPBACK_DMA_SYS, 152ea4b4d7fSIgor Russkikh AQ_HW_LOOPBACK_PKT_SYS, 153ea4b4d7fSIgor Russkikh AQ_HW_LOOPBACK_DMA_NET, 154ea4b4d7fSIgor Russkikh AQ_HW_LOOPBACK_PHYINT_SYS, 155ea4b4d7fSIgor Russkikh AQ_HW_LOOPBACK_PHYEXT_SYS, 156ea4b4d7fSIgor Russkikh }; 157ea4b4d7fSIgor Russkikh 158ea4b4d7fSIgor Russkikh #define AQ_HW_LOOPBACK_MASK (BIT(AQ_HW_LOOPBACK_DMA_SYS) |\ 159ea4b4d7fSIgor Russkikh BIT(AQ_HW_LOOPBACK_PKT_SYS) |\ 160ea4b4d7fSIgor Russkikh BIT(AQ_HW_LOOPBACK_DMA_NET) |\ 161ea4b4d7fSIgor Russkikh BIT(AQ_HW_LOOPBACK_PHYINT_SYS) |\ 162ea4b4d7fSIgor Russkikh BIT(AQ_HW_LOOPBACK_PHYEXT_SYS)) 163ea4b4d7fSIgor Russkikh 164d1ad88feSMark Starovoytov #define ATL_HW_CHIP_MIPS 0x00000001U 165d1ad88feSMark Starovoytov #define ATL_HW_CHIP_TPO2 0x00000002U 166d1ad88feSMark Starovoytov #define ATL_HW_CHIP_RPF2 0x00000004U 167d1ad88feSMark Starovoytov #define ATL_HW_CHIP_MPI_AQ 0x00000010U 168d1ad88feSMark Starovoytov #define ATL_HW_CHIP_ATLANTIC 0x00800000U 169d1ad88feSMark Starovoytov #define ATL_HW_CHIP_REVISION_A0 0x01000000U 170d1ad88feSMark Starovoytov #define ATL_HW_CHIP_REVISION_B0 0x02000000U 171d1ad88feSMark Starovoytov #define ATL_HW_CHIP_REVISION_B1 0x04000000U 172d1ad88feSMark Starovoytov #define ATL_HW_CHIP_ANTIGUA 0x08000000U 173d1ad88feSMark Starovoytov 174d1ad88feSMark Starovoytov #define ATL_HW_IS_CHIP_FEATURE(_HW_, _F_) (!!(ATL_HW_CHIP_##_F_ & \ 175d1ad88feSMark Starovoytov (_HW_)->chip_features)) 176d1ad88feSMark Starovoytov 177753f4783SDavid VomLehn struct aq_hw_s { 17878f5193dSIgor Russkikh atomic_t flags; 179c8c82eb3SIgor Russkikh u8 rbl_enabled:1; 180753f4783SDavid VomLehn struct aq_nic_cfg_s *aq_nic_cfg; 1810c58c35fSIgor Russkikh const struct aq_fw_ops *aq_fw_ops; 182753f4783SDavid VomLehn void __iomem *mmio; 183753f4783SDavid VomLehn struct aq_hw_link_status_s aq_link_status; 1848f60f762SNikita Danilov struct hw_atl_utils_mbox mbox; 1851a713f87SIgor Russkikh struct hw_atl_stats_s last_stats; 1861a713f87SIgor Russkikh struct aq_stats_s curr_stats; 1871a713f87SIgor Russkikh u64 speed; 1881a713f87SIgor Russkikh u32 itr_tx; 1891a713f87SIgor Russkikh u32 itr_rx; 1901a713f87SIgor Russkikh unsigned int chip_features; 1911a713f87SIgor Russkikh u32 fw_ver_actual; 1921a713f87SIgor Russkikh atomic_t dpc; 1931a713f87SIgor Russkikh u32 mbox_addr; 1941a713f87SIgor Russkikh u32 rpc_addr; 195dc12f75aSNikita Danilov u32 settings_addr; 1961a713f87SIgor Russkikh u32 rpc_tid; 1978f60f762SNikita Danilov struct hw_atl_utils_fw_rpc rpc; 198910479a9SEgor Pomozov s64 ptp_clk_offset; 199dbcd6806SDmitry Bezrukov u16 phy_id; 200258ff0cfSDmitry Bogdanov void *priv; 201753f4783SDavid VomLehn }; 202753f4783SDavid VomLehn 203753f4783SDavid VomLehn struct aq_ring_s; 204753f4783SDavid VomLehn struct aq_ring_param_s; 205753f4783SDavid VomLehn struct sk_buff; 206a6ed6f22SDmitry Bogdanov struct aq_rx_filter_l3l4; 207753f4783SDavid VomLehn 208753f4783SDavid VomLehn struct aq_hw_ops { 209753f4783SDavid VomLehn 210753f4783SDavid VomLehn int (*hw_ring_tx_xmit)(struct aq_hw_s *self, struct aq_ring_s *aq_ring, 211753f4783SDavid VomLehn unsigned int frags); 212753f4783SDavid VomLehn 213753f4783SDavid VomLehn int (*hw_ring_rx_receive)(struct aq_hw_s *self, 214753f4783SDavid VomLehn struct aq_ring_s *aq_ring); 215753f4783SDavid VomLehn 216753f4783SDavid VomLehn int (*hw_ring_rx_fill)(struct aq_hw_s *self, struct aq_ring_s *aq_ring, 217753f4783SDavid VomLehn unsigned int sw_tail_old); 218753f4783SDavid VomLehn 219753f4783SDavid VomLehn int (*hw_ring_tx_head_update)(struct aq_hw_s *self, 220753f4783SDavid VomLehn struct aq_ring_s *aq_ring); 221753f4783SDavid VomLehn 22276660757SJakub Kicinski int (*hw_set_mac_address)(struct aq_hw_s *self, const u8 *mac_addr); 223753f4783SDavid VomLehn 224099d074eSMark Starovoytov int (*hw_soft_reset)(struct aq_hw_s *self); 225099d074eSMark Starovoytov 226099d074eSMark Starovoytov int (*hw_prepare)(struct aq_hw_s *self, 227099d074eSMark Starovoytov const struct aq_fw_ops **fw_ops); 228099d074eSMark Starovoytov 229753f4783SDavid VomLehn int (*hw_reset)(struct aq_hw_s *self); 230753f4783SDavid VomLehn 23176660757SJakub Kicinski int (*hw_init)(struct aq_hw_s *self, const u8 *mac_addr); 232753f4783SDavid VomLehn 233753f4783SDavid VomLehn int (*hw_start)(struct aq_hw_s *self); 234753f4783SDavid VomLehn 235753f4783SDavid VomLehn int (*hw_stop)(struct aq_hw_s *self); 236753f4783SDavid VomLehn 237753f4783SDavid VomLehn int (*hw_ring_tx_init)(struct aq_hw_s *self, struct aq_ring_s *aq_ring, 238753f4783SDavid VomLehn struct aq_ring_param_s *aq_ring_param); 239753f4783SDavid VomLehn 240753f4783SDavid VomLehn int (*hw_ring_tx_start)(struct aq_hw_s *self, 241753f4783SDavid VomLehn struct aq_ring_s *aq_ring); 242753f4783SDavid VomLehn 243753f4783SDavid VomLehn int (*hw_ring_tx_stop)(struct aq_hw_s *self, 244753f4783SDavid VomLehn struct aq_ring_s *aq_ring); 245753f4783SDavid VomLehn 246753f4783SDavid VomLehn int (*hw_ring_rx_init)(struct aq_hw_s *self, 247753f4783SDavid VomLehn struct aq_ring_s *aq_ring, 248753f4783SDavid VomLehn struct aq_ring_param_s *aq_ring_param); 249753f4783SDavid VomLehn 250753f4783SDavid VomLehn int (*hw_ring_rx_start)(struct aq_hw_s *self, 251753f4783SDavid VomLehn struct aq_ring_s *aq_ring); 252753f4783SDavid VomLehn 253753f4783SDavid VomLehn int (*hw_ring_rx_stop)(struct aq_hw_s *self, 254753f4783SDavid VomLehn struct aq_ring_s *aq_ring); 255753f4783SDavid VomLehn 256753f4783SDavid VomLehn int (*hw_irq_enable)(struct aq_hw_s *self, u64 mask); 257753f4783SDavid VomLehn 258753f4783SDavid VomLehn int (*hw_irq_disable)(struct aq_hw_s *self, u64 mask); 259753f4783SDavid VomLehn 260753f4783SDavid VomLehn int (*hw_irq_read)(struct aq_hw_s *self, u64 *mask); 261753f4783SDavid VomLehn 262753f4783SDavid VomLehn int (*hw_packet_filter_set)(struct aq_hw_s *self, 263753f4783SDavid VomLehn unsigned int packet_filter); 264753f4783SDavid VomLehn 265a6ed6f22SDmitry Bogdanov int (*hw_filter_l3l4_set)(struct aq_hw_s *self, 266a6ed6f22SDmitry Bogdanov struct aq_rx_filter_l3l4 *data); 267a6ed6f22SDmitry Bogdanov 268a6ed6f22SDmitry Bogdanov int (*hw_filter_l3l4_clear)(struct aq_hw_s *self, 269a6ed6f22SDmitry Bogdanov struct aq_rx_filter_l3l4 *data); 270a6ed6f22SDmitry Bogdanov 2719a8cac4bSDmitry Bogdanov int (*hw_filter_l2_set)(struct aq_hw_s *self, 2729a8cac4bSDmitry Bogdanov struct aq_rx_filter_l2 *data); 2739a8cac4bSDmitry Bogdanov 2749a8cac4bSDmitry Bogdanov int (*hw_filter_l2_clear)(struct aq_hw_s *self, 2759a8cac4bSDmitry Bogdanov struct aq_rx_filter_l2 *data); 2769a8cac4bSDmitry Bogdanov 27754bcb3d1SDmitry Bogdanov int (*hw_filter_vlan_set)(struct aq_hw_s *self, 27854bcb3d1SDmitry Bogdanov struct aq_rx_filter_vlan *aq_vlans); 27954bcb3d1SDmitry Bogdanov 28054bcb3d1SDmitry Bogdanov int (*hw_filter_vlan_ctrl)(struct aq_hw_s *self, bool enable); 28154bcb3d1SDmitry Bogdanov 282753f4783SDavid VomLehn int (*hw_multicast_list_set)(struct aq_hw_s *self, 28394b3b542SIgor Russkikh u8 ar_mac[AQ_HW_MULTICAST_ADDRESS_MAX] 284753f4783SDavid VomLehn [ETH_ALEN], 285753f4783SDavid VomLehn u32 count); 286753f4783SDavid VomLehn 287b82ee71aSIgor Russkikh int (*hw_interrupt_moderation_set)(struct aq_hw_s *self); 288753f4783SDavid VomLehn 289753f4783SDavid VomLehn int (*hw_rss_set)(struct aq_hw_s *self, 290753f4783SDavid VomLehn struct aq_rss_parameters *rss_params); 291753f4783SDavid VomLehn 292753f4783SDavid VomLehn int (*hw_rss_hash_set)(struct aq_hw_s *self, 293753f4783SDavid VomLehn struct aq_rss_parameters *rss_params); 294753f4783SDavid VomLehn 2952deac71aSMark Starovoytov int (*hw_tc_rate_limit_set)(struct aq_hw_s *self); 2962deac71aSMark Starovoytov 297753f4783SDavid VomLehn int (*hw_get_regs)(struct aq_hw_s *self, 2984cbc9f92SIgor Russkikh const struct aq_hw_caps_s *aq_hw_caps, 2994cbc9f92SIgor Russkikh u32 *regs_buff); 300753f4783SDavid VomLehn 301be08d839SIgor Russkikh struct aq_stats_s *(*hw_get_hw_stats)(struct aq_hw_s *self); 302753f4783SDavid VomLehn 30336e90a52SNikita Danilov u32 (*hw_get_fw_version)(struct aq_hw_s *self); 304753f4783SDavid VomLehn 305bbb67a44SDmitry Bogdanov int (*hw_set_offload)(struct aq_hw_s *self, 306bbb67a44SDmitry Bogdanov struct aq_nic_cfg_s *aq_nic_cfg); 307bbb67a44SDmitry Bogdanov 30804a18399SEgor Pomozov int (*hw_ring_hwts_rx_fill)(struct aq_hw_s *self, 30904a18399SEgor Pomozov struct aq_ring_s *aq_ring); 31004a18399SEgor Pomozov 31104a18399SEgor Pomozov int (*hw_ring_hwts_rx_receive)(struct aq_hw_s *self, 31204a18399SEgor Pomozov struct aq_ring_s *ring); 31304a18399SEgor Pomozov 314910479a9SEgor Pomozov void (*hw_get_ptp_ts)(struct aq_hw_s *self, u64 *stamp); 315910479a9SEgor Pomozov 316910479a9SEgor Pomozov int (*hw_adj_clock_freq)(struct aq_hw_s *self, s32 delta); 317910479a9SEgor Pomozov 318910479a9SEgor Pomozov int (*hw_adj_sys_clock)(struct aq_hw_s *self, s64 delta); 319910479a9SEgor Pomozov 320910479a9SEgor Pomozov int (*hw_set_sys_clock)(struct aq_hw_s *self, u64 time, u64 ts); 321910479a9SEgor Pomozov 3229c477032SDmitry Bezrukov int (*hw_ts_to_sys_clock)(struct aq_hw_s *self, u64 ts, u64 *time); 3239c477032SDmitry Bezrukov 3249c477032SDmitry Bezrukov int (*hw_gpio_pulse)(struct aq_hw_s *self, u32 index, u64 start, 3259c477032SDmitry Bezrukov u32 period); 3269c477032SDmitry Bezrukov 3279c477032SDmitry Bezrukov int (*hw_extts_gpio_enable)(struct aq_hw_s *self, u32 index, 3289c477032SDmitry Bezrukov u32 enable); 3299c477032SDmitry Bezrukov 3309c477032SDmitry Bezrukov int (*hw_get_sync_ts)(struct aq_hw_s *self, u64 *ts); 3319c477032SDmitry Bezrukov 33204a18399SEgor Pomozov u16 (*rx_extract_ts)(struct aq_hw_s *self, u8 *p, unsigned int len, 33304a18399SEgor Pomozov u64 *timestamp); 33404a18399SEgor Pomozov 33504a18399SEgor Pomozov int (*extract_hwts)(struct aq_hw_s *self, u8 *p, unsigned int len, 33604a18399SEgor Pomozov u64 *timestamp); 33704a18399SEgor Pomozov 33835e8e8b4SIgor Russkikh int (*hw_set_fc)(struct aq_hw_s *self, u32 fc, u32 tc); 339ea4b4d7fSIgor Russkikh 340ea4b4d7fSIgor Russkikh int (*hw_set_loopback)(struct aq_hw_s *self, u32 mode, bool enable); 3418dcf2ad3SMark Starovoytov 3428dcf2ad3SMark Starovoytov int (*hw_get_mac_temp)(struct aq_hw_s *self, u32 *temp); 343753f4783SDavid VomLehn }; 344753f4783SDavid VomLehn 3450c58c35fSIgor Russkikh struct aq_fw_ops { 3460c58c35fSIgor Russkikh int (*init)(struct aq_hw_s *self); 3470c58c35fSIgor Russkikh 34844e00dd8SIgor Russkikh int (*deinit)(struct aq_hw_s *self); 34944e00dd8SIgor Russkikh 3500c58c35fSIgor Russkikh int (*reset)(struct aq_hw_s *self); 3510c58c35fSIgor Russkikh 352b8d68b62SAnton Mikaev int (*renegotiate)(struct aq_hw_s *self); 353b8d68b62SAnton Mikaev 3540c58c35fSIgor Russkikh int (*get_mac_permanent)(struct aq_hw_s *self, u8 *mac); 3550c58c35fSIgor Russkikh 3560c58c35fSIgor Russkikh int (*set_link_speed)(struct aq_hw_s *self, u32 speed); 3570c58c35fSIgor Russkikh 35844e00dd8SIgor Russkikh int (*set_state)(struct aq_hw_s *self, 35944e00dd8SIgor Russkikh enum hal_atl_utils_fw_state_e state); 3600c58c35fSIgor Russkikh 3610c58c35fSIgor Russkikh int (*update_link_status)(struct aq_hw_s *self); 3620c58c35fSIgor Russkikh 3630c58c35fSIgor Russkikh int (*update_stats)(struct aq_hw_s *self); 36444e00dd8SIgor Russkikh 3658dcf2ad3SMark Starovoytov int (*get_mac_temp)(struct aq_hw_s *self, int *temp); 3668dcf2ad3SMark Starovoytov 3678f894011SYana Esina int (*get_phy_temp)(struct aq_hw_s *self, int *temp); 3688f894011SYana Esina 36935e8e8b4SIgor Russkikh u32 (*get_flow_control)(struct aq_hw_s *self, u32 *fcmode); 37035e8e8b4SIgor Russkikh 37144e00dd8SIgor Russkikh int (*set_flow_control)(struct aq_hw_s *self); 372a0da96c0SYana Esina 373d1287ce4SNikita Danilov int (*led_control)(struct aq_hw_s *self, u32 mode); 374d1287ce4SNikita Danilov 375ea4b4d7fSIgor Russkikh int (*set_phyloopback)(struct aq_hw_s *self, u32 mode, bool enable); 376ea4b4d7fSIgor Russkikh 377a0da96c0SYana Esina int (*set_power)(struct aq_hw_s *self, unsigned int power_state, 37876660757SJakub Kicinski const u8 *mac); 37992ab6407SYana Esina 380910479a9SEgor Pomozov int (*send_fw_request)(struct aq_hw_s *self, 381910479a9SEgor Pomozov const struct hw_fw_request_iface *fw_req, 382910479a9SEgor Pomozov size_t size); 383910479a9SEgor Pomozov 384910479a9SEgor Pomozov void (*enable_ptp)(struct aq_hw_s *self, int enable); 385910479a9SEgor Pomozov 386f08a464cSEgor Pomozov void (*adjust_ptp)(struct aq_hw_s *self, uint64_t adj); 387f08a464cSEgor Pomozov 38892ab6407SYana Esina int (*set_eee_rate)(struct aq_hw_s *self, u32 speed); 38992ab6407SYana Esina 39092ab6407SYana Esina int (*get_eee_rate)(struct aq_hw_s *self, u32 *rate, 39192ab6407SYana Esina u32 *supported_rates); 39262c1c2e6SDmitry Bogdanov 393e193c3abSIgor Russkikh int (*set_downshift)(struct aq_hw_s *self, u32 counter); 394e193c3abSIgor Russkikh 39560db5e40SIgor Russkikh int (*set_media_detect)(struct aq_hw_s *self, bool enable); 39660db5e40SIgor Russkikh 39762c1c2e6SDmitry Bogdanov u32 (*get_link_capabilities)(struct aq_hw_s *self); 39862c1c2e6SDmitry Bogdanov 39962c1c2e6SDmitry Bogdanov int (*send_macsec_req)(struct aq_hw_s *self, 40062c1c2e6SDmitry Bogdanov struct macsec_msg_fw_request *msg, 40162c1c2e6SDmitry Bogdanov struct macsec_msg_fw_response *resp); 4020c58c35fSIgor Russkikh }; 4030c58c35fSIgor Russkikh 404753f4783SDavid VomLehn #endif /* AQ_HW_H */ 405