/***************************************************************************** * Copyright(c) 2020-2030 Seekwave Corporation. * SEEKWAVE TECH LTD..CO *Seekwave Platform the sdio log debug fs *FILENAME:skw_sdio_debugfs.c *DATE:2022-04-11 *MODIFY: * **************************************************************************/ #include "skw_sdio_debugfs.h" #include "skw_sdio_log.h" #include "skw_sdio.h" static struct proc_dir_entry *skw_sdio_proc_root = NULL; static int skw_sdio_proc_show(struct seq_file *seq, void *v) { #define SKW_BSP_CONFIG_INT(conf) \ do { \ seq_printf(seq, "%s=%d\n", #conf, conf); \ } while (0) #define SKW_BSP_CONFIG_BOOL(conf) \ do { \ if (IS_ENABLED(conf)) \ seq_printf(seq, "%s=y\n", #conf); \ else \ seq_printf(seq, "# %s is not set\n", #conf); \ } while (0) #define SKW_BSP_CONFIG_STRING(conf) \ do { \ seq_printf(seq, "%s=\"%s\"\n", #conf, conf); \ } while (0) seq_puts(seq, "\n"); seq_printf(seq, "Kernel Version: \t%s\n", UTS_RELEASE); seq_puts(seq, "\n"); SKW_BSP_CONFIG_BOOL(CONFIG_SEEKWAVE_BSP_DRIVERS); SKW_BSP_CONFIG_BOOL(CONFIG_SKW_SDIOHAL); SKW_BSP_CONFIG_BOOL(CONFIG_SEEKWAVE_PLD_RELEASE); seq_puts(seq, "\n"); return 0; } static int skw_sdio_proc_open(struct inode *inode, struct file *file) { return single_open(file, skw_sdio_proc_show, NULL); } #if LINUX_VERSION_CODE >= KERNEL_VERSION(5, 6, 0) static const struct proc_ops skw_sdio_profile_proc_fops = { .proc_open = skw_sdio_proc_open, .proc_read = seq_read, .proc_release = single_release, }; #else static const struct file_operations skw_sdio_profile_proc_fops = { .owner = THIS_MODULE, .open = skw_sdio_proc_open, .read = seq_read, .release = single_release, }; #endif struct proc_dir_entry *skw_sdio_procfs_file(struct proc_dir_entry *parent, const char *name, umode_t mode, const void *fops, void *data) { struct proc_dir_entry *dentry = parent ? parent : skw_sdio_proc_root; if (!dentry) return NULL; return proc_create_data(name, mode, dentry, fops, data); } int skw_sdio_proc_init_ex(const char *name, umode_t mode, const void *fops, void *data) { if (!skw_sdio_proc_root) return -1; skw_sdio_procfs_file(skw_sdio_proc_root, name, mode, fops, NULL); return 0; } int skw_sdio_proc_init(void) { skw_sdio_proc_root = proc_mkdir("skwsdio", NULL); if (!skw_sdio_proc_root){ pr_err("creat proc skwsdio failed\n"); return -ENOMEM; } skw_sdio_procfs_file(skw_sdio_proc_root,"profile", 0666, &skw_sdio_profile_proc_fops, NULL); return 0; } void skw_sdio_proc_deinit(void) { if (!skw_sdio_proc_root) return; proc_remove(skw_sdio_proc_root); } int skw_sdio_debugfs_init(void) { skw_sdio_dbg("%s :traced\n", __func__); skw_sdio_proc_init(); skw_sdio_create_debug_files(); return 0; } void skw_sdio_debugfs_deinit(void) { skw_sdio_dbg("%s :traced\n", __func__); skw_sdio_proc_deinit(); }