X-Git-Url: https://jxself.org/git/?a=blobdiff_plain;f=debug%2Fb43-fwdump;h=24f1f0d23d8e99cbb60b24eb7180e0eec93ee100;hb=28703f82744ed3eb122ae33474e9c53f4fe528d3;hp=4308d60704fb0828c02ba28d6628e6df4601db7c;hpb=2636a4a663b8115dc4c41bf3be7ee816cf6f8b15;p=b43-tools.git diff --git a/debug/b43-fwdump b/debug/b43-fwdump index 4308d60..24f1f0d 100755 --- a/debug/b43-fwdump +++ b/debug/b43-fwdump @@ -32,11 +32,13 @@ def usage(): print "Usage: b43-fwdump [OPTIONS]" print "" print "-h|--help Print this help text" - print "-p|--phy PHY The PHY to use. For example phy0" + print "-p|--phy WIPHY The WIPHY to use. For example phy0." + print " Can be omitted, if there is only one device in the system." print "-b|--binary BIN The firmware binary. This is required for" print " an instruction dump." print "-d|--dasmopt OPT Additional options to the disassembler." print "-s|--shm Also dump SHM." + print "-S|--shmbin Do a binary SHM dump, only." return def parseArgs(): @@ -44,16 +46,18 @@ def parseArgs(): global binary global dasmopt global dumpShm + global dumpShmBin phy = None # Autodetect binary = None # No instruction dump dasmopt = "" dumpShm = False + dumpShmBin = False try: (opts, args) = getopt.getopt(sys.argv[1:], - "hp:b:d:s", - [ "help", "phy=", "binary=", "dasmopt=", "shm" ]) + "hp:b:d:sS", + [ "help", "phy=", "binary=", "dasmopt=", "shm", "shmbin" ]) except getopt.GetoptError: usage() sys.exit(1) @@ -70,6 +74,8 @@ def parseArgs(): dasmopt = v if o in ("-s", "--shm"): dumpShm = True + if o in ("-S", "--shmbin"): + dumpShmBin = True return @@ -85,16 +91,6 @@ def dump_regs(prefix, regs): stdout.write("\n") return -def disassembleText(text): - input = NamedTemporaryFile() - output = NamedTemporaryFile() - - input.write(text) - input.flush() - os.system("b43-dasm %s %s %s --paddr" % (input.name, dasmopt, output.name)) - - return output.read() - def makeShortDump(dasm, pc): dasm = dasm.splitlines() i = 0 @@ -130,12 +126,17 @@ def main(): gpr = b43.getGprs() lr = b43.getLinkRegs() off = b43.getOffsetRegs() - if dumpShm: + if dumpShm or dumpShmBin: shm = b43.shmSharedRead() dbg = b43.getPsmDebug() psmcond = b43.getPsmConditions() b43.ucodeStart() + if dumpShmBin: + # Only do a binary SHM dump + stdout.write(shm) + sys.exit(0) + print "--- B43 microcode state dump ---" print "PC: %03X PSM-COND: %04X" % (dbg.getPc(), psmcond) print "Link registers:" @@ -152,7 +153,7 @@ def main(): except IOError, e: print "Could not read binary file %s: %s" % (binary, e.strerror) sys.exit(1) - dasm = disassembleText(bintext) + dasm = Disassembler(bintext, dasmopt + "--paddr").getAsm() print makeShortDump(dasm, dbg.getPc()) else: print ""