static int write_env_area(char *env_buf) { part_t *part; part_dev_t *dev; long len; int i,checksum = 0; #ifdef MTK_EMMC_SUPPORT unsigned long long start_addr; #elif defined(MTK_NAND_SUPPORT) unsigned long start_addr; #endif dev = mt_part_get_device(); if (!dev) { return -ENODEV; } part = mt_part_get_partition(ENV_PART); if (!part) { return -ENOENT; } #ifdef MTK_EMMC_SUPPORT start_addr = (u64)part->startblk * BLK_SIZE; #elif defined(MTK_NAND_SUPPORT) start_addr = part->startblk * BLK_SIZE; #endif memcpy(env_buf,ENV_SIG,sizeof(g_env.sig)); memcpy(env_buf+CFG_ENV_SIG_1_OFFSET,ENV_SIG,sizeof(g_env.sig)); for(i=0;i<(int)CFG_ENV_DATA_SIZE;i++){ checksum += *(env_buf+CFG_ENV_DATA_OFFSET+i); } printf("checksum %d\n",checksum); *((int *)env_buf+CFG_ENV_CHECKSUM_OFFSET/4) = checksum; #if defined(MTK_EMMC_SUPPORT) && defined(MTK_NEW_COMBO_EMMC_SUPPORT) len = dev->write(dev, (uchar*)env_buf, start_addr + CFG_ENV_OFFSET, CFG_ENV_SIZE, part->part_id); #else len = -1; #endif if (len < 0) { return -EIO; } return 0; }
part_t *card_dump_init(int dev, const char *part_name) { part_t *part = mt_part_get_partition((char *)part_name); if (part == NULL) { return NULL; } #ifdef MTK_GPT_SCHEME_SUPPORT voprintf_info("%s offset: %lu, size: %lu Mb\n", part->info->name, part->start_sect, (part->nr_sects * BLK_SIZE) / 0x100000UL); #else voprintf_info("%s offset: %lu, size: %lu Mb\n", part->name, part->startblk, (part->blknum * BLK_SIZE) / 0x100000UL); #endif return part; }
int sec_dev_write_wrapper(char *part_name, u64 offset, u8* data, u32 size) { part_dev_t *dev; long len; #ifdef MTK_EMMC_SUPPORT #ifdef MTK_NEW_COMBO_EMMC_SUPPORT part_t *part; #endif #endif dev = mt_part_get_device(); if (!dev) return PART_GET_DEV_FAIL; #ifndef MTK_EMMC_SUPPORT if(nand_erase(offset,(u64)size)!=0){ return PART_ERASE_FAIL; } #endif #ifdef MTK_EMMC_SUPPORT #ifdef MTK_NEW_COMBO_EMMC_SUPPORT part = mt_part_get_partition(part_name); if (!part){ dprintf(CRITICAL,"[write_wrapper] mt_part_get_partition error, name: %s\n", part_name); ASSERT(0); } len = dev->write(dev, (uchar *) data, offset, size, part->part_id); #else len = dev->write(dev, (uchar *) data, offset, size); #endif #else #ifdef MTK_NEW_COMBO_EMMC_SUPPORT len = dev->write(dev, (uchar *) data, offset, size, NAND_PART_USER); #else len = dev->write(dev, (uchar *) data, offset, size); #endif #endif if (len != (int)size) { return PART_WRITE_FAIL; } return B_OK; }
int sec_dev_read_wrapper(char *part_name, u64 offset, u8* data, u32 size) { part_dev_t *dev; long len; #ifdef MTK_EMMC_SUPPORT #ifdef MTK_NEW_COMBO_EMMC_SUPPORT part_t *part; #endif #endif dev = mt_part_get_device(); if (!dev){ return PART_GET_DEV_FAIL; } #ifdef MTK_EMMC_SUPPORT #ifdef MTK_NEW_COMBO_EMMC_SUPPORT part = mt_part_get_partition(part_name); if (!part){ dprintf(CRITICAL,"[read_wrapper] mt_part_get_partition error, name: %s\n", part_name); ASSERT(0); } len = dev->read(dev, offset, (uchar *) data, size, part->part_id); #else len = dev->read(dev, offset, (uchar *) data, size); #endif #else #ifdef MTK_NEW_COMBO_EMMC_SUPPORT len = dev->read(dev, offset, (uchar *) data, size, NAND_PART_USER); #else len = dev->read(dev, offset, (uchar *) data, size); #endif #endif if (len != (int)size) { return PART_READ_FAIL; } return B_OK; }
static int read_env_area(char *env_buf) { part_t *part; part_dev_t *dev; long len; #ifdef MTK_EMMC_SUPPORT unsigned long long start_addr; #elif defined(MTK_NAND_SUPPORT) unsigned long start_addr; #endif dev = mt_part_get_device(); if (!dev) { return -ENODEV; } part = mt_part_get_partition(ENV_PART); if (!part) { return -ENOENT; } #ifdef MTK_EMMC_SUPPORT start_addr = (u64)part->startblk * BLK_SIZE; #elif defined(MTK_NAND_SUPPORT) start_addr = part->startblk * BLK_SIZE; #endif #if defined(MTK_EMMC_SUPPORT) && defined(MTK_NEW_COMBO_EMMC_SUPPORT) len = dev->read(dev, start_addr + CFG_ENV_OFFSET, (uchar*)env_buf, CFG_ENV_SIZE, part->part_id); #else len = -1; #endif if (len < 0) { return -EIO; } return 0; }