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

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