Exemple #1
0
def explain_r(reg, value, length):
    for i in regmap:
        if (reg & 0xff00) == regmap[i]:
            s = None
            try:
                s = getattr(fwtypes, "%s%s" % (i, "_regs"))
            except:
                return i

            for m in range(len(s._fields_)):
                name = s._fields_[m][0]
                typ = s._fields_[m][1]
                offset = getattr(s, name).offset
                size = fwtypes.sizeof(s._fields_[m][1])
                if (offset <= (reg & 0xff)) and ((offset + size) > (reg & 0xff)):
                    if length != size:
                        try:
                            for n in range(len(typ._fields_)):
                                tname = typ._fields_[n][0]
                                ttyp = typ._fields_[n][1]
                                toffset = getattr(typ, tname).offset
                                tsize = fwtypes.sizeof(ttyp)
                                if (offset + toffset) == (reg & 0xff) and tsize == length:
                                    name = "%s.%s" % (name, tname)
                                    typ = ttyp
                                    break
                        except:
                            print "WARNING (read %x, %s is %x in length)" % (length, s._fields_[m], size)
                    try:
                        return "%s.%s: %s" % (i, name, fdump(typ, value))
                    except:
                        return "%s.%s (%d)" % (i, name, length)
            return "(beyond %s)" % i
    return "(unknown)"
Exemple #2
0
def fdump(typ, value):
    ct = None
    if fwtypes.sizeof(typ) == 2:
        #nval = 0
        #for i in range(16):
        #    nval = (nval << 1) | (value & 1)
        #    value >>= 1
        #ct = fwtypes.c_short(nval)
        ct = fwtypes.c_short(flip(value, 16))
    else:
        #nval = 0
        #for i in range(32):
        #    nval = (nval << 1) | (value & 1)
        #    value >>= 1
        #ct = fwtypes.c_long(nval)
        ct = fwtypes.c_long(flip(value, 32))
    cp = fwtypes.pointer(ct)
    c = fwtypes.cast(cp, fwtypes.POINTER(typ))
    o = c.contents

    desc = ""
    for i in o._fields_:
        fname = i[0]
        if fname.startswith("reserved") and getattr(o, fname) == 0:
            continue
        blen = 0
        try:
            blen = i[2]
        except:
            blen = fwtypes.sizeof(i[1]) * 8
        desc += "%s: %x, " % (i[0], flip(getattr(o, i[0]), blen))

    desc = desc[:-2]
    return "{" + desc + "}"
Exemple #3
0
def fdump(typ, value):
    ct = None
    if fwtypes.sizeof(typ) == 2:
        #nval = 0
        #for i in range(16):
        #    nval = (nval << 1) | (value & 1)
        #    value >>= 1
        #ct = fwtypes.c_short(nval)
        ct = fwtypes.c_short(flip(value, 16))
    else:
        #nval = 0
        #for i in range(32):
        #    nval = (nval << 1) | (value & 1)
        #    value >>= 1
        #ct = fwtypes.c_long(nval)
        ct = fwtypes.c_long(flip(value, 32))
    cp = fwtypes.pointer(ct)
    c = fwtypes.cast(cp, fwtypes.POINTER(typ))
    o = c.contents

    desc = ""
    for i in o._fields_:
        fname = i[0]
        if fname.startswith("reserved") and getattr(o, fname) == 0:
            continue
        blen = 0
        try:
            blen = i[2]
        except:
            blen = fwtypes.sizeof(i[1]) * 8
        desc += "%s: %x, " % (i[0], flip(getattr(o, i[0]), blen))

    desc = desc[:-2]
    return "{" + desc + "}"
Exemple #4
0
def explain_r(reg, value, length):
    for i in regmap:
        if (reg & 0xff00) == regmap[i]:
            s = None
            try:
                s = getattr(fwtypes, "%s%s" % (i, "_regs"))
            except:
                return i

            for m in range(len(s._fields_)):
                name = s._fields_[m][0]
                typ = s._fields_[m][1]
                offset = getattr(s, name).offset
                size = fwtypes.sizeof(s._fields_[m][1])
                if (offset <= (reg & 0xff)) and ((offset + size) >
                                                 (reg & 0xff)):
                    if length != size:
                        try:
                            for n in range(len(typ._fields_)):
                                tname = typ._fields_[n][0]
                                ttyp = typ._fields_[n][1]
                                toffset = getattr(typ, tname).offset
                                tsize = fwtypes.sizeof(ttyp)
                                if (offset + toffset) == (
                                        reg & 0xff) and tsize == length:
                                    name = "%s.%s" % (name, tname)
                                    typ = ttyp
                                    break
                        except:
                            print "WARNING (read %x, %s is %x in length)" % (
                                length, s._fields_[m], size)
                    try:
                        return "%s.%s: %s" % (i, name, fdump(typ, value))
                    except:
                        return "%s.%s (%d)" % (i, name, length)
            return "(beyond %s)" % i
    return "(unknown)"