From: kfx <kfx@rock-chips.com>
Date: Tue, 23 Aug 2011 08:45:55 +0000 (+0800)
Subject: HSL: update drivers/usb/gadget/f_mass_storage.c
X-Git-Tag: firefly_0821_release~9770^2~1
X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=1f0b27221f62ac27f15fc8dafde94f39bd4f277b;p=firefly-linux-kernel-4.4.55.git

HSL: update drivers/usb/gadget/f_mass_storage.c
---

diff --git a/drivers/usb/gadget/f_mass_storage.c b/drivers/usb/gadget/f_mass_storage.c
index bf793724cd5f..71798209bc83 100644
--- a/drivers/usb/gadget/f_mass_storage.c
+++ b/drivers/usb/gadget/f_mass_storage.c
@@ -84,7 +84,7 @@
 #define BULK_BUFFER_SIZE           16384 * 4//4096
 
 /* flush after every 4 meg of writes to avoid excessive block level caching */
-#define MAX_UNFLUSHED_BYTES (4 * 1024 * 1024)
+#define MAX_UNFLUSHED_BYTES  (512 * 1024)// (4 * 1024 * 1024) //original value is 4MB,Modifyed by xbw at 2011-08-18
 
 /*-------------------------------------------------------------------------*/
 
@@ -1862,32 +1862,27 @@ typedef struct tagLoaderParam
 #define PARM_TAG			0x4D524150
 #define MSC_EXT_DBG			1
 extern int  GetParamterInfo(char * pbuf , int len);
-static int do_get_product_name(int ret ,char *buf)
+
+/* the buf is bh->buf,it is large enough. */
+static char * get_param_tag( char* buf , const char* tag )
 {
-	char 		tmp[32];
 	PARM_INFO	*pi;
-	char		*pp,*spp;
-	char		*tag = "MACHINE_MODEL:";
 	int 		i;
-	#if MSC_EXT_DBG
-	char 		tbuf[1024];
-	if( buf == NULL ) buf = tbuf;
-	#endif
-	i = GetParamterInfo( buf , 1024 );
-	pi = (PARM_INFO*)buf;
+	char		*pp = buf+256;
+	char		*spp;
+	i = GetParamterInfo( pp , 1024 );
+	pi = (PARM_INFO*)pp;
 	if( pi->tag != PARM_TAG ){
 error_out:	
 		printk("paramter error,tag=0x%x\n" , pi->tag );
-		memset( buf , 0 , ret );
-		strcpy( buf , "UNKNOW" );
-		return ret;
+		return NULL;
 	}
 	if( pi->length+sizeof(PARM_INFO) > i ) {
-		GetParamterInfo( buf , pi->length+sizeof(PARM_INFO)  + 511 );
+		GetParamterInfo( pp , pi->length+sizeof(PARM_INFO)  + 511 );
 	}
 	pp = strstr( pi->parameter , tag );
 	if( !pp ) goto error_out;
-	pp+= strlen(tag); // sizeof "MACHINE_MODEL:"
+	pp += strlen(tag); // sizeof "MACHINE_MODEL:"
 	while( *pp == ' ' || *pp == '\t' ) {
 		if(pp - pi->parameter >= pi->length)
 		  break;	
@@ -1900,12 +1895,26 @@ error_out:
 		pp++;
 	}
 	*pp = 0;
-	i = pp - spp;
-	if( i >= ret ) i = ret -1;
-	memcpy( tmp , spp , i );
+	if( spp == pp ) return NULL;
+	return spp;
+}
+
+static int do_get_product_name(int ret ,char *buf)
+{
+	char		*tag = "MACHINE_MODEL:";
+	char		*pname;
+	#if MSC_EXT_DBG
+	char 		tbuf[1300];
+	if( buf == NULL )   buf = tbuf;
+	#endif
 	memset( buf , 0 , ret );
-	memcpy( buf , tmp , i );
+	pname = get_param_tag( buf , tag );
+	if( pname ){
+		strcpy( buf , pname);
+	} 
+	#if MSC_EXT_DBG
 	printk("%s%s\n" , tag , buf );
+	#endif
 	return ret;
 }
 
@@ -1915,38 +1924,42 @@ static int do_get_versions( int ret ,char* buf )
 	* bootver=2010-07-08#4.02 firmware_ver=1.0.0 // Firmware Ver:16.01.0000
 	* return format: 0x02 0x04 0x00 0x00 0x00 0x01 
 	* RK29: bootver=2011-07-18#2.05 firmware_ver=0.2.3 (==00.02.0003)
+	* for the old loader,the firmware_ver may be empty,so get the fw ver from paramter.
 	*/
 #define ASC_BCD0( c )  (((c-'0'))&0xf)
 #define ASC_BCD1( c )  (((c-'0')<<4)&0xf0)
 
 	char *ver = buf;
 	char *p_l , *p_f;
+	char		*l_tag = "bootver=";
+	char		*fw_tag = "FIRMWARE_VER:";
 	
 	#if MSC_EXT_DBG
-	char 		tbuf[1024];
-	if( ver == NULL ) ver = tbuf;
+	char 		tbuf[1300];
+	if( ver == NULL )   ver = tbuf;
 	#endif
+	
 	memset( ver , 0x00 , ret );
-	p_l = strstr( saved_command_line , "bootver=" );
+	p_l = strstr( saved_command_line , l_tag );
 	if( !p_l ) {
-	        return 0;
-	} 
-	p_f = strstr( p_l , "firmware_ver=" );
-	if( !p_f ) {
-	        return 0;
+	        return ret;
 	} 
-	if( !(p_l = strnchr( p_l, p_f - p_l , '#'))  )
-	        return 0;
-	p_l++;
-	p_f+=strlen("firmware_ver=");
-	if( p_l[1] == '.' ) {
-	        ver[1] = ASC_BCD0(p_l[0]);
-	        p_l+=2;
-	} else {
-	        ver[1] = ASC_BCD1(p_l[0])|ASC_BCD0(p_l[1]);
-	        p_l+=3;
+	p_l+=strlen( l_tag );
+	if( (p_l = strchr( p_l,'#')) ) {
+		p_l++;
+		if( p_l[1] == '.' ) {
+		        ver[1] = ASC_BCD0(p_l[0]);
+		        p_l+=2;
+		} else {
+		        ver[1] = ASC_BCD1(p_l[0])|ASC_BCD0(p_l[1]);
+		        p_l+=3;
+		}
+		ver[0] = ASC_BCD1(p_l[0])|ASC_BCD0(p_l[1]);
 	}
-	ver[0] = ASC_BCD1(p_l[0])|ASC_BCD0(p_l[1]);
+	
+	p_f = get_param_tag( ver , fw_tag );
+	if( !p_f ) return ret;
+	
 	if( p_f[1] == '.' ) {
 	        ver[5] = ASC_BCD0(p_f[0]);
 	        p_f+=2;
@@ -1974,8 +1987,6 @@ static int do_get_versions( int ret ,char* buf )
 	printk("VERSION:%02x %02x %02x %02x %02x %02x\n" , 
 		ver[0],ver[1],ver[2],ver[3],ver[4],ver[5]);
 	#endif
-
-
 	return ret;
 }
 #endif