Root/package/mac80211/files/host_bin/b43-fwsquash.py

1#!/usr/bin/env python
2#
3# b43 firmware file squasher
4# Removes unnecessary firmware files
5#
6# Copyright (c) 2009 Michael Buesch <mb@bu3sch.de>
7#
8# Licensed under the GNU/GPL version 2 or (at your option) any later version.
9#
10
11import sys
12import os
13
14def usage():
15    print("Usage: %s PHYTYPES COREREVS /path/to/extracted/firmware" % sys.argv[0])
16    print("")
17    print("PHYTYPES is a comma separated list of:")
18    print("A => A-PHY")
19    print("AG => Dual A-PHY G-PHY")
20    print("G => G-PHY")
21    print("LP => LP-PHY")
22    print("N => N-PHY")
23    print("")
24    print("COREREVS is a comma separated list of core revision numbers.")
25
26if len(sys.argv) != 4:
27    usage()
28    sys.exit(1)
29
30phytypes = sys.argv[1]
31corerevs = sys.argv[2]
32fwpath = sys.argv[3]
33
34phytypes = phytypes.split(',')
35try:
36    corerevs = map(lambda r: int(r), corerevs.split(','))
37except ValueError:
38    print("ERROR: \"%s\" is not a valid COREREVS string\n" % corerevs)
39    usage()
40    sys.exit(1)
41
42
43fwfiles = os.listdir(fwpath)
44fwfiles = filter(lambda str: str.endswith(".fw"), fwfiles)
45if not fwfiles:
46    print("ERROR: No firmware files found in %s" % fwpath)
47    sys.exit(1)
48
49required_fwfiles = []
50
51def revs_match(revs_a, revs_b):
52    for rev in revs_a:
53        if rev in revs_b:
54            return True
55    return False
56
57def phytypes_match(types_a, types_b):
58    for type in types_a:
59        type = type.strip().upper()
60        if type in types_b:
61            return True
62    return False
63
64revmapping = {
65    "ucode2.fw" : (2,3,),
66    "ucode4.fw" : (4,),
67    "ucode5.fw" : (5,6,7,8,9,10,),
68    "ucode11.fw" : (11,12,),
69    "ucode13.fw" : (13,),
70    "ucode14.fw" : (14,),
71    "ucode15.fw" : (15,),
72    "pcm4.fw" : (1,2,3,4,),
73    "pcm5.fw" : (5,6,7,8,9,10,),
74}
75
76initvalmapping = {
77    "a0g1initvals5.fw" : ( (5,6,7,8,9,10,), ("AG",), ),
78    "a0g0initvals5.fw" : ( (5,6,7,8,9,10,), ("A", "AG",), ),
79    "b0g0initvals2.fw" : ( (2,4,), ("G",), ),
80    "b0g0initvals5.fw" : ( (5,6,7,8,9,10,), ("G",), ),
81    "b0g0initvals13.fw" : ( (13,), ("G",), ),
82    "n0initvals11.fw" : ( (11,12,), ("N",), ),
83    "lp0initvals13.fw" : ( (13,), ("LP",), ),
84    "lp0initvals14.fw" : ( (14,), ("LP",), ),
85    "lp0initvals15.fw" : ( (15,), ("LP",), ),
86    "a0g1bsinitvals5.fw" : ( (5,6,7,8,9,10,), ("AG",), ),
87    "a0g0bsinitvals5.fw" : ( (5,6,7,8,9,10,), ("A", "AG"), ),
88    "b0g0bsinitvals5.fw" : ( (5,6,7,8,9,10,), ("G",), ),
89    "n0bsinitvals11.fw" : ( (11,12,), ("N",), ),
90    "lp0bsinitvals13.fw" : ( (13,), ("LP",), ),
91    "lp0bsinitvals14.fw" : ( (14,), ("LP",), ),
92    "lp0bsinitvals15.fw" : ( (15,), ("LP",), ),
93}
94
95for f in fwfiles:
96    if f in revmapping:
97        if revs_match(corerevs, revmapping[f]):
98            required_fwfiles += [f]
99        continue
100    if f in initvalmapping:
101        if revs_match(corerevs, initvalmapping[f][0]) and\
102           phytypes_match(phytypes, initvalmapping[f][1]):
103            required_fwfiles += [f]
104        continue
105    print("WARNING: Firmware file %s not found in the mapping lists" % f)
106
107for f in fwfiles:
108    if f not in required_fwfiles:
109        print("Deleting %s" % f)
110        os.unlink(fwpath + '/' + f)
111
112

Archive Download this file



interactive