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