diff options
-rw-r--r-- | resources/utilities/ich9deblob/Makefile | 7 | ||||
-rw-r--r-- | resources/utilities/ich9deblob/common/common.c | 70 | ||||
-rw-r--r-- | resources/utilities/ich9deblob/common/common.h | 35 | ||||
-rw-r--r-- | resources/utilities/ich9deblob/ich9deblob.c | 39 |
4 files changed, 113 insertions, 38 deletions
diff --git a/resources/utilities/ich9deblob/Makefile b/resources/utilities/ich9deblob/Makefile index 38c822a7..06b1e32e 100644 --- a/resources/utilities/ich9deblob/Makefile +++ b/resources/utilities/ich9deblob/Makefile @@ -22,8 +22,11 @@ CFLAGS=-I. -Wall -g all: ich9deblob -ich9deblob: ich9deblob.o descriptor/descriptor.o gbe/gbe.o x86compatibility.o - $(CC) $(CFLAGS) ich9deblob.o descriptor/descriptor.o gbe/gbe.o x86compatibility.o -o ich9deblob +ich9deblob: ich9deblob.o common/common.o descriptor/descriptor.o gbe/gbe.o x86compatibility.o + $(CC) $(CFLAGS) ich9deblob.o common/common.o descriptor/descriptor.o gbe/gbe.o x86compatibility.o -o ich9deblob + +common/common.o: common/common.c + $(CC) $(CFLAGS) -c common/common.c -o common/common.o ich9deblob.o: ich9deblob.c $(CC) $(CFLAGS) -c ich9deblob.c -o ich9deblob.o diff --git a/resources/utilities/ich9deblob/common/common.c b/resources/utilities/ich9deblob/common/common.c new file mode 100644 index 00000000..cef5b3e0 --- /dev/null +++ b/resources/utilities/ich9deblob/common/common.c @@ -0,0 +1,70 @@ +/* + * common.c + * This file is part of the ich9deblob utility from the libreboot project + * + * Purpose: common functions/methods used by ich9deblob + * + * Copyright (C) 2014 Steve Shenton <sgsit@libreboot.org> + * Francis Rowe <info@gluglug.org.uk> + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +#include <stdio.h> +#include <string.h> +#include "common.h" + +/* + * create 12KiB file with descriptor, and then gbe immediately after. + */ +int notCreatedDescriptorGbeFile(struct DESCRIPTORREGIONRECORD descriptorStruct, struct GBEREGIONRECORD_8K gbeStruct8k, char* fileName) +{ + FILE* fileStream = NULL; + + /* These will have the structs copied to them */ + char descriptorBuffer[DESCRIPTORREGIONSIZE]; + char gbeBuffer8k[GBEREGIONSIZE_8K]; + + /* Copy the structs to buffers, to make writing them as files easier */ + memcpy(&descriptorBuffer, &descriptorStruct, DESCRIPTORREGIONSIZE); /* descriptor */ + memcpy(&gbeBuffer8k, &gbeStruct8k, GBEREGIONSIZE_8K); /* gbe */ + + /* delete old file before continuing */ + remove(fileName); + + /* open new file for writing the descriptor+gbe */ + fileStream = fopen(fileName, "ab"); + + /* write the descriptor region into the first part */ + if (DESCRIPTORREGIONSIZE != fwrite(descriptorBuffer, sizeof(char), DESCRIPTORREGIONSIZE, fileStream)) + { + printf("\nerror: writing descriptor region failed\n"); + return 1; + } + + /* add gbe to the end of the file */ + if (GBEREGIONSIZE_8K != fwrite(gbeBuffer8k, sizeof(char), GBEREGIONSIZE_8K, fileStream)) + { + printf("\nerror: writing GBe region failed\n"); + return 1; + } + + fclose(fileStream); + + printf("descriptor and gbe successfully written to the file: %s\n", fileName); + printf("Now do: dd if=deblobbed_descriptor.bin of=libreboot.rom bs=1 count=12k conv=notrunc\n"); + printf("(in other words, add the modified descriptor+gbe to your ROM image)\n\n"); + + return 0; +} diff --git a/resources/utilities/ich9deblob/common/common.h b/resources/utilities/ich9deblob/common/common.h new file mode 100644 index 00000000..e72821dc --- /dev/null +++ b/resources/utilities/ich9deblob/common/common.h @@ -0,0 +1,35 @@ +/* + * common.h + * This file is part of the ich9deblob utility from the libreboot project + * + * Purpose: header file for common.c + * + * Copyright (C) 2014 Steve Shenton <sgsit@libreboot.org> + * Francis Rowe <info@gluglug.org.uk> + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +#ifndef COMMON_H +#define COMMON_H + +#include <stdio.h> +#include <string.h> + +#include "../descriptor/descriptor.h" /* structs describing what's in the descriptor region */ +#include "../gbe/gbe.h" /* structs describing what's in the gbe region */ + +int notCreatedDescriptorGbeFile(struct DESCRIPTORREGIONRECORD descriptorStruct, struct GBEREGIONRECORD_8K gbeStruct8k, char* fileName); + +#endif diff --git a/resources/utilities/ich9deblob/ich9deblob.c b/resources/utilities/ich9deblob/ich9deblob.c index 7609bb4e..fafa9a2e 100644 --- a/resources/utilities/ich9deblob/ich9deblob.c +++ b/resources/utilities/ich9deblob/ich9deblob.c @@ -46,6 +46,7 @@ #include <stdio.h> #include <string.h> +#include "common/common.h" /* common functions used by ich9deblob */ #include "descriptor/descriptor.h" /* structs describing what's in the descriptor region */ #include "gbe/gbe.h" /* structs describing what's in the gbe region */ #include "x86compatibility.h" /* system/compiler compatibility checks. This code is not portable. */ @@ -58,7 +59,6 @@ int main(int argc, char *argv[]) */ char factoryDescriptorBuffer[DESCRIPTORREGIONSIZE]; struct DESCRIPTORREGIONRECORD factoryDescriptorStruct; - char deblobbedDescriptorBuffer[DESCRIPTORREGIONSIZE]; struct DESCRIPTORREGIONRECORD deblobbedDescriptorStruct; /* @@ -67,7 +67,6 @@ int main(int argc, char *argv[]) */ char factoryGbeBuffer8k[GBEREGIONSIZE_8K]; struct GBEREGIONRECORD_8K factoryGbeStruct8k; - char deblobbedGbeBuffer8k[GBEREGIONSIZE_8K]; struct GBEREGIONRECORD_8K deblobbedGbeStruct8k; /* @@ -220,42 +219,10 @@ int main(int argc, char *argv[]) * ------------------------------------------------------------------ */ - /* - * Convert the deblobbed descriptor and gbe back to byte arrays, so that they - * can more easily be written to files: - * deblobbed descriptor region - */ - memcpy(&deblobbedDescriptorBuffer, &deblobbedDescriptorStruct, DESCRIPTORREGIONSIZE); /* descriptor */ - memcpy(&deblobbedGbeBuffer8k, &deblobbedGbeStruct8k, GBEREGIONSIZE_8K); /* gbe */ - - /* delete old file before continuing */ - remove(deblobbedDescriptorFilename); - - /* open new file for writing the deblobbed descriptor+gbe */ - fileStream = fopen(deblobbedDescriptorFilename, "ab"); - - /* write the descriptor region into the first part */ - if (DESCRIPTORREGIONSIZE != fwrite(deblobbedDescriptorBuffer, sizeof(char), DESCRIPTORREGIONSIZE, fileStream)) - { - printf("\nerror: writing descriptor region failed\n"); - return 1; - } - - /* add gbe to the end of the file */ - if (GBEREGIONSIZE_8K != fwrite(deblobbedGbeBuffer8k, sizeof(char), GBEREGIONSIZE_8K, fileStream)) - { - printf("\nerror: writing GBe region failed\n"); + printf("\n"); + if (notCreatedDescriptorGbeFile(deblobbedDescriptorStruct, deblobbedGbeStruct8k, deblobbedDescriptorFilename)) { return 1; } - fclose(fileStream); - - printf("\ndeblobbed descriptor plus gbe successfully created: deblobbed_descriptor.bin \n"); - - // ------------------------------------------------------------------------------------- - - printf("\nNow do: dd if=deblobbed_descriptor.bin of=libreboot.rom bs=1 count=12k conv=notrunc"); - printf("\n(in other words, add the modified descriptor+gbe to your ROM image)\n\n"); - return 0; } |