From: Al Stone ahs3@redhat.com
While trying to figure out some problems I was having with my ACPI blobs, I ran into several things that needed fixing in mab. Some of these are innocuous, but some -- like using both 32- and 64-bit addresses in the FACS, and the RSDP checksums -- are actually in violation of the spec.
While I was there, I added a little more info in the verbose output, and corrected what was being printed out.
The new feature is that one can now use -H to produce a blob that does not have the header we've been using so far.
Changes from v1: -- This time, I actually _remembered_ to run checkpatch, so cleaned up the extra whitespace in patch 7/7.
Al Stone (7): mab: Makefile needs to rebuild if .h changes and use CFLAGS properly mab: use 32- or 64-bit FACS addresses in the FADT, not both mab: set both checksums in the RSDP, not just one mab: print out the correct offset in the blob mab: add option to NOT use a blob header, if needed mab: print out physical address when being verbose mab: update Changelog and version number for this patch series
tools/mab/Changelog | 19 +++++++++ tools/mab/Makefile | 6 +-- tools/mab/mab.c | 109 +++++++++++++++++++++++++++++++--------------------- tools/mab/mab.h | 5 ++- 4 files changed, 91 insertions(+), 48 deletions(-)
From: Al Stone ahs3@redhat.com
Signed-off-by: Al Stone al.stone@linaro.org --- tools/mab/Makefile | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/tools/mab/Makefile b/tools/mab/Makefile index 0d4afef..0627202 100644 --- a/tools/mab/Makefile +++ b/tools/mab/Makefile @@ -1,7 +1,7 @@ -CFLAGS := -g -I$(src) +CFLAGS := -g
-mab : mab.c - $(CC) -o mab mab.c +mab : mab.h mab.c + $(CC) $(CFLAGS) -o mab mab.c
clean : -rm mab
From: Al Stone ahs3@redhat.com
When doing relocation cleanup in the FADT, we need to use _either_ the 32- or 64-bit addresses, and not both (which is what we currently do); add a -f option to tell mab to use 32-bit in the FADT, and default to 64-bit otherwise. NB: 64-bit is always the safe choice but 32-bit needs to be allowed for those that use it to ensure they use addresses < 4GB for loadable tables.
Signed-off-by: Al Stone al.stone@linaro.org --- tools/mab/mab.c | 34 +++++++++++++++++++++++++--------- tools/mab/mab.h | 3 ++- 2 files changed, 27 insertions(+), 10 deletions(-)
diff --git a/tools/mab/mab.c b/tools/mab/mab.c index 3107088..6b8e2b3 100644 --- a/tools/mab/mab.c +++ b/tools/mab/mab.c @@ -32,9 +32,10 @@ void usage(void) { printf("%s %s\n", PROGNAME, VERSION); printf("usage: %s -d <dir> -o <blob> -i <manifest> ", PROGNAME); - printf("-p <paddr> [-c <iasl-cmd>] [-q]\n"); + printf("-p <paddr> [-c <iasl-cmd>] [-q] [-f]\n"); printf("\n"); printf(" -d <dir> => directory of ASL files\n"); + printf(" -f => if given, use FADT 32-bit fields\n"); printf(" -o <blob> => file name for resulting ACPI blob\n"); printf(" -i <manifest> => list of AML files needed\n"); printf(" -c <iasl-cmd> => iasl command to use (default: iasl -l)\n"); @@ -315,7 +316,7 @@ void fixup_rsdp(unsigned char *blob, uint64_t paddr) RSDP_CHECKSUM_BYTES, pcksum); }
-void fixup_facp(unsigned char *blob, int *offset, uint64_t paddr) +void fixup_facp(unsigned char *blob, int *offset, uint64_t paddr, int facs64) { const int DSDT_ADDR_OFFSET = 40; const int FACP_CHECKSUM_OFFSET = 9; @@ -338,8 +339,13 @@ void fixup_facp(unsigned char *blob, int *offset, uint64_t paddr) facpp->offset + X_DSDT_ADDR_OFFSET); p = find_table("dsdt"); if (p) { - *stmp = (uint32_t)p->offset + paddr; - *ltmp = (uint64_t)p->offset + paddr; + if (facs64) { + *stmp = (uint32_t)0; + *ltmp = (uint64_t)p->offset + paddr; + } else { + *stmp = (uint32_t)p->offset + paddr; + *ltmp = (uint64_t)0; + } } else { *stmp = (uint32_t)0; *ltmp = (uint64_t)0; @@ -348,13 +354,18 @@ void fixup_facp(unsigned char *blob, int *offset, uint64_t paddr)
/* add in the FIRMWARE_CTRL and X_FIRMWARE_CTRL addresses */ stmp = (uint32_t *)(blob + BLOB_HEADER_SIZE + - facpp->offset + FIRMWARE_CTRL_OFFSET); + facpp->offset + FIRMWARE_CTRL_OFFSET); ltmp = (uint64_t *)(blob + BLOB_HEADER_SIZE + facpp->offset + X_FIRMWARE_CTRL_OFFSET); p = find_table("facs"); if (p) { - *stmp = (uint32_t)p->offset + paddr; - *ltmp = (uint64_t)p->offset + paddr; + if (facs64) { + *stmp = (uint32_t)0; + *ltmp = (uint64_t)p->offset + paddr; + } else { + *stmp = (uint32_t)p->offset + paddr; + *ltmp = (uint64_t)0; + } } else { *stmp = (uint32_t)0; *ltmp = (uint64_t)0; @@ -462,6 +473,7 @@ int main(int argc, char *argv[]) struct table *np; int opt; int quiet; + int facs64;
/* parameter handling */ manifest_name = NULL; @@ -470,12 +482,16 @@ int main(int argc, char *argv[]) iasl_cmd = NULL; paddr_cmd = NULL; quiet = 0; + facs64 = 1;
- while ((opt = getopt(argc, argv, "d:o:i:c:p:q")) != EOF) { + while ((opt = getopt(argc, argv, "d:fo:i:c:p:q")) != EOF) { switch (opt) { case 'd': homedir = optarg; break; + case 'f': + facs64 = 0; + break; case 'o': acpi_blob_name = optarg; break; @@ -568,7 +584,7 @@ int main(int argc, char *argv[])
/* patch up all the offsets if needed */ fixup_rsdp(blob, paddr); - fixup_facp(blob, &offset, paddr); + fixup_facp(blob, &offset, paddr, facs64);
/* this fixup MUST always be called LAST -- it uses any unused tables */ fixup_xsdt(&blob, &offset, paddr); diff --git a/tools/mab/mab.h b/tools/mab/mab.h index e722ffd..5759e93 100644 --- a/tools/mab/mab.h +++ b/tools/mab/mab.h @@ -86,7 +86,8 @@ void write_table(unsigned char *blob, struct table *tp, int offset); void usage(void); int valid_sig(char *sig);
-void fixup_facp(unsigned char *blob, int *offset, unsigned long paddr); +void fixup_facp(unsigned char *blob, int *offset, unsigned long paddr, + int facs64); void fixup_rsdp(unsigned char *blob, unsigned long paddr); void fixup_xsdt(unsigned char **blob, int *offset, unsigned long paddr);
From: Al Stone ahs3@redhat.com
Signed-off-by: Al Stone al.stone@linaro.org --- tools/mab/mab.c | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-)
diff --git a/tools/mab/mab.c b/tools/mab/mab.c index 6b8e2b3..1cc507e 100644 --- a/tools/mab/mab.c +++ b/tools/mab/mab.c @@ -239,7 +239,7 @@ int add_table(unsigned char **blob, char *table_name, int offset, int reqd) int adjustment = 0;
p = find_table(table_name); - new_offset = offset + p->file_size; + new_offset = offset + p->file_size + BLOB_HEADER_SIZE;
/* * Handle crossing of page boundaries to prevent problems @@ -275,8 +275,10 @@ void fixup_rsdp(unsigned char *blob, uint64_t paddr) * essentially been deprecated. Instead, use the 64-bit * XSDT address though be sure to use little-endian values. */ - const int RSDP_CHECKSUM_BYTES = 20; - const int RSDP_CHECKSUM_OFFSET = 8; + const int RSDP_FIRST_CHECKSUM_BYTES = 20; + const int RSDP_FIRST_CHECKSUM_OFFSET = 8; + const int RSDP_SECOND_CHECKSUM_BYTES = 36; + const int RSDP_SECOND_CHECKSUM_OFFSET = 32; const int RSDT_ADDR_OFFSET = 16; const int XSDT_ADDR_OFFSET = 24;
@@ -311,9 +313,16 @@ void fixup_rsdp(unsigned char *blob, uint64_t paddr)
/* always reset the checksum, even if it is seldom used */ pcksum = (uint8_t *)(blob + BLOB_HEADER_SIZE); - pcksum = (uint8_t *)(pcksum + rsdpp->offset + RSDP_CHECKSUM_OFFSET); + pcksum = (uint8_t *) + (pcksum + rsdpp->offset + RSDP_FIRST_CHECKSUM_OFFSET); set_checksum((unsigned char *)(blob + BLOB_HEADER_SIZE + rsdpp->offset), - RSDP_CHECKSUM_BYTES, pcksum); + RSDP_FIRST_CHECKSUM_BYTES, pcksum); + + pcksum = (uint8_t *)(blob + BLOB_HEADER_SIZE); + pcksum = (uint8_t *) + (pcksum + rsdpp->offset + RSDP_SECOND_CHECKSUM_OFFSET); + set_checksum((unsigned char *)(blob + BLOB_HEADER_SIZE + rsdpp->offset), + RSDP_SECOND_CHECKSUM_BYTES, pcksum); }
void fixup_facp(unsigned char *blob, int *offset, uint64_t paddr, int facs64)
From: Al Stone ahs3@redhat.com
Fixing this also simplified the use of BLOB_HEADER_SIZE so that the code is a bit more readable now.
Signed-off-by: Al Stone al.stone@linaro.org --- tools/mab/mab.c | 52 ++++++++++++++++++++-------------------------------- tools/mab/mab.h | 2 +- 2 files changed, 21 insertions(+), 33 deletions(-)
diff --git a/tools/mab/mab.c b/tools/mab/mab.c index 1cc507e..b3fa43b 100644 --- a/tools/mab/mab.c +++ b/tools/mab/mab.c @@ -190,7 +190,7 @@ void write_table(unsigned char *blob, struct table *tp, int offset) FILE *fp;
tp->offset = offset; - start = (unsigned char *)(blob + BLOB_HEADER_SIZE + offset); + start = (unsigned char *)(blob + offset); fp = fopen(tp->aml_name, "r"); if (fp) { fread(start, 1, tp->file_size, fp); @@ -239,7 +239,7 @@ int add_table(unsigned char **blob, char *table_name, int offset, int reqd) int adjustment = 0;
p = find_table(table_name); - new_offset = offset + p->file_size + BLOB_HEADER_SIZE; + new_offset = offset + p->file_size;
/* * Handle crossing of page boundaries to prevent problems @@ -255,9 +255,10 @@ int add_table(unsigned char **blob, char *table_name, int offset, int reqd) adjustment -= BLOB_HEADER_SIZE; }
- *blob = realloc(*blob, offset + adjustment + p->file_size + BLOB_HEADER_SIZE); if (p) { + *blob = realloc(*blob, offset + adjustment + p->file_size); write_table(*blob, p, offset + adjustment); + p->offset = offset + adjustment; } else { if (reqd) { printf("? %s table is required\n", table_name); @@ -294,10 +295,8 @@ void fixup_rsdp(unsigned char *blob, uint64_t paddr) * seriously wrong far earlier. */ rsdpp = find_table("rsdp"); - stmp = (uint32_t *)(blob + BLOB_HEADER_SIZE + - rsdpp->offset + RSDT_ADDR_OFFSET); - ltmp = (uint64_t *)(blob + BLOB_HEADER_SIZE + - rsdpp->offset + XSDT_ADDR_OFFSET); + stmp = (uint32_t *)(blob + rsdpp->offset + RSDT_ADDR_OFFSET); + ltmp = (uint64_t *)(blob + rsdpp->offset + XSDT_ADDR_OFFSET);
p = find_table("xsdt"); if (p) @@ -312,16 +311,13 @@ void fixup_rsdp(unsigned char *blob, uint64_t paddr) *stmp = (uint64_t)0;
/* always reset the checksum, even if it is seldom used */ - pcksum = (uint8_t *)(blob + BLOB_HEADER_SIZE); - pcksum = (uint8_t *) - (pcksum + rsdpp->offset + RSDP_FIRST_CHECKSUM_OFFSET); - set_checksum((unsigned char *)(blob + BLOB_HEADER_SIZE + rsdpp->offset), + pcksum = (uint8_t *)(blob + rsdpp->offset + RSDP_FIRST_CHECKSUM_OFFSET); + set_checksum((unsigned char *)(blob + rsdpp->offset), RSDP_FIRST_CHECKSUM_BYTES, pcksum);
- pcksum = (uint8_t *)(blob + BLOB_HEADER_SIZE); pcksum = (uint8_t *) - (pcksum + rsdpp->offset + RSDP_SECOND_CHECKSUM_OFFSET); - set_checksum((unsigned char *)(blob + BLOB_HEADER_SIZE + rsdpp->offset), + (blob + rsdpp->offset + RSDP_SECOND_CHECKSUM_OFFSET); + set_checksum((unsigned char *)(blob + rsdpp->offset), RSDP_SECOND_CHECKSUM_BYTES, pcksum); }
@@ -342,10 +338,8 @@ void fixup_facp(unsigned char *blob, int *offset, uint64_t paddr, int facs64) facpp = find_table("facp");
/* add in the DSDT and X_DSDT addresses */ - stmp = (uint32_t *)(blob + BLOB_HEADER_SIZE + - facpp->offset + DSDT_ADDR_OFFSET); - ltmp = (uint64_t *)(blob + BLOB_HEADER_SIZE + - facpp->offset + X_DSDT_ADDR_OFFSET); + stmp = (uint32_t *)(blob + facpp->offset + DSDT_ADDR_OFFSET); + ltmp = (uint64_t *)(blob + facpp->offset + X_DSDT_ADDR_OFFSET); p = find_table("dsdt"); if (p) { if (facs64) { @@ -362,10 +356,8 @@ void fixup_facp(unsigned char *blob, int *offset, uint64_t paddr, int facs64) }
/* add in the FIRMWARE_CTRL and X_FIRMWARE_CTRL addresses */ - stmp = (uint32_t *)(blob + BLOB_HEADER_SIZE + - facpp->offset + FIRMWARE_CTRL_OFFSET); - ltmp = (uint64_t *)(blob + BLOB_HEADER_SIZE + - facpp->offset + X_FIRMWARE_CTRL_OFFSET); + stmp = (uint32_t *)(blob + facpp->offset + FIRMWARE_CTRL_OFFSET); + ltmp = (uint64_t *)(blob + facpp->offset + X_FIRMWARE_CTRL_OFFSET); p = find_table("facs"); if (p) { if (facs64) { @@ -382,9 +374,8 @@ void fixup_facp(unsigned char *blob, int *offset, uint64_t paddr, int facs64) }
/* always reset the checksum, even if it is seldom used */ - pcksum = (uint8_t *)(blob + BLOB_HEADER_SIZE); - pcksum = (uint8_t *)(pcksum + facpp->offset + FACP_CHECKSUM_OFFSET); - set_checksum((unsigned char *)(blob + BLOB_HEADER_SIZE + facpp->offset), + pcksum = (uint8_t *)(blob + facpp->offset + FACP_CHECKSUM_OFFSET); + set_checksum((unsigned char *)(blob + facpp->offset), facpp->file_size, pcksum); }
@@ -402,8 +393,7 @@ void fixup_xsdt(unsigned char **blob, int *offset, uint64_t paddr) int allowed;
xsdtp = find_table("xsdt"); - tmp = (uint64_t *)(*blob + BLOB_HEADER_SIZE + - xsdtp->offset + FACP_ADDR_OFFSET); + tmp = (uint64_t *)(*blob + xsdtp->offset + FACP_ADDR_OFFSET); allowed = (xsdtp->file_size - XSDT_HEADER_SIZE) / sizeof(uint64_t);
/* first table must be FACP (aka FADT) */ @@ -435,9 +425,8 @@ void fixup_xsdt(unsigned char **blob, int *offset, uint64_t paddr) }
/* always reset the checksum, even if it is seldom used */ - pcksum = (uint8_t *)(*blob + BLOB_HEADER_SIZE); - pcksum = (uint8_t *)(pcksum + xsdtp->offset + XSDT_CHECKSUM_OFFSET); - set_checksum((unsigned char *)(*blob + BLOB_HEADER_SIZE + xsdtp->offset), + pcksum = (uint8_t *)(*blob + xsdtp->offset + XSDT_CHECKSUM_OFFSET); + set_checksum((unsigned char *)(*blob + xsdtp->offset), xsdtp->file_size, pcksum); }
@@ -542,7 +531,6 @@ int main(int argc, char *argv[]) } else { printf("relocating blob to 0x%llx\n", paddr); } - paddr += BLOB_HEADER_SIZE; } else { printf("? missing required physical address parameter\n"); usage(); @@ -564,7 +552,7 @@ int main(int argc, char *argv[])
blob = (unsigned char *)malloc(BLOB_HEADER_SIZE);
- offset = 0; + offset = BLOB_HEADER_SIZE;
delta = add_table(&blob, "rsdp", offset, REQUIRED); if (!delta) diff --git a/tools/mab/mab.h b/tools/mab/mab.h index 5759e93..0548eff 100644 --- a/tools/mab/mab.h +++ b/tools/mab/mab.h @@ -27,7 +27,7 @@ #define SIG_LENGTH 4
/* VERSION a.b.c = <public release>.<functionality changes>.<bug fixes> */ -const char VERSION[] = { "0.27.3" }; +const char VERSION[] = { "0.27.4" }; const char PROGNAME[] = { "mab" };
char *known_sigs[] = {
From: Al Stone ahs3@redhat.com
Signed-off-by: Al Stone al.stone@linaro.org --- tools/mab/mab.c | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-)
diff --git a/tools/mab/mab.c b/tools/mab/mab.c index b3fa43b..8c9347b 100644 --- a/tools/mab/mab.c +++ b/tools/mab/mab.c @@ -32,7 +32,8 @@ void usage(void) { printf("%s %s\n", PROGNAME, VERSION); printf("usage: %s -d <dir> -o <blob> -i <manifest> ", PROGNAME); - printf("-p <paddr> [-c <iasl-cmd>] [-q] [-f]\n"); + printf("-p <paddr> [-c <iasl-cmd>] [-q]\n"); + printf(" [-f] [-H]\n"); printf("\n"); printf(" -d <dir> => directory of ASL files\n"); printf(" -f => if given, use FADT 32-bit fields\n"); @@ -40,7 +41,8 @@ void usage(void) printf(" -i <manifest> => list of AML files needed\n"); printf(" -c <iasl-cmd> => iasl command to use (default: iasl -l)\n"); printf(" -p <paddr> => physical address to relocate to\n"); - printf(" -q => if given, supress output\n"); + printf(" -q => if given, suppress output\n"); + printf(" -H => if given, do NOT add a blob header\n"); }
int get_file_size(char *fname) @@ -472,6 +474,7 @@ int main(int argc, char *argv[]) int opt; int quiet; int facs64; + int use_blob_header;
/* parameter handling */ manifest_name = NULL; @@ -481,8 +484,9 @@ int main(int argc, char *argv[]) paddr_cmd = NULL; quiet = 0; facs64 = 1; + use_blob_header = 1;
- while ((opt = getopt(argc, argv, "d:fo:i:c:p:q")) != EOF) { + while ((opt = getopt(argc, argv, "d:fo:i:c:p:qH")) != EOF) { switch (opt) { case 'd': homedir = optarg; @@ -505,6 +509,9 @@ int main(int argc, char *argv[]) case 'q': quiet = 1; break; + case 'H': + use_blob_header = 0; + break; default: usage(); return 1; @@ -552,7 +559,7 @@ int main(int argc, char *argv[])
blob = (unsigned char *)malloc(BLOB_HEADER_SIZE);
- offset = BLOB_HEADER_SIZE; + offset = use_blob_header ? BLOB_HEADER_SIZE : 0;
delta = add_table(&blob, "rsdp", offset, REQUIRED); if (!delta) @@ -587,10 +594,11 @@ int main(int argc, char *argv[]) fixup_xsdt(&blob, &offset, paddr);
/* set the final blob size in header */ - set_blob_header(blob, offset); + if (use_blob_header) + set_blob_header(blob, offset);
/* all done, so write out the blob */ - write_blob(homedir, acpi_blob_name, blob, offset + BLOB_HEADER_SIZE); + write_blob(homedir, acpi_blob_name, blob, offset);
/* make sure we had room for all of the tables */ LIST_FOREACH(np, &thead, tables) {
From: Al Stone ahs3@redhat.com
Signed-off-by: Al Stone al.stone@linaro.org --- tools/mab/mab.c | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-)
diff --git a/tools/mab/mab.c b/tools/mab/mab.c index 8c9347b..2ca11fc 100644 --- a/tools/mab/mab.c +++ b/tools/mab/mab.c @@ -615,9 +615,11 @@ int main(int argc, char *argv[]) printf("%s %s\n", PROGNAME, VERSION); ii = 0; LIST_FOREACH(np, &thead, tables) { - printf("[%03d] %4s : %s (%d bytes @ 0x%08x)\n", ii, - np->signature, basename(np->aml_name), - np->file_size, np->offset); + printf("[%03d] %4s : %s\n", ii, + np->signature, basename(np->aml_name)); + printf(" %d bytes @ 0x%016x, reloc @ 0x%016x\n", + np->file_size, np->offset, + np->offset + paddr); ii++; } }
From: Al Stone ahs3@redhat.com
Signed-off-by: Al Stone al.stone@linaro.org --- tools/mab/Changelog | 19 +++++++++++++++++++ tools/mab/mab.h | 2 +- 2 files changed, 20 insertions(+), 1 deletion(-)
diff --git a/tools/mab/Changelog b/tools/mab/Changelog index 599eda3..193c169 100644 --- a/tools/mab/Changelog +++ b/tools/mab/Changelog @@ -1,3 +1,22 @@ +0.28.1 -- 2013-07-19 + -- Bug fix: Makefile needs to rebuild if .h changes + -- Bug fix: Makefile needs to actually use CFLAGS + -- Feature/Bug: when doing relocation cleanup in the FADT, we need + to use _either_ the 32- or 64-bit addresses, and not both (which + is what we currently do); add a -f option to tell mab to use + 32-bit in the FADT, and default to 64-bit otherwise. NB: 64-bit + is always the safe choice but 32-bit needs to be allowed for those + that use it to ensure they use addresses < 4GB for loadable tables. + -- Bug fix: there are two checksums in the RSDP but we only set + the first one properly; set both of them. + -- Bug fix: print the actual blob offsets when reporting them with -q; + they were off by the BLOB_HEADER_SIZE when reported. This resulted + in far less usage of BLOB_HEADER_SIZE, simplifying the code a bit + as well + -- Feature: add -H option; when given, mab makes a blob that does NOT + have the blob header we have been using. + -- Feature: print out the physical address if not being quiet + 0.27.3 -- 2013-07-13 -- Bug fix: add in a Changelog -- Bug fix: if the XSDT was too small, it was only reported diff --git a/tools/mab/mab.h b/tools/mab/mab.h index 0548eff..15fb441 100644 --- a/tools/mab/mab.h +++ b/tools/mab/mab.h @@ -27,7 +27,7 @@ #define SIG_LENGTH 4
/* VERSION a.b.c = <public release>.<functionality changes>.<bug fixes> */ -const char VERSION[] = { "0.27.4" }; +const char VERSION[] = { "0.28.1" }; const char PROGNAME[] = { "mab" };
char *known_sigs[] = {
All the patches applied and tested on foundation-v8
Acked-by: Naresh Bhat naresh.bhat@linaro.org
On 23 August 2013 01:45, al.stone@linaro.org wrote:
From: Al Stone ahs3@redhat.com
While trying to figure out some problems I was having with my ACPI blobs, I ran into several things that needed fixing in mab. Some of these are innocuous, but some -- like using both 32- and 64-bit addresses in the FACS, and the RSDP checksums -- are actually in violation of the spec.
While I was there, I added a little more info in the verbose output, and corrected what was being printed out.
The new feature is that one can now use -H to produce a blob that does not have the header we've been using so far.
Changes from v1: -- This time, I actually _remembered_ to run checkpatch, so cleaned up the extra whitespace in patch 7/7.
Al Stone (7): mab: Makefile needs to rebuild if .h changes and use CFLAGS properly mab: use 32- or 64-bit FACS addresses in the FADT, not both mab: set both checksums in the RSDP, not just one mab: print out the correct offset in the blob mab: add option to NOT use a blob header, if needed mab: print out physical address when being verbose mab: update Changelog and version number for this patch series
tools/mab/Changelog | 19 +++++++++ tools/mab/Makefile | 6 +-- tools/mab/mab.c | 109 +++++++++++++++++++++++++++++++--------------------- tools/mab/mab.h | 5 ++- 4 files changed, 91 insertions(+), 48 deletions(-)
-- 1.8.3.1
Linaro-acpi mailing list Linaro-acpi@lists.linaro.org http://lists.linaro.org/mailman/listinfo/linaro-acpi