18c2ecf20Sopenharmony_ci// SPDX-License-Identifier: GPL-2.0 28c2ecf20Sopenharmony_ci/* 38c2ecf20Sopenharmony_ci * Copyright IBM Corp. 2001, 2007 48c2ecf20Sopenharmony_ci * Authors: Peter Tiedemann (ptiedem@de.ibm.com) 58c2ecf20Sopenharmony_ci * 68c2ecf20Sopenharmony_ci */ 78c2ecf20Sopenharmony_ci 88c2ecf20Sopenharmony_ci#include <linux/stddef.h> 98c2ecf20Sopenharmony_ci#include <linux/string.h> 108c2ecf20Sopenharmony_ci#include <linux/kernel.h> 118c2ecf20Sopenharmony_ci#include <linux/errno.h> 128c2ecf20Sopenharmony_ci#include <linux/ctype.h> 138c2ecf20Sopenharmony_ci#include <linux/sysctl.h> 148c2ecf20Sopenharmony_ci#include <linux/module.h> 158c2ecf20Sopenharmony_ci#include <linux/init.h> 168c2ecf20Sopenharmony_ci#include <linux/fs.h> 178c2ecf20Sopenharmony_ci#include <linux/debugfs.h> 188c2ecf20Sopenharmony_ci#include "ctcm_dbug.h" 198c2ecf20Sopenharmony_ci 208c2ecf20Sopenharmony_ci/* 218c2ecf20Sopenharmony_ci * Debug Facility Stuff 228c2ecf20Sopenharmony_ci */ 238c2ecf20Sopenharmony_ci 248c2ecf20Sopenharmony_cistruct ctcm_dbf_info ctcm_dbf[CTCM_DBF_INFOS] = { 258c2ecf20Sopenharmony_ci [CTCM_DBF_SETUP] = {"ctc_setup", 8, 1, 64, CTC_DBF_INFO, NULL}, 268c2ecf20Sopenharmony_ci [CTCM_DBF_ERROR] = {"ctc_error", 8, 1, 64, CTC_DBF_ERROR, NULL}, 278c2ecf20Sopenharmony_ci [CTCM_DBF_TRACE] = {"ctc_trace", 8, 1, 64, CTC_DBF_ERROR, NULL}, 288c2ecf20Sopenharmony_ci [CTCM_DBF_MPC_SETUP] = {"mpc_setup", 8, 1, 80, CTC_DBF_INFO, NULL}, 298c2ecf20Sopenharmony_ci [CTCM_DBF_MPC_ERROR] = {"mpc_error", 8, 1, 80, CTC_DBF_ERROR, NULL}, 308c2ecf20Sopenharmony_ci [CTCM_DBF_MPC_TRACE] = {"mpc_trace", 8, 1, 80, CTC_DBF_ERROR, NULL}, 318c2ecf20Sopenharmony_ci}; 328c2ecf20Sopenharmony_ci 338c2ecf20Sopenharmony_civoid ctcm_unregister_dbf_views(void) 348c2ecf20Sopenharmony_ci{ 358c2ecf20Sopenharmony_ci int x; 368c2ecf20Sopenharmony_ci for (x = 0; x < CTCM_DBF_INFOS; x++) { 378c2ecf20Sopenharmony_ci debug_unregister(ctcm_dbf[x].id); 388c2ecf20Sopenharmony_ci ctcm_dbf[x].id = NULL; 398c2ecf20Sopenharmony_ci } 408c2ecf20Sopenharmony_ci} 418c2ecf20Sopenharmony_ci 428c2ecf20Sopenharmony_ciint ctcm_register_dbf_views(void) 438c2ecf20Sopenharmony_ci{ 448c2ecf20Sopenharmony_ci int x; 458c2ecf20Sopenharmony_ci for (x = 0; x < CTCM_DBF_INFOS; x++) { 468c2ecf20Sopenharmony_ci /* register the areas */ 478c2ecf20Sopenharmony_ci ctcm_dbf[x].id = debug_register(ctcm_dbf[x].name, 488c2ecf20Sopenharmony_ci ctcm_dbf[x].pages, 498c2ecf20Sopenharmony_ci ctcm_dbf[x].areas, 508c2ecf20Sopenharmony_ci ctcm_dbf[x].len); 518c2ecf20Sopenharmony_ci if (ctcm_dbf[x].id == NULL) { 528c2ecf20Sopenharmony_ci ctcm_unregister_dbf_views(); 538c2ecf20Sopenharmony_ci return -ENOMEM; 548c2ecf20Sopenharmony_ci } 558c2ecf20Sopenharmony_ci 568c2ecf20Sopenharmony_ci /* register a view */ 578c2ecf20Sopenharmony_ci debug_register_view(ctcm_dbf[x].id, &debug_hex_ascii_view); 588c2ecf20Sopenharmony_ci /* set a passing level */ 598c2ecf20Sopenharmony_ci debug_set_level(ctcm_dbf[x].id, ctcm_dbf[x].level); 608c2ecf20Sopenharmony_ci } 618c2ecf20Sopenharmony_ci 628c2ecf20Sopenharmony_ci return 0; 638c2ecf20Sopenharmony_ci} 648c2ecf20Sopenharmony_ci 658c2ecf20Sopenharmony_civoid ctcm_dbf_longtext(enum ctcm_dbf_names dbf_nix, int level, char *fmt, ...) 668c2ecf20Sopenharmony_ci{ 678c2ecf20Sopenharmony_ci char dbf_txt_buf[64]; 688c2ecf20Sopenharmony_ci va_list args; 698c2ecf20Sopenharmony_ci 708c2ecf20Sopenharmony_ci if (!debug_level_enabled(ctcm_dbf[dbf_nix].id, level)) 718c2ecf20Sopenharmony_ci return; 728c2ecf20Sopenharmony_ci va_start(args, fmt); 738c2ecf20Sopenharmony_ci vsnprintf(dbf_txt_buf, sizeof(dbf_txt_buf), fmt, args); 748c2ecf20Sopenharmony_ci va_end(args); 758c2ecf20Sopenharmony_ci 768c2ecf20Sopenharmony_ci debug_text_event(ctcm_dbf[dbf_nix].id, level, dbf_txt_buf); 778c2ecf20Sopenharmony_ci} 788c2ecf20Sopenharmony_ci 79