[T106][ZXW-22]7520V3SCV2.01.01.02P42U09_VEC_V0.8_AP_VEC origin source commit

Change-Id: Ic6e05d89ecd62fc34f82b23dcf306c93764aec4b
diff --git a/boot/common/src/uboot/downloader/downloader_serial.c b/boot/common/src/uboot/downloader/downloader_serial.c
new file mode 100755
index 0000000..2d05568
--- /dev/null
+++ b/boot/common/src/uboot/downloader/downloader_serial.c
@@ -0,0 +1,215 @@
+/*******************************************************************************
+ * Copyright (C) 2016, ZIXC Corporation.
+ *
+ * File Name:
+ * File Mark:
+ * Description:
+ * Others:
+ * Version:       1.0
+ * Author:        geanfeng
+ * Date:          2013-3-4
+ * History 1:
+ *     Date:
+ *     Version:
+ *     Author:
+ *     Modification:
+ * History 2:
+  ********************************************************************************/
+
+/****************************************************************************
+* 	                                           Include files
+****************************************************************************/
+#include <linux/types.h>
+#include <usb/common.h>
+#include <command.h>
+#include <common.h>
+#include <net.h>
+#include <usb/usb_config.h>
+/****************************************************************************
+* 	                                           Local Macros
+****************************************************************************/
+/****************************************************************************
+*							Local Types
+****************************************************************************/
+
+/****************************************************************************
+*							Global Variables
+****************************************************************************/
+int  dl_serial_initial = 0;
+/****************************************************************************
+*							Global Function Prototypes
+****************************************************************************/
+extern int tsp_usb_init(void);
+extern WORD32 usb_read(WORD32 dwLen, BYTE *pchBuf);
+
+
+extern WORD32 usb_write(WORD32 dwLen, BYTE *pchBuf);
+
+extern int UART_Read(char *pchBuf, int dwLen);
+extern int UART_Write(char *pchBuf, int dwLen);
+/****************************************************************************
+*							Function Definitions
+****************************************************************************/
+
+/*******************************************************************************
+ * Function:downloader_serial_init
+ * Description:
+ * Parameters:
+ *	 Input:
+ *
+ *	 Output:
+ *
+ * Returns:
+ *
+ *
+ * Others:
+ ********************************************************************************/
+void downloader_serial_init(void)
+{
+#if CONFIG_USB_DL
+     usb_boot(SYS_USB_BASE); 	/*usb*/
+#endif
+	 dl_serial_initial =1;	
+}
+/*******************************************************************************
+ * Function:downloader_serial_read
+ * Description:
+ * Parameters:
+ *	 Input:
+ *
+ *	 Output:
+ *
+ * Returns:
+ *
+ *
+ * Others:
+ ********************************************************************************/
+ unsigned int g_testLen = 0;
+unsigned int g_testAddr = 0;
+unsigned int g_testFlag1 = 0;
+int downloader_serial_read(char * buffer,unsigned int len)
+{
+	int ret = 0;
+
+	if(!dl_serial_initial)
+		return 0;
+ 	g_testAddr = (unsigned int)&len;
+#if CONFIG_USB_DL
+	ret = usb_read(len,buffer);
+#else
+	ret = UART_Read(buffer,len);
+#endif
+    g_testLen = len;
+    g_testFlag1 = 1;
+ 	if(!ret)
+		{
+			return 0; /*error return 0*/
+		}
+	else
+		{
+            
+			return ret;/*actual length*/
+		}
+}
+/*******************************************************************************
+ * Function:downloader_serial_read_actuallen
+ * Description:
+ * Parameters:
+ *	 Input:
+ *
+ *	 Output:
+ *
+ * Returns:
+ *
+ *
+ * Others:
+ ********************************************************************************/
+int downloader_serial_read_actuallen(char * buffer,unsigned int len)
+{
+	char* pBuffer = buffer;
+	uint  readLength = 0;
+	uint  length = 0;
+	//printf("start to rececive len = %d \n",len);
+#if CONFIG_USB_DL
+	while(readLength < len)
+		{
+			length = downloader_serial_read(pBuffer,512);
+            //printf(" receiving len = %d \n",length);
+			if(length)
+				{
+					readLength += length;
+                    //printf(" readLength = %d \n",readLength);
+					pBuffer += length;
+				}
+			else
+				{
+					continue;
+				}
+		}
+    //printf("finish receiving len = %d \n",len);
+#else
+
+    length = downloader_serial_read(pBuffer,len);
+#endif
+	return 0;
+}
+
+/*******************************************************************************
+ * Function:downloader_serial_write
+ * Description:
+ * Parameters:
+ *	 Input:
+ *
+ *	 Output:
+ *
+ * Returns:
+ *
+ *
+ * Others:
+ ********************************************************************************/
+int downloader_serial_write(const char * buffer,unsigned int len)
+{
+	if(!dl_serial_initial)
+		return 0;
+	
+#if CONFIG_USB_DL
+	return usb_write(len,(char *)buffer);
+#else
+	return UART_Write((char *)buffer,len);
+#endif
+}
+/*******************************************************************************
+ * Function:downloader_serial_write_actuallen
+ * Description:
+ * Parameters:
+ *	 Input:
+ *
+ *	 Output:
+ *
+ * Returns:
+ *
+ *
+ * Others:
+ ********************************************************************************/
+int downloader_serial_write_actuallen(const char * buffer,unsigned int len)
+{
+	const char* pBuffer = buffer;
+	uint  writeLength = 0;
+	uint  length = 0;
+    
+	/*need modify*/
+	while(writeLength < len)
+		{
+            
+            length = MIN(len-writeLength,136192);
+            //printf("prepare to write len=%d\n",length);
+			downloader_serial_write(pBuffer,length);
+            //printf("this time usb write len=%d\n",length);
+			writeLength += length;
+			//printf("usb have writen len=%d\n",writeLength);
+			
+			pBuffer += length;
+		}
+	return 0;
+}
+