summaryrefslogtreecommitdiff
path: root/sys/dev/microcode/tools
diff options
context:
space:
mode:
authorad <ad@NetBSD.org>2008-05-04 23:50:32 +0000
committerad <ad@NetBSD.org>2008-05-04 23:50:32 +0000
commitb68bfe3ffa8cbc2b0789eaf53140cc11c606a59a (patch)
tree00404cc4ee3c72ba4aa5e5e331d4f04f8a86ecd2 /sys/dev/microcode/tools
parente724ef3c860f55beb9a62f0e454eebb0a0286e85 (diff)
A couple of dumb utilities:
array2bin: take array[] from array.h and spit it out as a binary. bin2blob: take a binary file and output a compressed image as a C array.
Diffstat (limited to 'sys/dev/microcode/tools')
-rw-r--r--sys/dev/microcode/tools/Makefile14
-rw-r--r--sys/dev/microcode/tools/array2bin.c61
-rw-r--r--sys/dev/microcode/tools/bin2blob.c112
3 files changed, 187 insertions, 0 deletions
diff --git a/sys/dev/microcode/tools/Makefile b/sys/dev/microcode/tools/Makefile
new file mode 100644
index 00000000000..c7fedf1d5e3
--- /dev/null
+++ b/sys/dev/microcode/tools/Makefile
@@ -0,0 +1,14 @@
+# $NetBSD: Makefile,v 1.1 2008/05/04 23:50:32 ad Exp $
+
+BIN= bin2blob array2bin
+
+all: ${BIN}
+
+bin2blob: bin2blob.c
+ cc -Wall -O2 -lz -o bin2blob bin2blob.c
+
+array2bin: array2bin.c
+ cc -Wall -O2 -lz -o array2bin array2bin.c
+
+clean:
+ rm -f ${BIN} *~
diff --git a/sys/dev/microcode/tools/array2bin.c b/sys/dev/microcode/tools/array2bin.c
new file mode 100644
index 00000000000..34c962ed1b4
--- /dev/null
+++ b/sys/dev/microcode/tools/array2bin.c
@@ -0,0 +1,61 @@
+/* $NetBSD: array2bin.c,v 1.1 2008/05/04 23:50:32 ad Exp $ */
+
+/*-
+ * Copyright (c) 2008 The NetBSD Foundation, Inc.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/*
+ * Takes an array from array.h named array[], and spits it out as a
+ * binary image. NO DECOMPRESSION IS DONE. This is for taking existing
+ * images formatted as C arrays, for convertion to binary files.
+ */
+
+#include <sys/cdefs.h>
+#ifndef lint
+__RCSID("$NetBSD: array2bin.c,v 1.1 2008/05/04 23:50:32 ad Exp $");
+#endif /* !lint */
+
+#include <sys/module.h>
+#include <sys/stat.h>
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <string.h>
+#include <err.h>
+#include <zlib.h>
+
+#include "array.h"
+
+int main(int, char **);
+
+int
+main(int argc, char **argv)
+{
+
+ write(STDOUT_FILENO, array, sizeof(array));
+
+ return 0;
+}
diff --git a/sys/dev/microcode/tools/bin2blob.c b/sys/dev/microcode/tools/bin2blob.c
new file mode 100644
index 00000000000..19a348abeb0
--- /dev/null
+++ b/sys/dev/microcode/tools/bin2blob.c
@@ -0,0 +1,112 @@
+/* $NetBSD: bin2blob.c,v 1.1 2008/05/04 23:50:32 ad Exp $ */
+
+/*-
+ * Copyright (c) 2008 The NetBSD Foundation, Inc.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/*
+ * Reads data from stdin (must be a regular file so we can do stat()), and
+ * outputs a 32-bit array of format:
+ *
+ * [0] signature: BLOB
+ * [1] original, uncompressed length
+ * [2] length of compressed data that follows, unpadded
+ * [n] zlib compressed data, padded to 4 bytes
+ */
+
+#include <sys/cdefs.h>
+#ifndef lint
+__RCSID("$NetBSD: bin2blob.c,v 1.1 2008/05/04 23:50:32 ad Exp $");
+#endif /* !lint */
+
+#include <sys/module.h>
+#include <sys/stat.h>
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <string.h>
+#include <err.h>
+#include <zlib.h>
+
+int main(int, char **);
+
+#define SIG 0x424c4f42
+
+void
+put(uint32_t val)
+{
+ static int n;
+
+ switch (n) {
+ case 6:
+ putc('\n', stdout);
+ n = 0;
+ /* FALLTHROUGH */
+ case 0:
+ putc('\t', stdout);
+ break;
+ }
+ printf("0x%08x,", val);
+ n++;
+}
+
+int
+main(int argc, char **argv)
+{
+ struct stat sb;
+ uint8_t *src, *dst;
+ u_long slen, dlen;
+ uint32_t *dp;
+
+ if (fstat(STDIN_FILENO, &sb) < 0)
+ err(1, "stat(stdin)");
+
+ src = malloc(sb.st_size);
+ dlen = sb.st_size * 1002 / 1000 + 12 + 3 + 4*2;
+ dst = malloc(dlen);
+ if (src == NULL || dst == NULL)
+ errx(1, "malloc");
+
+ if (read(STDIN_FILENO, src, sb.st_size) != sb.st_size)
+ errx(1, "read");
+
+ slen = sb.st_size;
+ memset(dst, 0, dlen);
+ if (compress2(dst, &dlen, src, slen, 9) != Z_OK)
+ errx(1, "compress2");
+
+ printf("static const uint32_t blob[] = {\n");
+ put(SIG);
+ put(slen);
+ put(dlen);
+ dlen = ((dlen + 3) & ~3) >> 2;
+ dp = (uint32_t *)dst;
+ while (dlen--)
+ put(*dp++);
+ printf("\n};\n");
+
+ exit(EXIT_SUCCESS);
+}