/lge/factory/lge_diag_eri.c

https://bitbucket.org/thenameisnigel/android_kernel_lge_ls840 · C · 245 lines · 175 code · 37 blank · 33 comment · 12 complexity · 70fcbc2485e2e4181ee10a4f49b8f698 MD5 · raw file

  1. /* arch/arm/mach-msm/lge/lg_fw_diag_eri.c
  2. *
  3. * Copyright (C) 2009,2010 LGE, Inc.
  4. *
  5. * This software is licensed under the terms of the GNU General Public
  6. * License version 2, as published by the Free Software Foundation, and
  7. * may be copied, distributed, and modified under those terms.
  8. *
  9. * This program is distributed in the hope that it will be useful,
  10. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  11. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  12. * GNU General Public License for more details.
  13. *
  14. */
  15. #include <linux/module.h>
  16. #include <linux/fcntl.h>
  17. #include <linux/fs.h>
  18. #include <lg_diagcmd.h>
  19. #include <linux/uaccess.h>
  20. #include <lge_diag_eri.h>
  21. #include <linux/syscalls.h>
  22. #include <linux/fcntl.h>
  23. #include <linux/fs.h>
  24. #include <linux/uaccess.h>
  25. #include <linux/module.h>
  26. #include <linux/input.h>
  27. #include <linux/syscalls.h>
  28. #include <linux/delay.h>
  29. #define ERI_FILE_PATH "/data/eri/eri.bin"
  30. //#define DEBUG_ERI
  31. /*
  32. * EXTERNAL FUNCTION AND VARIABLE DEFINITIONS
  33. */
  34. extern PACK(void *) diagpkt_alloc(diagpkt_cmd_code_type code,unsigned int length);
  35. extern PACK(void *) diagpkt_free(PACK(void *)pkt);
  36. extern int eri_send_to_arm9(void* pReq, void* pRsp, unsigned int output_length);
  37. //extern int eri_send_to_arm9(void* pReq, void* pRsp, unsigned int output_length);
  38. /* LGE_CHANGE_ [jaekyung83.lee@lge.com] 2011-04-06. ERI UTS AP Write Test [START]*/
  39. static int write_eri(const char *path, eri_write_req_type* write_req_ptr, eri_write_rsp_type* write_rsp_ptr)
  40. {
  41. int write;
  42. int err;
  43. mm_segment_t oldfs;
  44. #ifdef DEBUG_ERI
  45. printk(KERN_INFO "%s, UTS ERI Write Test START\n",__func__);
  46. #endif
  47. oldfs = get_fs();
  48. set_fs(KERNEL_DS);
  49. #ifdef DEBUG_ERI
  50. printk(KERN_ERR "%s, PATH : %s\n",__func__, path);
  51. #endif
  52. write = sys_open((const char __user *) path, O_WRONLY | O_CREAT | O_TRUNC , 0);
  53. if(write < 0) {
  54. printk(KERN_ERR "%s, ERI File Open Fail\n",__func__);
  55. return -1;
  56. }else {
  57. printk(KERN_ERR "%s, ERI File Open Success\n",__func__);
  58. }
  59. err = sys_write(write, write_req_ptr->eri_data.user_eri_data, write_req_ptr->eri_data.eri_size);
  60. if(err < 0){
  61. #ifdef DEBUG_ERI
  62. printk(KERN_INFO "%s, ERI File Write Fail\n",__func__);
  63. #endif
  64. write_rsp_ptr->cmd_code = write_req_ptr->cmd_code;
  65. write_rsp_ptr->sub_cmd_code = write_req_ptr->sub_cmd_code;
  66. write_rsp_ptr->status = 1;
  67. }
  68. else {
  69. #ifdef DEBUG_ERI
  70. printk(KERN_INFO "%s, UTS ERI WRITE Test Make Rsp PACK\n",__func__);
  71. #endif
  72. write_rsp_ptr->cmd_code = write_req_ptr->cmd_code;
  73. write_rsp_ptr->sub_cmd_code = write_req_ptr->sub_cmd_code;
  74. write_rsp_ptr->status = 0;
  75. }
  76. sys_close(write);
  77. set_fs(oldfs);
  78. return 1;
  79. }
  80. /* LGE_CHANGE_ [jaekyung83.lee@lge.com] 2011-04-06. ERI UTS AP Write Test [END]*/
  81. /* LGE_CHANGE_ [jaekyung83.lee@lge.com] 2011-04-06. ERI UTS AP Read Test [START]*/
  82. byte eri_buf[1400];
  83. static int read_eri(const char *path, eri_read_req_type* read_req_ptr, eri_read_rsp_type* read_rsp_ptr)
  84. {
  85. int read;
  86. // size_t count;
  87. int read_size;
  88. // int ret;
  89. mm_segment_t oldfs;
  90. #ifdef DEBUG_ERI
  91. printk(KERN_ERR "%s, UTS ERI READ Test START\n",__func__);
  92. #endif
  93. oldfs = get_fs();
  94. set_fs(KERNEL_DS);
  95. memset(eri_buf,0,sizeof(byte) * 1400);
  96. read = sys_open((const char __user *)path, O_RDONLY , 0);
  97. if(read < 0) {
  98. #ifdef DEBUG_ERI
  99. printk(KERN_ERR "%s, ERI File Open Fail\n",__func__);
  100. #endif
  101. return -1;
  102. }else {
  103. #ifdef DEBUG_ERI
  104. printk(KERN_ERR "%s, ERI File Open Success\n",__func__);
  105. #endif
  106. }
  107. read_size = 0;
  108. while(sys_read(read, &eri_buf[read_size++], 1) == 1){}
  109. memcpy(read_rsp_ptr->eri_data.user_eri_data, eri_buf, read_size);
  110. if(read_size <= 0){
  111. #ifdef DEBUG_ERI
  112. printk(KERN_ERR "%s, ERI File Read Fail\n",__func__);
  113. #endif
  114. read_rsp_ptr->cmd_code = read_req_ptr->cmd_code;
  115. read_rsp_ptr->sub_cmd_code = read_req_ptr->sub_cmd_code;
  116. read_rsp_ptr->eri_data.eri_size = 0;
  117. read_rsp_ptr->status = 1;
  118. } else {
  119. #ifdef DEBUG_ERI
  120. printk(KERN_ERR "%s, UTS ERI READ Test Make Rsp PACK\n",__func__);
  121. #endif
  122. read_rsp_ptr->cmd_code = read_req_ptr->cmd_code;
  123. read_rsp_ptr->sub_cmd_code = read_req_ptr->sub_cmd_code;
  124. read_rsp_ptr->eri_data.eri_size = read_size - 1;
  125. read_rsp_ptr->status = 0;
  126. }
  127. set_fs(oldfs);
  128. sys_close(read);
  129. return read_size;
  130. }
  131. /* LGE_CHANGE_ [jaekyung83.lee@lge.com] 2011-04-06. ERI UTS AP Read Test [END]*/
  132. /* LGE_CHANGE_ [jaekyung83.lee@lge.com] 2011-04-06. ERI UTS Test [START]*/
  133. PACK (void *)LGE_ERI (
  134. PACK (void *)req_pkt_ptr, /* pointer to request packet */
  135. uint16 pkt_len ) /* length of request packet */
  136. {
  137. eri_req_type* req_ptr = (eri_req_type *)req_pkt_ptr;
  138. eri_read_rsp_type* read_rsp_ptr = NULL;
  139. eri_write_rsp_type* write_rsp_ptr = NULL;
  140. eri_read_req_type* read_req_ptr = NULL;
  141. eri_write_req_type* write_req_ptr = NULL;
  142. unsigned int rsp_ptr_len;
  143. int err;
  144. switch(req_ptr->sub_cmd_code)
  145. {
  146. case ERI_READ_SUB_CMD_CODE:
  147. rsp_ptr_len = sizeof(eri_read_rsp_type);
  148. read_req_ptr = (eri_read_req_type *)req_pkt_ptr;
  149. read_rsp_ptr = (eri_read_rsp_type*) diagpkt_alloc (DIAG_ERI_CMD_F, sizeof(eri_read_rsp_type));
  150. err = read_eri(ERI_FILE_PATH, read_req_ptr ,read_rsp_ptr);
  151. if(err < 0){
  152. read_rsp_ptr->eri_data.eri_size = 0;
  153. read_rsp_ptr->status = 1;
  154. memset(read_rsp_ptr->eri_data.user_eri_data, 0, sizeof(read_rsp_ptr->eri_data.user_eri_data));
  155. }
  156. return(read_rsp_ptr);
  157. break;
  158. case ERI_WRITE_SUB_CMD_CODE:
  159. rsp_ptr_len = sizeof(eri_write_rsp_type);
  160. write_req_ptr = (eri_write_req_type *)req_pkt_ptr;
  161. write_rsp_ptr = (eri_write_rsp_type*) diagpkt_alloc (DIAG_ERI_CMD_F, sizeof(eri_write_rsp_type));
  162. //for writting EFS
  163. /* LGE_CHANGE_ [jaekyung83.lee@lge.com] 2011-04-06. ERI UTS Write Test EFS /eri/eri.bin [START]*/
  164. eri_send_to_arm9((void *)write_req_ptr, (void *)write_rsp_ptr, rsp_ptr_len);
  165. /* LGE_CHANGE_ [jaekyung83.lee@lge.com] 2011-04-06. ERI UTS Write Test EFS /eri/eri.bin [END]*/
  166. //AP /data/eri/eri.bin write
  167. err = write_eri(ERI_FILE_PATH, write_req_ptr, write_rsp_ptr);
  168. if(err < 0) {
  169. write_rsp_ptr->cmd_code = write_req_ptr->cmd_code;
  170. write_rsp_ptr->sub_cmd_code = write_req_ptr->sub_cmd_code;
  171. write_rsp_ptr->status = 1;
  172. }else {
  173. write_rsp_ptr->cmd_code = write_req_ptr->cmd_code;
  174. write_rsp_ptr->sub_cmd_code = write_req_ptr->sub_cmd_code;
  175. write_rsp_ptr->status = 0;
  176. }
  177. return (write_rsp_ptr);
  178. break;
  179. }
  180. return NULL;
  181. }
  182. //restore eri.bin after factory reset command
  183. #ifndef AID_RADIO
  184. #define AID_RADIO 1001 /* telephony subsystem, RIL */
  185. #endif
  186. int eri_factory_direct_write(const char *path , char *eri_data, int size )
  187. {
  188. int fd;
  189. int err;
  190. mm_segment_t oldfs;
  191. oldfs = get_fs();
  192. set_fs(KERNEL_DS);
  193. fd = sys_open((const char __user *) path, O_WRONLY | O_CREAT | O_TRUNC , 0);
  194. if(fd < 0) {
  195. printk(KERN_ERR "%s, ERI File Open Fail\n",__func__);
  196. return -1;
  197. }else {
  198. printk(KERN_ERR "%s, ERI File Open Success\n",__func__);
  199. }
  200. err = sys_write(fd, eri_data, size);
  201. sys_close(fd);
  202. set_fs(oldfs);
  203. //change owner and mode so that any apks are able to access
  204. sys_chown(path, AID_RADIO, AID_RADIO);
  205. sys_chmod(path, S_IRWXUGO);
  206. return 1;
  207. }
  208. /* LGE_CHANGE_ [jaekyung83.lee@lge.com] 2011-04-06. ERI UTS Test [END]*/