1f6761961SDmitry Bogdanov /* SPDX-License-Identifier: GPL-2.0-only */ 2f6761961SDmitry Bogdanov /* Atlantic Network Driver 3f6761961SDmitry Bogdanov * Copyright (C) 2020 Marvell International Ltd. 4f6761961SDmitry Bogdanov */ 5f6761961SDmitry Bogdanov 6f6761961SDmitry Bogdanov #ifndef HW_ATL2_UTILS_H 7f6761961SDmitry Bogdanov #define HW_ATL2_UTILS_H 8f6761961SDmitry Bogdanov 9c1be0bf0SDmitry Bogdanov #include "aq_hw.h" 10c1be0bf0SDmitry Bogdanov 11f6761961SDmitry Bogdanov /* F W A P I */ 12f6761961SDmitry Bogdanov 13f6761961SDmitry Bogdanov struct link_options_s { 14f6761961SDmitry Bogdanov u8 link_up:1; 15f6761961SDmitry Bogdanov u8 link_renegotiate:1; 16f6761961SDmitry Bogdanov u8 minimal_link_speed:1; 17f6761961SDmitry Bogdanov u8 internal_loopback:1; 18f6761961SDmitry Bogdanov u8 external_loopback:1; 19f6761961SDmitry Bogdanov u8 rate_10M_hd:1; 20f6761961SDmitry Bogdanov u8 rate_100M_hd:1; 21f6761961SDmitry Bogdanov u8 rate_1G_hd:1; 22f6761961SDmitry Bogdanov 23f6761961SDmitry Bogdanov u8 rate_10M:1; 24f6761961SDmitry Bogdanov u8 rate_100M:1; 25f6761961SDmitry Bogdanov u8 rate_1G:1; 26f6761961SDmitry Bogdanov u8 rate_2P5G:1; 27f6761961SDmitry Bogdanov u8 rate_N2P5G:1; 28f6761961SDmitry Bogdanov u8 rate_5G:1; 29f6761961SDmitry Bogdanov u8 rate_N5G:1; 30f6761961SDmitry Bogdanov u8 rate_10G:1; 31f6761961SDmitry Bogdanov 32f6761961SDmitry Bogdanov u8 eee_100M:1; 33f6761961SDmitry Bogdanov u8 eee_1G:1; 34f6761961SDmitry Bogdanov u8 eee_2P5G:1; 35f6761961SDmitry Bogdanov u8 eee_5G:1; 36f6761961SDmitry Bogdanov u8 eee_10G:1; 37f6761961SDmitry Bogdanov u8 rsvd3:3; 38f6761961SDmitry Bogdanov 39f6761961SDmitry Bogdanov u8 pause_rx:1; 40f6761961SDmitry Bogdanov u8 pause_tx:1; 41f6761961SDmitry Bogdanov u8 rsvd4:1; 42f6761961SDmitry Bogdanov u8 downshift:1; 43f6761961SDmitry Bogdanov u8 downshift_retry:4; 44f6761961SDmitry Bogdanov }; 45f6761961SDmitry Bogdanov 46f6761961SDmitry Bogdanov struct link_control_s { 47f6761961SDmitry Bogdanov u8 mode:4; 48f6761961SDmitry Bogdanov u8 disable_crc_corruption:1; 49f6761961SDmitry Bogdanov u8 discard_short_frames:1; 50f6761961SDmitry Bogdanov u8 flow_control_mode:1; 51f6761961SDmitry Bogdanov u8 disable_length_check:1; 52f6761961SDmitry Bogdanov 53f6761961SDmitry Bogdanov u8 discard_errored_frames:1; 54f6761961SDmitry Bogdanov u8 control_frame_enable:1; 55f6761961SDmitry Bogdanov u8 enable_tx_padding:1; 56f6761961SDmitry Bogdanov u8 enable_crc_forwarding:1; 57f6761961SDmitry Bogdanov u8 enable_frame_padding_removal_rx: 1; 58f6761961SDmitry Bogdanov u8 promiscuous_mode: 1; 59f6761961SDmitry Bogdanov u8 rsvd:2; 60f6761961SDmitry Bogdanov 61f6761961SDmitry Bogdanov u16 rsvd2; 62f6761961SDmitry Bogdanov }; 63f6761961SDmitry Bogdanov 64f6761961SDmitry Bogdanov struct thermal_shutdown_s { 65f6761961SDmitry Bogdanov u8 enable:1; 66f6761961SDmitry Bogdanov u8 warning_enable:1; 67f6761961SDmitry Bogdanov u8 rsvd:6; 68f6761961SDmitry Bogdanov 69f6761961SDmitry Bogdanov u8 shutdown_temperature; 70f6761961SDmitry Bogdanov u8 cold_temperature; 71f6761961SDmitry Bogdanov u8 warning_temperature; 72f6761961SDmitry Bogdanov }; 73f6761961SDmitry Bogdanov 74f6761961SDmitry Bogdanov struct mac_address_s { 75f6761961SDmitry Bogdanov u8 mac_address[6]; 76f6761961SDmitry Bogdanov }; 77f6761961SDmitry Bogdanov 78f6761961SDmitry Bogdanov struct mac_address_aligned_s { 79f6761961SDmitry Bogdanov struct mac_address_s aligned; 80f6761961SDmitry Bogdanov u16 rsvd; 81f6761961SDmitry Bogdanov }; 82f6761961SDmitry Bogdanov 83f6761961SDmitry Bogdanov struct sleep_proxy_s { 84f6761961SDmitry Bogdanov struct wake_on_lan_s { 85f6761961SDmitry Bogdanov u8 wake_on_magic_packet:1; 86f6761961SDmitry Bogdanov u8 wake_on_pattern:1; 87f6761961SDmitry Bogdanov u8 wake_on_link_up:1; 88f6761961SDmitry Bogdanov u8 wake_on_link_down:1; 89f6761961SDmitry Bogdanov u8 wake_on_ping:1; 90f6761961SDmitry Bogdanov u8 wake_on_timer:1; 91f6761961SDmitry Bogdanov u8 rsvd:2; 92f6761961SDmitry Bogdanov 93f6761961SDmitry Bogdanov u8 rsvd2; 94f6761961SDmitry Bogdanov u16 rsvd3; 95f6761961SDmitry Bogdanov 96f6761961SDmitry Bogdanov u32 link_up_timeout; 97f6761961SDmitry Bogdanov u32 link_down_timeout; 98f6761961SDmitry Bogdanov u32 timer; 99f6761961SDmitry Bogdanov } wake_on_lan; 100f6761961SDmitry Bogdanov 101f6761961SDmitry Bogdanov struct { 102f6761961SDmitry Bogdanov u32 mask[4]; 103f6761961SDmitry Bogdanov u32 crc32; 104f6761961SDmitry Bogdanov } wake_up_pattern[8]; 105f6761961SDmitry Bogdanov 10638e86bfcSMark Starovoytov struct __packed { 107f6761961SDmitry Bogdanov u8 arp_responder:1; 108f6761961SDmitry Bogdanov u8 echo_responder:1; 109f6761961SDmitry Bogdanov u8 igmp_client:1; 110f6761961SDmitry Bogdanov u8 echo_truncate:1; 111f6761961SDmitry Bogdanov u8 address_guard:1; 112f6761961SDmitry Bogdanov u8 ignore_fragmented:1; 113f6761961SDmitry Bogdanov u8 rsvd:2; 114f6761961SDmitry Bogdanov 115f6761961SDmitry Bogdanov u16 echo_max_len; 116f6761961SDmitry Bogdanov u8 rsvd2; 117f6761961SDmitry Bogdanov } ipv4_offload; 118f6761961SDmitry Bogdanov 119f6761961SDmitry Bogdanov u32 ipv4_offload_addr[8]; 120f6761961SDmitry Bogdanov u32 reserved[8]; 121f6761961SDmitry Bogdanov 12238e86bfcSMark Starovoytov struct __packed { 123f6761961SDmitry Bogdanov u8 ns_responder:1; 124f6761961SDmitry Bogdanov u8 echo_responder:1; 125f6761961SDmitry Bogdanov u8 mld_client:1; 126f6761961SDmitry Bogdanov u8 echo_truncate:1; 127f6761961SDmitry Bogdanov u8 address_guard:1; 128f6761961SDmitry Bogdanov u8 rsvd:3; 129f6761961SDmitry Bogdanov 130f6761961SDmitry Bogdanov u16 echo_max_len; 131f6761961SDmitry Bogdanov u8 rsvd2; 132f6761961SDmitry Bogdanov } ipv6_offload; 133f6761961SDmitry Bogdanov 134f6761961SDmitry Bogdanov u32 ipv6_offload_addr[16][4]; 135f6761961SDmitry Bogdanov 136f6761961SDmitry Bogdanov struct { 137f6761961SDmitry Bogdanov u16 port[16]; 138f6761961SDmitry Bogdanov } tcp_port_offload; 139f6761961SDmitry Bogdanov 140f6761961SDmitry Bogdanov struct { 141f6761961SDmitry Bogdanov u16 port[16]; 142f6761961SDmitry Bogdanov } udp_port_offload; 143f6761961SDmitry Bogdanov 144f6761961SDmitry Bogdanov struct { 145f6761961SDmitry Bogdanov u32 retry_count; 146f6761961SDmitry Bogdanov u32 retry_interval; 147f6761961SDmitry Bogdanov } ka4_offload; 148f6761961SDmitry Bogdanov 149f6761961SDmitry Bogdanov struct { 150f6761961SDmitry Bogdanov u32 timeout; 151f6761961SDmitry Bogdanov u16 local_port; 152f6761961SDmitry Bogdanov u16 remote_port; 153f6761961SDmitry Bogdanov u8 remote_mac_addr[6]; 154f6761961SDmitry Bogdanov u16 rsvd; 155f6761961SDmitry Bogdanov u32 rsvd2; 156f6761961SDmitry Bogdanov u32 rsvd3; 157f6761961SDmitry Bogdanov u16 rsvd4; 158f6761961SDmitry Bogdanov u16 win_size; 159f6761961SDmitry Bogdanov u32 seq_num; 160f6761961SDmitry Bogdanov u32 ack_num; 161f6761961SDmitry Bogdanov u32 local_ip; 162f6761961SDmitry Bogdanov u32 remote_ip; 163f6761961SDmitry Bogdanov } ka4_connection[16]; 164f6761961SDmitry Bogdanov 165f6761961SDmitry Bogdanov struct { 166f6761961SDmitry Bogdanov u32 retry_count; 167f6761961SDmitry Bogdanov u32 retry_interval; 168f6761961SDmitry Bogdanov } ka6_offload; 169f6761961SDmitry Bogdanov 170f6761961SDmitry Bogdanov struct { 171f6761961SDmitry Bogdanov u32 timeout; 172f6761961SDmitry Bogdanov u16 local_port; 173f6761961SDmitry Bogdanov u16 remote_port; 174f6761961SDmitry Bogdanov u8 remote_mac_addr[6]; 175f6761961SDmitry Bogdanov u16 rsvd; 176f6761961SDmitry Bogdanov u32 rsvd2; 177f6761961SDmitry Bogdanov u32 rsvd3; 178f6761961SDmitry Bogdanov u16 rsvd4; 179f6761961SDmitry Bogdanov u16 win_size; 180f6761961SDmitry Bogdanov u32 seq_num; 181f6761961SDmitry Bogdanov u32 ack_num; 182f6761961SDmitry Bogdanov u32 local_ip[4]; 183f6761961SDmitry Bogdanov u32 remote_ip[4]; 184f6761961SDmitry Bogdanov } ka6_connection[16]; 185f6761961SDmitry Bogdanov 186f6761961SDmitry Bogdanov struct { 187f6761961SDmitry Bogdanov u32 rr_count; 188f6761961SDmitry Bogdanov u32 rr_buf_len; 189f6761961SDmitry Bogdanov u32 idx_offset; 190f6761961SDmitry Bogdanov u32 rr__offset; 191f6761961SDmitry Bogdanov } mdns_offload; 192f6761961SDmitry Bogdanov }; 193f6761961SDmitry Bogdanov 194f6761961SDmitry Bogdanov struct pause_quanta_s { 195f6761961SDmitry Bogdanov u16 quanta_10M; 196f6761961SDmitry Bogdanov u16 threshold_10M; 197f6761961SDmitry Bogdanov u16 quanta_100M; 198f6761961SDmitry Bogdanov u16 threshold_100M; 199f6761961SDmitry Bogdanov u16 quanta_1G; 200f6761961SDmitry Bogdanov u16 threshold_1G; 201f6761961SDmitry Bogdanov u16 quanta_2P5G; 202f6761961SDmitry Bogdanov u16 threshold_2P5G; 203f6761961SDmitry Bogdanov u16 quanta_5G; 204f6761961SDmitry Bogdanov u16 threshold_5G; 205f6761961SDmitry Bogdanov u16 quanta_10G; 206f6761961SDmitry Bogdanov u16 threshold_10G; 207f6761961SDmitry Bogdanov }; 208f6761961SDmitry Bogdanov 209f6761961SDmitry Bogdanov struct data_buffer_status_s { 210f6761961SDmitry Bogdanov u32 data_offset; 211f6761961SDmitry Bogdanov u32 data_length; 212f6761961SDmitry Bogdanov }; 213f6761961SDmitry Bogdanov 214f6761961SDmitry Bogdanov struct device_caps_s { 215f6761961SDmitry Bogdanov u8 finite_flashless:1; 216f6761961SDmitry Bogdanov u8 cable_diag:1; 217f6761961SDmitry Bogdanov u8 ncsi:1; 218f6761961SDmitry Bogdanov u8 avb:1; 219f6761961SDmitry Bogdanov u8 rsvd:4; 220f6761961SDmitry Bogdanov 221f6761961SDmitry Bogdanov u8 rsvd2; 222f6761961SDmitry Bogdanov u16 rsvd3; 223f6761961SDmitry Bogdanov u32 rsvd4; 224f6761961SDmitry Bogdanov }; 225f6761961SDmitry Bogdanov 226f6761961SDmitry Bogdanov struct version_s { 227f6761961SDmitry Bogdanov struct bundle_version_t { 228f6761961SDmitry Bogdanov u8 major; 229f6761961SDmitry Bogdanov u8 minor; 230f6761961SDmitry Bogdanov u16 build; 231f6761961SDmitry Bogdanov } bundle; 232f6761961SDmitry Bogdanov struct mac_version_t { 233f6761961SDmitry Bogdanov u8 major; 234f6761961SDmitry Bogdanov u8 minor; 235f6761961SDmitry Bogdanov u16 build; 236f6761961SDmitry Bogdanov } mac; 237f6761961SDmitry Bogdanov struct phy_version_t { 238f6761961SDmitry Bogdanov u8 major; 239f6761961SDmitry Bogdanov u8 minor; 240f6761961SDmitry Bogdanov u16 build; 241f6761961SDmitry Bogdanov } phy; 242*2087ced0SDmitry Bogdanov u32 drv_iface_ver:4; 243*2087ced0SDmitry Bogdanov u32 rsvd:28; 244f6761961SDmitry Bogdanov }; 245f6761961SDmitry Bogdanov 246f6761961SDmitry Bogdanov struct link_status_s { 247f6761961SDmitry Bogdanov u8 link_state:4; 248f6761961SDmitry Bogdanov u8 link_rate:4; 249f6761961SDmitry Bogdanov 250f6761961SDmitry Bogdanov u8 pause_tx:1; 251f6761961SDmitry Bogdanov u8 pause_rx:1; 252f6761961SDmitry Bogdanov u8 eee:1; 253f6761961SDmitry Bogdanov u8 duplex:1; 254f6761961SDmitry Bogdanov u8 rsvd:4; 255f6761961SDmitry Bogdanov 256f6761961SDmitry Bogdanov u16 rsvd2; 257f6761961SDmitry Bogdanov }; 258f6761961SDmitry Bogdanov 259f6761961SDmitry Bogdanov struct wol_status_s { 260f6761961SDmitry Bogdanov u8 wake_count; 261f6761961SDmitry Bogdanov u8 wake_reason; 262f6761961SDmitry Bogdanov 263f6761961SDmitry Bogdanov u16 wake_up_packet_length :12; 264f6761961SDmitry Bogdanov u16 wake_up_pattern_number :3; 265f6761961SDmitry Bogdanov u16 rsvd:1; 266f6761961SDmitry Bogdanov 267f6761961SDmitry Bogdanov u32 wake_up_packet[379]; 268f6761961SDmitry Bogdanov }; 269f6761961SDmitry Bogdanov 270f6761961SDmitry Bogdanov struct mac_health_monitor_s { 271f6761961SDmitry Bogdanov u8 mac_ready:1; 272f6761961SDmitry Bogdanov u8 mac_fault:1; 273f6761961SDmitry Bogdanov u8 mac_flashless_finished:1; 274f6761961SDmitry Bogdanov u8 rsvd:5; 275f6761961SDmitry Bogdanov 276f6761961SDmitry Bogdanov u8 mac_temperature; 277f6761961SDmitry Bogdanov u16 mac_heart_beat; 278f6761961SDmitry Bogdanov u16 mac_fault_code; 279f6761961SDmitry Bogdanov u16 rsvd2; 280f6761961SDmitry Bogdanov }; 281f6761961SDmitry Bogdanov 282f6761961SDmitry Bogdanov struct phy_health_monitor_s { 283f6761961SDmitry Bogdanov u8 phy_ready:1; 284f6761961SDmitry Bogdanov u8 phy_fault:1; 285f6761961SDmitry Bogdanov u8 phy_hot_warning:1; 286f6761961SDmitry Bogdanov u8 rsvd:5; 287f6761961SDmitry Bogdanov 288f6761961SDmitry Bogdanov u8 phy_temperature; 289f6761961SDmitry Bogdanov u16 phy_heart_beat; 290f6761961SDmitry Bogdanov u16 phy_fault_code; 291f6761961SDmitry Bogdanov u16 rsvd2; 292f6761961SDmitry Bogdanov }; 293f6761961SDmitry Bogdanov 294f6761961SDmitry Bogdanov struct device_link_caps_s { 295f6761961SDmitry Bogdanov u8 rsvd:3; 296f6761961SDmitry Bogdanov u8 internal_loopback:1; 297f6761961SDmitry Bogdanov u8 external_loopback:1; 298f6761961SDmitry Bogdanov u8 rate_10M_hd:1; 299f6761961SDmitry Bogdanov u8 rate_100M_hd:1; 300f6761961SDmitry Bogdanov u8 rate_1G_hd:1; 301f6761961SDmitry Bogdanov 302f6761961SDmitry Bogdanov u8 rate_10M:1; 303f6761961SDmitry Bogdanov u8 rate_100M:1; 304f6761961SDmitry Bogdanov u8 rate_1G:1; 305f6761961SDmitry Bogdanov u8 rate_2P5G:1; 306f6761961SDmitry Bogdanov u8 rate_N2P5G:1; 307f6761961SDmitry Bogdanov u8 rate_5G:1; 308f6761961SDmitry Bogdanov u8 rate_N5G:1; 309f6761961SDmitry Bogdanov u8 rate_10G:1; 310f6761961SDmitry Bogdanov 311f6761961SDmitry Bogdanov u8 rsvd3:1; 312f6761961SDmitry Bogdanov u8 eee_100M:1; 313f6761961SDmitry Bogdanov u8 eee_1G:1; 314f6761961SDmitry Bogdanov u8 eee_2P5G:1; 315f6761961SDmitry Bogdanov u8 rsvd4:1; 316f6761961SDmitry Bogdanov u8 eee_5G:1; 317f6761961SDmitry Bogdanov u8 rsvd5:1; 318f6761961SDmitry Bogdanov u8 eee_10G:1; 319f6761961SDmitry Bogdanov 320f6761961SDmitry Bogdanov u8 pause_rx:1; 321f6761961SDmitry Bogdanov u8 pause_tx:1; 322f6761961SDmitry Bogdanov u8 pfc:1; 323f6761961SDmitry Bogdanov u8 downshift:1; 324f6761961SDmitry Bogdanov u8 downshift_retry:4; 325f6761961SDmitry Bogdanov }; 326f6761961SDmitry Bogdanov 327f6761961SDmitry Bogdanov struct sleep_proxy_caps_s { 328f6761961SDmitry Bogdanov u8 ipv4_offload:1; 329f6761961SDmitry Bogdanov u8 ipv6_offload:1; 330f6761961SDmitry Bogdanov u8 tcp_port_offload:1; 331f6761961SDmitry Bogdanov u8 udp_port_offload:1; 332f6761961SDmitry Bogdanov u8 ka4_offload:1; 333f6761961SDmitry Bogdanov u8 ka6_offload:1; 334f6761961SDmitry Bogdanov u8 mdns_offload:1; 335f6761961SDmitry Bogdanov u8 wake_on_ping:1; 336f6761961SDmitry Bogdanov 337f6761961SDmitry Bogdanov u8 wake_on_magic_packet:1; 338f6761961SDmitry Bogdanov u8 wake_on_pattern:1; 339f6761961SDmitry Bogdanov u8 wake_on_timer:1; 340f6761961SDmitry Bogdanov u8 wake_on_link:1; 341f6761961SDmitry Bogdanov u8 wake_patterns_count:4; 342f6761961SDmitry Bogdanov 343f6761961SDmitry Bogdanov u8 ipv4_count; 344f6761961SDmitry Bogdanov u8 ipv6_count; 345f6761961SDmitry Bogdanov 346f6761961SDmitry Bogdanov u8 tcp_port_offload_count; 347f6761961SDmitry Bogdanov u8 udp_port_offload_count; 348f6761961SDmitry Bogdanov 349f6761961SDmitry Bogdanov u8 tcp4_ka_count; 350f6761961SDmitry Bogdanov u8 tcp6_ka_count; 351f6761961SDmitry Bogdanov 352f6761961SDmitry Bogdanov u8 igmp_offload:1; 353f6761961SDmitry Bogdanov u8 mld_offload:1; 354f6761961SDmitry Bogdanov u8 rsvd:6; 355f6761961SDmitry Bogdanov 356f6761961SDmitry Bogdanov u8 rsvd2; 357f6761961SDmitry Bogdanov u16 rsvd3; 358f6761961SDmitry Bogdanov }; 359f6761961SDmitry Bogdanov 360f6761961SDmitry Bogdanov struct lkp_link_caps_s { 361f6761961SDmitry Bogdanov u8 rsvd:5; 362f6761961SDmitry Bogdanov u8 rate_10M_hd:1; 363f6761961SDmitry Bogdanov u8 rate_100M_hd:1; 364f6761961SDmitry Bogdanov u8 rate_1G_hd:1; 365f6761961SDmitry Bogdanov 366f6761961SDmitry Bogdanov u8 rate_10M:1; 367f6761961SDmitry Bogdanov u8 rate_100M:1; 368f6761961SDmitry Bogdanov u8 rate_1G:1; 369f6761961SDmitry Bogdanov u8 rate_2P5G:1; 370f6761961SDmitry Bogdanov u8 rate_N2P5G:1; 371f6761961SDmitry Bogdanov u8 rate_5G:1; 372f6761961SDmitry Bogdanov u8 rate_N5G:1; 373f6761961SDmitry Bogdanov u8 rate_10G:1; 374f6761961SDmitry Bogdanov 375f6761961SDmitry Bogdanov u8 rsvd2:1; 376f6761961SDmitry Bogdanov u8 eee_100M:1; 377f6761961SDmitry Bogdanov u8 eee_1G:1; 378f6761961SDmitry Bogdanov u8 eee_2P5G:1; 379f6761961SDmitry Bogdanov u8 rsvd3:1; 380f6761961SDmitry Bogdanov u8 eee_5G:1; 381f6761961SDmitry Bogdanov u8 rsvd4:1; 382f6761961SDmitry Bogdanov u8 eee_10G:1; 383f6761961SDmitry Bogdanov 384f6761961SDmitry Bogdanov u8 pause_rx:1; 385f6761961SDmitry Bogdanov u8 pause_tx:1; 386f6761961SDmitry Bogdanov u8 rsvd5:6; 387f6761961SDmitry Bogdanov }; 388f6761961SDmitry Bogdanov 389f6761961SDmitry Bogdanov struct core_dump_s { 390f6761961SDmitry Bogdanov u32 reg0; 391f6761961SDmitry Bogdanov u32 reg1; 392f6761961SDmitry Bogdanov u32 reg2; 393f6761961SDmitry Bogdanov 394f6761961SDmitry Bogdanov u32 hi; 395f6761961SDmitry Bogdanov u32 lo; 396f6761961SDmitry Bogdanov 397f6761961SDmitry Bogdanov u32 regs[32]; 398f6761961SDmitry Bogdanov }; 399f6761961SDmitry Bogdanov 400f6761961SDmitry Bogdanov struct trace_s { 401f6761961SDmitry Bogdanov u32 sync_counter; 402f6761961SDmitry Bogdanov u32 mem_buffer[0x1ff]; 403f6761961SDmitry Bogdanov }; 404f6761961SDmitry Bogdanov 405f6761961SDmitry Bogdanov struct cable_diag_control_s { 406f6761961SDmitry Bogdanov u8 toggle :1; 407f6761961SDmitry Bogdanov u8 rsvd:7; 408f6761961SDmitry Bogdanov 409f6761961SDmitry Bogdanov u8 wait_timeout_sec; 410f6761961SDmitry Bogdanov u16 rsvd2; 411f6761961SDmitry Bogdanov }; 412f6761961SDmitry Bogdanov 413f6761961SDmitry Bogdanov struct cable_diag_lane_data_s { 414f6761961SDmitry Bogdanov u8 result_code; 415f6761961SDmitry Bogdanov u8 dist; 416f6761961SDmitry Bogdanov u8 far_dist; 417f6761961SDmitry Bogdanov u8 rsvd; 418f6761961SDmitry Bogdanov }; 419f6761961SDmitry Bogdanov 420f6761961SDmitry Bogdanov struct cable_diag_status_s { 421f6761961SDmitry Bogdanov struct cable_diag_lane_data_s lane_data[4]; 422f6761961SDmitry Bogdanov u8 transact_id; 423f6761961SDmitry Bogdanov u8 status:4; 424f6761961SDmitry Bogdanov u8 rsvd:4; 425f6761961SDmitry Bogdanov u16 rsvd2; 426f6761961SDmitry Bogdanov }; 427f6761961SDmitry Bogdanov 428*2087ced0SDmitry Bogdanov struct statistics_a0_s { 429f6761961SDmitry Bogdanov struct { 430f6761961SDmitry Bogdanov u32 link_up; 431f6761961SDmitry Bogdanov u32 link_down; 432f6761961SDmitry Bogdanov } link; 433f6761961SDmitry Bogdanov 434f6761961SDmitry Bogdanov struct { 435f6761961SDmitry Bogdanov u64 tx_unicast_octets; 436f6761961SDmitry Bogdanov u64 tx_multicast_octets; 437f6761961SDmitry Bogdanov u64 tx_broadcast_octets; 438f6761961SDmitry Bogdanov u64 rx_unicast_octets; 439f6761961SDmitry Bogdanov u64 rx_multicast_octets; 440f6761961SDmitry Bogdanov u64 rx_broadcast_octets; 441f6761961SDmitry Bogdanov 442f6761961SDmitry Bogdanov u32 tx_unicast_frames; 443f6761961SDmitry Bogdanov u32 tx_multicast_frames; 444f6761961SDmitry Bogdanov u32 tx_broadcast_frames; 445f6761961SDmitry Bogdanov u32 tx_errors; 446f6761961SDmitry Bogdanov 447f6761961SDmitry Bogdanov u32 rx_unicast_frames; 448f6761961SDmitry Bogdanov u32 rx_multicast_frames; 449f6761961SDmitry Bogdanov u32 rx_broadcast_frames; 450f6761961SDmitry Bogdanov u32 rx_dropped_frames; 451f6761961SDmitry Bogdanov u32 rx_error_frames; 452f6761961SDmitry Bogdanov 453f6761961SDmitry Bogdanov u32 tx_good_frames; 454f6761961SDmitry Bogdanov u32 rx_good_frames; 455f6761961SDmitry Bogdanov u32 reserve_fw_gap; 456f6761961SDmitry Bogdanov } msm; 457f6761961SDmitry Bogdanov u32 main_loop_cycles; 458f6761961SDmitry Bogdanov u32 reserve_fw_gap; 459f6761961SDmitry Bogdanov }; 460f6761961SDmitry Bogdanov 461*2087ced0SDmitry Bogdanov struct __packed statistics_b0_s { 462*2087ced0SDmitry Bogdanov u64 rx_good_octets; 463*2087ced0SDmitry Bogdanov u64 rx_pause_frames; 464*2087ced0SDmitry Bogdanov u64 rx_good_frames; 465*2087ced0SDmitry Bogdanov u64 rx_errors; 466*2087ced0SDmitry Bogdanov u64 rx_unicast_frames; 467*2087ced0SDmitry Bogdanov u64 rx_multicast_frames; 468*2087ced0SDmitry Bogdanov u64 rx_broadcast_frames; 469*2087ced0SDmitry Bogdanov 470*2087ced0SDmitry Bogdanov u64 tx_good_octets; 471*2087ced0SDmitry Bogdanov u64 tx_pause_frames; 472*2087ced0SDmitry Bogdanov u64 tx_good_frames; 473*2087ced0SDmitry Bogdanov u64 tx_errors; 474*2087ced0SDmitry Bogdanov u64 tx_unicast_frames; 475*2087ced0SDmitry Bogdanov u64 tx_multicast_frames; 476*2087ced0SDmitry Bogdanov u64 tx_broadcast_frames; 477*2087ced0SDmitry Bogdanov 478*2087ced0SDmitry Bogdanov u32 main_loop_cycles; 479*2087ced0SDmitry Bogdanov }; 480*2087ced0SDmitry Bogdanov 481*2087ced0SDmitry Bogdanov struct __packed statistics_s { 482*2087ced0SDmitry Bogdanov union __packed { 483*2087ced0SDmitry Bogdanov struct statistics_a0_s a0; 484*2087ced0SDmitry Bogdanov struct statistics_b0_s b0; 485*2087ced0SDmitry Bogdanov }; 486*2087ced0SDmitry Bogdanov }; 487*2087ced0SDmitry Bogdanov 488f6761961SDmitry Bogdanov struct filter_caps_s { 489f6761961SDmitry Bogdanov u8 l2_filters_base_index:6; 490f6761961SDmitry Bogdanov u8 flexible_filter_mask:2; 491f6761961SDmitry Bogdanov u8 l2_filter_count; 492f6761961SDmitry Bogdanov u8 ethertype_filter_base_index; 493f6761961SDmitry Bogdanov u8 ethertype_filter_count; 494f6761961SDmitry Bogdanov 495f6761961SDmitry Bogdanov u8 vlan_filter_base_index; 496f6761961SDmitry Bogdanov u8 vlan_filter_count; 497f6761961SDmitry Bogdanov u8 l3_ip4_filter_base_index:4; 498f6761961SDmitry Bogdanov u8 l3_ip4_filter_count:4; 499f6761961SDmitry Bogdanov u8 l3_ip6_filter_base_index:4; 500f6761961SDmitry Bogdanov u8 l3_ip6_filter_count:4; 501f6761961SDmitry Bogdanov 502f6761961SDmitry Bogdanov u8 l4_filter_base_index:4; 503f6761961SDmitry Bogdanov u8 l4_filter_count:4; 504f6761961SDmitry Bogdanov u8 l4_flex_filter_base_index:4; 505f6761961SDmitry Bogdanov u8 l4_flex_filter_count:4; 506f6761961SDmitry Bogdanov u8 rslv_tbl_base_index; 507f6761961SDmitry Bogdanov u8 rslv_tbl_count; 508f6761961SDmitry Bogdanov }; 509f6761961SDmitry Bogdanov 510f6761961SDmitry Bogdanov struct request_policy_s { 511f6761961SDmitry Bogdanov struct { 512f6761961SDmitry Bogdanov u8 all:1; 513f6761961SDmitry Bogdanov u8 mcast:1; 514f6761961SDmitry Bogdanov u8 rx_queue_tc_index:5; 515f6761961SDmitry Bogdanov u8 queue_or_tc:1; 516f6761961SDmitry Bogdanov } promisc; 517f6761961SDmitry Bogdanov 518f6761961SDmitry Bogdanov struct { 519f6761961SDmitry Bogdanov u8 accept:1; 520f6761961SDmitry Bogdanov u8 rsvd:1; 521f6761961SDmitry Bogdanov u8 rx_queue_tc_index:5; 522f6761961SDmitry Bogdanov u8 queue_or_tc:1; 523f6761961SDmitry Bogdanov } bcast; 524f6761961SDmitry Bogdanov 525f6761961SDmitry Bogdanov struct { 526f6761961SDmitry Bogdanov u8 accept:1; 527f6761961SDmitry Bogdanov u8 rsvd:1; 528f6761961SDmitry Bogdanov u8 rx_queue_tc_index:5; 529f6761961SDmitry Bogdanov u8 queue_or_tc:1; 530f6761961SDmitry Bogdanov } mcast; 531f6761961SDmitry Bogdanov 532f6761961SDmitry Bogdanov u8 rsvd:8; 533f6761961SDmitry Bogdanov }; 534f6761961SDmitry Bogdanov 535f6761961SDmitry Bogdanov struct fw_interface_in { 536f6761961SDmitry Bogdanov u32 mtu; 537f6761961SDmitry Bogdanov u32 rsvd1; 538f6761961SDmitry Bogdanov struct mac_address_aligned_s mac_address; 539f6761961SDmitry Bogdanov struct link_control_s link_control; 540f6761961SDmitry Bogdanov u32 rsvd2; 541f6761961SDmitry Bogdanov struct link_options_s link_options; 542f6761961SDmitry Bogdanov u32 rsvd3; 543f6761961SDmitry Bogdanov struct thermal_shutdown_s thermal_shutdown; 544f6761961SDmitry Bogdanov u32 rsvd4; 545f6761961SDmitry Bogdanov struct sleep_proxy_s sleep_proxy; 546f6761961SDmitry Bogdanov u32 rsvd5; 547f6761961SDmitry Bogdanov struct pause_quanta_s pause_quanta[8]; 548f6761961SDmitry Bogdanov struct cable_diag_control_s cable_diag_control; 549f6761961SDmitry Bogdanov u32 rsvd6; 550f6761961SDmitry Bogdanov struct data_buffer_status_s data_buffer_status; 551f6761961SDmitry Bogdanov u32 rsvd7; 552f6761961SDmitry Bogdanov struct request_policy_s request_policy; 553f6761961SDmitry Bogdanov }; 554f6761961SDmitry Bogdanov 555f6761961SDmitry Bogdanov struct transaction_counter_s { 556f6761961SDmitry Bogdanov u16 transaction_cnt_a; 557f6761961SDmitry Bogdanov u16 transaction_cnt_b; 558f6761961SDmitry Bogdanov }; 559f6761961SDmitry Bogdanov 560f6761961SDmitry Bogdanov struct management_status_s { 561f6761961SDmitry Bogdanov struct mac_address_s mac_address; 562f6761961SDmitry Bogdanov u16 vlan; 563f6761961SDmitry Bogdanov 564f6761961SDmitry Bogdanov struct{ 565f6761961SDmitry Bogdanov u32 enable : 1; 566f6761961SDmitry Bogdanov u32 rsvd:31; 567f6761961SDmitry Bogdanov } flags; 568f6761961SDmitry Bogdanov 569f6761961SDmitry Bogdanov u32 rsvd1; 570f6761961SDmitry Bogdanov u32 rsvd2; 571f6761961SDmitry Bogdanov u32 rsvd3; 572f6761961SDmitry Bogdanov u32 rsvd4; 573f6761961SDmitry Bogdanov u32 rsvd5; 574f6761961SDmitry Bogdanov }; 575f6761961SDmitry Bogdanov 576*2087ced0SDmitry Bogdanov struct __packed fw_interface_out { 577f6761961SDmitry Bogdanov struct transaction_counter_s transaction_id; 578f6761961SDmitry Bogdanov struct version_s version; 579f6761961SDmitry Bogdanov struct link_status_s link_status; 580f6761961SDmitry Bogdanov struct wol_status_s wol_status; 581f6761961SDmitry Bogdanov u32 rsvd; 582f6761961SDmitry Bogdanov u32 rsvd2; 583f6761961SDmitry Bogdanov struct mac_health_monitor_s mac_health_monitor; 584f6761961SDmitry Bogdanov u32 rsvd3; 585f6761961SDmitry Bogdanov u32 rsvd4; 586f6761961SDmitry Bogdanov struct phy_health_monitor_s phy_health_monitor; 587f6761961SDmitry Bogdanov u32 rsvd5; 588f6761961SDmitry Bogdanov u32 rsvd6; 589f6761961SDmitry Bogdanov struct cable_diag_status_s cable_diag_status; 590f6761961SDmitry Bogdanov u32 rsvd7; 591f6761961SDmitry Bogdanov struct device_link_caps_s device_link_caps; 592f6761961SDmitry Bogdanov u32 rsvd8; 593f6761961SDmitry Bogdanov struct sleep_proxy_caps_s sleep_proxy_caps; 594f6761961SDmitry Bogdanov u32 rsvd9; 595f6761961SDmitry Bogdanov struct lkp_link_caps_s lkp_link_caps; 596f6761961SDmitry Bogdanov u32 rsvd10; 597f6761961SDmitry Bogdanov struct core_dump_s core_dump; 598f6761961SDmitry Bogdanov u32 rsvd11; 599f6761961SDmitry Bogdanov struct statistics_s stats; 600f6761961SDmitry Bogdanov struct filter_caps_s filter_caps; 601f6761961SDmitry Bogdanov struct device_caps_s device_caps; 602f6761961SDmitry Bogdanov u32 rsvd13; 603f6761961SDmitry Bogdanov struct management_status_s management_status; 604f6761961SDmitry Bogdanov u32 reserve[21]; 605f6761961SDmitry Bogdanov struct trace_s trace; 606f6761961SDmitry Bogdanov }; 607f6761961SDmitry Bogdanov 608f6761961SDmitry Bogdanov #define AQ_A2_FW_LINK_RATE_INVALID 0 609f6761961SDmitry Bogdanov #define AQ_A2_FW_LINK_RATE_10M 1 610f6761961SDmitry Bogdanov #define AQ_A2_FW_LINK_RATE_100M 2 611f6761961SDmitry Bogdanov #define AQ_A2_FW_LINK_RATE_1G 3 612f6761961SDmitry Bogdanov #define AQ_A2_FW_LINK_RATE_2G5 4 613f6761961SDmitry Bogdanov #define AQ_A2_FW_LINK_RATE_5G 5 614f6761961SDmitry Bogdanov #define AQ_A2_FW_LINK_RATE_10G 6 615f6761961SDmitry Bogdanov 616f6761961SDmitry Bogdanov #define AQ_HOST_MODE_INVALID 0U 617f6761961SDmitry Bogdanov #define AQ_HOST_MODE_ACTIVE 1U 618f6761961SDmitry Bogdanov #define AQ_HOST_MODE_SLEEP_PROXY 2U 619f6761961SDmitry Bogdanov #define AQ_HOST_MODE_LOW_POWER 3U 620f6761961SDmitry Bogdanov #define AQ_HOST_MODE_SHUTDOWN 4U 621f6761961SDmitry Bogdanov 622*2087ced0SDmitry Bogdanov #define AQ_A2_FW_INTERFACE_A0 0 623*2087ced0SDmitry Bogdanov #define AQ_A2_FW_INTERFACE_B0 1 624*2087ced0SDmitry Bogdanov 625c1be0bf0SDmitry Bogdanov int hw_atl2_utils_initfw(struct aq_hw_s *self, const struct aq_fw_ops **fw_ops); 626c1be0bf0SDmitry Bogdanov 627c1be0bf0SDmitry Bogdanov int hw_atl2_utils_soft_reset(struct aq_hw_s *self); 628c1be0bf0SDmitry Bogdanov 629c1be0bf0SDmitry Bogdanov u32 hw_atl2_utils_get_fw_version(struct aq_hw_s *self); 630c1be0bf0SDmitry Bogdanov 6315cfd54d7SDmitry Bogdanov int hw_atl2_utils_get_action_resolve_table_caps(struct aq_hw_s *self, 6325cfd54d7SDmitry Bogdanov u8 *base_index, u8 *count); 6335cfd54d7SDmitry Bogdanov 6345cfd54d7SDmitry Bogdanov extern const struct aq_fw_ops aq_a2_fw_ops; 6355cfd54d7SDmitry Bogdanov 636f6761961SDmitry Bogdanov #endif /* HW_ATL2_UTILS_H */ 637