ccm_msg.h (10276B)
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: ccm_msg.h 8 * Purpose: CCM Messages between SDK and uKernel.. 9 */ 10 11 #ifndef _SOC_SHARED_CCM_MSG_H_ 12 #define _SOC_SHARED_CCM_MSG_H_ 13 14 #include "soc/shared/ccm.h" 15 #include <shared/pack.h> 16 17 #ifdef BCM_UKERNEL 18 /* Build for uKernel */ 19 #include "sdk_typedefs.h" 20 #else 21 /* Build for UKERNEL */ 22 #include <sal/types.h> 23 #include <bcm/types.h> 24 25 #endif 26 27 28 #define _UC_MSG_TIMEOUT_USECS 5000000 /* UC Msg timeout (5 Sec) */ 29 30 /* uController Error codes */ 31 typedef enum shr_uc_error_e { 32 SHR_UC_E_NONE = 0, 33 SHR_UC_E_INTERNAL, 34 SHR_UC_E_MEMORY, 35 SHR_UC_E_PARAM, 36 SHR_UC_E_RESOURCE, 37 SHR_UC_E_EXISTS, 38 SHR_UC_E_NOT_FOUND, 39 SHR_UC_E_UNAVAIL, 40 SHR_UC_E_VERSION, 41 SHR_UC_E_INIT 42 } shr_uc_error_t; 43 44 #define _CCM_OLP_HEADER_TYPE_RX 0x01 /* _BCM_TD2P_OLP_HDR_TYPE_RX */ 45 46 /* _BCM_TD2P_OLP_HDR_SUBTYPE_ETH_OAM_CCM */ 47 #define _CCM_RX_HEADER_SUBTYPE 0x01 48 /* _BCM_TD2P_OLP_HDR_SUBTYPE_ETH_OAM_CCM_UP */ 49 #define _CCM_RX_UP_MEP_HEADER_SUBTYPE 0x11 50 51 #define _CCM_ETHER_TYPE 0x8902 /* CFM Ether type */ 52 53 #define _CCM_UC_NUM 0 /* UC Core to run CCM */ 54 #define _CCM_RX_CHANNEL_ID 1 /* Channel for CCM Rx */ 55 56 57 /* Change this with config property */ 58 #define _CCM_GROUP_COUNT 256 59 #define _CCM_MEP_COUNT 256 60 61 #define _CCM_MAX_GROUPS 1024 62 #define _CCM_MAX_MEPS 1024 63 #define _CCM_MEP_BIT_FIELD_LEN _CCM_MAX_MEPS/32 64 #define _CCM_GRP_BIT_FILED_LEN _CCM_MAX_GROUPS/32 65 66 67 #define _CCM_SDK_VERSION 1 /* CCM EApp Version */ 68 #define _CCM_UC_MIN_VERSION 1 /* Minimum version expected from CCM EApp */ 69 70 71 /* Group Create/Update Msg Flags */ 72 #define _GRP_REPLACE (1 << 0) 73 #define _GRP_REPLACE_SW_RDI (1 << 1) 74 #define _GRP_REPLACE_LOWEST_ALARM_PRIO (1 << 2) 75 #define _GRP_GET_FAULTS_ONLY (1 << 3) /* Get Faults only */ 76 77 78 /* OAM EP Create/Update Msg Flags */ 79 #define _MEP_REPLACE (1 << 0) /* Replace existing EP */ 80 #define _MEP_OLP_RECREATE (1 << 1) /* Replace existing EP */ 81 #define _MEP_L2_ENCAP_RECREATE (1 << 2) /* Replace existing EP */ 82 #define _REPLACE_INTF_STATUS (1 << 3) /* Replace Intf status */ 83 #define _REPLACE_PORT_STATUS (1 << 4) /* Replace Port Status */ 84 #define _REPLACE_TRUNK_INDEX (1 << 5) /* Replace Trunk Idx */ 85 #define _REPLACE_CTRS (1 << 6) /* Replace Counter Idx/Action */ 86 #define _MEP_GET_FAULTS_ONLY (1 << 7) /* Get Faults only */ 87 #define _MEP_GET_CLR_P_FAULTS (1 << 8) /* Clear persistent faults on GET */ 88 89 90 /* Set a bit corresponding to index in 32 bit wide bifield array */ 91 #define _SET_BIT_FLD(bitmap, index) ((bitmap)[(index)/32] |= (1 << (index)%32)) 92 93 /* Clear a bit corresponding to index in 32 bit wide bifield array */ 94 #define _CLR_BIT_FLD(bitmap, index) ((bitmap)[(index)/32] &= ~(1 << (index)%32)) 95 96 #define _GET_BIT_FLD(bitmap, index) (((bitmap)[index/32] & (1 << index%32)) ? 1 : 0) 97 98 /* CCM Events */ 99 /* Group Defect Priorities */ 100 #define G_RDI_PRI 1 101 #define G_CCM_MAC_PRI 2 102 #define G_CCM_TIMEOUT_PRI 3 103 #define G_CCM_ERROR_PRI 4 104 #define G_XCON_PRI 5 105 106 /* Group Events */ 107 #define G_RDI (1 << 0) /* bcmOAMEventGroupRemote */ 108 #define G_CCM_MAC (1 << 1) /* bcmOAMEventGroupMACStatus */ 109 #define G_CCM_TIMEOUT (1 << 2) /* bcmOAMEventGroupCCMTimeout */ 110 #define G_CCM_ERROR (1 << 3) /* bcmOAMEventGroupCCMError */ 111 #define G_XCON (1 << 4) /* bcmOAMEventGroupCCMxcon */ 112 113 #define G_RDI_CLR (1 << 5) /* bcmOAMEventGroupRemoteClear */ 114 #define G_CCM_MAC_CLR (1 << 6) /* bcmOAMEventGroupMACStatusClear */ 115 #define G_CCM_TIME_IN (1 << 7) /* bcmOAMEventGroupCCMTimeoutClear */ 116 #define G_CCM_ERROR_CLR (1 << 8) /* bcmOAMEventGroupCCMErrorClear */ 117 #define G_XCON_CLR (1 << 9) /* bcmOAMEventGroupCCMxconClear */ 118 119 /* Reserving 2 bits for any additional Group events */ 120 #define G_EVENT_MASK (0xFFF) /* LSB 12 bits represent Group Events */ 121 122 123 /* Endpoint Events */ 124 #define E_PORT_DOWN (1 << 12) /* bcmOAMEventEndpointPortDown */ 125 #define E_PORT_UP (1 << 13) /* bcmOAMEventEndpointPortUp */ 126 127 #define E_INTF_UP (1 << 14) /* bcmOAMEventEndpointInterfaceUp */ 128 #define E_INTF_DOWN (1 << 15) /* bcmOAMEventEndpointInterfaceDown */ 129 #define E_INTF_TEST (1 << 16) /* bcmOAMEventEndpointInterfaceTesting */ 130 #define E_INTF_UK (1 << 17) /* bcmOAMEventEndpointInterfaceUnkonwn */ 131 #define E_INTF_DOR (1 << 18) /* bcmOAMEventEndpointInterfaceDormant */ 132 #define E_INTF_NP (1 << 19) /* bcmOAMEventEndpointInterfaceNotPresent */ 133 #define E_INTF_LL (1 << 20) /* bcmOAMEventEndpointInterfaceLLDown */ 134 135 #define E_CCM_TIMEOUT (1 << 21) /* bcmOAMEventEndpointCCMTimeout) */ 136 #define E_CCM_TIME_IN (1 << 22) /* bcmOAMEventEndpointCCMTimein) */ 137 #define E_CCM_RDI (1 << 23) /* bcmOAMEventEndpointRemote */ 138 #define E_CCM_RDI_CLR (1 << 24) /* bcmOAMEventEndpointRemoteUp */ 139 140 #define E_EVENT_MASK (0xFFFFF << 12) /* MSB 20 bits represent Group Events */ 141 142 143 /* CCM Endpoint data */ 144 typedef struct ccm_mep_data_s { 145 146 uint32 flags; /* Enpoint Flags */ 147 148 int ep_id; /* Endpoint ID */ 149 int group_id; /* Group ID */ 150 151 bcm_mac_t da; /* DMAC */ 152 bcm_mac_t sa; /* SMAC */ 153 uint8 type; /* MEP Type (Port+C+S, P+C, P+S, P) */ 154 uint8 level; /* Maintenance domain level */ 155 uint16 name; /* Endpoint name */ 156 uint32 period; /* CCM interval encoding */ 157 158 uint16 vlan; /* S Vlan */ 159 uint16 inner_vlan; /* C Vlan when double tagged*/ 160 uint8 pkt_pri; /* Outer vlan Pri */ 161 uint8 inner_vlan_pri; /* Inner vlan Pri */ 162 uint16 tpid; /* Outer vlan TPID */ 163 uint16 inner_tpid; /* Inner vlan TPID */ 164 165 uint32 gport; /* Sw Generic Port */ 166 int sglp; /* Hw Src GLP CCM Rx port/trunk */ 167 int dglp; /* Hw Dest GLP for CCM Tx */ 168 uint32 trunk_index; /* Trunk Port index */ 169 170 uint32 faults; /* Faults info */ 171 uint32 persistent_faults; /* Persistent faults */ 172 173 uint8 port_state; /* Port Status TLV Value */ 174 uint8 intf_state; /* Interface Status TLV Value */ 175 176 uint8 num_ctrs; /* Num of Ctrs to incr */ 177 uint8 counter_offset[_FP_OAM_MAX_CTRS]; /* Counter offset */ 178 uint32 flex_stat_id[_FP_OAM_MAX_CTRS]; /* Flex Stat Id */ 179 180 } ccm_mep_data_t; 181 182 183 /* CCM Group data */ 184 typedef struct shr_ccm_group_data_s { 185 uint32 flags; /* Group Flags */ 186 int group_id; /* Group id */ 187 int lmep_id; /* LMEP IDx */ 188 /* Alarms are generated for priority greater than or equal to this */ 189 uint32 lowest_alarm_priority; 190 uint32 faults; /* Group Faults */ 191 uint32 persistent_faults; /* Persistent faults */ 192 uint8 name[_FP_OAM_MAID_LEN]; /* Group name */ 193 uint32 rmep_bitmap[_CCM_MEP_BIT_FIELD_LEN];/* Group RMEP List */ 194 } ccm_group_data_t; 195 196 197 typedef struct shr_ccm_msg_ctrl_init_s { 198 uint32 max_groups; 199 uint32 max_meps; 200 uint32 rx_channel; 201 } shr_ccm_msg_ctrl_init_t; 202 203 204 typedef struct shr_ccm_msg_ctrl_mep_data_s { 205 uint32 flags; /* This can be used to indicate if there are 206 any mods to message structure in future */ 207 ccm_mep_data_t mep_data; /* MEP Data */ 208 uint32 l2_encap_len; /* L2 Encap Len */ 209 uint8 L2_encap[_FP_OAM_CCM_L2_ENCAP_LEN_MAX]; /* L2 encap data */ 210 uint8 OLP_Tx_Hdr[_FP_OAM_OLP_TX_LEN]; /* OLP L2 Hdr */ 211 } shr_ccm_msg_ctrl_mep_data_t; 212 213 214 typedef struct shr_ccm_msg_ctrl_group_data_s { 215 uint32 flags; 216 ccm_group_data_t group_data; 217 } shr_ccm_msg_ctrl_group_data_t; 218 219 220 typedef struct shr_ccm_msg_ctrl_app_data_s { 221 uint32 flags; 222 uint32 group_bitmap[_CCM_GRP_BIT_FILED_LEN]; 223 } shr_ccm_msg_ctrl_app_data_t; 224 225 #define MAX_PORTS 137 /* 137 is the current max number of ports supported in Tomahawk. 226 * Other devices has lesser MAX values than them */ 227 #define CCM_INVALID_TRUNK_NUM (0xFFFF) /* Max value of uint16_t */ 228 229 typedef struct shr_ccm_msg_ctrl_port_trunk_upd_s { 230 uint16 num_ports; 231 uint16 trunk_id; 232 uint16 list_of_ports[MAX_PORTS]; 233 } shr_ccm_msg_ctrl_port_trunk_upd_t; 234 235 typedef union shr_ccm_msg_ctrl_s { 236 shr_ccm_msg_ctrl_init_t init_msg; 237 shr_ccm_msg_ctrl_mep_data_t mep_msg; 238 shr_ccm_msg_ctrl_group_data_t group_msg; 239 shr_ccm_msg_ctrl_app_data_t app_data_msg; 240 shr_ccm_msg_ctrl_port_trunk_upd_t port_trunk_upd_msg; 241 } shr_ccm_msg_ctrl_t; 242 243 244 extern uint8 * 245 shr_ccm_msg_ctrl_init_pack(uint8 *buf, shr_ccm_msg_ctrl_init_t *msg); 246 247 extern uint8 * 248 shr_ccm_msg_ctrl_init_unpack(uint8 *buf, shr_ccm_msg_ctrl_init_t *msg); 249 250 extern uint8 * 251 shr_ccm_msg_ctrl_mep_set_pack(uint8 *buf, shr_ccm_msg_ctrl_mep_data_t *msg); 252 253 extern uint8 * 254 shr_ccm_msg_ctrl_mep_set_unpack(uint8 *buf, shr_ccm_msg_ctrl_mep_data_t *msg); 255 256 extern uint8 * 257 shr_ccm_msg_ctrl_mep_get_pack(uint8 *buf, shr_ccm_msg_ctrl_mep_data_t *msg); 258 259 extern uint8 * 260 shr_ccm_msg_ctrl_mep_get_unpack(uint8 *buf, shr_ccm_msg_ctrl_mep_data_t *msg); 261 262 extern uint8 * 263 shr_ccm_msg_ctrl_group_set_pack(uint8 *buf, shr_ccm_msg_ctrl_group_data_t *msg); 264 265 extern uint8 * 266 shr_ccm_msg_ctrl_group_set_unpack(uint8 *buf, shr_ccm_msg_ctrl_group_data_t *msg); 267 268 extern uint8 * 269 shr_ccm_msg_ctrl_group_get_pack(uint8 *buf, shr_ccm_msg_ctrl_group_data_t *msg); 270 271 extern uint8 * 272 shr_ccm_msg_ctrl_group_get_unpack(uint8 *buf, shr_ccm_msg_ctrl_group_data_t *msg); 273 274 extern uint8 * 275 shr_ccm_msg_ctrl_app_data_pack(uint8 *buf, shr_ccm_msg_ctrl_app_data_t *msg); 276 277 extern uint8 * 278 shr_ccm_msg_ctrl_app_data_unpack(uint8 *buf, shr_ccm_msg_ctrl_app_data_t *msg); 279 280 extern uint8 * 281 shr_ccm_msg_ctrl_port_trunk_upd_pack(uint8 *buf, shr_ccm_msg_ctrl_port_trunk_upd_t *msg); 282 283 extern uint8 * 284 shr_ccm_msg_ctrl_port_trunk_upd_unpack(uint8 *buf, shr_ccm_msg_ctrl_port_trunk_upd_t *msg); 285 286 #endif