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