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

cprimod.c (2838B)


      1 /*
      2  *         
      3  * 
      4  * 
      5  * This license is set out in https://raw.githubusercontent.com/Broadcom-Network-Switching-Software/OpenBCM/master/Legal/LICENSE file.
      6  * 
      7  * Copyright 2007-2019 Broadcom Inc. All rights reserved.
      8  */
      9 
     10 #include <shared/bsl.h>
     11 #include <soc/error.h>
     12 #include <soc/esw/port.h>
     13 
     14 #include <soc/types.h>
     15 #include <soc/error.h>
     16 #include <soc/cprimod/cprimod.h>
     17 #include <soc/cprimod/cprimod_dispatch.h>
     18 
     19 
     20         
     21 #ifdef _ERR_MSG_MODULE_NAME 
     22 #error "_ERR_MSG_MODULE_NAME redefined" 
     23 #endif
     24 #define _ERR_MSG_MODULE_NAME BSL_LS_SOC_PORT
     25 
     26 cprimod_interrupt_callback_entry_t cpri_intr_cbs[SOC_MAX_NUM_DEVICES][_shrCpriIntrCount]  = {{{NULL,NULL}}};
     27 
     28 
     29 int cprimod_port_cpm_type_get(int unit, int port,  cprimod_dispatch_type_t* type){
     30 
     31     SOC_INIT_FUNC_DEFS;
     32 #ifdef CPRIMOD_CPRI_FALCON_SUPPORT
     33     *type = cprimodDispatchTypeCprif; 
     34 #else
     35     *type = cprimodDispatchTypeCount;
     36 #endif
     37     SOC_FUNC_RETURN;
     38 }
     39 
     40 int cprimod_test_api_non_dispatch(int unit, int port, int* value)
     41 {        
     42     SOC_INIT_FUNC_DEFS;
     43     
     44     if(value == NULL) {
     45         _SOC_EXIT_WITH_ERR(SOC_E_PARAM, ("value NULL parameter"));
     46     }
     47     LOG_CLI((" cpri_test_api_non_dispatch call u=%d port=%d .\n",unit,port));
     48         
     49 exit:
     50     SOC_FUNC_RETURN; 
     51     
     52 }
     53 
     54 int cprimod_cpri_cpm_interrupt_data_init(int unit)
     55 {
     56     int interrupt;
     57     SOC_INIT_FUNC_DEFS;
     58 
     59     for (interrupt = 0; interrupt < _shrCpriIntrCount; interrupt++){
     60        _SOC_IF_ERR_EXIT
     61             (cprimod_interrupt_callback_entry_t_init(&cpri_intr_cbs[unit][interrupt]));
     62     }
     63 exit:
     64     SOC_FUNC_RETURN;
     65 }
     66 
     67 int cprimod_cpri_port_interrupt_callback_register(int unit, cprimod_cpri_port_intr_type_t cpri_intr_type, cprimod_cpri_port_interrupt_callback_t callback, void* cb_data)
     68 {
     69     SOC_INIT_FUNC_DEFS;
     70 
     71     if (cpri_intr_type >= _shrCpriIntrCount) {
     72         _SOC_EXIT_WITH_ERR(SOC_E_PARAM, ("Unknow interrupt type."));
     73     }
     74 
     75     if (cpri_intr_cbs[unit][cpri_intr_type].cb_func == NULL) {
     76         cpri_intr_cbs[unit][cpri_intr_type].cb_func = callback;
     77         cpri_intr_cbs[unit][cpri_intr_type].cb_data = cb_data;
     78     } else {
     79         _SOC_EXIT_WITH_ERR(SOC_E_PARAM, ("Callback already registered"));
     80     }
     81 
     82 exit:
     83     SOC_FUNC_RETURN;
     84 
     85 }
     86 
     87 
     88 int cprimod_cpri_port_interrupt_callback_unregister(int unit, cprimod_cpri_port_intr_type_t cpri_intr_type, cprimod_cpri_port_interrupt_callback_t callback)
     89 {
     90     SOC_INIT_FUNC_DEFS;
     91 
     92     if (cpri_intr_type >= _shrCpriIntrCount) {
     93         _SOC_EXIT_WITH_ERR(SOC_E_PARAM, ("Unknow interrupt type."));
     94     }
     95 
     96     if (cpri_intr_cbs[unit][cpri_intr_type].cb_func != NULL) {
     97         cpri_intr_cbs[unit][cpri_intr_type].cb_func = NULL;
     98         cpri_intr_cbs[unit][cpri_intr_type].cb_data = NULL;
     99     } else {
    100         _SOC_EXIT_WITH_ERR(SOC_E_PARAM, ("Callback not registered"));
    101     }
    102 
    103 exit:
    104     SOC_FUNC_RETURN;
    105 
    106 }
    107 
    108 
    109 
    110 #undef _ERR_MSG_MODULE_NAME