void smem_ptable_init(void) { unsigned i; smem_apps_flash_start = 0xffffffff; i = smem_read_alloc_entry(SMEM_AARM_PARTITION_TABLE, &smem_ptable, sizeof(smem_ptable)); if (i != 0) return; if (smem_ptable.magic[0] != _SMEM_PTABLE_MAGIC_1 || smem_ptable.magic[1] != _SMEM_PTABLE_MAGIC_2) return; dump_smem_ptable(); dprintf(INFO, "smem ptable found: ver: %d len: %d\n", smem_ptable.version, smem_ptable.len); for (i = 0; i < smem_ptable.len; i++) { if (!strcmp(smem_ptable.parts[i].name, "0:APPS")) break; } if (i == smem_ptable.len) return; smem_apps_flash_start = smem_ptable.parts[i].start; }
void smem_ptable_init(void) { unsigned i; unsigned ret; unsigned len; /* Read only the header portion of ptable */ ret = smem_read_alloc_entry_offset(SMEM_AARM_PARTITION_TABLE, &smem_ptable, SMEM_PTABLE_HDR_LEN, 0); if (ret != 0) { dprintf(CRITICAL, "Failed to read ptable hdr (%d)", ret); ASSERT(0); } /* Verify ptable magic */ if (smem_ptable.magic[0] != _SMEM_PTABLE_MAGIC_1 || smem_ptable.magic[1] != _SMEM_PTABLE_MAGIC_2) return; /* Ensure that # of partitions is less than the max we have allocated. */ ASSERT(smem_ptable.len <= SMEM_PTABLE_MAX_PARTS); /* Find out length of partition data based on table version. */ if (smem_ptable.version <= 3) { len = SMEM_PTABLE_HDR_LEN + SMEM_PTABLE_MAX_PARTS_V3*sizeof(struct smem_ptn); } else if (smem_ptable.version == 4) { len = SMEM_PTABLE_HDR_LEN + SMEM_PTABLE_MAX_PARTS_V4*sizeof(struct smem_ptn); } else { dprintf(CRITICAL, "Unknown ptable version (%d)", smem_ptable.version); ASSERT(0); } ret = smem_read_alloc_entry(SMEM_AARM_PARTITION_TABLE, &smem_ptable, len); if (ret != 0) { dprintf(CRITICAL, "Failed to read ptable (%d)", ret); ASSERT(0); } dump_smem_ptable(); dprintf(INFO, "smem ptable found: ver: %d len: %d\n", smem_ptable.version, smem_ptable.len); for (i = 0; i < smem_ptable.len; i++) { if (!strcmp(smem_ptable.parts[i].name, "0:APPS")) break; } if (i == smem_ptable.len) return; smem_apps_flash_start = smem_ptable.parts[i].start; }