HSL: update drivers/usb/gadget/f_mass_storage.c
authorkfx <kfx@rock-chips.com>
Tue, 23 Aug 2011 08:45:55 +0000 (16:45 +0800)
committerkfx <kfx@rock-chips.com>
Tue, 23 Aug 2011 08:45:55 +0000 (16:45 +0800)
drivers/usb/gadget/f_mass_storage.c

index bf793724cd5f2971844195fbb12b83eb899313e5..71798209bc834bac27d1a34219fe4bdcb39fdcf9 100644 (file)
@@ -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