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    "ucode16_mimo.fw" : (16,),
73    "ucode24_mimo.fw" : (24,),
74    "ucode29_mimo.fw" : (29,),
75    "pcm4.fw" : (1,2,3,4,),
76    "pcm5.fw" : (5,6,7,8,9,10,),
77}
78
79initvalmapping = {
80    "a0g1initvals5.fw" : ( (5,6,7,8,9,10,), ("AG",), ),
81    "a0g0initvals5.fw" : ( (5,6,7,8,9,10,), ("A", "AG",), ),
82    "b0g0initvals2.fw" : ( (2,4,), ("G",), ),
83    "b0g0initvals5.fw" : ( (5,6,7,8,9,10,), ("G",), ),
84    "b0g0initvals13.fw" : ( (13,), ("G",), ),
85    "n0initvals11.fw" : ( (11,12,), ("N",), ),
86    "n0initvals16.fw" : ( (16,), ("N",), ),
87    "lp0initvals13.fw" : ( (13,), ("LP",), ),
88    "lp0initvals14.fw" : ( (14,), ("LP",), ),
89    "lp0initvals15.fw" : ( (15,), ("LP",), ),
90    "a0g1bsinitvals5.fw" : ( (5,6,7,8,9,10,), ("AG",), ),
91    "a0g0bsinitvals5.fw" : ( (5,6,7,8,9,10,), ("A", "AG"), ),
92    "b0g0bsinitvals5.fw" : ( (5,6,7,8,9,10,), ("G",), ),
93    "n0bsinitvals11.fw" : ( (11,12,), ("N",), ),
94    "n0bsinitvals16.fw" : ( (16,), ("N",), ),
95    "lp0bsinitvals13.fw" : ( (13,), ("LP",), ),
96    "lp0bsinitvals14.fw" : ( (14,), ("LP",), ),
97    "lp0bsinitvals15.fw" : ( (15,), ("LP",), ),
98    "lcn0initvals24.fw" : ( (24,), ("LNC",), ),
99    "ht0initvals29.fw" : ( (29,), ("HT",), ),
100}
101
102for f in fwfiles:
103    if f in revmapping:
104        if revs_match(corerevs, revmapping[f]):
105            required_fwfiles += [f]
106        continue
107    if f in initvalmapping:
108        if revs_match(corerevs, initvalmapping[f][0]) and\
109           phytypes_match(phytypes, initvalmapping[f][1]):
110            required_fwfiles += [f]
111        continue
112    print("WARNING: Firmware file %s not found in the mapping lists" % f)
113
114for f in fwfiles:
115    if f not in required_fwfiles:
116        print("Deleting %s" % f)
117        os.unlink(fwpath + '/' + f)
118
119

Archive Download this file



interactive