[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;
+}
+