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-2020 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_ */