b43-ivaldump: Add a tool for dumping initvals files.
authorMichael Buesch <mb@bu3sch.de>
Thu, 19 Jun 2008 22:23:34 +0000 (00:23 +0200)
committerMichael Buesch <mb@bu3sch.de>
Thu, 19 Jun 2008 22:23:34 +0000 (00:23 +0200)
Signed-off-by: Michael Buesch <mb@bu3sch.de>
disassembler/Makefile
disassembler/b43-ivaldump [new file with mode: 0755]

index efb41257142ae4790df665bfa7cad8f195ee08c1..8651626379da3e955117bb318066b2a5f43e2c89 100644 (file)
@@ -22,6 +22,7 @@ $(BIN): $(OBJECTS)
 
 install: all
        -install -o 0 -g 0 -m 755 $(BIN) $(PREFIX)/bin/
+       -install -o 0 -g 0 -m 755 b43-ivaldump $(PREFIX)/bin/
 
 clean:
        -rm -f *~ *.o *.orig *.rej
diff --git a/disassembler/b43-ivaldump b/disassembler/b43-ivaldump
new file mode 100755 (executable)
index 0000000..18164ee
--- /dev/null
@@ -0,0 +1,78 @@
+#!/usr/bin/env python
+"""
+#   A small script to dump the contents of a b43 initvals file
+#
+#   Copyright (C) 2008  Michael Buesch <mb@bu3sch.de>
+#
+#   This program is free software; you can redistribute it and/or modify
+#   it under the terms of the GNU General Public License version 2
+#   as published by the Free Software Foundation.
+#
+#   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.
+"""
+
+import sys
+
+
+def usage():
+       print "b43 initvals file dumper"
+       print ""
+       print "Copyright (C) 2008 Michael Buesch <mb@bu3sch.de>"
+       print "Licensed under the GNU/GPL version 2"
+       print ""
+       print "Usage: b43-ivaldump FILE"
+       print ""
+       print "FILE is the file that is going to be dumped"
+       print ""
+       print "The dump will look like this:"
+       print "XX-bit  0xDEAD -> 0xBEEF"
+       print "This is an XX-bit write of the value 0xDEAD to register 0xBEEF"
+       return
+
+if len(sys.argv) != 2:
+       usage()
+       sys.exit(1)
+
+filename = sys.argv[1]
+
+try:
+       ivals = file(filename).read()
+except IOError, e:
+       print "Could not read the initvals file: %s" % e.strerror
+       sys.exit(1)
+
+if len(ivals) < 8:
+       print "The file is too small. This can not be an initvals file."
+       sys.exit(1)
+
+if ivals[0] != "i":
+       print "This is not an initvals file. (Wrong header magic)."
+       sys.exit(1)
+
+if ord(ivals[1]) != 1:
+       print "Initvals file version %d is not supported by this program." % ord(ivals[1])
+       sys.exit(1)
+
+idx = 8 # skip header
+
+while idx < len(ivals):
+       off_sz = ord(ivals[idx + 0]) << 8
+       off_sz |= ord(ivals[idx + 1])
+       offset = off_sz & 0x7FFF
+       dword = (off_sz & 0x8000) != 0
+
+       if dword:
+               data = ord(ivals[idx + 2]) << 24
+               data |= ord(ivals[idx + 3]) << 16
+               data |= ord(ivals[idx + 4]) << 8
+               data |= ord(ivals[idx + 5]) << 0
+               idx += 6
+               print "32-bit  0x%08X -> 0x%04X" % (data, offset)
+       else:
+               data = ord(ivals[idx + 2]) << 8
+               data |= ord(ivals[idx + 3]) << 0
+               idx += 4
+               print "16-bit  0x%04X -> 0x%04X" % (data, offset)