<p>Bill XIE has uploaded this change for <strong>review</strong>.</p><p><a href="https://review.coreboot.org/21510">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">ifdtool: redesign some structures<br><br>Redesign some array-like structures as true arrays,<br>and rewrite functions to dump them as loops.<br><br>This commit is one separated from the original I6d05418c.<br><br>Change-Id: I161c9a2ae83d26e658d67d0804e943fff95fe076<br>Signed-off-by: Bill XIE <persmule@gmail.com><br>---<br>M util/ifdtool/Makefile<br>M util/ifdtool/ifdtool.c<br>M util/ifdtool/ifdtool.h<br>3 files changed, 21 insertions(+), 120 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;">git pull ssh://review.coreboot.org:29418/coreboot refs/changes/10/21510/1</pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;">diff --git a/util/ifdtool/Makefile b/util/ifdtool/Makefile<br>index 77547ef..936aa50 100644<br>--- a/util/ifdtool/Makefile<br>+++ b/util/ifdtool/Makefile<br>@@ -18,7 +18,7 @@<br> CC = gcc<br> INSTALL = /usr/bin/install<br> PREFIX = /usr/local<br>-CFLAGS = -O2 -g -Wall -W -Werror<br>+CFLAGS = -O2 -g -Wall -W -Werror -I../../src/commonlib/include<br> LDFLAGS =<br> <br> OBJS = ifdtool.o<br>diff --git a/util/ifdtool/ifdtool.c b/util/ifdtool/ifdtool.c<br>index 03b28f4..f6524c9 100644<br>--- a/util/ifdtool/ifdtool.c<br>+++ b/util/ifdtool/ifdtool.c<br>@@ -21,6 +21,7 @@<br> #include <fcntl.h><br> #include <sys/types.h><br> #include <sys/stat.h><br>+#include <commonlib/helpers.h><br> #include "ifdtool.h"<br> <br> #ifndef O_BINARY<br>@@ -106,7 +107,6 @@<br> int base_mask;<br> int limit_mask;<br> uint32_t flreg;<br>- const void *v;<br> region_t region;<br> <br> if (ifd_version >= IFD_VERSION_2)<br>@@ -116,40 +116,12 @@<br> <br> limit_mask = base_mask << 16;<br> <br>- switch (region_type) {<br>- case 0:<br>- v = &frba->flreg0;<br>- break;<br>- case 1:<br>- v = &frba->flreg1;<br>- break;<br>- case 2:<br>- v = &frba->flreg2;<br>- break;<br>- case 3:<br>- v = &frba->flreg3;<br>- break;<br>- case 4:<br>- v = &frba->flreg4;<br>- break;<br>- case 5:<br>- v = &frba->flreg5;<br>- break;<br>- case 6:<br>- v = &frba->flreg6;<br>- break;<br>- case 7:<br>- v = &frba->flreg7;<br>- break;<br>- case 8:<br>- v = &frba->flreg8;<br>- break;<br>- default:<br>+ if (region_type >= MAX_REGIONS) {<br> fprintf(stderr, "Invalid region type %d.\n", region_type);<br> exit (EXIT_FAILURE);<br> }<br> <br>- memmove(&flreg, v, sizeof(flreg));<br>+ flreg = frba->flreg[region_type];<br> region.base = (flreg & base_mask) << 12;<br> region.limit = ((flreg & limit_mask) >> 4) | 0xfff;<br> region.size = region.limit - region.base + 1;<br>@@ -163,31 +135,14 @@<br> static void set_region(frba_t *frba, unsigned int region_type,<br> const region_t *region)<br> {<br>- switch (region_type) {<br>- case 0:<br>- frba->flreg0 = (((region->limit >> 12) & 0x7fff) << 16)<br>- | ((region->base >> 12) & 0x7fff);<br>- break;<br>- case 1:<br>- frba->flreg1 = (((region->limit >> 12) & 0x7fff) << 16)<br>- | ((region->base >> 12) & 0x7fff);<br>- break;<br>- case 2:<br>- frba->flreg2 = (((region->limit >> 12) & 0x7fff) << 16)<br>- | ((region->base >> 12) & 0x7fff);<br>- break;<br>- case 3:<br>- frba->flreg3 = (((region->limit >> 12) & 0x7fff) << 16)<br>- | ((region->base >> 12) & 0x7fff);<br>- break;<br>- case 4:<br>- frba->flreg4 = (((region->limit >> 12) & 0x7fff) << 16)<br>- | ((region->base >> 12) & 0x7fff);<br>- break;<br>- default:<br>- fprintf(stderr, "Invalid region type.\n");<br>+ if (region_type >= MAX_REGIONS_OLD) {<br>+ fprintf(stderr, "Invalid region type %d.\n", region_type);<br> exit (EXIT_FAILURE);<br> }<br>+<br>+ frba->flreg[region_type] =<br>+ (((region->limit >> 12) & 0x7fff) << 16) |<br>+ ((region->base >> 12) & 0x7fff);<br> }<br> <br> static const char *region_name(unsigned int region_type)<br>@@ -252,27 +207,11 @@<br> <br> static void dump_frba(const frba_t *frba)<br> {<br>+ unsigned int i;<br> printf("Found Region Section\n");<br>- printf("FLREG0: 0x%08x\n", frba->flreg0);<br>- dump_region(0, frba);<br>- printf("FLREG1: 0x%08x\n", frba->flreg1);<br>- dump_region(1, frba);<br>- printf("FLREG2: 0x%08x\n", frba->flreg2);<br>- dump_region(2, frba);<br>- printf("FLREG3: 0x%08x\n", frba->flreg3);<br>- dump_region(3, frba);<br>- printf("FLREG4: 0x%08x\n", frba->flreg4);<br>- dump_region(4, frba);<br>-<br>- if (ifd_version >= IFD_VERSION_2) {<br>- printf("FLREG5: 0x%08x\n", frba->flreg5);<br>- dump_region(5, frba);<br>- printf("FLREG6: 0x%08x\n", frba->flreg6);<br>- dump_region(6, frba);<br>- printf("FLREG7: 0x%08x\n", frba->flreg7);<br>- dump_region(7, frba);<br>- printf("FLREG8: 0x%08x\n", frba->flreg8);<br>- dump_region(8, frba);<br>+ for (i = 0; i < max_regions; i++) {<br>+ printf("FLREG%u: 0x%08x\n", i, frba->flreg[i]);<br>+ dump_region(i, frba);<br> }<br> }<br> <br>@@ -419,25 +358,11 @@<br> <br> static void dump_fpsba(const fpsba_t *fpsba)<br> {<br>+ unsigned int i;<br> printf("Found PCH Strap Section\n");<br>- printf("PCHSTRP0: 0x%08x\n", fpsba->pchstrp0);<br>- printf("PCHSTRP1: 0x%08x\n", fpsba->pchstrp1);<br>- printf("PCHSTRP2: 0x%08x\n", fpsba->pchstrp2);<br>- printf("PCHSTRP3: 0x%08x\n", fpsba->pchstrp3);<br>- printf("PCHSTRP4: 0x%08x\n", fpsba->pchstrp4);<br>- printf("PCHSTRP5: 0x%08x\n", fpsba->pchstrp5);<br>- printf("PCHSTRP6: 0x%08x\n", fpsba->pchstrp6);<br>- printf("PCHSTRP7: 0x%08x\n", fpsba->pchstrp7);<br>- printf("PCHSTRP8: 0x%08x\n", fpsba->pchstrp8);<br>- printf("PCHSTRP9: 0x%08x\n", fpsba->pchstrp9);<br>- printf("PCHSTRP10: 0x%08x\n", fpsba->pchstrp10);<br>- printf("PCHSTRP11: 0x%08x\n", fpsba->pchstrp11);<br>- printf("PCHSTRP12: 0x%08x\n", fpsba->pchstrp12);<br>- printf("PCHSTRP13: 0x%08x\n", fpsba->pchstrp13);<br>- printf("PCHSTRP14: 0x%08x\n", fpsba->pchstrp14);<br>- printf("PCHSTRP15: 0x%08x\n", fpsba->pchstrp15);<br>- printf("PCHSTRP16: 0x%08x\n", fpsba->pchstrp16);<br>- printf("PCHSTRP17: 0x%08x\n\n", fpsba->pchstrp17);<br>+ for (i = 0; i < ARRAY_SIZE(fpsba->pchstrp); i++)<br>+ printf("PCHSTRP%u: 0x%08x\n", i, fpsba->pchstrp[i]);<br>+ printf("\n");<br> }<br> <br> static void decode_flmstr(uint32_t flmstr)<br>diff --git a/util/ifdtool/ifdtool.h b/util/ifdtool/ifdtool.h<br>index f50f6be..0cce8e4 100644<br>--- a/util/ifdtool/ifdtool.h<br>+++ b/util/ifdtool/ifdtool.h<br>@@ -60,16 +60,9 @@<br> // regions<br> #define MAX_REGIONS 9<br> #define MAX_REGIONS_OLD 5<br>+<br> typedef struct {<br>- uint32_t flreg0;<br>- uint32_t flreg1;<br>- uint32_t flreg2;<br>- uint32_t flreg3;<br>- uint32_t flreg4;<br>- uint32_t flreg5;<br>- uint32_t flreg6;<br>- uint32_t flreg7;<br>- uint32_t flreg8;<br>+ uint32_t flreg[MAX_REGIONS];<br> } __attribute__((packed)) frba_t;<br> <br> // component section<br>@@ -81,24 +74,7 @@<br> <br> // pch strap<br> typedef struct {<br>- uint32_t pchstrp0;<br>- uint32_t pchstrp1;<br>- uint32_t pchstrp2;<br>- uint32_t pchstrp3;<br>- uint32_t pchstrp4;<br>- uint32_t pchstrp5;<br>- uint32_t pchstrp6;<br>- uint32_t pchstrp7;<br>- uint32_t pchstrp8;<br>- uint32_t pchstrp9;<br>- uint32_t pchstrp10;<br>- uint32_t pchstrp11;<br>- uint32_t pchstrp12;<br>- uint32_t pchstrp13;<br>- uint32_t pchstrp14;<br>- uint32_t pchstrp15;<br>- uint32_t pchstrp16;<br>- uint32_t pchstrp17;<br>+ uint32_t pchstrp[18];<br> } __attribute__((packed)) fpsba_t;<br> <br> /*<br></pre><p>To view, visit <a href="https://review.coreboot.org/21510">change 21510</a>. To unsubscribe, visit <a href="https://review.coreboot.org/settings">settings</a>.</p><div itemscope itemtype="http://schema.org/EmailMessage"><div itemscope itemprop="action" itemtype="http://schema.org/ViewAction"><link itemprop="url" href="https://review.coreboot.org/21510"/><meta itemprop="name" content="View Change"/></div></div>
<div style="display:none"> Gerrit-Project: coreboot </div>
<div style="display:none"> Gerrit-Branch: master </div>
<div style="display:none"> Gerrit-MessageType: newchange </div>
<div style="display:none"> Gerrit-Change-Id: I161c9a2ae83d26e658d67d0804e943fff95fe076 </div>
<div style="display:none"> Gerrit-Change-Number: 21510 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: Bill XIE <persmule@gmail.com> </div>