openbcm

Git mirror of https://github.com/Broadcom-Network-Switching-Software/OpenBCM
git clone git://git.finwo.net/mirror/broadcom/openbcm
Log | Files | Refs | README

llm_msg.h (13949B)


      1 /* 
      2  * 
      3  * This license is set out in https://raw.githubusercontent.com/Broadcom-Network-Switching-Software/OpenBCM/master/Legal/LICENSE file.
      4  * 
      5  * Copyright 2007-2019 Broadcom Inc. All rights reserved.
      6  *
      7  * File:    llm_msg.h
      8  * Purpose: llm Messages definitions common to SDK and uKernel.
      9  *
     10  *          Messages between SDK and uKernel.
     11  */
     12 
     13 #ifndef   _SOC_SHARED_LLM_MSG_H_
     14 #define   _SOC_SHARED_LLM_MSG_H_
     15 
     16 #ifdef BCM_UKERNEL
     17   /* Build for uKernel not SDK */
     18   #include "sdk_typedefs.h"
     19 #else
     20   #include <sal/types.h>
     21 #endif
     22 
     23 #include <soc/shared/mos_msg_common.h>
     24 /*#include <shared/llm.h>*/
     25 
     26 
     27 
     28 /********************************
     29  * LLM mutual structure defenition
     30  *
     31  *   SDK Host  and uController
     32  */
     33 
     34 /*** 
     35   * 
     36   * * Version 001
     37   *  Basic prototypes of the Control messaging
     38   *  Learningn and Deleting of the entries
     39   *  
     40   * Version 002
     41   *  Parsing of diag lookup fixed
     42   *  
     43   * Version 003
     44   *  Parsing of diag lookup fixed
     45   *  
     46   * Version 004
     47   *  Transplant added 
     48   *  
     49   * Version 005
     50   *  Artificial delay added to limit rate to 16k
     51   *  Function _llm_pon_att_mac_bitmap_set modifed to set a range of tunnels
     52   *  
     53   * Version 006
     54   *  Iniitialisation of the database is fixed to enable correct bank configuration
     55   *  
     56   * Version 007
     57   *  VMAC integration. Messaging mechanism improoved. Added notifications. 
     58  */
     59 #define SHR_LLM_NUM_OF_PORTS            (256)
     60 #define SHR_LLM_APPL_VERSION            0x00000007
     61 #define SHR_LLM_PULL_INDEX_PER_ENTRY    (32)
     62 #define SHR_LLM_PULL_MAX_INDEX_NUM_SIZE (1024*8) /*8K max indexes to manage*/
     63 #define SHR_LLM_PULL_MAX_SIZE           (SHR_LLM_PULL_MAX_INDEX_NUM_SIZE/SHR_LLM_PULL_INDEX_PER_ENTRY)
     64 #define SHR_LLM_MAX_PON_PORT_NUM_OF_BITS (3)/*3 bits*/
     65 #define SHR_LLM_MAX_TUNNEL_NUM_OF_BITS   (11)/* 11 bits*/
     66 #define SHR_LLM_MAX_AC_NUM_OF_BITS       (16)/* 16 bits 0xffff*/
     67 #define SHR_LLM_MAX_PON_PORT_INDEX ((1 << (SHR_LLM_MAX_PON_PORT_NUM_OF_BITS))-1)/*3 bits*/
     68 #define SHR_LLM_MAX_TUNNEL_INDEX   ((1 << (SHR_LLM_MAX_TUNNEL_NUM_OF_BITS))-1)/*11 bits*/
     69 #define SHR_LLM_MAX_AC_INDEX       ((1 << (SHR_LLM_MAX_AC_NUM_OF_BITS))-1)/*15 bits*/      
     70 #define SHR_LLM_PON_DB_SIZE        ((SHR_LLM_MAX_PON_PORT_INDEX+1)*(SHR_LLM_MAX_TUNNEL_INDEX+1))
     71 #define SHR_LLM_MSG_PON_ATT_UPDATE_MAC_ENTRY_NUM             0x05
     72 #define SHR_LLM_MSG_PON_ATT_UPDATE_MULTI_MAC_ENTRY_NUM       16
     73 #define SHR_LLM_MSG_PON_ATT_MAC_LIMIT_ENABLE_TYPE_LSB        28
     74 #define SHR_LLM_MSG_PON_ATT_MAC_LIMIT_ENABLE_TYPE_MSB        31
     75 #define SHR_LLM_MSG_PON_ATT_MAC_LIMIT_ENABLE_TYPE_NOF_BITS  (SHR_LLM_MSG_PON_ATT_MAC_LIMIT_ENABLE_TYPE_MSB - \
     76                                                              SHR_LLM_MSG_PON_ATT_MAC_LIMIT_ENABLE_TYPE_LSB + 1)
     77 #define SHR_LLM_MSG_PON_ATT_MAC_LIMIT_ENABLE_BIT             27
     78 #define SHR_LLM_MSG_PON_ATT_REPLY_FIFO_ENABLE_BIT            26
     79 #define SHR_LLM_MSG_PON_ATT_MAC_LIMIT_ENABLE_MASK            25
     80 #define SHR_LLM_MSG_PON_ATT_REPLY_FIFO_ENABLE_MASK           24
     81 #define SHR_LLM_MSG_PON_ATT_MAC_LIMIT_PORT_LSB               0
     82 #define SHR_LLM_MSG_PON_ATT_MAC_LIMIT_PORT_MSB               7
     83 #define SHR_LLM_MSG_PON_ATT_MAC_LIMIT_PORT_NOF_BITS         (SHR_LLM_MSG_PON_ATT_MAC_LIMIT_PORT_MSB - \
     84                                                              SHR_LLM_MSG_PON_ATT_MAC_LIMIT_PORT_LSB + 1)
     85 #define SHR_LLM_MSG_PON_ATT_MAC_LIMIT_TUNNEL_ID_LSB          8
     86 #define SHR_LLM_MSG_PON_ATT_MAC_LIMIT_TUNNEL_ID_MSB          23
     87 #define SHR_LLM_MSG_PON_ATT_MAC_LIMIT_TUNNEL_ID_NOF_BITS    (SHR_LLM_MSG_PON_ATT_MAC_LIMIT_TUNNEL_ID_MSB - \
     88                                                              SHR_LLM_MSG_PON_ATT_MAC_LIMIT_TUNNEL_ID_LSB + 1)
     89 #define SHR_LLM_MSG_PON_ATT_UPDATE_VMAC_ENCODE_NUM           2
     90 #define SHR_LLM_MSG_PON_ATT_UPDATE_VMAC_PREFIX_NUM           4
     91 
     92 /* 
     93  * LLM Aplication
     94  */
     95 #define SHR_LLM_SDK_VERSION                   0x01000001
     96 #define SHR_LLM_UC_MIN_VERSION                0x1
     97 #define SHR_LLM_UC_MSG_TIMEOUT_USECS          20000000
     98 #define SHR_LLM_EVENT_THREAD_PRIORTY          50
     99 
    100 typedef enum
    101 {
    102     SHR_LLM_MSG_PON_ATT_MAC_LIMIT_ENABLE_PER_PORT_TUNNEL = 0,
    103     SHR_LLM_MSG_PON_ATT_MAC_LIMIT_ENABLE_PER_PORT,
    104     SHR_LLM_MSG_PON_ATT_MAC_LIMIT_ENABLE_GLOBAL,
    105     SHR_LLM_MSG_PON_ATT_MAC_LIMIT_ENABLE_MAX
    106 }SHR_LLM_MSG_PON_ATT_MAC_LIMIT_ENABLE_TYPE;
    107 
    108 typedef enum
    109 {
    110     SHR_LLM_MSG_PON_ATT_UPDATE_UNDEFINED = 0,
    111     SHR_LLM_MSG_PON_ATT_UPDATE_MAC_ENTRY,
    112     SHR_LLM_MSG_PON_ATT_UPDATE_VMAC_ENCODE,
    113     SHR_LLM_MSG_PON_ATT_UPDATE_VMAC_PREFIX,
    114     SHR_LLM_MSG_PON_ATT_UPDATE_MULTI_MAC_ENTRY,
    115     SHR_LLM_MSG_PON_ATT_UPDATE_MAX
    116 }SHR_LLM_MSG_PON_ATT_UPDATE_DATA_TYPE;
    117 
    118 typedef enum
    119 {
    120     SHR_LLM_MSG_PON_ATT_MAC_BITMAP_SET,
    121     SHR_LLM_MSG_PON_ATT_MAC_BITMAP_INCREASE,
    122     SHR_LLM_MSG_PON_ATT_MAC_BITMAP_DECREASE,
    123     SHR_LLM_MSG_PON_ATT_MAC_BITMAP_MAX
    124 }SHR_LLM_MSG_PON_ATT_MAC_BITMAP_TYPE;
    125 
    126 /********************************
    127  * LLM Control Messages
    128  *
    129  *   SDK Host <--> uController
    130  */
    131 
    132 /*
    133  * LLM Pointer pool database
    134  */
    135 typedef struct shr_llm_pointer_pool_s{
    136     uint32    entries[SHR_LLM_PULL_MAX_SIZE];/*Bit maps*/
    137     uint32    firstIndexOffset; 
    138     uint16    size;
    139     uint16    numOfFreeIndexes;
    140     uint16    numOfReservedIndexes;
    141     uint8     recentEntry;       
    142 } shr_llm_pointer_pool_t;
    143 
    144 
    145 
    146 typedef struct shr_llm_PON_ID_attributes_s{         
    147     uint32 entries[SHR_LLM_MAX_TUNNEL_INDEX];  
    148     uint32 port;   
    149 } shr_llm_PON_ID_attributes_t;
    150 
    151 
    152 /*
    153  * LLM Initialization control message
    154  */
    155 typedef struct shr_llm_msg_ctrl_init_s {
    156     uint32 dsp_eth_type;        /* Configuration of DSP ETh type packets */
    157     uint32 voq_mapping_mode;    /* Configraiton of the VOQ mapping mode / direct/indirect */
    158     uint32 direct_table_bank;   /* Bank ID of the directa table where the indication will be stored*/
    159     uint32 direct_table_offset; /* Offset from the start of the Bank where the indictaion will be stored */
    160     uint32 eedb_pointer_database_offset; /* Offset from the start of the EEDB pointer database */
    161     uint32 eedb_pointer_database_size; /* Max number of entries that can be inserted into the databse*/
    162     uint8 eedb_omac_table_identifyer;
    163 } shr_llm_msg_ctrl_init_t;
    164 
    165 
    166 /*
    167  * LLM application info get message
    168  */
    169 typedef struct shr_llm_msg_app_info_get_s {
    170     uint32 counterEvents;       
    171     uint32 counterEventsLearn;  
    172     uint32 suc_counterEventsLearn; 
    173     uint32 counterEventsDelete; 
    174     uint32 suc_counterEventsDelete; 
    175     uint32 counterEventsTransp; 
    176     uint32 suc_counterEventsTransp;
    177     uint32 counterEventsUnKnown;
    178     uint32 num_of_activation;
    179     uint32 time_of_activation; 
    180 } shr_llm_msg_app_info_get_t;
    181 
    182 /*
    183  * LLM info message
    184  */
    185 
    186 typedef enum {
    187     LLM_SERVICE_NOT_DEFINED=0,
    188     LLM_SERVICE_MAC_LIMIT ,
    189     LLM_SERVICE_VMAC,
    190     LLM_SERVICE_MAX
    191 } SHR_LLM_SERVICE_TYPE;
    192 
    193 
    194 typedef struct shr_llm_msg_pon_att_s {
    195     uint32 port;        
    196     uint32 tunnel;    
    197     uint32 tunnel_count; 
    198     uint32 bitmap; 
    199     uint32 type_of_service;          
    200 } shr_llm_msg_pon_att_t;
    201 
    202 /*
    203  * LLM enable/disable message
    204  *   This message is used to enable/disable MAC limit function in ARM CPU
    205  *
    206  *   uint32 type_of_service: which service will be enabled/disabled.
    207  *          Now this variable  only be LLM_SERVICE_MAC_LIMIT 
    208  *   uint32 att_val: This variable include 3 information(type , enable/disable service and port value)
    209  *          1~4msb: Type, enable/disable MAC limit function base port *tunnel, port or global
    210  *                  0 ~ Physical port *  tunnel
    211  *                  1 ~ Physical port , can be PON port or NNI port
    212  *                  2 ~ Global
    213  *          5msb: A variable to disable/enable MAC limiting in ARM CPU.
    214  *          6msb: A variable to disable/enable read reply-FIFO for FLUSH DB function
    215  *          7~8msb: mast for bit 5~6.
    216  *          24lsb: Value
    217  *                  if type is 0, then 8lsb is physical port , and other bits is tunnel ID.
    218  *                  if type is 1, then 24lsb is physical port.
    219  *                  if type is 2, not care 24lsb , and value is always 0.
    220  */
    221 typedef struct shr_llm_msg_pon_att_enable_s {
    222     uint32 type_of_service;          
    223     uint32 att_val; 
    224 } shr_llm_msg_pon_att_enable_t;
    225 
    226 /* CPU request request register */
    227 typedef struct shr_llm_msg_pon_att_l2_entry_s {
    228     uint32 entry[SHR_LLM_MSG_PON_ATT_UPDATE_MAC_ENTRY_NUM];
    229 } shr_llm_msg_pon_att_l2_entry_t;
    230 
    231 /* VMAC encoding */
    232 typedef struct shr_llm_msg_pon_att_vmac_encode_s {
    233     uint32 value[SHR_LLM_MSG_PON_ATT_UPDATE_VMAC_ENCODE_NUM];
    234     uint32 mask[SHR_LLM_MSG_PON_ATT_UPDATE_VMAC_ENCODE_NUM];
    235 } shr_llm_msg_pon_att_vmac_encode_t;
    236 
    237 /* VMAC encoding */
    238 typedef struct shr_llm_msg_pon_att_vmac_prefix_s {
    239     uint32 prefix[SHR_LLM_MSG_PON_ATT_UPDATE_VMAC_PREFIX_NUM]; /* 0 - omac, 1 - omac2vmac, 2 - vmac, 3 - vmac2omac */
    240 } shr_llm_msg_pon_att_vmac_prefix_t;
    241 
    242 /* Multi entry encoding */
    243 typedef struct shr_llm_msg_pon_att_multi_l2_entry_s {
    244     uint32 l2_entry_count;
    245     shr_llm_msg_pon_att_l2_entry_t l2_entry[SHR_LLM_MSG_PON_ATT_UPDATE_MULTI_MAC_ENTRY_NUM];
    246 } shr_llm_msg_pon_att_multi_l2_entry_t;
    247 
    248 /* PON attribution */
    249 typedef union shr_llm_msg_pon_att_data_s {
    250     shr_llm_msg_pon_att_l2_entry_t l2_entry;
    251     shr_llm_msg_pon_att_vmac_encode_t vmac_encode;
    252     shr_llm_msg_pon_att_vmac_prefix_t vmac_prefix;
    253     shr_llm_msg_pon_att_multi_l2_entry_t multi_l2_entry;
    254 }shr_llm_msg_pon_att_data_t;
    255 
    256 /*
    257  * LLM update message
    258  *  This message is used to update pon attribution.
    259  *
    260  *  uint32 type_of_service: which service, can be LLM_SERVICE_MAC_LIMIT or LLM_SERVICE_VMAC
    261  *  uint32 data_type: data type, 
    262  *                    xxx_MAC_ENTRY_DATA_TYPE - add/delete/modify a L2 entry in MACT table
    263  *                     
    264  *  uint32 data_len: data length. Now the value is 5 because of the data always is CPU_request_request  registervalue.;
    265  *  uint32 data[0]:  Value of CPU_request_request  register
    266  */
    267 typedef struct shr_llm_msg_pon_att_update_s {
    268     uint32 type_of_service;          
    269     uint32 data_type;
    270     uint32 data_len;
    271     shr_llm_msg_pon_att_data_t data;
    272 } shr_llm_msg_pon_att_update_t;
    273 
    274 /*
    275  * LLM rx mode message
    276  *  This message is used to set the rx mode.
    277  *
    278  *  uint32 mode: 0 -> DSP paring mode, 1 -> MACT event FIFO mode 
    279  */
    280 typedef struct shr_llm_msg_pon_att_rx_mode_s {
    281     uint32 mode;
    282 } shr_llm_msg_pon_att_rx_mode_t;
    283 
    284 /*
    285  * LLM MAC move message
    286  *  This message is used to set the MAC move.
    287  *
    288  *  uint32 value: 0 -> disable the MAC move, 1 -> enable the MAC move 
    289  */
    290 typedef struct shr_llm_msg_pon_att_mac_move_s {
    291     uint32 port;
    292     uint32 value;
    293 } shr_llm_msg_pon_att_mac_move_t;
    294 
    295 
    296 /*
    297  * LLM Limitation configuration Set/Get control message
    298  */
    299 typedef struct shr_llm_msg_ctrl_limit_value_s {
    300     uint32  pon_port_id;                /* Pon Port id to configre*/
    301     uint32  Tunnel_id;                  /* Tunnel ID to configure*/
    302     uint32  limit_value;                /* The limit value */
    303     uint8   limit_reached_direct_get;   /*Valid only for get:Inidication "if the limit was reached" from the direct table*/
    304     uint8   limit_reached_shadow_get;   /*Valid only for get:Inidication "if the limit was reached" from the shadow table*/
    305     uint8   above_limit_reported_get;   /*Valid only for get:Inidication "if learning above the limit" was sent to the CPU*/
    306 } shr_llm_msg_ctrl_limit_value_t;
    307 
    308 /*
    309  * LLM notification message
    310  */
    311 
    312 typedef enum shr_llm_msg_notification_type_e {
    313     LLM_EVENT_DUMMY = 0,
    314     LLM_EVENT_OVERWRITE_STATISTICS,
    315     LLM_EVENT_PON_ID_LIMIT_REACHED,
    316     LLM_EVENT_PON_ID_LIMIT_REACHED_CLEAR,
    317     LLM_EVENT_PON_ID_OVER_LIMIT,
    318     LLM_EVENT_OUT_OF_EEDB_RESOURCES,
    319     LLM_EVENT_ERROR_VMAC_USED,
    320     LLM_EVENT_ERROR_MACT_MANAGMENT_FAILURE,
    321     LLM_EVENT_ERROR_PORT_PRIORTY,
    322     LLM_EVENT_ERROR_UNEXPECTED_TRANSLPANT_EVENT,
    323     LLM_EVENT_WARNING_UNKNOWN_MACT_EVENT_TYPE,
    324     LLM_EVENT_ERROR_WITH_LINE,
    325     LLM_EVENT_MAX
    326 } shr_llm_msg_notification_type_e;
    327 
    328 #ifndef BCM_UKERNEL
    329 #define SHR_LLM_MSG_NOTIFICATION_TYPE_NAME \
    330     "LLM_EVENT_DUMMY", \
    331     "LLM_EVENT_OVERWRITE_STATISTICS",\
    332     "LLM_EVENT_PON_ID_LIMIT_REACHED",\
    333     "LLM_EVENT_PON_ID_LIMIT_REACHED_CLEAR",\
    334     "LLM_EVENT_PON_ID_OVER_LIMIT",\
    335     "LLM_EVENT_OUT_OF_EEDB_RESOURCES",\
    336     "LLM_EVENT_ERROR_VMAC_USED",\
    337     "LLM_EVENT_ERROR_MACT_MANAGMENT_FAILURE",\
    338     "LLM_EVENT_ERROR_PORT_PRIORTY",\
    339     "LLM_EVENT_ERROR_UNEXPECTED_TRANSLPANT_EVENT",\
    340     "LLM_EVENT_WARNING_UNKNOWN_MACT_EVENT_TYPE",\
    341     "LLM_EVENT_ERROR_WITH_LINE",\
    342     "LLM_EVENT_MAX",
    343 #endif
    344 
    345 /****************************************
    346  * LLM event message
    347  */
    348 #define LLM_BTE_EVENT_LB_TIMEOUT                 0x0001
    349 
    350 /*
    351  *  The LLM event message is defined as a short message (use mos_msg_data_t).
    352  *
    353  *  The fields of mos_msg_data_t are used as followed:
    354  *      mclass   (uint8)  - MOS_MSG_CLASS_LLM_EVENT
    355  *      subclass (uint8)  - Unused
    356  *      len      (uint16) - LLM Session ID
    357  *      data     (uint32) - Events mask
    358  */
    359 typedef mos_msg_data_t  llm_msg_event_t;
    360 
    361 /*
    362  *  The LLM MAC move event message
    363  */
    364 typedef struct shr_llm_msg_pon_att_mac_move_event_s {
    365     uint8 mac[6];          
    366     uint16 vsi;
    367     uint16 incoming_ac;
    368     uint16 existing_ac; 
    369 } shr_llm_msg_pon_att_mac_move_event_t;
    370 
    371 extern int shr_llm_msg_init(int unit);
    372 extern int shr_llm_msg_uninit(int unit);
    373 extern int shr_llm_msg_mac_limit_enable(int unit, uint8 mac_limit_enable, uint8 reply_fifo_enable);
    374 extern int shr_llm_msg_mac_limit_set(int unit, uint8 type, shr_llm_msg_pon_att_t *msg);
    375 extern int shr_llm_msg_mac_limit_get(int unit, shr_llm_msg_pon_att_t *msg, shr_llm_msg_pon_att_t *rsp);
    376 extern int shr_llm_msg_mac_rx_mode_set(int unit, uint32 mode);
    377 extern int shr_llm_msg_mac_move_set(int unit, uint32 port, uint32 value);
    378 extern int shr_llm_msg_mac_move_get(int unit, uint32 port, uint32 *value);
    379 extern int shr_llm_mac_move_event_set(int unit, uint32 event_id, uint32 value);
    380 extern int shr_llm_mac_move_event_get(int unit, uint32 event_id, uint32 *value);
    381 extern int shr_llm_msg_pon_attr_set(int unit, uint32 serv_type, uint32 data_type, void *data);
    382 #endif /* _SOC_SHARED_LMM_MSG_H_ */