util/cse_serger: Replace cse_layout_regions with array of regions

This change replaces `struct cse_layout_regions` with an array of
`struct region` and introduces enums for DP and BP[1-4]. This makes it
easier to loop over the different regions in following changes.

BUG=b:189177186

Change-Id: If3cced4506d26dc534047cb9c385aaa9418d8522
Signed-off-by: Furquan Shaikh <furquan@google.com>
Reviewed-on: https://review.coreboot.org/c/coreboot/+/58214
Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
Reviewed-by: Tim Wawrzynczak <twawrzynczak@chromium.org>
This commit is contained in:
Furquan Shaikh 2021-10-09 23:06:09 -07:00
parent 5d8f4badda
commit 8b4ca15d7e
4 changed files with 49 additions and 38 deletions

View File

@ -142,21 +142,21 @@ static void inc_bpdt_entry_count(bpdt_hdr_ptr ptr)
h->descriptor_count++; h->descriptor_count++;
} }
static cse_layout_ptr create_cse_layout(const struct cse_layout_regions *r) static cse_layout_ptr create_cse_layout(const struct region *r)
{ {
struct cse_layout *l = malloc(sizeof(*l)); struct cse_layout *l = malloc(sizeof(*l));
if (!l) if (!l)
return NULL; return NULL;
l->data_offset = r->data_partition.offset; l->data_offset = r[DP].offset;
l->data_size = r->data_partition.size; l->data_size = r[DP].size;
l->bp1_offset = r->bp1.offset; l->bp1_offset = r[BP1].offset;
l->bp1_size = r->bp1.size; l->bp1_size = r[BP1].size;
l->bp2_offset = r->bp2.offset; l->bp2_offset = r[BP2].offset;
l->bp2_size = r->bp2.size; l->bp2_size = r[BP2].size;
l->bp3_offset = r->bp3.offset; l->bp3_offset = r[BP3].offset;
l->bp3_size = r->bp3.size; l->bp3_size = r[BP3].size;
l->checksum = 0; /* unused */ l->checksum = 0; /* unused */
return 0; return 0;

View File

@ -185,7 +185,7 @@ static uint32_t calculate_layout_checksum(struct cse_layout *l)
return calc_checksum; return calc_checksum;
} }
static cse_layout_ptr create_cse_layout(const struct cse_layout_regions *r) static cse_layout_ptr create_cse_layout(const struct region *r)
{ {
struct cse_layout *l = calloc(1, sizeof(*l)); struct cse_layout *l = calloc(1, sizeof(*l));
@ -196,16 +196,16 @@ static cse_layout_ptr create_cse_layout(const struct cse_layout_regions *r)
l->size = sizeof(struct cse_layout) - sizeof(l->rom_bypass); l->size = sizeof(struct cse_layout) - sizeof(l->rom_bypass);
l->redundancy = 0; l->redundancy = 0;
l->checksum = 0; l->checksum = 0;
l->data_offset = r->data_partition.offset; l->data_offset = r[DP].offset;
l->data_size = r->data_partition.size; l->data_size = r[DP].size;
l->bp1_offset = r->bp1.offset; l->bp1_offset = r[BP1].offset;
l->bp1_size = r->bp1.size; l->bp1_size = r[BP1].size;
l->bp2_offset = r->bp2.offset; l->bp2_offset = r[BP2].offset;
l->bp2_size = r->bp2.size; l->bp2_size = r[BP2].size;
l->bp3_offset = r->bp3.offset; l->bp3_offset = r[BP3].offset;
l->bp3_size = r->bp3.size; l->bp3_size = r[BP3].size;
l->bp4_offset = r->bp4.offset; l->bp4_offset = r[BP4].offset;
l->bp4_size = r->bp4.size; l->bp4_size = r[BP4].size;
l->bp5_offset = 0; l->bp5_offset = 0;
l->bp5_size = 0; l->bp5_size = 0;
l->temp_base_addr = 0; l->temp_base_addr = 0;

View File

@ -21,7 +21,7 @@ static struct params {
const char *image_name; const char *image_name;
const char *version_str; const char *version_str;
const char *input_file; const char *input_file;
struct cse_layout_regions layout_regions; struct region layout_regions[BP_TOTAL];
} params; } params;
static const struct { static const struct {
@ -640,14 +640,14 @@ static int allocate_buffer(struct buffer *buff, struct buffer *wbuff, const char
return 0; return 0;
} }
static int cmd_create_layout(void) static int fill_layout_buffer(struct buffer *buff)
{ {
struct buffer buff, wbuff; struct buffer wbuff;
if (allocate_buffer(&buff, &wbuff, "CSE layout")) if (allocate_buffer(buff, &wbuff, "CSE layout"))
return -1; return -1;
ifwi.cse_layout = ifwi.bpdt_ops->create_layout(&params.layout_regions); ifwi.cse_layout = ifwi.bpdt_ops->create_layout(&params.layout_regions[0]);
if (!ifwi.cse_layout) { if (!ifwi.cse_layout) {
ERROR("Failed to create layout!\n"); ERROR("Failed to create layout!\n");
return -1; return -1;
@ -658,6 +658,16 @@ static int cmd_create_layout(void)
return -1; return -1;
} }
return 0;
}
static int cmd_create_layout(void)
{
struct buffer buff;
if (fill_layout_buffer(&buff))
return -1;
buffer_write_file(&buff, params.image_name); buffer_write_file(&buff, params.image_name);
return 0; return 0;
} }
@ -815,7 +825,7 @@ static void usage(const char *name)
"COMMANDs:\n" "COMMANDs:\n"
" print [-s][-n NAME][-t TYPE]\n" " print [-s][-n NAME][-t TYPE]\n"
" dump [-o DIR][-n NAME]\n" " dump [-o DIR][-n NAME]\n"
" create-layout --dp <offset:size> --bp1 <offset:size> --bp2 <offset:size> -v VERSION\n" " create-layout --dp <offset:size> --bp* <offset:size> -v VERSION\n"
" print-layout -v VERSION\n" " print-layout -v VERSION\n"
" create-bpdt -v VERSION\n" " create-bpdt -v VERSION\n"
" add [-n NAME][-t TYPE][-f INPUT_FILE]\n" " add [-n NAME][-t TYPE][-f INPUT_FILE]\n"
@ -896,19 +906,19 @@ int main(int argc, char **argv)
params.partition_type = atoi(optarg); params.partition_type = atoi(optarg);
break; break;
case LONGOPT_BP1: case LONGOPT_BP1:
parse_region(&params.layout_regions.bp1, optarg); parse_region(&params.layout_regions[BP1], optarg);
break; break;
case LONGOPT_BP2: case LONGOPT_BP2:
parse_region(&params.layout_regions.bp2, optarg); parse_region(&params.layout_regions[BP2], optarg);
break; break;
case LONGOPT_BP3: case LONGOPT_BP3:
parse_region(&params.layout_regions.bp3, optarg); parse_region(&params.layout_regions[BP3], optarg);
break; break;
case LONGOPT_BP4: case LONGOPT_BP4:
parse_region(&params.layout_regions.bp4, optarg); parse_region(&params.layout_regions[BP4], optarg);
break; break;
case LONGOPT_DATA: case LONGOPT_DATA:
parse_region(&params.layout_regions.data_partition, optarg); parse_region(&params.layout_regions[DP], optarg);
break; break;
case 'h': case 'h':
case '?': case '?':

View File

@ -27,12 +27,13 @@ enum subpart_entry_version {
SUBPART_ENTRY_VERSION_1 = 1, SUBPART_ENTRY_VERSION_1 = 1,
}; };
struct cse_layout_regions { enum {
struct region data_partition; DP,
struct region bp1; BP1,
struct region bp2; BP2,
struct region bp3; BP3,
struct region bp4; BP4,
BP_TOTAL,
}; };
typedef void *cse_layout_ptr; typedef void *cse_layout_ptr;
@ -56,7 +57,7 @@ struct bpdt_ops {
size_t (*get_entry_count)(const bpdt_hdr_ptr ptr); size_t (*get_entry_count)(const bpdt_hdr_ptr ptr);
void (*inc_entry_count)(bpdt_hdr_ptr ptr); void (*inc_entry_count)(bpdt_hdr_ptr ptr);
cse_layout_ptr (*create_layout)(const struct cse_layout_regions *regions); cse_layout_ptr (*create_layout)(const struct region *regions);
void (*print_layout)(const cse_layout_ptr ptr); void (*print_layout)(const cse_layout_ptr ptr);
cse_layout_ptr (*read_layout)(struct buffer *buff); cse_layout_ptr (*read_layout)(struct buffer *buff);
int (*write_layout)(struct buffer *buff, const cse_layout_ptr ptr); int (*write_layout)(struct buffer *buff, const cse_layout_ptr ptr);