1
0
mirror of https://github.com/physwizz/a155-U-u1.git synced 2025-09-16 03:59:21 +00:00
Files
physwizz 99537be4e2 first
2024-03-11 06:53:12 +11:00

168 lines
3.4 KiB
C

// SPDX-License-Identifier: GPL-2.0
/*
* Copyright (c) 2019 MediaTek Inc.
*/
#define DFT_TAG "[CONN_MD_DMP]"
#include "conn_md_log.h"
#include "conn_md_dbg.h"
#include "conn_md.h"
#include <linux/version.h>
#define USE_NEW_PROC_FS_FLAG 1
#define CONN_MD_DBG_PROCNAME "driver/conn_md_dbg"
static struct proc_dir_entry *gConnMdDbgEntry;
#if USE_NEW_PROC_FS_FLAG
static const struct proc_ops conn_md_dbg_fops = {
.proc_read = conn_md_dbg_read,
.proc_write = conn_md_dbg_write,
};
#endif
static int conn_md_test_dbg(int par1, int par2, int par3);
static int conn_md_dbg_set_log_lvl(int par1, int par2, int par3);
static int conn_md_dbg_dmp_msg_log(int par1, int par2, int par3);
static const conn_md_dev_dbg_func conn_md_dbg_func[] = {
conn_md_test_dbg,
conn_md_dbg_set_log_lvl,
conn_md_dbg_dmp_msg_log,
NULL,
};
int conn_md_dbg_dmp_msg_log(int par1, int par2, int par3)
{
return conn_md_dmp_msg_logged(par2, par3);
}
int conn_md_dbg_set_log_lvl(int par1, int par2, int par3)
{
return conn_md_log_set_lvl(par2);
}
#if USE_NEW_PROC_FS_FLAG
ssize_t conn_md_dbg_read(struct file *filp, char __user *buf,
size_t count, loff_t *f_pos)
{
return 0;
}
#else
static int conn_md_dbg_read(char *page, char **start, off_t off,
int count, int *eof, void *data)
{
int len = 0;
return len;
}
#endif
#if USE_NEW_PROC_FS_FLAG
ssize_t conn_md_dbg_write(struct file *filp, const char __user *buffer,
size_t count, loff_t *f_pos)
#else
static int conn_md_dbg_write(struct file *file, const char *buffer,
unsigned long count, void *data)
#endif
{
char buf[256];
char *pBuf;
unsigned long len = count;
unsigned long x = 0;
long y = 0;
long z = 0;
long i;
char *pToken = NULL;
char *pDelimiter = " \t";
CONN_MD_INFO_FUNC("write parameter len = %d\n\r", (int)len);
if (len >= sizeof(buf)) {
CONN_MD_ERR_FUNC("input handling fail!\n");
len = sizeof(buf) - 1;
return -1;
}
if (copy_from_user(buf, buffer, len))
return -EFAULT;
buf[len] = '\0';
CONN_MD_INFO_FUNC("write parameter data = %s\n\r", buf);
pBuf = buf;
pToken = strsep(&pBuf, pDelimiter);
if (pToken != NULL)
i = kstrtol(pToken, 16, &x);
else
x = 0;
pToken = strsep(&pBuf, "\t\n ");
if (pToken != NULL)
i = kstrtol(pToken, 16, &y);
else
y = 0;
pToken = strsep(&pBuf, "\t\n ");
if (pToken != NULL)
i = kstrtol(pToken, 16, &z);
else
z = 0;
CONN_MD_INFO_FUNC("x(0x%08lx), y(0x%08lx), z(0x%08lx)\n\r", x, y, z);
if (ARRAY_SIZE(conn_md_dbg_func) > x && NULL != conn_md_dbg_func[x])
(*conn_md_dbg_func[x]) (x, y, z);
else
CONN_MD_WARN_FUNC("no handler for command id(0x%08lx)\n\r", x);
return len;
}
int conn_md_test_dbg(int par1, int par2, int par3)
{
return conn_md_test();
}
int conn_md_dbg_init(void)
{
#if USE_NEW_PROC_FS_FLAG
gConnMdDbgEntry = proc_create(CONN_MD_DBG_PROCNAME, 0664,
NULL, &conn_md_dbg_fops);
if (gConnMdDbgEntry == NULL) {
CONN_MD_ERR_FUNC("Unable to create /proc entry\n\r");
return -1;
}
#else
gConnMdDbgEntry = create_proc_entry(CONN_MD_DBG_PROCNAME, 0664, NULL);
if (gConnMdDbgEntry == NULL) {
CONN_MD_ERR_FUNC("Unable to create /proc entry\n\r");
return -1;
}
gConnMdDbgEntry->read_proc = conn_md_dbg_read;
gConnMdDbgEntry->write_proc = conn_md_dbg_write;
#endif
return 0;
}
int conn_md_dbg_deinit(void)
{
#if USE_NEW_PROC_FS_FLAG
if (gConnMdDbgEntry != NULL)
proc_remove(gConnMdDbgEntry);
#else
if (gConnMdDbgEntry != NULL) {
remove_proc_entry(CONN_MD_DBG_PROCNAME, NULL);
return -1;
}
#endif
return 0;
}