int read_lcd_k_cal( char *buf) { int err=0; int mtd_op_result = 0; // int i; const MmcPartition *pMisc_part; unsigned long lcdkcal_bytes_pos_in_emmc = 0; printk(KERN_INFO"read read_lcd_k_cal\n"); lge_mmc_scan_partitions(); pMisc_part = lge_mmc_find_partition_by_name("misc"); if ( pMisc_part == NULL ) { printk(KERN_INFO"NO MISC\n"); return 0; } lcdkcal_bytes_pos_in_emmc = (pMisc_part->dfirstsec*512)+K_CAL_DATA_OFFSET_IN_BYTES; memset(lcd_buf, 0 ,LCD_K_CAL_SIZE); mtd_op_result = lge_read_block(lcdkcal_bytes_pos_in_emmc, &lcd_buf[0], LCD_K_CAL_SIZE); if (mtd_op_result != LCD_K_CAL_SIZE ) { printk(KERN_INFO" read %ld block fail\n", lcdkcal_bytes_pos_in_emmc); return err; } printk(KERN_INFO"read %ld block\n", lcdkcal_bytes_pos_in_emmc); memcpy(&buf[0],&lcd_buf[0],LCD_K_CAL_SIZE); return LCD_K_CAL_SIZE; }
//[START]kcal for 325 static int write_lcd_k_cal(const char *val, struct kernel_param *kp) { int i = 0; int err = 0; // int mtd_op_result = 0; int mmc_scan_partion_result = 0; const MmcPartition *pMisc_part; unsigned long lcdkcal_bytes_pos_in_emmc = 0; static unsigned char lcd_buf2[6]; memcpy(lcd_buf,val,LCD_K_CAL_SIZE); #if 1 for(i=0;i<LCD_K_CAL_SIZE;i++) { printk("write_lcd_k_cal :%x:\n",lcd_buf[i]); } #endif mmc_scan_partion_result = lge_mmc_scan_partitions(); if (mmc_scan_partion_result < 0) { printk(KERN_INFO"mmc_scan_fail\n"); return 0; } pMisc_part = lge_mmc_find_partition_by_name("misc"); if ( pMisc_part == NULL ) { printk(KERN_INFO"NO MISC\n"); return 0; } lcdkcal_bytes_pos_in_emmc = (pMisc_part->dfirstsec*512)+PTN_LCD_K_CAL_PARTITION; printk("write_lcd_k_cal %ld block\n", lcdkcal_bytes_pos_in_emmc); mtd_op_result = lge_write_block(lcdkcal_bytes_pos_in_emmc, lcd_buf, LCD_K_CAL_SIZE); if ( mtd_op_result != LCD_K_CAL_SIZE ) { printk("%s: write %u block fail\n", __func__, i); return err; } mtd_op_result = lge_read_block(lcdkcal_bytes_pos_in_emmc, &lcd_buf2[0], LCD_K_CAL_SIZE); if ( mtd_op_result != LCD_K_CAL_SIZE ) { printk("%s: write %u block fail\n", __func__, i); return err; } #if 1 for(i=0;i<LCD_K_CAL_SIZE;i++) { printk("read_lcd_k_cal :%x:\n",lcd_buf2[i]); } #endif printk("write %d block\n", i); return 0; }
static int test_read_block(char *buf, struct kernel_param *kp) { //int i; int err; int mtd_op_result = 0; const MmcPartition *pMisc_part; unsigned long factoryreset_bytes_pos_in_emmc = 0; printk(KERN_INFO"read block1\n"); lge_mmc_scan_partitions(); // lge_mmc_partition_initialied = 4; pMisc_part = lge_mmc_find_partition_by_name("misc"); if ( pMisc_part == NULL ) { printk(KERN_INFO"NO MISC\n"); return 0; } // lge_mmc_partition_initialied = 5; factoryreset_bytes_pos_in_emmc = (pMisc_part->dfirstsec*512)+PTN_FRST_PERSIST_POSITION_IN_MISC_PARTITION; printk(KERN_INFO"read block\n"); // lge_mmc_partition_initialied = 6; memset(global_buf, 0 , FACTORY_RESET_STR_SIZE+2); mtd_op_result = lge_read_block(factoryreset_bytes_pos_in_emmc, global_buf, FACTORY_RESET_STR_SIZE+2); // lge_mmc_partition_initialied = 7; if (mtd_op_result != (FACTORY_RESET_STR_SIZE+2) ) { printk(KERN_INFO" read %ld block fail\n", factoryreset_bytes_pos_in_emmc); return err; } // lge_mmc_partition_initialied = 8; printk(KERN_INFO"read %ld block\n", factoryreset_bytes_pos_in_emmc); // printk(KERN_INFO"%s\n", __func__, global_buf); // BEGIN: 0009484 [email protected] 2010-09-24 // MOD 0009484: [FactoryReset] Enable FactoryReset if(memcmp(global_buf, FACTORY_RESET_STR, FACTORY_RESET_STR_SIZE)==0){ err = sprintf(buf,"%s",global_buf+FACTORY_RESET_STR_SIZE); // err = sprintf(buf,"123456789"); return err; } else{ //#if 0 // LS696_me : Return 1 if no Factory reset string error: err = sprintf(buf,"1"); return err; //#endif } // END: 0009484 [email protected] 2010-09-24 }
boolean diag_Flag_Data_Init(void) { int mtd_op_result = 0; /* ==========> eMMC data read ============ */ mtd_op_result = lge_read_block(web_status_bytes_pos_in_emmc + select_sector, si_page_buffer, BACKUP_BYTE_MAX_SIZE); if( mtd_op_result != BACKUP_BYTE_MAX_SIZE ) { printk("%s, emmc Read error, normal return value size = 2048 : %d\n", __func__, mtd_op_result); return FALSE; } return true; }
static int test_read_block( char *buf, struct kernel_param *kp) { int err=0; int mtd_op_result = 0; const MmcPartition *pMisc_part; unsigned long factoryreset_bytes_pos_in_emmc = 0; printk(KERN_INFO"read block1\n"); lge_mmc_scan_partitions(); pMisc_part = lge_mmc_find_partition_by_name("misc"); if ( pMisc_part == NULL ) { printk(KERN_INFO"NO MISC\n"); return 0; } factoryreset_bytes_pos_in_emmc = (pMisc_part->dfirstsec*512)+PTN_FRST_PERSIST_POSITION_IN_MISC_PARTITION; printk(KERN_INFO"read block\n"); memset(global_buf, 0 , FACTORY_RESET_STR_SIZE+2); mtd_op_result = lge_read_block(factoryreset_bytes_pos_in_emmc, global_buf, FACTORY_RESET_STR_SIZE+2); if (mtd_op_result != (FACTORY_RESET_STR_SIZE+2) ) { printk(KERN_INFO" read %ld block fail\n", factoryreset_bytes_pos_in_emmc); return err; } printk(KERN_INFO"read %ld block\n", factoryreset_bytes_pos_in_emmc); // // MOD 0009484: [FactoryReset] Enable FactoryReset if(memcmp(global_buf, FACTORY_RESET_STR, FACTORY_RESET_STR_SIZE)==0){ err = sprintf(buf,"%s",global_buf+FACTORY_RESET_STR_SIZE); return err; } else{ err = sprintf(buf,"1"); return err; } // }
// END: 0009484 [email protected] 2010-09-24 static int test_read_block(const char *val, struct kernel_param *kp) { int i; int err; int normal_block_seq = 0; printk(KERN_INFO"%s: read block\n", __func__); for (i = 0; i < ebcnt; ++i) { if (bbt[i]) continue; if (i == target_block) break; normal_block_seq++; } err = lge_read_block(normal_block_seq, global_buf); if (err) { printk(KERN_INFO"%s: read %u block fail\n", __func__, i); return err; } printk(KERN_INFO"%s: read %u block\n", __func__, i); printk(KERN_INFO"%s: %s\n", __func__, global_buf); // BEGIN: 0009484 [email protected] 2010-09-24 // MOD 0009484: [FactoryReset] Enable FactoryReset #if 1 if(memcmp(global_buf, FACTORY_RESET_STR, FACTORY_RESET_STR_SIZE)==0){ status = global_buf[FACTORY_RESET_STR_SIZE]; err = sprintf(buf,"%s",global_buf+FACTORY_RESET_STR_SIZE); return err; } else{ error: err = sprintf(buf,"%s",temp); return err; } #else return 0; #endif // END: 0009484 [email protected] 2010-09-24 }
static int test_read_block(char *buf, struct kernel_param *kp) { int i; int err; unsigned char status=0; char* temp = "1"; printk(KERN_INFO"%s: read block\n", __func__); test_init(); for (i = 0; i < ebcnt; i++) { if (bbt[i]) continue; else break; } err = lge_read_block(i, global_buf); if (err) { printk(KERN_INFO"%s: read %u block fail\n", __func__, i); goto error; } printk(KERN_INFO"%s: read %u block\n", __func__, i); printk(KERN_INFO"%s: %s\n", __func__, global_buf); if(memcmp(global_buf, FACTORY_RESET_STR, FACTORY_RESET_STR_SIZE)==0){ status = global_buf[FACTORY_RESET_STR_SIZE]; err = sprintf(buf,"%s",global_buf+FACTORY_RESET_STR_SIZE); return err; } else{ error: err = sprintf(buf,"%s",temp); return err; } }
void remote_did_rpc(void) { struct oem_rapi_client_streaming_func_arg arg; struct oem_rapi_client_streaming_func_ret ret; int rc= -1; //int file_size=0; char fs_err_buf[20]; //test_mode_emmc_direct_type did_info; const MmcPartition *pMisc_part; unsigned int did_bytes_pos_in_emmc ; int mtd_op_result ; printk(KERN_ERR "%s, start OEM_RAPI\n",__func__); //memset(&did_info,0x0,sizeof(test_mode_emmc_direct_type)); //memset(fs_err_buf, 0, sizeof(fs_err_buf)); Open_check(); arg.event = LG_FW_DID_BACKUP_REQUEST; arg.cb_func = NULL; arg.handle = (void*) 0; arg.in_len = sizeof(fs_err_buf); arg.input =fs_err_buf; arg.out_len_valid = 1; arg.output_valid = 1; arg.output_size = sizeof(pbuf_emmc); ret.output = NULL; ret.out_len = NULL; rc = oem_rapi_client_streaming_function(client,&arg,&ret); if(ret.output == NULL || ret.out_len == NULL){ printk(KERN_ERR "%s, output is NULL\n",__func__); return; } printk(KERN_ERR "%s, output lenght =%dis\n",__func__,*ret.out_len); //memcpy(&did_info, ret.output, *ret.out_len); memcpy((void *)&pbuf_emmc2[0], ret.output, 192); //form modem length =192 //===================== emmc wirte routine ======================= printk(KERN_ERR "%s, lge_mmc_scan_partitions\n",__func__); rc = lge_mmc_scan_partitions(); if (rc < 0) { printk(KERN_ERR "%s couldn't scan the partition\n", __func__); return ; } pMisc_part = lge_mmc_find_partition_by_name("misc"); printk(KERN_ERR "%s, lge_mmc_find_partition_by_name\n",__func__); if (pMisc_part ==NULL) { if (ret.output) kfree(ret.output); if (ret.out_len) kfree(ret.out_len); return ; } did_bytes_pos_in_emmc = (pMisc_part->dfirstsec)*512+0x300000; //3M memset((void *)pbuf_emmc, 0, sizeof(pbuf_emmc)); mtd_op_result = lge_read_block(did_bytes_pos_in_emmc, pbuf_emmc, 192); //printk(KERN_ERR "%s,lge_read_block\n",__func__); //if(memcmp((void *)pbuf_emmc,(void *)ret.output, sizeof(pbuf_emmc)) != 0) if(memcmp((void *)pbuf_emmc,(void *)pbuf_emmc2, sizeof(pbuf_emmc)) != 0) { //printk(KERN_ERR "%s,lge_write_block0\n",__func__); lge_write_block(did_bytes_pos_in_emmc, pbuf_emmc2, 192); // printk(KERN_ERR "%s,lge_write_block1\n",__func__); } //============================================================= /* */ /* MOD 0014591: [LG_RAPI] rpc request heap leakage bug fix */ // free received buffers if it is not empty if (ret.output) kfree(ret.output); if (ret.out_len) kfree(ret.out_len); /* */ return; }
int lge_retry_write_block(int ebnum, unsigned char *buf, size_t size) { int retry_cnt = 0; int err = 0; unsigned char preadback_buf[2048]; err = lge_write_block(ebnum, buf, size); if(err != 0) { printk(KERN_ERR "%s: lge_write_block() failed, error num = %d \n", __func__, err); for(retry_cnt=0; retry_cnt<5; retry_cnt++) { err = lge_retry_erase_block(ebnum); if(err!=0) { printk(KERN_ERR "%s: lge_retry_erase_block() failed, error num = %d \n", __func__, err); } else { err = lge_write_block(ebnum, buf, size); if(err!=0) { printk(KERN_ERR "%s: lge_write_block() failed, error num = %d, retry count = %d \n", __func__, err, retry_cnt); continue; } else { memset((void*)preadback_buf, 0, sizeof(preadback_buf)); err = lge_read_block(ebnum, preadback_buf); if(err!=0) { printk(KERN_ERR "%s: lge_read_block() failed, error num = %d, retry count = %d \n", __func__, err, retry_cnt); continue; } else { if(memcmp(preadback_buf, FACTORY_RESET_STR, FACTORY_RESET_STR_SIZE) == 0) // tag read sucess { printk(KERN_ERR "%s: lge_read_block() succeeded read back, error num = %d, retry count = %d \n", __func__, err, retry_cnt); break; } else { printk(KERN_ERR "%s: lge_read_block() failed read back, error num = %d, retry count = %d \n", __func__, err, retry_cnt); continue; } } } } } } else { printk(KERN_ERR "%s: lge_write_block() succeeded, error num = %d \n", __func__, err); memset((void*)preadback_buf, 0, sizeof(preadback_buf)); err = lge_read_block(ebnum, preadback_buf); if(err!=0) { printk(KERN_ERR "%s: lge_read_block() failed, error num = %d \n", __func__, err); for(retry_cnt=0; retry_cnt<5; retry_cnt++) { err = lge_retry_erase_block(ebnum); if(err!=0) { printk(KERN_ERR "%s: lge_retry_erase_block() failed, error num = %d \n", __func__, err); } else { err = lge_write_block(ebnum, buf, size); if(err!=0) { printk(KERN_ERR "%s: lge_write_block() failed, error num = %d, retry count = %d \n", __func__, err, retry_cnt); continue; } else { memset((void*)preadback_buf, 0, sizeof(preadback_buf)); err = lge_read_block(ebnum, preadback_buf); if(err!=0) { printk(KERN_ERR "%s: lge_read_block() failed, error num = %d, retry count = %d \n", __func__, err, retry_cnt); continue; } else { if(memcmp(preadback_buf, FACTORY_RESET_STR, FACTORY_RESET_STR_SIZE) == 0) // tag read sucess { printk(KERN_ERR "%s: lge_read_block() succeeded read back, error num = %d, retry count = %d \n", __func__, err, retry_cnt); break; } else { printk(KERN_ERR "%s: lge_read_block() failed read back, error num = %d, retry count = %d \n", __func__, err, retry_cnt); continue; } } } } } } else { printk(KERN_ERR "%s: lge_read_block() succeeded, error num = %d \n", __func__, err); if(memcmp(preadback_buf, FACTORY_RESET_STR, FACTORY_RESET_STR_SIZE) == 0) // tag read sucess { printk(KERN_ERR "%s: lge_read_block() succeeded read back, error num = %d \n", __func__, err); } else { printk(KERN_ERR "%s: lge_read_block() failed, error num = %d \n", __func__, err); for(retry_cnt=0; retry_cnt<5; retry_cnt++) { err = lge_retry_erase_block(ebnum); if(err!=0) { printk(KERN_ERR "%s: lge_retry_erase_block() failed, error num = %d \n", __func__, err); } else { err = lge_write_block(ebnum, buf, size); if(err!=0) { printk(KERN_ERR "%s: lge_write_block() failed, error num = %d, retry count = %d \n", __func__, err, retry_cnt); continue; } else { memset((void*)preadback_buf, 0, sizeof(preadback_buf)); err = lge_read_block(ebnum, preadback_buf); if(err!=0) { printk(KERN_ERR "%s: lge_read_block() failed, error num = %d, retry count = %d \n", __func__, err, retry_cnt); continue; } else { if(memcmp(preadback_buf, FACTORY_RESET_STR, FACTORY_RESET_STR_SIZE) == 0) // tag read sucess { printk(KERN_ERR "%s: lge_read_block() succeeded read back, error num = %d, retry count = %d \n", __func__, err, retry_cnt); break; } else { printk(KERN_ERR "%s: lge_read_block() failed read back, error num = %d, retry count = %d \n", __func__, err, retry_cnt); continue; } } } } } } } } return err; }
void remote_did_rpc(void) { struct oem_rapi_client_streaming_func_arg arg; struct oem_rapi_client_streaming_func_ret ret; int rc= -1; char fs_err_buf[20]; const MmcPartition *pMisc_part; unsigned int did_bytes_pos_in_emmc ; int mtd_op_result ; printk(KERN_ERR "%s, start OEM_RAPI\n",__func__); Open_check(); arg.event = LG_FW_DID_BACKUP_REQUEST; arg.cb_func = NULL; arg.handle = (void*) 0; arg.in_len = sizeof(fs_err_buf); arg.input =fs_err_buf; arg.out_len_valid = 1; arg.output_valid = 1; arg.output_size = sizeof(pbuf_emmc); ret.output = NULL; ret.out_len = NULL; rc = oem_rapi_client_streaming_function(client,&arg,&ret); if(ret.output == NULL || ret.out_len == NULL){ printk(KERN_ERR "%s, output is NULL\n",__func__); return; } printk(KERN_ERR "%s, output lenght =%dis\n",__func__,*ret.out_len); memcpy((void *)&pbuf_emmc2[0], ret.output, 192); //form modem length =192 printk(KERN_ERR "%s, lge_mmc_scan_partitions\n",__func__); lge_mmc_scan_partitions(); pMisc_part = lge_mmc_find_partition_by_name("misc"); printk(KERN_ERR "%s, lge_mmc_find_partition_by_name\n",__func__); if (pMisc_part ==NULL) { if (ret.output) kfree(ret.output); if (ret.out_len) kfree(ret.out_len); return ; } did_bytes_pos_in_emmc = (pMisc_part->dfirstsec)*512+0x300000; memset((void *)pbuf_emmc, 0, sizeof(pbuf_emmc)); mtd_op_result = lge_read_block(did_bytes_pos_in_emmc, pbuf_emmc, 192); if(memcmp((void *)pbuf_emmc,(void *)pbuf_emmc2, sizeof(pbuf_emmc)) != 0) { lge_write_block(did_bytes_pos_in_emmc, pbuf_emmc2, 192); } if (ret.output) kfree(ret.output); if (ret.out_len) kfree(ret.out_len); return; }