boolean writeBackUpCommand(script_process_type MDM_MODEM ) 
{
 
	int mtd_op_result = 0;
//	char temp[10] = "test plz";
	
	if(userDataBackUpInfo.dl_info_cnt<MAX_INFO_COUNT)
		userDataBackUpInfo.dl_info_cnt++;
	else 
		userDataBackUpInfo.dl_info_cnt=1;

	if(MDM_MODEM==MODEM_BACKUP){
	 mtd_op_result = lge_write_srd_block(srd_bytes_pos_in_emmc, (char*)&userDataBackUpInfo, sizeof(user_data_backup_info));
	 //mtd_op_result = lge_write_srd_block(srd_bytes_pos_in_emmc, temp, sizeof(char)*10);
	 printk(KERN_INFO "[SRD] lge_write_block srd_bytes_pos = %d", srd_bytes_pos_in_emmc);
		}
	
        if(mtd_op_result!= sizeof(user_data_backup_info))
//        if(mtd_op_result!= sizeof(char)*10)

        {
        printk(KERN_INFO "[SRD] write misc fail!!");
			return FALSE;
                   
        }

	 write_counter_sector ++;
	 printk(KERN_INFO "[SRD] write misc success write_cnt = %d !!", write_counter_sector);

	return TRUE;
}
//for SRD
int lge_erase_srd_block(int bytes_pos, size_t erase_size)
{
	unsigned char *erasebuf;
	unsigned written = 0;
	erasebuf = kmalloc(erase_size, GFP_KERNEL);
	// allocation exception handling
	if(!erasebuf)
	{
		printk("%s, allocation failed, expected size : %d\n", __func__, erase_size);
		return 0;
	}
	memset(erasebuf, 0xff, erase_size);
	written += lge_write_srd_block(bytes_pos, erasebuf, erase_size);

	kfree(erasebuf);

	return written;
}
boolean writeBackUpNVdata( char * ram_start_address , unsigned int size)
{
int mtd_op_result = 0;
unsigned char *buf = (char *)ram_start_address;	
	
	
	 mtd_op_result = lge_write_srd_block(srd_bytes_pos_in_emmc+(write_counter_sector*512), buf, size);
        if(mtd_op_result!= size)
        {
		return FALSE;
                   
        }

	 write_counter_sector =0;
//todo  ??  srd_bytes_pos_in_emmc=srd_bytes_pos_in_emmc +512   ,  app 에서는 info만 write ,,
	
	return TRUE;
	
}
Exemple #4
0
asmlinkage long sys_LGE_Dload_SRD (void *req_pkt_ptr, void *rsp_pkt_ptr)
{
    udbp_req_type *req_ptr = (udbp_req_type *) req_pkt_ptr;
    udbp_rsp_type *rsp_ptr = (udbp_rsp_type *) rsp_pkt_ptr;
    //uint16 rsp_len = pkg_len;
    int write_size=0 , mtd_op_result=0;


    // DIAG_TEST_MODE_F_rsp_type union type is greater than the actual size, decrease it in case sensitive items
    switch(req_ptr->header.sub_cmd)
    {
        case  SRD_INIT_OPERATION:
printk(KERN_INFO "[SRD] SRD_INIT_OPERATION \n");
            diag_SRD_Init(req_ptr,rsp_ptr);
            break;

        case USERDATA_BACKUP_REQUEST:
printk(KERN_INFO "[SRD] USERDATA_BACKIP_REQUEST \n");
            //remote_rpc_srd_cmmand(req_ptr, rsp_ptr);  //userDataBackUpStart() ���⼭ ... shared ram ���� �ϵ���. .. 
            diag_userDataBackUp_entrySet(req_ptr,rsp_ptr,0);  //write info data ,  after rpc respons include write_sector_counter  

            //todo ..  rsp_prt->header.write_sector_counter,  how about checking  no active nv item  ; 
            // write ram data to emmc misc partition  as many as retruned setor counters 
            load_srd_shard_base=smem_alloc(SMEM_ERR_CRASH_LOG, SIZE_OF_SHARD_RAM);  //384K byte 

            if (load_srd_shard_base ==NULL)
            {
                ((udbp_rsp_type*)rsp_ptr)->header.err_code = UDBU_ERROR_CANNOT_COMPLETE;
				printk(KERN_INFO "[SRD] backup req smem alloc fail!! ");
                break;
                // return rsp_ptr;
            }

            write_size= req_ptr->nv_counter *256; //return nv backup counters  
            printk(KERN_INFO "[SRD] backup req// nv_counter = %d", req_ptr->nv_counter);
            write_size= (req_ptr->header.packet_version/0x10000) *256; //return nv backup counters 
            //write_size = 512;
		printk(KERN_INFO "[SRD] backup req// pkt_version = %d", (int) req_ptr->header.packet_version);

            if( write_size >SIZE_OF_SHARD_RAM)
            {
                ((udbp_rsp_type*)rsp_ptr)->header.err_code = UDBU_ERROR_CANNOT_COMPLETE;  //hue..
                break;
            }

            load_srd_kernel_base=kmalloc((size_t)write_size, GFP_KERNEL);

            memcpy(load_srd_kernel_base,load_srd_shard_base,write_size);
            //srd_bytes_pos_in_emmc+512 means that info data already writed at emmc first sector 
            mtd_op_result = lge_write_srd_block(srd_bytes_pos_in_emmc+512, load_srd_kernel_base, write_size);  //512 info data 

            if(mtd_op_result!= write_size)
            {
                ((udbp_rsp_type*)rsp_ptr)->header.err_code = UDBU_ERROR_CANNOT_COMPLETE;
                kfree(load_srd_kernel_base);
				printk(KERN_INFO "[SRD] backup req// mtd_op != wtite_size");
                break;
            }

            kfree(load_srd_kernel_base);
            #if 0
            if ( !writeBackUpNVdata( load_srd_base , write_size))
            {
                ((udbp_rsp_type*)rsp_ptr)->header.err_code = UDBU_ERROR_CANNOT_COMPLETE;
                return rsp_ptr;
            }
            #endif
            break;

 

        case GET_DOWNLOAD_INFO :
            break;

        case EXTRA_NV_OPERATION :
            #ifdef LG_FW_SRD_EXTRA_NV
            diag_extraNv_entrySet(req_ptr,rsp_ptr);
            #endif
            break;

        case PRL_OPERATION :
            #ifdef LG_FW_SRD_PRL
            diag_PRL_entrySet(req_ptr,rsp_ptr);
            #endif
            break;

        default :
            rsp_ptr =NULL; //(void *) diagpkt_err_rsp (DIAG_BAD_PARM_F, req_ptr, pkt_len);
            break;
    }

    /* Execption*/
    if (rsp_ptr == NULL){
        return FALSE;
    }
	printk(KERN_INFO "[SRD] syscall complete rsp->err_code = %d ", (int)rsp_ptr->header.err_code);

  return TRUE;
}