int init_pmt(void) { int ret = 0; int i = 0; printk("[%s]start\n", __func__); ret = init_region_info(); if (pmt_done) { printk("pmt has been initialised, so skip\n"); return 0; } //init region info to get user region size. lastest_part = kmalloc(PART_MAX_COUNT * sizeof(pt_resident), GFP_KERNEL); if (!lastest_part) { ret = -ENOMEM; printk("init_pmt: malloc lastest_part fail\n"); goto fail_malloc; } memset(lastest_part,0, PART_MAX_COUNT * sizeof(pt_resident)); memset(&pi,0,sizeof(pt_info)); ret = load_pt_from_fixed_addr((u8 *)lastest_part); if (ret != DM_ERR_OK) { //and valid mirror last download or first download printk("can not find pmt,use default part info\n"); } else { printk("find pt\n"); for (i = 0; i < PART_MAX_COUNT; i++) { if ((lastest_part[i].name[0] == 0x00) || (lastest_part[i].name[0] == 0xff)) break; printk("part %s size %llx %llx\n", lastest_part[i].name, lastest_part[i].offset, lastest_part[i].size); PartInfo[i].start_address = lastest_part[i].offset; PartInfo[i].size= lastest_part[i].size; /* if(lastest_part[i].size == 0) break;*/ } printk("find pt %d\n",i); } printk("[%s]done\n", __func__); pmt_done = 1; ret = 0; fail_malloc: return ret; }
void pmt_init(void) { #ifdef MTK_EMMC_SUPPORT int ret = 0; int i = 0; memset(&new_part, 0, PART_MAX_COUNT * sizeof (pt_resident)); memset(&lastest_part, 0, PART_MAX_COUNT * sizeof (pt_resident)); ret = load_pt_from_fixed_addr((u8 *)&lastest_part); if (ret == ERR_NO_EXIST) { //first run preloader before dowload //and valid mirror last download or first download get_part_tab_from_complier(); //get from complier } else { print("find pt\n"); for (i = 0; i < PART_MAX_COUNT; i++) { if (lastest_part[i].size == 0) break; print("part %s size %llx %llx\n", lastest_part[i].name, lastest_part[i].offset, lastest_part[i].size); } } #else int ret = 0; int i = 0; memset(&new_part,0, PART_MAX_COUNT * sizeof(pt_resident)); memset(&lastest_part,0, PART_MAX_COUNT * sizeof(pt_resident)); ret = load_exist_part_tab((u8 *)&lastest_part); if (ret == ERR_NO_EXIST) { //first run preloader before dowload //and valid mirror last download or first download get_part_tab_from_complier(); //get from complier } else { print("find pt\n"); for (i = 0; i < PART_MAX_COUNT; i++) { if(lastest_part[i].size == 0) break; print("part %s size %x %x\n", lastest_part[i].name, lastest_part[i].offset, lastest_part[i].size); } } init_pmt_done = TRUE; #endif }
void part_init_pmt(unsigned long totalblks,part_dev_t *dev) { #ifdef MTK_EMMC_SUPPORT part_t *part = &partition_layout[0]; unsigned long lastblk; int retval=0; int i=0; printf ("mt6577_part_init_pmt \n"); if (!totalblks) return; /* updater the number of blks of first part. */ if (totalblks <= part->blknum) part->blknum = totalblks; totalblks -= part->blknum; lastblk = part->startblk + part->blknum; while (totalblks) { part++; if (!part->name) break; if (part->flags & PART_FLAG_LEFT || totalblks <= part->blknum) part->blknum = totalblks; part->startblk = lastblk; totalblks -= part->blknum; lastblk = part->startblk + part->blknum; } memset(&pi,0xFF,sizeof(pi)); memset(&lastest_part, 0, PART_MAX_COUNT * sizeof(pt_resident)); retval = load_pt_from_fixed_addr((u8 *)&lastest_part, dev); if (retval == ERR_NO_EXIST) { //first run preloader before dowload //and valid mirror last download or first download printf("no pt \n"); get_part_tab_from_complier(); //get from complier } else { printf("Find pt \n"); for (i = 0; i < PART_MAX_COUNT; i++) { if (lastest_part[i].size == 0) { lastest_part[i].size = target_get_max_flash_size() - lastest_part[i].offset - partition_reserve_size(); printf("partition %s size %016llx %016llx \n",lastest_part[i].name,lastest_part[i].offset,lastest_part[i].size); break; } if (!strcmp((char *)lastest_part[i].name, PMT_END_NAME)) { lastest_part[i].size = target_get_max_flash_size() - lastest_part[i].offset - partition_reserve_size(); printf("partition %s size %016llx %016llx \n",lastest_part[i].name,lastest_part[i].offset,lastest_part[i].size); break; } printf ("partition %s size %016llx %016llx \n",lastest_part[i].name,lastest_part[i].offset,lastest_part[i].size); } } #else part_t *part = &partition_layout[0]; unsigned long lastblk; int retval=0; int i=0; printf ("mt6577_part_init_pmt \n"); if (!totalblks) return; /* updater the number of blks of first part. */ if (totalblks <= part->blknum) part->blknum = totalblks; totalblks -= part->blknum; if(part->type == TYPE_LOW) lastblk = part->startblk + part->blknum*2; else lastblk = part->startblk + part->blknum; while(totalblks) { part++; if (!part->name) break; if (part->flags & PART_FLAG_LEFT || totalblks <= part->blknum) part->blknum = totalblks; part->startblk = lastblk; totalblks -= part->blknum; if(part->type == TYPE_LOW) lastblk = part->startblk + part->blknum*2; else lastblk = part->startblk + part->blknum; } memset(&pi,0xFF,sizeof(pi)); memset(&lastest_part,0,PART_MAX_COUNT*sizeof(pt_resident)); retval=load_exist_part_tab((u8 *)&lastest_part,dev); if (retval==ERR_NO_EXIST) //first run preloader before dowload { //and valid mirror last download or first download printf ("no pt \n"); get_part_tab_from_complier(); //get from complier } else { printf ("Find pt \n"); for(i=0;i<PART_MAX_COUNT;i++) { //printf("%s, %x\n",lastest_part[i].name,lastest_part[i].size); if(lastest_part[i].size == 0){ lastest_part[i].size = total_size - lastest_part[i].offset; printf ("partition %s size %lx %lx \n",lastest_part[i].name,lastest_part[i].offset,lastest_part[i].size); break; } printf ("partition @ %x %s size %lx %lx \n",&lastest_part[i],lastest_part[i].name,lastest_part[i].offset,lastest_part[i].size); } } init_pmt_done = TRUE; #endif }