Fixed deblobbing of b43legacy, ipw2100, libertas
[releases.git] / deblob-check
index a81daa1bc904fa8b017257a5ba37c24012d7e0b5..0621c9afdddfeefa2827e7d2743c43f147a7500c 100755 (executable)
@@ -1,6 +1,6 @@
 #! /bin/sh
 
-# deblob-check version 2009-03-18
+# deblob-check version 2009-03-19
 # Inspired in gNewSense's find-firmware script.
 # Written by Alexandre Oliva <lxoliva@fsfla.org>
 
@@ -395,7 +395,9 @@ case $1 in
   set_sed_cmd () {
     set_sedmain "" "" "
 i\\
-$file
+$file\\
+/*(DEBLOB-\\
+ERROR)*/
 q 1;"
   }
   ;;
@@ -405,10 +407,14 @@ q 1;"
   set_sed_cmd () {
     set_sedmain "
 i\\
-$file
+$file\\
+/*(DEBLOB-\\
+ERROR)*/
 q 1;" "" "
 i\\
-$file
+$file\\
+/*(DEBLOB-\\
+ERROR)*/
 q 1;"
   }
   ;;
@@ -438,7 +444,9 @@ q 1;"
   set_sed_cmd () {
     set_sedmain "
 i\\
-$file
+$file\\
+/*(DEBLOB-\\
+ERROR)*/
 q 1;"
   }
   ;;
@@ -904,8 +912,8 @@ set_except () {
     blob '     r128_cce_load_microcode([^;]*);' drivers/gpu/drm/r128/r128_cce.c
 
     blob 'static const u32 R[S0-9]*0_cp_microcode\[\]\[2\] = {[^{};]*};\([\n][\n]*static const u32 R[S0-9]*0_cp_microcode\[\]\[2\] = {[^{};]*};\)*' drivers/gpu/drm/radeon/radeon_microcode.h
-    blob 'static void radeon_cp_load_microcode([^{]*)[\n]{[\n]\([^}]\|[^\n}]}*\)*[\n]}[\n]' drivers/gpu/drm/radeon/radeon_cp.c
-    blob '     radeon_cp_load_microcode([^;]*);' drivers/gpu/drm/radeon/radeon_cp.c
+    blob '\([/][*] Load the microcode\([^/]\|[^*/][/]*\)*[*][/][\n]\)\?static void radeon_cp_load_microcode([^{]*)[\n]{[\n]\([^}]\|[^\n}]}*\)*[\n]}[\n]' drivers/gpu/drm/radeon/radeon_cp.c
+    blobna 'radeon_cp_load_microcode([^;]*);' drivers/gpu/drm/radeon/radeon_cp.c
 
     blob 'sub \(sp887[0x]\|tda1004\(5\|6\(lifeview\)\?\)\|av7110\|dec\(2\(00\|54\)0t\|3000s\)\|opera1\|vp7041\|dibusb\|nxt200[24]\|or51\(211\|132_\(qam\|vsb\)\)\|bluebird\) *{\([^}]*\|[^\n]}*\)[\n]}\([\n][\n]*sub \(sp887[0x]\|tda1004\(5\|6\(lifeview\)\?\)\|av7110\|dec\(2\(00\|54\)0t\|3000s\)\|opera1\|vp7041\|dibusb\|nxt200[24]\|or51\(211\|132_\(qam\|vsb\)\)\|bluebird\) *{\([^}]*\|[^\n]}*\)[\n]}\)*' Documentation/dvb/get_dvb_firmware
     blobna 'Please use[^\n]*firmware[^\n]*sp887x[^\n]*\([\n][^\n]\+\)\+' Documentation/dvb/avermedia.txt
@@ -939,13 +947,15 @@ set_except () {
 
     blob 'static u32 tigon2\?Fw\(Text\|Rodata\|Data\)\[(MAX_\(TEXT\|RODATA\|DATA\)_LEN\/4) + 1\] __devinitdata = {[^}]*};\([\n]static u32 tigon2\?Fw\(Text\|Rodata\|Data\)\[(MAX_\(TEXT\|RODATA\|DATA\)_LEN\/4) + 1\] __devinitdata = {[^}]*};\)*' drivers/net/acenic_firwmare.h
     blob '#define tigon2\?Fw[^ ]*\(Addr\|Len\) 0x[^\n]*\([\n]#define tigon2\?Fw[^ ]*\(Addr\|Len\) 0x[^\n]*\)\+' drivers/net/acenic_firmware.h
-    blob '\([/][*]\([^/]*\|[^*/][/]*\)*Do not try to clear\([^/]*\|[^*/][/]*\)*[*][/][\n]      \)\?ace_clear[^;]*;[\n]\([^}]*{[^}]*ace_copy[^}]*tigon2\?Fw[^}]*}\)*[\n]\+      return 0;[\n]}'
+    blob '\([/][*]\([^/]*\|[^*/][/]*\)*Do not try to clear\([^/]*\|[^*/][/]*\)*[*][/][\n]      \)\?ace_clear[^;]*;[\n]\([^}]*{[^}]*ace_copy[^}]*tigon2\?Fw[^}]*}\)*[\n]\+      return 0;[\n]}' drivers/net/acenic.c
+    blob 'if (\(ACE_IS_TIGON_I(ap)\|ap->version == 2\))[\n]            writel(tigon2\?FwStartAddr, [&]regs->Pc);\([\n] if (\(ACE_IS_TIGON_I(ap)\|ap->version == 2\))[\n]               writel(tigon2\?FwStartAddr, [&]regs->Pc);\)*' drivers/net/acenic.c
 
     blob '#include "starfire_firmware\.h"' drivers/net/starfire.c
     blob '[/][*]\([^/]*\|[^*/][/]*\)*Load Rx\/Tx firmware\([^/]*\|[^*/][/]*\)*[*][/]\([\n]     for ([^)]*FIRMWARE_[RT]X_SIZE[^)]*)[\n]         writel[^;]*firmware_[rt]x[^;]*;\)\+' drivers/net/starfire.c
 
     blob 'static \(u8\|const u32\|struct fw_info\) bnx2_\(\(COM\|CP\|[RT]XP\|TPAT\)_b0[69]Fw\(Text\|Data\|Rodata\)\|\(xi_\)\?rv2p_proc[12]\|\(com\|cp\|[rt]xp\|tpat\)_fw_0[69]\)\(\[[^]};]*\]\)* = {[^}]*};\([\n][\n]*static \(u8\|const u32\|struct fw_info\) bnx2_\(\(COM\|CP\|[RT]XP\|TPAT\)_b0[69]Fw\(Text\|Data\|Rodata\)\|\(xi_\)\?rv2p_proc[12]\|\(com\|cp\|[rt]xp\|tpat\)_fw_0[69]\)\(\[[^]};]*\]\)* = {[^}]*};\)*' 'drivers/net/bnx2_fw2\?.h'
     blob '#include "bnx2_fw2\?\.h"\([\n][\n]*#include "bnx2_fw2\?\.h"\)*' drivers/net/bnx2.c
+    blob 'static void[\n]load_rv2p_fw([^{]*)[\n]{[\n]\([^}]\|[^\n}]}*\)*[\n]}' drivers/net/bnx2.c
     blob 'static int[\n]bnx2_init_cpus([^{]*)[\n]{[\n]\([^}]\|[^\n}]}*\)*[\n]}' drivers/net/bnx2.c
 
     # init_data_e1h? might actually be just data, but it doesn't
@@ -991,7 +1001,7 @@ set_except () {
 
     blob 'static const u8 microcode\[\] = {[^}]*} *;' drivers/net/tokenring/3c359_microcode.h
     blob '#include "3c359_microcode\.h"' drivers/net/tokenring/3c359.c
-    blobna '\(printk(KERN_INFO "3C359: Uploading Microcode: ");[\n     ]*\)\?for ([^{]*\(mc_size[^{]*) {[^}]*writeb(microcode\[\|) {[^}]*writeb(microcode\[mc_size\)[^}]*}\([\n][      ]*printk[^\n]*;[\n      ]*for ([^{]*\(mc_size[^{]*) {[^}]*writeb(microcode\[\|) {[^}]*writeb(microcode\[mc_size\)[^}]*}\)*' drivers/net/tokenring/3c359.c
+    blobna '[/][*][    \n*]* Now to write the microcode\([^/]\|[^*/][/]*\)*[*][/][\n   ]*start = (0xFFFF - (mc_size)[^;]*;[\n  ]*[/][*]\([^/]\|[^*/][/]*\)*[*][/][\n   ]*printk(KERN_INFO "3C359: Uploading Microcode: ");[\n  ]*for ([^{]*\(mc_size[^{]*) {[^}]*writeb(microcode\[\|) {[^}]*writeb(microcode\[mc_size\)[^}]*}\([\n][  ]*printk[^\n]*;[\n      ]*for ([^{]*\(mc_size[^{]*) {[^}]*writeb(microcode\[\|) {[^}]*writeb(microcode\[mc_size\)[^}]*}\)*' drivers/net/tokenring/3c359.c
 
     blobname 'tr_smctr\.bin' drivers/net/tokenring/smctr.c
 
@@ -1098,22 +1108,29 @@ set_except () {
     blobname 'dvb-fe-xc5000-1\.1\.fw' drivers/media/common/tuners/xc5000.c
 
     blobname '4210\(100[12]\|%4X\)\.sb' drivers/net/irda/irda-usb.c
+    blobna '[/][*][    \n*]* Known firmware\([^/]\|[^*/][/]*\)*\(STIR421x\|4210\(100[12]\|%4X\)\.sb\)\([^/]\|[^*/][/]*\)*[*][/]' drivers/net/irda/irda-usb.c
 
     blobname 'myri10ge_\(rss_\)\?ethp\?_z8e\.dat' drivers/net/myri10ge.c
+    blobna 'If the driver can neither enable ECRC\([^/]\|[^*/][/]*\)*myri10ge_\(rss_\)\?ethp\?_z8e\.dat\([^/]\|[^*/][/]*\)*[*][/]' drivers/net/myri10ge.c
 
     blobname 'spider_fw\.bin' drivers/net/spider_net.h
 
     blobname 'tms380tr\.bin' drivers/net/tokenring/tms380tr.c
 
     blobname 'atmel_at76c50\(2\([de]\|_3com\)\?\|4a\?\(_2958\)\?\|6\)\(\.bin\)\?' drivers/net/wireless/atmel.c
+    accept '   *priv->firmware = \(NULL\|new_firmware\);' drivers/net/wireless/atmel.c
 
-    blobname 'b43[^/]*[/]\(%s\|ucode\(5\|1[13]\)\|pcm5\|[abn]0g[01]initvals\(5\|1[13]\)\)\.fw' 'drivers/net/wireless/b43\(legacy\)\?/main.c'
+    blobname 'b43\(legacy\)\?\(%s\)\?[/]\(%s\|ucode\(5\|1[13]\)\|pcm5\|[abn]0g[01]initvals\(5\|1[13]\)\)\.fw' 'drivers/net/wireless/b43\(legacy\)\?/main.c'
+    blobna 'b43legacyerr([^;]*must go to http[^;]*b43#devicefirmware[^;]*);' drivers/net/wireless/b43legacy/main.c
 
-    blob '#define IPW2100_FW_\(\(MAJOR\|MINOR\)\(_VERSION\|(x)\)\|VERSION\) \([^\n]\|[\\][\n]\)*\([\n][\n]*#define IPW2100_FW_\(\(MAJOR\|MINOR\)\(_VERSION\|(x)\)\|VERSION\) \([^\n]\|[\\][\n]\)*\)*' drivers/net/wireless/ipw2100.c
+    blob '#define IPW2100_FW_\(\(\(MAJOR\|MINOR\)_VERSION\|\(MAJOR\|MINOR\)(x)\)\|VERSION\)\([^\n]*\\[\n]\)*[^\n]*\([\n][\n]*#define IPW2100_FW_\(\(\(MAJOR\|MINOR\)_VERSION\|\(MAJOR\|MINOR\)(x)\)\|VERSION\)\([^\n]*\\[\n]\)*[^\n]*\)*' drivers/net/wireless/ipw2100.c
     blobname 'ipw2100-\("\([^"\n]\|[\\][\n]\)*"\([^"]\|[\\]["]\)*\)\+' drivers/net/wireless/ipw2100.c
     blobname '__stringify(IPW2100_FW_MINOR_VERSION)' drivers/net/wireless/ipw2100.c
+    accept ' *Portions of ipw2100_\(do_\)\?mod_firmware_load[,         ]*\(ipw2100_\(do_\)\?mod_firmware_load[,        and\n]*\)*' drivers/net/wireless/ipw2100.c
+    blob 'static int ipw2100_mod_firmware_load([^{]*)[\n]{\([^}]\|[^\n]}*\)*[\n]}' drivers/net/wireless/ipw2100.c
+    blob 'ipw2100_mod_firmware_load([^;]*);' drivers/net/wireless/ipw2100.c
 
-    accept '[/][*] Call this function from process context\([^/]\|[^*][/]*\)*request_firmware' drivers/net/wireless/ipw2200.c
+    accept '[/][*] Call this function from process context\([^/]\|[^*/][/]*\)*request_firmware' drivers/net/wireless/ipw2200.c
     blobname 'ipw2200-\(i\?bss\|sniffer\)\.fw' drivers/net/wireless/ipw2200.c
     accept '           IPW_ERROR("%s request_firmware failed' drivers/net/wireless/ipw2200.c
 
@@ -1122,7 +1139,9 @@ set_except () {
 
     blobname 'libertas_cs\(_helper\)\?\.fw' drivers/net/wireless/libertas/if_cs.c
     blobname 'sd\(8385\|8686\)\(_helper\)\?\.bin' drivers/net/wireless/libertas/if_sdio.c
+    accept '   *card->firmware = \(if_sdio\|lbs_fw\)' drivers/net/wireless/libertas/if_sdio.c
     blobname 'usb8388\(-5\.126\.0\.p5\)\?\.bin' drivers/net/wireless/libertas/if_usb.c
+    blobname '[/][*]\([^/]\|[^*/][/]*\)*usb8388\(-5\.126\.0\.p5\)\?\.bin[/][*]\([^/]\|[^*/][/]*\)*' drivers/net/wireless/libertas/if_usb.c
     accept '           lbs_pr_err("request_firmware() failed' drivers/net/wireless/if_usb.c
     blobna 'o\. Copy the firmware image[^\n]*usb8388\([^\n]\|[\n][     ]*[^    \n]\)*' drivers/net/wireless/libertas/README
     blobna '\[fw_name=usb8388[^]]*\]' drivers/net/wireless/libertas/README
@@ -1132,7 +1151,7 @@ set_except () {
     blobname 'lbtf_usb\.bin' drivers/net/wireless/libertas_tf/if_usb.c
 
     blobname 'isl38\(86\|87usb_bare\|90usb\)' 'drivers/net/wireless/p54/p54\(pci\.c\|usb\.[ch]\)'
-    blob '[/][*] for isl3886 register definitions\([^/]\|[^*][/]*\)*[*][/]' drivers/net/wireless/p54/p54usb.h
+    blob '[/][*] for isl3886 register definitions\([^/]\|[^*/][/]*\)*[*][/]' drivers/net/wireless/p54/p54usb.h
     blobna 'If you enable this\([^\n]\|[\n][   ]*[^    \n]\)*isl3890\([^\n]\|[\n][     ]*[^    \n]\)*' drivers/net/wireless/Kconfig
 
     blobname 'isl38\(77\|86\|90\)' drivers/net/wireless/prism54/islpci_dev.c
@@ -1174,7 +1193,7 @@ set_except () {
 
     blobname 'fsl_qe_ucode_uart_\(%u\|0-9]*\)_\(%u\|[0-9]*\)\(%u\|[0-9]*\)\.bin' drivers/serial/ucc_uart.c
 
-    blobname 'atmel_at76c50\(3-\(i386[13]\|rfmd\(-acc\)\?\|5\(a\(mx\)\?\)\?-rfmd\(2958\)\?\)\)\.bin' drivers/staging/at76_usb/at76_usb.c
+    blobname 'atmel_at76c50\(3-\(i386[13]\|rfmd\(-acc\)\?\)\|5\(a\(mx\)\?\)\?-rfmd\(2958\)\?\)\.bin' 'drivers/\(staging\|net/wireless\)/at76_usb/at76_usb\.c'
 
     blobname 'go7007\(fw\|tv\)\.bin' 'drivers/staging/go7007/\(go7007-\(driver\|usb\)\|saa7134-go7007\)\.c'
 
@@ -1218,12 +1237,13 @@ set_except () {
 
     blobna 'You need to install[\n]*riptide\.hex[\n]\.[\n]' Documentation/sound/alsa/ALSA-Configuration.txt
     blobname 'riptide\.hex' sound/pci/riptide/riptide.c
+    defsnc 'static union firmware_version firmware_versions\[\] =' sound/pci/riptide/riptide.c
 
     blobname '\(multi\|digi\)face_firmware\(_rev11\)\?\.bin' sound/pci/rme9652/hdsp.c
 
     blobname 'aica_firmware\.bin' sound/sh/aica.c
 
-    accept ' [*]\([^/]\|[^*]*[/]*\)*Caution: This API\([^/]\|[^*]*[/]*\)*request_firmware.' sound/sound_firmware.c
+    accept ' [*]\([^/]\|[^*/][/]*\)*Caution: This API\([^/]\|[^*/][/]*\)*request_firmware.' sound/sound_firmware.c
     accept 'static int do_mod_firmware_load(' sound/sound_firmware.c
     accept 'int mod_firmware_load(' sound/sound_firmware.c
     accept '   r = do_mod_firmware_load(' sound/sound_firmware.c
@@ -1271,6 +1291,7 @@ set_except () {
 
     blobname 'dvb-fe-nxt2002\.fw' drivers/media/dvb/frontends/nxt200x.c
 
+    blob '[/][*][\n] [*] This driver needs two external firmware files\([^/]\|[^*/][/]*\)*dvb-fe-or51132-\(vsb\|qam\)\.fw\([^/]\|[^*/][/]*\)*[*][/]' drivers/media/dvb/frontends/or51132.c
     blobname 'dvb-fe-or51132-\(vsb\|qam\)\.fw' drivers/media/dvb/frontends/or51132.c
 
     blobname 'dvb-fe-or51211\.fw' drivers/media/dvb/frontends/or51211.c
@@ -1748,6 +1769,8 @@ set_except () {
     defsnc 'static u8 serit_sp1511lhb_inittab\[\] =' drivers/media/dvb/frontends/si21xx.c
     defsnc 'static u8 stv0288_inittab\[\] =' drivers/media/dvb/frontends/stv0288.c
 
+    blobname 'haup-ir-blaster\.bin' drivers/input/lirc/lirc_zilog.c
+
     # Suspicious, deblob for now, until contributor responds.
     # defsnc ' static u16 \(sr\|twinax\)_edc\[\] =' drivers/net/cxgb3/ael1002.cn
     # Non-Free license in entire file.
@@ -1977,6 +2000,10 @@ set_except () {
     ;;
   */linux-2.6*-lirc.patch)
     initnc 'const unsigned char map_table\[\] ='
+    blobname 'haup-ir-blaster\.bin' drivers/input/lirc/lirc_zilog.c
+    ;;
+  */linux-2.6*-at76.patch)
+    blobname 'atmel_at76c50\(3-\(i386[13]\|rfmd\(-acc\)\?\)\|5\(a\(mx\)\?\)\?-rfmd\(2958\)\?\)\.bin' drivers/net/wireless/at76_usb/at76_usb.c
     ;;
   */linux-2.6-modsign-mpilib.patch)
     initnc 'const unsigned char __clz_tab\[\] ='
@@ -2083,7 +2110,7 @@ bol="\\(^\\|[\\n]\\)"
 eol="\\([\\n]\\|\$\\)"
 
 # Regular expression that matches a C-style comment.
-comment="\\([/][*]\\([^*]*\\|[*]\\+[^/*]\\)*[*]\\+[/]\\|[/][/][^\\n]*[\\n]\\)"
+comment="\\([/][*]\\([^/]\\|[^*/][/]*\\)*[*][/]\\|[/][/][^\\n]*[\\n]\\)"
 
 # Regular expression that matches comments typically used in assembly.
 asmcomment="\\($comment\\|[;#][^\\n]*[\\n]\\)"
@@ -2165,6 +2192,9 @@ g;
   i\\
 Internal error at
   p;
+  i\\
+/*(DEBLOB-\\
+ERROR)*/
   q 2;
 }
 $v:reading file in
@@ -2802,10 +2832,13 @@ check () {
 : restart;
 /[/][*](DEBLOB-$/ {
   N;
+  /[/][*](DEBLOB-[\n]ERROR)[*][/]/{q 1;}
   s,[/][*](DEBLOB-[\n]BED)[*][/],,
   b restart;
-}'
-  cmd='sed "$sedunbreak"'
+}
+p
+'
+  cmd='sed -n "$sedunbreak"'
   set "$@" "$cmd"
 
   # test $# = 1 || set "$@" "cat"