cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

hw_atl2_utils.h (10705B)


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