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

topo_brd.h (9371B)


      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:        topo_brd.h
      8  * Purpose:     
      9  */
     10 
     11 #ifndef   _STKTASK_TOPO_BRD_H_
     12 #define   _STKTASK_TOPO_BRD_H_
     13 
     14 #include <sal/types.h>
     15 #include <bcm/port.h>
     16 #include <bcm/trunk.h>
     17 #include <appl/stktask/topology.h>
     18 #include <appl/stktask/stktask.h>
     19 
     20 typedef int (*bcm_board_reset_f)(topo_cpu_t *tp_cpu, uint32 flags);
     21 typedef int (*bcm_board_program_f)(topo_cpu_t *topo_cpu, cpudb_ref_t db_ref);
     22 typedef int (*bcm_board_trunk_cb_f)(int unit, int tid,
     23                                     bcm_trunk_info_t *info,
     24                                     int member_count,
     25                                     bcm_trunk_member_t *member_array,
     26                                     void *cookie);
     27 
     28 /* In topo_brd.c */
     29 
     30 extern int topo_board_program(cpudb_ref_t db_ref, topo_cpu_t *topo_cpu);
     31 extern int bcm_board_topo_set(topo_cpu_t *tp_cpu);
     32 extern int bcm_board_topo_get(topo_cpu_t **tp_cpu);
     33 
     34 extern int topo_board_setup(cpudb_ref_t db_ref);
     35 extern int topo_board_initialize(cpudb_ref_t db_ref);
     36 
     37 /* Rapid Recovery */
     38 extern int topo_board_rapid_recovery(cpudb_ref_t db_ref,
     39                                      int unit, bcm_port_t fail_port);
     40 
     41 typedef struct xgs3devinfo_s {
     42     int unit;           /* Device unit number */
     43     int modid;          /* Device modid */
     44     int intport[2];     /* Internal port number */
     45 } xgs3devinfo_t;
     46 
     47 typedef struct bcm_board_port_connection_s {
     48     bcm_port_t from;    /* usually switch */
     49     bcm_port_t to;      /* usually fabric */
     50 } bcm_board_port_connection_t;
     51 
     52 extern int bcm_board_topo_24g(topo_cpu_t *tp_cpu, cpudb_ref_t db_ref);
     53 extern int bcm_board_topo_24g_stk(topo_cpu_t *tp_cpu, cpudb_ref_t db_ref);
     54 extern int bcm_board_topo_12g_stk(topo_cpu_t *tp_cpu, cpudb_ref_t db_ref);
     55 extern int bcm_board_topo_48g_stk(topo_cpu_t *tp_cpu, cpudb_ref_t db_ref);
     56 extern int bcm_board_topo_48f_stk(topo_cpu_t *tp_cpu, cpudb_ref_t db_ref);
     57 extern int bcm_board_topo_24g2x_stk(topo_cpu_t *tp_cpu, cpudb_ref_t db_ref);
     58 extern int bcm_board_topo_48g2x_stk(topo_cpu_t *tp_cpu, cpudb_ref_t db_ref);
     59 extern int bcm_board_topo_8h(topo_cpu_t *tp_cpu, cpudb_ref_t db_ref);
     60 extern int bcm_board_topo_lm2x(topo_cpu_t *tp_cpu, cpudb_ref_t db_ref);
     61 extern int bcm_board_topo_lm6x(topo_cpu_t *tp_cpu, cpudb_ref_t db_ref);
     62 extern int bcm_board_topo_lm_xgs2_48g(topo_cpu_t *tp_cpu, cpudb_ref_t db_ref);
     63 extern int bcm_board_topo_cfm_xgs2(topo_cpu_t *tp_cpu, cpudb_ref_t db_ref);
     64 extern int bcm_board_topo_cfm_xgs3(topo_cpu_t *tp_cpu, cpudb_ref_t db_ref);
     65 extern int bcm_board_topo_sdk_xgs3_24g(topo_cpu_t *tp_cpu, cpudb_ref_t db_ref);
     66 extern int bcm_board_topo_lm_xgs3_48g(topo_cpu_t *tp_cpu, cpudb_ref_t db_ref);
     67 extern int bcm_board_topo_xgs2_12g(topo_cpu_t *tp_cpu, cpudb_ref_t db_ref);
     68 extern int bcm_board_topo_xgs3_48f(topo_cpu_t *tp_cpu, cpudb_ref_t db_ref);
     69 extern int bcm_board_topo_xgs3_48g(topo_cpu_t *tp_cpu, cpudb_ref_t db_ref);
     70 extern int bcm_board_topo_xgs3_20x(topo_cpu_t *tp_cpu, cpudb_ref_t db_ref);
     71 extern int bcm_board_topo_xgs3_48g5g(topo_cpu_t *tp_cpu, cpudb_ref_t db_ref);
     72 extern int bcm_board_topo_xgs3_48g2(topo_cpu_t *tp_cpu, cpudb_ref_t db_ref);
     73 extern int bcm_board_topo_lm_56800_12x(topo_cpu_t *tp_cpu, cpudb_ref_t db_ref);
     74 
     75 #define bcm_board_topo_lm_xgs1_6x bcm_board_topo_lm6x
     76 #define bcm_board_topo_lm_xgs2_6x bcm_board_topo_lm6x
     77 #define bcm_board_topo_sdk_xgs3_12g bcm_board_topo_sdk_xgs3_24g
     78 #define bcm_board_topo_sdk_xgs3_16h bcm_board_topo_sdk_xgs3_20x
     79 
     80 /* Strata specific code in brd_strata.c */
     81 extern int bcm_board_topo_24f2g_stk(topo_cpu_t *tp_cpu, cpudb_ref_t db_ref);
     82 extern int bcm_board_topo_48f4g_stk(topo_cpu_t *tp_cpu, cpudb_ref_t db_ref);
     83 extern int bcm_board_topo_48f2g_stk(topo_cpu_t *tp_cpu, cpudb_ref_t db_ref);
     84 
     85 /* XGS End to end flow control code in brd_e2e.c */
     86 extern int bcm_board_e2e_config_set(int pkt_rate, int cell_limit,
     87 				    int pkt_limit);
     88 extern int bcm_board_e2e_config_get(int *pkt_rate, int *cell_limit,
     89 				    int *pkt_limit);
     90 extern int bcm_board_e2e_set(void);
     91 
     92 extern int _bcm_board_dual_xgs3_e2e_set(int unit0, bcm_module_t modid0,
     93                                         int unit1, bcm_module_t modid1);
     94 
     95 /* Trunking */
     96 
     97 #define BCM_BOARD_TRUNK_NORMAL          0x0001 /* Default trunk */
     98 #define BCM_BOARD_TRUNK_DESTROY         0x0002 /* Destroy trunks only */
     99 #define BCM_BOARD_TRUNK_ALL             0x0004 /* Trunk all external ports */
    100 
    101 extern int bcm_board_auto_trunk_get(int *flag);
    102 extern int bcm_board_auto_trunk_set(int flag);
    103 extern int bcm_board_trunk_local(cpudb_entry_t *entry, int flags);
    104 extern int bcm_board_trunk_system(cpudb_entry_t *entry, cpudb_ref_t db_ref,
    105                                   int flags);
    106 extern int bcm_board_trunk_destroy(cpudb_entry_t *entry);
    107 extern int bcm_board_trunk_callback_add(bcm_board_trunk_cb_f func,
    108                                         void *cookie);
    109 extern int bcm_board_trunk_callback_remove(bcm_board_trunk_cb_f func,
    110                                         void *cookie);
    111 
    112 /* Compatibility */
    113 #define bcm_board_trunk(entry, create) bcm_board_trunk_local((entry), (create))
    114 
    115 /* Board Programming common functions */
    116 /* Internal stack flags */
    117 #define BCM_BOARD_INT_STK_FLAGS \
    118    (BCM_STK_ENABLE | BCM_STK_DUPLEX | BCM_STK_INTERNAL)
    119 
    120 /* Previous SDK releases used BCM_BOARD_AUTO_TRUNK to enable
    121    auto-trunking, and now it's a runtime flag. For backwards
    122    compatibility, check to see if BCM_BOARD_AUTO_TRUNK flag is
    123    defined, and if it is, change the default auto-trunking state to
    124    TRUE.
    125 */
    126 
    127 /*
    128  * Check if MOD ID of _unit matches dest_mod.  If so, set
    129  * exit_port to _dest_port and return success.
    130  */
    131 #define BCM_BOARD_MOD_CHECK(_unit, _dest_port, _dest_mod, _exit_port) do { \
    132         int local_mod;                                                  \
    133         BCM_IF_ERROR_RETURN(bcm_stk_my_modid_get(_unit, &local_mod));   \
    134         if ((_dest_mod) == local_mod) { /* Local destination */         \
    135             *(_exit_port) = _dest_port;                                 \
    136             return BCM_E_NONE;                                          \
    137         }                                                               \
    138     } while (0)
    139 
    140 
    141 extern int bcm_board_unknown_src_modid_setup(cpudb_entry_t *entry);
    142 extern int bcm_board_module_filter(int unit,
    143                                    topo_cpu_t *tp_cpu,
    144                                    cpudb_ref_t db_ref,
    145                                    bcm_port_config_t *config);
    146 extern int bcm_board_internal_stk_port_add(int unit, int port);
    147 extern int bcm_board_fab_mod_map(int funit, topo_cpu_t *tp_cpu,
    148                                  cpudb_entry_t *l_entry);
    149 extern int bcm_board_xgs_common(int funit, topo_cpu_t *tp_cpu,
    150                                 cpudb_ref_t db_ref, int *unitport);
    151 extern int bcm_board_topomap_stk(int src_unit, int dest_modid,
    152                                  bcm_port_t *exit_port);
    153 extern int bcm_board_untrunkable_stack_ports(int unit, topo_cpu_t *tp_cpu);
    154 
    155 /* Rapid Recovery */
    156 extern int bcm_board_topo_trunk_failover(topo_cpu_t *topo_cpu,
    157                                          int unit, bcm_port_t fail_sp,
    158                                          int fail_sp_idx,
    159                                          bcm_trunk_t tid,
    160                                          bcm_trunk_info_t *trunk,
    161                                          int member_count,
    162                                          bcm_trunk_member_t *member_array);
    163 
    164 extern int bcm_board_num_modid_set(int num);
    165 extern int bcm_board_num_modid_get(int *num);
    166 extern int bcm_board_xgs_local_switch(int funit,
    167                                       topo_cpu_t *tp_cpu,
    168                                       bcm_port_config_t *config,
    169                                       bcm_board_port_connection_t *conn);
    170 extern int bcm_board_xgs_local_fabric(int funit,
    171                                       topo_cpu_t *tp_cpu,
    172                                       bcm_port_config_t *config);
    173      
    174 #if defined(INCLUDE_ATPTRANS_SOCKET) && defined(INCLUDE_CHASSIS)
    175 extern int
    176 bcm_board_chassis_atptrans_socket_transition(bcm_st_state_t from,
    177                                              bcm_st_event_t event,
    178                                              bcm_st_state_t to,
    179                                              cpudb_ref_t disc_db,
    180                                              cpudb_ref_t cur_db);
    181 #endif
    182 
    183 /* Callback registration */
    184 
    185 typedef enum topo_board_control_e {
    186     topoBoardInit,
    187     topoBoardProgram,
    188     topoBoardDeinit,
    189     topoBoardCount
    190 } topo_board_control_t;
    191 
    192 typedef int (*topo_board_callback_t)(topo_board_control_t control,
    193                                      cpudb_ref_t db_ref,
    194                                      topo_cpu_t *topo_cpu,
    195                                      void *user_data);
    196 
    197 extern int topo_board_register(topo_board_callback_t func, void *user_data);
    198 
    199 extern int topo_board_unregister(topo_board_callback_t func, void *user_data);
    200 
    201 extern int topo_board_default_board_program(topo_board_control_t op,
    202                                             cpudb_ref_t db_ref,
    203                                             topo_cpu_t *topo_cpu,
    204                                             void *user_data);
    205 
    206 #endif /* _STKTASK_TOPO_BRD_H_ */