aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--resources/utilities/ich9deblob/Makefile7
-rw-r--r--resources/utilities/ich9deblob/common/common.c70
-rw-r--r--resources/utilities/ich9deblob/common/common.h35
-rw-r--r--resources/utilities/ich9deblob/ich9deblob.c39
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;
}