conn_md_dbg.c 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157
  1. #define DFT_TAG "[CONN_MD_DMP]"
  2. #include "conn_md_log.h"
  3. #include "conn_md_dbg.h"
  4. #include "conn_md.h"
  5. #include <linux/version.h>
  6. #define USE_NEW_PROC_FS_FLAG 1
  7. #define CONN_MD_DBG_PROCNAME "driver/conn_md_dbg"
  8. static struct proc_dir_entry *gConnMdDbgEntry;
  9. #if USE_NEW_PROC_FS_FLAG
  10. static const struct file_operations conn_md_dbg_fops = {
  11. .read = conn_md_dbg_read,
  12. .write = conn_md_dbg_write,
  13. };
  14. #endif
  15. static int conn_md_test_dbg(int par1, int par2, int par3);
  16. static int conn_md_dbg_set_log_lvl(int par1, int par2, int par3);
  17. static int conn_md_dbg_dmp_msg_log(int par1, int par2, int par3);
  18. static const CONN_MD_DEV_DBG_FUNC conn_md_dbg_func[] = {
  19. conn_md_test_dbg,
  20. conn_md_dbg_set_log_lvl,
  21. conn_md_dbg_dmp_msg_log,
  22. NULL,
  23. };
  24. int conn_md_dbg_dmp_msg_log(int par1, int par2, int par3)
  25. {
  26. return conn_md_dmp_msg_logged(par2, par3);
  27. }
  28. int conn_md_dbg_set_log_lvl(int par1, int par2, int par3)
  29. {
  30. return conn_md_log_set_lvl(par2);
  31. }
  32. #if USE_NEW_PROC_FS_FLAG
  33. ssize_t conn_md_dbg_read(struct file *filp, char __user *buf, size_t count, loff_t *f_pos)
  34. {
  35. return 0;
  36. }
  37. #else
  38. static int conn_md_dbg_read(char *page, char **start, off_t off, int count, int *eof, void *data)
  39. {
  40. int len = 0;
  41. return len;
  42. }
  43. #endif
  44. #if USE_NEW_PROC_FS_FLAG
  45. ssize_t conn_md_dbg_write(struct file *filp, const char __user *buffer, size_t count, loff_t *f_pos)
  46. #else
  47. static int conn_md_dbg_write(struct file *file, const char *buffer, unsigned long count, void *data)
  48. #endif
  49. {
  50. char buf[256];
  51. char *pBuf;
  52. unsigned long len = count;
  53. long x = 0;
  54. long y = 0;
  55. long z = 0;
  56. long i;
  57. char *pToken = NULL;
  58. char *pDelimiter = " \t";
  59. CONN_MD_INFO_FUNC("write parameter len = %d\n\r", (int)len);
  60. if (len >= sizeof(buf)) {
  61. CONN_MD_ERR_FUNC("input handling fail!\n");
  62. len = sizeof(buf) - 1;
  63. return -1;
  64. }
  65. if (copy_from_user(buf, buffer, len))
  66. return -EFAULT;
  67. buf[len] = '\0';
  68. CONN_MD_INFO_FUNC("write parameter data = %s\n\r", buf);
  69. pBuf = buf;
  70. pToken = strsep(&pBuf, pDelimiter);
  71. if (NULL != pToken)
  72. i = kstrtol(pToken, 16, &x);
  73. else
  74. x = 0;
  75. pToken = strsep(&pBuf, "\t\n ");
  76. if (NULL != pToken)
  77. i = kstrtol(pToken, 16, &y);
  78. else
  79. y = 0;
  80. pToken = strsep(&pBuf, "\t\n ");
  81. if (NULL != pToken)
  82. i = kstrtol(pToken, 16, &z);
  83. else
  84. z = 0;
  85. CONN_MD_INFO_FUNC("x(0x%08x), y(0x%08x), z(0x%08x)\n\r", x, y, z);
  86. if (ARRAY_SIZE(conn_md_dbg_func) > x && NULL != conn_md_dbg_func[x])
  87. (*conn_md_dbg_func[x]) (x, y, z);
  88. else
  89. CONN_MD_WARN_FUNC("no handler defined for command id(0x%08x)\n\r", x);
  90. return len;
  91. }
  92. int conn_md_test_dbg(int par1, int par2, int par3)
  93. {
  94. return conn_md_test();
  95. }
  96. int conn_md_dbg_init(void)
  97. {
  98. #if USE_NEW_PROC_FS_FLAG
  99. gConnMdDbgEntry = proc_create(CONN_MD_DBG_PROCNAME, 0664, NULL, &conn_md_dbg_fops);
  100. if (gConnMdDbgEntry == NULL) {
  101. CONN_MD_ERR_FUNC("Unable to create /proc entry\n\r");
  102. return -1;
  103. }
  104. #else
  105. gConnMdDbgEntry = create_proc_entry(CONN_MD_DBG_PROCNAME, 0664, NULL);
  106. if (gConnMdDbgEntry == NULL) {
  107. CONN_MD_ERR_FUNC("Unable to create /proc entry\n\r");
  108. return -1;
  109. }
  110. gConnMdDbgEntry->read_proc = conn_md_dbg_read;
  111. gConnMdDbgEntry->write_proc = conn_md_dbg_write;
  112. #endif
  113. return 0;
  114. }
  115. int conn_md_dbg_deinit(void)
  116. {
  117. #if USE_NEW_PROC_FS_FLAG
  118. if (NULL != gConnMdDbgEntry)
  119. proc_remove(gConnMdDbgEntry);
  120. #else
  121. if (gConnMdDbgEntry != NULL) {
  122. remove_proc_entry(CONN_MD_DBG_PROCNAME, NULL);
  123. return -1;
  124. }
  125. #endif
  126. return 0;
  127. }