175a6faf6SThomas Gleixner /* SPDX-License-Identifier: GPL-2.0-only */ 2753f4783SDavid VomLehn /* 3753f4783SDavid VomLehn * aQuantia Corporation Network Driver 4910479a9SEgor Pomozov * Copyright (C) 2014-2019 aQuantia Corporation. All rights reserved 5753f4783SDavid VomLehn */ 6753f4783SDavid VomLehn 71a713f87SIgor Russkikh /* File aq_hw.h: Declaration of abstract interface for NIC hardware specific 8753f4783SDavid VomLehn * functions. 9753f4783SDavid VomLehn */ 10753f4783SDavid VomLehn 11753f4783SDavid VomLehn #ifndef AQ_HW_H 12753f4783SDavid VomLehn #define AQ_HW_H 13753f4783SDavid VomLehn 14753f4783SDavid VomLehn #include "aq_common.h" 15db550615SIgor Russkikh #include "aq_rss.h" 161a713f87SIgor Russkikh #include "hw_atl/hw_atl_utils.h" 17753f4783SDavid VomLehn 18910479a9SEgor Pomozov #define AQ_HW_MAC_COUNTER_HZ 312500000ll 19910479a9SEgor Pomozov #define AQ_HW_PHY_COUNTER_HZ 160000000ll 20910479a9SEgor Pomozov 21*0aa7bc3eSDmitry Bezrukov enum aq_tc_mode { 22*0aa7bc3eSDmitry Bezrukov AQ_TC_MODE_INVALID = -1, 23*0aa7bc3eSDmitry Bezrukov AQ_TC_MODE_8TCS, 24*0aa7bc3eSDmitry Bezrukov AQ_TC_MODE_4TCS, 25*0aa7bc3eSDmitry Bezrukov }; 26*0aa7bc3eSDmitry Bezrukov 2754bcb3d1SDmitry Bogdanov #define AQ_RX_FIRST_LOC_FVLANID 0U 2854bcb3d1SDmitry Bogdanov #define AQ_RX_LAST_LOC_FVLANID 15U 299a8cac4bSDmitry Bogdanov #define AQ_RX_FIRST_LOC_FETHERT 16U 309a8cac4bSDmitry Bogdanov #define AQ_RX_LAST_LOC_FETHERT 31U 31a6ed6f22SDmitry Bogdanov #define AQ_RX_FIRST_LOC_FL3L4 32U 32a6ed6f22SDmitry Bogdanov #define AQ_RX_LAST_LOC_FL3L4 39U 33a6ed6f22SDmitry Bogdanov #define AQ_RX_MAX_RXNFC_LOC AQ_RX_LAST_LOC_FL3L4 3454bcb3d1SDmitry Bogdanov #define AQ_VLAN_MAX_FILTERS \ 3554bcb3d1SDmitry Bogdanov (AQ_RX_LAST_LOC_FVLANID - AQ_RX_FIRST_LOC_FVLANID + 1U) 367975d2afSDmitry Bogdanov #define AQ_RX_QUEUE_NOT_ASSIGNED 0xFFU 37a6ed6f22SDmitry Bogdanov 38753f4783SDavid VomLehn /* NIC H/W capabilities */ 39753f4783SDavid VomLehn struct aq_hw_caps_s { 40753f4783SDavid VomLehn u64 hw_features; 41753f4783SDavid VomLehn u64 link_speed_msk; 42753f4783SDavid VomLehn unsigned int hw_priv_flags; 434948293fSIgor Russkikh u32 media_type; 44c1af5427SAnton Mikaev u32 rxds_max; 45c1af5427SAnton Mikaev u32 txds_max; 46c1af5427SAnton Mikaev u32 rxds_min; 47c1af5427SAnton Mikaev u32 txds_min; 48753f4783SDavid VomLehn u32 txhwb_alignment; 49753f4783SDavid VomLehn u32 irq_mask; 50753f4783SDavid VomLehn u32 vecs; 51753f4783SDavid VomLehn u32 mtu; 52753f4783SDavid VomLehn u32 mac_regs_count; 5376c19c6cSIgor Russkikh u32 hw_alive_check_addr; 54753f4783SDavid VomLehn u8 msix_irqs; 558ce84271SDmitry Bezrukov u8 tcs_max; 56753f4783SDavid VomLehn u8 rxd_alignment; 57753f4783SDavid VomLehn u8 rxd_size; 58753f4783SDavid VomLehn u8 txd_alignment; 59753f4783SDavid VomLehn u8 txd_size; 60753f4783SDavid VomLehn u8 tx_rings; 61753f4783SDavid VomLehn u8 rx_rings; 62753f4783SDavid VomLehn bool flow_control; 63753f4783SDavid VomLehn bool is_64_dma; 64b3f0c79cSIgor Russkikh u32 priv_data_len; 65753f4783SDavid VomLehn }; 66753f4783SDavid VomLehn 67753f4783SDavid VomLehn struct aq_hw_link_status_s { 68753f4783SDavid VomLehn unsigned int mbps; 69753f4783SDavid VomLehn }; 70753f4783SDavid VomLehn 71be08d839SIgor Russkikh struct aq_stats_s { 72be08d839SIgor Russkikh u64 uprc; 73be08d839SIgor Russkikh u64 mprc; 74be08d839SIgor Russkikh u64 bprc; 75be08d839SIgor Russkikh u64 erpt; 76be08d839SIgor Russkikh u64 uptc; 77be08d839SIgor Russkikh u64 mptc; 78be08d839SIgor Russkikh u64 bptc; 79be08d839SIgor Russkikh u64 erpr; 80be08d839SIgor Russkikh u64 mbtc; 81be08d839SIgor Russkikh u64 bbtc; 82be08d839SIgor Russkikh u64 mbrc; 83be08d839SIgor Russkikh u64 bbrc; 84be08d839SIgor Russkikh u64 ubrc; 85be08d839SIgor Russkikh u64 ubtc; 86be08d839SIgor Russkikh u64 dpc; 87be08d839SIgor Russkikh u64 dma_pkt_rc; 88be08d839SIgor Russkikh u64 dma_pkt_tc; 89be08d839SIgor Russkikh u64 dma_oct_rc; 90be08d839SIgor Russkikh u64 dma_oct_tc; 91be08d839SIgor Russkikh }; 92be08d839SIgor Russkikh 93753f4783SDavid VomLehn #define AQ_HW_IRQ_INVALID 0U 94753f4783SDavid VomLehn #define AQ_HW_IRQ_LEGACY 1U 95753f4783SDavid VomLehn #define AQ_HW_IRQ_MSI 2U 96753f4783SDavid VomLehn #define AQ_HW_IRQ_MSIX 3U 97753f4783SDavid VomLehn 983dd3e236SIgor Russkikh #define AQ_HW_SERVICE_IRQS 1U 993dd3e236SIgor Russkikh 100753f4783SDavid VomLehn #define AQ_HW_POWER_STATE_D0 0U 101753f4783SDavid VomLehn #define AQ_HW_POWER_STATE_D3 3U 102753f4783SDavid VomLehn 103753f4783SDavid VomLehn #define AQ_HW_FLAG_STARTED 0x00000004U 104753f4783SDavid VomLehn #define AQ_HW_FLAG_STOPPING 0x00000008U 105753f4783SDavid VomLehn #define AQ_HW_FLAG_RESETTING 0x00000010U 106753f4783SDavid VomLehn #define AQ_HW_FLAG_CLOSING 0x00000020U 107910479a9SEgor Pomozov #define AQ_HW_PTP_AVAILABLE 0x01000000U 108753f4783SDavid VomLehn #define AQ_HW_LINK_DOWN 0x04000000U 109753f4783SDavid VomLehn #define AQ_HW_FLAG_ERR_UNPLUG 0x40000000U 110753f4783SDavid VomLehn #define AQ_HW_FLAG_ERR_HW 0x80000000U 111753f4783SDavid VomLehn 112753f4783SDavid VomLehn #define AQ_HW_FLAG_ERRORS (AQ_HW_FLAG_ERR_HW | AQ_HW_FLAG_ERR_UNPLUG) 113753f4783SDavid VomLehn 114db550615SIgor Russkikh #define AQ_NIC_FLAGS_IS_NOT_READY (AQ_NIC_FLAG_STOPPING | \ 115db550615SIgor Russkikh AQ_NIC_FLAG_RESETTING | AQ_NIC_FLAG_CLOSING | \ 116db550615SIgor Russkikh AQ_NIC_FLAG_ERR_UNPLUG | AQ_NIC_FLAG_ERR_HW) 117db550615SIgor Russkikh 118db550615SIgor Russkikh #define AQ_NIC_FLAGS_IS_NOT_TX_READY (AQ_NIC_FLAGS_IS_NOT_READY | \ 119db550615SIgor Russkikh AQ_NIC_LINK_DOWN) 120db550615SIgor Russkikh 1214948293fSIgor Russkikh #define AQ_HW_MEDIA_TYPE_TP 1U 1224948293fSIgor Russkikh #define AQ_HW_MEDIA_TYPE_FIBRE 2U 1234948293fSIgor Russkikh 124c1af5427SAnton Mikaev #define AQ_HW_TXD_MULTIPLE 8U 125c1af5427SAnton Mikaev #define AQ_HW_RXD_MULTIPLE 8U 126c1af5427SAnton Mikaev 12794b3b542SIgor Russkikh #define AQ_HW_MULTICAST_ADDRESS_MAX 32U 12894b3b542SIgor Russkikh 1298ce84271SDmitry Bezrukov #define AQ_HW_PTP_TC 2U 1308ce84271SDmitry Bezrukov 131d1287ce4SNikita Danilov #define AQ_HW_LED_BLINK 0x2U 132d1287ce4SNikita Danilov #define AQ_HW_LED_DEFAULT 0x0U 133d1287ce4SNikita Danilov 134ea4b4d7fSIgor Russkikh enum aq_priv_flags { 135ea4b4d7fSIgor Russkikh AQ_HW_LOOPBACK_DMA_SYS, 136ea4b4d7fSIgor Russkikh AQ_HW_LOOPBACK_PKT_SYS, 137ea4b4d7fSIgor Russkikh AQ_HW_LOOPBACK_DMA_NET, 138ea4b4d7fSIgor Russkikh AQ_HW_LOOPBACK_PHYINT_SYS, 139ea4b4d7fSIgor Russkikh AQ_HW_LOOPBACK_PHYEXT_SYS, 140ea4b4d7fSIgor Russkikh }; 141ea4b4d7fSIgor Russkikh 142ea4b4d7fSIgor Russkikh #define AQ_HW_LOOPBACK_MASK (BIT(AQ_HW_LOOPBACK_DMA_SYS) |\ 143ea4b4d7fSIgor Russkikh BIT(AQ_HW_LOOPBACK_PKT_SYS) |\ 144ea4b4d7fSIgor Russkikh BIT(AQ_HW_LOOPBACK_DMA_NET) |\ 145ea4b4d7fSIgor Russkikh BIT(AQ_HW_LOOPBACK_PHYINT_SYS) |\ 146ea4b4d7fSIgor Russkikh BIT(AQ_HW_LOOPBACK_PHYEXT_SYS)) 147ea4b4d7fSIgor Russkikh 148d1ad88feSMark Starovoytov #define ATL_HW_CHIP_MIPS 0x00000001U 149d1ad88feSMark Starovoytov #define ATL_HW_CHIP_TPO2 0x00000002U 150d1ad88feSMark Starovoytov #define ATL_HW_CHIP_RPF2 0x00000004U 151d1ad88feSMark Starovoytov #define ATL_HW_CHIP_MPI_AQ 0x00000010U 152d1ad88feSMark Starovoytov #define ATL_HW_CHIP_ATLANTIC 0x00800000U 153d1ad88feSMark Starovoytov #define ATL_HW_CHIP_REVISION_A0 0x01000000U 154d1ad88feSMark Starovoytov #define ATL_HW_CHIP_REVISION_B0 0x02000000U 155d1ad88feSMark Starovoytov #define ATL_HW_CHIP_REVISION_B1 0x04000000U 156d1ad88feSMark Starovoytov #define ATL_HW_CHIP_ANTIGUA 0x08000000U 157d1ad88feSMark Starovoytov 158d1ad88feSMark Starovoytov #define ATL_HW_IS_CHIP_FEATURE(_HW_, _F_) (!!(ATL_HW_CHIP_##_F_ & \ 159d1ad88feSMark Starovoytov (_HW_)->chip_features)) 160d1ad88feSMark Starovoytov 161753f4783SDavid VomLehn struct aq_hw_s { 16278f5193dSIgor Russkikh atomic_t flags; 163c8c82eb3SIgor Russkikh u8 rbl_enabled:1; 164753f4783SDavid VomLehn struct aq_nic_cfg_s *aq_nic_cfg; 1650c58c35fSIgor Russkikh const struct aq_fw_ops *aq_fw_ops; 166753f4783SDavid VomLehn void __iomem *mmio; 167753f4783SDavid VomLehn struct aq_hw_link_status_s aq_link_status; 1688f60f762SNikita Danilov struct hw_atl_utils_mbox mbox; 1691a713f87SIgor Russkikh struct hw_atl_stats_s last_stats; 1701a713f87SIgor Russkikh struct aq_stats_s curr_stats; 1711a713f87SIgor Russkikh u64 speed; 1721a713f87SIgor Russkikh u32 itr_tx; 1731a713f87SIgor Russkikh u32 itr_rx; 1741a713f87SIgor Russkikh unsigned int chip_features; 1751a713f87SIgor Russkikh u32 fw_ver_actual; 1761a713f87SIgor Russkikh atomic_t dpc; 1771a713f87SIgor Russkikh u32 mbox_addr; 1781a713f87SIgor Russkikh u32 rpc_addr; 179dc12f75aSNikita Danilov u32 settings_addr; 1801a713f87SIgor Russkikh u32 rpc_tid; 1818f60f762SNikita Danilov struct hw_atl_utils_fw_rpc rpc; 182910479a9SEgor Pomozov s64 ptp_clk_offset; 183dbcd6806SDmitry Bezrukov u16 phy_id; 184258ff0cfSDmitry Bogdanov void *priv; 185753f4783SDavid VomLehn }; 186753f4783SDavid VomLehn 187753f4783SDavid VomLehn struct aq_ring_s; 188753f4783SDavid VomLehn struct aq_ring_param_s; 189753f4783SDavid VomLehn struct sk_buff; 190a6ed6f22SDmitry Bogdanov struct aq_rx_filter_l3l4; 191753f4783SDavid VomLehn 192753f4783SDavid VomLehn struct aq_hw_ops { 193753f4783SDavid VomLehn 194753f4783SDavid VomLehn int (*hw_ring_tx_xmit)(struct aq_hw_s *self, struct aq_ring_s *aq_ring, 195753f4783SDavid VomLehn unsigned int frags); 196753f4783SDavid VomLehn 197753f4783SDavid VomLehn int (*hw_ring_rx_receive)(struct aq_hw_s *self, 198753f4783SDavid VomLehn struct aq_ring_s *aq_ring); 199753f4783SDavid VomLehn 200753f4783SDavid VomLehn int (*hw_ring_rx_fill)(struct aq_hw_s *self, struct aq_ring_s *aq_ring, 201753f4783SDavid VomLehn unsigned int sw_tail_old); 202753f4783SDavid VomLehn 203753f4783SDavid VomLehn int (*hw_ring_tx_head_update)(struct aq_hw_s *self, 204753f4783SDavid VomLehn struct aq_ring_s *aq_ring); 205753f4783SDavid VomLehn 206753f4783SDavid VomLehn int (*hw_set_mac_address)(struct aq_hw_s *self, u8 *mac_addr); 207753f4783SDavid VomLehn 208099d074eSMark Starovoytov int (*hw_soft_reset)(struct aq_hw_s *self); 209099d074eSMark Starovoytov 210099d074eSMark Starovoytov int (*hw_prepare)(struct aq_hw_s *self, 211099d074eSMark Starovoytov const struct aq_fw_ops **fw_ops); 212099d074eSMark Starovoytov 213753f4783SDavid VomLehn int (*hw_reset)(struct aq_hw_s *self); 214753f4783SDavid VomLehn 2151a713f87SIgor Russkikh int (*hw_init)(struct aq_hw_s *self, u8 *mac_addr); 216753f4783SDavid VomLehn 217753f4783SDavid VomLehn int (*hw_start)(struct aq_hw_s *self); 218753f4783SDavid VomLehn 219753f4783SDavid VomLehn int (*hw_stop)(struct aq_hw_s *self); 220753f4783SDavid VomLehn 221753f4783SDavid VomLehn int (*hw_ring_tx_init)(struct aq_hw_s *self, struct aq_ring_s *aq_ring, 222753f4783SDavid VomLehn struct aq_ring_param_s *aq_ring_param); 223753f4783SDavid VomLehn 224753f4783SDavid VomLehn int (*hw_ring_tx_start)(struct aq_hw_s *self, 225753f4783SDavid VomLehn struct aq_ring_s *aq_ring); 226753f4783SDavid VomLehn 227753f4783SDavid VomLehn int (*hw_ring_tx_stop)(struct aq_hw_s *self, 228753f4783SDavid VomLehn struct aq_ring_s *aq_ring); 229753f4783SDavid VomLehn 230753f4783SDavid VomLehn int (*hw_ring_rx_init)(struct aq_hw_s *self, 231753f4783SDavid VomLehn struct aq_ring_s *aq_ring, 232753f4783SDavid VomLehn struct aq_ring_param_s *aq_ring_param); 233753f4783SDavid VomLehn 234753f4783SDavid VomLehn int (*hw_ring_rx_start)(struct aq_hw_s *self, 235753f4783SDavid VomLehn struct aq_ring_s *aq_ring); 236753f4783SDavid VomLehn 237753f4783SDavid VomLehn int (*hw_ring_rx_stop)(struct aq_hw_s *self, 238753f4783SDavid VomLehn struct aq_ring_s *aq_ring); 239753f4783SDavid VomLehn 240753f4783SDavid VomLehn int (*hw_irq_enable)(struct aq_hw_s *self, u64 mask); 241753f4783SDavid VomLehn 242753f4783SDavid VomLehn int (*hw_irq_disable)(struct aq_hw_s *self, u64 mask); 243753f4783SDavid VomLehn 244753f4783SDavid VomLehn int (*hw_irq_read)(struct aq_hw_s *self, u64 *mask); 245753f4783SDavid VomLehn 246753f4783SDavid VomLehn int (*hw_packet_filter_set)(struct aq_hw_s *self, 247753f4783SDavid VomLehn unsigned int packet_filter); 248753f4783SDavid VomLehn 249a6ed6f22SDmitry Bogdanov int (*hw_filter_l3l4_set)(struct aq_hw_s *self, 250a6ed6f22SDmitry Bogdanov struct aq_rx_filter_l3l4 *data); 251a6ed6f22SDmitry Bogdanov 252a6ed6f22SDmitry Bogdanov int (*hw_filter_l3l4_clear)(struct aq_hw_s *self, 253a6ed6f22SDmitry Bogdanov struct aq_rx_filter_l3l4 *data); 254a6ed6f22SDmitry Bogdanov 2559a8cac4bSDmitry Bogdanov int (*hw_filter_l2_set)(struct aq_hw_s *self, 2569a8cac4bSDmitry Bogdanov struct aq_rx_filter_l2 *data); 2579a8cac4bSDmitry Bogdanov 2589a8cac4bSDmitry Bogdanov int (*hw_filter_l2_clear)(struct aq_hw_s *self, 2599a8cac4bSDmitry Bogdanov struct aq_rx_filter_l2 *data); 2609a8cac4bSDmitry Bogdanov 26154bcb3d1SDmitry Bogdanov int (*hw_filter_vlan_set)(struct aq_hw_s *self, 26254bcb3d1SDmitry Bogdanov struct aq_rx_filter_vlan *aq_vlans); 26354bcb3d1SDmitry Bogdanov 26454bcb3d1SDmitry Bogdanov int (*hw_filter_vlan_ctrl)(struct aq_hw_s *self, bool enable); 26554bcb3d1SDmitry Bogdanov 266753f4783SDavid VomLehn int (*hw_multicast_list_set)(struct aq_hw_s *self, 26794b3b542SIgor Russkikh u8 ar_mac[AQ_HW_MULTICAST_ADDRESS_MAX] 268753f4783SDavid VomLehn [ETH_ALEN], 269753f4783SDavid VomLehn u32 count); 270753f4783SDavid VomLehn 271b82ee71aSIgor Russkikh int (*hw_interrupt_moderation_set)(struct aq_hw_s *self); 272753f4783SDavid VomLehn 273753f4783SDavid VomLehn int (*hw_rss_set)(struct aq_hw_s *self, 274753f4783SDavid VomLehn struct aq_rss_parameters *rss_params); 275753f4783SDavid VomLehn 276753f4783SDavid VomLehn int (*hw_rss_hash_set)(struct aq_hw_s *self, 277753f4783SDavid VomLehn struct aq_rss_parameters *rss_params); 278753f4783SDavid VomLehn 279753f4783SDavid VomLehn int (*hw_get_regs)(struct aq_hw_s *self, 2804cbc9f92SIgor Russkikh const struct aq_hw_caps_s *aq_hw_caps, 2814cbc9f92SIgor Russkikh u32 *regs_buff); 282753f4783SDavid VomLehn 283be08d839SIgor Russkikh struct aq_stats_s *(*hw_get_hw_stats)(struct aq_hw_s *self); 284753f4783SDavid VomLehn 28536e90a52SNikita Danilov u32 (*hw_get_fw_version)(struct aq_hw_s *self); 286753f4783SDavid VomLehn 287bbb67a44SDmitry Bogdanov int (*hw_set_offload)(struct aq_hw_s *self, 288bbb67a44SDmitry Bogdanov struct aq_nic_cfg_s *aq_nic_cfg); 289bbb67a44SDmitry Bogdanov 29004a18399SEgor Pomozov int (*hw_ring_hwts_rx_fill)(struct aq_hw_s *self, 29104a18399SEgor Pomozov struct aq_ring_s *aq_ring); 29204a18399SEgor Pomozov 29304a18399SEgor Pomozov int (*hw_ring_hwts_rx_receive)(struct aq_hw_s *self, 29404a18399SEgor Pomozov struct aq_ring_s *ring); 29504a18399SEgor Pomozov 296910479a9SEgor Pomozov void (*hw_get_ptp_ts)(struct aq_hw_s *self, u64 *stamp); 297910479a9SEgor Pomozov 298910479a9SEgor Pomozov int (*hw_adj_clock_freq)(struct aq_hw_s *self, s32 delta); 299910479a9SEgor Pomozov 300910479a9SEgor Pomozov int (*hw_adj_sys_clock)(struct aq_hw_s *self, s64 delta); 301910479a9SEgor Pomozov 302910479a9SEgor Pomozov int (*hw_set_sys_clock)(struct aq_hw_s *self, u64 time, u64 ts); 303910479a9SEgor Pomozov 3049c477032SDmitry Bezrukov int (*hw_ts_to_sys_clock)(struct aq_hw_s *self, u64 ts, u64 *time); 3059c477032SDmitry Bezrukov 3069c477032SDmitry Bezrukov int (*hw_gpio_pulse)(struct aq_hw_s *self, u32 index, u64 start, 3079c477032SDmitry Bezrukov u32 period); 3089c477032SDmitry Bezrukov 3099c477032SDmitry Bezrukov int (*hw_extts_gpio_enable)(struct aq_hw_s *self, u32 index, 3109c477032SDmitry Bezrukov u32 enable); 3119c477032SDmitry Bezrukov 3129c477032SDmitry Bezrukov int (*hw_get_sync_ts)(struct aq_hw_s *self, u64 *ts); 3139c477032SDmitry Bezrukov 31404a18399SEgor Pomozov u16 (*rx_extract_ts)(struct aq_hw_s *self, u8 *p, unsigned int len, 31504a18399SEgor Pomozov u64 *timestamp); 31604a18399SEgor Pomozov 31704a18399SEgor Pomozov int (*extract_hwts)(struct aq_hw_s *self, u8 *p, unsigned int len, 31804a18399SEgor Pomozov u64 *timestamp); 31904a18399SEgor Pomozov 32035e8e8b4SIgor Russkikh int (*hw_set_fc)(struct aq_hw_s *self, u32 fc, u32 tc); 321ea4b4d7fSIgor Russkikh 322ea4b4d7fSIgor Russkikh int (*hw_set_loopback)(struct aq_hw_s *self, u32 mode, bool enable); 323753f4783SDavid VomLehn }; 324753f4783SDavid VomLehn 3250c58c35fSIgor Russkikh struct aq_fw_ops { 3260c58c35fSIgor Russkikh int (*init)(struct aq_hw_s *self); 3270c58c35fSIgor Russkikh 32844e00dd8SIgor Russkikh int (*deinit)(struct aq_hw_s *self); 32944e00dd8SIgor Russkikh 3300c58c35fSIgor Russkikh int (*reset)(struct aq_hw_s *self); 3310c58c35fSIgor Russkikh 332b8d68b62SAnton Mikaev int (*renegotiate)(struct aq_hw_s *self); 333b8d68b62SAnton Mikaev 3340c58c35fSIgor Russkikh int (*get_mac_permanent)(struct aq_hw_s *self, u8 *mac); 3350c58c35fSIgor Russkikh 3360c58c35fSIgor Russkikh int (*set_link_speed)(struct aq_hw_s *self, u32 speed); 3370c58c35fSIgor Russkikh 33844e00dd8SIgor Russkikh int (*set_state)(struct aq_hw_s *self, 33944e00dd8SIgor Russkikh enum hal_atl_utils_fw_state_e state); 3400c58c35fSIgor Russkikh 3410c58c35fSIgor Russkikh int (*update_link_status)(struct aq_hw_s *self); 3420c58c35fSIgor Russkikh 3430c58c35fSIgor Russkikh int (*update_stats)(struct aq_hw_s *self); 34444e00dd8SIgor Russkikh 3458f894011SYana Esina int (*get_phy_temp)(struct aq_hw_s *self, int *temp); 3468f894011SYana Esina 34735e8e8b4SIgor Russkikh u32 (*get_flow_control)(struct aq_hw_s *self, u32 *fcmode); 34835e8e8b4SIgor Russkikh 34944e00dd8SIgor Russkikh int (*set_flow_control)(struct aq_hw_s *self); 350a0da96c0SYana Esina 351d1287ce4SNikita Danilov int (*led_control)(struct aq_hw_s *self, u32 mode); 352d1287ce4SNikita Danilov 353ea4b4d7fSIgor Russkikh int (*set_phyloopback)(struct aq_hw_s *self, u32 mode, bool enable); 354ea4b4d7fSIgor Russkikh 355a0da96c0SYana Esina int (*set_power)(struct aq_hw_s *self, unsigned int power_state, 356a0da96c0SYana Esina u8 *mac); 35792ab6407SYana Esina 358910479a9SEgor Pomozov int (*send_fw_request)(struct aq_hw_s *self, 359910479a9SEgor Pomozov const struct hw_fw_request_iface *fw_req, 360910479a9SEgor Pomozov size_t size); 361910479a9SEgor Pomozov 362910479a9SEgor Pomozov void (*enable_ptp)(struct aq_hw_s *self, int enable); 363910479a9SEgor Pomozov 364f08a464cSEgor Pomozov void (*adjust_ptp)(struct aq_hw_s *self, uint64_t adj); 365f08a464cSEgor Pomozov 36692ab6407SYana Esina int (*set_eee_rate)(struct aq_hw_s *self, u32 speed); 36792ab6407SYana Esina 36892ab6407SYana Esina int (*get_eee_rate)(struct aq_hw_s *self, u32 *rate, 36992ab6407SYana Esina u32 *supported_rates); 37062c1c2e6SDmitry Bogdanov 37162c1c2e6SDmitry Bogdanov u32 (*get_link_capabilities)(struct aq_hw_s *self); 37262c1c2e6SDmitry Bogdanov 37362c1c2e6SDmitry Bogdanov int (*send_macsec_req)(struct aq_hw_s *self, 37462c1c2e6SDmitry Bogdanov struct macsec_msg_fw_request *msg, 37562c1c2e6SDmitry Bogdanov struct macsec_msg_fw_response *resp); 3760c58c35fSIgor Russkikh }; 3770c58c35fSIgor Russkikh 378753f4783SDavid VomLehn #endif /* AQ_HW_H */ 379