bslenable.c (3699B)
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-2019 Broadcom Inc. All rights reserved. 6 * 7 * Broadcom System Log Enables 8 */ 9 10 #include <shared/bslnames.h> 11 #include <appl/diag/bslenable.h> 12 #include <sal/core/thread.h> 13 14 /* Table for tracking which layers/sources/severities to enable */ 15 static bsl_severity_t bslenable_severity[bslLayerCount][bslSourceCount]; 16 17 /* Which sources are valid in which layers (fixed) */ 18 BSL_SOURCES_VALID_DEF(bsl_source_t); 19 static bsl_source_t *sources_valid[] = BSL_SOURCES_VALID_INIT; 20 21 /* List of threads for which a specific debug level is enabled.*/ 22 typedef struct { 23 int thread[MAX_BSLENABLE_THREAD_COUNT]; 24 } bslenable_thread_t; 25 26 /* Table of tracking which layers/sources/thread-list to enable */ 27 static bslenable_thread_t bslenable_thread[bslLayerCount][bslSourceCount]; 28 29 void 30 bslenable_thread_set(bsl_layer_t layer, bsl_source_t source, int tidx, 31 int thread) 32 { 33 bslenable_thread_t *thread_list; 34 35 if (layer < 0 || layer >= bslLayerCount) { 36 return; 37 } 38 if (tidx < 0 || tidx >= MAX_BSLENABLE_THREAD_COUNT) { 39 return; 40 } 41 thread_list = &bslenable_thread[layer][source]; 42 43 thread_list->thread[tidx] = thread; 44 } 45 46 int 47 bslenable_thread_get(bsl_layer_t layer, bsl_source_t source, int tidx) 48 { 49 bslenable_thread_t *thread_list; 50 51 thread_list = &bslenable_thread[layer][source]; 52 if (layer < bslLayerCount && source < bslSourceCount && 53 tidx < MAX_BSLENABLE_THREAD_COUNT) { 54 return thread_list->thread[tidx]; 55 } 56 57 return 0; 58 } 59 60 void 61 bslenable_thread_reset(bsl_layer_t layer, bsl_source_t source, int tidx) 62 { 63 bslenable_thread_set(layer, source, tidx, 0); 64 } 65 66 void 67 bslenable_thread_reset_all(void) 68 { 69 int layer, source, tidx; 70 71 for (layer = 0; layer < bslLayerCount; layer++) { 72 for (source = 0; source < bslSourceCount; source++) { 73 for (tidx = 0; tidx < MAX_BSLENABLE_THREAD_COUNT; tidx ++) { 74 bslenable_thread_reset(layer, source, tidx); 75 } 76 } 77 } 78 } 79 80 int 81 bslenable_source_valid(bsl_layer_t layer, bsl_source_t source) 82 { 83 bsl_source_t *src; 84 int idx; 85 86 if (layer < 0 || layer >= bslLayerCount) { 87 return 0; 88 } 89 if (source < 0 || source >= bslSourceCount) { 90 return 0; 91 } 92 src = sources_valid[layer]; 93 for (idx = 0; src[idx] != bslSourceCount && idx < bslSourceCount; idx++) { 94 if (source == src[idx]) { 95 return 1; 96 } 97 } 98 return 0; 99 } 100 101 void 102 bslenable_set(bsl_layer_t layer, bsl_source_t source, bsl_severity_t severity) 103 { 104 if (layer < 0 || layer >= bslLayerCount) { 105 return; 106 } 107 bslenable_severity[layer][source] = severity; 108 } 109 110 bsl_severity_t 111 bslenable_get(bsl_layer_t layer, bsl_source_t source) 112 { 113 if (layer < bslLayerCount && source < bslSourceCount) { 114 return bslenable_severity[layer][source]; 115 } 116 117 return 0; 118 } 119 120 void 121 bslenable_reset(bsl_layer_t layer, bsl_source_t source) 122 { 123 bsl_severity_t severity = bslSeverityWarn; 124 125 if (source == bslSourceShell || 126 source == bslSourceEcho || 127 (layer == bslLayerTks && source == bslSourceCommon)) { 128 severity = bslSeverityInfo; 129 } 130 131 bslenable_set(layer, source, severity); 132 } 133 134 void 135 bslenable_reset_all(void) 136 { 137 int layer, source; 138 139 for (layer = 0; layer < bslLayerCount; layer++) { 140 for (source = 0; source < bslSourceCount; source++) { 141 bslenable_reset(layer, source); 142 } 143 } 144 } 145 146 int 147 bslenable_init(void) 148 { 149 bslenable_reset_all(); 150 bslenable_thread_reset_all(); 151 return 0; 152 }