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

field_reg_mem.c (11886B)


      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:        field_reg_mem.c
      8  * Purpose:     Field Processor module routines specific to BCM56960 registers
      9  *              and memories
     10  */
     11 
     12 #include <shared/bsl.h>
     13 #include <soc/defs.h>
     14 #if defined(BCM_FIELD_SUPPORT)
     15 #include <soc/drv.h>
     16 #include <bcm/error.h>
     17 #include <bcm/field.h>
     18 #include <bcm_int/esw/field.h>
     19 
     20 /*
     21  * Function: _bcm_field_reg_instance_get
     22  *
     23  * Purpose:
     24  *     To get the hardware register for the pipe instance mentioned.
     25  *
     26  * Parameters:
     27  *     unit - (IN)BCM device number
     28  *     reg  - (IN)Register name
     29  *     inst - (IN)Pipe instance
     30  *     reg_out - (OUT)Register instance
     31  *
     32  * Returns:
     33  *     BCM_E_XXX
     34  *
     35  * Notes:
     36  * This function takes the register name and pipe number as input and 
     37  * converts to the right register instance for the pipe given.
     38  * Number of instances depends on number of pipes supported on the device.
     39  * For any register access for a pipe we need to call this way of getting the 
     40  * register instance and add required case in this function.
     41  */
     42 
     43 int
     44 _bcm_field_reg_instance_get(int unit, soc_reg_t reg, int inst, soc_reg_t *reg_out)
     45 {
     46 
     47    switch(reg) {
     48 
     49        case EFP_CLASSID_B_SELECTOR_KEY_TYPEr:
     50             _FP_2PIPE_REG_IDENTIFIER_GET(*reg_out, EFP_CLASSID_B_SELECTOR_KEY_TYPE,
     51                                          PIPE, inst);
     52             break;
     53        case VFP_KEY_CONTROL_1r:
     54             _FP_8PIPE_REG_IDENTIFIER_GET(*reg_out, VFP_KEY_CONTROL_1, PIPE, inst);
     55             break;
     56        case VFP_KEY_CONTROL_2r:
     57             _FP_8PIPE_REG_IDENTIFIER_GET(*reg_out, VFP_KEY_CONTROL_2, PIPE, inst);
     58             break;
     59        case EFP_CLASSID_SELECTORr:
     60             _FP_8PIPE_REG_IDENTIFIER_GET(*reg_out, EFP_CLASSID_SELECTOR, PIPE, inst);
     61             break;
     62        case EFP_CLASSID_SELECTOR_Ar:
     63             _FP_2PIPE_REG_IDENTIFIER_GET(*reg_out, EFP_CLASSID_SELECTOR_A,
     64                                          PIPE, inst);
     65             break;
     66        case EFP_KEY4_DVP_SELECTORr:
     67             _FP_4PIPE_REG_IDENTIFIER_GET(*reg_out, EFP_KEY4_DVP_SELECTOR,
     68                                          PIPE, inst);
     69             break;
     70        case EFP_KEY4_MDL_SELECTORr:
     71             _FP_8PIPE_REG_IDENTIFIER_GET(*reg_out, EFP_KEY4_MDL_SELECTOR,
     72                                     PIPE, inst);
     73             break;
     74        case EFP_KEY8_DVP_SELECTORr:
     75             _FP_4PIPE_REG_IDENTIFIER_GET(*reg_out, EFP_KEY8_DVP_SELECTOR,
     76                                          PIPE, inst);
     77             break;
     78        case VFP_SLICE_MAPr:
     79             _FP_8PIPE_REG_IDENTIFIER_GET(*reg_out, VFP_SLICE_MAP, PIPE, inst);
     80             break;
     81        case EFP_SLICE_MAPr:
     82             _FP_8PIPE_REG_IDENTIFIER_GET(*reg_out, EFP_SLICE_MAP, PIPE, inst);
     83             break;
     84        case EFP_SLICE_CONTROLr:
     85             _FP_8PIPE_REG_IDENTIFIER_GET(*reg_out, EFP_SLICE_CONTROL, PIPE, inst);
     86             break;
     87        case VFP_SLICE_CONTROLr:
     88             _FP_8PIPE_REG_IDENTIFIER_GET(*reg_out, VFP_SLICE_CONTROL, PIPE, inst);
     89             break;
     90        case IFP_CONFIGr:
     91             _FP_8PIPE_REG_IDENTIFIER_GET(*reg_out, IFP_CONFIG, PIPE, inst);
     92             break;
     93        case AUX_ARB_CONTROLr:
     94             _FP_8PIPE_REG_IDENTIFIER_GET(*reg_out, AUX_ARB_CONTROL, PIPE, inst);
     95             break;
     96        case IFP_LOGICAL_TABLE_SELECT_CONFIGr:
     97             _FP_8PIPE_REG_IDENTIFIER_GET(*reg_out, IFP_LOGICAL_TABLE_SELECT_CONFIG,
     98                                          PIPE, inst);
     99             break;
    100        case EXACT_MATCH_LOGICAL_TABLE_SELECT_CONFIGr:
    101             _FP_8PIPE_REG_IDENTIFIER_GET(*reg_out, EXACT_MATCH_LOGICAL_TABLE_SELECT_CONFIG,
    102                                          PIPE, inst);
    103             break;
    104        case IFP_LOGICAL_TABLE_CONFIGr:
    105             _FP_8PIPE_REG_IDENTIFIER_GET(*reg_out, IFP_LOGICAL_TABLE_CONFIG,
    106                                          PIPE, inst);
    107             break;
    108        case L4_SRC_PORT_MAPr:
    109             _FP_4PIPE_REG_IDENTIFIER_GET(*reg_out, L4_SRC_PORT_MAP,
    110                                          PIPE, inst);
    111             break;
    112        case ETHERTYPE_MAPr:
    113             _FP_8PIPE_REG_IDENTIFIER_GET(*reg_out, ETHERTYPE_MAP,
    114                                          PIPE, inst);
    115             break;
    116        case L4_DST_PORT_MAPr:
    117             _FP_4PIPE_REG_IDENTIFIER_GET(*reg_out, L4_DST_PORT_MAP,
    118                                          PIPE, inst);
    119             break;
    120        case EFP_DEST_PORT_SELECTORr:
    121             _FP_2PIPE_REG_IDENTIFIER_GET(*reg_out, EFP_DEST_PORT_SELECTOR,
    122                                          PIPE, inst);
    123             break;
    124        case EFP_KEY4_L3_CLASSID_SELECTORr:
    125             _FP_8PIPE_REG_IDENTIFIER_GET(*reg_out, EFP_KEY4_L3_CLASSID_SELECTOR,
    126                                          PIPE, inst);
    127             break;
    128        case EFP_KEY8_L3_CLASSID_SELECTORr:
    129             _FP_8PIPE_REG_IDENTIFIER_GET(*reg_out, EFP_KEY8_L3_CLASSID_SELECTOR,
    130                                          PIPE, inst);
    131             break;
    132        default:
    133             return BCM_E_INTERNAL;
    134    }
    135    return BCM_E_NONE;
    136 }
    137 
    138 /*
    139  * Function: _bcm_field_mem_instance_get
    140  *
    141  * Purpose:
    142  *     To get the hardware memory for the pipe instance mentioned.
    143  *
    144  * Parameters:
    145  *     unit - (IN)BCM device number
    146  *     mem  - (IN)Memory name
    147  *     inst - (IN)Pipe instance
    148  *     mem_out - (OUT)Memory instance
    149  *
    150  * Returns:
    151  *     BCM_E_XXX
    152  *
    153  * Notes:
    154  * This function takes the memory name and pipe number as input and 
    155  * converts to the right memory instance for the pipe given.
    156  * Number of instances depends on number of pipes supported on the device.
    157  * For any memory access for a pipe we need to call this way of getting the 
    158  * memory instance and add required case in this function.
    159  */
    160 
    161 int
    162 _bcm_field_mem_instance_get(int unit, soc_mem_t mem, int inst, soc_mem_t *mem_out)
    163 {
    164    switch(mem) {
    165        case VFP_TCAMm:
    166             _FP_8PIPE_MEM_IDENTIFIER_GET(*mem_out, VFP_TCAM, PIPE, inst);
    167             break;
    168        case VFP_POLICY_TABLEm:
    169             _FP_8PIPE_MEM_IDENTIFIER_GET(*mem_out, VFP_POLICY_TABLE, PIPE, inst);
    170             break;
    171        case EFP_TCAMm:
    172             _FP_8PIPE_MEM_IDENTIFIER_GET(*mem_out, EFP_TCAM, PIPE, inst);
    173             break;
    174        case EFP_POLICY_TABLEm:
    175             _FP_8PIPE_MEM_IDENTIFIER_GET(*mem_out, EFP_POLICY_TABLE, PIPE, inst);
    176             break;
    177        case IFP_TCAM_WIDEm:
    178             _FP_4PIPE_MEM_IDENTIFIER_GET(*mem_out, IFP_TCAM_WIDE, PIPE, inst);
    179             break;
    180        case IFP_TCAMm:
    181             _FP_8PIPE_MEM_IDENTIFIER_GET(*mem_out, IFP_TCAM, PIPE, inst);
    182             break;
    183        case IFP_POLICY_TABLE_WIDEm:
    184             _FP_2PIPE_MEM_IDENTIFIER_GET(*mem_out, IFP_POLICY_TABLE_WIDE, PIPE, inst);
    185             break;
    186        case IFP_POLICY_TABLEm:
    187             _FP_8PIPE_MEM_IDENTIFIER_GET(*mem_out, IFP_POLICY_TABLE, PIPE, inst);
    188             break;
    189        case EXACT_MATCH_4m:
    190             _FP_4PIPE_MEM_IDENTIFIER_GET(*mem_out, EXACT_MATCH_4, PIPE, inst);
    191             break;
    192        case EXACT_MATCH_2m:
    193             _FP_4PIPE_MEM_IDENTIFIER_GET(*mem_out, EXACT_MATCH_2, PIPE, inst);
    194             break;
    195        case IFP_KEY_GEN_PROGRAM_PROFILEm:
    196             _FP_8PIPE_MEM_IDENTIFIER_GET(*mem_out, IFP_KEY_GEN_PROGRAM_PROFILE, PIPE, inst);
    197             break;
    198        case IFP_KEY_GEN_PROGRAM_PROFILE2m:
    199             _FP_8PIPE_MEM_IDENTIFIER_GET(*mem_out, IFP_KEY_GEN_PROGRAM_PROFILE2, PIPE, inst);
    200             break;
    201        case EXACT_MATCH_KEY_GEN_PROGRAM_PROFILEm:
    202             _FP_8PIPE_MEM_IDENTIFIER_GET(*mem_out, EXACT_MATCH_KEY_GEN_PROGRAM_PROFILE, PIPE,
    203                                          inst);
    204             break;
    205        case EXACT_MATCH_KEY_GEN_MASKm:
    206             _FP_8PIPE_MEM_IDENTIFIER_GET(*mem_out, EXACT_MATCH_KEY_GEN_MASK, PIPE, inst);
    207             break;
    208        case IFP_RANGE_CHECKm:
    209             _FP_8PIPE_MEM_IDENTIFIER_GET(*mem_out, IFP_RANGE_CHECK, PIPE, inst);
    210             break;
    211        case IFP_LOGICAL_TABLE_SELECTm:
    212             _FP_8PIPE_MEM_IDENTIFIER_GET(*mem_out, IFP_LOGICAL_TABLE_SELECT, PIPE, inst);
    213             break;
    214        case IFP_LOGICAL_TABLE_SELECT_TCAM_ONLYm:
    215             _FP_8PIPE_MEM_IDENTIFIER_GET(*mem_out, IFP_LOGICAL_TABLE_SELECT_TCAM_ONLY, PIPE,
    216                                          inst);
    217             break;
    218        case IFP_LOGICAL_TABLE_SELECT_DATA_ONLYm:
    219             _FP_8PIPE_MEM_IDENTIFIER_GET(*mem_out, IFP_LOGICAL_TABLE_SELECT_DATA_ONLY, PIPE,
    220                                          inst);
    221             break;
    222        case EXACT_MATCH_LOGICAL_TABLE_SELECTm:
    223             _FP_8PIPE_MEM_IDENTIFIER_GET(*mem_out, EXACT_MATCH_LOGICAL_TABLE_SELECT, PIPE,
    224                                          inst);
    225             break;
    226        case EXACT_MATCH_LOGICAL_TABLE_SELECT_TCAM_ONLYm:
    227             _FP_8PIPE_MEM_IDENTIFIER_GET(*mem_out, EXACT_MATCH_LOGICAL_TABLE_SELECT_TCAM_ONLY,
    228                                          PIPE, inst);
    229             break;
    230        case EXACT_MATCH_LOGICAL_TABLE_SELECT_DATA_ONLYm:
    231             _FP_8PIPE_MEM_IDENTIFIER_GET(*mem_out, EXACT_MATCH_LOGICAL_TABLE_SELECT_DATA_ONLY,
    232                                          PIPE, inst);
    233             break;
    234        case IFP_METER_TABLEm:
    235             _FP_8PIPE_MEM_IDENTIFIER_GET(*mem_out, IFP_METER_TABLE, PIPE, inst);
    236             break;
    237        case EFP_METER_TABLEm:
    238             _FP_4PIPE_MEM_IDENTIFIER_GET(*mem_out, EFP_METER_TABLE, PIPE, inst);
    239             break;
    240        case EFP_COUNTER_TABLEm:
    241             _FP_8PIPE_MEM_IDENTIFIER_GET(*mem_out, EFP_COUNTER_TABLE, PIPE, inst);
    242             break;
    243        case IFP_LOGICAL_TABLE_ACTION_PRIORITYm:
    244             _FP_8PIPE_MEM_IDENTIFIER_GET(*mem_out, IFP_LOGICAL_TABLE_ACTION_PRIORITY, PIPE,
    245                                          inst);
    246             break;
    247        case TTL_FNm:
    248             _FP_8PIPE_MEM_IDENTIFIER_GET(*mem_out, TTL_FN, PIPE, inst);
    249             break;
    250        case TOS_FNm:
    251             _FP_8PIPE_MEM_IDENTIFIER_GET(*mem_out, TOS_FN, PIPE, inst);
    252             break;
    253        case TCP_FNm:
    254             _FP_8PIPE_MEM_IDENTIFIER_GET(*mem_out, TCP_FN, PIPE, inst);
    255             break;
    256        case IP_PROTO_MAPm:
    257             _FP_8PIPE_MEM_IDENTIFIER_GET(*mem_out, IP_PROTO_MAP, PIPE, inst);
    258             break;
    259        case SRC_COMPRESSIONm:
    260             _FP_4PIPE_MEM_IDENTIFIER_GET(*mem_out, SRC_COMPRESSION, PIPE, inst);
    261             break;
    262        case DST_COMPRESSIONm:
    263             _FP_4PIPE_MEM_IDENTIFIER_GET(*mem_out, DST_COMPRESSION, PIPE, inst);
    264             break;
    265        case EXACT_MATCH_DEFAULT_POLICYm:
    266             _FP_8PIPE_MEM_IDENTIFIER_GET(*mem_out, EXACT_MATCH_DEFAULT_POLICY, PIPE, inst);
    267             break;
    268        case EXACT_MATCH_ACTION_PROFILEm:
    269             _FP_8PIPE_MEM_IDENTIFIER_GET(*mem_out, EXACT_MATCH_ACTION_PROFILE, PIPE, inst);
    270             break;
    271        case EXACT_MATCH_QOS_ACTIONS_PROFILEm:
    272             _FP_8PIPE_MEM_IDENTIFIER_GET(*mem_out, EXACT_MATCH_QOS_ACTIONS_PROFILE, PIPE,
    273                                          inst);
    274             break;
    275        case EXACT_MATCH_KEY_ATTRIBUTESm:
    276             _FP_2PIPE_MEM_IDENTIFIER_GET(*mem_out, EXACT_MATCH_KEY_ATTRIBUTES, PIPE,
    277                                          inst);
    278             break;
    279        case IFP_POLICY_ACTION_PROFILEm:
    280             _FP_2PIPE_MEM_IDENTIFIER_GET(*mem_out, IFP_POLICY_ACTION_PROFILE, PIPE,
    281                                          inst);
    282             break;
    283        case IFP_RANGE_CHECK_MASK_Am:
    284             _FP_8PIPE_MEM_IDENTIFIER_GET(*mem_out, IFP_RANGE_CHECK_MASK_A, PIPE, inst);
    285             break;
    286        case IFP_RANGE_CHECK_MASK_Bm:
    287             _FP_8PIPE_MEM_IDENTIFIER_GET(*mem_out, IFP_RANGE_CHECK_MASK_B, PIPE, inst);
    288             break;
    289        default:
    290             return BCM_E_INTERNAL;
    291    }
    292 
    293    return BCM_E_NONE;
    294 
    295 }
    296 #endif /* BCM_FIELD_SUPPORT */