#!/bin/sh
-#
+
# Copyright (C) 2008 Jeff Moe
# Copyright (C) 2008 Alexandre Oliva <lxoliva@fsfla.org>
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
-#
+
+
# deblob - remove non-free blobs from the vanilla linux kernel
-#
-# http://www.blagblagblag.org/pub/BLAG/linux/kernel/v2.6
-# ftp://ftp.blagblagblag.org/pub/BLAG/linux/kernel/v2.6
+
# http://www.fsfla.org/svn/fsfla/software/linux-libre
-#
+
+
+# This script, suited for the kernel version named below, in kver,
+# attempts to remove only non-Free Software bits, without removing
+# Free Software that happens to be in the same file.
+
+# Drivers that currently require non-Free firmware are retained, but
+# firmware included in GPLed sources is replaced with /*(DEBLOBBED)*/
+# if the deblob-check script, that knows how to do this, is present.
+# -lxoliva
+
+
# See also:
# http://wiki.debian.org/KernelFirmwareLicensing
# svn://svn.debian.org/kernel/dists/trunk/linux-2.6/debian/patches/debian/dfsg/files-1
# http://svn.gnewsense.svnhopper.net/gnewsense/builder/trunk/firmware/firmware-removed
# http://svn.gnewsense.svnhopper.net/gnewsense/builder/trunk/gen-kernel
-#
+
# Thanks to Brian Brazil @ gnewsense
-#
-# This version, suited for 2.6.25, avoids removing Free Software for
-# the sake of removing non-Free Software. Drivers that currently
-# require non-Free firmware are retained, but firmware included in
-# GPLed sources is replaced with /*(DEBLOBBED)*/ if the deblob-check
-# script, that knows how to do this, is present. -lxoliva
# For each kver release, start extra with an empty string, then count
# from 1 if changes are needed that require rebuilding the tarball.
-kver=2.6.25 extra=2
-
-sed -i "s,^EXTRAVERSION.*,EXTRAVERSION = -libre$extra," Makefile
-
-####################
-# FOOOOO XXXXXX
-# drivers/net/tokenring/Kconfig needs as last line:
-# endif # TR
-# drivers/media/Kconfig needs before endmenu
-# endif # DAB
+kver=2.6.25 extra=3
-if [ ! -f `which unifdef` ] ; then echo "requires unifdef" ; exit ; fi
+if unifdef /dev/null; then :; else
+ echo unifdef is required >&2
+ exit 1
+fi
check=`echo $0 | sed 's,/[^/]*$,,'`/deblob-check
if [ ! -f $check ] ; then
- echo "optional deblob-check missing, will remove entire files"
+ echo optional deblob-check missing, will remove entire files >&2
have_check=false
else
have_check=:
check_changed $1
}
+
+# First, check that files that contain firmwares and their
+# corresponding sources are present.
+
+for f in \
+ drivers/char/ser_a2232fw.h \
+ drivers/char/ser_a2232fw.ax \
+ drivers/net/ixp2000/ixp2400_rx.ucode \
+ drivers/net/ixp2000/ixp2400_rx.uc \
+ drivers/net/ixp2000/ixp2400_tx.ucode \
+ drivers/net/ixp2000/ixp2400_rx.uc \
+ drivers/net/wan/wanxlfw.inc_shipped \
+ drivers/net/wan/wanxlfw.S \
+ drivers/net/wireless/atmel.c \
+ drivers/net/wireless/atmel.c \
+ drivers/scsi/53c700_d.h_shipped \
+ drivers/scsi/53c700.scr \
+ drivers/scsi/aic7xxx/aic79xx_seq.h_shipped \
+ drivers/scsi/aic7xxx/aic79xx.seq \
+ drivers/scsi/aic7xxx/aic7xxx_seq.h_shipped \
+ drivers/scsi/aic7xxx/aic7xxx.seq \
+ drivers/scsi/aic7xxx_old/aic7xxx_seq.c \
+ drivers/scsi/aic7xxx_old/aic7xxx.seq \
+ drivers/scsi/53c7xx_d.h_shipped \
+ drivers/scsi/53c7xx.scr \
+ drivers/scsi/sym53c8xx_2/sym_fw1.h \
+ drivers/scsi/sym53c8xx_2/sym_fw1.h \
+ drivers/scsi/sym53c8xx_2/sym_fw2.h \
+ drivers/scsi/sym53c8xx_2/sym_fw2.h \
+ drivers/usb/serial/keyspan_pda_fw.h \
+ drivers/usb/serial/keyspan_pda.S \
+ drivers/usb/serial/xircom_pgs_fw.h \
+ drivers/usb/serial/xircom_pgs.S \
+ sound/pci/cs46xx/imgs/cwcbinhack.h \
+ sound/pci/cs46xx/imgs/cwcdma.asp \
+; do
+ if test ! $f; then
+ echo $f is not present, something is amiss >&2
+ exit 1
+ fi
+done
+
+# Identify the tarball.
+sed -i "s,^EXTRAVERSION.*,&-libre$extra," Makefile
+
#######################
# Removed ATM Drivers #
#######################
# ATM_FORE200E_PCA
# ATM_FORE200E_SBA - SBA-200E
-# it appears by placing these files under the GPL this company
-# now has to release the source
-
-# There's no code in this file. --lxoliva
-# clean_file drivers/atm/fore200e_firmware_copyright
-
-# There's only GPLed code in this one. --lxoliva
-# clean_file drivers/atm/fore200e_mkfirm.c
-
-clean_kconfig drivers/atm/Kconfig 'ATM_\(FORE\).*'
+clean_kconfig drivers/atm/Kconfig 'ATM_FORE.*'
clean_mk CONFIG_ATM_FORE200E drivers/atm/Makefile
clean_file drivers/atm/pca200e.data
clean_kconfig arch/m68k/Kconfig 'ATARI_DSP56K'
clean_mk CONFIG_ATARI_DSP56K drivers/char/Makefile
-# drm
+# gpu drm
# DRM_MGA - Matrox g200/g400
clean_blob drivers/char/drm/mga_ucode.h
clean_blob sound/pci/ymfpci/ymfpci_image.h
clean_ifdef sound/pci/ymfpci/ymfpci_main.c CONFIG_SND_YMFPCI_FIRMWARE_IN_KERNEL
+# SND_SB16_CSP_FIRMWARE_IN_KERNEL - SB16 Advanced Signal Processor
+clean_blob sound/isa/sb/sb16_csp_codecs.h
+clean_kconfig sound/isa/Kconfig SND_SB16_CSP_FIRMWARE_IN_KERNEL
-###############
-# Not Removed #
-###############
-
-# This is not removed in debian nor gnewsense nor do I think
-# it should be removed. It's on debian's list to check out
-# I think it points at firmware, but doesn't contain any
-# (e.g. if you add the file yss225_registers.bin it will use it)
-# clean_blob sound/isa/wavefront/wavefront_fx.c
-
-# VIDEO_STRADIS - Stradis 4:2:2 MPEG-2 video driver
-# This just sets a few values and a bunch of zeros. It doesn't look like
-# it was done by anything that would have upstream source code. This should
-# probably be kept. It's removed in gnewsense, but not even mentioned
-# by debian as potential candidate. It is used by stratis.c
-# clean_blob drivers/media/video/cs8420.h
-
-# gnewsense removes drivers/serial/jsm/jsm_neo.c but vanilla version looks ok
-
-# Not in kernel 2.6.23
-# drivers/scsi/qla2xxx/ql2100_fw.c
-# drivers/scsi/qla2xxx/ql2200_fw.c
-# drivers/scsi/qla2xxx/ql2300_fw.c
-# drivers/scsi/qla2xxx/ql2322_fw.c
-# drivers/scsi/qla2xxx/ql2400_fw.c
-# drivers/usb/net/kawethfw.h
-# sound/isa/sb/sb16/sb16_csp_codecs.h
-# sound/oss/yss225.c
-# drivers/scsi/53c7xx_d.h_shipped 53c7xx.scr
-# sound/pci/cs46xx/imgs/cwcemb80.h
-
-# Not in kernel 2.6.24
-# drivers/net/dgrs_firmware.c
-
-# blobs but free source available (source listed 2nd)
-# drivers/char/ser_a2232fw.h ser_a2232fw.ax
-# drivers/net/ixp2000/ixp2400_rx.ucode ixp2400_rx.uc
-# drivers/net/ixp2000/ixp2400_tx.ucode ixp2400_rx.uc
-# drivers/net/wan/wanxlfw.inc_shipped wanxlfw.S
-# drivers/net/wireless/atmel.c atmel.c
-# drivers/scsi/53c700_d.h_shipped 53c700.scr
-# drivers/scsi/aic7xxx/aic79xx_seq.h_shipped aic79xx.seq
-# drivers/scsi/aic7xxx/aic7xxx_seq.h_shipped aic7xxx.seq
-# drivers/scsi/aic7xxx_old/aic7xxx_seq.c aic7xxx.seq
-# drivers/scsi/sym53c8xx_2/sym_fw1.h sym_fw1.h
-# drivers/scsi/sym53c8xx_2/sym_fw2.h sym_fw2.h
-# drivers/usb/serial/keyspan_pda_fw.h keyspan_pda.S
-# drivers/usb/serial/xircom_pgs_fw.h xircom_pgs.S
+# SND_WAVEFRONT_FIRMWARE_IN_KERNEL
+# Most of this file is not matched by deblob-check because of WAIT_IDLE.
+# Just remove it.
+clean_file sound/isa/wavefront/yss225.c
+clean_kconfig sound/isa/Kconfig SND_WAVEFRONT_FIRMWARE_IN_KERNEL
+exit 0
#! /bin/sh
-# deblob-check version 2008-07-14
+# deblob-check version 2008-07-16
# Inspired in gNewSense's find-firmware script.
# Written by Alexandre Oliva <lxoliva@fsfla.org>
initnc 'static const struct ath5k_ini_mode rf24\(13\|25\)_ini_mode_end\[\] =' drivers/net/wireless/ath5k/initvals.c
initnc 'static const u16 wm9713_reg\[\] =' sound/soc/codecs/wm9713.c
+ # This looks suspicious, but it pretty much just sets stuff to zero.
+ initnc 'static __u8 mode8420\(pro\|con\)\[\] =' drivers/media/video/cs8420.h
+
# quite suspicious
# arch/parisc/kernel/perf_images.h
initc 'static uint32_t onyx_images\[\]\[PCXU_IMAGE_SIZE\/sizeof(uint32_t)\] __read_mostly ='
initnc 'static __const__ __u16 gx_coeff\[256\] ='
initnc 'static __u8 init7121ntsc\[\] ='
initnc 'static __u8 init7121pal\[\] ='
- initnc 'static __u8 mode8420\(pro\|con\)\[\] ='
initnc 'static byte capidtmf_leading_zeroes_table\[0x100\] ='
initnc 'static char channel_map_madi_ss\[HDSPM_MAX_CHANNELS\] ='
initnc 'static char coefficients\[NM_TOTAL_COEFF_COUNT \* 4\] ='
initnc 'static unsigned char V110_OffMatrix_9600\[\] ='
initnc 'static unsigned char V110_OnMatrix_9600\[\] ='
initnc 'static unsigned char a2232_65EC02code\[\] ='
- initnc 'static unsigned char alaw_main\[\] ='
initnc 'static unsigned char atkbd_set3_keycode\[512\] ='
initnc 'static unsigned char atkbd_unxlate_table\[128\] ='
initnc 'static unsigned char banner_table\[\] ='
initnc 'static unsigned char expressiontab\[128\] ='
initnc 'static unsigned char header2\[\] ='
initnc 'static unsigned char hidp_keycode\[256\] ='
- initnc 'static unsigned char ima_adpcm_capture\[\] ='
- initnc 'static unsigned char ima_adpcm_init\[\] ='
- initnc 'static unsigned char ima_adpcm_playback\[\] ='
initnc 'static unsigned char irq_xlate\[32\] ='
- initnc 'static unsigned char mulaw_main\[\] ='
initnc 'static unsigned char nkbd_keycode\[128\] ='
initnc 'static unsigned char pan_volumes\[256\] ='
initnc 'static unsigned char parm_block\[32\] ='
initnc '} vsb_snr_tab\[\] ='
initnc '} yss225_registers\[\] __devinitdata ='
;;
+ */patch*2.6.27-rc* | */patch*2.6.26-git*)
+ accept ' \.section __ex_table,"a"'"$sepx$blobpat*" 'arch/x86/lib/copy_user_\(nocache_\)\?64.S'
+ initnc 'static struct cipher_testvec des3_ede_cbc_\(enc\|dec\)_tv_template\[\] =' crypto/tcrypt.h
+
+ accept 'desc_config1:[\n] \.byte 0x09, 0x02'"$sepx$blobpat*" 'firmware/keyspan_pda/\(keyspan_pda\|xircom_pgs\).S'
+ accept 'string_mfg:[\n]\?\(;\? \.byte[^\n]*[\n]\)\+string_mfg_end:' 'firmware/keyspan_pda/\(keyspan_pda\|xircom_pgs\).S'
+ accept 'string_product:[\n]\?\(;\? \.byte[^\n]*[\n]\)\+string_product_end:' 'firmware/keyspan_pda/\(keyspan_pda\|xircom_pgs\).S'
+ accept ':03000000020200F9[\n]:040023000205\(9B0037\|5F0073\)[\n]\(:050030000000000000CB[\n]\|:0400430002010000B6[\n]\)*'"$sepx$blobpat*"'[\n]:\(0E06E0006400670065007400060334003700F4\|0606A000060334003700E0\)[\n]:00000001FF[\n]' 'firmware/keyspan_pda/\(keyspan_pda\|xircom_pgs\).HEX'
+ initnc 'static const u16 uda1380_reg\[UDA1380_CACHEREGNUM\] =' sound/soc/codecs/uda1380.c
+ initnc 'static const u16 wm8510_reg\[WM8510_CACHEREGNUM\] =' sound/soc/codecs/wm8510.c
+ ;;
+
*/patch*2.6.26-rc*)
initnc 'static u64 vec2off\[68\] =' arch/ia64/kvm/process.c
initnc " interrupts = <\\(0x\\)\\?3 \\(0x\\)\\?0 \\(0x\\)\\?0 $blobpat*>;" 'arch/powerpc/boot/dts/\(cm5200\|lite5200b\?\|kuroboxHG\|pcm030\|tqm5200\).dts'
*.tar*)
cmd="tar -xf - --to-command='echo \";/*begin \$TAR_FILENAME*/;\"; cat; echo \";/**/;\"; echo \";/*end \$TAR_FILENAME*/;\"'"
;;
- *.patch | patch-* | *.diff)
+ *.patch | */patch-* | *.diff)
sedpatch='
/^[-]/d;
/^\(@@\|+++\) / {