RFHelp: investigating request_firmware matches in the kernel

Alexandre Oliva lxoliva at fsfla.org
Fri Jan 23 19:51:23 UTC 2009


Hi,

I've just checked in a new version of deblob-check with the following
new features:

- it recognizes request_firmware and request_firmware_nowait sequences
as blobs

- it adds infrastructure for adding any other patterns to be matched and
handled like blobs


Now, there are a total of 145 files in the latest 2.6.28 release of
Linux-libre that match request_firmware.  I could handle them one by one
myself, but I guess it makes sense to ask for help.


If you're willing to lend a hand, could you...

1. pick up any of these at random:

CREDITS
Documentation/00-INDEX
Documentation/dell_rbu.txt
Documentation/firmware_class/README
Documentation/power/freezing-of-tasks.txt
Documentation/power/notifiers.txt
Documentation/video4linux/si470x.txt
MAINTAINERS
arch/arm/mach-ixp4xx/ixp4xx_npe.c
arch/arm/mach-netx/include/mach/xc.h
arch/arm/mach-netx/xc.c
arch/cris/arch-v32/drivers/iop_fw_load.c
arch/x86/kernel/microcode_amd.c
arch/x86/kernel/microcode_core.c
arch/x86/kernel/microcode_intel.c
drivers/atm/fore200e.c
drivers/base/Kconfig
drivers/base/firmware_class.c
drivers/bluetooth/bcm203x.c
drivers/bluetooth/bfusb.c
drivers/bluetooth/bt3c_cs.c
drivers/char/cyclades.c
drivers/char/dsp56k.c
drivers/char/ip2/ip2main.c
drivers/char/isicom.c
drivers/char/moxa.c
drivers/firmware/dell_rbu.c
drivers/media/common/tuners/tuner-xc2028.c
drivers/media/common/tuners/xc5000.c
drivers/media/dvb/b2c2/flexcop-fe-tuner.c
drivers/media/dvb/bt8xx/dvb-bt8xx.c
drivers/media/dvb/dvb-usb/dvb-usb-firmware.c
drivers/media/dvb/dvb-usb/dw2102.c
drivers/media/dvb/dvb-usb/gp8psk.c
drivers/media/dvb/dvb-usb/m920x.c
drivers/media/dvb/dvb-usb/opera1.c
drivers/media/dvb/frontends/af9013.c
drivers/media/dvb/frontends/bcm3510.c
drivers/media/dvb/frontends/bcm3510.h
drivers/media/dvb/frontends/cx24116.c
drivers/media/dvb/frontends/drx397xD.c
drivers/media/dvb/frontends/nxt200x.c
drivers/media/dvb/frontends/or51132.c
drivers/media/dvb/frontends/or51211.c
drivers/media/dvb/frontends/or51211.h
drivers/media/dvb/frontends/sp8870.c
drivers/media/dvb/frontends/sp8870.h
drivers/media/dvb/frontends/sp887x.c
drivers/media/dvb/frontends/sp887x.h
drivers/media/dvb/frontends/tda10048.c
drivers/media/dvb/frontends/tda1004x.c
drivers/media/dvb/frontends/tda1004x.h
drivers/media/dvb/frontends/tdhd1.h
drivers/media/dvb/pluto2/pluto2.c
drivers/media/dvb/siano/smscoreapi.c
drivers/media/dvb/siano/smsusb.c
drivers/media/dvb/ttpci/av7110.c
drivers/media/dvb/ttpci/budget-av.c
drivers/media/dvb/ttpci/budget-ci.c
drivers/media/dvb/ttpci/budget.c
drivers/media/dvb/ttusb-budget/dvb-ttusb-budget.c
drivers/media/dvb/ttusb-dec/ttusb_dec.c
drivers/media/video/bt8xx/bttv-cards.c
drivers/media/video/cpia2/cpia2_core.c
drivers/media/video/cx18/cx18-av-firmware.c
drivers/media/video/cx18/cx18-firmware.c
drivers/media/video/cx23885/cx23885-417.c
drivers/media/video/cx25840/cx25840-firmware.c
drivers/media/video/cx88/cx88-blackbird.c
drivers/media/video/dabusb.c
drivers/media/video/ivtv/ivtv-firmware.c
drivers/media/video/pvrusb2/pvrusb2-hdw.c
drivers/media/video/s2255drv.c
drivers/media/video/saa7134/saa7134-dvb.c
drivers/net/cassini.c
drivers/net/cxgb3/cxgb3_main.c
drivers/net/irda/irda-usb.c
drivers/net/myri10ge/myri10ge.c
drivers/net/netx-eth.c
drivers/net/spider_net.c
drivers/net/tokenring/smctr.c
drivers/net/tokenring/tms380tr.c
drivers/net/usb/kaweth.c
drivers/net/wireless/atmel.c
drivers/net/wireless/b43/main.c
drivers/net/wireless/b43legacy/main.c
drivers/net/wireless/ipw2100.c
drivers/net/wireless/ipw2200.c
drivers/net/wireless/iwlwifi/iwl-agn.c
drivers/net/wireless/iwlwifi/iwl3945-base.c
drivers/net/wireless/libertas/if_cs.c
drivers/net/wireless/libertas/if_sdio.c
drivers/net/wireless/libertas/if_usb.c
drivers/net/wireless/libertas_tf/if_usb.c
drivers/net/wireless/orinoco.c
drivers/net/wireless/p54/p54pci.c
drivers/net/wireless/p54/p54usb.c
drivers/net/wireless/prism54/islpci_dev.c
drivers/net/wireless/rt2x00/rt2x00firmware.c
drivers/net/wireless/zd1201.c
drivers/net/wireless/zd1211rw/zd_usb.c
drivers/pcmcia/ds.c
drivers/scsi/aic94xx/aic94xx_init.c
drivers/scsi/aic94xx/aic94xx_seq.c
drivers/scsi/ipr.c
drivers/scsi/libsas/sas_scsi_host.c
drivers/scsi/qla2xxx/qla_gbl.h
drivers/scsi/qla2xxx/qla_init.c
drivers/scsi/qla2xxx/qla_os.c
drivers/serial/icom.c
drivers/serial/ucc_uart.c
drivers/staging/at76_usb/at76_usb.c
drivers/staging/go7007/go7007-driver.c
drivers/staging/go7007/go7007-fw.c
drivers/staging/slicoss/README
drivers/usb/atm/cxacru.c
drivers/usb/atm/speedtch.c
drivers/usb/atm/ueagle-atm.c
drivers/usb/misc/emi26.c
drivers/usb/misc/emi62.c
drivers/usb/misc/isight_firmware.c
drivers/usb/serial/io_ti.c
drivers/usb/serial/ti_usb_3410_5052.c
drivers/uwb/i1480/dfu/i1480-dfu.h
drivers/uwb/i1480/dfu/mac.c
drivers/uwb/i1480/dfu/phy.c
drivers/video/metronomefb.c
include/linux/firmware.h
include/linux/ihex.h
samples/firmware_class/firmware_sample_driver.c
sound/drivers/vx/vx_hwdep.c
sound/isa/sb/sb16_csp.c
sound/isa/wavefront/wavefront_fx.c
sound/isa/wavefront/wavefront_synth.c
sound/pci/echoaudio/echoaudio.c
sound/pci/emu10k1/emu10k1_main.c
sound/pci/korg1212/korg1212.c
sound/pci/maestro3.c
sound/pci/mixart/mixart_hwdep.c
sound/pci/pcxhr/pcxhr_hwdep.c
sound/pci/riptide/riptide.c
sound/pci/rme9652/hdsp.c
sound/pci/ymfpci/ymfpci_main.c
sound/sh/aica.c
sound/sound_firmware.c


2. Figure out whether the request_firmware matches in it are to be
trivially accepted (documentation of request_firmware machinery, naming
maintainers), and if so, submit patterns for deblob-check to match them
as non-blobs.


3. If it's not trivially acceptable, and if it is not direct call to
request_firmware[_nowait], try to find out whether there are any other
patterns we should be monitoring for functions that take firmware names
as arguments, and submit patterns for deblob-check to match them as
blobs.


4. Otherwise, if it's a call to a function that takes a firmware name as
argument, try to figure out the names of the firmware files that could
be used at that point.  Once you have the names, try to find out whether
the firmwares in question are Free or non-Free.  Odds are that, if it's
not in Linux-libre, it's non-Free, but there might be cases of external
Free firmware, so we'd be better at least having a look.


5. If you find names of Free firmware, please submit patterns for
deblob-check to match the corresponding calls as non-blobs.


6. If you find names of non-Free firmware, please submit patterns for
deblob-check to match its name as a blob.  Also, please mention that the
corresponding call ought to be changed to report_firmware[_nowait]().
If you feel adventurous, please go ahead and post changes for
deblob-2.6.28 as well, to remove the MODULE_FIRMWARE line (say, match
the MODULE_FIRMWARE line as a match too) and any other occurrences of
the firmware name, removing also any documentation that refers to that
blob, how to obtain it, etc.


Thanks in advance for your help.  I'll start working on this myself
tonight or so.  We should probably figure out some way to coordinate.
Using the list or a wiki might work, but it might also be too slow.  How
about we coordinate on #linux-libre on irc.freenode.net?

-- 
Alexandre Oliva           http://www.lsd.ic.unicamp.br/~oliva/
You must be the change you wish to see in the world. -- Gandhi
Be Free! -- http://FSFLA.org/   FSF Latin America board member
Free Software Evangelist      Red Hat Brazil Compiler Engineer


More information about the linux-libre mailing list