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_ */