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

prestera_hw.h (10480B)


      1/* SPDX-License-Identifier: BSD-3-Clause OR GPL-2.0 */
      2/* Copyright (c) 2019-2020 Marvell International Ltd. All rights reserved. */
      3
      4#ifndef _PRESTERA_HW_H_
      5#define _PRESTERA_HW_H_
      6
      7#include <linux/types.h>
      8#include "prestera_acl.h"
      9
     10enum prestera_accept_frm_type {
     11	PRESTERA_ACCEPT_FRAME_TYPE_TAGGED,
     12	PRESTERA_ACCEPT_FRAME_TYPE_UNTAGGED,
     13	PRESTERA_ACCEPT_FRAME_TYPE_ALL,
     14};
     15
     16enum prestera_fdb_flush_mode {
     17	PRESTERA_FDB_FLUSH_MODE_DYNAMIC = BIT(0),
     18	PRESTERA_FDB_FLUSH_MODE_STATIC = BIT(1),
     19	PRESTERA_FDB_FLUSH_MODE_ALL = PRESTERA_FDB_FLUSH_MODE_DYNAMIC
     20					| PRESTERA_FDB_FLUSH_MODE_STATIC,
     21};
     22
     23enum {
     24	PRESTERA_MAC_MODE_INTERNAL,
     25	PRESTERA_MAC_MODE_SGMII,
     26	PRESTERA_MAC_MODE_1000BASE_X,
     27	PRESTERA_MAC_MODE_KR,
     28	PRESTERA_MAC_MODE_KR2,
     29	PRESTERA_MAC_MODE_KR4,
     30	PRESTERA_MAC_MODE_CR,
     31	PRESTERA_MAC_MODE_CR2,
     32	PRESTERA_MAC_MODE_CR4,
     33	PRESTERA_MAC_MODE_SR_LR,
     34	PRESTERA_MAC_MODE_SR_LR2,
     35	PRESTERA_MAC_MODE_SR_LR4,
     36
     37	PRESTERA_MAC_MODE_MAX
     38};
     39
     40enum {
     41	PRESTERA_LINK_MODE_10baseT_Half,
     42	PRESTERA_LINK_MODE_10baseT_Full,
     43	PRESTERA_LINK_MODE_100baseT_Half,
     44	PRESTERA_LINK_MODE_100baseT_Full,
     45	PRESTERA_LINK_MODE_1000baseT_Half,
     46	PRESTERA_LINK_MODE_1000baseT_Full,
     47	PRESTERA_LINK_MODE_1000baseX_Full,
     48	PRESTERA_LINK_MODE_1000baseKX_Full,
     49	PRESTERA_LINK_MODE_2500baseX_Full,
     50	PRESTERA_LINK_MODE_10GbaseKR_Full,
     51	PRESTERA_LINK_MODE_10GbaseSR_Full,
     52	PRESTERA_LINK_MODE_10GbaseLR_Full,
     53	PRESTERA_LINK_MODE_20GbaseKR2_Full,
     54	PRESTERA_LINK_MODE_25GbaseCR_Full,
     55	PRESTERA_LINK_MODE_25GbaseKR_Full,
     56	PRESTERA_LINK_MODE_25GbaseSR_Full,
     57	PRESTERA_LINK_MODE_40GbaseKR4_Full,
     58	PRESTERA_LINK_MODE_40GbaseCR4_Full,
     59	PRESTERA_LINK_MODE_40GbaseSR4_Full,
     60	PRESTERA_LINK_MODE_50GbaseCR2_Full,
     61	PRESTERA_LINK_MODE_50GbaseKR2_Full,
     62	PRESTERA_LINK_MODE_50GbaseSR2_Full,
     63	PRESTERA_LINK_MODE_100GbaseKR4_Full,
     64	PRESTERA_LINK_MODE_100GbaseSR4_Full,
     65	PRESTERA_LINK_MODE_100GbaseCR4_Full,
     66
     67	PRESTERA_LINK_MODE_MAX
     68};
     69
     70enum {
     71	PRESTERA_PORT_TYPE_NONE,
     72	PRESTERA_PORT_TYPE_TP,
     73	PRESTERA_PORT_TYPE_AUI,
     74	PRESTERA_PORT_TYPE_MII,
     75	PRESTERA_PORT_TYPE_FIBRE,
     76	PRESTERA_PORT_TYPE_BNC,
     77	PRESTERA_PORT_TYPE_DA,
     78	PRESTERA_PORT_TYPE_OTHER,
     79
     80	PRESTERA_PORT_TYPE_MAX
     81};
     82
     83enum {
     84	PRESTERA_PORT_TCVR_COPPER,
     85	PRESTERA_PORT_TCVR_SFP,
     86
     87	PRESTERA_PORT_TCVR_MAX
     88};
     89
     90enum {
     91	PRESTERA_PORT_FEC_OFF,
     92	PRESTERA_PORT_FEC_BASER,
     93	PRESTERA_PORT_FEC_RS,
     94
     95	PRESTERA_PORT_FEC_MAX
     96};
     97
     98enum {
     99	PRESTERA_PORT_DUPLEX_HALF,
    100	PRESTERA_PORT_DUPLEX_FULL,
    101};
    102
    103enum {
    104	PRESTERA_STP_DISABLED,
    105	PRESTERA_STP_BLOCK_LISTEN,
    106	PRESTERA_STP_LEARN,
    107	PRESTERA_STP_FORWARD,
    108};
    109
    110enum {
    111	PRESTERA_POLICER_TYPE_INGRESS,
    112	PRESTERA_POLICER_TYPE_EGRESS
    113};
    114
    115enum prestera_hw_cpu_code_cnt_t {
    116	PRESTERA_HW_CPU_CODE_CNT_TYPE_DROP = 0,
    117	PRESTERA_HW_CPU_CODE_CNT_TYPE_TRAP = 1,
    118};
    119
    120enum prestera_hw_vtcam_direction_t {
    121	PRESTERA_HW_VTCAM_DIR_INGRESS = 0,
    122	PRESTERA_HW_VTCAM_DIR_EGRESS = 1,
    123};
    124
    125enum {
    126	PRESTERA_HW_COUNTER_CLIENT_LOOKUP_0 = 0,
    127	PRESTERA_HW_COUNTER_CLIENT_LOOKUP_1 = 1,
    128	PRESTERA_HW_COUNTER_CLIENT_LOOKUP_2 = 2,
    129};
    130
    131struct prestera_switch;
    132struct prestera_port;
    133struct prestera_port_stats;
    134struct prestera_port_caps;
    135enum prestera_event_type;
    136struct prestera_event;
    137
    138typedef void (*prestera_event_cb_t)
    139	(struct prestera_switch *sw, struct prestera_event *evt, void *arg);
    140
    141struct prestera_rxtx_params;
    142struct prestera_acl_hw_action_info;
    143struct prestera_acl_iface;
    144struct prestera_counter_stats;
    145struct prestera_iface;
    146
    147/* Switch API */
    148int prestera_hw_switch_init(struct prestera_switch *sw);
    149void prestera_hw_switch_fini(struct prestera_switch *sw);
    150int prestera_hw_switch_ageing_set(struct prestera_switch *sw, u32 ageing_ms);
    151int prestera_hw_switch_mac_set(struct prestera_switch *sw, const char *mac);
    152
    153/* Port API */
    154int prestera_hw_port_info_get(const struct prestera_port *port,
    155			      u32 *dev_id, u32 *hw_id, u16 *fp_id);
    156
    157int prestera_hw_port_mac_mode_get(const struct prestera_port *port,
    158				  u32 *mode, u32 *speed, u8 *duplex, u8 *fec);
    159int prestera_hw_port_mac_mode_set(const struct prestera_port *port,
    160				  bool admin, u32 mode, u8 inband,
    161				  u32 speed, u8 duplex, u8 fec);
    162int prestera_hw_port_phy_mode_get(const struct prestera_port *port,
    163				  u8 *mdix, u64 *lmode_bmap,
    164				  bool *fc_pause, bool *fc_asym);
    165int prestera_hw_port_phy_mode_set(const struct prestera_port *port,
    166				  bool admin, bool adv, u32 mode, u64 modes,
    167				  u8 mdix);
    168
    169int prestera_hw_port_mtu_set(const struct prestera_port *port, u32 mtu);
    170int prestera_hw_port_mtu_get(const struct prestera_port *port, u32 *mtu);
    171int prestera_hw_port_mac_set(const struct prestera_port *port, const char *mac);
    172int prestera_hw_port_mac_get(const struct prestera_port *port, char *mac);
    173int prestera_hw_port_cap_get(const struct prestera_port *port,
    174			     struct prestera_port_caps *caps);
    175int prestera_hw_port_type_get(const struct prestera_port *port, u8 *type);
    176int prestera_hw_port_autoneg_restart(struct prestera_port *port);
    177int prestera_hw_port_stats_get(const struct prestera_port *port,
    178			       struct prestera_port_stats *stats);
    179int prestera_hw_port_speed_get(const struct prestera_port *port, u32 *speed);
    180int prestera_hw_port_learning_set(struct prestera_port *port, bool enable);
    181int prestera_hw_port_flood_set(struct prestera_port *port, unsigned long mask,
    182			       unsigned long val);
    183int prestera_hw_port_accept_frm_type(struct prestera_port *port,
    184				     enum prestera_accept_frm_type type);
    185/* Vlan API */
    186int prestera_hw_vlan_create(struct prestera_switch *sw, u16 vid);
    187int prestera_hw_vlan_delete(struct prestera_switch *sw, u16 vid);
    188int prestera_hw_vlan_port_set(struct prestera_port *port, u16 vid,
    189			      bool is_member, bool untagged);
    190int prestera_hw_vlan_port_vid_set(struct prestera_port *port, u16 vid);
    191int prestera_hw_vlan_port_stp_set(struct prestera_port *port, u16 vid, u8 state);
    192
    193/* FDB API */
    194int prestera_hw_fdb_add(struct prestera_port *port, const unsigned char *mac,
    195			u16 vid, bool dynamic);
    196int prestera_hw_fdb_del(struct prestera_port *port, const unsigned char *mac,
    197			u16 vid);
    198int prestera_hw_fdb_flush_port(struct prestera_port *port, u32 mode);
    199int prestera_hw_fdb_flush_vlan(struct prestera_switch *sw, u16 vid, u32 mode);
    200int prestera_hw_fdb_flush_port_vlan(struct prestera_port *port, u16 vid,
    201				    u32 mode);
    202
    203/* Bridge API */
    204int prestera_hw_bridge_create(struct prestera_switch *sw, u16 *bridge_id);
    205int prestera_hw_bridge_delete(struct prestera_switch *sw, u16 bridge_id);
    206int prestera_hw_bridge_port_add(struct prestera_port *port, u16 bridge_id);
    207int prestera_hw_bridge_port_delete(struct prestera_port *port, u16 bridge_id);
    208
    209/* vTCAM API */
    210int prestera_hw_vtcam_create(struct prestera_switch *sw,
    211			     u8 lookup, const u32 *keymask, u32 *vtcam_id,
    212			     enum prestera_hw_vtcam_direction_t direction);
    213int prestera_hw_vtcam_rule_add(struct prestera_switch *sw, u32 vtcam_id,
    214			       u32 prio, void *key, void *keymask,
    215			       struct prestera_acl_hw_action_info *act,
    216			       u8 n_act, u32 *rule_id);
    217int prestera_hw_vtcam_rule_del(struct prestera_switch *sw,
    218			       u32 vtcam_id, u32 rule_id);
    219int prestera_hw_vtcam_destroy(struct prestera_switch *sw, u32 vtcam_id);
    220int prestera_hw_vtcam_iface_bind(struct prestera_switch *sw,
    221				 struct prestera_acl_iface *iface,
    222				 u32 vtcam_id, u16 pcl_id);
    223int prestera_hw_vtcam_iface_unbind(struct prestera_switch *sw,
    224				   struct prestera_acl_iface *iface,
    225				   u32 vtcam_id);
    226
    227/* Counter API */
    228int prestera_hw_counter_trigger(struct prestera_switch *sw, u32 block_id);
    229int prestera_hw_counter_abort(struct prestera_switch *sw);
    230int prestera_hw_counters_get(struct prestera_switch *sw, u32 idx,
    231			     u32 *len, bool *done,
    232			     struct prestera_counter_stats *stats);
    233int prestera_hw_counter_block_get(struct prestera_switch *sw,
    234				  u32 client, u32 *block_id, u32 *offset,
    235				  u32 *num_counters);
    236int prestera_hw_counter_block_release(struct prestera_switch *sw,
    237				      u32 block_id);
    238int prestera_hw_counter_clear(struct prestera_switch *sw, u32 block_id,
    239			      u32 counter_id);
    240
    241/* SPAN API */
    242int prestera_hw_span_get(const struct prestera_port *port, u8 *span_id);
    243int prestera_hw_span_bind(const struct prestera_port *port, u8 span_id);
    244int prestera_hw_span_unbind(const struct prestera_port *port);
    245int prestera_hw_span_release(struct prestera_switch *sw, u8 span_id);
    246
    247/* Router API */
    248int prestera_hw_rif_create(struct prestera_switch *sw,
    249			   struct prestera_iface *iif, u8 *mac, u16 *rif_id);
    250int prestera_hw_rif_delete(struct prestera_switch *sw, u16 rif_id,
    251			   struct prestera_iface *iif);
    252
    253/* Virtual Router API */
    254int prestera_hw_vr_create(struct prestera_switch *sw, u16 *vr_id);
    255int prestera_hw_vr_delete(struct prestera_switch *sw, u16 vr_id);
    256
    257/* LPM PI */
    258int prestera_hw_lpm_add(struct prestera_switch *sw, u16 vr_id,
    259			__be32 dst, u32 dst_len, u32 grp_id);
    260int prestera_hw_lpm_del(struct prestera_switch *sw, u16 vr_id,
    261			__be32 dst, u32 dst_len);
    262
    263/* Event handlers */
    264int prestera_hw_event_handler_register(struct prestera_switch *sw,
    265				       enum prestera_event_type type,
    266				       prestera_event_cb_t fn,
    267				       void *arg);
    268void prestera_hw_event_handler_unregister(struct prestera_switch *sw,
    269					  enum prestera_event_type type,
    270					  prestera_event_cb_t fn);
    271
    272/* RX/TX */
    273int prestera_hw_rxtx_init(struct prestera_switch *sw,
    274			  struct prestera_rxtx_params *params);
    275
    276/* LAG API */
    277int prestera_hw_lag_member_add(struct prestera_port *port, u16 lag_id);
    278int prestera_hw_lag_member_del(struct prestera_port *port, u16 lag_id);
    279int prestera_hw_lag_member_enable(struct prestera_port *port, u16 lag_id,
    280				  bool enable);
    281int prestera_hw_lag_fdb_add(struct prestera_switch *sw, u16 lag_id,
    282			    const unsigned char *mac, u16 vid, bool dynamic);
    283int prestera_hw_lag_fdb_del(struct prestera_switch *sw, u16 lag_id,
    284			    const unsigned char *mac, u16 vid);
    285int prestera_hw_fdb_flush_lag(struct prestera_switch *sw, u16 lag_id,
    286			      u32 mode);
    287int prestera_hw_fdb_flush_lag_vlan(struct prestera_switch *sw,
    288				   u16 lag_id, u16 vid, u32 mode);
    289
    290/* HW trap/drop counters API */
    291int
    292prestera_hw_cpu_code_counters_get(struct prestera_switch *sw, u8 code,
    293				  enum prestera_hw_cpu_code_cnt_t counter_type,
    294				  u64 *packet_count);
    295
    296/* Policer API */
    297int prestera_hw_policer_create(struct prestera_switch *sw, u8 type,
    298			       u32 *policer_id);
    299int prestera_hw_policer_release(struct prestera_switch *sw,
    300				u32 policer_id);
    301int prestera_hw_policer_sr_tcm_set(struct prestera_switch *sw,
    302				   u32 policer_id, u64 cir, u32 cbs);
    303
    304#endif /* _PRESTERA_HW_H_ */