• Takashi Iwai's avatar
    firmware: Add support for loading compressed files · 82fd7a81
    Takashi Iwai authored
    This patch adds the support for loading compressed firmware files.
    The primary motivation is to reduce the storage size; e.g. currently
    the files in /lib/firmware on my machine counts up to 419MB, while
    they can be reduced to 130MB by file compression.
    
    The patch introduces a new kconfig option CONFIG_FW_LOADER_COMPRESS.
    Even with this option set, the firmware loader still tries to load the
    original firmware file as-is at first, but then falls back to the file
    with ".xz" extension when it's not found, and the decompressed file
    content is returned to the caller of request_firmware().  So, no
    change is needed for the rest.
    
    Currently only XZ format is supported.  A caveat is that the kernel XZ
    helper code supports only CRC32 (or none) integrity check type, so
    you'll have to compress the files via xz -C crc32 option.
    
    Since we can't determine the expanded size immediately from an XZ
    file, the patch re-uses the paged buffer that was used for the
    user-mode fallback; it puts the decompressed content page, which are
    vmapped at the end.  The paged buffer code is conditionally built with
    a new Kconfig that is selected automatically.
    Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
    Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
    82fd7a81
firmware.h 4 KB