interrupt_handler.h (3946B)
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 8 #ifndef _DCMN_INTERRUPTS_HANDLER_H_ 9 #define _DCMN_INTERRUPTS_HANDLER_H_ 10 11 #include <sal/core/sync.h> 12 #include <soc/defs.h> 13 #include <soc/types.h> 14 #include <bcm/error.h> 15 16 #ifdef BCM_DFE_SUPPORT 17 #include <soc/dfe/fe1600/fe1600_defs.h> 18 #include <soc/dfe/fe1600/fe1600_interrupts.h> 19 #endif 20 21 typedef int (* handle_interrupt_func)(int unit, int block_instance, uint32 en_interrupt, char *msg); 22 typedef int (* handle_nof_block_instances)(int unit, soc_block_types_t block_types, int *nof_block_instances); 23 typedef void (* handle_interrupt_add_interrupt_handler_init)(int unit); 24 25 typedef struct interrupt_handle_block_data 26 { 27 int *block_instance_data; 28 }interrupt_handle_block_data_t; 29 30 /* 31 * static data structure which holds the info about: 32 * the function suppose to run for each interrupt 33 * info about storm threshold 34 */ 35 struct interrupt_handle_data_base { 36 37 handle_interrupt_func *func_arr;/*interrupt action, always run it*/ 38 39 /* recurring action function/params */ 40 handle_interrupt_func *func_arr_recurring_action;/*interrupt action, run it only in a storm*/ 41 interrupt_handle_block_data_t *recurring_action_counters; 42 interrupt_handle_block_data_t *recurring_action_time; 43 interrupt_handle_block_data_t *recurring_action_cycle_time; /*time in seconds of each cycle, -1 is without recurring_action*/ 44 interrupt_handle_block_data_t *recurring_action_cycle_counting; /*threshold in each cycle, -1 is without recurring_action*/ 45 sal_sem_t interrupts_data_sem; 46 }; 47 48 struct interrupt_common_params { 49 uint32 nof_interrupts; 50 handle_interrupt_add_interrupt_handler_init interrupt_add_interrupt_handler_init; 51 handle_nof_block_instances interrupt_handle_block_instance; 52 uint32* int_disable_on_init; 53 uint32* int_active_on_init; 54 uint32* int_disable_print_on_init; 55 soc_mem_t* cached_mem; 56 }; 57 58 typedef struct interrupt_handle_data_base interrupt_handle_data_base_t; 59 typedef struct interrupt_common_params interrupt_common_params_t; 60 61 /* 62 * Main CallBack Function 63 */ 64 void diag_switch_event_cb(int unit, bcm_switch_event_t event, uint32 arg1, uint32 arg2, uint32 arg3, void *userdata); 65 66 /* 67 * init the data base the first time using it. 68 */ 69 int interrupt_handler_data_base_init(int unit); 70 71 /* 72 * add_interrupt_handler (without storm threshold) 73 * input: 74 * enInter - the interrupt. 75 * interruptHandler - how to handle the interrupt. 76 */ 77 int interrupt_add_interrupt_handler(int unit, int en_inter, int occurrences, int timeCycle, handle_interrupt_func inter_action, handle_interrupt_func inter_recurring_action); 78 int interrupt_config_interrupt_handler(int unit, int en_inter, int occurrences, int timeCycle, handle_interrupt_func inter_action, handle_interrupt_func inter_recurring_action); 79 int handle_interrupt_recurring_detect(int unit, int block_instance, uint32 en_interrupt); 80 int interrupt_handler_appl_init(int unit); 81 int interrupt_handler_appl_deinit(int unit); 82 int interrupt_handler_appl_nocache_deinit(int unit); 83 int interrupt_handler_appl_db_init(int unit); 84 85 86 /* 87 * Set cache for memories corruption interrupts use 88 */ 89 int interrupt_handler_appl_ref_cache_defaults_set(int unit); 90 91 /* Interrupt User CB */ 92 void interrupt_user_soc_intr(void *_unit); 93 94 void interrupt_appl_cb(int unit, bcm_switch_event_t event, uint32 arg1, uint32 arg2, uint32 arg3, void *userdata); 95 96 /* 97 * cache support 98 */ 99 int interrupt_attach_cache(int unit, soc_mem_t mem, int block_instance); 100 int interrupt_detach_cache(int unit, soc_mem_t mem, int block_instance); 101 int interrupt_memory_cached(int unit, soc_reg_t mem, int block_instance, int* cached_flag); 102 int interrupt_memory_could_be_cached(int unit, soc_mem_t cached_mem, int* cache_enable); 103 104 105 106 #endif /*__DFE_INTERRUPTS_HANDLER_H_ */