summary refs log tree commit diff stats
path: root/scripts/signrom.py
diff options
context:
space:
mode:
authorAnthony Liguori <aliguori@us.ibm.com>2012-04-16 12:56:28 -0500
committerAnthony Liguori <aliguori@us.ibm.com>2012-04-16 12:56:28 -0500
commitfc34e77bb3dd41a9932ec5830c06bcade1f5a08e (patch)
tree93a7c849cc543757381e0fd230e46debf377dcbb /scripts/signrom.py
parent52346e8c75eba1ece4a782565d5a5ce2e23d5117 (diff)
parent9bea6a2956e5d473b8914b2a5483fbf187b33844 (diff)
downloadfocaccia-qemu-fc34e77bb3dd41a9932ec5830c06bcade1f5a08e.tar.gz
focaccia-qemu-fc34e77bb3dd41a9932ec5830c06bcade1f5a08e.zip
Merge remote-tracking branch 'kiszka/queues/pending' into staging
* kiszka/queues/pending:
  vapic: Disable for pre-1.1 machines
  Kick io-thread on qemu_chr_accept_input
  pcnet: Properly handle TX requests during Link Fail
  pcnet: Clear ERR in CSR0 on stop
  signrom: Rewrite as python script

Conflicts:
	hw/pc_piix.c

Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
Diffstat (limited to 'scripts/signrom.py')
-rw-r--r--scripts/signrom.py40
1 files changed, 40 insertions, 0 deletions
diff --git a/scripts/signrom.py b/scripts/signrom.py
new file mode 100644
index 0000000000..f9c35ccfca
--- /dev/null
+++ b/scripts/signrom.py
@@ -0,0 +1,40 @@
+#
+# Option ROM signing utility
+#
+# Authors:
+#  Jan Kiszka <jan.kiszka@siemens.com>
+#
+# This work is licensed under the terms of the GNU GPL, version 2 or later.
+# See the COPYING file in the top-level directory.
+
+import sys
+import struct
+
+if len(sys.argv) < 3:
+    print('usage: signrom.py input output')
+    sys.exit(1)
+
+fin = open(sys.argv[1], 'rb')
+fout = open(sys.argv[2], 'wb')
+
+fin.seek(2)
+size = ord(fin.read(1)) * 512 - 1
+
+fin.seek(0)
+data = fin.read(size)
+fout.write(data)
+
+checksum = 0
+for b in data:
+    # catch Python 2 vs. 3 differences
+    if isinstance(b, int):
+        checksum += b
+    else:
+        checksum += ord(b)
+checksum = (256 - checksum) % 256
+
+# Python 3 no longer allows chr(checksum)
+fout.write(struct.pack('B', checksum))
+
+fin.close()
+fout.close()