root/drivers/net/ethernet/ti/cpsw_ale.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


   1 /* SPDX-License-Identifier: GPL-2.0 */
   2 /*
   3  * Texas Instruments N-Port Ethernet Switch Address Lookup Engine APIs
   4  *
   5  * Copyright (C) 2012 Texas Instruments
   6  *
   7  */
   8 #ifndef __TI_CPSW_ALE_H__
   9 #define __TI_CPSW_ALE_H__
  10 
  11 struct cpsw_ale_params {
  12         struct device           *dev;
  13         void __iomem            *ale_regs;
  14         unsigned long           ale_ageout;     /* in secs */
  15         unsigned long           ale_entries;
  16         unsigned long           ale_ports;
  17         /* NU Switch has specific handling as number of bits in ALE entries
  18          * are different than other versions of ALE. Also there are specific
  19          * registers for unknown vlan specific fields. So use nu_switch_ale
  20          * to identify this hardware.
  21          */
  22         bool                    nu_switch_ale;
  23         /* mask bit used in NU Switch ALE is 3 bits instead of 8 bits. So
  24          * pass it from caller.
  25          */
  26         u32                     major_ver_mask;
  27 };
  28 
  29 struct cpsw_ale {
  30         struct cpsw_ale_params  params;
  31         struct timer_list       timer;
  32         unsigned long           ageout;
  33         u32                     version;
  34         /* These bits are different on NetCP NU Switch ALE */
  35         u32                     port_mask_bits;
  36         u32                     port_num_bits;
  37         u32                     vlan_field_bits;
  38 };
  39 
  40 enum cpsw_ale_control {
  41         /* global */
  42         ALE_ENABLE,
  43         ALE_CLEAR,
  44         ALE_AGEOUT,
  45         ALE_P0_UNI_FLOOD,
  46         ALE_VLAN_NOLEARN,
  47         ALE_NO_PORT_VLAN,
  48         ALE_OUI_DENY,
  49         ALE_BYPASS,
  50         ALE_RATE_LIMIT_TX,
  51         ALE_VLAN_AWARE,
  52         ALE_AUTH_ENABLE,
  53         ALE_RATE_LIMIT,
  54         /* port controls */
  55         ALE_PORT_STATE,
  56         ALE_PORT_DROP_UNTAGGED,
  57         ALE_PORT_DROP_UNKNOWN_VLAN,
  58         ALE_PORT_NOLEARN,
  59         ALE_PORT_NO_SA_UPDATE,
  60         ALE_PORT_UNKNOWN_VLAN_MEMBER,
  61         ALE_PORT_UNKNOWN_MCAST_FLOOD,
  62         ALE_PORT_UNKNOWN_REG_MCAST_FLOOD,
  63         ALE_PORT_UNTAGGED_EGRESS,
  64         ALE_PORT_BCAST_LIMIT,
  65         ALE_PORT_MCAST_LIMIT,
  66         ALE_NUM_CONTROLS,
  67 };
  68 
  69 enum cpsw_ale_port_state {
  70         ALE_PORT_STATE_DISABLE  = 0x00,
  71         ALE_PORT_STATE_BLOCK    = 0x01,
  72         ALE_PORT_STATE_LEARN    = 0x02,
  73         ALE_PORT_STATE_FORWARD  = 0x03,
  74 };
  75 
  76 /* ALE unicast entry flags - passed into cpsw_ale_add_ucast() */
  77 #define ALE_SECURE                      BIT(0)
  78 #define ALE_BLOCKED                     BIT(1)
  79 #define ALE_SUPER                       BIT(2)
  80 #define ALE_VLAN                        BIT(3)
  81 
  82 #define ALE_PORT_HOST                   BIT(0)
  83 #define ALE_PORT_1                      BIT(1)
  84 #define ALE_PORT_2                      BIT(2)
  85 
  86 #define ALE_MCAST_FWD                   0
  87 #define ALE_MCAST_BLOCK_LEARN_FWD       1
  88 #define ALE_MCAST_FWD_LEARN             2
  89 #define ALE_MCAST_FWD_2                 3
  90 
  91 #define ALE_ENTRY_BITS          68
  92 #define ALE_ENTRY_WORDS DIV_ROUND_UP(ALE_ENTRY_BITS, 32)
  93 
  94 struct cpsw_ale *cpsw_ale_create(struct cpsw_ale_params *params);
  95 
  96 void cpsw_ale_start(struct cpsw_ale *ale);
  97 void cpsw_ale_stop(struct cpsw_ale *ale);
  98 
  99 int cpsw_ale_flush_multicast(struct cpsw_ale *ale, int port_mask, int vid);
 100 int cpsw_ale_add_ucast(struct cpsw_ale *ale, const u8 *addr, int port,
 101                        int flags, u16 vid);
 102 int cpsw_ale_del_ucast(struct cpsw_ale *ale, const u8 *addr, int port,
 103                        int flags, u16 vid);
 104 int cpsw_ale_add_mcast(struct cpsw_ale *ale, const u8 *addr, int port_mask,
 105                        int flags, u16 vid, int mcast_state);
 106 int cpsw_ale_del_mcast(struct cpsw_ale *ale, const u8 *addr, int port_mask,
 107                        int flags, u16 vid);
 108 int cpsw_ale_add_vlan(struct cpsw_ale *ale, u16 vid, int port, int untag,
 109                         int reg_mcast, int unreg_mcast);
 110 int cpsw_ale_del_vlan(struct cpsw_ale *ale, u16 vid, int port);
 111 void cpsw_ale_set_allmulti(struct cpsw_ale *ale, int allmulti, int port);
 112 
 113 int cpsw_ale_control_get(struct cpsw_ale *ale, int port, int control);
 114 int cpsw_ale_control_set(struct cpsw_ale *ale, int port,
 115                          int control, int value);
 116 void cpsw_ale_dump(struct cpsw_ale *ale, u32 *data);
 117 
 118 #endif

/* [<][>][^][v][top][bottom][index][help] */