3 # b43 firmware file squasher
4 # Removes unnecessary firmware files
6 # Copyright (c) 2009 Michael Buesch <mb@bu3sch.de>
8 # Licensed under the GNU/GPL version 2 or (at your option) any later version.
15 print("Usage: %s PHYTYPES COREREVS /path/to/extracted/firmware" % sys.argv[0])
17 print("PHYTYPES is a comma separated list of:")
19 print("AG => Dual A-PHY G-PHY")
24 print("LCN => LCN-PHY")
26 print("COREREVS is a comma separated list of core revision numbers.")
28 if len(sys.argv) != 4:
32 phytypes = sys.argv[1]
33 corerevs = sys.argv[2]
36 phytypes = phytypes.split(',')
38 corerevs = map(lambda r: int(r), corerevs.split(','))
40 print("ERROR: \"%s\" is not a valid COREREVS string\n" % corerevs)
45 fwfiles = os.listdir(fwpath)
46 fwfiles = filter(lambda str: str.endswith(".fw"), fwfiles)
48 print("ERROR: No firmware files found in %s" % fwpath)
53 def revs_match(revs_a, revs_b):
59 def phytypes_match(types_a, types_b):
61 type = type.strip().upper()
69 "ucode5.fw" : (5,6,7,8,9,10,),
70 "ucode11.fw" : (11,12,),
74 "ucode16_mimo.fw" : (16,),
75 "ucode24_mimo.fw" : (24,),
76 "ucode29_mimo.fw" : (29,),
77 "pcm4.fw" : (1,2,3,4,),
78 "pcm5.fw" : (5,6,7,8,9,10,),
82 "a0g1initvals5.fw" : ( (5,6,7,8,9,10,), ("AG",), ),
83 "a0g0initvals5.fw" : ( (5,6,7,8,9,10,), ("A", "AG",), ),
84 "b0g0initvals2.fw" : ( (2,4,), ("G",), ),
85 "b0g0initvals5.fw" : ( (5,6,7,8,9,10,), ("G",), ),
86 "b0g0initvals13.fw" : ( (13,), ("G",), ),
87 "n0initvals11.fw" : ( (11,12,), ("N",), ),
88 "n0initvals16.fw" : ( (16,), ("N",), ),
89 "lp0initvals13.fw" : ( (13,), ("LP",), ),
90 "lp0initvals14.fw" : ( (14,), ("LP",), ),
91 "lp0initvals15.fw" : ( (15,), ("LP",), ),
92 "lcn0initvals24.fw" : ( (24,), ("LCN",), ),
93 "ht0initvals29.fw" : ( (29,), ("HT",), ),
94 "a0g1bsinitvals5.fw" : ( (5,6,7,8,9,10,), ("AG",), ),
95 "a0g0bsinitvals5.fw" : ( (5,6,7,8,9,10,), ("A", "AG"), ),
96 "b0g0bsinitvals5.fw" : ( (5,6,7,8,9,10,), ("G",), ),
97 "n0bsinitvals11.fw" : ( (11,12,), ("N",), ),
98 "n0bsinitvals16.fw" : ( (16,), ("N",), ),
99 "lp0bsinitvals13.fw" : ( (13,), ("LP",), ),
100 "lp0bsinitvals14.fw" : ( (14,), ("LP",), ),
101 "lp0bsinitvals15.fw" : ( (15,), ("LP",), ),
102 "lcn0bsinitvals24.fw" : ( (24,), ("LCN",), ),
103 "ht0bsinitvals29.fw" : ( (29,), ("HT",), ),
108 if revs_match(corerevs, revmapping[f]):
109 required_fwfiles += [f]
111 if f in initvalmapping:
112 if revs_match(corerevs, initvalmapping[f][0]) and\
113 phytypes_match(phytypes, initvalmapping[f][1]):
114 required_fwfiles += [f]
116 print("WARNING: Firmware file %s not found in the mapping lists" % f)
119 if f not in required_fwfiles:
120 print("Deleting %s" % f)
121 os.unlink(fwpath + '/' + f)