[Feature]add MT2731_MP2_MR2_SVN388 baseline version
Change-Id: Ief04314834b31e27effab435d3ca8ba33b499059
diff --git a/src/lynq/lib/liblynq-log/log-riltel/lynq_nand.c b/src/lynq/lib/liblynq-log/log-riltel/lynq_nand.c
new file mode 100644
index 0000000..1ab4e01
--- /dev/null
+++ b/src/lynq/lib/liblynq-log/log-riltel/lynq_nand.c
@@ -0,0 +1,240 @@
+#include <stdlib.h>
+#include <stdio.h>
+#include <stdint.h>
+#include <fcntl.h>
+#include <pthread.h>
+
+#include "mtk_device_wrap.h"
+#include "lynq_nand.h"
+
+#if 1
+#define NAND_LOG_PATCH "/dev/mtd19"
+#else
+#define NAND_LOG_PATCH "/dev/mtd19/lynq_log.txt"
+#endif
+
+#define NAND_PRIMITIVE_OFFSET 2*1024
+#define NAND_TOTAL_SIZE 20*1024*1024
+#define NAND_CURRENT_LEN 2*1024
+#define NAND_OLD_CURRENT_LEN 0
+
+static int lynq_nand_offset_global = 0;
+static pthread_mutex_t nand_mutex = PTHREAD_MUTEX_INITIALIZER;
+char nand_count = 0;
+
+void lynq_store_nand_offset_data(char *store_nand_offset_data);
+int lynq_read_nand_offset_data(char *read_nand_offset_data);
+
+
+int lynq_nand_store_log_message(char *log_message,size_t log_message_len)
+{
+ pthread_mutex_lock(&nand_mutex);
+ int fd;
+ int err = 0;
+ char nand_current_buf[NAND_CURRENT_LEN] = {0};
+ unsigned int nand_page = 0;
+ int nand_offset_count = 0;
+ char nand_offset_buf[8] = {0};
+ char read_nand_buf[8] = {0};
+
+ if(log_message_len == 0)
+ {
+ return -1;
+ }
+
+ fd=mtk_device_wrap_open(NAND_LOG_PATCH,O_RDWR);
+ if(fd < 0)
+ {
+ perror("open nand log message error1!!!!");
+ return fd;
+ }
+
+ if(lynq_read_nand_offset_data(nand_offset_buf) == 0)
+ {
+ nand_offset_count = atoi(nand_offset_buf);
+ lynq_nand_offset_global = nand_offset_count;
+ }
+
+ ((log_message_len % 2048) == 0 ) ? (nand_page = log_message_len / 2048) : (nand_page = (log_message_len / 2048)+1);
+//printf("nand_page:%d\n",nand_page);
+ while(1)
+ {
+ err = mtk_device_wrap_seek(fd, lynq_nand_offset_global, SEEK_SET);
+ if(err == -1)
+ {
+ perror("seek nand log message error8!!!!");
+ return err;
+ }
+ mtk_device_wrap_read(fd, read_nand_buf, 8);
+ if(((read_nand_buf[0] == 0xff) && (read_nand_buf[1] == 0xff) && (read_nand_buf[2] == 0xff) &&(read_nand_buf[3] == 0xff)) ||\
+ ((lynq_nand_offset_global % (128 *1024) ) == 0))
+ {
+ for(int i = 0; i < nand_page; i++)
+ {
+ memset(nand_current_buf,0,NAND_CURRENT_LEN);
+ err = mtk_device_wrap_seek(fd, lynq_nand_offset_global, SEEK_SET);
+ if(err == -1)
+ {
+ perror("seek nand log message error8!!!!");
+ return err;
+ }
+ if((i+1) == nand_page)
+ {
+ memcpy(nand_current_buf,&log_message[i*NAND_CURRENT_LEN],(log_message_len-(i*2048)));
+// printf("(i+1) == nand_page---%d\n",(log_message_len-(i*2048)));
+ }
+ else
+ {
+ memcpy(nand_current_buf,&log_message[i*NAND_CURRENT_LEN],NAND_CURRENT_LEN);
+ printf("(i+1) != nand_page\n");
+ }
+
+ err = mtk_device_wrap_write(fd, nand_current_buf, NAND_CURRENT_LEN);
+ if(err == -1)
+ {
+ perror("write nand log message error9!!!!");
+ return err;
+ }
+ lynq_nand_offset_global += NAND_CURRENT_LEN;
+ if(lynq_nand_offset_global > NAND_TOTAL_SIZE)
+ {
+ lynq_nand_offset_global = 0;
+ }
+ }
+ break;
+ }
+//printf("lynq_nand_offset_global:%d---nand_offset_count:%d\n",lynq_nand_offset_global,nand_offset_count);
+ lynq_nand_offset_global += NAND_CURRENT_LEN;
+ if(lynq_nand_offset_global > NAND_TOTAL_SIZE)
+ {
+ lynq_nand_offset_global = 0;
+ }
+ }
+
+ if(nand_count >= 64)
+ {
+ nand_count = 0;
+ sprintf(nand_offset_buf,"%d",lynq_nand_offset_global);
+ lynq_store_nand_offset_data(nand_offset_buf);
+ }
+
+ err = mtk_device_wrap_close(fd);
+
+ pthread_mutex_unlock(&nand_mutex);
+ return 0;
+}
+
+
+int lynq_nand_get_log_message(char *log_message,size_t log_message_len,off_t offset)
+{
+ int fd;
+ int err = 0;
+
+ pthread_mutex_lock(&nand_mutex);
+
+ unsigned int lynq_nand_offset_part = 0;
+
+ fd=mtk_device_wrap_open(NAND_LOG_PATCH,O_RDONLY);
+ if(fd < 0)
+ {
+ perror("open nand log message error!!!!");
+ return fd;
+ }
+
+ lynq_nand_offset_part = NAND_PRIMITIVE_OFFSET + offset;
+//printf("lynq_nand_offset_part 13:%d\n",lynq_nand_offset_part);
+ err = mtk_device_wrap_seek(fd, lynq_nand_offset_part, SEEK_SET);
+//printf("lynq_nand_offset_part 14:%d----nand seek 4:%d\n",lynq_nand_offset_part,err);
+ if(err == -1)
+ {
+ perror("seek nand log message error 15!!!!");
+ return err;
+ }
+
+ mtk_device_wrap_read(fd, log_message, log_message_len);
+
+ err = mtk_device_wrap_close(fd);
+
+ pthread_mutex_unlock(&nand_mutex);
+ return err;
+}
+
+
+int lynq_nand_read_data_test(void)
+{
+ int fd;
+ FILE *file_fd = NULL;
+ int err;
+ char log_data_buf[6*1024] = {0};
+ char log_nand_buf[2048] = {0x11,0x22,0x33,0x44,0x55,0x66,0x77,0x88,0x99};
+ static unsigned int nand_offset_test = 0;
+ char *filePath = "/usr/local/lnand_log.txt";
+
+ system("touch /usr//local/lnand_log.txt");
+ system("chmod 777 /usr//local/lnand_log.txt");
+
+ fd=mtk_device_wrap_open(NAND_LOG_PATCH,O_RDWR);
+
+ if(fd < 0)
+ {
+ perror("open nand log message error!!!!");
+ return fd;
+ }
+
+ file_fd = fopen(filePath,"rt+");
+ if(NULL == file_fd)
+ {
+ perror("file_fd");
+ return -1;
+ }
+
+ for(int i = 0 ;i < 100; i++)
+ {
+ memset(log_data_buf,0,6*1024);
+ err = mtk_device_wrap_seek(fd, nand_offset_test, SEEK_SET);
+
+
+ if(err == -1)
+ {
+ perror("seek nand log message error!!!!");
+ return err;
+ }
+
+ fseek(file_fd,nand_offset_test,SEEK_SET);
+
+ mtk_device_wrap_read(fd, log_data_buf, 6*1024);
+ nand_offset_test += (6*1024);
+
+ fwrite(&log_data_buf,sizeof(log_data_buf), 1, file_fd);
+
+ }
+
+ fclose(file_fd);
+ mtk_device_wrap_close(fd);
+
+}
+
+
+
+void lynq_store_nand_offset_data(char *store_nand_offset_data)
+{
+ char *log_level_writefile = "persist.store_nand_data";
+ property_set(log_level_writefile,(char *)store_nand_offset_data);
+ return ;
+}
+
+int lynq_read_nand_offset_data(char *read_nand_offset_data)
+{
+ char *log_level_readfile = "persist.store_nand_data";
+
+ if(property_get(log_level_readfile,(char *)read_nand_offset_data,NULL) > 0)
+ {
+// printf("read log level deploy success!!!\n");
+ return 0;
+ }
+ else
+ {
+// printf("get file error!!!\n");
+ return -1;
+ }
+}
\ No newline at end of file