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

kbp_connectivity.h (7458B)


      1 /** \file kbp_connectivity.h
      2  *
      3  * Functions for handling jericho2 kbp connectivity.
      4  */
      5 /*
      6  * This license is set out in https://raw.githubusercontent.com/Broadcom-Network-Switching-Software/OpenBCM/master/Legal/LICENSE file.
      7  * 
      8  * Copyright 2007-2020 Broadcom Inc. All rights reserved.
      9  */
     10 #if defined(INCLUDE_KBP)
     11 /*
     12  * {
     13  */
     14 #ifndef __KBP_CONNECTIVITY_INCLUDED__
     15 /*
     16  * {
     17  */
     18 #define __KBP_CONNECTIVITY_INCLUDED__
     19 
     20 #ifndef BCM_DNX_SUPPORT
     21 #error "This file is for use by DNX (Jr2) family only!"
     22 #endif
     23 
     24 /*************
     25  * INCLUDES  *
     26  */
     27 /*
     28  * {
     29  */
     30 #include <soc/kbp/alg_kbp/include/db.h>
     31 #include <soc/kbp/alg_kbp/include/default_allocator.h>
     32 #include <soc/kbp/alg_kbp/include/device.h>
     33 #include <soc/kbp/alg_kbp/include/key.h>
     34 #include <soc/kbp/alg_kbp/include/instruction.h>
     35 #include <soc/kbp/alg_kbp/include/errors.h>
     36 #include <soc/kbp/alg_kbp/include/ad.h>
     37 #include <soc/kbp/alg_kbp/include/kbp_legacy.h>
     38 #include <soc/kbp/alg_kbp/include/init.h>
     39 #include <soc/kbp/alg_kbp/include/kbp_pcie.h>
     40 
     41 #include <soc/dnx/dnx_data/auto_generated/dnx_data_elk.h>
     42 #include <bcm/port.h>
     43 /*
     44  * }
     45  */
     46 
     47 /*************
     48  * DEFINES   *
     49  */
     50 /*
     51  * {
     52  */
     53 
     54 #define DNX_KBP_MDIO_CLAUSE (45)
     55 /*
     56  * Opcode
     57  */
     58 
     59 #define DNX_KBP_OPCODE_NUM_MAX              256
     60 /*
     61  * Lookup Table Write
     62  */
     63 #define DNX_KBP_CPU_WR_LUT_OPCODE           255
     64 /*
     65  * Lookup Table Read
     66  */
     67 #define DNX_KBP_CPU_RD_LUT_OPCODE           254
     68 /*
     69  * PIO Write
     70  */
     71 #define DNX_KBP_CPU_PIOWR_OPCODE            253
     72 /*
     73  * PIO Read Database-X,Register, and User Data Array
     74  */
     75 #define DNX_KBP_CPU_PIORDX_OPCODE           252
     76 /*
     77  * PIO Read Database-Y
     78  */
     79 #define DNX_KBP_CPU_PIORDY_OPCODE           251
     80 /*
     81  * ROP Error Record
     82  */
     83 #define DNX_KBP_CPU_ERR_OPCODE              250
     84 /*
     85  * Database Block Copy
     86  */
     87 #define DNX_KBP_CPU_BLK_COPY_OPCODE         249
     88 /*
     89  * Database Block Move
     90  */
     91 #define DNX_KBP_CPU_BLK_MOVE_OPCODE         248
     92 /*
     93  * Database Block Clear
     94  */
     95 #define DNX_KBP_CPU_BLK_CLR_OPCODE          247
     96 /*
     97  * Database Block Invalidate
     98  */
     99 #define DNX_KBP_CPU_BLK_EV_OPCODE           246
    100 
    101 /**
    102  * \brief
    103  *  define the first opcode in KBP management group
    104  */
    105 #define DNX_KBP_CPU_MANAGMENT_OPCODE_FIRST  200
    106 /*
    107  * Context Buffer Write
    108  */
    109 #define DNX_KBP_CPU_CTX_BUFF_WRITE_OPCODE   10
    110 /*
    111  * PAD OPCODE
    112  */
    113 #define DNX_KBP_CPU_PAD_OPCODE              0
    114 
    115 /*
    116  * Size for Request
    117  */
    118 #define DNX_KBP_CPU_WR_LUT_REQ_SIZE       4
    119 #define DNX_KBP_CPU_RD_LUT_REQ_SIZE       1
    120 #define DNX_KBP_CPU_PIOWR_REQ_SIZE        24
    121 #define DNX_KBP_CPU_PIORDX_REQ_SIZE       4
    122 #define DNX_KBP_CPU_PIORDY_REQ_SIZE       4
    123 #define DNX_KBP_CPU_BLK_COPY_REQ_SIZE     8
    124 #define DNX_KBP_CPU_BLK_MOVE_REQ_SIZE     8
    125 #define DNX_KBP_CPU_BLK_CLR_REQ_SIZE      5
    126 #define DNX_KBP_CPU_BLK_EV_REQ_SIZE       5
    127 
    128 /*
    129  * Size for Reply
    130  */
    131 #define DNX_KBP_CPU_WR_LUT_REP_SIZE       1
    132 #define DNX_KBP_CPU_RD_LUT_REP_SIZE       4
    133 #define DNX_KBP_CPU_PIOWR_REP_SIZE        1
    134 #define DNX_KBP_CPU_PIORDX_REP_SIZE       11
    135 #define DNX_KBP_CPU_PIORDY_REP_SIZE       11
    136 #define DNX_KBP_CPU_BLK_COPY_REP_SIZE     1
    137 #define DNX_KBP_CPU_BLK_MOVE_REP_SIZE     1
    138 #define DNX_KBP_CPU_BLK_CLR_REP_SIZE      1
    139 #define DNX_KBP_CPU_BLK_EV_REP_SIZE       1
    140 
    141 /*
    142  * Opcode type
    143  */
    144 #define DNX_KBP_OPCODE_TYPE_REQUEST       1
    145 #define DNX_KBP_OPCODE_TYPE_REPLY         3
    146 
    147 /*
    148  * Number of kbp instance
    149  */
    150 #define DNX_KBP_MAX_NOF_INST     (DNX_DATA_MAX_ELK_GENERAL_MAX_KBP_INSTANCE)
    151 /*
    152  * Second KBP exists or not
    153  * This indication is true when:
    154  * 1. KBP connectivity properties are configured with second KBP
    155  * or
    156  * 2. when KBP blackhole mode indicates 2 KBP instances
    157  */
    158 #define DNX_KBP_IS_SECOND_KBP_EXIST  \
    159         ((dnx_data_elk.connectivity.topology_get(unit)->start_lane[2] >= \
    160          dnx_data_elk.general.max_lane_id_get(unit)) || \
    161             (dnx_data_elk.connectivity.blackhole_get(unit) == 2))
    162 
    163 #define DNX_KBP_INST_ITER(unit, kbp_inst) \
    164         for (kbp_inst = 0; kbp_inst < (DNX_KBP_IS_SECOND_KBP_EXIST ? DNX_KBP_MAX_NOF_INST : 1); kbp_inst++)
    165 
    166 #define DNX_KBP_INST_MASTER 0
    167 #define DNX_KBP_INST_SLAVE  1
    168 
    169 #define DNX_KBP_OP_IS_DUAL_MODE(unit)  ((dnx_data_elk.connectivity.connect_mode_get(unit) == \
    170                                          DNX_NIF_ELK_TCAM_CONNECT_MODE_DUAL_SHARED) || \
    171                                        (dnx_data_elk.connectivity.connect_mode_get(unit) == \
    172                                         DNX_NIF_ELK_TCAM_CONNECT_MODE_DUAL_SMT))
    173 
    174 #define DNX_KBP_OP2_IS_SINGLE_PORT_MODE(unit)  (dnx_data_elk.connectivity.connect_mode_get(unit) == \
    175                                          DNX_NIF_ELK_TCAM_CONNECT_MODE_SINGLE_PORT)
    176 
    177 #define DNX_KBP_VALID_KBP_PORTS_NUM    (2)
    178 
    179 #define DNX_KBP_USED_KBP_PORTS_NUM    (DNX_KBP_OP2_IS_SINGLE_PORT_MODE(unit) ? 1 : DNX_KBP_VALID_KBP_PORTS_NUM)
    180 
    181 /*
    182  * }
    183  */
    184 
    185 /*************
    186  * MACROS    *
    187  */
    188 /*
    189  * {
    190  */
    191 
    192 /*
    193  * }
    194  */
    195 
    196 /*************
    197  * TYPE DEFS *
    198  */
    199 /*
    200  * {
    201  */
    202 
    203 typedef enum
    204 {
    205     /*
    206      *  OP Single Host Dual Port mode
    207      */
    208     DNX_NIF_ELK_TCAM_CONNECT_MODE_SINGLE = 0,
    209     /*
    210      *  OP Dual Host Quad Port Shared mode
    211      */
    212     DNX_NIF_ELK_TCAM_CONNECT_MODE_DUAL_SHARED = 1,
    213     /*
    214      *  OP Dual Host Quad Port SMT mode
    215      */
    216     DNX_NIF_ELK_TCAM_CONNECT_MODE_DUAL_SMT = 2,
    217     /*
    218      *  OP2 Single Port mode
    219      */
    220     DNX_NIF_ELK_TCAM_CONNECT_MODE_SINGLE_PORT = 3,
    221     /*
    222      *  Number of types in ARAD_NIF_ELK_TCAM_DEV_TYPE
    223      */
    224     DNX_NIF_ELK_TCAM_NOF_CONNECT_MODE = 4
    225 } DNX_NIF_ELK_TCAM_CONNECT_MODE;
    226 
    227 typedef struct dnx_kbp_user_data_s
    228 {
    229     int device;
    230     uint32 kbp_mdio_id;
    231 } dnx_kbp_user_data_t;
    232 
    233 typedef struct dnx_kbp_opcode_map_s
    234 {
    235     uint8 opcode;
    236     /*
    237      * Reply size, 1-based
    238      */
    239     uint32 rx_size;
    240     uint32 rx_type;
    241     /*
    242      * Response size, 1-based
    243      */
    244     uint32 tx_size;
    245     uint32 tx_type;
    246 } dnx_kbp_opcode_map_t;
    247 /*
    248  * }
    249  */
    250 
    251 /*************
    252  * GLOBALS   *
    253  */
    254 /*
    255  * {
    256  */
    257 
    258 /*
    259  * }
    260  */
    261 
    262 /*************
    263  * FUNCTIONS *
    264  */
    265 /*
    266  * {
    267  */
    268 int32_t dnx_kbp_callback_usleep(
    269     void *handle,
    270     uint32_t usec);
    271 
    272 int32_t dnx_kbp_callback_mdio_read(
    273     void *handle,
    274     int32_t chip_no,
    275     uint8_t dev,
    276     uint16_t reg,
    277     uint16_t * value);
    278 
    279 int32_t dnx_kbp_callback_mdio_write(
    280     void *handle,
    281     int32_t chip_no,
    282     uint8_t dev,
    283     uint16_t reg,
    284     uint16_t value);
    285 
    286 int32_t dnx_kbp_callback_reset_device(
    287     void *handle,
    288     int32_t s_reset_low,
    289     int32_t c_reset_low);
    290 
    291 shr_error_e dnx_kbp_init_device_type_get(
    292     int unit,
    293     enum kbp_device_type *device_type);
    294 
    295 shr_error_e dnx_kbp_init_user_data_get(
    296     int unit,
    297     int kbp_inst,
    298     dnx_kbp_user_data_t * user_data);
    299 
    300 shr_error_e dnx_kbp_ilkn_interface_param_get(
    301     int unit,
    302     bcm_core_t core,
    303     bcm_port_t * ilkn_port,
    304     int *ilkn_num_lanes,
    305     int *ilkn_rate,
    306     int *ilkn_metaframe);
    307 
    308 shr_error_e dnx_kbp_init_config_param_get(
    309     int unit,
    310     int kbp_inst,
    311     bcm_core_t core,
    312     uint32 *flags,
    313     struct kbp_device_config *kbp_config);
    314 
    315 shr_error_e dnx_kbp_opcode_map_set(
    316     int unit,
    317     bcm_core_t core,
    318     dnx_kbp_opcode_map_t * opcode_map);
    319 
    320 shr_error_e dnx_kbp_opcode_map_get(
    321     int unit,
    322     bcm_core_t core,
    323     dnx_kbp_opcode_map_t * opcode_map);
    324 
    325 shr_error_e dnx_kbp_interface_init(
    326     int unit);
    327 
    328 shr_error_e dnx_kbp_init_reset(
    329     int unit);
    330 
    331 shr_error_e dnx_kbp_init_kbp_stat_interface(
    332     int unit);
    333 
    334 shr_error_e dnx_kbp_stat_interface_enable_get(
    335     int unit,
    336     int *enable);
    337 
    338 /*
    339  * }
    340  */
    341 
    342 /*
    343  * }
    344  */
    345 #endif /* __KBP_CONNECTIVITY_INCLUDED__ */
    346 /*
    347  * }
    348  */
    349 #endif /* defined(INCLUDE_KBP) */