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

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