summaryrefslogtreecommitdiffstats
path: root/freed-ora/current/master
diff options
context:
space:
mode:
Diffstat (limited to 'freed-ora/current/master')
-rw-r--r--freed-ora/current/master/0001-ACPI-sony-laptop-do-proper-memcpy-for-ACPI_TYPE_INTE.patch50
-rw-r--r--freed-ora/current/master/8139cp-re-enable-interrupts-after-tx-timeout.patch29
-rw-r--r--freed-ora/current/master/8139cp-set-ring-address-after-enabling-C-mode.patch100
-rw-r--r--freed-ora/current/master/Bluetooth-Add-support-for-BCM20702A0.patch43
-rw-r--r--freed-ora/current/master/Input-add-support-for-Cypress-PS2-Trackpads.patch1063
-rw-r--r--freed-ora/current/master/Input-increase-struct-ps2dev-cmdbuf-to-8-bytes.patch30
-rw-r--r--freed-ora/current/master/Makefile.config19
-rw-r--r--freed-ora/current/master/Revert-8139cp-revert-set-ring-address-before-enabling.patch59
-rw-r--r--freed-ora/current/master/Revert-iwlwifi-fix-the-reclaimed-packet-tracking-upon.patch68
-rw-r--r--freed-ora/current/master/acpi-debug-infinite-loop.patch (renamed from freed-ora/current/master/linux-2.6-acpi-debug-infinite-loop.patch)0
-rw-r--r--freed-ora/current/master/acpi-video-dos.patch (renamed from freed-ora/current/master/linux-2.6-acpi-video-dos.patch)0
-rw-r--r--freed-ora/current/master/arm-omapdrm-fixinc.patch15
-rw-r--r--freed-ora/current/master/arm-tegra-nvec-kconfig.patch8
-rw-r--r--freed-ora/current/master/brcmsmac-double-timeout.patch39
-rw-r--r--freed-ora/current/master/compile-fixes.patch (renamed from freed-ora/current/master/linux-2.6-compile-fixes.patch)0
-rw-r--r--freed-ora/current/master/config-arm-generic14
-rw-r--r--freed-ora/current/master/config-arm-highbank62
-rw-r--r--freed-ora/current/master/config-arm-imx119
-rw-r--r--freed-ora/current/master/config-arm-kirkwood11
-rw-r--r--freed-ora/current/master/config-arm-omap59
-rw-r--r--freed-ora/current/master/config-arm-tegra22
-rw-r--r--freed-ora/current/master/config-arm-versatile95
-rw-r--r--freed-ora/current/master/config-armv790
-rw-r--r--freed-ora/current/master/config-generic97
-rw-r--r--freed-ora/current/master/config-nodebug92
-rw-r--r--freed-ora/current/master/config-powerpc-generic5
-rw-r--r--freed-ora/current/master/config-s390x9
-rw-r--r--freed-ora/current/master/config-sparc64-generic217
-rw-r--r--freed-ora/current/master/config-x86-32-generic10
-rw-r--r--freed-ora/current/master/config-x86-generic7
-rw-r--r--freed-ora/current/master/config-x86_64-generic10
-rw-r--r--freed-ora/current/master/crash-driver.patch (renamed from freed-ora/current/master/linux-2.6-crash-driver.patch)0
-rw-r--r--freed-ora/current/master/criu-no-expert.patch22
-rwxr-xr-xfreed-ora/current/master/deblob-3.82655
-rwxr-xr-xfreed-ora/current/master/deblob-check164
-rw-r--r--freed-ora/current/master/defaults-acpi-video.patch (renamed from freed-ora/current/master/linux-2.6-defaults-acpi-video.patch)0
-rw-r--r--freed-ora/current/master/dmar-disable-when-ricoh-multifunction.patch2
-rw-r--r--freed-ora/current/master/efivarfs-3.7.patch1630
-rw-r--r--freed-ora/current/master/exec-do-not-leave-bprm-interp-on-stack.patch118
-rw-r--r--freed-ora/current/master/exec-use-eloop-for-max-recursion-depth.patch144
-rw-r--r--freed-ora/current/master/handle-efi-roms.patch388
-rw-r--r--freed-ora/current/master/input-kill-stupid-messages.patch (renamed from freed-ora/current/master/linux-2.6-input-kill-stupid-messages.patch)0
-rw-r--r--freed-ora/current/master/iwlegacy-add-flush-callback.patch103
-rw-r--r--freed-ora/current/master/kernel.spec543
-rw-r--r--freed-ora/current/master/linux-2.6-e1000-ich9-montevina.patch46
-rw-r--r--freed-ora/current/master/mac80211-fix-ibss-scanning.patch132
-rw-r--r--freed-ora/current/master/mac80211-improve-latency-and-throughput-while-software.patch142
-rw-r--r--freed-ora/current/master/makefile-after_link.patch (renamed from freed-ora/current/master/linux-2.6-makefile-after_link.patch)0
-rw-r--r--freed-ora/current/master/mod-extra.list6
-rwxr-xr-xfreed-ora/current/master/mod-sign.sh (renamed from freed-ora/current/master/mod-extra-sign.sh)10
-rw-r--r--freed-ora/current/master/modsign-post-KS-jwb.patch78
-rw-r--r--freed-ora/current/master/no-pcspkr-modalias.patch (renamed from freed-ora/current/master/linux-2.6.30-no-pcspkr-modalias.patch)0
-rw-r--r--freed-ora/current/master/patch-3.7-gnu-3.8-rc6-gnu.xz.sign7
-rw-r--r--freed-ora/current/master/power-x86-destdir.patch35
-rw-r--r--freed-ora/current/master/quiet-apm.patch (renamed from freed-ora/current/master/quite-apm.patch)0
-rw-r--r--freed-ora/current/master/rtlwifi-Fix-scheduling-while-atomic-bug.patch65
-rw-r--r--freed-ora/current/master/secure-boot-20130131.patch (renamed from freed-ora/current/master/secure-boot-20121212.patch)1295
-rw-r--r--freed-ora/current/master/serial-460800.patch (renamed from freed-ora/current/master/linux-2.6-serial-460800.patch)0
-rw-r--r--freed-ora/current/master/silence-acpi-blacklist.patch (renamed from freed-ora/current/master/linux-2.6-silence-acpi-blacklist.patch)0
-rw-r--r--freed-ora/current/master/silence-empty-ipi-mask-warning.patch11
-rw-r--r--freed-ora/current/master/silence-fbcon-logo.patch (renamed from freed-ora/current/master/linux-2.6-silence-fbcon-logo.patch)0
-rw-r--r--freed-ora/current/master/silence-noise.patch (renamed from freed-ora/current/master/linux-2.6-silence-noise.patch)0
-rw-r--r--freed-ora/current/master/sources2
-rw-r--r--freed-ora/current/master/upstream-reverts.patch (renamed from freed-ora/current/master/linux-2.6-upstream-reverts.patch)0
-rw-r--r--freed-ora/current/master/v4l-dvb-experimental.patch (renamed from freed-ora/current/master/linux-2.6-v4l-dvb-experimental.patch)0
-rw-r--r--freed-ora/current/master/v4l-dvb-fixes.patch (renamed from freed-ora/current/master/linux-2.6-v4l-dvb-fixes.patch)0
-rw-r--r--freed-ora/current/master/v4l-dvb-update.patch (renamed from freed-ora/current/master/linux-2.6-v4l-dvb-update.patch)0
67 files changed, 5617 insertions, 4423 deletions
diff --git a/freed-ora/current/master/0001-ACPI-sony-laptop-do-proper-memcpy-for-ACPI_TYPE_INTE.patch b/freed-ora/current/master/0001-ACPI-sony-laptop-do-proper-memcpy-for-ACPI_TYPE_INTE.patch
deleted file mode 100644
index 857c73c51..000000000
--- a/freed-ora/current/master/0001-ACPI-sony-laptop-do-proper-memcpy-for-ACPI_TYPE_INTE.patch
+++ /dev/null
@@ -1,50 +0,0 @@
-From 690b1ad9d2032d6f2565d44f6564590d47835ae8 Mon Sep 17 00:00:00 2001
-From: Zhang Rui <rui.zhang@intel.com>
-Date: Thu, 29 Nov 2012 01:30:43 +0800
-Subject: [PATCH 1/2] ACPI sony-laptop: do proper memcpy for ACPI_TYPE_INTEGER
- acpi_object
-
-the return value of __call_snc_method can either be
-an ACPI_TYPE_BUFFER object or a ACPI_TYPE_INTEGER object.
-do proper memcpy for ACPI_TYPE_INTEGER object.
-
-https://bugzilla.kernel.org/show_bug.cgi?id=50111
-
-Signed-off-by: Zhang Rui <rui.zhang@intel.com>
----
- drivers/platform/x86/sony-laptop.c | 11 +++++------
- 1 file changed, 5 insertions(+), 6 deletions(-)
-
-diff --git a/drivers/platform/x86/sony-laptop.c b/drivers/platform/x86/sony-laptop.c
-index daaddec..92e0da2 100644
---- a/drivers/platform/x86/sony-laptop.c
-+++ b/drivers/platform/x86/sony-laptop.c
-@@ -792,20 +792,19 @@ static int sony_nc_buffer_call(acpi_handle handle, char *name, u64 *value,
- if (!object)
- return -EINVAL;
-
-- if (object->type == ACPI_TYPE_BUFFER)
-+ if (object->type == ACPI_TYPE_BUFFER) {
- len = MIN(buflen, object->buffer.length);
--
-- else if (object->type == ACPI_TYPE_INTEGER)
-+ memcpy(buffer, object->buffer.pointer, len);
-+ } else if (object->type == ACPI_TYPE_INTEGER) {
- len = MIN(buflen, sizeof(object->integer.value));
--
-- else {
-+ memcpy(buffer, (void *)&object->integer.value, len);
-+ } else {
- pr_warn("Invalid acpi_object: expected 0x%x got 0x%x\n",
- ACPI_TYPE_BUFFER, object->type);
- kfree(object);
- return -EINVAL;
- }
-
-- memcpy(buffer, object->buffer.pointer, len);
- kfree(object);
- return 0;
- }
---
-1.7.9.5
-
diff --git a/freed-ora/current/master/8139cp-re-enable-interrupts-after-tx-timeout.patch b/freed-ora/current/master/8139cp-re-enable-interrupts-after-tx-timeout.patch
deleted file mode 100644
index c0196188e..000000000
--- a/freed-ora/current/master/8139cp-re-enable-interrupts-after-tx-timeout.patch
+++ /dev/null
@@ -1,29 +0,0 @@
-From 01ffc0a7f1c1801a2354719dedbc32aff45b987d Mon Sep 17 00:00:00 2001
-From: David Woodhouse <dwmw2@infradead.org>
-Date: Sat, 24 Nov 2012 12:11:21 +0000
-Subject: [PATCH] 8139cp: re-enable interrupts after tx timeout
-
-Recovery doesn't work too well if we leave interrupts disabled...
-
-Signed-off-by: David Woodhouse <David.Woodhouse@intel.com>
-Acked-by: Francois Romieu <romieu@fr.zoreil.com>
-Signed-off-by: David S. Miller <davem@davemloft.net>
----
- drivers/net/ethernet/realtek/8139cp.c | 1 +
- 1 files changed, 1 insertions(+), 0 deletions(-)
-
-diff --git a/drivers/net/ethernet/realtek/8139cp.c b/drivers/net/ethernet/realtek/8139cp.c
-index 3de318d..6cb96b4 100644
---- a/drivers/net/ethernet/realtek/8139cp.c
-+++ b/drivers/net/ethernet/realtek/8139cp.c
-@@ -1219,6 +1219,7 @@ static void cp_tx_timeout(struct net_device *dev)
- cp_clean_rings(cp);
- rc = cp_init_rings(cp);
- cp_start_hw(cp);
-+ cp_enable_irq(cp);
-
- netif_wake_queue(dev);
-
---
-1.7.6.5
-
diff --git a/freed-ora/current/master/8139cp-set-ring-address-after-enabling-C-mode.patch b/freed-ora/current/master/8139cp-set-ring-address-after-enabling-C-mode.patch
deleted file mode 100644
index 33bd340e9..000000000
--- a/freed-ora/current/master/8139cp-set-ring-address-after-enabling-C-mode.patch
+++ /dev/null
@@ -1,100 +0,0 @@
-From a9dbe40fc10cea2efe6e1ff9e03c62dd7579c5ba Mon Sep 17 00:00:00 2001
-From: David Woodhouse <dwmw2@infradead.org>
-Date: Wed, 21 Nov 2012 10:27:19 +0000
-Subject: [PATCH] 8139cp: set ring address after enabling C+ mode
-
-This fixes (for me) a regression introduced by commit b01af457 ("8139cp:
-set ring address before enabling receiver"). That commit configured the
-descriptor ring addresses earlier in the initialisation sequence, in
-order to avoid the possibility of triggering stray DMA before the
-correct address had been set up.
-
-Unfortunately, it seems that the hardware will scribble garbage into the
-TxRingAddr registers when we enable "plus mode" Tx in the CpCmd
-register. Observed on a Traverse Geos router board.
-
-To deal with this, while not reintroducing the problem which led to the
-original commit, we augment cp_start_hw() to write to the CpCmd register
-*first*, then set the descriptor ring addresses, and then finally to
-enable Rx and Tx in the original 8139 Cmd register. The datasheet
-actually indicates that we should enable Tx/Rx in the Cmd register
-*before* configuring the descriptor addresses, but that would appear to
-re-introduce the problem that the offending commit b01af457 was trying
-to solve. And this variant appears to work fine on real hardware.
-
-Signed-off-by: David Woodhouse <David.Woodhouse@intel.com>
-Cc: stable@kernel.org [3.5+]
-Signed-off-by: David S. Miller <davem@davemloft.net>
----
- drivers/net/ethernet/realtek/8139cp.c | 40 +++++++++++++++++++++++----------
- 1 files changed, 28 insertions(+), 12 deletions(-)
-
-diff --git a/drivers/net/ethernet/realtek/8139cp.c b/drivers/net/ethernet/realtek/8139cp.c
-index 1c81825..5166d94 100644
---- a/drivers/net/ethernet/realtek/8139cp.c
-+++ b/drivers/net/ethernet/realtek/8139cp.c
-@@ -957,7 +957,35 @@ static void cp_reset_hw (struct cp_private *cp)
-
- static inline void cp_start_hw (struct cp_private *cp)
- {
-+ dma_addr_t ring_dma;
-+
- cpw16(CpCmd, cp->cpcmd);
-+
-+ /*
-+ * These (at least TxRingAddr) need to be configured after the
-+ * corresponding bits in CpCmd are enabled. Datasheet v1.6 §6.33
-+ * (C+ Command Register) recommends that these and more be configured
-+ * *after* the [RT]xEnable bits in CpCmd are set. And on some hardware
-+ * it's been observed that the TxRingAddr is actually reset to garbage
-+ * when C+ mode Tx is enabled in CpCmd.
-+ */
-+ cpw32_f(HiTxRingAddr, 0);
-+ cpw32_f(HiTxRingAddr + 4, 0);
-+
-+ ring_dma = cp->ring_dma;
-+ cpw32_f(RxRingAddr, ring_dma & 0xffffffff);
-+ cpw32_f(RxRingAddr + 4, (ring_dma >> 16) >> 16);
-+
-+ ring_dma += sizeof(struct cp_desc) * CP_RX_RING_SIZE;
-+ cpw32_f(TxRingAddr, ring_dma & 0xffffffff);
-+ cpw32_f(TxRingAddr + 4, (ring_dma >> 16) >> 16);
-+
-+ /*
-+ * Strictly speaking, the datasheet says this should be enabled
-+ * *before* setting the descriptor addresses. But what, then, would
-+ * prevent it from doing DMA to random unconfigured addresses?
-+ * This variant appears to work fine.
-+ */
- cpw8(Cmd, RxOn | TxOn);
- }
-
-@@ -969,7 +997,6 @@ static void cp_enable_irq(struct cp_private *cp)
- static void cp_init_hw (struct cp_private *cp)
- {
- struct net_device *dev = cp->dev;
-- dma_addr_t ring_dma;
-
- cp_reset_hw(cp);
-
-@@ -979,17 +1006,6 @@ static void cp_init_hw (struct cp_private *cp)
- cpw32_f (MAC0 + 0, le32_to_cpu (*(__le32 *) (dev->dev_addr + 0)));
- cpw32_f (MAC0 + 4, le32_to_cpu (*(__le32 *) (dev->dev_addr + 4)));
-
-- cpw32_f(HiTxRingAddr, 0);
-- cpw32_f(HiTxRingAddr + 4, 0);
--
-- ring_dma = cp->ring_dma;
-- cpw32_f(RxRingAddr, ring_dma & 0xffffffff);
-- cpw32_f(RxRingAddr + 4, (ring_dma >> 16) >> 16);
--
-- ring_dma += sizeof(struct cp_desc) * CP_RX_RING_SIZE;
-- cpw32_f(TxRingAddr, ring_dma & 0xffffffff);
-- cpw32_f(TxRingAddr + 4, (ring_dma >> 16) >> 16);
--
- cp_start_hw(cp);
- cpw8(TxThresh, 0x06); /* XXX convert magic num to a constant */
-
---
-1.7.6.5
-
diff --git a/freed-ora/current/master/Bluetooth-Add-support-for-BCM20702A0.patch b/freed-ora/current/master/Bluetooth-Add-support-for-BCM20702A0.patch
deleted file mode 100644
index 99178d757..000000000
--- a/freed-ora/current/master/Bluetooth-Add-support-for-BCM20702A0.patch
+++ /dev/null
@@ -1,43 +0,0 @@
-From a5f86c3423428c8e28b6501d0e9c3929ca91f07d Mon Sep 17 00:00:00 2001
-From: Jeff Cook <jeff@deserettechnology.com>
-Date: Fri, 9 Nov 2012 16:39:48 -0700
-Subject: [PATCH 2/2] Bluetooth: Add support for BCM20702A0 [0b05, 17b5]
-
-Vendor-specific ID for BCM20702A0.
-Support for bluetooth over Asus Wi-Fi GO!, included with Asus P8Z77-V
-Deluxe.
-
-T: Bus=07 Lev=02 Prnt=02 Port=00 Cnt=01 Dev#= 3 Spd=12 MxCh= 0
-D: Ver= 2.00 Cls=ff(vend.) Sub=01 Prot=01 MxPS=64 #Cfgs= 1
-P: Vendor=0b05 ProdID=17b5 Rev=01.12
-S: Manufacturer=Broadcom Corp
-S: Product=BCM20702A0
-S: SerialNumber=94DBC98AC113
-C: #Ifs= 4 Cfg#= 1 Atr=e0 MxPwr=0mA
-I: If#= 0 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=01 Prot=01 Driver=(none)
-I: If#= 1 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=01 Prot=01 Driver=(none)
-I: If#= 2 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=ff Prot=ff Driver=(none)
-I: If#= 3 Alt= 0 #EPs= 0 Cls=fe(app. ) Sub=01 Prot=01 Driver=(none)
-
-Cc: stable@vger.kernel.org
-Signed-off-by: Jeff Cook <jeff@deserettechnology.com>
-Signed-off-by: Gustavo Padovan <gustavo.padovan@collabora.co.uk>
----
- drivers/bluetooth/btusb.c | 1 +
- 1 file changed, 1 insertion(+)
-
-diff --git a/drivers/bluetooth/btusb.c b/drivers/bluetooth/btusb.c
-index b167944..6dc44ff 100644
---- a/drivers/bluetooth/btusb.c
-+++ b/drivers/bluetooth/btusb.c
-@@ -96,6 +96,7 @@ static struct usb_device_id btusb_table[] = {
- { USB_DEVICE(0x0c10, 0x0000) },
-
- /* Broadcom BCM20702A0 */
-+ { USB_DEVICE(0x0b05, 0x17b5) },
- { USB_DEVICE(0x04ca, 0x2003) },
- { USB_DEVICE(0x0489, 0xe042) },
- { USB_DEVICE(0x413c, 0x8197) },
---
-1.8.0
-
diff --git a/freed-ora/current/master/Input-add-support-for-Cypress-PS2-Trackpads.patch b/freed-ora/current/master/Input-add-support-for-Cypress-PS2-Trackpads.patch
new file mode 100644
index 000000000..8c5e569f9
--- /dev/null
+++ b/freed-ora/current/master/Input-add-support-for-Cypress-PS2-Trackpads.patch
@@ -0,0 +1,1063 @@
+From 0799a924bc93ba46a23e8e7e6b1431ab585fd2ea Mon Sep 17 00:00:00 2001
+From: Dudley Du <dudl@cypress.com>
+Date: Sat, 5 Jan 2013 00:14:22 -0800
+Subject: [PATCH] Input: add support for Cypress PS/2 Trackpads
+
+This driver, submitted on behalf of Cypress Semiconductor Corporation and
+additional contributors, provides support for the Cypress PS/2 Trackpad.
+
+Original code contributed by Dudley Du (Cypress Semiconductor Corporation),
+modified by Kamal Mostafa and Kyle Fazzari.
+
+BugLink: http://launchpad.net/bugs/978807
+
+Signed-off-by: Dudley Du <dudl@cypress.com>
+Signed-off-by: Kamal Mostafa <kamal@canonical.com>
+Signed-off-by: Kyle Fazzari <git@status.e4ward.com>
+Signed-off-by: Mario Limonciello <mario_limonciello@dell.com>
+Signed-off-by: Tim Gardner <tim.gardner@canonical.com>
+Acked-by: Herton Krzesinski <herton.krzesinski@canonical.com>
+Reviewed-by: Henrik Rydberg <rydberg@euromail.se>
+Reviewed-by: Dudley Du <dudl@cypress.com>
+Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
+---
+ drivers/input/mouse/Kconfig | 10 +
+ drivers/input/mouse/Makefile | 1 +
+ drivers/input/mouse/cypress_ps2.c | 725 ++++++++++++++++++++++++++++++++++++
+ drivers/input/mouse/cypress_ps2.h | 191 ++++++++++
+ drivers/input/mouse/psmouse-base.c | 32 ++
+ drivers/input/mouse/psmouse.h | 1 +
+ 6 files changed, 960 insertions(+), 0 deletions(-)
+ create mode 100644 drivers/input/mouse/cypress_ps2.c
+ create mode 100644 drivers/input/mouse/cypress_ps2.h
+
+diff --git a/drivers/input/mouse/Kconfig b/drivers/input/mouse/Kconfig
+index cd6268c..88954dd 100644
+--- a/drivers/input/mouse/Kconfig
++++ b/drivers/input/mouse/Kconfig
+@@ -68,6 +68,16 @@ config MOUSE_PS2_SYNAPTICS
+
+ If unsure, say Y.
+
++config MOUSE_PS2_CYPRESS
++ bool "Cypress PS/2 mouse protocol extension" if EXPERT
++ default y
++ depends on MOUSE_PS2
++ help
++ Say Y here if you have a Cypress PS/2 Trackpad connected to
++ your system.
++
++ If unsure, say Y.
++
+ config MOUSE_PS2_LIFEBOOK
+ bool "Fujitsu Lifebook PS/2 mouse protocol extension" if EXPERT
+ default y
+diff --git a/drivers/input/mouse/Makefile b/drivers/input/mouse/Makefile
+index 46ba755..323e352 100644
+--- a/drivers/input/mouse/Makefile
++++ b/drivers/input/mouse/Makefile
+@@ -32,3 +32,4 @@ psmouse-$(CONFIG_MOUSE_PS2_LIFEBOOK) += lifebook.o
+ psmouse-$(CONFIG_MOUSE_PS2_SENTELIC) += sentelic.o
+ psmouse-$(CONFIG_MOUSE_PS2_TRACKPOINT) += trackpoint.o
+ psmouse-$(CONFIG_MOUSE_PS2_TOUCHKIT) += touchkit_ps2.o
++psmouse-$(CONFIG_MOUSE_PS2_CYPRESS) += cypress_ps2.o
+diff --git a/drivers/input/mouse/cypress_ps2.c b/drivers/input/mouse/cypress_ps2.c
+new file mode 100644
+index 0000000..1673dc6
+--- /dev/null
++++ b/drivers/input/mouse/cypress_ps2.c
+@@ -0,0 +1,725 @@
++/*
++ * Cypress Trackpad PS/2 mouse driver
++ *
++ * Copyright (c) 2012 Cypress Semiconductor Corporation.
++ *
++ * Author:
++ * Dudley Du <dudl@cypress.com>
++ *
++ * Additional contributors include:
++ * Kamal Mostafa <kamal@canonical.com>
++ * Kyle Fazzari <git@status.e4ward.com>
++ *
++ * This program is free software; you can redistribute it and/or modify it
++ * under the terms of the GNU General Public License version 2 as published by
++ * the Free Software Foundation.
++ */
++
++#include <linux/init.h>
++#include <linux/module.h>
++#include <linux/kernel.h>
++#include <linux/slab.h>
++#include <linux/serio.h>
++#include <linux/libps2.h>
++#include <linux/input.h>
++#include <linux/input/mt.h>
++#include <linux/sched.h>
++#include <linux/wait.h>
++
++#include "cypress_ps2.h"
++
++#undef CYTP_DEBUG_VERBOSE /* define this and DEBUG for more verbose dump */
++
++static void cypress_set_packet_size(struct psmouse *psmouse, unsigned int n)
++{
++ struct cytp_data *cytp = psmouse->private;
++ cytp->pkt_size = n;
++}
++
++static const unsigned char cytp_rate[] = {10, 20, 40, 60, 100, 200};
++static const unsigned char cytp_resolution[] = {0x00, 0x01, 0x02, 0x03};
++
++static int cypress_ps2_sendbyte(struct psmouse *psmouse, int value)
++{
++ struct ps2dev *ps2dev = &psmouse->ps2dev;
++
++ if (ps2_sendbyte(ps2dev, value & 0xff, CYTP_CMD_TIMEOUT) < 0) {
++ psmouse_dbg(psmouse,
++ "sending command 0x%02x failed, resp 0x%02x\n",
++ value & 0xff, ps2dev->nak);
++ if (ps2dev->nak == CYTP_PS2_RETRY)
++ return CYTP_PS2_RETRY;
++ else
++ return CYTP_PS2_ERROR;
++ }
++
++#ifdef CYTP_DEBUG_VERBOSE
++ psmouse_dbg(psmouse, "sending command 0x%02x succeeded, resp 0xfa\n",
++ value & 0xff);
++#endif
++
++ return 0;
++}
++
++static int cypress_ps2_ext_cmd(struct psmouse *psmouse, unsigned short cmd,
++ unsigned char data)
++{
++ struct ps2dev *ps2dev = &psmouse->ps2dev;
++ int tries = CYTP_PS2_CMD_TRIES;
++ int rc;
++
++ ps2_begin_command(ps2dev);
++
++ do {
++ /*
++ * Send extension command byte (0xE8 or 0xF3).
++ * If sending the command fails, send recovery command
++ * to make the device return to the ready state.
++ */
++ rc = cypress_ps2_sendbyte(psmouse, cmd & 0xff);
++ if (rc == CYTP_PS2_RETRY) {
++ rc = cypress_ps2_sendbyte(psmouse, 0x00);
++ if (rc == CYTP_PS2_RETRY)
++ rc = cypress_ps2_sendbyte(psmouse, 0x0a);
++ }
++ if (rc == CYTP_PS2_ERROR)
++ continue;
++
++ rc = cypress_ps2_sendbyte(psmouse, data);
++ if (rc == CYTP_PS2_RETRY)
++ rc = cypress_ps2_sendbyte(psmouse, data);
++ if (rc == CYTP_PS2_ERROR)
++ continue;
++ else
++ break;
++ } while (--tries > 0);
++
++ ps2_end_command(ps2dev);
++
++ return rc;
++}
++
++static int cypress_ps2_read_cmd_status(struct psmouse *psmouse,
++ unsigned char cmd,
++ unsigned char *param)
++{
++ int rc;
++ struct ps2dev *ps2dev = &psmouse->ps2dev;
++ enum psmouse_state old_state;
++ int pktsize;
++
++ ps2_begin_command(&psmouse->ps2dev);
++
++ old_state = psmouse->state;
++ psmouse->state = PSMOUSE_CMD_MODE;
++ psmouse->pktcnt = 0;
++
++ pktsize = (cmd == CYTP_CMD_READ_TP_METRICS) ? 8 : 3;
++ memset(param, 0, pktsize);
++
++ rc = cypress_ps2_sendbyte(psmouse, 0xe9);
++ if (rc < 0)
++ goto out;
++
++ wait_event_timeout(ps2dev->wait,
++ (psmouse->pktcnt >= pktsize),
++ msecs_to_jiffies(CYTP_CMD_TIMEOUT));
++
++ memcpy(param, psmouse->packet, pktsize);
++
++ psmouse_dbg(psmouse, "Command 0x%02x response data (0x): %*ph\n",
++ cmd, pktsize, param);
++
++out:
++ psmouse->state = old_state;
++ psmouse->pktcnt = 0;
++
++ ps2_end_command(&psmouse->ps2dev);
++
++ return rc;
++}
++
++static bool cypress_verify_cmd_state(struct psmouse *psmouse,
++ unsigned char cmd, unsigned char *param)
++{
++ bool rate_match = false;
++ bool resolution_match = false;
++ int i;
++
++ /* callers will do further checking. */
++ if (cmd == CYTP_CMD_READ_CYPRESS_ID ||
++ cmd == CYTP_CMD_STANDARD_MODE ||
++ cmd == CYTP_CMD_READ_TP_METRICS)
++ return true;
++
++ if ((~param[0] & DFLT_RESP_BITS_VALID) == DFLT_RESP_BITS_VALID &&
++ (param[0] & DFLT_RESP_BIT_MODE) == DFLT_RESP_STREAM_MODE) {
++ for (i = 0; i < sizeof(cytp_resolution); i++)
++ if (cytp_resolution[i] == param[1])
++ resolution_match = true;
++
++ for (i = 0; i < sizeof(cytp_rate); i++)
++ if (cytp_rate[i] == param[2])
++ rate_match = true;
++
++ if (resolution_match && rate_match)
++ return true;
++ }
++
++ psmouse_dbg(psmouse, "verify cmd state failed.\n");
++ return false;
++}
++
++static int cypress_send_ext_cmd(struct psmouse *psmouse, unsigned char cmd,
++ unsigned char *param)
++{
++ int tries = CYTP_PS2_CMD_TRIES;
++ int rc;
++
++ psmouse_dbg(psmouse, "send extension cmd 0x%02x, [%d %d %d %d]\n",
++ cmd, DECODE_CMD_AA(cmd), DECODE_CMD_BB(cmd),
++ DECODE_CMD_CC(cmd), DECODE_CMD_DD(cmd));
++
++ do {
++ cypress_ps2_ext_cmd(psmouse,
++ PSMOUSE_CMD_SETRES, DECODE_CMD_DD(cmd));
++ cypress_ps2_ext_cmd(psmouse,
++ PSMOUSE_CMD_SETRES, DECODE_CMD_CC(cmd));
++ cypress_ps2_ext_cmd(psmouse,
++ PSMOUSE_CMD_SETRES, DECODE_CMD_BB(cmd));
++ cypress_ps2_ext_cmd(psmouse,
++ PSMOUSE_CMD_SETRES, DECODE_CMD_AA(cmd));
++
++ rc = cypress_ps2_read_cmd_status(psmouse, cmd, param);
++ if (rc)
++ continue;
++
++ if (cypress_verify_cmd_state(psmouse, cmd, param))
++ return 0;
++
++ } while (--tries > 0);
++
++ return -EIO;
++}
++
++int cypress_detect(struct psmouse *psmouse, bool set_properties)
++{
++ unsigned char param[3];
++
++ if (cypress_send_ext_cmd(psmouse, CYTP_CMD_READ_CYPRESS_ID, param))
++ return -ENODEV;
++
++ /* Check for Cypress Trackpad signature bytes: 0x33 0xCC */
++ if (param[0] != 0x33 || param[1] != 0xCC)
++ return -ENODEV;
++
++ if (set_properties) {
++ psmouse->vendor = "Cypress";
++ psmouse->name = "Trackpad";
++ }
++
++ return 0;
++}
++
++static int cypress_read_fw_version(struct psmouse *psmouse)
++{
++ struct cytp_data *cytp = psmouse->private;
++ unsigned char param[3];
++
++ if (cypress_send_ext_cmd(psmouse, CYTP_CMD_READ_CYPRESS_ID, param))
++ return -ENODEV;
++
++ /* Check for Cypress Trackpad signature bytes: 0x33 0xCC */
++ if (param[0] != 0x33 || param[1] != 0xCC)
++ return -ENODEV;
++
++ cytp->fw_version = param[2] & FW_VERSION_MASX;
++ cytp->tp_metrics_supported = (param[2] & TP_METRICS_MASK) ? 1 : 0;
++
++ psmouse_dbg(psmouse, "cytp->fw_version = %d\n", cytp->fw_version);
++ psmouse_dbg(psmouse, "cytp->tp_metrics_supported = %d\n",
++ cytp->tp_metrics_supported);
++
++ return 0;
++}
++
++static int cypress_read_tp_metrics(struct psmouse *psmouse)
++{
++ struct cytp_data *cytp = psmouse->private;
++ unsigned char param[8];
++
++ /* set default values for tp metrics. */
++ cytp->tp_width = CYTP_DEFAULT_WIDTH;
++ cytp->tp_high = CYTP_DEFAULT_HIGH;
++ cytp->tp_max_abs_x = CYTP_ABS_MAX_X;
++ cytp->tp_max_abs_y = CYTP_ABS_MAX_Y;
++ cytp->tp_min_pressure = CYTP_MIN_PRESSURE;
++ cytp->tp_max_pressure = CYTP_MAX_PRESSURE;
++ cytp->tp_res_x = cytp->tp_max_abs_x / cytp->tp_width;
++ cytp->tp_res_y = cytp->tp_max_abs_y / cytp->tp_high;
++
++ memset(param, 0, sizeof(param));
++ if (cypress_send_ext_cmd(psmouse, CYTP_CMD_READ_TP_METRICS, param) == 0) {
++ /* Update trackpad parameters. */
++ cytp->tp_max_abs_x = (param[1] << 8) | param[0];
++ cytp->tp_max_abs_y = (param[3] << 8) | param[2];
++ cytp->tp_min_pressure = param[4];
++ cytp->tp_max_pressure = param[5];
++ }
++
++ if (!cytp->tp_max_pressure ||
++ cytp->tp_max_pressure < cytp->tp_min_pressure ||
++ !cytp->tp_width || !cytp->tp_high ||
++ !cytp->tp_max_abs_x ||
++ cytp->tp_max_abs_x < cytp->tp_width ||
++ !cytp->tp_max_abs_y ||
++ cytp->tp_max_abs_y < cytp->tp_high)
++ return -EINVAL;
++
++ cytp->tp_res_x = cytp->tp_max_abs_x / cytp->tp_width;
++ cytp->tp_res_y = cytp->tp_max_abs_y / cytp->tp_high;
++
++#ifdef CYTP_DEBUG_VERBOSE
++ psmouse_dbg(psmouse, "Dump trackpad hardware configuration as below:\n");
++ psmouse_dbg(psmouse, "cytp->tp_width = %d\n", cytp->tp_width);
++ psmouse_dbg(psmouse, "cytp->tp_high = %d\n", cytp->tp_high);
++ psmouse_dbg(psmouse, "cytp->tp_max_abs_x = %d\n", cytp->tp_max_abs_x);
++ psmouse_dbg(psmouse, "cytp->tp_max_abs_y = %d\n", cytp->tp_max_abs_y);
++ psmouse_dbg(psmouse, "cytp->tp_min_pressure = %d\n", cytp->tp_min_pressure);
++ psmouse_dbg(psmouse, "cytp->tp_max_pressure = %d\n", cytp->tp_max_pressure);
++ psmouse_dbg(psmouse, "cytp->tp_res_x = %d\n", cytp->tp_res_x);
++ psmouse_dbg(psmouse, "cytp->tp_res_y = %d\n", cytp->tp_res_y);
++
++ psmouse_dbg(psmouse, "tp_type_APA = %d\n",
++ (param[6] & TP_METRICS_BIT_APA) ? 1 : 0);
++ psmouse_dbg(psmouse, "tp_type_MTG = %d\n",
++ (param[6] & TP_METRICS_BIT_MTG) ? 1 : 0);
++ psmouse_dbg(psmouse, "tp_palm = %d\n",
++ (param[6] & TP_METRICS_BIT_PALM) ? 1 : 0);
++ psmouse_dbg(psmouse, "tp_stubborn = %d\n",
++ (param[6] & TP_METRICS_BIT_STUBBORN) ? 1 : 0);
++ psmouse_dbg(psmouse, "tp_1f_jitter = %d\n",
++ (param[6] & TP_METRICS_BIT_1F_JITTER) >> 2);
++ psmouse_dbg(psmouse, "tp_2f_jitter = %d\n",
++ (param[6] & TP_METRICS_BIT_2F_JITTER) >> 4);
++ psmouse_dbg(psmouse, "tp_1f_spike = %d\n",
++ param[7] & TP_METRICS_BIT_1F_SPIKE);
++ psmouse_dbg(psmouse, "tp_2f_spike = %d\n",
++ (param[7] & TP_METRICS_BIT_2F_SPIKE) >> 2);
++ psmouse_dbg(psmouse, "tp_abs_packet_format_set = %d\n",
++ (param[7] & TP_METRICS_BIT_ABS_PKT_FORMAT_SET) >> 4);
++#endif
++
++ return 0;
++}
++
++static int cypress_query_hardware(struct psmouse *psmouse)
++{
++ struct cytp_data *cytp = psmouse->private;
++ int ret;
++
++ ret = cypress_read_fw_version(psmouse);
++ if (ret)
++ return ret;
++
++ if (cytp->tp_metrics_supported) {
++ ret = cypress_read_tp_metrics(psmouse);
++ if (ret)
++ return ret;
++ }
++
++ return 0;
++}
++
++static int cypress_set_absolute_mode(struct psmouse *psmouse)
++{
++ struct cytp_data *cytp = psmouse->private;
++ unsigned char param[3];
++
++ if (cypress_send_ext_cmd(psmouse, CYTP_CMD_ABS_WITH_PRESSURE_MODE, param) < 0)
++ return -1;
++
++ cytp->mode = (cytp->mode & ~CYTP_BIT_ABS_REL_MASK)
++ | CYTP_BIT_ABS_PRESSURE;
++ cypress_set_packet_size(psmouse, 5);
++
++ return 0;
++}
++
++/*
++ * Reset trackpad device.
++ * This is also the default mode when trackpad powered on.
++ */
++static void cypress_reset(struct psmouse *psmouse)
++{
++ struct cytp_data *cytp = psmouse->private;
++
++ cytp->mode = 0;
++
++ psmouse_reset(psmouse);
++}
++
++static int cypress_set_input_params(struct input_dev *input,
++ struct cytp_data *cytp)
++{
++ int ret;
++
++ if (!cytp->tp_res_x || !cytp->tp_res_y)
++ return -EINVAL;
++
++ __set_bit(EV_ABS, input->evbit);
++ input_set_abs_params(input, ABS_X, 0, cytp->tp_max_abs_x, 0, 0);
++ input_set_abs_params(input, ABS_Y, 0, cytp->tp_max_abs_y, 0, 0);
++ input_set_abs_params(input, ABS_PRESSURE,
++ cytp->tp_min_pressure, cytp->tp_max_pressure, 0, 0);
++ input_set_abs_params(input, ABS_TOOL_WIDTH, 0, 255, 0, 0);
++
++ /* finger position */
++ input_set_abs_params(input, ABS_MT_POSITION_X, 0, cytp->tp_max_abs_x, 0, 0);
++ input_set_abs_params(input, ABS_MT_POSITION_Y, 0, cytp->tp_max_abs_y, 0, 0);
++ input_set_abs_params(input, ABS_MT_PRESSURE, 0, 255, 0, 0);
++
++ ret = input_mt_init_slots(input, CYTP_MAX_MT_SLOTS,
++ INPUT_MT_DROP_UNUSED|INPUT_MT_TRACK);
++ if (ret < 0)
++ return ret;
++
++ __set_bit(INPUT_PROP_SEMI_MT, input->propbit);
++
++ input_abs_set_res(input, ABS_X, cytp->tp_res_x);
++ input_abs_set_res(input, ABS_Y, cytp->tp_res_y);
++
++ input_abs_set_res(input, ABS_MT_POSITION_X, cytp->tp_res_x);
++ input_abs_set_res(input, ABS_MT_POSITION_Y, cytp->tp_res_y);
++
++ __set_bit(BTN_TOUCH, input->keybit);
++ __set_bit(BTN_TOOL_FINGER, input->keybit);
++ __set_bit(BTN_TOOL_DOUBLETAP, input->keybit);
++ __set_bit(BTN_TOOL_TRIPLETAP, input->keybit);
++ __set_bit(BTN_TOOL_QUADTAP, input->keybit);
++ __set_bit(BTN_TOOL_QUINTTAP, input->keybit);
++
++ __clear_bit(EV_REL, input->evbit);
++ __clear_bit(REL_X, input->relbit);
++ __clear_bit(REL_Y, input->relbit);
++
++ __set_bit(INPUT_PROP_BUTTONPAD, input->propbit);
++ __set_bit(EV_KEY, input->evbit);
++ __set_bit(BTN_LEFT, input->keybit);
++ __set_bit(BTN_RIGHT, input->keybit);
++ __set_bit(BTN_MIDDLE, input->keybit);
++
++ input_set_drvdata(input, cytp);
++
++ return 0;
++}
++
++static int cypress_get_finger_count(unsigned char header_byte)
++{
++ unsigned char bits6_7;
++ int finger_count;
++
++ bits6_7 = header_byte >> 6;
++ finger_count = bits6_7 & 0x03;
++
++ if (finger_count == 1)
++ return 1;
++
++ if (header_byte & ABS_HSCROLL_BIT) {
++ /* HSCROLL gets added on to 0 finger count. */
++ switch (finger_count) {
++ case 0: return 4;
++ case 2: return 5;
++ default:
++ /* Invalid contact (e.g. palm). Ignore it. */
++ return -1;
++ }
++ }
++
++ return finger_count;
++}
++
++
++static int cypress_parse_packet(struct psmouse *psmouse,
++ struct cytp_data *cytp, struct cytp_report_data *report_data)
++{
++ unsigned char *packet = psmouse->packet;
++ unsigned char header_byte = packet[0];
++ int contact_cnt;
++
++ memset(report_data, 0, sizeof(struct cytp_report_data));
++
++ contact_cnt = cypress_get_finger_count(header_byte);
++
++ if (contact_cnt < 0) /* e.g. palm detect */
++ return -EINVAL;
++
++ report_data->contact_cnt = contact_cnt;
++
++ report_data->tap = (header_byte & ABS_MULTIFINGER_TAP) ? 1 : 0;
++
++ if (report_data->contact_cnt == 1) {
++ report_data->contacts[0].x =
++ ((packet[1] & 0x70) << 4) | packet[2];
++ report_data->contacts[0].y =
++ ((packet[1] & 0x07) << 8) | packet[3];
++ if (cytp->mode & CYTP_BIT_ABS_PRESSURE)
++ report_data->contacts[0].z = packet[4];
++
++ } else if (report_data->contact_cnt >= 2) {
++ report_data->contacts[0].x =
++ ((packet[1] & 0x70) << 4) | packet[2];
++ report_data->contacts[0].y =
++ ((packet[1] & 0x07) << 8) | packet[3];
++ if (cytp->mode & CYTP_BIT_ABS_PRESSURE)
++ report_data->contacts[0].z = packet[4];
++
++ report_data->contacts[1].x =
++ ((packet[5] & 0xf0) << 4) | packet[6];
++ report_data->contacts[1].y =
++ ((packet[5] & 0x0f) << 8) | packet[7];
++ if (cytp->mode & CYTP_BIT_ABS_PRESSURE)
++ report_data->contacts[1].z = report_data->contacts[0].z;
++ }
++
++ report_data->left = (header_byte & BTN_LEFT_BIT) ? 1 : 0;
++ report_data->right = (header_byte & BTN_RIGHT_BIT) ? 1 : 0;
++
++ /*
++ * This is only true if one of the mouse buttons were tapped. Make
++ * sure it doesn't turn into a click. The regular tap-to-click
++ * functionality will handle that on its own. If we don't do this,
++ * disabling tap-to-click won't affect the mouse button zones.
++ */
++ if (report_data->tap)
++ report_data->left = 0;
++
++#ifdef CYTP_DEBUG_VERBOSE
++ {
++ int i;
++ int n = report_data->contact_cnt;
++ psmouse_dbg(psmouse, "Dump parsed report data as below:\n");
++ psmouse_dbg(psmouse, "contact_cnt = %d\n",
++ report_data->contact_cnt);
++ if (n > CYTP_MAX_MT_SLOTS)
++ n = CYTP_MAX_MT_SLOTS;
++ for (i = 0; i < n; i++)
++ psmouse_dbg(psmouse, "contacts[%d] = {%d, %d, %d}\n", i,
++ report_data->contacts[i].x,
++ report_data->contacts[i].y,
++ report_data->contacts[i].z);
++ psmouse_dbg(psmouse, "left = %d\n", report_data->left);
++ psmouse_dbg(psmouse, "right = %d\n", report_data->right);
++ psmouse_dbg(psmouse, "middle = %d\n", report_data->middle);
++ }
++#endif
++
++ return 0;
++}
++
++static void cypress_process_packet(struct psmouse *psmouse, bool zero_pkt)
++{
++ int i;
++ struct input_dev *input = psmouse->dev;
++ struct cytp_data *cytp = psmouse->private;
++ struct cytp_report_data report_data;
++ struct cytp_contact *contact;
++ struct input_mt_pos pos[CYTP_MAX_MT_SLOTS];
++ int slots[CYTP_MAX_MT_SLOTS];
++ int n;
++
++ if (cypress_parse_packet(psmouse, cytp, &report_data))
++ return;
++
++ n = report_data.contact_cnt;
++
++ if (n > CYTP_MAX_MT_SLOTS)
++ n = CYTP_MAX_MT_SLOTS;
++
++ for (i = 0; i < n; i++) {
++ contact = &report_data.contacts[i];
++ pos[i].x = contact->x;
++ pos[i].y = contact->y;
++ }
++
++ input_mt_assign_slots(input, slots, pos, n);
++
++ for (i = 0; i < n; i++) {
++ contact = &report_data.contacts[i];
++ input_mt_slot(input, slots[i]);
++ input_mt_report_slot_state(input, MT_TOOL_FINGER, true);
++ input_report_abs(input, ABS_MT_POSITION_X, contact->x);
++ input_report_abs(input, ABS_MT_POSITION_Y, contact->y);
++ input_report_abs(input, ABS_MT_PRESSURE, contact->z);
++ }
++
++ input_mt_sync_frame(input);
++
++ input_mt_report_finger_count(input, report_data.contact_cnt);
++
++ input_report_key(input, BTN_LEFT, report_data.left);
++ input_report_key(input, BTN_RIGHT, report_data.right);
++ input_report_key(input, BTN_MIDDLE, report_data.middle);
++
++ input_sync(input);
++}
++
++static psmouse_ret_t cypress_validate_byte(struct psmouse *psmouse)
++{
++ int contact_cnt;
++ int index = psmouse->pktcnt - 1;
++ unsigned char *packet = psmouse->packet;
++ struct cytp_data *cytp = psmouse->private;
++
++ if (index < 0 || index > cytp->pkt_size)
++ return PSMOUSE_BAD_DATA;
++
++ if (index == 0 && (packet[0] & 0xfc) == 0) {
++ /* call packet process for reporting finger leave. */
++ cypress_process_packet(psmouse, 1);
++ return PSMOUSE_FULL_PACKET;
++ }
++
++ /*
++ * Perform validation (and adjust packet size) based only on the
++ * first byte; allow all further bytes through.
++ */
++ if (index != 0)
++ return PSMOUSE_GOOD_DATA;
++
++ /*
++ * If absolute/relative mode bit has not been set yet, just pass
++ * the byte through.
++ */
++ if ((cytp->mode & CYTP_BIT_ABS_REL_MASK) == 0)
++ return PSMOUSE_GOOD_DATA;
++
++ if ((packet[0] & 0x08) == 0x08)
++ return PSMOUSE_BAD_DATA;
++
++ contact_cnt = cypress_get_finger_count(packet[0]);
++
++ if (contact_cnt < 0)
++ return PSMOUSE_BAD_DATA;
++
++ if (cytp->mode & CYTP_BIT_ABS_NO_PRESSURE)
++ cypress_set_packet_size(psmouse, contact_cnt == 2 ? 7 : 4);
++ else
++ cypress_set_packet_size(psmouse, contact_cnt == 2 ? 8 : 5);
++
++ return PSMOUSE_GOOD_DATA;
++}
++
++static psmouse_ret_t cypress_protocol_handler(struct psmouse *psmouse)
++{
++ struct cytp_data *cytp = psmouse->private;
++
++ if (psmouse->pktcnt >= cytp->pkt_size) {
++ cypress_process_packet(psmouse, 0);
++ return PSMOUSE_FULL_PACKET;
++ }
++
++ return cypress_validate_byte(psmouse);
++}
++
++static void cypress_set_rate(struct psmouse *psmouse, unsigned int rate)
++{
++ struct cytp_data *cytp = psmouse->private;
++
++ if (rate >= 80) {
++ psmouse->rate = 80;
++ cytp->mode |= CYTP_BIT_HIGH_RATE;
++ } else {
++ psmouse->rate = 40;
++ cytp->mode &= ~CYTP_BIT_HIGH_RATE;
++ }
++
++ ps2_command(&psmouse->ps2dev, (unsigned char *)&psmouse->rate,
++ PSMOUSE_CMD_SETRATE);
++}
++
++static void cypress_disconnect(struct psmouse *psmouse)
++{
++ cypress_reset(psmouse);
++ kfree(psmouse->private);
++ psmouse->private = NULL;
++}
++
++static int cypress_reconnect(struct psmouse *psmouse)
++{
++ int tries = CYTP_PS2_CMD_TRIES;
++ int rc;
++
++ do {
++ cypress_reset(psmouse);
++ rc = cypress_detect(psmouse, false);
++ } while (rc && (--tries > 0));
++
++ if (rc) {
++ psmouse_err(psmouse, "Reconnect: unable to detect trackpad.\n");
++ return -1;
++ }
++
++ if (cypress_set_absolute_mode(psmouse)) {
++ psmouse_err(psmouse, "Reconnect: Unable to initialize Cypress absolute mode.\n");
++ return -1;
++ }
++
++ return 0;
++}
++
++int cypress_init(struct psmouse *psmouse)
++{
++ struct cytp_data *cytp;
++
++ cytp = (struct cytp_data *)kzalloc(sizeof(struct cytp_data), GFP_KERNEL);
++ psmouse->private = (void *)cytp;
++ if (cytp == NULL)
++ return -ENOMEM;
++
++ cypress_reset(psmouse);
++
++ psmouse->pktsize = 8;
++
++ if (cypress_query_hardware(psmouse)) {
++ psmouse_err(psmouse, "Unable to query Trackpad hardware.\n");
++ goto err_exit;
++ }
++
++ if (cypress_set_absolute_mode(psmouse)) {
++ psmouse_err(psmouse, "init: Unable to initialize Cypress absolute mode.\n");
++ goto err_exit;
++ }
++
++ if (cypress_set_input_params(psmouse->dev, cytp) < 0) {
++ psmouse_err(psmouse, "init: Unable to set input params.\n");
++ goto err_exit;
++ }
++
++ psmouse->model = 1;
++ psmouse->protocol_handler = cypress_protocol_handler;
++ psmouse->set_rate = cypress_set_rate;
++ psmouse->disconnect = cypress_disconnect;
++ psmouse->reconnect = cypress_reconnect;
++ psmouse->cleanup = cypress_reset;
++ psmouse->resync_time = 0;
++
++ return 0;
++
++err_exit:
++ /*
++ * Reset Cypress Trackpad as a standard mouse. Then
++ * let psmouse driver commmunicating with it as default PS2 mouse.
++ */
++ cypress_reset(psmouse);
++
++ psmouse->private = NULL;
++ kfree(cytp);
++
++ return -1;
++}
++
++bool cypress_supported(void)
++{
++ return true;
++}
+diff --git a/drivers/input/mouse/cypress_ps2.h b/drivers/input/mouse/cypress_ps2.h
+new file mode 100644
+index 0000000..4720f21
+--- /dev/null
++++ b/drivers/input/mouse/cypress_ps2.h
+@@ -0,0 +1,191 @@
++#ifndef _CYPRESS_PS2_H
++#define _CYPRESS_PS2_H
++
++#include "psmouse.h"
++
++#define CMD_BITS_MASK 0x03
++#define COMPOSIT(x, s) (((x) & CMD_BITS_MASK) << (s))
++
++#define ENCODE_CMD(aa, bb, cc, dd) \
++ (COMPOSIT((aa), 6) | COMPOSIT((bb), 4) | COMPOSIT((cc), 2) | COMPOSIT((dd), 0))
++#define CYTP_CMD_ABS_NO_PRESSURE_MODE ENCODE_CMD(0, 1, 0, 0)
++#define CYTP_CMD_ABS_WITH_PRESSURE_MODE ENCODE_CMD(0, 1, 0, 1)
++#define CYTP_CMD_SMBUS_MODE ENCODE_CMD(0, 1, 1, 0)
++#define CYTP_CMD_STANDARD_MODE ENCODE_CMD(0, 2, 0, 0) /* not implemented yet. */
++#define CYTP_CMD_CYPRESS_REL_MODE ENCODE_CMD(1, 1, 1, 1) /* not implemented yet. */
++#define CYTP_CMD_READ_CYPRESS_ID ENCODE_CMD(0, 0, 0, 0)
++#define CYTP_CMD_READ_TP_METRICS ENCODE_CMD(0, 0, 0, 1)
++#define CYTP_CMD_SET_HSCROLL_WIDTH(w) ENCODE_CMD(1, 1, 0, (w))
++#define CYTP_CMD_SET_HSCROLL_MASK ENCODE_CMD(1, 1, 0, 0)
++#define CYTP_CMD_SET_VSCROLL_WIDTH(w) ENCODE_CMD(1, 2, 0, (w))
++#define CYTP_CMD_SET_VSCROLL_MASK ENCODE_CMD(1, 2, 0, 0)
++#define CYTP_CMD_SET_PALM_GEOMETRY(e) ENCODE_CMD(1, 2, 1, (e))
++#define CYTP_CMD_PALM_GEMMETRY_MASK ENCODE_CMD(1, 2, 1, 0)
++#define CYTP_CMD_SET_PALM_SENSITIVITY(s) ENCODE_CMD(1, 2, 2, (s))
++#define CYTP_CMD_PALM_SENSITIVITY_MASK ENCODE_CMD(1, 2, 2, 0)
++#define CYTP_CMD_SET_MOUSE_SENSITIVITY(s) ENCODE_CMD(1, 3, ((s) >> 2), (s))
++#define CYTP_CMD_MOUSE_SENSITIVITY_MASK ENCODE_CMD(1, 3, 0, 0)
++#define CYTP_CMD_REQUEST_BASELINE_STATUS ENCODE_CMD(2, 0, 0, 1)
++#define CYTP_CMD_REQUEST_RECALIBRATION ENCODE_CMD(2, 0, 0, 3)
++
++#define DECODE_CMD_AA(x) (((x) >> 6) & CMD_BITS_MASK)
++#define DECODE_CMD_BB(x) (((x) >> 4) & CMD_BITS_MASK)
++#define DECODE_CMD_CC(x) (((x) >> 2) & CMD_BITS_MASK)
++#define DECODE_CMD_DD(x) ((x) & CMD_BITS_MASK)
++
++/* Cypress trackpad working mode. */
++#define CYTP_BIT_ABS_PRESSURE (1 << 3)
++#define CYTP_BIT_ABS_NO_PRESSURE (1 << 2)
++#define CYTP_BIT_CYPRESS_REL (1 << 1)
++#define CYTP_BIT_STANDARD_REL (1 << 0)
++#define CYTP_BIT_REL_MASK (CYTP_BIT_CYPRESS_REL | CYTP_BIT_STANDARD_REL)
++#define CYTP_BIT_ABS_MASK (CYTP_BIT_ABS_PRESSURE | CYTP_BIT_ABS_NO_PRESSURE)
++#define CYTP_BIT_ABS_REL_MASK (CYTP_BIT_ABS_MASK | CYTP_BIT_REL_MASK)
++
++#define CYTP_BIT_HIGH_RATE (1 << 4)
++/*
++ * report mode bit is set, firmware working in Remote Mode.
++ * report mode bit is cleared, firmware working in Stream Mode.
++ */
++#define CYTP_BIT_REPORT_MODE (1 << 5)
++
++/* scrolling width values for set HSCROLL and VSCROLL width command. */
++#define SCROLL_WIDTH_NARROW 1
++#define SCROLL_WIDTH_NORMAL 2
++#define SCROLL_WIDTH_WIDE 3
++
++#define PALM_GEOMETRY_ENABLE 1
++#define PALM_GEOMETRY_DISABLE 0
++
++#define TP_METRICS_MASK 0x80
++#define FW_VERSION_MASX 0x7f
++#define FW_VER_HIGH_MASK 0x70
++#define FW_VER_LOW_MASK 0x0f
++
++/* Times to retry a ps2_command and millisecond delay between tries. */
++#define CYTP_PS2_CMD_TRIES 3
++#define CYTP_PS2_CMD_DELAY 500
++
++/* time out for PS/2 command only in milliseconds. */
++#define CYTP_CMD_TIMEOUT 200
++#define CYTP_DATA_TIMEOUT 30
++
++#define CYTP_EXT_CMD 0xe8
++#define CYTP_PS2_RETRY 0xfe
++#define CYTP_PS2_ERROR 0xfc
++
++#define CYTP_RESP_RETRY 0x01
++#define CYTP_RESP_ERROR 0xfe
++
++
++#define CYTP_105001_WIDTH 97 /* Dell XPS 13 */
++#define CYTP_105001_HIGH 59
++#define CYTP_DEFAULT_WIDTH (CYTP_105001_WIDTH)
++#define CYTP_DEFAULT_HIGH (CYTP_105001_HIGH)
++
++#define CYTP_ABS_MAX_X 1600
++#define CYTP_ABS_MAX_Y 900
++#define CYTP_MAX_PRESSURE 255
++#define CYTP_MIN_PRESSURE 0
++
++/* header byte bits of relative package. */
++#define BTN_LEFT_BIT 0x01
++#define BTN_RIGHT_BIT 0x02
++#define BTN_MIDDLE_BIT 0x04
++#define REL_X_SIGN_BIT 0x10
++#define REL_Y_SIGN_BIT 0x20
++
++/* header byte bits of absolute package. */
++#define ABS_VSCROLL_BIT 0x10
++#define ABS_HSCROLL_BIT 0x20
++#define ABS_MULTIFINGER_TAP 0x04
++#define ABS_EDGE_MOTION_MASK 0x80
++
++#define DFLT_RESP_BITS_VALID 0x88 /* SMBus bit should not be set. */
++#define DFLT_RESP_SMBUS_BIT 0x80
++#define DFLT_SMBUS_MODE 0x80
++#define DFLT_PS2_MODE 0x00
++#define DFLT_RESP_BIT_MODE 0x40
++#define DFLT_RESP_REMOTE_MODE 0x40
++#define DFLT_RESP_STREAM_MODE 0x00
++#define DFLT_RESP_BIT_REPORTING 0x20
++#define DFLT_RESP_BIT_SCALING 0x10
++
++#define TP_METRICS_BIT_PALM 0x80
++#define TP_METRICS_BIT_STUBBORN 0x40
++#define TP_METRICS_BIT_2F_JITTER 0x30
++#define TP_METRICS_BIT_1F_JITTER 0x0c
++#define TP_METRICS_BIT_APA 0x02
++#define TP_METRICS_BIT_MTG 0x01
++#define TP_METRICS_BIT_ABS_PKT_FORMAT_SET 0xf0
++#define TP_METRICS_BIT_2F_SPIKE 0x0c
++#define TP_METRICS_BIT_1F_SPIKE 0x03
++
++/* bits of first byte response of E9h-Status Request command. */
++#define RESP_BTN_RIGHT_BIT 0x01
++#define RESP_BTN_MIDDLE_BIT 0x02
++#define RESP_BTN_LEFT_BIT 0x04
++#define RESP_SCALING_BIT 0x10
++#define RESP_ENABLE_BIT 0x20
++#define RESP_REMOTE_BIT 0x40
++#define RESP_SMBUS_BIT 0x80
++
++#define CYTP_MAX_MT_SLOTS 2
++
++struct cytp_contact {
++ int x;
++ int y;
++ int z; /* also named as touch pressure. */
++};
++
++/* The structure of Cypress Trackpad event data. */
++struct cytp_report_data {
++ int contact_cnt;
++ struct cytp_contact contacts[CYTP_MAX_MT_SLOTS];
++ unsigned int left:1;
++ unsigned int right:1;
++ unsigned int middle:1;
++ unsigned int tap:1; /* multi-finger tap detected. */
++};
++
++/* The structure of Cypress Trackpad device private data. */
++struct cytp_data {
++ int fw_version;
++
++ int pkt_size;
++ int mode;
++
++ int tp_min_pressure;
++ int tp_max_pressure;
++ int tp_width; /* X direction physical size in mm. */
++ int tp_high; /* Y direction physical size in mm. */
++ int tp_max_abs_x; /* Max X absolute units that can be reported. */
++ int tp_max_abs_y; /* Max Y absolute units that can be reported. */
++
++ int tp_res_x; /* X resolution in units/mm. */
++ int tp_res_y; /* Y resolution in units/mm. */
++
++ int tp_metrics_supported;
++};
++
++
++#ifdef CONFIG_MOUSE_PS2_CYPRESS
++int cypress_detect(struct psmouse *psmouse, bool set_properties);
++int cypress_init(struct psmouse *psmouse);
++bool cypress_supported(void);
++#else
++inline int cypress_detect(struct psmouse *psmouse, bool set_properties)
++{
++ return -ENOSYS;
++}
++inline int cypress_init(struct psmouse *psmouse)
++{
++ return -ENOSYS;
++}
++inline bool cypress_supported(void)
++{
++ return 0;
++}
++#endif /* CONFIG_MOUSE_PS2_CYPRESS */
++
++#endif /* _CYPRESS_PS2_H */
+diff --git a/drivers/input/mouse/psmouse-base.c b/drivers/input/mouse/psmouse-base.c
+index 22fe254..cff065f 100644
+--- a/drivers/input/mouse/psmouse-base.c
++++ b/drivers/input/mouse/psmouse-base.c
+@@ -34,6 +34,7 @@
+ #include "touchkit_ps2.h"
+ #include "elantech.h"
+ #include "sentelic.h"
++#include "cypress_ps2.h"
+
+ #define DRIVER_DESC "PS/2 mouse driver"
+
+@@ -759,6 +760,28 @@ static int psmouse_extensions(struct psmouse *psmouse,
+ }
+
+ /*
++ * Try Cypress Trackpad.
++ * Must try it before Finger Sensing Pad because Finger Sensing Pad probe
++ * upsets some modules of Cypress Trackpads.
++ */
++ if (max_proto > PSMOUSE_IMEX &&
++ cypress_detect(psmouse, set_properties) == 0) {
++ if (cypress_supported()) {
++ if (cypress_init(psmouse) == 0)
++ return PSMOUSE_CYPRESS;
++
++ /*
++ * Finger Sensing Pad probe upsets some modules of
++ * Cypress Trackpad, must avoid Finger Sensing Pad
++ * probe if Cypress Trackpad device detected.
++ */
++ return PSMOUSE_PS2;
++ }
++
++ max_proto = PSMOUSE_IMEX;
++ }
++
++/*
+ * Try ALPS TouchPad
+ */
+ if (max_proto > PSMOUSE_IMEX) {
+@@ -896,6 +919,15 @@ static const struct psmouse_protocol psmouse_protocols[] = {
+ .alias = "thinkps",
+ .detect = thinking_detect,
+ },
++#ifdef CONFIG_MOUSE_PS2_CYPRESS
++ {
++ .type = PSMOUSE_CYPRESS,
++ .name = "CyPS/2",
++ .alias = "cypress",
++ .detect = cypress_detect,
++ .init = cypress_init,
++ },
++#endif
+ {
+ .type = PSMOUSE_GENPS,
+ .name = "GenPS/2",
+diff --git a/drivers/input/mouse/psmouse.h b/drivers/input/mouse/psmouse.h
+index fe1df23..2f0b39d 100644
+--- a/drivers/input/mouse/psmouse.h
++++ b/drivers/input/mouse/psmouse.h
+@@ -95,6 +95,7 @@ enum psmouse_type {
+ PSMOUSE_ELANTECH,
+ PSMOUSE_FSP,
+ PSMOUSE_SYNAPTICS_RELATIVE,
++ PSMOUSE_CYPRESS,
+ PSMOUSE_AUTO /* This one should always be last */
+ };
+
+--
+1.7.7.6
+
diff --git a/freed-ora/current/master/Input-increase-struct-ps2dev-cmdbuf-to-8-bytes.patch b/freed-ora/current/master/Input-increase-struct-ps2dev-cmdbuf-to-8-bytes.patch
new file mode 100644
index 000000000..c3548aa07
--- /dev/null
+++ b/freed-ora/current/master/Input-increase-struct-ps2dev-cmdbuf-to-8-bytes.patch
@@ -0,0 +1,30 @@
+From 80524f083e2c3e70057f5bb476db92baa14cb22b Mon Sep 17 00:00:00 2001
+From: Kamal Mostafa <kamal@canonical.com>
+Date: Tue, 20 Nov 2012 23:04:35 -0800
+Subject: [PATCH] Input: increase struct ps2dev cmdbuf[] to 8 bytes
+
+Cypress PS/2 Trackpad (drivers/input/mouse/cypress_ps2.c) needs
+this larger cmdbuf[] to handle 8-byte packet responses.
+
+Signed-off-by: Kamal Mostafa <kamal@canonical.com>
+Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
+---
+ include/linux/libps2.h | 2 +-
+ 1 files changed, 1 insertions(+), 1 deletions(-)
+
+diff --git a/include/linux/libps2.h b/include/linux/libps2.h
+index 79603a6..4ad06e8 100644
+--- a/include/linux/libps2.h
++++ b/include/linux/libps2.h
+@@ -36,7 +36,7 @@ struct ps2dev {
+ wait_queue_head_t wait;
+
+ unsigned long flags;
+- unsigned char cmdbuf[6];
++ unsigned char cmdbuf[8];
+ unsigned char cmdcnt;
+ unsigned char nak;
+ };
+--
+1.7.7.6
+
diff --git a/freed-ora/current/master/Makefile.config b/freed-ora/current/master/Makefile.config
index f95559d8b..21c2a837b 100644
--- a/freed-ora/current/master/Makefile.config
+++ b/freed-ora/current/master/Makefile.config
@@ -11,14 +11,12 @@ CONFIGFILES = \
$(CFG)-s390x.config \
$(CFG)-armv5tel-kirkwood.config \
$(CFG)-armv7l.config $(CFG)-armv7hl.config \
- $(CFG)-armv7l-imx.config $(CFG)-armv7hl-imx.config \
$(CFG)-armv7l-omap.config $(CFG)-armv7hl-omap.config \
$(CFG)-armv7l-tegra.config $(CFG)-armv7hl-tegra.config \
$(CFG)-ppc.config $(CFG)-ppc-smp.config \
- $(CFG)-sparc64.config \
$(CFG)-ppc64.config $(CFG)-ppc64p7.config $(CFG)-ppc64-debug.config
-PLATFORMS = x86 x86_64 powerpc powerpc32 powerpc64 s390x sparc64 arm
+PLATFORMS = x86 x86_64 powerpc powerpc32 powerpc64 s390x arm
TEMPFILES = $(addprefix temp-, $(addsuffix -generic, $(PLATFORMS)))
configs: $(CONFIGFILES)
@@ -51,9 +49,6 @@ temp-armv7l-tegra: config-arm-tegra temp-arm-generic
temp-armv5tel-kirkwood: config-arm-kirkwood temp-arm-generic
perl merge.pl $^ > $@
-temp-armv7l-imx: config-arm-imx temp-arm-generic
- perl merge.pl $^ > $@
-
temp-x86-32: config-x86-32-generic config-x86-generic
perl merge.pl $^ > $@
@@ -72,9 +67,6 @@ temp-x86_64-generic: temp-x86-64 temp-generic
temp-x86_64-debug-generic: temp-x86-64 temp-debug-generic
perl merge.pl $^ > $@
-temp-sparc64-generic: config-sparc64-generic temp-generic
- perl merge.pl $^ > $@
-
temp-powerpc-generic: config-powerpc-generic temp-generic
perl merge.pl $^ > $@
@@ -108,9 +100,6 @@ kernel-$(VERSION)-x86_64.config: /dev/null temp-x86_64-generic
kernel-$(VERSION)-x86_64-debug.config: /dev/null temp-x86_64-debug-generic
perl merge.pl $^ x86_64 > $@
-kernel-$(VERSION)-sparc64.config: /dev/null temp-sparc64-generic
- perl merge.pl $^ sparc64 > $@
-
kernel-$(VERSION)-ppc64.config: /dev/null temp-powerpc64-generic
perl merge.pl $^ powerpc > $@
@@ -129,9 +118,6 @@ kernel-$(VERSION)-armv5tel-kirkwood.config: /dev/null temp-armv5tel-kirkwood
kernel-$(VERSION)-armv7l.config: /dev/null temp-armv7
perl merge.pl $^ arm > $@
-kernel-$(VERSION)-armv7l-imx.config: /dev/null temp-armv7l-imx
- perl merge.pl $^ arm > $@
-
kernel-$(VERSION)-armv7l-omap.config: /dev/null temp-armv7l-omap
perl merge.pl $^ arm > $@
@@ -141,9 +127,6 @@ kernel-$(VERSION)-armv7l-tegra.config: /dev/null temp-armv7l-tegra
kernel-$(VERSION)-armv7hl.config: /dev/null temp-armv7
perl merge.pl $^ arm > $@
-kernel-$(VERSION)-armv7hl-imx.config: /dev/null temp-armv7l-imx
- perl merge.pl $^ arm > $@
-
kernel-$(VERSION)-armv7hl-omap.config: /dev/null temp-armv7l-omap
perl merge.pl $^ arm > $@
diff --git a/freed-ora/current/master/Revert-8139cp-revert-set-ring-address-before-enabling.patch b/freed-ora/current/master/Revert-8139cp-revert-set-ring-address-before-enabling.patch
deleted file mode 100644
index 6ed20c43c..000000000
--- a/freed-ora/current/master/Revert-8139cp-revert-set-ring-address-before-enabling.patch
+++ /dev/null
@@ -1,59 +0,0 @@
-From 071e3ef4a94a021b16a2912f3885c86f4ff36b49 Mon Sep 17 00:00:00 2001
-From: "David S. Miller" <davem@davemloft.net>
-Date: Sun, 25 Nov 2012 15:52:09 -0500
-Subject: [PATCH] Revert "8139cp: revert "set ring address before enabling
- receiver""
-
-This reverts commit b26623dab7eeb1e9f5898c7a49458789dd492f20.
-
-This reverts the revert, in net-next we'll try another scheme
-to fix this bug using patches from David Woodhouse.
-
-Signed-off-by: David S. Miller <davem@davemloft.net>
----
- drivers/net/ethernet/realtek/8139cp.c | 22 +++++++++++-----------
- 1 files changed, 11 insertions(+), 11 deletions(-)
-
-diff --git a/drivers/net/ethernet/realtek/8139cp.c b/drivers/net/ethernet/realtek/8139cp.c
-index b01f83a..1c81825 100644
---- a/drivers/net/ethernet/realtek/8139cp.c
-+++ b/drivers/net/ethernet/realtek/8139cp.c
-@@ -979,6 +979,17 @@ static void cp_init_hw (struct cp_private *cp)
- cpw32_f (MAC0 + 0, le32_to_cpu (*(__le32 *) (dev->dev_addr + 0)));
- cpw32_f (MAC0 + 4, le32_to_cpu (*(__le32 *) (dev->dev_addr + 4)));
-
-+ cpw32_f(HiTxRingAddr, 0);
-+ cpw32_f(HiTxRingAddr + 4, 0);
-+
-+ ring_dma = cp->ring_dma;
-+ cpw32_f(RxRingAddr, ring_dma & 0xffffffff);
-+ cpw32_f(RxRingAddr + 4, (ring_dma >> 16) >> 16);
-+
-+ ring_dma += sizeof(struct cp_desc) * CP_RX_RING_SIZE;
-+ cpw32_f(TxRingAddr, ring_dma & 0xffffffff);
-+ cpw32_f(TxRingAddr + 4, (ring_dma >> 16) >> 16);
-+
- cp_start_hw(cp);
- cpw8(TxThresh, 0x06); /* XXX convert magic num to a constant */
-
-@@ -992,17 +1003,6 @@ static void cp_init_hw (struct cp_private *cp)
-
- cpw8(Config5, cpr8(Config5) & PMEStatus);
-
-- cpw32_f(HiTxRingAddr, 0);
-- cpw32_f(HiTxRingAddr + 4, 0);
--
-- ring_dma = cp->ring_dma;
-- cpw32_f(RxRingAddr, ring_dma & 0xffffffff);
-- cpw32_f(RxRingAddr + 4, (ring_dma >> 16) >> 16);
--
-- ring_dma += sizeof(struct cp_desc) * CP_RX_RING_SIZE;
-- cpw32_f(TxRingAddr, ring_dma & 0xffffffff);
-- cpw32_f(TxRingAddr + 4, (ring_dma >> 16) >> 16);
--
- cpw16(MultiIntr, 0);
-
- cpw8_f(Cfg9346, Cfg9346_Lock);
---
-1.7.6.5
-
diff --git a/freed-ora/current/master/Revert-iwlwifi-fix-the-reclaimed-packet-tracking-upon.patch b/freed-ora/current/master/Revert-iwlwifi-fix-the-reclaimed-packet-tracking-upon.patch
new file mode 100644
index 000000000..302774b45
--- /dev/null
+++ b/freed-ora/current/master/Revert-iwlwifi-fix-the-reclaimed-packet-tracking-upon.patch
@@ -0,0 +1,68 @@
+From ae023b2795d36f0f077e157428eb7eafa29ee412 Mon Sep 17 00:00:00 2001
+From: Emmanuel Grumbach <emmanuel.grumbach@intel.com>
+Date: Mon, 21 Jan 2013 13:12:57 +0200
+Subject: [PATCH] Revert "iwlwifi: fix the reclaimed packet tracking upon
+ flush queue"
+
+This reverts commit f590dcec944552f9a4a61155810f3abd17d6465d
+which has been reported to cause issues.
+
+See https://lkml.org/lkml/2013/1/20/4 for further details.
+
+Cc: stable@vger.kernel.org [3.7]
+Signed-off-by: Emmanuel Grumbach <emmanuel.grumbach@intel.com>
+Signed-off-by: Johannes Berg <johannes.berg@intel.com>
+---
+ drivers/net/wireless/iwlwifi/dvm/tx.c | 24 +++++++-----------------
+ 1 files changed, 7 insertions(+), 17 deletions(-)
+
+diff --git a/drivers/net/wireless/iwlwifi/dvm/tx.c b/drivers/net/wireless/iwlwifi/dvm/tx.c
+index 31534f7..2797964 100644
+--- a/drivers/net/wireless/iwlwifi/dvm/tx.c
++++ b/drivers/net/wireless/iwlwifi/dvm/tx.c
+@@ -1153,6 +1153,13 @@ int iwlagn_rx_reply_tx(struct iwl_priv *priv, struct iwl_rx_cmd_buffer *rxb,
+ next_reclaimed = ssn;
+ }
+
++ if (tid != IWL_TID_NON_QOS) {
++ priv->tid_data[sta_id][tid].next_reclaimed =
++ next_reclaimed;
++ IWL_DEBUG_TX_REPLY(priv, "Next reclaimed packet:%d\n",
++ next_reclaimed);
++ }
++
+ iwl_trans_reclaim(priv->trans, txq_id, ssn, &skbs);
+
+ iwlagn_check_ratid_empty(priv, sta_id, tid);
+@@ -1203,28 +1210,11 @@ int iwlagn_rx_reply_tx(struct iwl_priv *priv, struct iwl_rx_cmd_buffer *rxb,
+ if (!is_agg)
+ iwlagn_non_agg_tx_status(priv, ctx, hdr->addr1);
+
+- /*
+- * W/A for FW bug - the seq_ctl isn't updated when the
+- * queues are flushed. Fetch it from the packet itself
+- */
+- if (!is_agg && status == TX_STATUS_FAIL_FIFO_FLUSHED) {
+- next_reclaimed = le16_to_cpu(hdr->seq_ctrl);
+- next_reclaimed =
+- SEQ_TO_SN(next_reclaimed + 0x10);
+- }
+-
+ is_offchannel_skb =
+ (info->flags & IEEE80211_TX_CTL_TX_OFFCHAN);
+ freed++;
+ }
+
+- if (tid != IWL_TID_NON_QOS) {
+- priv->tid_data[sta_id][tid].next_reclaimed =
+- next_reclaimed;
+- IWL_DEBUG_TX_REPLY(priv, "Next reclaimed packet:%d\n",
+- next_reclaimed);
+- }
+-
+ WARN_ON(!is_agg && freed != 1);
+
+ /*
+--
+1.7.6.5
+
diff --git a/freed-ora/current/master/linux-2.6-acpi-debug-infinite-loop.patch b/freed-ora/current/master/acpi-debug-infinite-loop.patch
index f2cc1a55e..f2cc1a55e 100644
--- a/freed-ora/current/master/linux-2.6-acpi-debug-infinite-loop.patch
+++ b/freed-ora/current/master/acpi-debug-infinite-loop.patch
diff --git a/freed-ora/current/master/linux-2.6-acpi-video-dos.patch b/freed-ora/current/master/acpi-video-dos.patch
index 3e2085193..3e2085193 100644
--- a/freed-ora/current/master/linux-2.6-acpi-video-dos.patch
+++ b/freed-ora/current/master/acpi-video-dos.patch
diff --git a/freed-ora/current/master/arm-omapdrm-fixinc.patch b/freed-ora/current/master/arm-omapdrm-fixinc.patch
deleted file mode 100644
index 001b4c57f..000000000
--- a/freed-ora/current/master/arm-omapdrm-fixinc.patch
+++ /dev/null
@@ -1,15 +0,0 @@
---- linux-3.7.0-0.rc2.git4.2.fc19.x86_64/drivers/staging/omapdrm/omap_crtc.c.orig 2012-10-30 09:58:47.613641237 +0000
-+++ linux-3.7.0-0.rc2.git4.2.fc19.x86_64/drivers/staging/omapdrm/omap_crtc.c 2012-10-30 10:05:36.996081758 +0000
-@@ -19,9 +19,9 @@
-
- #include "omap_drv.h"
-
--#include "drm_mode.h"
--#include "drm_crtc.h"
--#include "drm_crtc_helper.h"
-+#include <drm/drm_mode.h>
-+#include <drm/drm_crtc.h>
-+#include <drm/drm_crtc_helper.h>
-
- #define to_omap_crtc(x) container_of(x, struct omap_crtc, base)
-
diff --git a/freed-ora/current/master/arm-tegra-nvec-kconfig.patch b/freed-ora/current/master/arm-tegra-nvec-kconfig.patch
index a3f568cd5..64aa9f8e3 100644
--- a/freed-ora/current/master/arm-tegra-nvec-kconfig.patch
+++ b/freed-ora/current/master/arm-tegra-nvec-kconfig.patch
@@ -1,10 +1,10 @@
---- linux-2.6.42.noarch/drivers/staging/nvec/Kconfig.orig 2012-02-02 08:16:12.512727480 -0600
-+++ linux-2.6.42.noarch/drivers/staging/nvec/Kconfig 2012-02-01 18:44:56.674990109 -0600
+--- linux-3.8.0-0.rc2.git1.1.fc19.x86_64/drivers/staging/nvec/Kconfig.orig 2013-01-07 11:04:43.493510550 +0000
++++ linux-3.8.0-0.rc2.git1.1.fc19.x86_64/drivers/staging/nvec/Kconfig 2013-01-07 11:14:18.186033211 +0000
@@ -1,6 +1,6 @@
config MFD_NVEC
bool "NV Tegra Embedded Controller SMBus Interface"
- depends on I2C && GPIOLIB && ARCH_TEGRA
-+ depends on I2C && GPIOLIB && ARCH_TEGRA && MFD_CORE=y
++ depends on I2C && GPIOLIB && ARCH_TEGRA && MFD_CORE
+ select MFD_CORE
help
Say Y here to enable support for a nVidia compliant embedded
- controller.
diff --git a/freed-ora/current/master/brcmsmac-double-timeout.patch b/freed-ora/current/master/brcmsmac-double-timeout.patch
new file mode 100644
index 000000000..adb718d83
--- /dev/null
+++ b/freed-ora/current/master/brcmsmac-double-timeout.patch
@@ -0,0 +1,39 @@
+diff --git a/drivers/net/wireless/brcm80211/brcmsmac/main.c b/drivers/net/wireless/brcm80211/brcmsmac/main.c
+index 17594de..a86d689 100644
+--- a/drivers/net/wireless/brcm80211/brcmsmac/main.c
++++ b/drivers/net/wireless/brcm80211/brcmsmac/main.c
+@@ -7518,7 +7518,7 @@ int brcms_c_get_curband(struct brcms_c_info *wlc)
+ return wlc->band->bandunit;
+ }
+
+-void brcms_c_wait_for_tx_completion(struct brcms_c_info *wlc, bool drop)
++static int __brcms_c_wait_for_tx_completion(struct brcms_c_info *wlc, bool drop)
+ {
+ int timeout = 20;
+ int i;
+@@ -7536,9 +7536,25 @@ void brcms_c_wait_for_tx_completion(struct brcms_c_info *wlc, bool drop)
+ break;
+ }
+
++ return timeout;
++}
++
++void brcms_c_wait_for_tx_completion(struct brcms_c_info *wlc, bool drop)
++{
++ int timeout;
++
++ timeout = __brcms_c_wait_for_tx_completion(wlc, drop);
++ if (timeout != 0)
++ return;
++
++ /* Retry. */
++ printk(KERN_INFO "brcms_c_wait_for_tx_completion took > 20ms. Retrying.\n");
++ timeout = __brcms_c_wait_for_tx_completion(wlc, drop);
++
+ WARN_ON_ONCE(timeout == 0);
+ }
+
++
+ void brcms_c_set_beacon_listen_interval(struct brcms_c_info *wlc, u8 interval)
+ {
+ wlc->bcn_li_bcn = interval;
diff --git a/freed-ora/current/master/linux-2.6-compile-fixes.patch b/freed-ora/current/master/compile-fixes.patch
index 34c08ce47..34c08ce47 100644
--- a/freed-ora/current/master/linux-2.6-compile-fixes.patch
+++ b/freed-ora/current/master/compile-fixes.patch
diff --git a/freed-ora/current/master/config-arm-generic b/freed-ora/current/master/config-arm-generic
index 89fc4356a..34985e5b8 100644
--- a/freed-ora/current/master/config-arm-generic
+++ b/freed-ora/current/master/config-arm-generic
@@ -63,6 +63,7 @@ CONFIG_SCHED_SMT=y
CONFIG_RCU_FANOUT=32
CONFIG_CPU_IDLE=y
+# CONFIG_CPU_IDLE_MULTIPLE_DRIVERS is not set
# CONFIG_CPU_IDLE_GOV_LADDER is not set
CONFIG_CPU_IDLE_GOV_MENU=y
@@ -109,6 +110,7 @@ CONFIG_RFKILL_GPIO=m
CONFIG_ARCH_WANT_OPTIONAL_GPIOLIB=y
CONFIG_GPIO_GENERIC_PLATFORM=m
CONFIG_PINCTRL_SINGLE=m
+CONFIG_POWER_RESET_GPIO=y
CONFIG_USB_ULPI=y
@@ -133,7 +135,9 @@ CONFIG_SERIO_AMBAKMI=m
CONFIG_I2C_NOMADIK=m
CONFIG_ARM_SP805_WATCHDOG=m
CONFIG_FB_ARMCLCD=m
+CONFIG_FB_SSD1307=m
CONFIG_MPCORE_WATCHDOG=m
+CONFIG_BACKLIGHT_PWM=m
CONFIG_MMC_ARMMMCI=m
CONFIG_MMC_SDHCI_PLTFM=m
@@ -249,8 +253,10 @@ CONFIG_HW_RANDOM_ATMEL=m
CONFIG_HW_RANDOM_EXYNOS=m
# Device tree
+CONFIG_DTC=y
CONFIG_OF=y
CONFIG_USE_OF=y
+CONFIG_OF_DEVICE=y
CONFIG_OF_IRQ=y
CONFIG_ARM_ATAG_DTB_COMPAT=y
CONFIG_ARM_APPENDED_DTB=y
@@ -289,25 +295,32 @@ CONFIG_GPIO_MCP23S08=m
CONFIG_GPIO_ADNP=m
CONFIG_PL310_ERRATA_753970=y
+CONFIG_MFD_CORE=m
CONFIG_MFD_88PM800=m
CONFIG_MFD_88PM805=m
CONFIG_MFD_SYSCON=y
+# CONFIG_MFD_TPS80031 is not set
+# CONFIG_MFD_AS3711 is not set
# CONFIG_MFD_SMSC is not set
# CONFIG_MFD_DA9055 is not set
# CONFIG_MFD_MAX8907 is not set
CONFIG_REGULATOR_VIRTUAL_CONSUMER=m
CONFIG_REGULATOR_USERSPACE_CONSUMER=m
+# CONFIG_REGULATOR_DUMMY is not set
CONFIG_REGULATOR_GPIO=m
CONFIG_REGULATOR_AD5398=m
CONFIG_REGULATOR_ANATOP=m
CONFIG_REGULATOR_FAN53555=m
CONFIG_REGULATOR_ISL6271A=m
+CONFIG_REGULATOR_LP3972=m
CONFIG_REGULATOR_MAX1586=m
CONFIG_REGULATOR_MAX8649=m
CONFIG_REGULATOR_MAX8660=m
CONFIG_REGULATOR_MAX8952=m
+CONFIG_REGULATOR_MAX8973=m
CONFIG_REGULATOR_LP3971=m
+CONFIG_REGULATOR_TPS51632=m
CONFIG_REGULATOR_TPS62360=m
CONFIG_REGULATOR_TPS65023=m
CONFIG_REGULATOR_TPS6507X=m
@@ -316,6 +329,7 @@ CONFIG_EXTCON_GPIO=m
# CONFIG_ARM_VIRT_EXT is not set
# CONFIG_PINCTRL_EXYNOS4 is not set
+# CONFIG_PINCTRL_EXYNOS5440 is not set
# CONFIG_AUTO_ZRELADDR is not set
# CONFIG_ASYMMETRIC_KEY_TYPE is not set
diff --git a/freed-ora/current/master/config-arm-highbank b/freed-ora/current/master/config-arm-highbank
deleted file mode 100644
index 952a21ac4..000000000
--- a/freed-ora/current/master/config-arm-highbank
+++ /dev/null
@@ -1,62 +0,0 @@
-CONFIG_ARCH_HIGHBANK=y
-# CONFIG_ARM_LPAE is not set
-# CONFIG_ARM_THUMBEE is not set
-CONFIG_SWP_EMULATE=y
-# CONFIG_CPU_BPREDICT_DISABLE is not set
-# CONFIG_ARM_ERRATA_430973 is not set
-# CONFIG_ARM_ERRATA_458693 is not set
-# CONFIG_ARM_ERRATA_460075 is not set
-# CONFIG_PL310_ERRATA_588369 is not set
-# CONFIG_PL310_ERRATA_727915 is not set
-# CONFIG_ARM_ERRATA_743622 is not set
-# CONFIG_PL310_ERRATA_753970 is not set
-# CONFIG_ARM_ERRATA_754322 is not set
-# CONFIG_PL310_ERRATA_769419 is not set
-
-# CONFIG_THUMB2_KERNEL is not set
-
-CONFIG_ARM_TIMER_SP804=y
-
-CONFIG_VFP=y
-CONFIG_VFPv3=y
-CONFIG_NEON=y
-
-CONFIG_SATA_AHCI_PLATFORM=y
-CONFIG_ATA_SFF=y
-
-CONFIG_NET_CALXEDA_XGMAC=y
-
-CONFIG_EDAC_HIGHBANK_MC=m
-CONFIG_EDAC_HIGHBANK_L2=m
-
-CONFIG_GPIO_PL061=y
-
-CONFIG_SERIAL_AMBA_PL010=y
-CONFIG_SERIAL_AMBA_PL010_CONSOLE=y
-CONFIG_SERIAL_AMBA_PL011=y
-CONFIG_SERIAL_AMBA_PL011_CONSOLE=y
-
-CONFIG_RTC_DRV_PL030=y
-CONFIG_RTC_DRV_PL031=y
-
-CONFIG_SATA_HIGHBANK=m
-
-CONFIG_OC_ETM=y
-
-# CONFIG_NET_VENDOR_BROADCOM is not set
-# these were all requested to be disabled on highbank kernels by calxeda
-# CONFIG_HAMRADIO is not set
-# CONFIG_IRDA is not set
-# CONFIG_WIMAX is not set
-# CONFIG_RFKILL is not set
-# CONFIG_CAIF is not set
-# CONFIG_NFC is not set
-# CONFIG_MTD is not set
-# CONFIG_PARPORT is not set
-# CONFIG_ATM_DRIVERS is not set
-# CONFIG_WAN is not set
-# CONFIG_ISDN is not set
-# CONFIG_MEDIA_SUPPORT is not set
-# CONFIG_DRM is not set
-# CONFIG_SND is not set
-# end of list of requested disabled options
diff --git a/freed-ora/current/master/config-arm-imx b/freed-ora/current/master/config-arm-imx
deleted file mode 100644
index 8ffd96559..000000000
--- a/freed-ora/current/master/config-arm-imx
+++ /dev/null
@@ -1,119 +0,0 @@
-CONFIG_ARCH_MXC=y
-CONFIG_ARCH_MX51=y
-
-CONFIG_VFP=y
-CONFIG_NEON=y
-# CONFIG_SWP_EMULATE is not set
-# CONFIG_THUMB2_KERNEL is not set
-CONFIG_CPU_FREQ_IMX=y
-
-CONFIG_SOC_IMX53=y
-CONFIG_SOC_IMX6Q=y
-
-CONFIG_MACH_ARMADILLO5X0=y
-CONFIG_MACH_BUG=y
-CONFIG_MACH_EUKREA_CPUIMX35=y
-CONFIG_MACH_EUKREA_CPUIMX35SD=y
-CONFIG_MACH_EUKREA_CPUIMX51=y
-CONFIG_MACH_EUKREA_CPUIMX51SD=y
-CONFIG_MACH_IMX31_DT=y
-CONFIG_MACH_IMX51_DT=y
-CONFIG_MACH_IMX53_DT=y
-CONFIG_MACH_KZM_ARM11_01=y
-CONFIG_MACH_MX31_3DS=y
-CONFIG_MACH_MX31ADS=y
-CONFIG_MACH_MX31LILLY=y
-CONFIG_MACH_MX31LITE=y
-CONFIG_MACH_MX31MOBOARD=y
-CONFIG_MACH_MX35_3DS=y
-CONFIG_MACH_MX51_3DS=y
-CONFIG_MACH_MX51_BABBAGE=y
-CONFIG_MACH_MX51_EFIKAMX=y
-CONFIG_MACH_MX51_EFIKASB=y
-CONFIG_MACH_MX53_EVK=y
-CONFIG_MACH_MX53_SMD=y
-CONFIG_MACH_MX53_LOCO=y
-CONFIG_MACH_MX53_ARD=y
-CONFIG_MACH_PCM037=y
-CONFIG_MACH_PCM037_EET=y
-CONFIG_MACH_PCM043=y
-CONFIG_MACH_QONG=y
-CONFIG_MACH_VPR200=y
-
-CONFIG_W1_MASTER_MXC=m
-CONFIG_DMA_CACHE_RWFO=y
-CONFIG_IMX_DMA=y
-CONFIG_IMX_SDMA=y
-CONFIG_MXS_DMA=y
-CONFIG_MXC_IRQ_PRIOR=y
-CONFIG_MXC_PWM=m
-CONFIG_MXC_DEBUG_BOARD=y
-
-# CONFIG_CPU_BPREDICT_DISABLE is not set
-CONFIG_CACHE_L2X0=y
-CONFIG_ARM_DMA_MEM_BUFFERABLE=y
-CONFIG_ARM_ERRATA_326103=y
-CONFIG_ARM_ERRATA_411920=y
-CONFIG_PL310_ERRATA_588369=y
-CONFIG_PL310_ERRATA_727915=y
-CONFIG_ARM_ERRATA_364296=y
-
-CONFIG_PATA_IMX=m
-CONFIG_NET_VENDOR_FREESCALE=y
-CONFIG_FEC=y
-CONFIG_KEYBOARD_IMX=m
-CONFIG_SERIAL_IMX=y
-CONFIG_HW_RANDOM_MXC_RNGA=m
-CONFIG_I2C_IMX=m
-CONFIG_GPIO_GENERIC_PLATFORM=y
-CONFIG_GPIO_MCP23S08=m
-# CONFIG_GPIO_MC9S08DZ60 is not set
-CONFIG_PINCTRL_IMX35=y
-CONFIG_PINCTRL_IMX51=y
-CONFIG_PINCTRL_IMX53=y
-CONFIG_USB_EHCI_MXC=y
-CONFIG_USB_MXS_PHY=m
-# CONFIG_USB_IMX21_HCD is not set
-CONFIG_MMC_SDHCI_ESDHC_IMX=m
-CONFIG_MMC_MXC=m
-CONFIG_RTC_MXC=y
-CONFIG_RTC_DRV_MXC=m
-
-CONFIG_DRM_IMX=m
-CONFIG_DRM_IMX_FB_HELPER=m
-CONFIG_DRM_IMX_PARALLEL_DISPLAY=m
-CONFIG_DRM_IMX_IPUV3_CORE=m
-CONFIG_DRM_IMX_IPUV3=m
-CONFIG_VIDEO_CODA=m
-CONFIG_BACKLIGHT_PWM=m
-CONFIG_LEDS_PWM=m
-
-# CONFIG_MACH_MX31_3DS_MXC_NAND_USE_BBT is not set
-CONFIG_MXC_USE_EPIT=y
-CONFIG_HAVE_EPIT=y
-CONFIG_ARM_THUMBEE=y
-CONFIG_ARM_ERRATA_430973=y
-CONFIG_ARM_ERRATA_458693=y
-CONFIG_ARM_ERRATA_460075=y
-CONFIG_ARM_ERRATA_743622=y
-CONFIG_ARM_ERRATA_754322=y
-CONFIG_CAN_FLEXCAN=m
-CONFIG_MTD_NAND_MXC=m
-CONFIG_MTD_NAND_GPMI_NAND=y
-CONFIG_INPUT_PWM_BEEPER=m
-CONFIG_SERIAL_IMX_CONSOLE=y
-CONFIG_IMX2_WDT=m
-
-CONFIG_SND_IMX_SOC=m
-CONFIG_SND_SOC_PHYCORE_AC97=m
-CONFIG_SND_SOC_EUKREA_TLV320=m
-CONFIG_SND_SOC_IMX_SGTL5000=m
-
-CONFIG_PL310_ERRATA_769419=y
-CONFIG_LEDS_RENESAS_TPU=y
-
-CONFIG_MFD_MAX8907=m
-
-CONFIG_FB_IMX=m
-
-# CONFIG_NET_VENDOR_BROADCOM is not set
diff --git a/freed-ora/current/master/config-arm-kirkwood b/freed-ora/current/master/config-arm-kirkwood
index ff1dad7df..ac3bf6f61 100644
--- a/freed-ora/current/master/config-arm-kirkwood
+++ b/freed-ora/current/master/config-arm-kirkwood
@@ -15,20 +15,29 @@ CONFIG_MACH_GURUPLUG=y
CONFIG_MACH_ICONNECT_DT=y
CONFIG_MACH_IB62X0_DT=y
CONFIG_MACH_INETSPACE_V2=y
+CONFIG_MACH_INETSPACE_V2_DT=y
CONFIG_MACH_IOMEGA_IX2_200_DT=y
CONFIG_MACH_KM_KIRKWOOD_DT=y
CONFIG_MACH_LSXL_DT=y
+CONFIG_MACH_MPLCEC4_DT=y
CONFIG_MACH_MV88F6281GTW_GE=y
-CONFIG_MACH_NETSPACE_V2=y
+CONFIG_MACH_NETSPACE_LITE_V2_DT=y
CONFIG_MACH_NETSPACE_MAX_V2=y
+CONFIG_MACH_NETSPACE_MAX_V2_DT=y
+CONFIG_MACH_NETSPACE_MINI_V2_DT=y
+CONFIG_MACH_NETSPACE_V2=y
+CONFIG_MACH_NETSPACE_V2_DT=y
CONFIG_MACH_NET2BIG_V2=y
CONFIG_MACH_NET5BIG_V2=y
+CONFIG_MACH_NSA310_DT=y
+CONFIG_MACH_OPENBLOCKS_A6_DT=y
CONFIG_MACH_OPENRD_BASE=y
CONFIG_MACH_OPENRD_CLIENT=y
CONFIG_MACH_OPENRD_ULTIMATE=y
CONFIG_MACH_RD88F6192_NAS=y
CONFIG_MACH_RD88F6281=y
CONFIG_MACH_SHEEVAPLUG=y
+CONFIG_MACH_TOPKICK_DT=y
CONFIG_MACH_TS219=y
CONFIG_MACH_TS219_DT=y
CONFIG_MACH_TS41X=y
diff --git a/freed-ora/current/master/config-arm-omap b/freed-ora/current/master/config-arm-omap
index 68421b06e..a53983357 100644
--- a/freed-ora/current/master/config-arm-omap
+++ b/freed-ora/current/master/config-arm-omap
@@ -41,7 +41,7 @@ CONFIG_SOC_OMAP3430=y
CONFIG_SOC_TI81XX=y
CONFIG_SOC_AM33XX=y
CONFIG_SOC_OMAPTI816X=y
-CONFIG_SOC_OMAP5=y
+# CONFIG_SOC_OMAP5 is not set
CONFIG_OMAP_PACKAGE_CBB=y
CONFIG_OMAP_PACKAGE_CBL=y
CONFIG_OMAP_PACKAGE_CBS=y
@@ -170,6 +170,7 @@ CONFIG_TOUCHSCREEN_TI_TSCADC=m
CONFIG_SERIAL_OMAP=y
CONFIG_SERIAL_OMAP_CONSOLE=y
CONFIG_OMAP_WATCHDOG=y
+CONFIG_CLK_TWL6040=m
CONFIG_TWL4030_CORE=y
CONFIG_TWL4030_MADC=m
CONFIG_TWL4030_POWER=y
@@ -181,6 +182,7 @@ CONFIG_CHARGER_TWL4030=m
CONFIG_TWL6030_PWM=m
CONFIG_TWL6040_CORE=y
CONFIG_SENSORS_TWL4030_MADC=m
+CONFIG_SENSORS_LIS3_I2C=m
CONFIG_TI_DAVINCI_EMAC=m
CONFIG_TI_DAVINCI_MDIO=m
CONFIG_TI_DAVINCI_CPDMA=m
@@ -190,12 +192,16 @@ CONFIG_LEDS_LP8788=m
CONFIG_MTD_ONENAND_OMAP2=y
CONFIG_HDQ_MASTER_OMAP=m
CONFIG_I2C_OMAP=m
-CONFIG_SPI_OMAP24XX=y
+CONFIG_SPI_OMAP24XX=m
CONFIG_MFD_OMAP_USB_HOST=y
CONFIG_MFD_WL1273_CORE=m
CONFIG_MFD_LP8788=y
+CONFIG_MFD_TPS65910=y
+CONFIG_GPIO_TPS65910=y
CONFIG_REGULATOR_TWL4030=y
CONFIG_REGULATOR_LP8788=y
+CONFIG_REGULATOR_TPS65217=y
+CONFIG_REGULATOR_TPS65910=y
# Enable V4L2 drivers for OMAP2+
CONFIG_MEDIA_CONTROLLER=y
CONFIG_VIDEO_V4L2_SUBDEV_API=y
@@ -232,20 +238,25 @@ CONFIG_OMAP2_DSS_MIN_FCK_PER_PCK=0
CONFIG_OMAP2_DSS_SLEEP_BEFORE_RESET=y
CONFIG_OMAP2_DSS_SLEEP_AFTER_VENC_RESET=y
+CONFIG_FB_DA8XX=m
+CONFIG_FB_DA8XX_CONSISTENT_DMA_SIZE=5
+
+CONFIG_LCD_CLASS_DEVICE=m
+CONFIG_PANEL_GENERIC_DPI=m
CONFIG_PANEL_TFP410=m
CONFIG_PANEL_TAAL=m
CONFIG_PANEL_PICODLP=m
+CONFIG_PANEL_SHARP_LS037V7DW01=m
+CONFIG_PANEL_NEC_NL8048HL11_01B=m
+CONFIG_PANEL_TPO_TD043MTEA1=m
+CONFIG_BACKLIGHT_LCD_SUPPORT=y
+CONFIG_BACKLIGHT_CLASS_DEVICE=m
+CONFIG_BACKLIGHT_PWM=m
CONFIG_BACKLIGHT_PANDORA=m
-#
-# OMAP2/3 Display Device Drivers
-#
-CONFIG_PANEL_GENERIC_DPI=y
-CONFIG_PANEL_SHARP_LS037V7DW01=y
-CONFIG_PANEL_NEC_NL8048HL11_01B=y
-CONFIG_PANEL_TPO_TD043MTEA1=y
CONFIG_SND_OMAP_SOC=y
+CONFIG_SND_OMAP_SOC_DMIC=m
CONFIG_SND_OMAP_SOC_MCBSP=m
CONFIG_SND_OMAP_SOC_MCPDM=m
CONFIG_SND_OMAP_SOC_OVERO=m
@@ -256,20 +267,18 @@ CONFIG_SND_OMAP_SOC_SDP4430=m
CONFIG_SND_OMAP_SOC_OMAP3_PANDORA=m
CONFIG_SND_OMAP_SOC_OMAP3_BEAGLE=m
CONFIG_SND_OMAP_SOC_ZOOM2=m
-CONFIG_SND_OMAP_SOC_IGEP0020=y
-CONFIG_SND_OMAP_SOC_OMAP_HDMI=y
-# Because alsa is modular http://www.spinics.net/lists/linux-omap/msg67307.html
-# CONFIG_SND_OMAP_SOC_OMAP4_HDMI is not set
+CONFIG_SND_OMAP_SOC_IGEP0020=m
+CONFIG_SND_OMAP_SOC_OMAP_HDMI=m
CONFIG_SND_OMAP_SOC_OMAP_ABE_TWL6040=m
CONFIG_SND_OMAP_SOC_OMAP_TWL4030=m
CONFIG_SND_SOC_I2C_AND_SPI=y
# CONFIG_SND_OMAP_SOC_RX51 is not set
# CONFIG_SND_SOC_ALL_CODECS is not set
-CONFIG_SND_SOC_TLV320AIC23=y
-CONFIG_SND_SOC_TLV320AIC3X=y
-CONFIG_SND_SOC_TWL4030=y
-CONFIG_SND_SOC_TWL6040=y
-CONFIG_RADIO_WL128X
+CONFIG_SND_SOC_TLV320AIC23=m
+CONFIG_SND_SOC_TLV320AIC3X=m
+CONFIG_SND_SOC_TWL4030=m
+CONFIG_SND_SOC_TWL6040=m
+CONFIG_RADIO_WL128X=m
CONFIG_USB_OTG=y
CONFIG_USB_EHCI_HCD_OMAP=y
@@ -297,9 +306,17 @@ CONFIG_MMC_OMAP=y
CONFIG_MMC_OMAP_HS=y
CONFIG_TWL4030_USB=y
CONFIG_TWL6030_USB=y
+CONFIG_RTC_DRV_OMAP=m
CONFIG_RTC_DRV_TWL4030=y
+CONFIG_RTC_DRV_TPS65910=m
+
+CONFIG_PWM_TIECAP=m
+CONFIG_PWM_TIEHRPWM=m
+CONFIG_PWM_TWL=m
+CONFIG_PWM_TWL_LED=m
-CONFIG_IR_RX51=m
+# CONFIG_IR_RX51 is not set
+# CONFIG_BATTERY_RX51 is not set
# CONFIG_TIDSPBRIDGE is not set
# CONFIG_TIDSPBRIDGE_MEMPOOL_SIZE=0x600000
@@ -320,7 +337,6 @@ CONFIG_CRYPTO_DEV_OMAP_AES=m
# CONFIG_NET_VENDOR_BROADCOM is not set
# CONFIG_MTD_NAND_OMAP_BCH is not set
-# CONFIG_MFD_TPS65910 is not set
# CONFIG_MFD_TPS65912_I2C is not set
# CONFIG_PMIC_DA903X is not set
# CONFIG_MFD_DA9052_I2C is not set
@@ -333,7 +349,8 @@ CONFIG_CRYPTO_DEV_OMAP_AES=m
# CONFIG_MFD_AAT2870_CORE is not set
# CONFIG_MFD_RC5T583 is not set
# CONFIG_MFD_PALMAS is not set
-# CONFIG_REGULATOR_DUMMY is not set
# CONFIG_REGULATOR_LP3972 is not set
# CONFIG_REGULATOR_LP872X is not set
+# CONFIG_OMAP2_DSS_DEBUG is not set
+# CONFIG_OMAP2_DSS_DEBUGFS is not set
diff --git a/freed-ora/current/master/config-arm-tegra b/freed-ora/current/master/config-arm-tegra
index 894b5dbef..b62bdecef 100644
--- a/freed-ora/current/master/config-arm-tegra
+++ b/freed-ora/current/master/config-arm-tegra
@@ -1,9 +1,8 @@
CONFIG_ARCH_TEGRA=y
CONFIG_ARCH_TEGRA_2x_SOC=y
-# CONFIG_ARCH_TEGRA_3x_SOC is not set
+CONFIG_ARCH_TEGRA_3x_SOC=y
# CONFIG_ARM_LPAE is not set
-CONFIG_TEGRA_PCI=y
CONFIG_VFP=y
CONFIG_VFPv3=y
@@ -20,6 +19,7 @@ CONFIG_MACH_VENTANA=y
CONFIG_TEGRA_DEBUG_UARTD=y
CONFIG_ARM_CPU_TOPOLOGY=y
+CONFIG_TEGRA_PCI=y
CONFIG_TEGRA_IOMMU_GART=y
CONFIG_TEGRA_IOMMU_SMMU=y
@@ -72,15 +72,25 @@ CONFIG_SND_SOC_TEGRA_ALC5632=m
CONFIG_SND_SOC_TEGRA_WM8753=m
CONFIG_SND_SOC_TEGRA_WM8903=m
CONFIG_SND_SOC_TEGRA_TRIMSLICE=m
-# CONFIG_SND_SOC_TEGRA30_AHUB is not set
-# CONFIG_SND_SOC_TEGRA30_I2S is not set
+CONFIG_SND_SOC_TEGRA30_AHUB=m
+CONFIG_SND_SOC_TEGRA30_I2S=m
-CONFIG_MFD_NVEC=y
+# AC100 (PAZ00)
+# CONFIG_MFD_NVEC is not set
+CONFIG_MFD_TPS80031=y
CONFIG_KEYBOARD_NVEC=y
CONFIG_SERIO_NVEC_PS2=y
CONFIG_NVEC_POWER=y
CONFIG_POWER_SUPPLY=y
CONFIG_NVEC_LEDS=y
+CONFIG_NVEC_PAZ00=y
+
+# CONFIG_MFD_TPS6586X is not set
+# CONFIG_RTC_DRV_TPS6586X is not set
+
+CONFIG_PWM_TEGRA=m
+
+CONFIG_DRM_TEGRA=m
CONFIG_CPU_PM=y
CONFIG_ARM_CPU_SUSPEND=y
@@ -95,3 +105,5 @@ CONFIG_SERIAL_OF_PLATFORM=y
CONFIG_OF_GPIO=y
CONFIG_OF_PCI=y
CONFIG_OF_PCI_IRQ=y
+
+# CONFIG_DRM_TEGRA_DEBUG is not set
diff --git a/freed-ora/current/master/config-arm-versatile b/freed-ora/current/master/config-arm-versatile
deleted file mode 100644
index 9c379361b..000000000
--- a/freed-ora/current/master/config-arm-versatile
+++ /dev/null
@@ -1,95 +0,0 @@
-CONFIG_ARCH_VEXPRESS=y
-CONFIG_ARCH_VEXPRESS_CA9X4=y
-CONFIG_ARCH_VEXPRESS_DT=y
-CONFIG_PLAT_VERSATILE_CLCD=y
-CONFIG_PLAT_VERSATILE_SCHED_CLOCK=y
-CONFIG_PLAT_VERSATILE=y
-CONFIG_ARM_TIMER_SP804=y
-
-CONFIG_CPU_V7=y
-CONFIG_CPU_32v6K=y
-CONFIG_CPU_32v7=y
-CONFIG_CPU_ABRT_EV7=y
-CONFIG_CPU_PABRT_V7=y
-CONFIG_CPU_CACHE_V7=y
-CONFIG_CPU_CACHE_VIPT=y
-CONFIG_CPU_COPY_V6=y
-CONFIG_CPU_TLB_V7=y
-CONFIG_CPU_HAS_ASID=y
-CONFIG_CPU_CP15=y
-CONFIG_CPU_CP15_MMU=y
-CONFIG_CPU_HAS_PMU=y
-
-# Need to verify whether these are generic or vexpress specific
-CONFIG_ARM_AMBA=y
-
-CONFIG_VFP=y
-CONFIG_VFPv3=y
-
-CONFIG_CPUSETS=y
-# CONFIG_THUMB2_AVOID_R_ARM_THM_JUMP11 is not set
-# CONFIG_THUMB2_KERNEL is not set
-CONFIG_TICK_ONESHOT=y
-
-CONFIG_ARM_ASM_UNIFIED=y
-CONFIG_ARM_CPU_TOPOLOGY=y
-CONFIG_ARM_DMA_MEM_BUFFERABLE=y
-
-CONFIG_ARM_ERRATA_720789=y
-CONFIG_ARM_ERRATA_751472=y
-CONFIG_ARM_ERRATA_753970=y
-
-CONFIG_ARM_GIC=y
-CONFIG_ARM_L1_CACHE_SHIFT=5
-
-CONFIG_ARM_THUMB=y
-CONFIG_ARM_TIMER_SP804=y
-CONFIG_ARM_UNWIND=y
-
-CONFIG_FB=y
-CONFIG_FB_ARMCLCD=y
-CONFIG_FB_CFB_COPYAREA=y
-CONFIG_FB_CFB_FILLRECT=y
-CONFIG_FB_CFB_IMAGEBLIT=y
-
-CONFIG_TOUCHSCREEN_ADS7846=m
-
-CONFIG_CMDLINE="console=ttyAM0,115200 root=/dev/sda1 rootdelay=20"
-
-CONFIG_SERIO_AMBAKMI=m
-CONFIG_SERIAL_AMBA_PL011=y
-CONFIG_SERIAL_AMBA_PL011_CONSOLE=y
-
-CONFIG_FB_ARMCLCD=m
-
-CONFIG_MMC_ARMMMCI=y
-CONFIG_MMC_DW=m
-# CONFIG_MMC_DW_IDMAC is not set
-
-# CONFIG_ARM_CHARLCD is not set
-CONFIG_PL330_DMA=y
-CONFIG_RTC_DRV_PL030=y
-CONFIG_RTC_DRV_PL031=y
-
-CONFIG_I2C_VERSATILE=m
-
-CONFIG_OC_ETM=y
-
-CONFIG_ARCH_VEXPRESS_CORTEX_A5_A9_ERRATA=y
-CONFIG_ARM_THUMBEE=y
-CONFIG_SWP_EMULATE=y
-# CONFIG_CPU_BPREDICT_DISABLE is not set
-CONFIG_CACHE_L2X0=y
-CONFIG_ARM_ERRATA_430973=y
-CONFIG_ARM_ERRATA_458693=y
-CONFIG_ARM_ERRATA_460075=y
-CONFIG_PL310_ERRATA_588369=y
-CONFIG_PL310_ERRATA_727915=y
-CONFIG_ARM_ERRATA_743622=y
-CONFIG_ARM_ERRATA_754322=y
-CONFIG_PL310_ERRATA_769419=y
-CONFIG_NEON=y
-CONFIG_PATA_PLATFORM=m
-CONFIG_PATA_OF_PLATFORM=m
-# CONFIG_NET_VENDOR_BROADCOM is not set
-
diff --git a/freed-ora/current/master/config-armv7 b/freed-ora/current/master/config-armv7
index e7e8e6b6c..da8399a25 100644
--- a/freed-ora/current/master/config-armv7
+++ b/freed-ora/current/master/config-armv7
@@ -5,12 +5,18 @@ CONFIG_CPU_V7=y
# CONFIG_ARCH_MULTI_V6 is not set
CONFIG_ARCH_MULTI_V6_V7=y
CONFIG_ARCH_MULTI_V7=y
-CONFIG_ARCH_MVEBU=y
+# This is V6 so we'll eventually support it in v5 unified kernels
+# CONFIG_ARCH_BCM is not set
CONFIG_ARCH_HIGHBANK=y
+CONFIG_ARCH_MVEBU=y
+# CONFIG_ARCH_MXC is not set
CONFIG_ARCH_PICOXCELL=y
CONFIG_ARCH_SOCFPGA=y
+CONFIG_ARCH_SUNXI=y
CONFIG_ARCH_VEXPRESS_CA9X4=y
CONFIG_ARCH_VEXPRESS_DT=y
+# not enabling first round
+# CONFIG_ARCH_ZYNQ is not set
CONFIG_MACH_ARMADA_370_XP=y
CONFIG_MACH_ARMADA_370=y
@@ -68,8 +74,9 @@ CONFIG_ARM_ERRATA_754322=y
CONFIG_ARM_ERRATA_754327=y
CONFIG_ARM_ERRATA_764369=y
CONFIG_ARM_ERRATA_775420=y
-CONFIG_PL310_ERRATA_588369=y
-CONFIG_PL310_ERRATA_727915=y
+# Disabled due to causing highbank to crash
+# CONFIG_PL310_ERRATA_588369 is not set
+# CONFIG_PL310_ERRATA_727915 is not set
CONFIG_PL310_ERRATA_769419=y
# generic that deviates from or should be merged into config-generic
@@ -88,6 +95,7 @@ CONFIG_RCU_FANOUT_LEAF=16
CONFIG_CPU_IDLE=y
# CONFIG_CPU_IDLE_GOV_LADDER is not set
CONFIG_CPU_IDLE_GOV_MENU=y
+CONFIG_CPU_IDLE_MULTIPLE_DRIVERS=y
CONFIG_DEFAULT_MMAP_MIN_ADDR=32768
CONFIG_LSM_MMAP_MIN_ADDR=32768
@@ -151,6 +159,8 @@ CONFIG_AMBA_PL08X=y
CONFIG_ARM_SP805_WATCHDOG=m
# highbank
+CONFIG_CPU_IDLE_CALXEDA=y
+
CONFIG_EDAC_HIGHBANK_MC=m
CONFIG_EDAC_HIGHBANK_L2=m
@@ -159,10 +169,17 @@ CONFIG_OC_ETM=y
CONFIG_SATA_HIGHBANK=m
# versatile
+CONFIG_FB=y
CONFIG_FB_ARMCLCD=m
+CONFIG_FB_CFB_COPYAREA=m
+CONFIG_FB_CFB_FILLRECT=m
+CONFIG_FB_CFB_IMAGEBLIT=m
+CONFIG_TOUCHSCREEN_ADS7846=m
+
CONFIG_I2C_VERSATILE=m
CONFIG_OC_ETM=y
CONFIG_ARCH_VEXPRESS_CORTEX_A5_A9_ERRATA=y
+CONFIG_SENSORS_VEXPRESS=m
# unknown and needs review
CONFIG_ARM_AMBA=y
@@ -174,9 +191,65 @@ CONFIG_CRYPTO_DEV_MV_CESA=m
CONFIG_MV643XX_ETH=m
CONFIG_I2C_MV64XXX=m
CONFIG_PINCTRL_MVEBU=y
+CONFIG_PINCTRL_ARMADA_370=y
+CONFIG_PINCTRL_ARMADA_XP=y
+CONFIG_PINCTRL_DOVE=y
+CONFIG_EDAC_MV64X60=m
+CONFIG_MVNETA=m
+CONFIG_SATA_MV=m
+CONFIG_MARVELL_PHY=m
+CONFIG_RTC_DRV_S35390A=y
+
+# Allwinner a1x
+# CONFIG_SUNXI_RFKILL=y
+# CONFIG_SUNXI_NAND=y
+# CONFIG_SUNXI_DBGREG=m
+# CONFIG_WEMAC_SUN4I=y
+# CONFIG_KEYBOARD_SUN4IKEYPAD=m
+# CONFIG_KEYBOARD_SUN4I_KEYBOARD=m
+# CONFIG_IR_SUN4I=m
+# CONFIG_TOUCHSCREEN_SUN4I_TS=m
+# CONFIG_SUN4I_G2D=y
+# CONFIG_I2C_SUN4I=y
+# CONFIG_DRM_MALI=m
+# CONFIG_MALI=m
+# CONFIG_FB_SUNXI=m
+# CONFIG_FB_SUNXI_UMP=y
+# CONFIG_FB_SUNXI_LCD=m
+# CONFIG_FB_SUNXI_HDMI=m
+# CONFIG_SOUND_SUN4I=y
+# CONFIG_SND_SUN4I_SOC_CODEC=y
+# CONFIG_SND_SUN4I_SOC_HDMIAUDIO=y
+# CONFIG_SND_SUN4I_SOC_SPDIF=m
+# CONFIG_SND_SUN4I_SOC_I2S_INTERFACE=m
+# CONFIG_SND_SOC_I2C_AND_SPI=y
+# CONFIG_USB_SW_SUN4I_HCD=y
+# CONFIG_USB_SW_SUN4I_HCD0=y
+# CONFIG_USB_SW_SUN4I_HCI=y
+# CONFIG_USB_SW_SUN4I_EHCI0=y
+# CONFIG_USB_SW_SUN4I_EHCI1=y
+# CONFIG_USB_SW_SUN4I_OHCI0=y
+# CONFIG_USB_SW_SUN4I_OHCI1=y
+# CONFIG_USB_SW_SUN4I_USB=y
+# CONFIG_USB_SW_SUN4I_USB_MANAGER=y
+# CONFIG_MMC_SUNXI_POWER_CONTROL=y
+# CONFIG_MMC_SUNXI=y
+# CONFIG_RTC_DRV_SUN4I=y
+
+# imx
+CONFIG_BACKLIGHT_PWM=m
+# CONFIG_DRM_IMX is not set
+# CONFIG_DRM_IMX_FB_HELPER=m
+# CONFIG_DRM_IMX_PARALLEL_DISPLAY=m
+# CONFIG_DRM_IMX_IPUV3_CORE=m
+# CONFIG_DRM_IMX_IPUV3=m
+# CONFIG_VIDEO_CODA is not set
+
+CONFIG_INPUT_PWM_BEEPER=m
# exynos
# CONFIG_DRM_EXYNOS is not set
+# CONFIG_PINCTRL_EXYNOS5440 is not set
# picoxcell
CONFIG_CRYPTO_DEV_PICOXCELL=m
@@ -184,10 +257,15 @@ CONFIG_CRYPTO_DEV_PICOXCELL=m
# ST Ericsson
# CONFIG_I2C_NOMADIK is not set
+# OMAP
+# CONFIG_SENSORS_LIS3_I2C is not set
+
# General ARM drivers
# Device tree
+CONFIG_DTC=y
CONFIG_OF=y
CONFIG_USE_OF=y
+CONFIG_OF_DEVICE=y
CONFIG_OF_IRQ=y
CONFIG_ARM_ATAG_DTB_COMPAT=y
CONFIG_ARM_APPENDED_DTB=y
@@ -252,6 +330,7 @@ CONFIG_EDAC_LEGACY_SYSFS=y
CONFIG_MPCORE_WATCHDOG=m
# Multi function devices
+CONFIG_MFD_CORE=m
CONFIG_MFD_T7L66XB=y
CONFIG_MFD_TC6387XB=y
CONFIG_MFD_SYSCON=y
@@ -274,6 +353,7 @@ CONFIG_GPIO_GENERIC_PLATFORM=m
CONFIG_GPIO_EM=m
CONFIG_GPIO_ADNP=m
CONFIG_GPIO_MCP23S08=m
+CONFIG_POWER_RESET_GPIO=y
CONFIG_RFKILL_GPIO=m
CONFIG_SERIAL_8250_EM=m
CONFIG_INPUT_GP2A=m
@@ -284,6 +364,9 @@ CONFIG_MDIO_BUS_MUX_MMIOREG=m
CONFIG_MTD_OF_PARTS=y
# CONFIG_MG_DISK is not set
+# Framebuffers
+CONFIG_FB_SSD1307=m
+
# Regulator drivers
CONFIG_REGULATOR_FAN53555=m
# Needs work/investigation
@@ -329,6 +412,7 @@ CONFIG_PERF_EVENTS=y
# CONFIG_VIDEO_DM6446_CCDC is not set
# CONFIG_PANEL_TAAL is not set
# CONFIG_IR_RX51 is not set
+# CONFIG_DRM_OMAP is not set
# CONFIG_GENERIC_CPUFREQ_CPU0 is not set
# CONFIG_GPIO_TWL6040 is not set
diff --git a/freed-ora/current/master/config-generic b/freed-ora/current/master/config-generic
index f079eb084..a9afaa2de 100644
--- a/freed-ora/current/master/config-generic
+++ b/freed-ora/current/master/config-generic
@@ -4,6 +4,8 @@
CONFIG_MMU=y
CONFIG_SMP=y
CONFIG_HOTPLUG_CPU=y
+# CONFIG_BOOTPARAM_HOTPLUG_CPU0 is not set
+# CONFIG_DEBUG_HOTPLUG_CPU0 is not set
CONFIG_LOCALVERSION=""
CONFIG_CROSS_COMPILE=""
CONFIG_DEFAULT_HOSTNAME="(none)"
@@ -52,6 +54,8 @@ CONFIG_IOSCHED_DEADLINE=y
CONFIG_IOSCHED_CFQ=y
CONFIG_CFQ_GROUP_IOSCHED=y
CONFIG_DEFAULT_CFQ=y
+# CONFIG_CHECKPOINT_RESTORE is not set
+# CONFIG_NAMESPACES is not set
CONFIG_PID_NS=y
CONFIG_UTS_NS=y
CONFIG_IPC_NS=y
@@ -124,6 +128,7 @@ CONFIG_MMC_BLOCK_MINORS=8
CONFIG_MMC_BLOCK_BOUNCE=y
CONFIG_MMC_SDHCI=m
CONFIG_MMC_SDHCI_PCI=m
+CONFIG_MMC_SDHCI_ACPI=m
CONFIG_MMC_SDRICOH_CS=m
CONFIG_MMC_TIFM_SD=m
CONFIG_MMC_WBSD=m
@@ -132,6 +137,7 @@ CONFIG_MMC_SDHCI_PLTFM=m
CONFIG_MMC_CB710=m
CONFIG_MMC_RICOH_MMC=y
CONFIG_MMC_USHC=m
+CONFIG_MMC_REALTEK_PCI=m
CONFIG_MMC_VUB300=m
CONFIG_CB710_CORE=m
@@ -340,6 +346,7 @@ CONFIG_SCSI_SRP=m
CONFIG_SCSI_SRP_ATTRS=m
CONFIG_SCSI_TGT=m
CONFIG_SCSI_ISCI=m
+CONFIG_SCSI_CHELSIO_FCOE=m
CONFIG_SCSI_DH=y
CONFIG_SCSI_DH_RDAC=m
@@ -416,6 +423,9 @@ CONFIG_SCSI_MVSAS_TASKLET=y
CONFIG_SCSI_MPT2SAS=m
CONFIG_SCSI_MPT2SAS_MAX_SGE=128
CONFIG_SCSI_MPT2SAS_LOGGING=y
+CONFIG_SCSI_MPT3SAS=m
+CONFIG_SCSI_MPT3SAS_MAX_SGE=128
+CONFIG_SCSI_MPT3SAS_LOGGING=y
CONFIG_SCSI_UFSHCD=m
@@ -607,6 +617,7 @@ CONFIG_FIREWIRE_SBP2=m
CONFIG_FIREWIRE_NET=m
CONFIG_FIREWIRE_OHCI_DEBUG=y
CONFIG_FIREWIRE_NOSY=m
+CONFIG_FIREWIRE_SERIAL=m
# CONFIG_FIREWIRE_OHCI_REMOTE_DMA is not set
#
@@ -977,9 +988,11 @@ CONFIG_IP_SCTP=m
CONFIG_NET_SCTPPROBE=m
# CONFIG_SCTP_DBG_MSG is not set
# CONFIG_SCTP_DBG_OBJCNT is not set
-# CONFIG_SCTP_HMAC_NONE is not set
-CONFIG_SCTP_HMAC_SHA1=y
-# CONFIG_SCTP_HMAC_MD5 is not set
+CONFIG_SCTP_DEFAULT_COOKIE_HMAC_SHA1=y
+# CONFIG_SCTP_DEFAULT_COOKIE_HMAC_MD5 is not set
+# CONFIG_SCTP_DEFAULT_COOKIE_HMAC_NONE is not set
+CONFIG_SCTP_COOKIE_HMAC_MD5=y
+CONFIG_SCTP_COOKIE_HMAC_SHA1=y
CONFIG_ATM=m
CONFIG_VLAN_8021Q=m
CONFIG_VLAN_8021Q_GVRP=y
@@ -1077,6 +1090,7 @@ CONFIG_DCB=y
CONFIG_DNS_RESOLVER=m
CONFIG_BATMAN_ADV=m
CONFIG_BATMAN_ADV_BLA=y
+CONFIG_BATMAN_ADV_DAT=y
# CONFIG_BATMAN_ADV_DEBUG is not set
CONFIG_OPENVSWITCH=m
CONFIG_NETPRIO_CGROUP=m
@@ -1187,6 +1201,9 @@ CONFIG_ATL2=m
CONFIG_ATL1=m
CONFIG_ATL1C=m
CONFIG_ATL1E=m
+CONFIG_NET_CADENCE=y
+CONFIG_ARM_AT91_ETHER=m
+CONFIG_MACB=m
CONFIG_NET_VENDOR_BROCADE=y
CONFIG_BNA=m
@@ -1257,6 +1274,7 @@ CONFIG_IXGBE_PTP=y
# CONFIG_NET_VENDOR_I825XX is not set
CONFIG_NET_VENDOR_MARVELL=y
+CONFIG_MVMDIO=m
CONFIG_SKGE=m
# CONFIG_SKGE_DEBUG is not set
CONFIG_SKGE_GENESIS=y
@@ -1483,6 +1501,7 @@ CONFIG_WIMAX_I2400M_DEBUG_LEVEL=8
# CONFIG_ADM8211 is not set
CONFIG_ATH_COMMON=m
+CONFIG_ATH_CARDS=m
CONFIG_ATH5K=m
CONFIG_ATH5K_DEBUG=y
# CONFIG_ATH5K_TRACER is not set
@@ -1490,6 +1509,7 @@ CONFIG_ATH6KL=m
CONFIG_ATH6KL_DEBUG=y
CONFIG_ATH6KL_SDIO=m
CONFIG_ATH6KL_USB=m
+CONFIG_AR5523=m
CONFIG_ATH9K=m
CONFIG_ATH9K_PCI=y
CONFIG_ATH9K_AHB=y
@@ -1500,6 +1520,8 @@ CONFIG_ATH9K_HTC=m
CONFIG_ATH9K_BTCOEX_SUPPORT=y
# CONFIG_ATH9K_HTC_DEBUGFS is not set
CONFIG_ATH9K_RATE_CONTROL=y
+CONFIG_WIL6210=m
+CONFIG_WIL6210_ISR_COR=y
CONFIG_CARL9170=m
CONFIG_CARL9170_LEDS=y
# CONFIG_CARL9170_HWRNG is not set
@@ -1513,13 +1535,13 @@ CONFIG_B43_SDIO=y
CONFIG_B43_BCMA=y
# CONFIG_B43_BCMA_EXTRA is not set
CONFIG_B43_BCMA_PIO=y
-CONFIG_B43_DEBUG=y
+# CONFIG_B43_DEBUG is not set
CONFIG_B43_PHY_LP=y
CONFIG_B43_PHY_N=y
CONFIG_B43_PHY_HT=y
# CONFIG_B43_FORCE_PIO is not set
CONFIG_B43LEGACY=m
-CONFIG_B43LEGACY_DEBUG=y
+# CONFIG_B43LEGACY_DEBUG is not set
CONFIG_B43LEGACY_DMA=y
CONFIG_B43LEGACY_PIO=y
CONFIG_B43LEGACY_DMA_AND_PIO_MODE=y
@@ -1530,9 +1552,19 @@ CONFIG_BRCMFMAC=m
CONFIG_BRCMFMAC_SDIO=y
CONFIG_BRCMFMAC_SDIO_OOB=y
CONFIG_BRCMFMAC_USB=y
+# CONFIG_BRCM_TRACING is not set
# CONFIG_BRCMISCAN is not set
# CONFIG_BRCMDBG is not set
-# CONFIG_HERMES is not set
+CONFIG_HERMES=m
+CONFIG_HERMES_CACHE_FW_ON_INIT=y
+# CONFIG_HERMES_PRISM is not set
+CONFIG_NORTEL_HERMES=m
+CONFIG_PCI_HERMES=m
+CONFIG_PLX_HERMES=m
+CONFIG_PCMCIA_HERMES=m
+CONFIG_ORINOCO_USB=m
+# CONFIG_TMD_HERMES is not set
+# CONFIG_PCMCIA_SPECTRUM is not set
# CONFIG_HOSTAP is not set
# CONFIG_IPW2100 is not set
# CONFIG_IPW2200 is not set
@@ -1613,6 +1645,7 @@ CONFIG_RTL8192CE=m
CONFIG_RTL8192SE=m
CONFIG_RTL8192CU=m
CONFIG_RTL8192DE=m
+CONFIG_RTL8723AE=m
CONFIG_MWIFIEX=m
CONFIG_MWIFIEX_SDIO=m
@@ -1923,6 +1956,7 @@ CONFIG_SERIO_SERPORT=y
CONFIG_SERIO_RAW=m
CONFIG_SERIO_ALTERA_PS2=m
# CONFIG_SERIO_PS2MULT is not set
+CONFIG_SERIO_ARC_PS2=m
# CONFIG_SERIO_CT82C710 is not set
# CONFIG_SERIO_PARKBD is not set
@@ -2034,9 +2068,12 @@ CONFIG_TOUCHSCREEN_W90X900=m
CONFIG_TOUCHSCREEN_ST1232=m
CONFIG_TOUCHSCREEN_ATMEL_MXT=m
# CONFIG_TOUCHSCREEN_MAX11801 is not set
+CONFIG_TOUCHSCREEN_AUO_PIXCIR=m
+CONFIG_TOUCHSCREEN_TI_AM335X_TSC=m
CONFIG_INPUT_MISC=y
CONFIG_INPUT_PCSPKR=m
+CONFIG_INPUT_RETU_PWRBUTTON=m
CONFIG_INPUT_UINPUT=m
CONFIG_INPUT_WISTRON_BTNS=m
CONFIG_INPUT_ATLAS_BTNS=m
@@ -2160,6 +2197,8 @@ CONFIG_I2C_ALGOPCA=m
# CONFIG_I2C_NFORCE2_S4985 is not set
# CONFIG_I2C_INTEL_MID is not set
# CONFIG_I2C_EG20T is not set
+# CONFIG_I2C_CBUS_GPIO is not set
+CONFIG_I2C_VIPERBOARD=m
CONFIG_EEPROM_AT24=m
CONFIG_EEPROM_LEGACY=m
@@ -2330,6 +2369,8 @@ CONFIG_SENSORS_MAX197=m
# CONFIG_PCH_PHUB is not set
# CONFIG_SERIAL_PCH_UART is not set
# CONFIG_USB_SWITCH_FSA9480 is not set
+CONFIG_SERIAL_ARC=m
+CONFIG_SERIAL_ARC_NR_PORTS=1
CONFIG_W1=m
CONFIG_W1_CON=y
@@ -2442,6 +2483,7 @@ CONFIG_RTC_DRV_RS5C372=m
# CONFIG_RTC_DRV_SA1100 is not set
# CONFIG_RTC_DRV_TEST is not set
CONFIG_RTC_DRV_X1205=m
+CONFIG_RTC_DRV_PCF8523=m
CONFIG_RTC_DRV_V3020=m
CONFIG_RTC_DRV_DS2404=m
CONFIG_RTC_DRV_STK17TA8=m
@@ -2510,7 +2552,7 @@ CONFIG_DRM_I2C_CH7006=m
CONFIG_DRM_I2C_SIL164=m
CONFIG_DRM_UDL=m
CONFIG_DRM_VMWGFX=m
-# CONFIG_DRM_VMWGFX_FBCON is not set
+CONFIG_DRM_VMWGFX_FBCON=y
CONFIG_DRM_VGEM=m
#
@@ -2662,6 +2704,7 @@ CONFIG_DVB_BT8XX=m
CONFIG_DVB_BUDGET_CORE=m
CONFIG_DVB_PLUTO2=m
CONFIG_SMS_SIANO_MDTV=m
+CONFIG_SMS_SIANO_RC=y
CONFIG_MEDIA_SUBDRV_AUTOSELECT=y
CONFIG_SMS_USB_DRV=m
CONFIG_SMS_SDIO_DRV=m
@@ -2680,7 +2723,7 @@ CONFIG_DVB_FIREDTV=m
CONFIG_DVB_NGENE=m
CONFIG_DVB_DDBRIDGE=m
CONFIG_DVB_USB_TECHNISAT_USB2=m
-# CONFIG_DVB_USB_V2 is not set
+CONFIG_DVB_USB_V2=m
CONFIG_DVB_AV7110=m
CONFIG_DVB_AV7110_OSD=y
@@ -3036,6 +3079,7 @@ CONFIG_SND_USB_6FIRE=m
CONFIG_SND_FIREWIRE=y
CONFIG_SND_FIREWIRE_SPEAKERS=m
CONFIG_SND_ISIGHT=m
+CONFIG_SND_SCS1X=m
#
# Open Sound System
@@ -3112,7 +3156,7 @@ CONFIG_USB_STORAGE_REALTEK=m
CONFIG_REALTEK_AUTOPM=y
CONFIG_USB_STORAGE_ENE_UB6250=m
# CONFIG_USB_LIBUSUAL is not set
-CONFIG_USB_UAS=m
+# CONFIG_USB_UAS is not set
#
@@ -3123,6 +3167,7 @@ CONFIG_USB_HID=y
CONFIG_HID_SUPPORT=y
CONFIG_HID=y
+CONFIG_I2C_HID=m
CONFIG_HID_BATTERY_STRENGTH=y
# debugging default is y upstream now
CONFIG_HIDRAW=y
@@ -3153,6 +3198,7 @@ CONFIG_HID_PS3REMOTE=m
CONFIG_HID_PRODIKEYS=m
CONFIG_HID_DRAGONRISE=m
CONFIG_HID_GYRATION=m
+CONFIG_HID_ICADE=m
CONFIG_HID_TWINHAN=m
CONFIG_HID_ORTEK=m
CONFIG_HID_PANTHERLORD=m
@@ -3284,6 +3330,7 @@ CONFIG_USB_NET_RNDIS_HOST=m
CONFIG_USB_NET_CDC_SUBSET=m
CONFIG_USB_NET_CDC_EEM=m
CONFIG_USB_NET_CDC_NCM=m
+CONFIG_USB_NET_CDC_MBIM=m
CONFIG_USB_NET_ZAURUS=m
CONFIG_USB_NET_CX82310_ETH=m
CONFIG_USB_NET_INT51X1=m
@@ -3403,6 +3450,7 @@ CONFIG_USB_SEVSEG=m
CONFIG_USB_ALI_M5632=y
CONFIG_USB_APPLEDISPLAY=m
# CONFIG_OMAP_USB2 is not set
+CONFIG_USB_RCAR_PHY=m
CONFIG_USB_ATM=m
CONFIG_USB_CXACRU=m
# CONFIG_USB_C67X00_HCD is not set
@@ -3463,6 +3511,7 @@ CONFIG_SSB_PCMCIAHOST=y
# CONFIG_SSB_SILENT is not set
# CONFIG_SSB_DEBUG is not set
CONFIG_SSB_DRIVER_PCICORE=y
+CONFIG_SSB_DRIVER_GPIO=y
# Multifunction USB devices
# CONFIG_MFD_PCF50633 is not set
@@ -3479,6 +3528,10 @@ CONFIG_MFD_SUPPORT=y
CONFIG_MFD_VX855=m
CONFIG_MFD_SM501=m
CONFIG_MFD_SM501_GPIO=y
+CONFIG_MFD_RTSX_PCI=m
+# CONFIG_MFD_TI_AM335X_TSCADC is not set
+CONFIG_MFD_VIPERBOARD=m
+# CONFIG_MFD_RETU is not set
# CONFIG_MFD_TC6393XB is not set
# CONFIG_MFD_WM8400 is not set
# CONFIG_MFD_WM8350_I2C is not set
@@ -3640,6 +3693,7 @@ CONFIG_9P_FS_POSIX_ACL=y
CONFIG_FUSE_FS=m
# CONFIG_OMFS_FS is not set
CONFIG_CUSE=m
+# CONFIG_F2FS_FS is not set
#
# Network File Systems
@@ -3679,6 +3733,7 @@ CONFIG_CIFS_POSIX=y
CONFIG_CIFS_FSCACHE=y
CONFIG_CIFS_ACL=y
CONFIG_CIFS_WEAK_PW_HASH=y
+CONFIG_CIFS_DEBUG=y
# CONFIG_CIFS_DEBUG2 is not set
CONFIG_CIFS_DFS_UPCALL=y
CONFIG_CIFS_NFSD_EXPORT=y
@@ -4061,6 +4116,11 @@ CONFIG_KEXEC=y
CONFIG_HWMON=y
# CONFIG_HWMON_DEBUG_CHIP is not set
CONFIG_THERMAL_HWMON=y
+# CONFIG_THERMAL_DEFAULT_GOV_FAIR_SHARE is not set
+# CONFIG_THERMAL_DEFAULT_GOV_USER_SPACE is not set
+CONFIG_FAIR_SHARE=y
+CONFIG_STEP_WISE=y
+# CONFIG_USER_SPACE is not set
# CONFIG_CPU_THERMAL is not set
CONFIG_INOTIFY=y
@@ -4078,7 +4138,7 @@ CONFIG_IBMASR=m
CONFIG_PM_DEBUG=y
CONFIG_PM_TRACE=y
CONFIG_PM_TRACE_RTC=y
-CONFIG_PM_TEST_SUSPEND=y
+# CONFIG_PM_TEST_SUSPEND is not set
CONFIG_PM_RUNTIME=y
# CONFIG_PM_OPP is not set
# CONFIG_PM_AUTOSLEEP is not set
@@ -4137,6 +4197,7 @@ CONFIG_SND_INDIGOIOX=m
CONFIG_SND_INDIGODJX=m
# CONFIG_SND_SOC is not set
+CONFIG_BALLOON_COMPACTION=y
CONFIG_COMPACTION=y
CONFIG_MIGRATION=y
CONFIG_NEW_LEDS=y
@@ -4248,6 +4309,8 @@ CONFIG_APM_POWER=m
# CONFIG_CHARGER_LP8727 is not set
# CONFIG_CHARGER_GPIO is not set
# CONFIG_CHARGER_PCF50633 is not set
+# CONFIG_CHARGER_BQ2415X is not set
+CONFIG_POWER_RESET=y
# CONFIG_PDA_POWER is not set
@@ -4257,6 +4320,7 @@ CONFIG_UIO=m
CONFIG_UIO_CIF=m
# CONFIG_UIO_PDRV is not set
# CONFIG_UIO_PDRV_GENIRQ is not set
+# CONFIG_UIO_DMEM_GENIRQ is not set
CONFIG_UIO_AEC=m
CONFIG_UIO_SERCOS3=m
CONFIG_UIO_PCI_GENERIC=m
@@ -4291,6 +4355,8 @@ CONFIG_NOZOMI=m
# CONFIG_TPS65010 is not set
CONFIG_INPUT_APANEL=m
+CONFIG_INPUT_GP2A=m
+# CONFIG_INPUT_GPIO_TILT_POLLED is not set
# CONFIG_INTEL_MENLOW is not set
CONFIG_ENCLOSURE_SERVICES=m
@@ -4304,6 +4370,7 @@ CONFIG_MSPRO_BLOCK=m
CONFIG_MEMSTICK_TIFM_MS=m
CONFIG_MEMSTICK_JMICRON_38X=m
CONFIG_MEMSTICK_R592=m
+CONFIG_MEMSTICK_REALTEK_PCI=m
CONFIG_ACCESSIBILITY=y
CONFIG_A11Y_BRAILLE_CONSOLE=y
@@ -4424,6 +4491,7 @@ CONFIG_ALTERA_STAPL=m
# CONFIG_BPCTL is not set
# CONFIG_CED1401 is not set
# CONFIG_DGRP is not set
+# CONFIG_SB105X is not set
# END OF STAGING
#
@@ -4451,8 +4519,9 @@ CONFIG_LSM_MMAP_MIN_ADDR=65536
CONFIG_STRIP_ASM_SYMS=y
# CONFIG_RCU_FANOUT_EXACT is not set
-# FIXME: Revisit FAST_NO_HZ after 3.5
-# CONFIG_RCU_FAST_NO_HZ is not set
+# FIXME: Revisit FAST_NO_HZ after it's fixed
+# CONFIG_RCU_FAST_NO_HZ is not setA
+# CONFIG_RCU_NOCB_CPU is not set
CONFIG_RCU_CPU_STALL_TIMEOUT=60
# CONFIG_RCU_TORTURE_TEST is not set
# CONFIG_RCU_TRACE is not set
@@ -4509,6 +4578,9 @@ CONFIG_GPIO_SYSFS=y
# CONFIG_GPIO_CS5535 is not set
# CONFIG_GPIO_ADP5588 is not set
# CONFIG_GPIO_IT8761E is not set
+# CONFIG SB105x is not set
+# CONFIG_GPIO_TS5500 is not set
+CONFIG_GPIO_VIPERBOARD=m
# CONFIG_GPIO_MAX7300 is not set
# CONFIG_UCB1400_CORE is not set
# CONFIG_TPS6105X is not set
@@ -4560,6 +4632,7 @@ CONFIG_BCMA_BLOCKIO=y
CONFIG_BCMA_HOST_PCI_POSSIBLE=y
CONFIG_BCMA_HOST_PCI=y
CONFIG_BCMA_DRIVER_GMAC_CMN=y
+CONFIG_BCMA_DRIVER_GPIO=y
# CONFIG_BCMA_DEBUG is not set
# CONFIG_GOOGLE_FIRMWARE is not set
diff --git a/freed-ora/current/master/config-nodebug b/freed-ora/current/master/config-nodebug
index b52b784e9..6b8b48fc6 100644
--- a/freed-ora/current/master/config-nodebug
+++ b/freed-ora/current/master/config-nodebug
@@ -4,109 +4,109 @@ CONFIG_SND_PCM_XRUN_DEBUG=y
CONFIG_DEBUG_ATOMIC_SLEEP=y
-CONFIG_DEBUG_MUTEXES=y
-CONFIG_DEBUG_RT_MUTEXES=y
-CONFIG_DEBUG_LOCK_ALLOC=y
+# CONFIG_DEBUG_MUTEXES is not set
+# CONFIG_DEBUG_RT_MUTEXES is not set
+# CONFIG_DEBUG_LOCK_ALLOC is not set
CONFIG_PROVE_LOCKING=y
CONFIG_DEBUG_SPINLOCK=y
CONFIG_PROVE_RCU=y
# CONFIG_PROVE_RCU_REPEATEDLY is not set
-CONFIG_DEBUG_PER_CPU_MAPS=y
+# CONFIG_DEBUG_PER_CPU_MAPS is not set
CONFIG_CPUMASK_OFFSTACK=y
-CONFIG_CPU_NOTIFIER_ERROR_INJECT=m
+# CONFIG_CPU_NOTIFIER_ERROR_INJECT is not set
-CONFIG_FAULT_INJECTION=y
-CONFIG_FAILSLAB=y
-CONFIG_FAIL_PAGE_ALLOC=y
-CONFIG_FAIL_MAKE_REQUEST=y
-CONFIG_FAULT_INJECTION_DEBUG_FS=y
-CONFIG_FAULT_INJECTION_STACKTRACE_FILTER=y
-CONFIG_FAIL_IO_TIMEOUT=y
-CONFIG_FAIL_MMC_REQUEST=y
+# CONFIG_FAULT_INJECTION is not set
+# CONFIG_FAILSLAB is not set
+# CONFIG_FAIL_PAGE_ALLOC is not set
+# CONFIG_FAIL_MAKE_REQUEST is not set
+# CONFIG_FAULT_INJECTION_DEBUG_FS is not set
+# CONFIG_FAULT_INJECTION_STACKTRACE_FILTER is not set
+# CONFIG_FAIL_IO_TIMEOUT is not set
+# CONFIG_FAIL_MMC_REQUEST is not set
CONFIG_SLUB_DEBUG_ON=y
-CONFIG_LOCK_STAT=y
+# CONFIG_LOCK_STAT is not set
CONFIG_DEBUG_STACK_USAGE=y
-CONFIG_ACPI_DEBUG=y
+# CONFIG_ACPI_DEBUG is not set
# CONFIG_ACPI_DEBUG_FUNC_TRACE is not set
-CONFIG_DEBUG_SG=y
+# CONFIG_DEBUG_SG is not set
# CONFIG_DEBUG_PAGEALLOC is not set
-CONFIG_DEBUG_WRITECOUNT=y
-CONFIG_DEBUG_OBJECTS=y
+# CONFIG_DEBUG_WRITECOUNT is not set
+# CONFIG_DEBUG_OBJECTS is not set
# CONFIG_DEBUG_OBJECTS_SELFTEST is not set
-CONFIG_DEBUG_OBJECTS_FREE=y
-CONFIG_DEBUG_OBJECTS_TIMERS=y
-CONFIG_DEBUG_OBJECTS_RCU_HEAD=y
+# CONFIG_DEBUG_OBJECTS_FREE is not set
+# CONFIG_DEBUG_OBJECTS_TIMERS is not set
+# CONFIG_DEBUG_OBJECTS_RCU_HEAD is not set
CONFIG_DEBUG_OBJECTS_ENABLE_DEFAULT=1
-CONFIG_X86_PTDUMP=y
+# CONFIG_X86_PTDUMP is not set
-CONFIG_CAN_DEBUG_DEVICES=y
+# CONFIG_CAN_DEBUG_DEVICES is not set
-CONFIG_MODULE_FORCE_UNLOAD=y
+# CONFIG_MODULE_FORCE_UNLOAD is not set
-CONFIG_SYSCTL_SYSCALL_CHECK=y
+# CONFIG_SYSCTL_SYSCALL_CHECK is not set
-CONFIG_DEBUG_NOTIFIERS=y
+# CONFIG_DEBUG_NOTIFIERS is not set
CONFIG_DMA_API_DEBUG=y
-CONFIG_MMIOTRACE=y
+# CONFIG_MMIOTRACE is not set
-CONFIG_DEBUG_CREDENTIALS=y
+# CONFIG_DEBUG_CREDENTIALS is not set
# off in both production debug and nodebug builds,
# on in rawhide nodebug builds
-CONFIG_DEBUG_FORCE_WEAK_PER_CPU=y
+# CONFIG_DEBUG_FORCE_WEAK_PER_CPU is not set
CONFIG_EXT4_DEBUG=y
-CONFIG_DEBUG_PERF_USE_VMALLOC=y
+# CONFIG_DEBUG_PERF_USE_VMALLOC is not set
-CONFIG_JBD2_DEBUG=y
+# CONFIG_JBD2_DEBUG is not set
-CONFIG_NFSD_FAULT_INJECTION=y
+# CONFIG_NFSD_FAULT_INJECTION is not set
-CONFIG_DEBUG_BLK_CGROUP=y
+# CONFIG_DEBUG_BLK_CGROUP is not set
-CONFIG_DRBD_FAULT_INJECTION=y
+# CONFIG_DRBD_FAULT_INJECTION is not set
-CONFIG_ATH_DEBUG=y
-CONFIG_CARL9170_DEBUGFS=y
-CONFIG_IWLWIFI_DEVICE_TRACING=y
+# CONFIG_ATH_DEBUG is not set
+# CONFIG_CARL9170_DEBUGFS is not set
+# CONFIG_IWLWIFI_DEVICE_TRACING is not set
-CONFIG_DEBUG_OBJECTS_WORK=y
+# CONFIG_DEBUG_OBJECTS_WORK is not set
-CONFIG_DMADEVICES_DEBUG=y
-CONFIG_DMADEVICES_VDEBUG=y
+# CONFIG_DMADEVICES_DEBUG is not set
+# CONFIG_DMADEVICES_VDEBUG is not set
CONFIG_PM_ADVANCED_DEBUG=y
-CONFIG_CEPH_LIB_PRETTYDEBUG=y
-CONFIG_QUOTA_DEBUG=y
+# CONFIG_CEPH_LIB_PRETTYDEBUG is not set
+# CONFIG_QUOTA_DEBUG is not set
CONFIG_PCI_DEFAULT_USE_CRS=y
CONFIG_KGDB_KDB=y
CONFIG_KDB_KEYBOARD=y
-CONFIG_DEBUG_OBJECTS_PERCPU_COUNTER=y
-CONFIG_TEST_LIST_SORT=y
+# CONFIG_DEBUG_OBJECTS_PERCPU_COUNTER is not set
+# CONFIG_TEST_LIST_SORT is not set
CONFIG_DETECT_HUNG_TASK=y
CONFIG_DEFAULT_HUNG_TASK_TIMEOUT=120
# CONFIG_BOOTPARAM_HUNG_TASK_PANIC is not set
-CONFIG_X86_BOOTPARAM_MEMORY_CORRUPTION_CHECK=y
+# CONFIG_X86_BOOTPARAM_MEMORY_CORRUPTION_CHECK is not set
-CONFIG_DEBUG_KMEMLEAK=y
+# CONFIG_DEBUG_KMEMLEAK is not set
CONFIG_DEBUG_KMEMLEAK_EARLY_LOG_SIZE=1024
# CONFIG_DEBUG_KMEMLEAK_TEST is not set
CONFIG_DEBUG_KMEMLEAK_DEFAULT_OFF=y
diff --git a/freed-ora/current/master/config-powerpc-generic b/freed-ora/current/master/config-powerpc-generic
index a6ef1c4df..3923eff84 100644
--- a/freed-ora/current/master/config-powerpc-generic
+++ b/freed-ora/current/master/config-powerpc-generic
@@ -380,3 +380,8 @@ CONFIG_RCU_FANOUT_LEAF=16
# CONFIG_RTC_DRV_SNVS is not set
# CONFIG_ASYMMETRIC_KEY_TYPE is not set
+CONFIG_POWER_RESET_GPIO=y
+CONFIG_FB_SSD1307=m
+CONFIG_INPUT_PWM_BEEPER=m
+CONFIG_BACKLIGHT_PWM=m
+CONFIG_CPU_IDLE_MULTIPLE_DRIVERS=n
diff --git a/freed-ora/current/master/config-s390x b/freed-ora/current/master/config-s390x
index 41e41c53c..c1a616f77 100644
--- a/freed-ora/current/master/config-s390x
+++ b/freed-ora/current/master/config-s390x
@@ -250,3 +250,12 @@ CONFIG_BPF_JIT=y
# CONFIG_SCM_BLOCK_CLUSTER_WRITE is not set
# CONFIG_S390_PTDUMP is not set
# CONFIG_ASYMMETRIC_KEY_TYPE is not set
+CONFIG_PCI_NR_FUNCTIONS=64
+CONFIG_HOTPLUG_PCI=m
+# CONFIG_HOTPLUG_PCI_CPCI is not set
+# CONFIG_HOTPLUG_PCI_SHPC is not set
+CONFIG_HOTPLUG_PCI_S390=m
+# CONFIG_BLK_DEV_PCIESSD_MTIP32XX is not set
+# CONFIG_SGI_IOC4 is not set
+# CONFIG_GPIO_GENERIC_PLATFORM is not set
+# CONFIG_GPIO_MCP23S08 is not set
diff --git a/freed-ora/current/master/config-sparc64-generic b/freed-ora/current/master/config-sparc64-generic
deleted file mode 100644
index e15e2ef18..000000000
--- a/freed-ora/current/master/config-sparc64-generic
+++ /dev/null
@@ -1,217 +0,0 @@
-CONFIG_SMP=y
-CONFIG_SPARC=y
-CONFIG_SPARC64=y
-CONFIG_SECCOMP=y
-CONFIG_HZ_100=y
-# CONFIG_HZ_1000 is not set
-CONFIG_HZ=100
-
-CONFIG_NO_HZ=y
-CONFIG_HIGH_RES_TIMERS=y
-
-CONFIG_US3_FREQ=m
-CONFIG_US2E_FREQ=m
-
-CONFIG_SUN_LDOMS=y
-CONFIG_SCHED_SMT=y
-CONFIG_SCHED_MC=y
-CONFIG_64BIT=y
-# CONFIG_BBC_I2C is not set
-CONFIG_HUGETLB_PAGE_SIZE_4MB=y
-# CONFIG_HUGETLB_PAGE_SIZE_512K is not set
-# CONFIG_HUGETLB_PAGE_SIZE_64K is not set
-CONFIG_NR_CPUS=256
-CONFIG_US3_FREQ=m
-CONFIG_US2E_FREQ=m
-CONFIG_SUN_OPENPROMFS=m
-CONFIG_COMPAT=y
-CONFIG_UID16=y
-CONFIG_BINFMT_ELF32=y
-CONFIG_ENVCTRL=m
-CONFIG_DISPLAY7SEG=m
-CONFIG_WATCHDOG_CP1XXX=m
-CONFIG_WATCHDOG_RIO=m
-# CONFIG_CMDLINE_BOOL is not set
-# CONFIG_PREVENT_FIRMWARE_BUILD is not set
-# CONFIG_PARPORT is not set
-# CONFIG_BLK_DEV_FD is not set
-# CONFIG_LIRC_PARALLEL is not set
-# CONFIG_I2C_NFORCE2 is not set
-# CONFIG_I2C_PARPORT_LIGHT is not set
-# CONFIG_I2C_SIMTEC is not set
-CONFIG_I2C_ALI1535=m
-# CONFIG_VGASTATE is not set
-# CONFIG_FB_DDC is not set
-# CONFIG_FB_BW2 is not set
-# CONFIG_FB_GRVGA is not set
-CONFIG_FB_CG3=y
-CONFIG_FB_CG6=y
-# CONFIG_FB_RIVA is not set
-# CONFIG_FB_MATROX is not set
-# CONFIG_FB_RADEON is not set
-CONFIG_FB_ATY=y
-# CONFIG_FB_S3 is not set
-# CONFIG_FB_SAVAGE is not set
-# CONFIG_FB_SIS is not set
-# CONFIG_FB_NEOMAGIC is not set
-# CONFIG_FB_3DFX is not set
-# CONFIG_FB_VOODOO1 is not set
-# CONFIG_FB_TRIDENT is not set
-CONFIG_FB_SBUS=y
-CONFIG_FB_FFB=y
-# CONFIG_FB_TCX is not set
-# CONFIG_FB_CG14 is not set
-CONFIG_FB_PM2=y
-CONFIG_FB_P9100=y
-# CONFIG_FB_LEO is not set
-CONFIG_FB_XVR500=y
-CONFIG_FB_XVR2500=y
-# CONFIG_VGASTATE is not set
-# CONFIG_FB_DDC is not set
-# CONFIG_FB_CIRRUS is not set
-# CONFIG_FB_ATY128 is not set
-# CONFIG_FB_KYRO is not set
-# CONFIG_AGP is not set
-# CONFIG_DRM_NOUVEAU is not set
-# CONFIG_MDA_CONSOLE is not set
-CONFIG_FONTS=y
-# CONFIG_FONT_8x8 is not set
-# CONFIG_FONT_8x16 is not set
-# CONFIG_FONT_7x14 is not set
-# CONFIG_FONT_10x18 is not set
-# CONFIG_FONT_6x11 is not set
-# CONFIG_FONT_SUN12x22 is not set
-# CONFIG_FONT_PEARL_8x8 is not set
-# CONFIG_FONT_ACORN_8x8 is not set
-CONFIG_FONT_SUN8x16=y
-CONFIG_FONT_SUN12x22=y
-# CONFIG_LOGO_LINUX_CLUT224 is not set
-# CONFIG_SERIAL_8250 is not set
-CONFIG_SERIAL_SUNZILOG=y
-CONFIG_SERIAL_SUNZILOG_CONSOLE=y
-CONFIG_SERIAL_SUNSU=y
-CONFIG_SERIAL_SUNSU_CONSOLE=y
-CONFIG_SERIAL_SUNSAB=y
-CONFIG_SERIAL_SUNSAB_CONSOLE=y
-CONFIG_SERIAL_SUNHV=y
-CONFIG_SUN_OPENPROMIO=y
-CONFIG_OBP_FLASH=m
-# CONFIG_SERIO_SERPORT is not set
-CONFIG_BLK_DEV_FD=y
-CONFIG_SUNVDC=m
-CONFIG_SUNVNET=m
-# CONFIG_BLK_DEV_AEC62XX is not set
-# CONFIG_BLK_DEV_HPT366 is not set
-# CONFIG_BLK_DEV_PDC202XX_OLD is not set
-# CONFIG_BLK_DEV_PDC202XX_NEW is not set
-# CONFIG_BLK_DEV_SIIMAGE is not set
-# CONFIG_BLK_DEV_SLC90E66 is not set
-# CONFIG_BLK_DEV_VIA82CXXX is not set
-# CONFIG_SCSI_ADVANSYS is not set
-# CONFIG_SCSI_BUSLOGIC is not set
-# CONFIG_SCSI_EATA is not set
-# CONFIG_SCSI_GDTH is not set
-# CONFIG_SCSI_AIC7XXX is not set
-# CONFIG_SCSI_AIC79XX is not set
-# CONFIG_SCSI_FUTURE_DOMAIN is not set
-CONFIG_SCSI_QLOGICPTI=m
-CONFIG_SCSI_SUNESP=m
-CONFIG_SUNLANCE=m
-CONFIG_SUNBMAC=m
-CONFIG_SUNQE=m
-# CONFIG_DM9102 is not set
-# CONFIG_HAMACHI is not set
-# CONFIG_R8169 is not set
-CONFIG_ATM_FORE200E_USE_TASKLET=y
-CONFIG_ATM_FORE200E_DEBUG=0
-CONFIG_ATM_FORE200E_TX_RETRY=16
-# CONFIG_DRM_TDFX is not set
-CONFIG_KEYBOARD_ATKBD=y
-CONFIG_KEYBOARD_SUNKBD=y
-# CONFIG_INPUT_PCSPKR is not set
-CONFIG_INPUT_SPARCSPKR=m
-# CONFIG_SOUND_PRIME is not set
-# CONFIG_SND_SUN_AMD7930 is not set
-CONFIG_SND_SUN_CS4231=m
-# CONFIG_SND_SUN_DBRI is not set
-CONFIG_PARPORT_SUNBPP=m
-CONFIG_LOGO_SUN_CLUT224=y
-CONFIG_MTD_SUN_UFLASH=m
-CONFIG_MYRI_SBUS=m
-# CONFIG_SGI_IOC4 is not set
-# CONFIG_VIDEO_ZORAN is not set
-# CONFIG_VIDEO_STRADIS is not set
-# CONFIG_IEEE1394_SBP2 is not set
-# CONFIG_USB_NET2280 is not set
-# CONFIG_DEBUG_BUGVERBOSE is not set
-# CONFIG_DEBUG_DCFLUSH is not set
-# CONFIG_DEBUG_BOOTMEM is not set
-# CONFIG_DEBUG_LOCK_ALLOC is not set
-# CONFIG_PROVE_LOCKING is not set
-# CONFIG_LOCK_STAT is not set
-# CONFIG_LOCKDEP is not set
-# CONFIG_STACK_DEBUG is not set
-
-CONFIG_SPARSEMEM_VMEMMAP=y
-
-# CONFIG_THERMAL is not set
-
-CONFIG_FRAME_WARN=2048
-
-CONFIG_NUMA=y
-
-CONFIG_SND_SPARC=y
-
-CONFIG_HW_RANDOM_N2RNG=m
-
-# drivers/isdn/hardware/mISDN/hfcmulti.c:5255:2: error: #error "not running on big endian machines now"
-# CONFIG_MISDN_HFCMULTI is not set
-
-CONFIG_US3_MC=y
-CONFIG_SENSORS_ULTRA45=m
-CONFIG_LEDS_SUNFIRE=m
-CONFIG_TADPOLE_TS102_UCTRL=m
-
-CONFIG_RCU_FANOUT=64
-CONFIG_RCU_FANOUT_LEAF=16
-
-CONFIG_LIRC_ENE0100=m
-# CONFIG_BATTERY_DS2782 is not set
-CONFIG_USB_GSPCA_SN9C20X=m
-CONFIG_USB_GSPCA_SN9C20X_EVDEV=y
-CONFIG_LSM_MMAP_MIN_ADDR=65536
-
-CONFIG_PERF_COUNTERS=y
-CONFIG_PERF_EVENTS=y
-CONFIG_EVENT_PROFILE=y
-
-CONFIG_EARLYFB=y
-CONFIG_SERIAL_GRLIB_GAISLER_APBUART=m
-
-CONFIG_GRETH=m
-CONFIG_FB_XVR1000=y
-
-CONFIG_CRYPTO_DEV_NIAGARA2=y
-
-# CONFIG_MTD_OF_PARTS is not set
-# CONFIG_MTD_PHYSMAP_OF is not set
-# CONFIG_MMC_SDHCI_OF is not set
-# CONFIG_OF_SELFTEST is not set
-
-CONFIG_BPF_JIT=y
-# CONFIG_BLK_DEV_PCIESSD_MTIP32XX is not set
-# CONFIG_IRQ_DOMAIN_DEBUG is not set
-
-# CONFIG_MDIO_BUS_MUX_MMIOREG is not set
-# CONFIG_MFD_SYSCON is not set
-# CONFIG_RTC_DRV_SNVS is not set
-# CONFIG_CRYPTO_CRC32C_SPARC64 is not set
-# CONFIG_CRYPTO_MD5_SPARC64 is not set
-# CONFIG_CRYPTO_SHA1_SPARC64 is not set
-# CONFIG_CRYPTO_SHA256_SPARC64 is not set
-# CONFIG_CRYPTO_SHA512_SPARC64 is not set
-# CONFIG_CRYPTO_AES_SPARC64 is not set
-# CONFIG_CRYPTO_CAMELLIA_SPARC64 is not set
-# CONFIG_CRYPTO_DES_SPARC64 is not set
-# CONFIG_ASYMMETRIC_KEY_TYPE is not set
-
diff --git a/freed-ora/current/master/config-x86-32-generic b/freed-ora/current/master/config-x86-32-generic
index 1216d47e6..0e9b3f4be 100644
--- a/freed-ora/current/master/config-x86-32-generic
+++ b/freed-ora/current/master/config-x86-32-generic
@@ -53,6 +53,8 @@ CONFIG_FB_GEODE_LX=y
CONFIG_FB_GEODE_GX=y
# CONFIG_FB_GEODE_GX1 is not set
+CONFIG_FB_SSD1307=m
+
# CONFIG_PCI_GOBIOS is not set
# CONFIG_PCI_GODIRECT is not set
# CONFIG_PCI_GOMMCONFIG is not set
@@ -94,6 +96,8 @@ CONFIG_X86_TRAMPOLINE=y
CONFIG_PCI_DIRECT=y
+# CONFIG_TRANSPARENT_HUGEPAGE is not set
+
# SHPC has half-arsed PCI probing, which makes it load on too many systems
# CONFIG_HOTPLUG_PCI_SHPC is not set
@@ -179,6 +183,9 @@ CONFIG_XO1_RFKILL=m
CONFIG_X86_32_IRIS=m
+CONFIG_POWER_RESET_GPIO=y
+
+
CONFIG_MTD_OF_PARTS=y
CONFIG_MTD_PHYSMAP_OF=m
@@ -202,6 +209,9 @@ CONFIG_I2O_EXT_ADAPTEC=y
CONFIG_I2O_CONFIG_OLD_IOCTL=y
CONFIG_I2O_BUS=m
+CONFIG_INPUT_PWM_BEEPER=m
+CONFIG_BACKLIGHT_PWM=m
+
# CONFIG_EDAC_SBRIDGE is not set
# CONFIG_X86_WANT_INTEL_MID is not set
diff --git a/freed-ora/current/master/config-x86-generic b/freed-ora/current/master/config-x86-generic
index 1716194e5..e8335a2f0 100644
--- a/freed-ora/current/master/config-x86-generic
+++ b/freed-ora/current/master/config-x86-generic
@@ -78,6 +78,7 @@ CONFIG_ACPI_SLEEP=y
CONFIG_ACPI_THERMAL=y
CONFIG_ACPI_TOSHIBA=m
CONFIG_ACPI_VIDEO=m
+CONFIG_ACPI_INITRD_TABLE_OVERRIDE=y
# FIXME: Next two are deprecated. Remove them when they disappear upstream
# CONFIG_ACPI_PROCFS_POWER is not set
# CONFIG_ACPI_PROC_EVENT is not set
@@ -282,6 +283,7 @@ CONFIG_MTD_CK804XROM=m
CONFIG_NO_HZ=y
CONFIG_HIGH_RES_TIMERS=y
CONFIG_CPU_IDLE=y
+# CONFIG_CPU_IDLE_MULTIPLE_DRIVERS is not set
# CONFIG_CPU_IDLE_GOV_LADDER is not set
CONFIG_CPU_IDLE_GOV_MENU=y
@@ -320,7 +322,7 @@ CONFIG_STRICT_DEVMEM=y
# CONFIG_MEMTEST is not set
# CONFIG_DEBUG_TLBFLUSH is not set
-CONFIG_MAXSMP=y
+# CONFIG_MAXSMP is not set
CONFIG_HP_ILO=m
@@ -390,8 +392,6 @@ CONFIG_X86_RESERVE_LOW=64
CONFIG_PCH_GBE=m
CONFIG_PCH_PHUB=m
-CONFIG_TRANSPARENT_HUGEPAGE=y
-
CONFIG_CRYPTO_AES_NI_INTEL=y
CONFIG_CRYPTO_SERPENT_SSE2_586=m
@@ -411,6 +411,7 @@ CONFIG_HYPERV_UTILS=m
CONFIG_HID_HYPERV_MOUSE=m
CONFIG_HYPERV_NET=m
CONFIG_HYPERV_STORAGE=m
+CONFIG_HYPERV_BALLOON=m
# Depends on HOTPLUG_PCI_PCIE
CONFIG_BLK_DEV_PCIESSD_MTIP32XX=m
diff --git a/freed-ora/current/master/config-x86_64-generic b/freed-ora/current/master/config-x86_64-generic
index 6003f11c0..575564345 100644
--- a/freed-ora/current/master/config-x86_64-generic
+++ b/freed-ora/current/master/config-x86_64-generic
@@ -13,6 +13,8 @@ CONFIG_AMD_NUMA=y
CONFIG_X86_64_ACPI_NUMA=y
# CONFIG_NUMA_EMU is not set
# CONFIG_X86_NUMACHIP is not set
+CONFIG_NUMA_BALANCING_DEFAULT_ENABLED=y
+CONFIG_NUMA_BALANCING=y
CONFIG_NR_CPUS=128
CONFIG_PHYSICAL_START=0x1000000
@@ -27,6 +29,8 @@ CONFIG_AMD_IOMMU_V2=m
CONFIG_SWIOTLB=y
# CONFIG_CALGARY_IOMMU is not set
+CONFIG_TRANSPARENT_HUGEPAGE=y
+
CONFIG_KEXEC_JUMP=y
CONFIG_ACPI_BLACKLIST_YEAR=0
@@ -50,6 +54,7 @@ CONFIG_CRYPTO_CAST5_AVX_X86_64=m
CONFIG_CRYPTO_CAST6_AVX_X86_64=m
CONFIG_CRYPTO_SERPENT_AVX_X86_64=m
CONFIG_CRYPTO_TWOFISH_AVX_X86_64=m
+CONFIG_CRYPTO_CAMELLIA_AESNI_AVX_X86_64=m
# CONFIG_I2C_ALI1535 is not set
# CONFIG_I2C_ALI1563 is not set
@@ -69,6 +74,7 @@ CONFIG_SPARSEMEM=y
CONFIG_HAVE_MEMORY_PRESENT=y
CONFIG_SPARSEMEM_EXTREME=y
CONFIG_SPARSEMEM_VMEMMAP=y
+# CONFIG_MOVABLE_NODE is not set
# CONFIG_MEMORY_HOTPLUG is not set
# CONFIG_MEMORY_HOTREMOVE is not set
@@ -121,6 +127,10 @@ CONFIG_I7300_IDLE=m
CONFIG_BPF_JIT=y
+# https://fedoraproject.org/wiki/Features/Checkpoint_Restore
+CONFIG_CHECKPOINT_RESTORE=y
+CONFIG_NAMESPACES=y
+
# Should be 32bit only, but lacks KConfig depends
# CONFIG_XO15_EBOOK is not set
diff --git a/freed-ora/current/master/linux-2.6-crash-driver.patch b/freed-ora/current/master/crash-driver.patch
index 239f0f6a0..239f0f6a0 100644
--- a/freed-ora/current/master/linux-2.6-crash-driver.patch
+++ b/freed-ora/current/master/crash-driver.patch
diff --git a/freed-ora/current/master/criu-no-expert.patch b/freed-ora/current/master/criu-no-expert.patch
new file mode 100644
index 000000000..2124427e9
--- /dev/null
+++ b/freed-ora/current/master/criu-no-expert.patch
@@ -0,0 +1,22 @@
+diff --git a/init/Kconfig b/init/Kconfig
+index be8b7f5..7461760 100644
+--- a/init/Kconfig
++++ b/init/Kconfig
+@@ -989,7 +989,7 @@ config DEBUG_BLK_CGROUP
+ endif # CGROUPS
+
+ config CHECKPOINT_RESTORE
+- bool "Checkpoint/restore support" if EXPERT
++ bool "Checkpoint/restore support"
+ default n
+ help
+ Enables additional kernel features in a sake of checkpoint/restore.
+@@ -1000,7 +1000,7 @@ config CHECKPOINT_RESTORE
+ If unsure, say N here.
+
+ menuconfig NAMESPACES
+- bool "Namespaces support" if EXPERT
++ bool "Namespaces support"
+ default !EXPERT
+ help
+ Provides the way to make tasks work with different objects using
diff --git a/freed-ora/current/master/deblob-3.8 b/freed-ora/current/master/deblob-3.8
new file mode 100755
index 000000000..31417db08
--- /dev/null
+++ b/freed-ora/current/master/deblob-3.8
@@ -0,0 +1,2655 @@
+#!/bin/sh
+
+# Copyright (C) 2008-2013 Alexandre Oliva <lxoliva@fsfla.org>
+# Copyright (C) 2008 Jeff Moe
+# Copyright (C) 2009 Rubén Rodríguez <ruben@gnu.org>
+#
+# This program is part of GNU Linux-libre, a GNU project that
+# publishes scripts to clean up Linux so as to make it suitable for
+# use in the GNU Project and in Free System Distributions.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# 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.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://wiki.gnewsense.org/Builder gen-kernel
+
+# Thanks to Brian Brazil @ gnewsense
+
+
+# For each kver release, start extra with an empty string, then count
+# from 1 if changes are needed that require rebuilding the tarball.
+kver=3.8 extra=
+
+case $1 in
+--force)
+ echo "WARNING: Using the force, ignored errors will be" >&2
+ die () {
+ echo ERROR: "$@" >&2
+ errors=:
+ }
+ forced=: errors=false
+ shift
+ ;;
+*)
+ die () {
+ echo ERROR: "$@" >&2
+ echo Use --force to ignore
+ exit 1
+ }
+ forced=false errors=false
+ ;;
+esac
+
+check=`echo "$0" | sed 's,[^/]*$,,;s,^$,.,;s,/*$,,'`/deblob-check
+if [ ! -f $check ] ; then
+ if $forced; then
+ die deblob-check script missing, will remove entire files
+ else
+ die deblob-check script missing
+ fi
+ have_check=false
+else
+ have_check=:
+ [ -x $check ] || check="/bin/sh $check"
+fi
+
+filetest () {
+ if [ ! -f $1 ]; then
+ die $1 does not exist, something is wrong && return 1
+ fi
+}
+
+announce () {
+ echo
+ echo "$@"
+}
+
+clean_file () {
+ #$1 = filename
+ filetest $1 || return
+ rm $1
+ echo $1: removed
+}
+
+check_changed () {
+ #$1 = filename
+ if cmp $1.deblob $1 > /dev/null; then
+ rm $1.deblob
+ die $1 did not change, something is wrong && return 1
+ fi
+ mv $1.deblob $1
+}
+
+clean_blob () {
+ #$1 = filename
+ filetest $1 || return
+ if $have_check; then
+ name=$1
+ set fnord "$@" -d
+ shift 2
+ if $check "$@" -i linux-$kver $name > $name.deblob; then
+ if [ ! -s $name.deblob ]; then
+ die got an empty file after removing blobs from $name
+ fi
+ else
+ die failed removing blobs from $name
+ fi
+ check_changed $name && echo $name: removed blobs
+ else
+ clean_file $1
+ fi
+}
+
+dummy_blob () {
+ #$1 = filename
+ if test -f $1; then
+ die $1 exists, something is wrong && return
+ elif test ! -f firmware/Makefile; then
+ die firmware/Makefile does not exist, something is wrong && return
+ fi
+
+ clean_sed "s,`echo $1 | sed s,^firmware/,,`,\$(DEBLOBBED),g" \
+ firmware/Makefile "dropped $1"
+}
+
+clean_fw () {
+ #$1 = firmware text input, $2 = firmware output
+ filetest $1 || return
+ if test -f $2; then
+ die $2 exists, something is wrong && return
+ fi
+ clean_blob $1 -s 4
+ dummy_blob $2
+}
+
+drop_fw_file () {
+ #$1 = firmware text input, $2 = firmware output
+ filetest $1 || return
+ if test -f $2; then
+ die $2 exists, something is wrong && return
+ fi
+ clean_file $1
+ dummy_blob $2
+}
+
+clean_kconfig () {
+ #$1 = filename $2 = things to remove
+ case $1 in
+ -f)
+ shift
+ ;;
+ *)
+ if $have_check; then
+ return
+ fi
+ ;;
+ esac
+ filetest $1 || return
+ sed "/^config \\($2\\)\$/{p;i\
+ depends on NONFREE
+d;}" $1 > $1.deblob
+ check_changed $1 && echo $1: marked config $2 as depending on NONFREE
+}
+
+clean_mk () {
+ #$1 = config $2 = Makefile name
+ # We don't clean up Makefiles any more --lxoliva
+ # sed -i "/\\($1\\)/d" $2
+ # echo $2: removed $1 support
+ # check_changed $2
+ filetest $2 || return
+ if sed -n "/\\($1\\)/p" $2 | grep . > /dev/null; then
+ :
+ else
+ die $2 does not contain matches for $1
+ fi
+}
+
+clean_sed () {
+ #$1 = sed-script $2 = file $3 = comment
+ filetest $2 || return
+ sed -e "$1" "$2" > "$2".deblob || {
+ die $2: failed: ${3-applied sed script $1} && return 1; }
+ check_changed $2 && echo $2: ${3-applied sed script $1}
+}
+
+reject_firmware () {
+ #$1 = file $2 = pre sed pattern
+ filetest $1 || return
+ clean_sed "$2"'
+s,request\(_ihex\)\?_firmware\(_nowait\)\?,reject_firmware\2,g
+' "$1" 'disabled non-Free firmware-loading machinery'
+}
+
+maybe_reject_firmware () {
+ #$1 = file $2 = pre sed pattern
+ filetest $1 || return
+ clean_sed "$2"'
+s,request_\(ihex_\)\?firmware\(_nowait\)\?,maybe_reject_\1firmware\2,g
+' "$1" 'retain Free firmware-loading machinery, disabling non-Free one'
+}
+
+undefine_macro () {
+ #$1 - macro name
+ #$2 - substitution
+ #$3 - message
+ #rest - file names
+ macro=$1 repl=$2 msg=$3; shift 3
+ for f in "$@"; do
+ clean_sed "
+s,^#define $macro .*\$,/*(DEBLOBBED)*/,;
+s,$macro,$repl,g;
+" "$f" "$msg"
+ done
+}
+
+undefault_firmware () {
+ #$1 - pattern such that $1_DEFAULT_FIRMWARE is #defined to non-Free firmware
+ #$@ other than $1 - file names
+ macro="$1"_DEFAULT_FIRMWARE; shift
+ undefine_macro "$macro" "\"/*(DEBLOBBED)*/\"" \
+ "disabled non-Free firmware" "$@"
+}
+
+# First, check that files that contain firmwares and their
+# corresponding sources are present.
+
+for f in \
+ drivers/gpu/drm/nouveau/core/engine/copy/fuc/nva3.fuc.h \
+ drivers/gpu/drm/nouveau/core/engine/copy/fuc/nva3.fuc \
+ drivers/gpu/drm/nouveau/core/engine/copy/fuc/nvc0.fuc.h \
+ drivers/gpu/drm/nouveau/core/engine/copy/fuc/nva3.fuc \
+ drivers/gpu/drm/nouveau/core/engine/crypt/fuc/nv98.fuc.h \
+ drivers/gpu/drm/nouveau/core/engine/crypt/fuc/nv98.fuc \
+ drivers/gpu/drm/nouveau/core/engine/graph/fuc/gpcnvc0.fuc.h \
+ drivers/gpu/drm/nouveau/core/engine/graph/fuc/gpcnvc0.fuc \
+ drivers/gpu/drm/nouveau/core/engine/graph/fuc/gpcnvc0.fuc.h \
+ drivers/gpu/drm/nouveau/core/engine/graph/fuc/nvc0.fuc \
+ drivers/gpu/drm/nouveau/core/engine/graph/fuc/gpcnve0.fuc.h \
+ drivers/gpu/drm/nouveau/core/engine/graph/fuc/gpcnve0.fuc \
+ drivers/gpu/drm/nouveau/core/engine/graph/fuc/gpcnve0.fuc.h \
+ drivers/gpu/drm/nouveau/core/engine/graph/fuc/nve0.fuc \
+ drivers/gpu/drm/nouveau/core/engine/graph/fuc/hubnvc0.fuc.h \
+ drivers/gpu/drm/nouveau/core/engine/graph/fuc/hubnvc0.fuc \
+ drivers/gpu/drm/nouveau/core/engine/graph/fuc/hubnvc0.fuc.h \
+ drivers/gpu/drm/nouveau/core/engine/graph/fuc/nvc0.fuc \
+ drivers/gpu/drm/nouveau/core/engine/graph/fuc/hubnve0.fuc.h \
+ drivers/gpu/drm/nouveau/core/engine/graph/fuc/hubnve0.fuc \
+ drivers/gpu/drm/nouveau/core/engine/graph/fuc/hubnve0.fuc.h \
+ drivers/gpu/drm/nouveau/core/engine/graph/fuc/nve0.fuc \
+ drivers/net/wan/wanxlfw.inc_shipped \
+ drivers/net/wan/wanxlfw.S \
+ drivers/net/wireless/atmel.c \
+ drivers/net/wireless/atmel.c \
+ 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/53c700_d.h_shipped \
+ drivers/scsi/53c700.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 \
+ firmware/dsp56k/bootstrap.bin.ihex \
+ firmware/dsp56k/bootstrap.asm \
+ firmware/keyspan_pda/keyspan_pda.HEX \
+ firmware/keyspan_pda/keyspan_pda.S \
+ firmware/keyspan_pda/xircom_pgs.HEX \
+ firmware/keyspan_pda/xircom_pgs.S \
+ sound/pci/cs46xx/imgs/cwcdma.h \
+ sound/pci/cs46xx/imgs/cwcdma.asp \
+; do
+ filetest $f
+done
+
+# Identify the tarball.
+grep -q 'EXTRAVERSION.*-gnu' Makefile ||
+clean_sed "s,^EXTRAVERSION.*,&-gnu$extra,
+" Makefile 'added -gnu to EXTRAVERSION'
+
+grep -q Linux-libre README ||
+clean_sed '
+1,3 s,Linux kernel release.*kernel\.org.*,GNU Linux-libre <http://linux-libre.fsfla.org>,
+2,5 s,Linux version [0-9.]*,GNU Linux-libre,
+1,20 s,\(operating system \)\?Unix,Unix kernel,
+/WHAT IS LINUX/i\
+WHAT IS GNU Linux-libre?\
+\
+ GNU Linux-libre is a Free version of the kernel Linux (see below),\
+ suitable for use with the GNU Operating System in 100% Free\
+ GNU/Linux-libre System Distributions.\
+ http://www.gnu.org/distros/\
+\
+ It removes non-Free components from Linux, that are disguised as\
+ source code or distributed in separate files. It also disables\
+ run-time requests for non-Free components, shipped separately or as\
+ part of Linux, and documentation pointing to them, so as to avoid\
+ (Free-)baiting users into the trap of non-Free Software.\
+ http://www.fsfla.org/anuncio/2010-11-Linux-2.6.36-libre-debait\
+\
+ Linux-libre started within the gNewSense GNU/Linux distribution.\
+ It was later adopted by Jeff Moe, who coined its name, and in 2008\
+ it became a project maintained by FSF Latin America. In 2012, it\
+ became part of the GNU Project.\
+\
+ The GNU Linux-libre project takes a minimal-changes approach to\
+ cleaning up Linux, making no effort to substitute components that\
+ need to be removed with functionally equivalent Free ones.\
+ Nevertheless, we encourage and support efforts towards doing so.\
+ http://libreplanet.org/wiki/LinuxLibre:Devices_that_require_non-free_firmware\
+\
+ Our mascot is Freedo, a light-blue penguin that has just come out\
+ of the shower. Although we like penguins, GNU is a much greater\
+ contribution to the entire system, so its mascot deserves more\
+ promotion. See our web page for their images.\
+ http://linux-libre.fsfla.org/\
+
+' README 'added blurb about GNU Linux-libre'
+
+# Add reject_firmware and maybe_reject_firmware
+grep -q _LINUX_LIBRE_FIRMWARE_H include/linux/firmware.h ||
+clean_sed '$i\
+#ifndef _LINUX_LIBRE_FIRMWARE_H\
+#define _LINUX_LIBRE_FIRMWARE_H\
+\
+#include <linux/device.h>\
+\
+#define NONFREE_FIRMWARE "/*(DEBLOBBED)*/"\
+\
+static inline int\
+report_missing_free_firmware(const char *name, const char *what)\
+{\
+ printk(KERN_ERR "%s: Missing Free %s\\n", name,\
+ what ? what : "firmware");\
+ return -EINVAL;\
+}\
+static inline int\
+reject_firmware(const struct firmware **fw,\
+ const char *name, struct device *device)\
+{\
+ const struct firmware *xfw = NULL;\
+ int retval;\
+ report_missing_free_firmware(dev_name(device), NULL);\
+ retval = request_firmware(&xfw, NONFREE_FIRMWARE, device);\
+ if (!retval)\
+ release_firmware(xfw);\
+ return -EINVAL;\
+}\
+static inline int\
+maybe_reject_firmware(const struct firmware **fw,\
+ const char *name, struct device *device)\
+{\
+ if (strstr (name, NONFREE_FIRMWARE))\
+ return reject_firmware(fw, name, device);\
+ else\
+ return request_firmware(fw, name, device);\
+}\
+static inline void\
+discard_rejected_firmware(const struct firmware *fw, void *context)\
+{\
+ release_firmware(fw);\
+}\
+static inline int\
+reject_firmware_nowait(struct module *module, int uevent,\
+ const char *name, struct device *device,\
+ gfp_t gfp, void *context,\
+ void (*cont)(const struct firmware *fw,\
+ void *context))\
+{\
+ int retval;\
+ report_missing_free_firmware(dev_name(device), NULL);\
+ retval = request_firmware_nowait(module, uevent, NONFREE_FIRMWARE,\
+ device, gfp, NULL,\
+ discard_rejected_firmware);\
+ if (retval)\
+ return retval;\
+ return -EINVAL;\
+}\
+static inline int\
+maybe_reject_firmware_nowait(struct module *module, int uevent,\
+ const char *name, struct device *device,\
+ gfp_t gfp, void *context,\
+ void (*cont)(const struct firmware *fw,\
+ void *context))\
+{\
+ if (strstr (name, NONFREE_FIRMWARE))\
+ return reject_firmware_nowait(module, uevent, name,\
+ device, gfp, context, cont);\
+ else\
+ return request_firmware_nowait(module, uevent, name,\
+ device, gfp, context, cont);\
+}\
+\
+#endif /* _LINUX_LIBRE_FIRMWARE_H */\
+' include/linux/firmware.h 'added non-Free firmware notification support'
+
+grep -q _LINUX_LIBRE_IHEX_FIRMWARE_H include/linux/ihex.h ||
+clean_sed '$i\
+#ifndef _LINUX_LIBRE_IHEX_H\
+#define _LINUX_LIBRE_IHEX_H\
+\
+static inline int\
+maybe_reject_ihex_firmware(const struct firmware **fw,\
+ const char *name, struct device *device)\
+{\
+ if (strstr (name, NONFREE_FIRMWARE))\
+ return reject_firmware(fw, name, device);\
+ else\
+ return request_ihex_firmware(fw, name, device);\
+}\
+\
+#endif /* _LINUX_LIBRE_IHEX_H */\
+' include/linux/ihex.h 'added non-Free ihex firmware notification support'
+
+########
+# Arch #
+########
+
+# x86
+
+announce MICROCODE_AMD - "AMD microcode patch loading support"
+reject_firmware arch/x86/kernel/microcode_amd.c
+clean_blob arch/x86/kernel/microcode_amd.c
+clean_kconfig arch/x86/Kconfig 'MICROCODE_AMD'
+clean_mk CONFIG_MICROCODE_AMD arch/x86/kernel/Makefile
+
+announce MICROCODE_INTEL - "Intel microcode patch loading support"
+reject_firmware arch/x86/kernel/microcode_intel.c
+clean_blob arch/x86/kernel/microcode_intel.c
+clean_kconfig arch/x86/Kconfig 'MICROCODE_INTEL'
+clean_mk CONFIG_MICROCODE_INTEL arch/x86/kernel/Makefile
+
+# arm
+
+announce IXP4XX_NPE - "IXP4xx Network Processor Engine support"
+reject_firmware arch/arm/mach-ixp4xx/ixp4xx_npe.c
+clean_blob arch/arm/mach-ixp4xx/ixp4xx_npe.c
+clean_blob Documentation/arm/IXP4xx
+clean_kconfig arch/arm/mach-ixp4xx/Kconfig 'ARCH_IXP4XX'
+clean_mk CONFIG_IXP4XX_NPE arch/arm/mach-ixp4xx/Makefile
+
+announce ARCH_NETX - "Hilscher NetX based"
+clean_sed '
+s,\([" ]\)request_firmware(,\1reject_firmware(,
+' arch/arm/mach-netx/xc.c 'disabled non-Free firmware-loading machinery'
+clean_blob arch/arm/mach-netx/xc.c
+clean_blob drivers/net/ethernet/netx-eth.c
+clean_kconfig arch/arm/Kconfig 'ARCH_NETX'
+clean_mk CONFIG_ARCH_NETX arch/arm/Makefile
+
+# mips
+
+# I couldn't figure out where the firmware name actually comes from.
+# If it's from some user-set property, we could reenable it. -lxo
+announce XRX200_PHY_FW - "XRX200 PHY firmware loader"
+reject_firmware arch/mips/lantiq/xway/xrx200_phy_fw.c
+clean_kconfig arch/mips/lantiq/Kconfig 'XRX200_PHY_FW'
+clean_mk CONFIG_XRX200_PHY_FW arch/mips/lantiq/xway/Makefile
+
+#######
+# ATM #
+#######
+
+announce ATM_AMBASSADOR - "Madge Ambassador, Collage PCI 155 Server"
+reject_firmware drivers/atm/ambassador.c
+clean_blob drivers/atm/ambassador.c
+clean_fw firmware/atmsar11.HEX firmware/atmsar11.fw
+clean_kconfig drivers/atm/Kconfig 'ATM_AMBASSADOR'
+clean_mk CONFIG_ATM_AMBASSADOR drivers/atm/Makefile
+
+announce ATM_FORE200E - "FORE Systems 200E-series"
+reject_firmware drivers/atm/fore200e.c
+clean_blob drivers/atm/fore200e.c
+clean_blob Documentation/networking/fore200e.txt
+clean_blob drivers/atm/.gitignore
+clean_blob Documentation/dontdiff
+clean_kconfig drivers/atm/Kconfig 'ATM_FORE200E'
+clean_mk CONFIG_ATM_FORE200E drivers/atm/Makefile
+
+announce ATM_SOLOS - "Solos ADSL2+ PCI Multiport card driver"
+reject_firmware drivers/atm/solos-pci.c
+clean_blob drivers/atm/solos-pci.c
+clean_kconfig drivers/atm/Kconfig 'ATM_SOLOS'
+clean_mk CONFIG_ATM_SOLOS drivers/atm/Makefile
+
+########
+# tty #
+########
+
+announce CYCLADES - "Cyclades async mux support"
+reject_firmware drivers/tty/cyclades.c
+clean_blob drivers/tty/cyclades.c
+clean_kconfig drivers/tty/Kconfig 'CYCLADES'
+clean_mk CONFIG_CYCLADES drivers/tty/Makefile
+
+announce ISI - "Multi-Tech multiport card support"
+reject_firmware drivers/tty/isicom.c
+clean_blob drivers/tty/isicom.c
+clean_kconfig drivers/tty/Kconfig 'ISI'
+clean_mk CONFIG_ISI drivers/tty/Makefile
+
+announce MOXA_INTELLIO - "Moxa Intellio support"
+reject_firmware drivers/tty/moxa.c
+clean_blob drivers/tty/moxa.c
+clean_kconfig drivers/tty/Kconfig 'MOXA_INTELLIO'
+clean_mk CONFIG_MOXA_INTELLIO drivers/tty/Makefile
+
+# gpu drm
+
+announce DRM_NOUVEAU - "Nouveau (nVidia) cards"
+reject_firmware drivers/gpu/drm/nouveau/core/engine/graph/nvc0.c
+clean_blob drivers/gpu/drm/nouveau/core/engine/graph/nvc0.c
+reject_firmware drivers/gpu/drm/nouveau/core/core/falcon.c
+clean_blob drivers/gpu/drm/nouveau/core/core/falcon.c
+clean_kconfig drivers/gpu/drm/nouveau/Kconfig 'DRM_NOUVEAU'
+clean_mk CONFIG_DRM_NOUVEAU drivers/gpu/drm/nouveau/Makefile
+
+announce DRM_MGA - "Matrox g200/g400"
+drop_fw_file firmware/matrox/g200_warp.H16 firmware/matrox/g200_warp.fw
+drop_fw_file firmware/matrox/g400_warp.H16 firmware/matrox/g400_warp.fw
+reject_firmware drivers/gpu/drm/mga/mga_warp.c
+clean_blob drivers/gpu/drm/mga/mga_warp.c
+clean_kconfig drivers/gpu/drm/Kconfig 'DRM_MGA'
+clean_mk CONFIG_DRM_MGA drivers/gpu/drm/Makefile
+
+announce DRM_R128 - "ATI Rage 128"
+drop_fw_file firmware/r128/r128_cce.bin.ihex firmware/r128/r128_cce.bin
+reject_firmware drivers/gpu/drm/r128/r128_cce.c
+clean_blob drivers/gpu/drm/r128/r128_cce.c
+clean_kconfig drivers/gpu/drm/Kconfig 'DRM_R128'
+clean_mk CONFIG_DRM_R128 drivers/gpu/drm/Makefile
+
+announce DRM_RADEON - "ATI Radeon"
+drop_fw_file firmware/radeon/R100_cp.bin.ihex firmware/radeon/R100_cp.bin
+drop_fw_file firmware/radeon/R200_cp.bin.ihex firmware/radeon/R200_cp.bin
+drop_fw_file firmware/radeon/R300_cp.bin.ihex firmware/radeon/R300_cp.bin
+drop_fw_file firmware/radeon/R420_cp.bin.ihex firmware/radeon/R420_cp.bin
+drop_fw_file firmware/radeon/R520_cp.bin.ihex firmware/radeon/R520_cp.bin
+drop_fw_file firmware/radeon/R600_me.bin.ihex firmware/radeon/R600_me.bin
+drop_fw_file firmware/radeon/R600_pfp.bin.ihex firmware/radeon/R600_pfp.bin
+drop_fw_file firmware/radeon/RS600_cp.bin.ihex firmware/radeon/RS600_cp.bin
+drop_fw_file firmware/radeon/RS690_cp.bin.ihex firmware/radeon/RS690_cp.bin
+drop_fw_file firmware/radeon/RS780_me.bin.ihex firmware/radeon/RS780_me.bin
+drop_fw_file firmware/radeon/RS780_pfp.bin.ihex firmware/radeon/RS780_pfp.bin
+drop_fw_file firmware/radeon/RV610_me.bin.ihex firmware/radeon/RV610_me.bin
+drop_fw_file firmware/radeon/RV610_pfp.bin.ihex firmware/radeon/RV610_pfp.bin
+drop_fw_file firmware/radeon/RV620_me.bin.ihex firmware/radeon/RV620_me.bin
+drop_fw_file firmware/radeon/RV620_pfp.bin.ihex firmware/radeon/RV620_pfp.bin
+drop_fw_file firmware/radeon/RV630_me.bin.ihex firmware/radeon/RV630_me.bin
+drop_fw_file firmware/radeon/RV630_pfp.bin.ihex firmware/radeon/RV630_pfp.bin
+drop_fw_file firmware/radeon/RV635_me.bin.ihex firmware/radeon/RV635_me.bin
+drop_fw_file firmware/radeon/RV635_pfp.bin.ihex firmware/radeon/RV635_pfp.bin
+drop_fw_file firmware/radeon/RV670_me.bin.ihex firmware/radeon/RV670_me.bin
+drop_fw_file firmware/radeon/RV670_pfp.bin.ihex firmware/radeon/RV670_pfp.bin
+drop_fw_file firmware/radeon/RV710_me.bin.ihex firmware/radeon/RV710_me.bin
+drop_fw_file firmware/radeon/RV710_pfp.bin.ihex firmware/radeon/RV710_pfp.bin
+drop_fw_file firmware/radeon/RV730_me.bin.ihex firmware/radeon/RV730_me.bin
+drop_fw_file firmware/radeon/RV730_pfp.bin.ihex firmware/radeon/RV730_pfp.bin
+drop_fw_file firmware/radeon/RV770_me.bin.ihex firmware/radeon/RV770_me.bin
+drop_fw_file firmware/radeon/RV770_pfp.bin.ihex firmware/radeon/RV770_pfp.bin
+reject_firmware drivers/gpu/drm/radeon/radeon_cp.c
+clean_blob drivers/gpu/drm/radeon/radeon_cp.c
+reject_firmware drivers/gpu/drm/radeon/r100.c
+clean_blob drivers/gpu/drm/radeon/r100.c
+reject_firmware drivers/gpu/drm/radeon/r600.c
+clean_blob drivers/gpu/drm/radeon/r600.c
+reject_firmware drivers/gpu/drm/radeon/r600_cp.c
+clean_blob drivers/gpu/drm/radeon/r600_cp.c
+reject_firmware drivers/gpu/drm/radeon/ni.c
+clean_blob drivers/gpu/drm/radeon/ni.c
+reject_firmware drivers/gpu/drm/radeon/si.c
+clean_blob drivers/gpu/drm/radeon/si.c
+clean_kconfig drivers/gpu/drm/Kconfig 'DRM_RADEON'
+clean_mk CONFIG_DRM_RADEON drivers/gpu/drm/Makefile
+
+#######
+# dma #
+#######
+
+announce IMX_SDMA - "i.MX SDMA support"
+reject_firmware drivers/dma/imx-sdma.c
+clean_blob arch/arm/mach-imx/mm-imx25.c
+clean_blob arch/arm/mach-imx/mm-imx3.c
+clean_blob arch/arm/mach-imx/mm-imx5.c
+clean_blob arch/arm/boot/dts/imx51.dtsi
+clean_blob arch/arm/boot/dts/imx53.dtsi
+clean_blob arch/arm/boot/dts/imx6q.dtsi
+clean_blob Documentation/devicetree/bindings/dma/fsl-imx-sdma.txt
+clean_kconfig drivers/dma/Kconfig 'IMX_SDMA'
+clean_mk CONFIG_IMX_SDMA drivers/dma/Makefile
+
+#########
+# Media #
+#########
+
+# media/tuner
+
+announce MEDIA_TUNER_XC2028 - "XCeive xc2028/xc3028 tuners"
+undefault_firmware 'XC\(2028\|3028L\)' \
+ drivers/media/tuners/tuner-xc2028.h \
+ drivers/media/pci/saa7134/saa7134-cards.c \
+ drivers/media/pci/ivtv/ivtv-driver.c \
+ drivers/media/pci/cx18/cx18-driver.c \
+ drivers/media/pci/cx18/cx18-dvb.c \
+ drivers/media/pci/cx23885/cx23885-dvb.c \
+ drivers/media/pci/cx23885/cx23885-video.c \
+ drivers/media/pci/cx88/cx88-dvb.c \
+ drivers/media/pci/cx88/cx88-cards.c \
+ drivers/media/usb/em28xx/em28xx-cards.c \
+ drivers/media/usb/dvb-usb/dib0700_devices.c \
+ drivers/media/usb/dvb-usb/cxusb.c
+reject_firmware drivers/media/tuners/tuner-xc2028.c
+clean_blob drivers/media/tuners/tuner-xc2028.c
+clean_kconfig drivers/media/tuners/Kconfig 'MEDIA_TUNER_XC2028'
+clean_mk CONFIG_MEDIA_TUNER_XC2028 drivers/media/tuners/Makefile
+
+announce VIDEO_TM6000_DVB - "DVB Support for tm6000 based TV cards"
+clean_blob drivers/media/usb/tm6000/tm6000-cards.c
+clean_kconfig drivers/media/usb/tm6000/Kconfig 'VIDEO_TM6000_DVB'
+clean_mk CONFIG_VIDEO_TM6000_DVB drivers/media/usb/tm6000/Makefile
+
+announce MEDIA_TUNER_XC4000 - "Xceive XC4000 silicon tuner"
+undefault_firmware 'XC4000' drivers/media/tuners/xc4000.c
+maybe_reject_firmware drivers/media/tuners/xc4000.c
+clean_kconfig drivers/media/tuners/Kconfig 'MEDIA_TUNER_XC4000'
+clean_mk CONFIG_MEDIA_TUNER_XC4000 drivers/media/tuners/Makefile
+
+announce MEDIA_TUNER_XC5000 - "Xceive XC5000 silicon tuner"
+undefault_firmware 'XC5000' \
+ drivers/media/usb/cx231xx/cx231xx-cards.c
+reject_firmware drivers/media/tuners/xc5000.c
+clean_blob drivers/media/tuners/xc5000.c
+clean_kconfig drivers/media/tuners/Kconfig 'MEDIA_TUNER_XC5000'
+clean_mk CONFIG_MEDIA_TUNER_XC5000 drivers/media/tuners/Makefile
+
+announce DVB_USB - "Support for various USB DVB devices"
+reject_firmware drivers/media/usb/dvb-usb/dvb-usb-firmware.c
+clean_kconfig drivers/media/usb/dvb-usb/Kconfig 'DVB_USB'
+clean_mk CONFIG_DVB_USB drivers/media/usb/dvb-usb/Makefile
+
+announce DVB_USB_V2 - "Support for various USB DVB devices v2"
+reject_firmware drivers/media/usb/dvb-usb-v2/dvb_usb_core.c
+clean_kconfig drivers/media/usb/dvb-usb-v2/Kconfig 'DVB_USB_V2'
+clean_mk CONFIG_DVB_USB_V2 drivers/media/usb/dvb-usb-v2/Makefile
+
+announce DVB_B2C2_FLEXCOP - "Technisat/B2C2 FlexCopII(b) and FlexCopIII adapters"
+reject_firmware drivers/media/common/b2c2/flexcop-fe-tuner.c
+
+announce DVB_BT8XX - "BT8xx based PCI cards"
+reject_firmware drivers/media/pci/bt8xx/dvb-bt8xx.c
+
+announce DVB_USB_A800 - "AVerMedia AverTV DVB-T USB 2.0 (A800)"
+clean_blob drivers/media/usb/dvb-usb/a800.c
+clean_kconfig drivers/media/usb/dvb-usb/Kconfig 'DVB_USB_A800'
+clean_mk CONFIG_DVB_USB_A800 drivers/media/usb/dvb-usb/Makefile
+
+announce DVB_USB_AF9005 - "Afatech AF9005 DVB-T USB1.1 support"
+clean_file drivers/media/usb/dvb-usb/af9005-script.h
+clean_sed '
+s,^ deb_info("load init script\\n");$, {\n err("Missing Free init script\\n");\n return scriptlen = ret = -EINVAL;\n ,;
+' drivers/media/usb/dvb-usb/af9005-fe.c 'report missing Free init script'
+clean_blob drivers/media/usb/dvb-usb/af9005-fe.c
+clean_blob drivers/media/usb/dvb-usb/af9005.c
+clean_kconfig drivers/media/usb/dvb-usb/Kconfig 'DVB_USB_AF9005'
+clean_mk CONFIG_DVB_USB_AF9005 drivers/media/usb/dvb-usb/Makefile
+
+announce DVB_USB_AF9015 - "Afatech AF9015 DVB-T USB2.0 support"
+clean_blob drivers/media/usb/dvb-usb-v2/af9015.h
+clean_blob drivers/media/usb/dvb-usb-v2/af9015.c
+clean_kconfig drivers/media/usb/dvb-usb-v2/Kconfig 'DVB_USB_AF9015'
+clean_mk CONFIG_DVB_USB_AF9015 drivers/media/usb/dvb-usb-v2/Makefile
+
+announce DVB_USB_AF9035 - "Afatech AF9035 DVB-T USB2.0 support"
+clean_blob drivers/media/usb/dvb-usb-v2/af9035.h
+clean_blob drivers/media/usb/dvb-usb-v2/af9035.c
+clean_kconfig drivers/media/usb/dvb-usb-v2/Kconfig 'DVB_USB_AF9035'
+clean_mk CONFIG_DVB_USB_AF9035 drivers/media/usb/dvb-usb-v2/Makefile
+
+announce DVB_USB_AZ6007 - "Azurewave 6007 and clones DVB-T/C USB2.0 support"
+clean_blob drivers/media/usb/dvb-usb-v2/az6007.c
+clean_kconfig drivers/media/usb/dvb-usb-v2/Kconfig 'DVB_USB_AZ6007'
+clean_mk CONFIG_DVB_USB_AZ6007 drivers/media/usb/dvb-usb-v2/Makefile
+
+announce DVB_USB_AZ6027 - "Azurewave DVB-S/S2 USB2.0 AZ6027 support"
+clean_blob drivers/media/usb/dvb-usb/az6027.c
+clean_kconfig drivers/media/usb/dvb-usb/Kconfig 'DVB_USB_AZ6027'
+clean_mk CONFIG_DVB_USB_AZ6027 drivers/media/usb/dvb-usb/Makefile
+
+announce DVB_USB_CXUSB - "Conexant USB2.0 hybrid reference design support"
+clean_blob drivers/media/usb/dvb-usb/cxusb.c
+clean_kconfig drivers/media/usb/dvb-usb/Kconfig 'DVB_USB_CXUSB'
+clean_mk CONFIG_DVB_USB_CXUSB drivers/media/usb/dvb-usb/Makefile
+
+announce DVB_USB_DIB0700 - "DiBcom DiB0700 USB DVB devices"
+reject_firmware drivers/media/usb/dvb-usb/dib0700_devices.c
+clean_blob drivers/media/usb/dvb-usb/dib0700_devices.c
+clean_blob drivers/media/usb/dvb-usb/dib0700_core.c
+clean_kconfig drivers/media/usb/dvb-usb/Kconfig 'DVB_USB_DIB0700'
+clean_mk CONFIG_DVB_USB_DIB0700 drivers/media/usb/dvb-usb/Makefile
+
+announce DVB_USB_DIBUSB_MB - "DiBcom USB DVB-T devices (based on the DiB3000M-B)"
+clean_blob drivers/media/usb/dvb-usb/dibusb-mb.c
+clean_kconfig drivers/media/usb/dvb-usb/Kconfig 'DVB_USB_DIBUSB_MB'
+clean_mk CONFIG_DVB_USB_DIBUSB_MB drivers/media/usb/dvb-usb/Makefile
+
+announce DVB_USB_DIBUSB_MC - "DiBcom USB DVB-T devices (based on the DiB3000M-C/P)"
+clean_blob drivers/media/usb/dvb-usb/dibusb-mc.c
+clean_kconfig drivers/media/usb/dvb-usb/Kconfig 'DVB_USB_DIBUSB_MC'
+clean_mk CONFIG_DVB_USB_DIBUSB_MC drivers/media/usb/dvb-usb/Makefile
+
+announce DVB_USB_DIGITV - "Nebula Electronics uDigiTV DVB-T USB2.0 support"
+clean_blob drivers/media/usb/dvb-usb/digitv.c
+clean_kconfig drivers/media/usb/dvb-usb/Kconfig 'DVB_USB_DIGITV'
+clean_mk CONFIG_DVB_USB_DIGITV drivers/media/usb/dvb-usb/Makefile
+
+announce DVB_USB_DTT200U - "WideView WT-200U and WT-220U (pen) DVB-T USB2.0 support (Yakumo/Hama/Typhoon/Yuan)"
+clean_blob drivers/media/usb/dvb-usb/dtt200u.c
+clean_kconfig drivers/media/usb/dvb-usb/Kconfig 'DVB_USB_DTT200U'
+clean_mk CONFIG_DVB_USB_DTT200U drivers/media/usb/dvb-usb/Makefile
+
+announce DVB_USB_DW2102 - "DvbWorld DVB-S/S2 USB2.0 support"
+reject_firmware drivers/media/usb/dvb-usb/dw2102.c
+clean_blob drivers/media/usb/dvb-usb/dw2102.c
+clean_kconfig drivers/media/usb/dvb-usb/Kconfig 'DVB_USB_DW2102'
+clean_mk CONFIG_DVB_USB_DW2102 drivers/media/usb/dvb-usb/Makefile
+
+announce DVB_USB_EC168 - "E3C EC168 DVB-T USB2.0 support"
+clean_blob drivers/media/usb/dvb-usb-v2/ec168.h
+clean_blob drivers/media/usb/dvb-usb-v2/ec168.c
+clean_kconfig drivers/media/usb/dvb-usb-v2/Kconfig 'DVB_USB_EC168'
+clean_mk CONFIG_DVB_USB_EC168 drivers/media/usb/dvb-usb-v2/Makefile
+
+announce DVB_USB_GP8PSK - "GENPIX 8PSK->USB module support"
+reject_firmware drivers/media/usb/dvb-usb/gp8psk.c
+clean_blob drivers/media/usb/dvb-usb/gp8psk.c
+clean_kconfig drivers/media/usb/dvb-usb/Kconfig 'DVB_USB_GP8PSK'
+clean_mk CONFIG_DVB_USB_GP8PSK drivers/media/usb/dvb-usb/Makefile
+
+announce DVB_USB_IT913X - "it913x driver"
+clean_blob drivers/media/usb/dvb-usb-v2/it913x.c
+clean_file Documentation/dvb/it9137.txt
+clean_kconfig drivers/media/usb/dvb-usb-v2/Kconfig 'DVB_USB_IT913X'
+clean_mk CONFIG_DVB_USB_IT913X drivers/media/usb/dvb-usb-v2/Makefile
+
+announce DVB_USB_LME2510 - "LME DM04/QQBOX DVB-S USB2.0 support"
+reject_firmware drivers/media/usb/dvb-usb-v2/lmedm04.c
+clean_blob drivers/media/usb/dvb-usb-v2/lmedm04.c
+clean_file Documentation/dvb/lmedm04.txt
+clean_kconfig drivers/media/usb/dvb-usb-v2/Kconfig 'DVB_USB_LME2510'
+clean_mk CONFIG_DVB_USB_LME2510 drivers/media/usb/dvb-usb-v2/Makefile
+
+announce DVB_USB_M920X - "Uli m920x DVB-T USB2.0 support"
+reject_firmware drivers/media/usb/dvb-usb/m920x.c
+clean_blob drivers/media/usb/dvb-usb/m920x.c
+clean_kconfig drivers/media/usb/dvb-usb/Kconfig 'DVB_USB_M920X'
+clean_mk CONFIG_DVB_USB_M920X drivers/media/usb/dvb-usb/Makefile
+
+announce DVB_USB_NOVA_T_USB2 - "Hauppauge WinTV-NOVA-T usb2 DVB-T USB2.0 support"
+clean_blob drivers/media/usb/dvb-usb/nova-t-usb2.c
+clean_kconfig drivers/media/usb/dvb-usb/Kconfig 'DVB_USB_NOVA_T_USB2'
+clean_mk CONFIG_DVB_USB_NOVA_T_USB2 drivers/media/usb/dvb-usb/Makefile
+
+announce DVB_USB_OPERA1 - "Opera1 DVB-S USB2.0 receiver"
+reject_firmware drivers/media/usb/dvb-usb/opera1.c
+clean_blob drivers/media/usb/dvb-usb/opera1.c
+clean_kconfig drivers/media/usb/dvb-usb/Kconfig 'DVB_USB_OPERA1'
+clean_mk CONFIG_DVB_USB_OPERA1 drivers/media/usb/dvb-usb/Makefile
+
+announce DVB_USB_TECHNISAT_USB2 - "Technisat DVB-S/S2 USB2.0 support"
+clean_blob drivers/media/usb/dvb-usb/technisat-usb2.c
+clean_kconfig drivers/media/usb/dvb-usb/Kconfig 'DVB_USB_TECHNISAT_USB2'
+clean_mk CONFIG_DVB_USB_TECHNISAT_USB2 drivers/media/usb/dvb-usb/Makefile
+
+announce DVB_USB_TTUSB2 - "Pinnacle 400e DVB-S USB2.0 support"
+clean_blob drivers/media/usb/dvb-usb/ttusb2.c
+clean_kconfig drivers/media/usb/dvb-usb/Kconfig 'DVB_USB_TTUSB2'
+clean_mk CONFIG_DVB_USB_TTUSB2 drivers/media/usb/dvb-usb/Makefile
+
+announce DVB_USB_UMT_010 - "HanfTek UMT-010 DVB-T USB2.0 support"
+clean_blob drivers/media/usb/dvb-usb/umt-010.c
+clean_kconfig drivers/media/usb/dvb-usb/Kconfig 'DVB_USB_UMT_010'
+clean_mk CONFIG_DVB_USB_UMT_010 drivers/media/usb/dvb-usb/Makefile
+
+announce DVB_USB_VP702X - "TwinhanDTV StarBox and clones DVB-S USB2.0 support"
+clean_blob drivers/media/usb/dvb-usb/vp702x.c
+clean_kconfig drivers/media/usb/dvb-usb/Kconfig 'DVB_USB_VP702X'
+clean_mk CONFIG_DVB_USB_VP702X drivers/media/usb/dvb-usb/Makefile
+
+announce DVB_USB_VP7045 - "TwinhanDTV Alpha/MagicBoxII, DNTV tinyUSB2, Beetle USB2.0 support"
+clean_blob drivers/media/usb/dvb-usb/vp7045.c
+clean_kconfig drivers/media/usb/dvb-usb/Kconfig 'DVB_USB_VP7045'
+clean_mk CONFIG_DVB_USB_VP7045 drivers/media/usb/dvb-usb/Makefile
+
+# dvb/frontends
+
+announce DVB_AF9013 - "Afatech AF9013 demodulator"
+reject_firmware drivers/media/dvb-frontends/af9013.c
+clean_blob drivers/media/dvb-frontends/af9013.c
+clean_blob drivers/media/dvb-frontends/af9013_priv.h
+clean_kconfig drivers/media/dvb-frontends/Kconfig 'DVB_AF9013'
+clean_mk CONFIG_DVB_AF9013 drivers/media/dvb-frontends/Makefile
+
+announce DVB_BCM3510 - "Broadcom BCM3510"
+undefault_firmware 'BCM3510' drivers/media/dvb-frontends/bcm3510.c
+reject_firmware drivers/media/dvb-frontends/bcm3510.c
+reject_firmware drivers/media/dvb-frontends/bcm3510.h
+clean_sed '
+/You.ll need a firmware/,/dvb-fe-bcm/d;
+' drivers/media/dvb-frontends/bcm3510.c \
+ "removed non-Free firmware notes"
+clean_kconfig drivers/media/dvb-frontends/Kconfig 'DVB_BCM3510'
+clean_mk CONFIG_DVB_BCM3510 drivers/media/dvb-frontends/Makefile
+
+announce DVB_DS3000 - "Montage Tehnology DS3000 based"
+undefault_firmware 'DS3000' \
+ drivers/media/dvb-frontends/ds3000.c
+reject_firmware drivers/media/dvb-frontends/ds3000.c
+clean_blob drivers/media/dvb-frontends/ds3000.c
+clean_kconfig drivers/media/dvb-frontends/Kconfig 'DVB_DS3000'
+clean_mk CONFIG_DVB_DS3000 drivers/media/dvb-frontends/Makefile
+
+announce DVB_LGS8GXX - "Legend Silicon LGS8913/LGS8GL5/LGS8GXX DMB-TH demodulator"
+reject_firmware drivers/media/dvb-frontends/lgs8gxx.c
+clean_blob drivers/media/dvb-frontends/lgs8gxx.c
+clean_kconfig drivers/media/dvb-frontends/Kconfig 'DVB_LGS8GXX'
+clean_mk CONFIG_DVB_LGS8GXX drivers/media/dvb-frontends/Makefile
+
+announce DVB_NXT200X - "NxtWave Communications NXT2002/NXT2004 based"
+undefault_firmware 'NXT200[24]' drivers/media/dvb-frontends/nxt200x.c
+reject_firmware drivers/media/dvb-frontends/nxt200x.c
+clean_blob drivers/media/dvb-frontends/nxt200x.c
+clean_kconfig drivers/media/dvb-frontends/Kconfig 'DVB_NXT200X'
+clean_mk CONFIG_DVB_NXT200X drivers/media/dvb-frontends/Makefile
+
+announce DVB_OR51132 - "Oren OR51132 based"
+reject_firmware drivers/media/dvb-frontends/or51132.c
+clean_blob drivers/media/dvb-frontends/or51132.c
+clean_kconfig drivers/media/dvb-frontends/Kconfig 'DVB_OR51132'
+clean_mk CONFIG_DVB_OR51132 drivers/media/dvb-frontends/Makefile
+
+announce DVB_OR51211 - "Oren OR51211 based"
+undefault_firmware 'OR51211' drivers/media/dvb-frontends/or51211.c
+reject_firmware drivers/media/dvb-frontends/or51211.c
+reject_firmware drivers/media/dvb-frontends/or51211.h
+clean_blob drivers/media/dvb-frontends/or51211.c
+clean_kconfig drivers/media/dvb-frontends/Kconfig 'DVB_OR51211'
+clean_mk CONFIG_DVB_OR51211 drivers/media/dvb-frontends/Makefile
+
+announce DVB_SP8870 - "Spase sp8870"
+undefault_firmware 'SP8870' drivers/media/dvb-frontends/sp8870.c
+reject_firmware drivers/media/dvb-frontends/sp8870.c
+reject_firmware drivers/media/dvb-frontends/sp8870.h
+clean_blob drivers/media/dvb-frontends/sp8870.c
+clean_kconfig drivers/media/dvb-frontends 'DVB_SP8870'
+clean_mk CONFIG_DVB_SP8870 drivers/media/dvb-frontends/Makefile
+
+announce DVB_CX24116 - "Conexant CX24116 based"
+undefault_firmware CX24116 drivers/media/dvb-frontends/cx24116.c
+reject_firmware drivers/media/dvb-frontends/cx24116.c
+clean_kconfig drivers/media/dvb-frontends/Kconfig 'DVB_CX24116'
+clean_mk CONFIG_DVB_CX24116 drivers/media/dvb-frontends/Makefile
+
+announce DVB_SP887X - "Spase sp887x based"
+undefault_firmware 'SP887X' drivers/media/dvb-frontends/sp887x.c
+reject_firmware drivers/media/dvb-frontends/sp887x.c
+reject_firmware drivers/media/dvb-frontends/sp887x.h
+clean_blob drivers/media/dvb-frontends/sp887x.c
+clean_kconfig drivers/media/dvb-frontends/Kconfig 'DVB_SP887X'
+clean_mk CONFIG_DVB_SP887X drivers/media/dvb-frontends/Makefile
+
+announce DVB_TDA10048 - "Philips TDA10048HN based"
+undefine_macro 'TDA10048_DEFAULT_FIRMWARE_SIZE' 0 \
+ 'removed non-Free firmware size' drivers/media/dvb-frontends/tda10048.c
+undefault_firmware 'TDA10048' drivers/media/dvb-frontends/tda10048.c
+reject_firmware drivers/media/dvb-frontends/tda10048.c
+clean_kconfig drivers/media/dvb-frontends/Kconfig 'DVB_TDA10048'
+clean_mk CONFIG_DVB_TDA10048 drivers/media/dvb-frontends/Makefile
+
+announce DVB_TDA1004X - "Philips TDA10045H/TDA10046H"
+undefault_firmware 'TDA1004[56]' drivers/media/dvb-frontends/tda1004x.c
+reject_firmware drivers/media/dvb-frontends/tda1004x.c
+reject_firmware drivers/media/dvb-frontends/tda1004x.h
+clean_blob drivers/media/dvb-frontends/tda1004x.c
+clean_kconfig drivers/media/dvb-frontends 'DVB_TDA1004X'
+clean_mk CONFIG_DVB_TDA1004X drivers/media/dvb-frontends/Makefile
+
+announce DVB_TDA10071 - "NXP TDA10071"
+reject_firmware drivers/media/dvb-frontends/tda10071.c
+clean_blob drivers/media/dvb-frontends/tda10071.c
+clean_blob drivers/media/dvb-frontends/tda10071_priv.h
+clean_kconfig drivers/media/dvb-frontends 'DVB_TDA10071'
+clean_mk CONFIG_DVB_TDA10071 drivers/media/dvb-frontends/Makefile
+
+# dvb
+
+announce DVB_AS102 - "Abilis AS102 DVB receiver"
+reject_firmware drivers/staging/media/as102/as102_fw.c
+clean_blob drivers/staging/media/as102/as102_fw.c
+clean_kconfig drivers/staging/media/as102/Kconfig 'DVB_AS102'
+clean_mk CONFIG_DVB_AS102 drivers/staging/media/as102/Makefile
+
+announce DVB_AV7110 - "AV7110 cards"
+reject_firmware drivers/media/pci/ttpci/av7110.c
+clean_blob drivers/media/pci/ttpci/av7110.c
+clean_kconfig drivers/media/pci/ttpci/Kconfig 'DVB_AV7110'
+clean_mk CONFIG_DVB_AV7110 drivers/media/pci/ttpci/Makefile
+
+announce DVB_BUDGET - "Budget cards"
+reject_firmware drivers/media/pci/ttpci/budget.c
+reject_firmware drivers/media/dvb-frontends/tdhd1.h
+
+announce DVB_BUDGET_AV - "Budget cards with analog video inputs"
+reject_firmware drivers/media/pci/ttpci/budget-av.c
+
+announce DVB_BUDGET_CI - "Budget cards with onboard CI connector"
+reject_firmware drivers/media/pci/ttpci/budget-ci.c
+
+announce DVB_DRXD - "Micronas DRXD driver"
+reject_firmware drivers/media/dvb-frontends/drxd_hard.c
+clean_blob drivers/media/dvb-frontends/drxd_hard.c
+clean_kconfig drivers/media/dvb-frontends/Kconfig 'DVB_DRXD'
+clean_mk CONFIG_DVB_DRXD drivers/media/dvb-frontends/Makefile
+
+announce DVB_DRXK - "Micronas DRXK based"
+reject_firmware drivers/media/dvb-frontends/drxk_hard.c
+clean_kconfig drivers/media/dvb-frontends/Kconfig 'DVB_DRXK'
+clean_mk CONFIG_DVB_DRXK drivers/media/dvb-frontends/Makefile
+
+announce DVB_NGENE - "Micronas nGene support"
+reject_firmware drivers/media/pci/ngene/ngene-core.c
+clean_blob drivers/media/pci/ngene/ngene-core.c
+clean_kconfig drivers/media/pci/ngene/Kconfig 'DVB_NGENE'
+clean_mk CONFIG_DVB_NGENE drivers/media/pci/ngene/Makefile
+
+announce DVB_PLUTO2 - "Pluto2 cards"
+reject_firmware drivers/media/pci/pluto2/pluto2.c
+
+announce SMS_SIANO_MDTV - "Siano SMS1xxx based MDTV receiver"
+reject_firmware drivers/media/common/siano/smscoreapi.c
+clean_blob drivers/media/common/siano/smscoreapi.c
+clean_blob drivers/media/common/siano/sms-cards.c
+clean_kconfig drivers/media/common/siano/Kconfig 'SMS_SIANO_MDTV'
+clean_mk CONFIG_SMS_SIANO_MDTV drivers/media/common/siano/Makefile
+
+announce SMS_USB_DRV - "Siano's USB interface support"
+reject_firmware drivers/media/usb/siano/smsusb.c
+clean_blob drivers/media/usb/siano/smsusb.c
+clean_kconfig drivers/media/usb/siano/Kconfig 'SMS_USB_DRV'
+clean_mk CONFIG_SMS_USB_DRV drivers/media/usb/siano/Makefile
+
+announce DVB_TTUSB_BUDGET - "Technotrend/Hauppauge Nova-USB devices"
+drop_fw_file firmware/ttusb-budget/dspbootcode.bin.ihex firmware/ttusb-budget/dspbootcode.bin
+reject_firmware drivers/media/usb/ttusb-budget/dvb-ttusb-budget.c
+clean_blob drivers/media/usb/ttusb-budget/dvb-ttusb-budget.c
+clean_kconfig drivers/media/usb/ttusb-budget/Kconfig 'DVB_TTUSB_BUDGET'
+clean_mk CONFIG_DVB_TTUSB_BUDGET drivers/media/usb/ttusb-budget/Makefile
+
+announce DVB_TTUSB_DEC - "Technotrend/Hauppauge USB DEC devices"
+reject_firmware drivers/media/usb/ttusb-dec/ttusb_dec.c
+clean_blob drivers/media/usb/ttusb-dec/ttusb_dec.c
+clean_blob Documentation/dvb/ttusb-dec.txt
+clean_kconfig drivers/media/usb/ttusb-dec/Kconfig 'DVB_TTUSB_DEC'
+clean_mk CONFIG_DVB_TTUSB_DEC drivers/media/usb/ttusb-dec/Makefile
+
+# video
+
+announce VIDEO_BT848 - "BT848 Video For Linux"
+reject_firmware drivers/media/pci/bt8xx/bttv-cards.c
+clean_blob drivers/media/pci/bt8xx/bttv-cards.c
+clean_blob Documentation/video4linux/bttv/README
+clean_kconfig drivers/media/pci/bt8xx/Kconfig 'VIDEO_BT848'
+clean_mk CONFIG_VIDEO_BT848 drivers/media/pci/bt8xx/Makefile
+
+announce VIDEO_CODA - "Chips&Media Coda multi-standard codec IP"
+reject_firmware drivers/media/platform/coda.c
+clean_blob drivers/media/platform/coda.c
+clean_kconfig drivers/media/platform/Kconfig 'VIDEO_CODA'
+clean_mk CONFIG_VIDEO_CODA drivers/media/platform/Makefile
+
+announce VIDEO_CPIA2 - "CPiA2 Video For Linux"
+clean_fw firmware/cpia2/stv0672_vp4.bin.ihex firmware/cpia2/stv0672_vp4.bin
+reject_firmware drivers/media/usb/cpia2/cpia2_core.c
+clean_blob drivers/media/usb/cpia2/cpia2_core.c
+clean_kconfig drivers/media/usb/cpia2/Kconfig 'VIDEO_CPIA2'
+clean_mk CONFIG_VIDEO_CPIA2 drivers/media/usb/cpia2/Makefile
+
+announce VIDEO_CX18 - "Conexant cx23418 MPEG encoder support"
+reject_firmware drivers/media/pci/cx18/cx18-av-firmware.c
+reject_firmware drivers/media/pci/cx18/cx18-dvb.c
+reject_firmware drivers/media/pci/cx18/cx18-firmware.c
+clean_blob drivers/media/pci/cx18/cx18-av-firmware.c
+clean_blob drivers/media/pci/cx18/cx18-dvb.c
+clean_blob drivers/media/pci/cx18/cx18-firmware.c
+clean_blob drivers/media/pci/cx18/cx18-driver.c
+clean_kconfig drivers/media/pci/cx18/Kconfig 'VIDEO_CX18'
+clean_mk CONFIG_VIDEO_CX18 drivers/media/pci/cx18/Makefile
+
+announce VIDEO_CX231XX - "Conexant cx231xx USB video capture support"
+reject_firmware drivers/media/usb/cx231xx/cx231xx-417.c
+clean_blob drivers/media/usb/cx231xx/cx231xx-417.c
+clean_kconfig drivers/media/usb/cx231xx/Kconfig 'VIDEO_CX231XX'
+clean_mk CONFIG_VIDEO_CX231XX drivers/media/usb/cx231xx/Makefile
+
+announce VIDEO_CX23885 - "Conexant cx23885 (2388x successor) support"
+reject_firmware drivers/media/pci/cx23885/cx23885-417.c
+clean_blob drivers/media/pci/cx23885/cx23885-417.c
+reject_firmware drivers/media/pci/cx23885/cx23885-cards.c
+clean_blob drivers/media/pci/cx23885/cx23885-cards.c
+clean_kconfig drivers/media/pci/cx23885/Kconfig 'VIDEO_CX23885'
+clean_mk CONFIG_VIDEO_CX23885 drivers/media/pci/cx23885/Makefile
+
+announce VIDEO_CX25840 - "Conexant CX2584x audio/video decoders"
+reject_firmware drivers/media/i2c/cx25840/cx25840-firmware.c
+clean_blob drivers/media/i2c/cx25840/cx25840-firmware.c
+clean_kconfig drivers/media/i2c/cx25840/Kconfig 'VIDEO_CX25840'
+clean_mk CONFIG_VIDEO_CX25840 drivers/media/i2c/cx25840/Makefile
+
+announce VIDEO_CX88_BLACKBIRD - "Blackbird MPEG encoder support (cx2388x + cx23416)"
+reject_firmware drivers/media/pci/cx88/cx88-blackbird.c
+clean_kconfig drivers/media/pci/cx88/Kconfig 'VIDEO_CX88_BLACKBIRD'
+clean_mk CONFIG_VIDEO_CX88_BLACKBIRD drivers/media/pci/cx88/Makefile
+
+announce VIDEO_EM28XX_DVB - "DVB/ATSC Support for em28xx based TV cards"
+clean_blob drivers/media/usb/em28xx/em28xx-dvb.c
+clean_kconfig drivers/media/usb/em28xx/Kconfig 'VIDEO_EM28XX_DVB'
+clean_mk CONFIG_VIDEO_EM28XX_DVB drivers/media/usb/em28xx/Makefile
+
+announce VIDEO_IVTV - "Conexant cx23416/cx23415 MPEG encoder/decoder support"
+reject_firmware drivers/media/pci/ivtv/ivtv-firmware.c
+clean_blob drivers/media/pci/ivtv/ivtv-firmware.c
+clean_kconfig drivers/media/pci/ivtv/Kconfig 'VIDEO_IVTV'
+clean_mk CONFIG_VIDEO_IVTV drivers/media/pci/ivtv/Makefile
+
+announce VIDEO_PVRUSB2 - "Hauppauge WinTV-PVR USB2 support"
+reject_firmware drivers/media/usb/pvrusb2/pvrusb2-hdw.c
+clean_blob drivers/media/usb/pvrusb2/pvrusb2-devattr.c
+clean_kconfig drivers/media/usb/pvrusb2/Kconfig 'VIDEO_PVRUSB2'
+clean_mk CONFIG_VIDEO_PVRUSB2 drivers/media/usb/pvrusb2/Makefile
+
+announce "VIDEO_CX23885, VIDEO_CX88_BLACKBIRD, VIDEO_IVTV, VIDEO_PVRUSB2" - "See above"
+clean_blob include/media/cx2341x.h
+
+announce VIDEO_GO7007 - "Go 7007 support"
+reject_firmware drivers/staging/media/go7007/go7007-driver.c
+clean_blob drivers/staging/media/go7007/go7007-driver.c
+reject_firmware drivers/staging/media/go7007/go7007-fw.c
+clean_blob drivers/staging/media/go7007/go7007-usb.c
+clean_blob drivers/staging/media/go7007/saa7134-go7007.c
+clean_kconfig drivers/staging/media/go7007/Kconfig 'VIDEO_GO7007'
+clean_mk CONFIG_VIDEO_GO7007 drivers/staging/media/go7007/Makefile
+
+announce VIDEO_GO7007_USB_S2250_BOARD - "Sensoray 2250/2251 support"
+reject_firmware drivers/staging/media/go7007/s2250-loader.c
+clean_blob drivers/staging/media/go7007/s2250-loader.c
+clean_kconfig drivers/staging/media/go7007/Kconfig 'VIDEO_GO7007_USB_S2250_BOARD'
+clean_mk CONFIG_VIDEO_GO7007_USB_S2250_BOARD drivers/staging/media/go7007/Makefile
+
+announce VIDEO_SAA7134_DVB - "DVB/ATSC Support for saa7134 based TV cards"
+reject_firmware drivers/media/pci/saa7134/saa7134-dvb.c
+clean_kconfig drivers/media/pci/saa7134/Kconfig 'VIDEO_SAA7134_DVB'
+clean_mk CONFIG_VIDEO_SAA7134_DVB drivers/media/pci/saa7134/Makefile
+
+announce VIDEO_SAA7164 - "NXP SAA7164 support"
+reject_firmware drivers/media/pci/saa7164/saa7164-fw.c
+clean_blob drivers/media/pci/saa7164/saa7164-fw.c
+clean_kconfig drivers/media/pci/saa7164/Kconfig 'VIDEO_SAA7164'
+clean_mk CONFIG_VIDEO_SAA7164 drivers/media/pci/saa7164/Makefile
+
+announce VIDEO_TLG2300 - "Telegent TLG2300 USB video capture support"
+reject_firmware drivers/media/usb/tlg2300/pd-main.c
+clean_blob drivers/media/usb/tlg2300/pd-main.c
+clean_kconfig drivers/media/usb/tlg2300/Kconfig 'VIDEO_TLG2300'
+clean_mk CONFIG_VIDEO_TLG2300 drivers/media/usb/tlg2300/Makefile
+
+announce VIDEO_S5K4ECGX - "Samsung S5K4ECGX sensor support"
+reject_firmware drivers/media/i2c/s5k4ecgx.c
+clean_blob drivers/media/i2c/s5k4ecgx.c
+clean_kconfig drivers/media/i2c/s5k4ecgx.c 'VIDEO_S5K4ECGX'
+clean_mk CONFIG_VIDEO_S5K4ECGX drivers/media/i2c/Makefile
+
+announce VIDEO_SAMSUNG_S5P_MFC - "Samsung S5P MFC 5.1 Video Codec"
+reject_firmware drivers/media/platform/s5p-mfc/s5p_mfc_ctrl.c
+clean_blob drivers/media/platform/s5p-mfc/s5p_mfc.c
+clean_kconfig drivers/media/platform/Kconfig 'VIDEO_SAMSUNG_S5P_MFC'
+clean_mk CONFIG_VIDEO_SAMSUNG_S5P_MFC drivers/media/platform/s5p-mfc/Makefile
+
+announce USB_S2255 - "USB Sensoray 2255 video capture device"
+reject_firmware drivers/media/usb/s2255/s2255drv.c
+clean_blob drivers/media/usb/s2255/s2255drv.c
+clean_kconfig drivers/media/usb/Kconfig 'USB_S2255'
+clean_mk CONFIG_USB_S2255 drivers/media/usb/s2255/Makefile
+
+announce USB_GSPCA_VICAM - "USB 3com HomeConnect, AKA vicam"
+drop_fw_file firmware/vicam/firmware.H16 firmware/vicam/firmware.fw
+reject_firmware drivers/media/usb/gspca/vicam.c
+clean_blob drivers/media/usb/gspca/vicam.c
+clean_kconfig drivers/media/usb/gspca/Kconfig 'USB_GSPCA_VICAM'
+clean_mk CONFIG_USB_GSPCA_VICAM drivers/media/usb/gspca/Makefile
+
+# radio
+
+announce RADIO_WL1273 - "Texas Instruments WL1273 I2C FM Radio"
+reject_firmware drivers/media/radio/radio-wl1273.c
+clean_blob drivers/media/radio/radio-wl1273.c
+clean_kconfig drivers/media/radio/Kconfig 'RADIO_WL1273'
+clean_mk CONFIG_RADIO_WL1273 drivers/media/radio/Makefile
+
+announce RADIO_WL128X - "Texas Instruments WL128x FM Radio"
+clean_blob drivers/media/radio/wl128x/fmdrv_common.h
+reject_firmware drivers/media/radio/wl128x/fmdrv_common.c
+clean_blob drivers/media/radio/wl128x/fmdrv_common.c
+clean_kconfig drivers/media/radio/Kconfig 'RADIO_WL128X'
+clean_mk CONFIG_RADIO_WL128X drivers/media/radio/Makefile
+
+#######
+# net #
+#######
+
+announce ACENIC - "Alteon AceNIC/3Com 3C985/NetGear GA620 Gigabit"
+drop_fw_file firmware/acenic/tg1.bin.ihex firmware/acenic/tg1.bin
+drop_fw_file firmware/acenic/tg2.bin.ihex firmware/acenic/tg2.bin
+reject_firmware drivers/net/ethernet/alteon/acenic.c
+clean_blob drivers/net/ethernet/alteon/acenic.c
+clean_kconfig drivers/net/ethernet/alteon/Kconfig 'ACENIC'
+clean_mk CONFIG_ACENIC drivers/net/ethernet/alteon/Makefile
+
+announce ADAPTEC_STARFIRE - "Adaptec Starfire/DuraLAN support"
+clean_fw firmware/adaptec/starfire_rx.bin.ihex firmware/adaptec/starfire_rx.bin
+clean_fw firmware/adaptec/starfire_tx.bin.ihex firmware/adaptec/starfire_tx.bin
+reject_firmware drivers/net/ethernet/adaptec/starfire.c
+clean_blob drivers/net/ethernet/adaptec/starfire.c
+clean_kconfig drivers/net/ethernet/adaptec/Kconfig 'ADAPTEC_STARFIRE'
+clean_mk CONFIG_ADAPTEC_STARFIRE drivers/net/ethernet/adaptec/Makefile
+
+announce BNA - "Brocade 1010/1020 10Gb Ethernet Driver support"
+clean_blob drivers/net/ethernet/brocade/bna/bnad.c
+clean_blob drivers/net/ethernet/brocade/bna/cna.h
+reject_firmware drivers/net/ethernet/brocade/bna/bnad_ethtool.c
+reject_firmware drivers/net/ethernet/brocade/bna/cna_fwimg.c
+clean_kconfig drivers/net/ethernet/brocade/bna/Kconfig 'BNA'
+clean_mk CONFIG_BNA drivers/net/ethernet/brocade/bna/Makefile
+
+announce BNX2 - "Broadcom NetXtremeII"
+drop_fw_file firmware/bnx2/bnx2-mips-09-6.2.1a.fw.ihex firmware/bnx2/bnx2-mips-09-6.2.1a.fw
+drop_fw_file firmware/bnx2/bnx2-rv2p-09-6.0.17.fw.ihex firmware/bnx2/bnx2-rv2p-09-6.0.17.fw
+drop_fw_file firmware/bnx2/bnx2-rv2p-09ax-6.0.17.fw.ihex firmware/bnx2/bnx2-rv2p-09ax-6.0.17.fw
+drop_fw_file firmware/bnx2/bnx2-mips-06-6.2.1.fw.ihex firmware/bnx2/bnx2-mips-06-6.2.1.fw
+drop_fw_file firmware/bnx2/bnx2-rv2p-06-6.0.15.fw.ihex firmware/bnx2/bnx2-rv2p-06-6.0.15.fw
+reject_firmware drivers/net/ethernet/broadcom/bnx2.c
+clean_blob drivers/net/ethernet/broadcom/bnx2.c
+clean_kconfig drivers/net/ethernet/broadcom/Kconfig 'BNX2'
+clean_mk CONFIG_BNX2 drivers/net/ethernet/broadcom/Makefile
+
+announce BNX2X - "Broadcom NetXtremeII 10Gb support"
+drop_fw_file firmware/bnx2x/bnx2x-e1-6.2.9.0.fw.ihex firmware/bnx2x/bnx2x-e1-6.2.9.0.fw
+drop_fw_file firmware/bnx2x/bnx2x-e1h-6.2.9.0.fw.ihex firmware/bnx2x/bnx2x-e1h-6.2.9.0.fw
+drop_fw_file firmware/bnx2x/bnx2x-e2-6.2.9.0.fw.ihex firmware/bnx2x/bnx2x-e2-6.2.9.0.fw
+reject_firmware drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c
+clean_sed '
+/^#include "bnx2x_init\.h"/,/^$/{
+ /^$/i\
+#define bnx2x_init_block(bp, start, end) \\\
+ return (printk(KERN_ERR "%s: Missing Free firmware\\n", bp->dev->name),\\\
+ -EINVAL)
+}' drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c 'report missing Free firmware'
+clean_blob drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c
+clean_sed '
+/^bool bnx2x_test_firmware_version/,/^}$/{
+ /^ u32 my_fw = /i\
+ /*(DEBLOBBED)*/
+ /^ u32 my_fw = /,/<< 24);/d;
+ /^ u32 loaded_fw = /,/^$/{
+ /^$/i\
+\
+ u32 my_fw = ~loaded_fw;
+ }
+}' drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c 'fail already-loaded test'
+clean_blob drivers/net/ethernet/broadcom/bnx2x/bnx2x_hsi.h
+clean_sed '
+/static void bnx2x_init_wr_wb/{
+ i\
+extern void bnx2x_init_wr_wb(struct bnx2x *, u32, const u32 *, u32);
+}' drivers/net/ethernet/broadcom/bnx2x/bnx2x_init_ops.h 'declare removed function'
+clean_blob drivers/net/ethernet/broadcom/bnx2x/bnx2x_init_ops.h
+clean_kconfig drivers/net/ethernet/broadcom/Kconfig 'BNX2X'
+clean_mk CONFIG_BNX2X drivers/net/ethernet/broadcom/bnx2x/Makefile
+
+announce CASSINI - "Sun Cassini"
+drop_fw_file firmware/sun/cassini.bin.ihex firmware/sun/cassini.bin
+reject_firmware drivers/net/ethernet/sun/cassini.c
+clean_blob drivers/net/ethernet/sun/cassini.c
+clean_kconfig drivers/net/ethernet/sun/Kconfig 'CASSINI'
+clean_mk CONFIG_CASSINI drivers/net/ethernet/sun/Makefile
+
+announce CHELSIO_T3 - "Chelsio AEL 2005 support"
+drop_fw_file firmware/cxgb3/t3b_psram-1.1.0.bin.ihex firmware/cxgb3/t3b_psram-1.1.0.bin
+drop_fw_file firmware/cxgb3/t3c_psram-1.1.0.bin.ihex firmware/cxgb3/t3c_psram-1.1.0.bin
+drop_fw_file firmware/cxgb3/ael2005_opt_edc.bin.ihex firmware/cxgb3/ael2005_opt_edc.bin
+drop_fw_file firmware/cxgb3/ael2005_twx_edc.bin.ihex firmware/cxgb3/ael2005_twx_edc.bin
+drop_fw_file firmware/cxgb3/ael2020_twx_edc.bin.ihex firmware/cxgb3/ael2020_twx_edc.bin
+reject_firmware drivers/net/ethernet/chelsio/cxgb3/cxgb3_main.c
+clean_blob drivers/net/ethernet/chelsio/cxgb3/cxgb3_main.c
+clean_kconfig drivers/net/ethernet/chelsio/Kconfig 'CHELSIO_T3'
+clean_mk CONFIG_CHELSIO_T3 drivers/net/ethernet/chelsio/cxgb3/Makefile
+
+announce CHELSIO_T4 - "Chelsio Communications T4 Ethernet support"
+reject_firmware drivers/net/ethernet/chelsio/cxgb4/cxgb4_main.c
+clean_blob drivers/net/ethernet/chelsio/cxgb4/cxgb4_main.c
+clean_kconfig drivers/net/ethernet/chelsio/Kconfig 'CHELSIO_T4'
+clean_mk CONFIG_CHELSIO_T4 drivers/net/ethernet/chelsio/cxgb4/Makefile
+
+announce E100 - "Intel PRO/100+"
+drop_fw_file firmware/e100/d101m_ucode.bin.ihex firmware/e100/d101m_ucode.bin
+drop_fw_file firmware/e100/d101s_ucode.bin.ihex firmware/e100/d101s_ucode.bin
+drop_fw_file firmware/e100/d102e_ucode.bin.ihex firmware/e100/d102e_ucode.bin
+reject_firmware drivers/net/ethernet/intel/e100.c
+clean_sed '
+/^static const struct firmware \*e100_\(reject\|request\)_firmware(/,/^}$/{
+ s:^\(.*\)return ERR_PTR(err);$:\1netif_err(nic, probe, nic->netdev, "Proceeding without firmware\\n");\n\1return NULL;:
+}' drivers/net/ethernet/intel/e100.c 'proceed without firmware'
+clean_blob drivers/net/ethernet/intel/e100.c
+clean_kconfig drivers/net/ethernet/intel/Kconfig 'E100'
+clean_mk CONFIG_E100 drivers/net/ethernet/intel/Makefile
+
+announce FT1000_PCMCIA - "Driver for ft1000 pcmcia device."
+clean_file drivers/staging/ft1000/ft1000-pcmcia/ft1000.img
+reject_firmware drivers/staging/ft1000/TODO
+clean_blob drivers/staging/ft1000/ft1000-pcmcia/boot.h
+clean_sed '
+/^static int ft1000_reset_card/,/^}$/ {
+ /card_bootload/i\
+ return /*(DEBLOBBED)*/ false;
+}
+' drivers/staging/ft1000/ft1000-pcmcia/ft1000_hw.c \
+ 'disabled non-Free firmware-loading machinery'
+reject_firmware drivers/staging/ft1000/ft1000-pcmcia/ft1000_hw.c
+clean_blob drivers/staging/ft1000/ft1000-pcmcia/ft1000_hw.c
+clean_kconfig drivers/staging/ft1000/Kconfig 'FT1000_PCMCIA'
+clean_mk CONFIG_FT1000_PCMCIA drivers/staging/ft1000/Makefile
+
+announce FT1000_USB - "Driver for ft1000 USB devices."
+clean_file drivers/staging/ft1000/ft1000-usb/ft3000.img
+reject_firmware drivers/staging/ft1000/ft1000-usb/ft1000_usb.c
+clean_blob drivers/staging/ft1000/ft1000-usb/ft1000_usb.c
+clean_kconfig drivers/staging/ft1000/Kconfig 'FT1000_USB'
+clean_mk CONFIG_FT1000_USB drivers/staging/ft1000/Makefile
+
+announce MYRI_SBUS - "MyriCOM Gigabit Ethernet"
+drop_fw_file firmware/myricom/lanai.bin.ihex firmware/myricom/lanai.bin
+
+announce MYRI10GE - "Myricom Myri-10G Ethernet support"
+reject_firmware drivers/net/ethernet/myricom/myri10ge/myri10ge.c
+clean_blob drivers/net/ethernet/myricom/myri10ge/myri10ge.c
+clean_kconfig drivers/net/ethernet/myricom/Kconfig 'MYRI10GE'
+clean_mk CONFIG_MYRI10GE drivers/net/ethernet/myricom/myri10ge/Makefile
+
+announce NETXEN_NIC - "NetXen Multi port (1/10) Gigabit Ethernet NIC"
+reject_firmware drivers/net/ethernet/qlogic/netxen/netxen_nic.h
+reject_firmware drivers/net/ethernet/qlogic/netxen/netxen_nic_main.c
+reject_firmware drivers/net/ethernet/qlogic/netxen/netxen_nic_init.c
+clean_blob drivers/net/ethernet/qlogic/netxen/netxen_nic.h
+clean_blob drivers/net/ethernet/qlogic/netxen/netxen_nic_main.c
+clean_kconfig drivers/net/ethernet/qlogic/Kconfig 'NETXEN_NIC'
+clean_mk CONFIG_NETXEN_NIC drivers/net/ethernet/qlogic/Makefile
+
+announce QLCNIC - "QLOGIC QLCNIC 1/10Gb Converged Ethernet NIC Support"
+reject_firmware drivers/net/ethernet/qlogic/qlcnic/qlcnic.h
+reject_firmware drivers/net/ethernet/qlogic/qlcnic/qlcnic_init.c
+reject_firmware drivers/net/ethernet/qlogic/qlcnic/qlcnic_main.c
+clean_blob drivers/net/ethernet/qlogic/qlcnic/qlcnic.h
+clean_blob drivers/net/ethernet/qlogic/qlcnic/qlcnic_main.c
+clean_kconfig drivers/net/ethernet/qlogic/Kconfig 'QLCNIC'
+clean_mk CONFIG_QLCNIC drivers/net/ethernet/qlogic/qlcnic/Makefile
+
+announce R8169 - "Realtek 8169 gigabit ethernet support"
+reject_firmware drivers/net/ethernet/realtek/r8169.c
+clean_blob drivers/net/ethernet/realtek/r8169.c
+clean_kconfig drivers/net/ethernet/realtek/Kconfig R8169
+clean_mk CONFIG_R8169 drivers/net/ethernet/realtek/Makefile
+
+announce SLICOSS - "Alacritech Gigabit IS-NIC cards"
+reject_firmware drivers/staging/slicoss/slicoss.c
+clean_blob drivers/staging/slicoss/slicoss.c
+clean_kconfig drivers/staging/slicoss/Kconfig 'SLICOSS'
+clean_mk CONFIG_SLICOSS drivers/staging/slicoss/Makefile
+
+announce SPIDER_NET - "Spider Gigabit Ethernet driver"
+reject_firmware drivers/net/ethernet/toshiba/spider_net.c
+clean_sed 's,spider_fw\.bin,DEBLOBBED.bin,g' \
+ drivers/net/ethernet/toshiba/spider_net.c 'removed non-Free firmware notes'
+clean_blob drivers/net/ethernet/toshiba/spider_net.c
+clean_blob drivers/net/ethernet/toshiba/spider_net.h
+clean_kconfig drivers/net/ethernet/toshiba/Kconfig 'SPIDER_NET'
+clean_mk CONFIG_SPIDER_NET drivers/net/ethernet/toshiba/Makefile
+
+announce TEHUTI - "Tehuti Networks 10G Ethernet"
+drop_fw_file firmware/tehuti/bdx.bin.ihex firmware/tehuti/bdx.bin
+reject_firmware drivers/net/ethernet/tehuti/tehuti.c
+clean_blob drivers/net/ethernet/tehuti/tehuti.c
+clean_kconfig drivers/net/ethernet/tehuti/Kconfig 'TEHUTI'
+clean_mk CONFIG_TEHUTI drivers/net/ethernet/tehuti/Makefile
+
+announce TIGON3 - "Broadcom Tigon3"
+drop_fw_file firmware/tigon/tg3.bin.ihex firmware/tigon/tg3.bin
+drop_fw_file firmware/tigon/tg3_tso.bin.ihex firmware/tigon/tg3_tso.bin
+drop_fw_file firmware/tigon/tg3_tso5.bin.ihex firmware/tigon/tg3_tso5.bin
+reject_firmware drivers/net/ethernet/broadcom/tg3.c
+clean_blob drivers/net/ethernet/broadcom/tg3.c
+clean_kconfig drivers/net/ethernet/broadcom/Kconfig 'TIGON3'
+clean_mk CONFIG_TIGON3 drivers/net/ethernet/broadcom/Makefile
+
+announce TYPHOON - "3cr990 series Typhoon"
+drop_fw_file firmware/3com/typhoon.bin.ihex firmware/3com/typhoon.bin
+reject_firmware drivers/net/ethernet/3com/typhoon.c
+clean_blob drivers/net/ethernet/3com/typhoon.c
+clean_kconfig drivers/net/ethernet/3com/Kconfig 'TYPHOON'
+clean_mk CONFIG_TYPHOON drivers/net/ethernet/3com/Makefile
+
+announce VXGE - "Exar X3100 Series 10GbE PCIe Server Adapter"
+reject_firmware drivers/net/ethernet/neterion/vxge/vxge-main.c
+clean_blob drivers/net/ethernet/neterion/vxge/vxge-main.c
+clean_kconfig drivers/net/ethernet/neterion/Kconfig 'VXGE'
+clean_mk CONFIG_VXGE drivers/net/ethernet/neterion/vxge/Makefile
+
+# appletalk
+
+announce COPS - "COPS LocalTalk PC"
+clean_sed '
+/sizeof(\(ff\|lt\)drv_code)/{
+ i\
+ printk(KERN_INFO "%s: Missing Free firmware.\\n", dev->name);\
+ return;
+}
+/\(ff\|lt\)drv_code/d;
+' drivers/net/appletalk/cops.c 'report missing Free firmware'
+clean_blob drivers/net/appletalk/cops.c
+clean_file drivers/net/appletalk/cops_ffdrv.h
+clean_file drivers/net/appletalk/cops_ltdrv.h
+clean_kconfig drivers/net/appletalk/Kconfig 'COPS'
+clean_mk CONFIG_COPS drivers/net/appletalk/Makefile
+
+# hamradio
+
+announce YAM - "YAM driver for AX.25"
+drop_fw_file firmware/yam/1200.bin.ihex firmware/yam/1200.bin
+drop_fw_file firmware/yam/9600.bin.ihex firmware/yam/9600.bin
+reject_firmware drivers/net/hamradio/yam.c
+clean_blob drivers/net/hamradio/yam.c
+clean_kconfig drivers/net/hamradio/Kconfig 'YAM'
+clean_mk CONFIG_YAM drivers/net/hamradio/Makefile
+
+# irda
+
+announce USB_IRDA - "IrDA USB dongles"
+reject_firmware drivers/net/irda/irda-usb.c
+clean_blob drivers/net/irda/irda-usb.c
+clean_kconfig drivers/net/irda/Kconfig 'USB_IRDA'
+clean_mk CONFIG_USB_IRDA drivers/net/irda/Makefile
+
+# smsc
+
+announce PCMCIA_SMC91C92 - "SMC 91Cxx PCMCIA"
+drop_fw_file firmware/ositech/Xilinx7OD.bin.ihex firmware/ositech/Xilinx7OD.bin
+reject_firmware drivers/net/ethernet/smsc/smc91c92_cs.c
+clean_blob drivers/net/ethernet/smsc/smc91c92_cs.c
+clean_kconfig drivers/net/ethernet/smsc/Kconfig 'PCMCIA_SMC91C92'
+clean_mk CONFIG_PCMCIA_SMC91C92 drivers/net/ethernet/smsc/Makefile
+
+# near-field communication
+
+announce NFC_WILINK - "Texas Instruments NFC WiLink driver"
+reject_firmware drivers/nfc/nfcwilink.c
+clean_blob drivers/nfc/nfcwilink.c
+clean_kconfig drivers/nfc/Kconfig 'NFC_WILINK'
+clean_mk CONFIG_NFC_WILINK drivers/nfc/Makefile
+
+# pcmcia
+
+# CIS files are not software.
+# announce PCCARD - "PCCard (PCMCIA/CardBus) support"
+# reject_firmware drivers/pcmcia/ds.c
+# clean_kconfig drivers/pcmcia/Kconfig 'PCCARD'
+# clean_mk CONFIG_PCCARD drivers/pcmcia/Makefile
+
+announce PCMCIA_3C574 - "3Com 3c574 PCMCIA support"
+# This is not software; it's Free, but GPLed without in-tree sources.
+drop_fw_file firmware/cis/3CCFEM556.cis.ihex firmware/cis/3CCFEM556.cis
+# clean_blob drivers/net/pcmcia/3c574_cs.c
+# clean_kconfig drivers/net/pcmcia/Kconfig 'PCMCIA_3C574'
+# clean_mk CONFIG_PCMCIA_3C574 drivers/net/pcmcia/Makefile
+
+announce PCMCIA_3C589 - "3Com 3c589 PCMCIA support"
+# This is not software; it's Free, but GPLed without in-tree sources.
+drop_fw_file firmware/cis/3CXEM556.cis.ihex firmware/cis/3CXEM556.cis
+# clean_blob drivers/net/pcmcia/3c589_cs.c
+# clean_kconfig drivers/net/pcmcia/Kconfig 'PCMCIA_3C589'
+# clean_mk CONFIG_PCMCIA_3C589 drivers/net/pcmcia/Makefile
+
+announce PCMCIA_PCNET - "NE2000 compatible PCMCIA support"
+# These are not software; they're Free, but GPLed without in-tree sources.
+drop_fw_file firmware/cis/LA-PCM.cis.ihex firmware/cis/LA-PCM.cis
+drop_fw_file firmware/cis/PCMLM28.cis.ihex firmware/cis/PCMLM28.cis
+drop_fw_file firmware/cis/DP83903.cis.ihex firmware/cis/DP83903.cis
+drop_fw_file firmware/cis/NE2K.cis.ihex firmware/cis/NE2K.cis
+drop_fw_file firmware/cis/tamarack.cis.ihex firmware/cis/tamarack.cis
+drop_fw_file firmware/cis/PE-200.cis.ihex firmware/cis/PE-200.cis
+drop_fw_file firmware/cis/PE520.cis.ihex firmware/cis/PE520.cis
+# clean_blob drivers/net/pcmcia/pcnet_cs.c
+# clean_kconfig drivers/net/pcmcia/Kconfig 'PCMCIA_PCNET'
+# clean_mk CONFIG_PCMCIA_PCNET drivers/net/pcmcia/Makefile
+
+# usb
+
+announce USB_KAWETH - "USB KLSI KL5USB101-based ethernet device support"
+drop_fw_file firmware/kaweth/new_code.bin.ihex firmware/kaweth/new_code.bin
+drop_fw_file firmware/kaweth/new_code_fix.bin.ihex firmware/kaweth/new_code_fix.bin
+drop_fw_file firmware/kaweth/trigger_code.bin.ihex firmware/kaweth/trigger_code.bin
+drop_fw_file firmware/kaweth/trigger_code_fix.bin.ihex firmware/kaweth/trigger_code_fix.bin
+reject_firmware drivers/net/usb/kaweth.c
+clean_blob drivers/net/usb/kaweth.c
+clean_kconfig drivers/net/usb/Kconfig 'USB_KAWETH'
+clean_mk CONFIG_USB_KAWETH drivers/net/usb/Makefile
+
+# wireless
+
+announce ATMEL "Atmel at76c50x chipset 802.11b support"
+reject_firmware drivers/net/wireless/atmel.c
+clean_blob drivers/net/wireless/atmel.c
+clean_kconfig drivers/net/wireless/Kconfig 'ATMEL'
+clean_mk CONFIG_ATMEL drivers/net/wireless/Makefile
+
+announce AT76C50X_USB - "Atmel at76c503/at76c505/at76c505a USB cards"
+reject_firmware drivers/net/wireless/at76c50x-usb.c
+clean_blob drivers/net/wireless/at76c50x-usb.c
+clean_kconfig drivers/net/wireless/Kconfig 'AT76C50X_USB'
+clean_mk CONFIG_AT76C50X_USB drivers/net/wireless/Makefile
+
+announce B43 - "Broadcom 43xx wireless support (mac80211 stack)"
+maybe_reject_firmware drivers/net/wireless/b43/main.c
+clean_sed '
+/^static int b43_upload_microcode(/,/^}$/{
+ / if (dev->fw\.opensource) {$/i\
+ if (!dev->fw.opensource) {\
+ b43err(dev->wl, "Rejected non-Free firmware\\n");\
+ err = -EOPNOTSUPP;\
+ goto error;\
+ }
+}' drivers/net/wireless/b43/main.c 'double-check and reject non-Free firmware'
+# Major portions of firmware filenames not deblobbed.
+clean_blob drivers/net/wireless/b43/main.c
+clean_kconfig drivers/net/wireless/b43/Kconfig 'B43'
+clean_mk CONFIG_B43 drivers/net/wireless/b43/Makefile
+
+announce B43LEGACY - "Broadcom 43xx-legacy wireless support (mac80211 stack)"
+reject_firmware drivers/net/wireless/b43legacy/main.c
+# Major portions of firwmare filenames not deblobbed.
+clean_blob drivers/net/wireless/b43legacy/main.c
+clean_kconfig drivers/net/wireless/b43legacy/Kconfig 'B43LEGACY'
+clean_mk CONFIG_B43LEGACY drivers/net/wireless/b43legacy/Makefile
+
+announce BRCMSMAC - "Broadcom IEEE802.11n PCIe SoftMAC WLAN driver"
+reject_firmware drivers/net/wireless/brcm80211/brcmsmac/mac80211_if.c
+clean_blob drivers/net/wireless/brcm80211/brcmsmac/mac80211_if.c
+clean_kconfig drivers/net/wireless/brcm80211/Kconfig 'BRCMSMAC'
+clean_mk CONFIG_BRCMSMAC drivers/net/wireless/brcm80211/Makefile
+
+announce BRCMFMAC_SDIO - "Broadcom IEEE802.11n SDIO FullMAC WLAN driver"
+reject_firmware drivers/net/wireless/brcm80211/brcmfmac/dhd_sdio.c
+clean_blob drivers/net/wireless/brcm80211/brcmfmac/dhd_sdio.c
+clean_kconfig drivers/net/wireless/brcm80211/Kconfig 'BRCMFMAC_SDIO'
+clean_mk CONFIG_BRCMFMAC_SDIO drivers/net/wireless/brcm80211/brcmfmac/Makefile
+
+announce BRCMFMAC_USB - "Broadcom IEEE802.11n USB FullMAC WLAN driver"
+reject_firmware drivers/net/wireless/brcm80211/brcmfmac/usb.c
+clean_blob drivers/net/wireless/brcm80211/brcmfmac/usb.c
+clean_kconfig drivers/net/wireless/brcm80211/Kconfig 'BRCMFMAC_USB'
+clean_mk CONFIG_BRCMFMAC_USB drivers/net/wireless/brcm80211/brcmfmac/Makefile
+
+announce CSR_WIFI - "CSR wireless driver"
+reject_firmware drivers/staging/csr/unifi_priv.h
+reject_firmware drivers/staging/csr/firmware.c
+reject_firmware drivers/staging/csr/putest.c
+reject_firmware drivers/staging/csr/sme_native.c
+reject_firmware drivers/staging/csr/sme_sys.c
+clean_kconfig drivers/staging/csr/Kconfig 'CSR_WIFI'
+clean_mk CONFIG_CSR_WIFI drivers/staging/csr/Makefile
+
+announce HERMES - "Hermes chipset 802.11b support (Orinoco/Prism2/Symbol)"
+reject_firmware drivers/net/wireless/orinoco/fw.c
+clean_blob drivers/net/wireless/orinoco/fw.c
+clean_kconfig drivers/net/wireless/orinoco/Kconfig 'HERMES'
+clean_mk CONFIG_HERMES drivers/net/wireless/orinoco/Makefile
+
+announce ORINOCO_USB - "Agere Orinoco USB support"
+reject_firmware drivers/net/wireless/orinoco/orinoco_usb.c
+clean_blob drivers/net/wireless/orinoco/orinoco_usb.c
+clean_kconfig drivers/net/wireless/orinoco/Kconfig 'ORINOCO_USB'
+clean_mk CONFIG_ORINOCO_USB drivers/net/wireless/orinoco/Makefile
+
+announce WLAGS49_H2 - "Agere Systems HERMES II Wireless PC Card Model 0110"
+# Some pieces of the firmware images are most definitely data, but
+# others seem to be code.
+clean_blob drivers/staging/wlags49_h2/ap_h2.c
+clean_blob drivers/staging/wlags49_h2/sta_h2.c
+echo 'extern int deblobbed; /*(DEBLOBBED)*/' > drivers/staging/wlags49_h2/ap_h2.c
+echo 'extern int deblobbed; /*(DEBLOBBED)*/' > drivers/staging/wlags49_h2/sta_h2.c
+clean_blob drivers/staging/wlags49_h2/wl_profile.c
+clean_sed '
+ s,\(.*hcf_status = \)dhf_download_fw(.*&fw_image );,//& /*(DEBLOBBED)*/\n\1HCF_ERR_INCOMP_FW;,
+' drivers/staging/wlags49_h2/wl_main.c 'reject built-in non-Free firmware'
+clean_kconfig drivers/staging/wlags49_h2/Kconfig 'WLAGS49_H2'
+clean_mk CONFIG_WLAGS49_H2 drivers/staging/Makefile
+
+announce WLAGS49_H25 - "Linksys Systems HERMES II.5 Wireless-G_CompactFlash_Card"
+# Some pieces of the firmware images are most definitely data, but
+# others seem to be code.
+clean_blob drivers/staging/wlags49_h2/ap_h25.c
+clean_blob drivers/staging/wlags49_h2/sta_h25.c
+echo 'extern int deblobbed; /*(DEBLOBBED)*/' > drivers/staging/wlags49_h2/ap_h25.c
+echo 'extern int deblobbed; /*(DEBLOBBED)*/' > drivers/staging/wlags49_h2/sta_h25.c
+clean_kconfig drivers/staging/wlags49_h25/Kconfig 'WLAGS49_H25'
+clean_mk CONFIG_WLAGS49_H25 drivers/staging/Makefile
+
+announce IPW2100 - "Intel PRO/Wireless 2100 Network Connection"
+reject_firmware drivers/net/wireless/ipw2x00/ipw2100.c
+clean_blob drivers/net/wireless/ipw2x00/ipw2100.c
+clean_kconfig drivers/net/wireless/Kconfig 'IPW2100'
+clean_mk CONFIG_IPW2100 drivers/net/wireless/ipw2x00/Makefile
+
+announce IPW2200 - "Intel PRO/Wireless 2200BG and 2915ABG Network Connection"
+reject_firmware drivers/net/wireless/ipw2x00/ipw2200.c
+clean_blob drivers/net/wireless/ipw2x00/ipw2200.c
+clean_kconfig drivers/net/wireless/Kconfig 'IPW2200'
+clean_mk CONFIG_IPW2200 drivers/net/wireless/ipw2x00/Makefile
+
+announce IWL3945 - "Intel PRO/Wireless 3945ABG/BG Network Connection"
+reject_firmware drivers/net/wireless/iwlegacy/3945-mac.c
+clean_blob drivers/net/wireless/iwlegacy/3945-mac.c
+clean_blob drivers/net/wireless/iwlegacy/3945.h
+clean_kconfig drivers/net/wireless/iwlegacy/Kconfig 'IWL3945'
+clean_mk CONFIG_IWL3945 drivers/net/wireless/iwlegacy/Makefile
+
+announce IWLWIFI - "Intel Wireless WiFi Next Gen AGN"
+reject_firmware drivers/net/wireless/iwlwifi/iwl-drv.c
+clean_blob drivers/net/wireless/iwlwifi/iwl-drv.c
+clean_blob drivers/net/wireless/iwlwifi/pcie/5000.c
+clean_blob drivers/net/wireless/iwlwifi/pcie/6000.c
+clean_blob drivers/net/wireless/iwlwifi/pcie/1000.c
+clean_blob drivers/net/wireless/iwlwifi/pcie/2000.c
+clean_kconfig drivers/net/wireless/iwlwifi/Kconfig 'IWLWIFI'
+clean_mk CONFIG_IWLWIFI drivers/net/wireless/iwlwifi/Makefile
+
+announce IWL4965 - "Intel Wireless WiFi 4965AGN"
+reject_firmware drivers/net/wireless/iwlegacy/4965-mac.c
+clean_blob drivers/net/wireless/iwlegacy/4965-mac.c
+clean_blob drivers/net/wireless/iwlegacy/4965.c
+clean_kconfig drivers/net/wireless/iwlegacy/Kconfig 'IWL4965'
+clean_mk CONFIG_IWL4965 drivers/net/wireless/iwlegacy/Makefile
+
+announce LIBERTAS - "Marvell 8xxx Libertas WLAN driver support"
+reject_firmware drivers/net/wireless/libertas/firmware.c
+clean_kconfig drivers/net/wireless/Kconfig 'LIBERTAS'
+clean_mk CONFIG_LIBERTAS drivers/net/wireless/libertas/Makefile
+
+announce LIBERTAS_CS - "Marvell Libertas 8385 CompactFlash 802.11b/g cards"
+clean_blob drivers/net/wireless/libertas/if_cs.c
+clean_kconfig drivers/net/wireless/Kconfig 'LIBERTAS_CS'
+clean_mk CONFIG_LIBERTAS_CS drivers/net/wireless/libertas/Makefile
+
+announce LIBERTAS_SDIO - "Marvell Libertas 8385 and 8686 SDIO 802.11b/g cards"
+clean_blob drivers/net/wireless/libertas/if_sdio.c
+clean_kconfig drivers/net/wireless/Kconfig 'LIBERTAS_SDIO'
+clean_mk CONFIG_LIBERTAS_SDIO drivers/net/wireless/libertas/Makefile
+
+announce LIBERTAS_SPI - "Marvell Libertas 8686 SPI 802.11b/g cards"
+clean_blob drivers/net/wireless/libertas/if_spi.c
+clean_kconfig drivers/net/wireless/Kconfig 'LIBERTAS_SPI'
+clean_mk CONFIG_LIBERTAS_SPI drivers/net/wireless/libertas/Makefile
+
+announce LIBERTAS_USB - "Marvell Libertas 8388 USB 802.11b/g cards"
+clean_blob drivers/net/wireless/libertas/if_usb.c
+clean_blob drivers/net/wireless/libertas/README
+clean_kconfig drivers/net/wireless/Kconfig 'LIBERTAS_USB'
+clean_mk CONFIG_LIBERTAS_USB drivers/net/wireless/libertas/Makefile
+
+announce LIBERTAS_THINFIRM_USB - "Marvell Libertas 8388 USB 802.11b/g cards with thin firmware"
+reject_firmware drivers/net/wireless/libertas_tf/if_usb.c
+clean_blob drivers/net/wireless/libertas_tf/if_usb.c
+clean_kconfig drivers/net/wireless/Kconfig 'LIBERTAS_THINFIRM_USB'
+clean_mk CONFIG_LIBERTAS_THINFIRM_USB drivers/net/wireless/libertas_tf/Makefile
+
+announce MWIFIEX - "Marvell WiFi-Ex Driver"
+clean_blob drivers/net/wireless/mwifiex/README
+reject_firmware drivers/net/wireless/mwifiex/main.c
+clean_kconfig drivers/net/wireless/mwifiex/Kconfig 'MWIFIEX'
+clean_mk CONFIG_MWIFIEX drivers/net/wireless/mwifiex/Makefile
+
+announce MWIFIEX_SDIO - "Marvell WiFi-Ex Driver for SD8787"
+clean_blob drivers/net/wireless/mwifiex/sdio.h
+clean_blob drivers/net/wireless/mwifiex/sdio.c
+clean_kconfig drivers/net/wireless/mwifiex/Kconfig 'MWIFIEX_SDIO'
+clean_mk CONFIG_MWIFIEX_SDIO drivers/net/wireless/mwifiex/Makefile
+
+announce MWIFIEX_PCIE - "Marvell WiFi-Ex Driver for PCI 8766"
+clean_blob drivers/net/wireless/mwifiex/pcie.h
+clean_blob drivers/net/wireless/mwifiex/pcie.c
+clean_kconfig drivers/net/wireless/mwifiex/Kconfig 'MWIFIEX_PCIE'
+clean_mk CONFIG_MWIFIEX_PCIE drivers/net/wireless/mwifiex/Makefile
+
+announce MWIFIEX_USB - "Marvell WiFi-Ex Driver for USB8797"
+clean_blob drivers/net/wireless/mwifiex/usb.h
+clean_blob drivers/net/wireless/mwifiex/usb.c
+clean_kconfig drivers/net/wireless/mwifiex/Kconfig 'MWIFIEX_USB'
+clean_mk CONFIG_MWIFIEX_USB drivers/net/wireless/mwifiex/Makefile
+
+announce MWL8K - "Marvell 88W8xxx PCI/PCIe Wireless support"
+reject_firmware drivers/net/wireless/mwl8k.c
+clean_blob drivers/net/wireless/mwl8k.c
+clean_kconfig drivers/net/wireless/Kconfig 'MWL8K'
+clean_mk CONFIG_MWL8K drivers/net/wireless/Makefile
+
+announce AR5523 - "Atheros AR5523 wireless driver support"
+reject_firmware drivers/net/wireless/ath/ar5523/ar5523.c
+clean_blob drivers/net/wireless/ath/ar5523/ar5523.c
+clean_blob drivers/net/wireless/ath/ar5523/ar5523.h
+clean_kconfig drivers/net/wireless/ath/ar5523/Kconfig 'AR5523'
+clean_mk CONFIG_AR5523 drivers/net/wireless/ath/ar5523/Makefile
+
+announce ATH6KL - "Atheros ath6kl support"
+reject_firmware drivers/net/wireless/ath/ath6kl/init.c
+clean_blob drivers/net/wireless/ath/ath6kl/init.c
+clean_blob drivers/net/wireless/ath/ath6kl/core.h
+clean_kconfig drivers/net/wireless/ath/ath6kl/Kconfig 'ATH6KL'
+clean_mk CONFIG_ATH6KL drivers/net/wireless/ath/ath6kl/Makefile
+
+announce ATH6KL_SDIO - "Atheros ath6kl SDIO support"
+clean_blob drivers/net/wireless/ath/ath6kl/sdio.c
+clean_kconfig drivers/net/wireless/ath/ath6kl/Kconfig 'ATH6KL_SDIO'
+clean_mk CONFIG_ATH6KL_SDIO drivers/net/wireless/ath/ath6kl/Makefile
+
+announce ATH6KL_USB - "Atheros ath6kl USB support"
+clean_blob drivers/net/wireless/ath/ath6kl/usb.c
+clean_kconfig drivers/net/wireless/ath/ath6kl/Kconfig 'ATH6KL_USB'
+clean_mk CONFIG_ATH6KL_USB drivers/net/wireless/ath/ath6kl/Makefile
+
+announce ATH9K - "Atheros 802.11n wireless cards support"
+reject_firmware drivers/net/wireless/ath/ath9k/init.c
+clean_kconfig drivers/net/wireless/ath/ath9k/Kconfig 'ATH9K'
+clean_mk CONFIG_ATH9K drivers/net/wireless/ath/ath9k/Makefile
+
+announce ATH9K_HTC - "Atheros HTC based wireless cards support"
+reject_firmware drivers/net/wireless/ath/ath9k/hif_usb.c
+clean_blob drivers/net/wireless/ath/ath9k/hif_usb.c
+clean_kconfig drivers/net/wireless/ath/ath9k/Kconfig 'ATH9K_HTC'
+clean_mk CONFIG_ATH9K_HTC drivers/net/wireless/ath/ath9k/Makefile
+
+announce PRISM2_USB - "Prism2.5/3 USB driver"
+reject_firmware drivers/staging/wlan-ng/prism2fw.c
+clean_blob drivers/staging/wlan-ng/prism2fw.c
+clean_kconfig drivers/staging/wlan-ng/Kconfig PRISM2_USB
+clean_mk CONFIG_PRISM2_USB drivers/staging/wlan-ng/Makefile
+
+announce P54_PCI - "Prism54 PCI support"
+reject_firmware drivers/net/wireless/p54/p54pci.c
+clean_blob drivers/net/wireless/p54/p54pci.c
+clean_kconfig drivers/net/wireless/p54/Kconfig 'P54_PCI'
+clean_mk CONFIG_P54_PCI drivers/net/wireless/p54/Makefile
+
+announce P54_SPI - "Prism54 SPI (stlc45xx) support"
+# There's support for loading custom 3826.eeprom here, with a default
+# eeprom that is clearly pure data. Without Free 3826.arm, there's
+# little point in trying to retain the ability to load 3826.eeprom, so
+# we drop it altogether.
+reject_firmware drivers/net/wireless/p54/p54spi.c
+clean_blob drivers/net/wireless/p54/p54spi.c
+clean_kconfig drivers/net/wireless/p54/Kconfig 'P54_SPI'
+clean_mk CONFIG_P54_SPI drivers/net/wireless/p54/Makefile
+
+announce P54_USB - "Prism54 USB support"
+reject_firmware drivers/net/wireless/p54/p54usb.c
+clean_blob drivers/net/wireless/p54/p54usb.c
+clean_blob drivers/net/wireless/p54/p54usb.h
+clean_kconfig drivers/net/wireless/p54/Kconfig 'P54_USB'
+clean_mk CONFIG_P54_USB drivers/net/wireless/p54/Makefile
+
+announce PRISM54 - "Intersil Prism GT/Duette/Indigo PCI/Cardbus"
+reject_firmware drivers/net/wireless/prism54/islpci_dev.c
+clean_blob drivers/net/wireless/prism54/islpci_dev.c
+clean_kconfig drivers/net/wireless/Kconfig 'PRISM54'
+clean_mk CONFIG_PRISM54 drivers/net/wireless/prism54/Makefile
+
+announce RT2X00_LIB_FIRMWARE - "Ralink driver firmware support"
+reject_firmware drivers/net/wireless/rt2x00/rt2x00firmware.c
+clean_kconfig drivers/net/wireless/rt2x00/Kconfig 'RT2X00_LIB_FIRMWARE'
+clean_mk CONFIG_RT2X00_LIB_FIRMWARE drivers/net/wireless/rt2x00/Makefile
+
+announce RT61PCI - "Ralink rt2501/rt61 (PCI/PCMCIA) support"
+clean_blob drivers/net/wireless/rt2x00/rt61pci.h
+clean_blob drivers/net/wireless/rt2x00/rt61pci.c
+clean_kconfig drivers/net/wireless/rt2x00/Kconfig 'RT61PCI'
+clean_mk CONFIG_RT61PCI drivers/net/wireless/rt2x00/Makefile
+
+announce RT73USB - "Ralink rt2501/rt73 (USB) support"
+clean_blob drivers/net/wireless/rt2x00/rt73usb.h
+clean_blob drivers/net/wireless/rt2x00/rt73usb.c
+clean_kconfig drivers/net/wireless/rt2x00/Kconfig 'RT73USB'
+clean_mk CONFIG_RT73USB drivers/net/wireless/rt2x00/Makefile
+
+announce RT2800PCI - "Ralink rt2800 (PCI/PCMCIA) support"
+clean_blob drivers/net/wireless/rt2x00/rt2800pci.h
+clean_blob drivers/net/wireless/rt2x00/rt2800pci.c
+clean_kconfig drivers/net/wireless/rt2x00/Kconfig RT2800PCI
+clean_mk CONFIG_RT2800PCI drivers/net/wireless/rt2x00/Makefile
+
+announce RT2800USB - "Ralink rt2800 (USB) support"
+clean_blob drivers/net/wireless/rt2x00/rt2800usb.h
+clean_blob drivers/net/wireless/rt2x00/rt2800usb.c
+clean_kconfig drivers/net/wireless/rt2x00/Kconfig RT2800USB
+clean_mk CONFIG_RT2800USB drivers/net/wireless/rt2x00/Makefile
+
+announce RTL8192CE - "Realtek RTL8192CE/RTL8188CE Wireless Network Adapter"
+reject_firmware drivers/net/wireless/rtlwifi/rtl8192ce/sw.c
+clean_blob drivers/net/wireless/rtlwifi/rtl8192ce/sw.c
+clean_kconfig drivers/net/wireless/rtlwifi/Kconfig RTL8192CE
+clean_mk CONFIG_RTL8192CE drivers/net/wireless/rtlwifi/rtl8192ce/Makefile
+
+announce RTL8192CU - "Realtek RTL8192CU/RTL8188CU USB Wireless Network Adapter"
+reject_firmware drivers/net/wireless/rtlwifi/rtl8192cu/sw.c
+clean_blob drivers/net/wireless/rtlwifi/rtl8192cu/sw.c
+clean_kconfig drivers/net/wireless/rtlwifi/Kconfig RTL8192CU
+clean_mk CONFIG_RTL8192CU drivers/net/wireless/rtlwifi/rtl8192cu/Makefile
+
+announce RTL8192DE - "Realtek RTL8192DE/RTL8188DE PCIe Wireless Network Adapter"
+reject_firmware drivers/net/wireless/rtlwifi/rtl8192de/sw.c
+clean_blob drivers/net/wireless/rtlwifi/rtl8192de/sw.c
+clean_kconfig drivers/net/wireless/rtlwifi/Kconfig RTL8192DE
+clean_mk CONFIG_RTL8192DE drivers/net/wireless/rtlwifi/rtl8192de/Makefile
+
+announce RTL8192SE - "Realtek RTL8192SE/RTL8191SE PCIe Wireless Network Adapter"
+reject_firmware drivers/net/wireless/rtlwifi/rtl8192se/sw.c
+clean_blob drivers/net/wireless/rtlwifi/rtl8192se/sw.c
+clean_kconfig drivers/net/wireless/rtlwifi/Kconfig RTL8192SE
+clean_mk CONFIG_RTL8192SE drivers/net/wireless/rtlwifi/rtl8192se/Makefile
+
+announce RTL8192E - "RealTek RTL8192E Wireless LAN NIC driver"
+reject_firmware drivers/staging/rtl8192e/rtl8192e/r8192E_firmware.c
+clean_blob drivers/staging/rtl8192e/rtl8192e/r8192E_firmware.h
+clean_blob drivers/staging/rtl8192e/rtl8192e/r8192E_firmware.c
+clean_blob drivers/staging/rtl8192e/rtl8192e/r8192E_hwimg.c
+clean_blob drivers/staging/rtl8192e/rtl8192e/rtl_core.c
+clean_kconfig drivers/staging/rtl8192e/Kconfig RTL8192E
+clean_mk CONFIG_RTL8192E drivers/staging/rtl8192e/Makefile
+
+announce RTL8192U - "RealTek RTL8192U Wireless LAN NIC driver"
+reject_firmware drivers/staging/rtl8192u/r819xU_firmware.c
+clean_blob drivers/staging/rtl8192u/r819xU_firmware.c
+clean_kconfig drivers/staging/rtl8192u/Kconfig 'RTL8192U'
+clean_mk CONFIG_RTL8192U drivers/staging/rtl8192u/Makefile
+
+announce R8712U - "RealTek RTL8712U (RTL8192SU) Wireless LAN NIC driver"
+reject_firmware drivers/staging/rtl8712/hal_init.c
+clean_blob drivers/staging/rtl8712/hal_init.c
+clean_kconfig drivers/staging/rtl8712/Kconfig 'R8712U'
+clean_mk CONFIG_R8712U drivers/staging/rtl8712/Makefile
+
+announce RTL8723AE - "Realtek RTL8723AE PCIe Wireless Network Adapter"
+reject_firmware drivers/net/wireless/rtlwifi/rtl8723ae/sw.c
+clean_blob drivers/net/wireless/rtlwifi/rtl8723ae/sw.c
+clean_kconfig drivers/net/wireless/rtlwifi/Kconfig 'RTL8723AE'
+clean_mk CONFIG_RTL8723AE drivers/net/wireless/rtlwifi/rtl8723ae/Makefile
+
+announce VT6656 - "VIA Technologies VT6656 support"
+reject_firmware drivers/staging/vt6656/firmware.c
+clean_blob drivers/staging/vt6656/firmware.c
+clean_kconfig drivers/staging/vt6656/Kconfig 'VT6656'
+clean_mk CONFIG_VT6656 drivers/staging/vt6656/Makefile
+
+announce WL1251 - "TI wl1251 support"
+reject_firmware drivers/net/wireless/ti/wl1251/main.c
+clean_blob drivers/net/wireless/ti/wl1251/main.c
+clean_blob drivers/net/wireless/ti/wl1251/wl1251.h
+clean_kconfig drivers/net/wireless/ti/wl1251/Kconfig 'WL1251'
+clean_mk CONFIG_WL1251 drivers/net/wireless/ti/wl1251/Makefile
+
+announce WL12XX - "TI wl12xx support"
+clean_blob drivers/net/wireless/ti/wl12xx/main.c
+clean_kconfig drivers/net/wireless/ti/wl12xx/Kconfig 'WL12XX'
+clean_mk CONFIG_WL12XX drivers/net/wireless/ti/wl12xx/Makefile
+
+announce WL18XX - "TI wl18xx support"
+reject_firmware drivers/net/wireless/ti/wl18xx/main.c
+clean_blob drivers/net/wireless/ti/wl18xx/main.c
+clean_kconfig drivers/net/wireless/ti/wl18xx/Kconfig 'WL18XX'
+clean_mk CONFIG_WL18XX drivers/net/wireless/ti/wl18xx/Makefile
+
+announce WLCORE - "TI wlcore support"
+reject_firmware drivers/net/wireless/ti/wlcore/main.c
+clean_blob drivers/net/wireless/ti/wlcore/main.c
+clean_blob drivers/net/wireless/ti/wlcore/wlcore_i.h
+clean_kconfig drivers/net/wireless/ti/wlcore/Kconfig 'WLCORE'
+clean_mk CONFIG_WLCORE drivers/net/wireless/ti/wlcore/Makefile
+
+announce USB_ZD1201 - "USB ZD1201 based Wireless device support"
+reject_firmware drivers/net/wireless/zd1201.c
+clean_blob drivers/net/wireless/zd1201.c
+clean_kconfig drivers/net/wireless/Kconfig 'USB_ZD1201'
+clean_mk CONFIG_USB_ZD1201 drivers/net/wireless/Makefile
+
+announce ZD1211RW - "ZyDAS ZD1211/ZD1211B USB-wireless support"
+reject_firmware drivers/net/wireless/zd1211rw/zd_usb.c
+clean_blob drivers/net/wireless/zd1211rw/zd_usb.c
+clean_kconfig drivers/net/wireless/zd1211rw/Kconfig 'ZD1211RW'
+clean_mk CONFIG_ZD1211RW drivers/net/wireless/zd1211rw/Makefile
+
+# bluetooth
+
+announce BT_ATH3K - "Atheros firmware download driver"
+reject_firmware drivers/bluetooth/ath3k.c
+clean_blob drivers/bluetooth/ath3k.c
+clean_kconfig drivers/bluetooth/Kconfig 'BT_ATH3K'
+clean_mk CONFIG_BT_ATH3K drivers/bluetooth/Makefile
+
+announce BT_HCIBCM203X - "HCI BCM203x USB driver"
+reject_firmware drivers/bluetooth/bcm203x.c
+clean_blob drivers/bluetooth/bcm203x.c
+clean_kconfig drivers/bluetooth/Kconfig 'BT_HCIBCM203X'
+clean_mk CONFIG_BT_HCIBCM203X drivers/bluetooth/Makefile
+
+announce BT_HCIBFUSB - "HCI BlueFRITZ! USB driver"
+reject_firmware drivers/bluetooth/bfusb.c
+clean_blob drivers/bluetooth/bfusb.c
+clean_kconfig drivers/bluetooth/Kconfig 'BT_HCIBFUSB'
+clean_mk CONFIG_BT_HCIBFUSB drivers/bluetooth/Makefile
+
+announce BT_HCIBT3C - "HCI BT3C (PC Card) driver"
+reject_firmware drivers/bluetooth/bt3c_cs.c
+clean_blob drivers/bluetooth/bt3c_cs.c
+clean_kconfig drivers/bluetooth/Kconfig 'BT_HCIBT3C'
+clean_mk CONFIG_BT_HCIBT3C drivers/bluetooth/Makefile
+
+announce BT_MRVL_SDIO - "Marvell BT-over-SDIO driver"
+reject_firmware drivers/bluetooth/btmrvl_sdio.c
+clean_blob drivers/bluetooth/btmrvl_sdio.c
+clean_blob Documentation/btmrvl.txt
+clean_kconfig drivers/bluetooth/Kconfig 'BT_MRVL_SDIO'
+clean_mk CONFIG_BT_MRVL_SDIO drivers/bluetooth/Makefile
+
+announce TI_ST - "Texas Instruments shared transport line discipline"
+reject_firmware drivers/misc/ti-st/st_kim.c
+clean_blob drivers/misc/ti-st/st_kim.c
+clean_kconfig drivers/misc/ti-st/Kconfig 'TI_ST'
+clean_mk CONFIG_TI_ST drivers/misc/ti-st/Makefile
+
+# wimax
+
+announce WIMAX_I2400M - "Intel Wireless WiMAX Connection 2400"
+reject_firmware drivers/net/wimax/i2400m/fw.c
+clean_blob drivers/net/wimax/i2400m/usb.c
+clean_blob Documentation/wimax/README.i2400m
+clean_kconfig drivers/net/wimax/i2400m/Kconfig 'WIMAX_I2400M'
+clean_mk CONFIG_WIMAX_I2400M drivers/net/wimax/i2400m/Makefile
+
+announce BCM_WIMAX - "Beceem BCS200/BCS220-3 and BCSM250 wimax support"
+clean_blob drivers/staging/bcm/Macros.h
+# This disables loading of the .cfg file as well, but it's useless without
+# the firmware proper.
+clean_sed '
+/^static \(inline \)\?struct file \*open_firmware_file/,/^}$/ {
+ s,\(flp *= *\)filp_open[^;]*,\1/*(DEBLOBBED)*/(void*)-ENOENT,
+}' drivers/staging/bcm/Misc.c 'disabled non-Free firmware loading machinery'
+clean_kconfig drivers/staging/bcm/Kconfig 'BCM_WIMAX'
+clean_mk CONFIG_BCM_WIMAX drivers/staging/bcm/Makefile
+
+announce WIMAX_GDM72XX_SDIO - "GCT GDM72xx WiMAX support: SDIO interface"
+reject_firmware drivers/staging/gdm72xx/sdio_boot.c
+clean_blob drivers/staging/gdm72xx/sdio_boot.c
+clean_kconfig drivers/staging/gdm72xx/Kconfig 'WIMAX_GDM72XX_SDIO'
+clean_mk CONFIG_WIMAX_GDM72XX_SDIO drivers/staging/gdm72xx/Makefile
+
+announce WIMAX_GDM72XX_USB - "GCT GDM72xx WiMAX support: USB interface"
+reject_firmware drivers/staging/gdm72xx/usb_boot.c
+clean_blob drivers/staging/gdm72xx/usb_boot.c
+clean_kconfig drivers/staging/gdm72xx/Kconfig 'WIMAX_GDM72XX_USB'
+clean_mk CONFIG_WIMAX_GDM72XX_USB drivers/staging/gdm72xx/Makefile
+
+# infiniband
+
+announce INFINIBAND_QIB - "QLogic PCIe HCA support"
+drop_fw_file firmware/qlogic/sd7220.fw.ihex firmware/qlogic/sd7220.fw
+reject_firmware drivers/infiniband/hw/qib/qib_sd7220.c
+clean_blob drivers/infiniband/hw/qib/qib_sd7220.c
+clean_kconfig drivers/infiniband/hw/qib/Kconfig 'INFINIBAND_QIB'
+clean_mk CONFIG_INFINIBAND_QIB drivers/infiniband/hw/qib/Makefile
+
+# CAN
+
+announce CAN_SOFTING - "Softing Gmbh CAN generic support"
+reject_firmware drivers/net/can/softing/softing_fw.c
+clean_kconfig drivers/net/can/softing/Kconfig 'CAN_SOFTING'
+clean_mk CONFIG_CAN_SOFTING drivers/net/can/softing/Makefile
+
+announce CAN_SOFTING_CS - "Softing Gmbh CAN pcmcia cards"
+clean_blob drivers/net/can/softing/softing_cs.c
+clean_blob drivers/net/can/softing/softing_platform.h
+clean_sed '
+/^config CAN_SOFTING_CS$/,${
+ /You need firmware/i\
+ /*(DEBLOBBED)*/
+ /You need firmware/,/softing-fw.*tar\.gz/d
+}' drivers/net/can/softing/Kconfig 'removed firmware notes'
+clean_kconfig drivers/net/can/softing/Kconfig 'CAN_SOFTING_CS'
+clean_mk CONFIG_CAN_SOFTING_CS drivers/net/can/softing/Makefile
+
+########
+# ISDN #
+########
+
+announce ISDN_DIVAS - "Support Eicon DIVA Server cards"
+clean_blob drivers/isdn/hardware/eicon/cardtype.h
+clean_blob drivers/isdn/hardware/eicon/dsp_defs.h
+clean_kconfig drivers/isdn/hardware/eicon/Kconfig 'ISDN_DIVAS'
+clean_mk CONFIG_ISDN_DIVAS drivers/isdn/hardware/eicon/Makefile
+
+announce MISDN_SPEEDFAX - "Support for Sedlbauer Speedfax+"
+reject_firmware drivers/isdn/hardware/mISDN/speedfax.c
+clean_blob drivers/isdn/hardware/mISDN/speedfax.c
+clean_kconfig drivers/isdn/hardware/mISDN/Kconfig 'MISDN_SPEEDFAX'
+clean_mk CONFIG_MISDN_SPEEDFAX drivers/isdn/hardware/mISDN/Makefile
+
+##########
+# Serial #
+##########
+
+announce SERIAL_8250_CS - "8250/16550 PCMCIA device support"
+# These are not software; they're Free, but GPLed without in-tree sources.
+drop_fw_file firmware/cis/MT5634ZLX.cis.ihex firmware/cis/MT5634ZLX.cis
+drop_fw_file firmware/cis/RS-COM-2P.cis.ihex firmware/cis/RS-COM-2P.cis
+drop_fw_file firmware/cis/COMpad2.cis.ihex firmware/cis/COMpad2.cis
+drop_fw_file firmware/cis/COMpad4.cis.ihex firmware/cis/COMpad4.cis
+# These are not software; they're Free, but GPLed without textual sources.
+# It could be assumed that these binaries *are* sources, since they
+# can be trivially converted back to a textual form, without loss,
+# but we're better off safe than sorry, so remove them from our tree.
+drop_fw_file firmware/cis/SW_555_SER.cis.ihex firmware/cis/SW_555_SER.cis
+drop_fw_file firmware/cis/SW_7xx_SER.cis.ihex firmware/cis/SW_7xx_SER.cis
+drop_fw_file firmware/cis/SW_8xx_SER.cis.ihex firmware/cis/SW_8xx_SER.cis
+# clean_blob drivers/tty/serial/serial_cs.c
+# clean_kconfig drivers/tty/serial/Kconfig 'SERIAL_8250_CS'
+# clean_mk CONFIG_SERIAL_8250_CS drivers/tty/serial/Makefile
+
+announce SERIAL_ICOM - "IBM Multiport Serial Adapter"
+reject_firmware drivers/tty/serial/icom.c
+clean_blob drivers/tty/serial/icom.c
+clean_kconfig drivers/tty/serial/Kconfig 'SERIAL_ICOM'
+clean_mk CONFIG_SERIAL_ICOM drivers/tty/serial/Makefile
+
+announce SERIAL_QE - "Freescale QUICC Engine serial port support"
+reject_firmware drivers/tty/serial/ucc_uart.c
+clean_blob drivers/tty/serial/ucc_uart.c
+clean_kconfig drivers/tty/serial/Kconfig 'SERIAL_QE'
+clean_mk CONFIG_SERIAL_QE drivers/tty/serial/Makefile
+
+#########
+# input #
+#########
+
+announce TOUCHSCREEN_ATMEL_MXT - "Atmel mXT I2C Touchscreen"
+reject_firmware drivers/input/touchscreen/atmel_mxt_ts.c
+clean_blob drivers/input/touchscreen/atmel_mxt_ts.c
+clean_kconfig drivers/input/touchscreen/Kconfig 'TOUCHSCREEN_ATMEL_MXT'
+clean_mk CONFIG_TOUCHSCREEN_ATMEL_MXT drivers/input/touchscreen/Makefile
+
+announce LIRC_ZILOG - "Zilog/Hauppauge IR Transmitter"
+reject_firmware drivers/staging/media/lirc/lirc_zilog.c
+clean_blob drivers/staging/media/lirc/lirc_zilog.c
+clean_kconfig drivers/staging/media/lirc/Kconfig 'LIRC_ZILOG'
+clean_mk CONFIG_LIRC_ZILOG drivers/staging/media/lirc/Makefile
+
+####################
+# Data acquisition #
+####################
+
+announce COMEDI_DAQBOARD2000 - "IOtech DAQboard/2000 support"
+reject_firmware drivers/staging/comedi/drivers/daqboard2000.c
+clean_blob drivers/staging/comedi/drivers/daqboard2000.c
+clean_kconfig drivers/staging/comedi/Kconfig 'COMEDI_DAQBOARD2000'
+clean_mk CONFIG_COMEDI_DAQBOARD2000 drivers/staging/comedi/drivers/Makefile
+
+announce COMEDI_JR3_PCI - "JR3/PCI force sensor board support"
+reject_firmware drivers/staging/comedi/drivers/jr3_pci.c
+clean_blob drivers/staging/comedi/drivers/jr3_pci.c
+clean_kconfig drivers/staging/comedi/Kconfig 'COMEDI_JR3_PCI'
+clean_mk CONFIG_COMEDI_JR3_PCI drivers/staging/comedi/drivers/Makefile
+
+announce COMEDI_ME_DAQ - "Meilhaus ME-2000i, ME-2600i, ME-3000vm1 support"
+reject_firmware drivers/staging/comedi/drivers/me_daq.c
+clean_blob drivers/staging/comedi/drivers/me_daq.c
+clean_kconfig drivers/staging/comedi/Kconfig 'COMEDI_ME_DAQ'
+clean_mk CONFIG_COMEDI_ME_DAQ drivers/staging/comedi/drivers/Makefile
+
+announce COMEDI_NI_PCIDIO - "NI PCI-DIO32HS, PCI-6533, PCI-6534 support"
+reject_firmware drivers/staging/comedi/drivers/ni_pcidio.c
+clean_blob drivers/staging/comedi/drivers/ni_pcidio.c
+clean_kconfig drivers/staging/comedi/Kconfig 'COMEDI_NI_PCIDIO'
+clean_mk CONFIG_COMEDI_NI_PCIDIO drivers/staging/comedi/drivers/Makefile
+
+announce COMEDI_USBDUX - "ITL USBDUX support"
+reject_firmware drivers/staging/comedi/drivers/usbdux.c
+clean_blob drivers/staging/comedi/drivers/usbdux.c
+clean_kconfig drivers/staging/comedi/Kconfig 'COMEDI_USBDUX'
+clean_mk CONFIG_COMEDI_USBDUX drivers/staging/comedi/drivers/Makefile
+
+announce COMEDI_USBDUXFAST - "ITL USB-DUXfast support"
+reject_firmware drivers/staging/comedi/drivers/usbduxfast.c
+clean_blob drivers/staging/comedi/drivers/usbduxfast.c
+clean_kconfig drivers/staging/comedi/Kconfig 'COMEDI_USBDUXFAST'
+clean_mk CONFIG_COMEDI_USBDUXFAST drivers/staging/comedi/drivers/Makefile
+
+announce COMEDI_USBDUXSIGMA - "ITL USB-DUXsigma support"
+reject_firmware drivers/staging/comedi/drivers/usbduxsigma.c
+clean_blob drivers/staging/comedi/drivers/usbduxsigma.c
+clean_kconfig drivers/staging/comedi/Kconfig 'COMEDI_USBDUXSIGMA'
+clean_mk CONFIG_COMEDI_USBDUXSIGMA drivers/staging/comedi/drivers/Makefile
+
+
+#######
+# MMC #
+#######
+
+announce MMC_VUB300 - "VUB300 USB to SDIO/SD/MMC Host Controller support"
+clean_sed '
+/^config MMC_VUB300/,/^config /{
+ /Some SDIO cards/i\
+ /*(DEBLOBBED)*/
+ /Some SDIO cards/,/obtainable data rate\.$/d
+}
+' drivers/mmc/host/Kconfig "removed firmware notes"
+reject_firmware drivers/mmc/host/vub300.c
+clean_blob drivers/mmc/host/vub300.c
+clean_kconfig drivers/mmc/host/Kconfig 'MMC_VUB300'
+clean_mk CONFIG_MMC_VUB300 drivers/mmc/host/Makefile
+
+########
+# SCSI #
+########
+
+announce SCSI_QLOGICPTI - "PTI Qlogic, ISP Driver"
+drop_fw_file firmware/qlogic/isp1000.bin.ihex firmware/qlogic/isp1000.bin
+reject_firmware drivers/scsi/qlogicpti.c
+clean_blob drivers/scsi/qlogicpti.c
+clean_kconfig drivers/scsi/Kconfig 'SCSI_QLOGICPTI'
+clean_mk CONFIG_SCSI_QLOGICPTI drivers/scsi/Makefile
+
+announce SCSI_ADVANSYS - "AdvanSys SCSI"
+drop_fw_file firmware/advansys/mcode.bin.ihex firmware/advansys/mcode.bin
+drop_fw_file firmware/advansys/3550.bin.ihex firmware/advansys/3550.bin
+drop_fw_file firmware/advansys/38C0800.bin.ihex firmware/advansys/38C0800.bin
+drop_fw_file firmware/advansys/38C1600.bin.ihex firmware/advansys/38C1600.bin
+reject_firmware drivers/scsi/advansys.c
+clean_blob drivers/scsi/advansys.c
+clean_kconfig drivers/scsi/Kconfig 'SCSI_ADVANSYS'
+clean_mk CONFIG_SCSI_ADVANSYS drivers/scsi/Makefile
+
+announce SCSI_QLOGIC_1280 - "Qlogic QLA 1240/1x80/1x160 SCSI"
+drop_fw_file firmware/qlogic/1040.bin.ihex firmware/qlogic/1040.bin
+drop_fw_file firmware/qlogic/1280.bin.ihex firmware/qlogic/1280.bin
+drop_fw_file firmware/qlogic/12160.bin.ihex firmware/qlogic/12160.bin
+reject_firmware drivers/scsi/qla1280.c
+clean_blob drivers/scsi/qla1280.c
+clean_kconfig drivers/scsi/Kconfig 'SCSI_QLOGIC_1280'
+clean_mk CONFIG_SCSI_QLOGIC_1280 drivers/scsi/Makefile
+
+announce SCSI_AIC94XX - "Adaptec AIC94xx SAS/SATA support"
+reject_firmware drivers/scsi/aic94xx/aic94xx_seq.c
+clean_blob drivers/scsi/aic94xx/aic94xx_seq.c
+clean_blob drivers/scsi/aic94xx/aic94xx_seq.h
+clean_kconfig drivers/scsi/aic94xx/Kconfig 'SCSI_AIC94XX'
+clean_mk CONFIG_SCSI_AIC94XX drivers/scsi/aic94xx/Makefile
+
+announce SCSI_BFA_FC - "Brocade BFA Fibre Channel Support"
+reject_firmware drivers/scsi/bfa/bfad.c
+clean_blob drivers/scsi/bfa/bfad.c
+clean_kconfig drivers/scsi/Kconfig 'SCSI_BFA_FC'
+clean_mk CONFIG_SCSI_BFA_FC drivers/scsi/bfa/Makefile
+
+announce SCSI_CHELSIO_FCOE - "Chelsio Communications FCoE support"
+reject_firmware drivers/scsi/csiostor/csio_hw.c
+clean_blob drivers/scsi/csiostor/csio_hw.h
+clean_blob drivers/scsi/csiostor/csio_init.c
+clean_kconfig drivers/scsi/csiostor/Kconfig 'SCSI_CHELSIO_FCOE'
+clean_mk CONFIG_SCSI_CHELSIO_FCOE drivers/scsi/csiostor/Makefile
+
+announce SCSI_LPFC - "Emulex LightPulse Fibre Channel Support"
+# The firmware name is built out of Vital Product Data read from the
+# adapter. The firmware is definitely code, and I couldn't find
+# evidence it is Free, so I'm disabling it. It's not clear whether
+# this is the hardware or the software inducing to the installation of
+# non-Free firmware.
+reject_firmware drivers/scsi/lpfc/lpfc.h
+reject_firmware drivers/scsi/lpfc/lpfc_crtn.h
+reject_firmware drivers/scsi/lpfc/lpfc_init.c
+reject_firmware drivers/scsi/lpfc/lpfc_attr.c
+clean_kconfig drivers/scsi/Kconfig 'SCSI_LPFC'
+clean_mk CONFIG_SCSI_LPFC drivers/scsi/lpfc/Makefile
+
+announce SCSI_QLA_FC - "QLogic QLA2XXX Fibre Channel Support"
+reject_firmware drivers/scsi/qla2xxx/qla_gbl.h
+reject_firmware drivers/scsi/qla2xxx/qla_init.c
+reject_firmware drivers/scsi/qla2xxx/qla_os.c
+reject_firmware drivers/scsi/qla2xxx/qla_nx.c
+clean_sed '
+/^config SCSI_QLA_FC$/,/^config /{
+ /^ By default, firmware/i\
+ /*(DEBLOBBED)*/
+ /^ By default, firmware/,/ftp:[/][/].*firmware[/]/d
+}' drivers/scsi/qla2xxx/Kconfig 'removed firmware notes'
+clean_blob drivers/scsi/qla2xxx/qla_os.c
+clean_kconfig drivers/scsi/qla2xxx/Kconfig 'SCSI_QLA_FC'
+clean_mk CONFIG_SCSI_QLA_FC drivers/scsi/qla2xxx/Makefile
+
+
+#######
+# USB #
+#######
+
+# atm
+
+announce USB_CXACRU - "Conexant AccessRunner USB support"
+reject_firmware drivers/usb/atm/cxacru.c
+clean_blob drivers/usb/atm/cxacru.c
+clean_kconfig drivers/usb/atm/Kconfig 'USB_CXACRU'
+clean_mk CONFIG_USB_CXACRU drivers/usb/atm/Makefile
+
+announce USB_SPEEDTOUCH - "Speedtouch USB support"
+reject_firmware drivers/usb/atm/speedtch.c
+clean_blob drivers/usb/atm/speedtch.c
+clean_kconfig drivers/usb/atm/Kconfig 'USB_SPEEDTOUCH'
+clean_mk CONFIG_USB_SPEEDTOUCH drivers/usb/atm/Makefile
+
+announce USB_UEAGLEATM - "ADI 930 and eagle USB DSL modem"
+reject_firmware drivers/usb/atm/ueagle-atm.c
+clean_blob drivers/usb/atm/ueagle-atm.c
+clean_kconfig drivers/usb/atm/Kconfig 'USB_UEAGLEATM'
+clean_mk CONFIG_USB_UEAGLEATM drivers/usb/atm/Makefile
+
+# misc
+
+announce USB_EMI26 - "EMI 2|6 USB Audio interface"
+# These files are not under the GPL, better remove them all.
+drop_fw_file firmware/emi26/bitstream.HEX firmware/emi26/bitstream.fw
+drop_fw_file firmware/emi26/firmware.HEX firmware/emi26/firmware.fw
+drop_fw_file firmware/emi26/loader.HEX firmware/emi26/loader.fw
+reject_firmware drivers/usb/misc/emi26.c
+clean_blob drivers/usb/misc/emi26.c
+clean_kconfig drivers/usb/misc/Kconfig 'USB_EMI26'
+clean_mk CONFIG_USB_EMI26 drivers/usb/misc/Makefile
+
+announce USB_EMI62 - "EMI 6|2m USB Audio interface"
+# These files are probably not under the GPL, better remove them all.
+drop_fw_file firmware/emi62/bitstream.HEX firmware/emi62/bitstream.fw
+drop_fw_file firmware/emi62/loader.HEX firmware/emi62/loader.fw
+drop_fw_file firmware/emi62/midi.HEX firmware/emi62/midi.fw
+drop_fw_file firmware/emi62/spdif.HEX firmware/emi62/spdif.fw
+reject_firmware drivers/usb/misc/emi62.c
+clean_blob drivers/usb/misc/emi62.c
+clean_kconfig drivers/usb/misc/Kconfig 'USB_EMI62'
+clean_mk CONFIG_USB_EMI62 drivers/usb/misc/Makefile
+
+announce USB_EZUSB_FX2 - "Functions for loading firmware on EZUSB chips"
+maybe_reject_firmware drivers/usb/misc/ezusb.c
+
+announce USB_ISIGHTFW - "iSight firmware loading support"
+reject_firmware drivers/usb/misc/isight_firmware.c
+clean_blob drivers/usb/misc/isight_firmware.c
+clean_kconfig drivers/usb/misc/Kconfig 'USB_ISIGHTFW'
+clean_mk CONFIG_USB_ISIGHTFW drivers/usb/misc/Makefile
+
+# storage
+
+announce USB_STORAGE_ENE_UB6250 - "USB ENE card reader support"
+reject_firmware drivers/usb/storage/ene_ub6250.c
+clean_blob drivers/usb/storage/ene_ub6250.c
+clean_kconfig drivers/usb/storage/Kconfig 'USB_STORAGE_ENE_UB6250'
+clean_mk 'CONFIG_USB_STORAGE_ENE_UB6250' drivers/usb/storage/Makefile
+
+announce USB_ENESTORAGE - "USB ENE card reader support"
+clean_blob drivers/staging/keucr/init.h
+clean_sed '
+/^int ENE_LoadBinCode(/,/^}$/ {
+ /kmalloc/i\
+ return /*(DEBLOBBED)*/ USB_STOR_TRANSPORT_ERROR;
+}
+' drivers/staging/keucr/init.c 'disable non-Free firmware loading machinery'
+clean_kconfig drivers/staging/keucr/Kconfig 'USB_ENESTORAGE'
+clean_mk 'CONFIG_USB_ENESTORAGE' drivers/staging/keucr/Makefile
+
+# serial
+
+announce USB_SERIAL_KEYSPAN - "USB Keyspan USA-xxx Serial Driver"
+drop_fw_file firmware/keyspan/mpr.HEX firmware/keyspan/mpr.fw
+clean_kconfig drivers/usb/serial/Kconfig 'USB_SERIAL_KEYSPAN_MPR'
+drop_fw_file firmware/keyspan/usa18x.HEX firmware/keyspan/usa18x.fw
+clean_kconfig drivers/usb/serial/Kconfig 'USB_SERIAL_KEYSPAN_USA18X'
+drop_fw_file firmware/keyspan/usa19.HEX firmware/keyspan/usa19.fw
+clean_kconfig drivers/usb/serial/Kconfig 'USB_SERIAL_KEYSPAN_USA19'
+drop_fw_file firmware/keyspan/usa19qi.HEX firmware/keyspan/usa19qi.fw
+clean_kconfig drivers/usb/serial/Kconfig 'USB_SERIAL_KEYSPAN_USA19QI'
+drop_fw_file firmware/keyspan/usa19qw.HEX firmware/keyspan/usa19qw.fw
+clean_kconfig drivers/usb/serial/Kconfig 'USB_SERIAL_KEYSPAN_USA19QW'
+drop_fw_file firmware/keyspan/usa19w.HEX firmware/keyspan/usa19w.fw
+clean_kconfig drivers/usb/serial/Kconfig 'USB_SERIAL_KEYSPAN_USA19W'
+drop_fw_file firmware/keyspan/usa28.HEX firmware/keyspan/usa28.fw
+clean_kconfig drivers/usb/serial/Kconfig 'USB_SERIAL_KEYSPAN_USA28'
+drop_fw_file firmware/keyspan/usa28xa.HEX firmware/keyspan/usa28xa.fw
+clean_kconfig drivers/usb/serial/Kconfig 'USB_SERIAL_KEYSPAN_USA28XA'
+drop_fw_file firmware/keyspan/usa28xb.HEX firmware/keyspan/usa28xb.fw
+clean_kconfig drivers/usb/serial/Kconfig 'USB_SERIAL_KEYSPAN_USA28XB'
+drop_fw_file firmware/keyspan/usa28x.HEX firmware/keyspan/usa28x.fw
+clean_kconfig drivers/usb/serial/Kconfig 'USB_SERIAL_KEYSPAN_USA28X'
+drop_fw_file firmware/keyspan/usa49w.HEX firmware/keyspan/usa49w.fw
+clean_kconfig drivers/usb/serial/Kconfig 'USB_SERIAL_KEYSPAN_USA49W'
+drop_fw_file firmware/keyspan/usa49wlc.HEX firmware/keyspan/usa49wlc.fw
+clean_kconfig drivers/usb/serial/Kconfig 'USB_SERIAL_KEYSPAN_USA49WLC'
+clean_blob drivers/usb/serial/keyspan.c
+clean_kconfig drivers/usb/serial/Kconfig 'USB_SERIAL_KEYSPAN'
+clean_mk CONFIG_USB_SERIAL_KEYSPAN drivers/usb/serial/Makefile
+
+announce USB_SERIAL_EDGEPORT - "USB Inside Out Edgeport Serial Driver"
+clean_fw firmware/edgeport/boot.H16 firmware/edgeport/boot.fw
+clean_fw firmware/edgeport/boot2.H16 firmware/edgeport/boot2.fw
+clean_fw firmware/edgeport/down.H16 firmware/edgeport/down.fw
+clean_fw firmware/edgeport/down2.H16 firmware/edgeport/down2.fw
+reject_firmware drivers/usb/serial/io_edgeport.c
+clean_blob drivers/usb/serial/io_edgeport.c
+clean_kconfig drivers/usb/serial/Kconfig 'USB_SERIAL_EDGEPORT'
+clean_mk CONFIG_USB_SERIAL_EDGEPORT drivers/usb/serial/Makefile
+
+announce USB_SERIAL_EDGEPORT_TI - "USB Inside Out Edgeport Serial Driver (TI devices)"
+clean_fw firmware/edgeport/down3.bin.ihex firmware/edgeport/down3.bin
+reject_firmware drivers/usb/serial/io_ti.c
+clean_blob drivers/usb/serial/io_ti.c
+clean_kconfig drivers/usb/serial/Kconfig 'USB_SERIAL_EDGEPORT_TI'
+clean_mk CONFIG_USB_SERIAL_EDGEPORT_TI drivers/usb/serial/Makefile
+
+announce USB_SERIAL_TI - "USB TI 3410/5052 Serial Driver"
+drop_fw_file firmware/ti_3410.fw.ihex firmware/ti_3410.fw
+drop_fw_file firmware/ti_5052.fw.ihex firmware/ti_5052.fw
+drop_fw_file firmware/mts_cdma.fw.ihex firmware/mts_cdma.fw
+drop_fw_file firmware/mts_gsm.fw.ihex firmware/mts_gsm.fw
+drop_fw_file firmware/mts_edge.fw.ihex firmware/mts_edge.fw
+reject_firmware drivers/usb/serial/ti_usb_3410_5052.c
+clean_blob drivers/usb/serial/ti_usb_3410_5052.c
+clean_kconfig drivers/usb/serial/Kconfig 'USB_SERIAL_TI'
+clean_mk CONFIG_USB_SERIAL_TI drivers/usb/serial/Makefile
+
+announce USB_SERIAL_WHITEHEAT - "USB ConnectTech WhiteHEAT Serial Driver"
+clean_fw firmware/whiteheat.HEX firmware/whiteheat.fw
+clean_fw firmware/whiteheat_loader.HEX firmware/whiteheat_loader.fw
+clean_fw firmware/whiteheat_loader_debug.HEX firmware/whiteheat_loader_debug.fw
+clean_blob drivers/usb/serial/whiteheat.c
+clean_kconfig drivers/usb/serial/Kconfig 'USB_SERIAL_WHITEHEAT'
+clean_mk CONFIG_USB_SERIAL_WHITEHEAT drivers/usb/serial/Makefile
+
+# uwb
+
+announce UWB_I1480U - Support for Intel Wireless UWB Link 1480 HWA
+reject_firmware drivers/uwb/i1480/dfu/i1480-dfu.h
+reject_firmware drivers/uwb/i1480/dfu/mac.c
+reject_firmware drivers/uwb/i1480/dfu/phy.c
+clean_blob drivers/uwb/i1480/dfu/usb.c
+clean_kconfig drivers/uwb/Kconfig 'UWB_I1480U'
+clean_mk CONFIG_UWB_I1480U drivers/uwb/i1480/dfu/Makefile
+
+
+
+##############
+# RemoteProc #
+##############
+
+announce STE_MODEM_RPROC - "STE-Modem remoteproc support"
+maybe_reject_firmware drivers/remoteproc/remoteproc_core.c
+undefine_macro SPROC_MODEM_FIRMWARE "\"/*(DEBLOBBED)*/\"" \
+ "disabled non-Free firmware" drivers/remoteproc/ste_modem_rproc.c
+clean_kconfig drivers/remoteproc/Kconfig 'STE_MODEM_RPROC'
+clean_mk CONFIG_STE_MODEM_RPROC drivers/remoteproc/Makefile
+
+
+#########
+# Sound #
+#########
+
+announce SND_ASIHPI - "AudioScience ASIxxxx"
+reject_firmware sound/pci/asihpi/hpidspcd.c
+clean_blob sound/pci/asihpi/hpidspcd.c
+clean_blob sound/pci/asihpi/hpioctl.c
+clean_kconfig sound/pci/Kconfig 'SND_ASIHPI'
+clean_mk CONFIG_SND_ASIHPI sound/pci/asihpi/Makefile
+
+announce SND_CS46XX - "Cirrus Logic (Sound Fusion) CS4280/CS461x/CS462x/CS463x"
+# This appears to have been extracted from some non-Free driver
+clean_file sound/pci/cs46xx/cs46xx_image.h
+# The following blobs are definitely extracted from non-Free drivers.
+clean_file sound/pci/cs46xx/imgs/cwc4630.h
+clean_file sound/pci/cs46xx/imgs/cwcasync.h
+clean_file sound/pci/cs46xx/imgs/cwcsnoop.h
+clean_sed '
+/^\(int \)\?snd_cs46xx_download_image([^;]*$/,/^}$/{
+ /for.*BA1_MEMORY_COUNT/i\
+#if 0
+ /^}$/{
+ i\
+#else\
+ snd_printk(KERN_ERR "cs46xx: Missing Free firmware\\n");\
+ return -EINVAL;\
+#endif
+ }
+}
+s/cs46xx_dsp_load_module(chip, [&]cwc\(4630\|async\|snoop\)_module)/(snd_printk(KERN_ERR "cs46xx: Missing Free firmware\\n"),-EINVAL)/
+' sound/pci/cs46xx/cs46xx_lib.c 'report missing Free firmware'
+clean_blob sound/pci/cs46xx/cs46xx_lib.c
+clean_kconfig sound/pci/Kconfig 'SND_CS46XX'
+clean_mk 'CONFIG_SND_CS46XX' sound/pci/cs46xx/Makefile
+
+announce SND_KORG1212 - "Korg 1212 IO"
+drop_fw_file firmware/korg/k1212.dsp.ihex firmware/korg/k1212.dsp
+reject_firmware sound/pci/korg1212/korg1212.c
+clean_blob sound/pci/korg1212/korg1212.c
+clean_kconfig sound/pci/Kconfig 'SND_KORG1212'
+clean_mk 'CONFIG_SND_KORG1212' sound/pci/korg1212/Makefile
+
+announce SND_MAESTRO3 - "ESS Allegro/Maestro3"
+drop_fw_file firmware/ess/maestro3_assp_kernel.fw.ihex firmware/ess/maestro3_assp_kernel.fw
+drop_fw_file firmware/ess/maestro3_assp_minisrc.fw.ihex firmware/ess/maestro3_assp_minisrc.fw
+reject_firmware sound/pci/maestro3.c
+clean_blob sound/pci/maestro3.c
+clean_kconfig sound/pci/Kconfig 'SND_MAESTRO3'
+clean_mk 'CONFIG_SND_MAESTRO3' sound/pci/Makefile
+
+announce SND_YMFPCI - "Yamaha YMF724/740/744/754"
+drop_fw_file firmware/yamaha/ds1_ctrl.fw.ihex firmware/yamaha/ds1_ctrl.fw
+drop_fw_file firmware/yamaha/ds1_dsp.fw.ihex firmware/yamaha/ds1_dsp.fw
+drop_fw_file firmware/yamaha/ds1e_ctrl.fw.ihex firmware/yamaha/ds1e_ctrl.fw
+reject_firmware sound/pci/ymfpci/ymfpci_main.c
+clean_blob sound/pci/ymfpci/ymfpci_main.c
+clean_kconfig sound/pci/Kconfig 'SND_YMFPCI'
+clean_mk 'CONFIG_SND_YMFPCI' sound/pci/ymfpci/Makefile
+
+announce SND_SB16_CSP - "SB16 Advanced Signal Processor"
+drop_fw_file firmware/sb16/alaw_main.csp.ihex firmware/sb16/alaw_main.csp
+drop_fw_file firmware/sb16/mulaw_main.csp.ihex firmware/sb16/mulaw_main.csp
+drop_fw_file firmware/sb16/ima_adpcm_init.csp.ihex firmware/sb16/ima_adpcm_init.csp
+drop_fw_file firmware/sb16/ima_adpcm_capture.csp.ihex firmware/sb16/ima_adpcm_capture.csp
+drop_fw_file firmware/sb16/ima_adpcm_playback.csp.ihex firmware/sb16/ima_adpcm_playback.csp
+reject_firmware sound/isa/sb/sb16_csp.c
+clean_blob sound/isa/sb/sb16_csp.c
+clean_kconfig sound/isa/Kconfig 'SND_SB16_CSP'
+clean_mk 'CONFIG_SND_SB16_CSP' sound/isa/sb/Makefile
+
+announce SND_WAVEFRONT - "Turtle Beach Maui,Tropez,Tropez+ (Wavefront)"
+drop_fw_file firmware/yamaha/yss225_registers.bin.ihex firmware/yamaha/yss225_registers.bin
+reject_firmware sound/isa/wavefront/wavefront_fx.c
+clean_blob sound/isa/wavefront/wavefront_fx.c
+reject_firmware sound/isa/wavefront/wavefront_synth.c
+clean_blob sound/isa/wavefront/wavefront_synth.c
+clean_kconfig sound/isa/Kconfig 'SND_WAVEFRONT'
+clean_mk 'CONFIG_SND_WAVEFRONT' sound/isa/wavefront/Makefile
+
+announce SND_VX_LIB - Digigram VX soundcards
+reject_firmware sound/drivers/vx/vx_hwdep.c
+clean_blob sound/drivers/vx/vx_hwdep.c
+clean_kconfig sound/drivers/Kconfig 'SND_VX_LIB'
+clean_mk CONFIG_SND_VX_LIB sound/drivers/vx/Makefile
+
+announce SND_DARLA20 - "(Echoaudio) Darla20"
+clean_blob sound/pci/echoaudio/darla20.c
+clean_kconfig sound/pci/Kconfig 'SND_DARLA20'
+clean_mk CONFIG_SND_DARLA20 sound/pci/echoaudio/Makefile
+
+announce SND_DARLA24 - "(Echoaudio) Darla24"
+clean_blob sound/pci/echoaudio/darla24.c
+clean_kconfig sound/pci/Kconfig 'SND_DARLA24'
+clean_mk CONFIG_SND_DARLA24 sound/pci/echoaudio/Makefile
+
+announce SND_ECHO3G - "(Echoaudio) 3G cards"
+clean_blob sound/pci/echoaudio/echo3g.c
+clean_kconfig sound/pci/Kconfig 'SND_ECHO3G'
+clean_mk CONFIG_SND_ECHO3G sound/pci/echoaudio/Makefile
+
+announce SND_GINA20 - "(Echoaudio) Gina20"
+clean_blob sound/pci/echoaudio/gina20.c
+clean_kconfig sound/pci/Kconfig 'SND_GINA20'
+clean_mk CONFIG_SND_GINA20 sound/pci/echoaudio/Makefile
+
+announce SND_GINA24 - "(Echoaudio) Gina24"
+clean_blob sound/pci/echoaudio/gina24.c
+clean_kconfig sound/pci/Kconfig 'SND_GINA24'
+clean_mk CONFIG_SND_GINA24 sound/pci/echoaudio/Makefile
+
+announce SND_INDIGO - "(Echoaudio) Indigo"
+clean_blob sound/pci/echoaudio/indigo.c
+clean_kconfig sound/pci/Kconfig 'SND_INDIGO'
+clean_mk CONFIG_SND_INDIGO sound/pci/echoaudio/Makefile
+
+announce SND_INDIGODJ - "(Echoaudio) Indigo DJ"
+clean_blob sound/pci/echoaudio/indigodj.c
+clean_kconfig sound/pci/Kconfig 'SND_INDIGODJ'
+clean_mk CONFIG_SND_INDIGODJ sound/pci/echoaudio/Makefile
+
+announce SND_INDIGODJX - "(Echoaudio) Indigo DJx"
+clean_blob sound/pci/echoaudio/indigodjx.c
+clean_kconfig sound/pci/Kconfig 'SND_INDIGODJX'
+clean_mk CONFIG_SND_INDIGODJX sound/pci/echoaudio/Makefile
+
+announce SND_INDIGOIO - "(Echoaudio) Indigo IO"
+clean_blob sound/pci/echoaudio/indigoio.c
+clean_kconfig sound/pci/Kconfig 'SND_INDIGOIO'
+clean_mk CONFIG_SND_INDIGOIO sound/pci/echoaudio/Makefile
+
+announce SND_INDIGOIOX - "(Echoaudio) Indigo IOx"
+clean_blob sound/pci/echoaudio/indigoiox.c
+clean_kconfig sound/pci/Kconfig 'SND_INDIGOIOX'
+clean_mk CONFIG_SND_INDIGOIOX sound/pci/echoaudio/Makefile
+
+announce SND_LAYLA20 - "(Echoaudio) Layla20"
+clean_blob sound/pci/echoaudio/layla20.c
+clean_kconfig sound/pci/Kconfig 'SND_LAYLA20'
+clean_mk CONFIG_SND_LAYLA20 sound/pci/echoaudio/Makefile
+
+announce SND_LAYLA24 - "(Echoaudio) Layla24"
+clean_blob sound/pci/echoaudio/layla24.c
+clean_kconfig sound/pci/Kconfig 'SND_LAYLA24'
+clean_mk CONFIG_SND_LAYLA24 sound/pci/echoaudio/Makefile
+
+announce SND_MIA - "(Echoaudio) Mia"
+clean_blob sound/pci/echoaudio/mia.c
+clean_kconfig sound/pci/Kconfig 'SND_MIA'
+clean_mk CONFIG_SND_MIA sound/pci/echoaudio/Makefile
+
+announce SND_MONA - "(Echoaudio) Mona"
+clean_blob sound/pci/echoaudio/mona.c
+clean_kconfig sound/pci/Kconfig 'SND_MONA'
+clean_mk CONFIG_SND_MONA sound/pci/echoaudio/Makefile
+
+announce SND_'<(Echoaudio)>' - "(Echoaudio) all of the above "
+reject_firmware sound/pci/echoaudio/echoaudio.c
+clean_blob sound/pci/echoaudio/echoaudio.c
+
+announce SND_EMU10K1 - "Emu10k1 (SB Live!, Audigy, E-mu APS)"
+reject_firmware sound/pci/emu10k1/emu10k1_main.c
+clean_blob sound/pci/emu10k1/emu10k1_main.c
+clean_kconfig sound/pci/Kconfig 'SND_EMU10K1'
+clean_mk CONFIG_SND_EMU10K1 sound/pci/emu10k1/Makefile
+
+announce SND_MIXART - "Digigram miXart"
+reject_firmware sound/pci/mixart/mixart_hwdep.c
+clean_blob sound/pci/mixart/mixart_hwdep.c
+clean_kconfig sound/pci/Kconfig 'SND_MIXART'
+clean_mk CONFIG_SND_MIXART sound/pci/mixart/Makefile
+
+announce SND_PCXHR - "Digigram PCXHR"
+reject_firmware sound/pci/pcxhr/pcxhr_hwdep.c
+clean_blob sound/pci/pcxhr/pcxhr_hwdep.c
+clean_kconfig sound/pci/Kconfig 'SND_PCXHR'
+clean_mk CONFIG_SND_PCXHR sound/pci/pcxhr/Makefile
+
+announce SND_RIPTIDE - "Conexant Riptide"
+reject_firmware sound/pci/riptide/riptide.c
+clean_blob sound/pci/riptide/riptide.c
+clean_kconfig sound/pci/Kconfig 'SND_RIPTIDE'
+clean_mk CONFIG_SND_RIPTIDE sound/pci/riptide/Makefile
+
+# This is ok, patch filenames are supplied as module parameters, and
+# they are text files with patch instructions.
+#announce SND_HDA_PATCH_LOADER - "Support initialization patch loading for HD-audio"
+#reject_firmware sound/pci/hda/hda_hwdep.c
+#clean_kconfig sound/pci/hda/Kconfig 'SND_HDA_PATCH_LOADER'
+
+announce SND_HDSP - "RME Hammerfall DSP Audio"
+reject_firmware sound/pci/rme9652/hdsp.c
+clean_blob sound/pci/rme9652/hdsp.c
+clean_kconfig sound/pci/Kconfig 'SND_HDSP'
+clean_mk CONFIG_SND_HDSP sound/pci/rme9652/Makefile
+
+announce SND_AICA - "Dreamcast Yamaha AICA sound"
+reject_firmware sound/sh/aica.c
+clean_blob sound/sh/aica.c
+clean_kconfig sound/sh/Kconfig 'SND_AICA'
+clean_mk CONFIG_SND_AICA sound/sh/Makefile
+
+announce SND_MSND_PINNACLE - "Support for Turtle Beach MultiSound Pinnacle"
+clean_blob sound/isa/msnd/msnd_pinnacle.h
+reject_firmware sound/isa/msnd/msnd_pinnacle.c
+clean_blob sound/isa/msnd/msnd_pinnacle.c
+clean_kconfig sound/isa/Kconfig 'SND_MSND_PINNACLE'
+clean_mk CONFIG_SND_MSND_PINNACLE sound/isa/msnd/Makefile
+
+announce SND_MSND_CLASSIC - "Support for Turtle Beach MultiSound Classic, Tahiti, Monterey"
+clean_blob sound/isa/msnd/msnd_classic.h
+clean_kconfig sound/isa/Kconfig 'SND_MSND_CLASSIC'
+clean_mk CONFIG_SND_MSND_CLASSIC sound/isa/msnd/Makefile
+
+announce SOUND_MSNDCLAS - "Support for Turtle Beach MultiSound Classic, Tahiti, Monterey (oss)"
+clean_blob sound/oss/msnd_classic.h
+clean_kconfig sound/oss/Kconfig 'SOUND_MSNDCLAS'
+clean_sed '
+/^config MSNDCLAS_INIT_FILE$/, /^config / {
+ /^ default.*msndinit\.bin/ s,".*","/*(DEBLOBBED)*/",;
+}
+/^config MSNDCLAS_PERM_FILE$/, /^config / {
+ /^ default.*msndperm\.bin/ s,".*","/*(DEBLOBBED)*/",;
+}' sound/oss/Kconfig 'removed default firmware'
+clean_mk CONFIG_SOUND_MSNDCLAS sound/oss/Makefile
+
+announce SOUND_MSNDPIN - "Support for Turtle Beach MultiSound Pinnacle (oss)"
+clean_blob sound/oss/msnd_pinnacle.h
+clean_kconfig sound/oss/Kconfig 'SOUND_MSNDPIN'
+clean_sed '
+/^config MSNDPIN_INIT_FILE$/, /^config / {
+ /^ default.*pndspini\.bin/ s,".*","/*(DEBLOBBED)*/",;
+}
+/^config MSNDPIN_PERM_FILE$/, /^config / {
+ /^ default.*pndsperm\.bin/ s,".*","/*(DEBLOBBED)*/",;
+}' sound/oss/Kconfig 'removed default firmware'
+clean_mk CONFIG_SOUND_MSNDPIN sound/oss/Makefile
+
+announce SND_SSCAPE - "Ensoniq SoundScape driver"
+reject_firmware sound/isa/sscape.c
+clean_blob sound/isa/sscape.c
+clean_sed '
+/^config SND_SSCAPE$/, /^config / {
+ s,"\(scope\|sndscape\)\.co[d?]","/*(DEBLOBBED)*/",g;
+}' sound/isa/Kconfig 'removed firmware names'
+clean_kconfig sound/isa/Kconfig 'SND_SSCAPE'
+clean_mk CONFIG_SND_SSCAPE sound/isa/Makefile
+
+announce SND_SOC_ADAU1701 - "ADAU1701 SigmaDSP processor"
+clean_blob sound/soc/codecs/adau1701.c
+clean_kconfig sound/soc/codecs/Kconfig 'SND_SOC_ADAU1701'
+clean_mk CONFIG_SND_SOC_ADAU1701 sound/soc/codecs/Makefile
+
+announce SND_SOC_SIGMADSP - "SigmaStudio firmware loader"
+maybe_reject_firmware sound/soc/codecs/sigmadsp.c
+
+announce SND_SOC_WM0010 - "WM0010 DSP driver"
+reject_firmware sound/soc/codecs/wm0010.c
+clean_blob sound/soc/codecs/wm0010.c
+clean_kconfig sound/soc/codecs/Kconfig 'SND_SOC_WM0010'
+clean_mk CONFIG_SND_SOC_WM0010 sound/soc/codecs/Makefile
+
+# It's not clear that wm2000_anc.bin is pure data.
+# Check with developer, clean up for now.
+announce SND_SOC_WM2000 - "WM2000 ALSA Soc Audio codecs"
+reject_firmware sound/soc/codecs/wm2000.c
+clean_blob sound/soc/codecs/wm2000.c
+clean_kconfig sound/soc/codecs/Kconfig 'SND_SOC_WM2000'
+clean_mk CONFIG_SND_SOC_WM2000 sound/soc/codecs/Makefile
+
+announce SND_SOC_WM8994 - "WM8994 ALSA Soc Audio codecs"
+reject_firmware sound/soc/codecs/wm8958-dsp2.c
+clean_blob sound/soc/codecs/wm8958-dsp2.c
+clean_kconfig sound/soc/codecs/Kconfig 'SND_SOC_WM8994'
+clean_mk CONFIG_SND_SOC_WM8994 sound/soc/codecs/Makefile
+
+# The coeff files might be pure data, but the wmfw surely aren't.
+announce SND_SOC_WM_ADSP - "Wolfson ADSP support"
+reject_firmware sound/soc/codecs/wm_adsp.c
+clean_blob sound/soc/codecs/wm_adsp.c
+clean_kconfig sound/soc/codecs/Kconfig 'SND_SOC_WM_ADSP'
+clean_mk CONFIG_SND_SOC_WM_ADSP sound/soc/codecs/Makefile
+
+announce SND_SOC_SH4_SIU - "ALSA SoC driver for Renesas SH7343, SH7722 SIU peripheral"
+reject_firmware sound/soc/sh/siu_dai.c
+clean_blob sound/soc/sh/siu_dai.c
+clean_kconfig sound/soc/sh/Kconfig 'SND_SOC_SH4_SIU'
+clean_mk CONFIG_SND_SOC_SH4_SIU sound/soc/sh/Makefile
+
+announce SOUND_TRIX - "MediaTrix AudioTrix Pro support"
+clean_blob sound/oss/trix.c
+clean_kconfig sound/oss/Kconfig 'SOUND_TRIX'
+clean_sed '
+/^config TRIX_BOOT_FILE$/, /^config / {
+ /^ default.*trxpro\.hex/ s,".*","/*(DEBLOBBED)*/",;
+}' sound/oss/Kconfig 'removed default firmware'
+clean_mk CONFIG_SOUND_TRIX sound/oss/Makefile
+
+announce SOUND_TRIX - "See above,"
+announce SOUND_PAS - "ProAudioSpectrum 16 support,"
+announce SOUND_SB - "100% Sound Blaster compatibles (SB16/32/64, ESS, Jazz16) support"
+clean_blob sound/oss/sb_common.c
+clean_kconfig sound/oss/Kconfig 'SOUND_PAS'
+clean_kconfig sound/oss/Kconfig 'SOUND_SB'
+clean_mk CONFIG_SOUND_PAS sound/oss/Makefile
+clean_mk CONFIG_SOUND_SB sound/oss/Makefile
+
+announce SOUND_PSS - "PSS (AD1848, ADSP-2115, ESC614) support"
+clean_sed 's,^\( [*] .*synth"\)\.$,\1/*.,' sound/oss/pss.c 'avoid nested comments'
+clean_blob sound/oss/pss.c
+clean_kconfig sound/oss/Kconfig 'SOUND_PSS'
+clean_sed '
+/^config PSS_BOOT_FILE$/, /^config / {
+ /^ default.*dsp001\.ld/ s,".*","/*(DEBLOBBED)*/",;
+}' sound/oss/Kconfig 'removed default firmware'
+clean_mk CONFIG_SOUND_PSS sound/oss/Makefile
+
+announce SND_USB_6FIRE - "TerraTec DMX 6Fire USB"
+reject_firmware sound/usb/6fire/firmware.c
+clean_blob sound/usb/6fire/firmware.c
+clean_kconfig sound/usb/Kconfig 'SND_USB_6FIRE'
+clean_mk 'CONFIG_SND_USB_6FIRE' sound/usb/6fire/Makefile
+
+#################
+# Documentation #
+#################
+
+announce Documentation - "non-Free firmware scripts and documentation"
+clean_blob Documentation/dvb/avermedia.txt
+clean_blob Documentation/dvb/opera-firmware.txt
+clean_blob Documentation/sound/alsa/ALSA-Configuration.txt
+clean_blob Documentation/sound/oss/MultiSound
+clean_blob Documentation/sound/oss/PSS
+clean_blob Documentation/sound/oss/PSS-updates
+clean_blob Documentation/sound/oss/README.OSS
+clean_file Documentation/dvb/get_dvb_firmware
+clean_file Documentation/video4linux/extract_xc3028.pl
+clean_sed s,usb8388,whatever,g drivers/base/Kconfig 'removed blob name'
+clean_blob firmware/README.AddingFirmware
+clean_blob firmware/WHENCE
+
+if $errors; then
+ echo errors above were ignored because of --force >&2
+fi
+
+exit 0
diff --git a/freed-ora/current/master/deblob-check b/freed-ora/current/master/deblob-check
index 794eab404..ee62c57fa 100755
--- a/freed-ora/current/master/deblob-check
+++ b/freed-ora/current/master/deblob-check
@@ -1,13 +1,13 @@
#! /bin/sh
-# deblob-check version 2012-11-27
+# deblob-check version 2013-02-06
# Inspired in gNewSense's find-firmware script.
# Written by Alexandre Oliva <lxoliva@fsfla.org>
# Check http://www.fsfla.org/svn/fsfla/software/linux-libre for newer
# versions.
-# Copyright 2008-2012 Alexandre Oliva <lxoliva@fsfla.org>
+# Copyright 2008-2013 Alexandre Oliva <lxoliva@fsfla.org>
#
# This program is part of GNU Linux-libre, a GNU project that
# publishes scripts to clean up Linux so as to make it suitable for
@@ -1864,7 +1864,7 @@ set_except () {
defsnc 'static[ ]const[ ]u8[ ]viaLUT\[\][ ]=' drivers/hwmon/via686a.c
initnc 'static[ ]struct[ ][{][ ]int[ ]xres,[ ]yres,[ ]left,[ ]right,[ ]upper,[ ]lower,[ ]hslen,[ ]vslen,[ ]vfreq[;][ ][}][ ]timmings\[\][ ]__initdata[ ]=[ ][{]'
initnc 'static[ ]struct[ ]platinum_regvals[ ]platinum_reg_init_[0-9]*[ ]=[ ][{]'
- initnc '[}][ ]sisfb_ddc[sf]modes\[\][ ]__devinitdata[ ]='
+ defsnc '[}][ ]sisfb_ddc[sf]modes\[\][ ]\(__devinitdata[ ]\)\?=' drivers/video/sis/sis_main.h
defsnc 'static[ ]struct[ ]dvb_pll_desc[ ][^\n]*[ ]=[ ][{]' drivers/media/dvb/frontends/dvb-pll.c
initnc 'static[ ]u32[ ]LABELPATCHES\[\][ ]__attribute[(][(]unused[)][)][ ]='
@@ -2242,7 +2242,7 @@ set_except () {
blobname 'mwl8k[/]\(helper\|fmimage\)_\(%u\|[0-9]\+\)\.fw' drivers/net/wireless/mwl8k.c
blobname '3826\.arm' 'drivers/\(net/wireless/p54/p54spi\|staging/stlc45xx/stlc45xx\)\.c'
defsnc 'static[ ]unsigned[ ]char[ ]p54spi_eeprom\[\][ ]=' drivers/net/wireless/p54/p54spi_eeprom.h
- blobname '\(comedi[/]\)\?jr3pci\.idm' drivers/staging/comedi/drivers/jr3_pci.c
+ blobname '\(comedi[/]\)\?jr3pci\.idm\(["]\.[\n][ ][*][/]\)\?' drivers/staging/comedi/drivers/jr3_pci.c
blobname 'usbdux\(fast\)\?_firmware\.\(hex\|bin\)' 'drivers/staging/comedi/drivers/usbdux\(fast\)\?\.c'
blobname 'RT30xxEEPROM\.bin' drivers/staging/rt3070/common/eeprom.c
defsnc 'static[ ]const[ ]u8[ ]default_cal_\(channels\|rssi\)\[\][ ]=' drivers/staging/stlc45xx/stlc45xx.c
@@ -2346,7 +2346,7 @@ set_except () {
defsnc 'static[ ]long[ ]limiter_times\[\][ ]=' drivers/media/radio/si4713-i2c.c
blobname 'c[tb]fw\(_\(fc\|cna\)\)\?\.bin' drivers/scsi/bfa/bfad_fwimg.c
defsnc 'static[ ]const[ ]u16[ ]\(VDCDC[1x]\|LDO[12]\)_VSEL_table\[\][ ]=' 'drivers/regulator/tps650\(23\|7x\)-regulator\.c'
- defsnc 'static[ ]struct[ ]lms283gf05_seq[ ]disp_\(init\|pwdn\)seq\[\][ ]=' drivers/video/backlight/lms283gf05.c
+ defsnc 'static[ ]\(const[ ]\)\?struct[ ]lms283gf05_seq[ ]disp_\(init\|pwdn\)seq\[\][ ]=' drivers/video/backlight/lms283gf05.c
defsnc '[}][ ]csc_table\[\][ ]=' drivers/video/msm/mdp_csc_table.h
defsnc '\(static[ ]\)\?struct[ ]mdp_table_entry[ ]mdp_\(\(upscale\|gaussian_blur\)_table\|downscale_[xy]_table_PT[2468]TO\(PT[468]\|1\)\)\[\][ ]=' drivers/video/msm/mdp_scale_tables.c
accept '[ ][ ]card->firmware[ ]=[ ]data->firmware[;]' drivers/bluetooth/btmrvl_sdio.c
@@ -2431,7 +2431,7 @@ set_except () {
# New in 2.6.34
blobname 'mts_mt9234\(mu\|zba\)\.fw' drivers/usb/serial/ti_usb_3410_5052.c
- blobname 'cxgb4[/]t4fw\.bin' drivers/net/cxgb4/cxgb4_main.c
+ blobname 'cxgb4[/]t4fw\.bin' 'drivers/\(net/cxgb4/cxgb4_main\.c\|scsi/csiostor/csio_hw\.h\)'
defsnc '[ ]static[ ]const[ ]unsigned[ ]int[ ]reg_ranges\[\][ ]=' drivers/net/cxgb4/cxgb4_main.c
defsnc '[ ]static[ ]const[ ]unsigned[ ]int[ ]avg_pkts\[NCCTRL_WIN\][ ]=' drivers/net/cxgb4/t4_hw.c
# above in -rc5
@@ -2507,23 +2507,23 @@ set_except () {
defsnc '[ ]*static[ ]const[ ]char[ ]sha256_zero\[SHA256_DIGEST_SIZE\][ ]=' drivers/crypto/n2_core.c
defsnc '[}][ ]XGI\(fb_vrate\|_TV_filter\)\[\][ ]=' drivers/staging/xgifb/XGI_main.h
defsnc '\(static[ ]\)\?\(USHORT\|unsigned[ ]short\)[ ]XGINew_\(MD\|[CEV]G\)A_DAC\[\][ ]*=' drivers/staging/xgifb/vb_setmode.c
- defsnc '\(static[ ]\)\?\(struct[ ]\)\?XGI_[ME]CLKDataStruct[ ]XGI\(3[34]0\|27\)\(New\)\?_[ME]CLKData\[\][ ]*=' drivers/staging/xgifb/vb_table.h
- defsnc '\(static[ ]\)\?\(UCHAR\|unsigned[ ]char\)[ ]XGI340_CR6[BE]\[8\]\[4\][ ]*=' drivers/staging/xgifb/vb_table.h
- defsnc '\(static[ ]\)\?\(UCHAR\|unsigned[ ]char\)[ ]XGI340_CR6F\[8\]\[32\][ ]*=' drivers/staging/xgifb/vb_table.h
+ defsnc '\(static[ ]\)\?\(const[ ]\)\?\(struct[ ]\)\?XGI_[ME]CLKData\(Struct\)\?[ ]XGI\(3[34]0\|27\)\(New\)\?_[ME]CLKData\[\][ ]*=' drivers/staging/xgifb/vb_table.h
+ defsnc '\(static[ ]\)\?\(const[ ]\)\?\(UCHAR\|unsigned[ ]char\)[ ]XGI340_CR6[BE]\[8\]\[4\][ ]*=' drivers/staging/xgifb/vb_table.h
+ defsnc '\(static[ ]\)\?\(const[ ]\)\?\(UCHAR\|unsigned[ ]char\)[ ]XGI340_CR6F\[8\]\[32\][ ]*=' drivers/staging/xgifb/vb_table.h
defsnc '\(static[ ]\)\?\(UCHAR\|unsigned[ ]char\)[ ]XGI330\(New\)\?_SR15\(_1\)\?\[8\]\[8\][ ]*=' drivers/staging/xgifb/vb_table.h
defsnc '\(static[ ]\)\?\(UCHAR\|unsigned[ ]char\)[ ]XGI330_cr40_1\[15\]\[8\][ ]*=' drivers/staging/xgifb/vb_table.h
- defsnc '\(static[ ]\)\?\(struct[ ]\)\?XGI_StStruct[ ]XGI330_SModeIDTable\[\][ ]*=' drivers/staging/xgifb/vb_table.h
- defsnc '\(static[ ]\)\?\(struct[ ]\)\?XGI_ExtStruct[ ][ ]XGI330_EModeIDTable\[\][ ]*=' drivers/staging/xgifb/vb_table.h
- defsnc '\(static[ ]\)\?\(struct[ ]\)\?XGI_StandTableStruct[ ]XGI330_StandTable\[\][ ]*=' drivers/staging/xgifb/vb_table.h
- defsnc '\([/][*]\)\?\(static[ ]\)\?\(struct[ ]\)\?XGI330_LCDDataStruct[ ][ ]XGI_\(\(St2\?\|Ext\)LCD\(1024x768\|1280x1024\)\|NoScaling\)Data\[\][ ]*=' drivers/staging/xgifb/vb_table.h
+ defsnc '\(static[ ]\)\?\(const[ ]\)\?\(struct[ ]\)\?XGI_StStruct[ ]XGI330_SModeIDTable\[\][ ]*=' drivers/staging/xgifb/vb_table.h
+ defsnc '\(static[ ]\)\?\(const[ ]\)\?\(struct[ ]\)\?XGI_ExtStruct[ ][ ]\?XGI330_EModeIDTable\[\][ ]*=' drivers/staging/xgifb/vb_table.h
+ defsnc '\(static[ ]\)\?\(const[ ]\)\?\(struct[ ]\)\?\(XGI\|SiS\)_StandTable\(Struct\|_S\)[ ]XGI330_StandTable\(\[\]\)\?[ ]*=' drivers/staging/xgifb/vb_table.h
+ defsnc '\([/][*]\)\?\(static[ ]\)\?\(const[ ]\)\?\(struct[ ]\)\?\(XGI330\|SiS\)_LCDData\(Struct\)\?[ ][ ]\?XGI_\(\(St2\?\|Ext\)LCD\(1024x768\|1280x1024\)\|NoScaling\)Data\[\][ ]*=' drivers/staging/xgifb/vb_table.h
defsnc '\(static[ ]\)\?\(struct[ ]\)\?XGI330_TVDataStruct[ ][ ]XGI_\(St\|Ext\)\(PAL\|NTSC\|YPbPr\(525[ip]\|750p\)\)Data\[\][ ]*=' drivers/staging/xgifb/vb_table.h
defsnc '\(static[ ]\)\?\(UCHAR\|unsigned[ ]char\)[ ]XGI330_\(NTSC\|PAL\|HiTV\(Ext\|St[12]\|Text\)\|YPbPr\(750p\|525[ip]\)\)Timing\[\][ ][ ]*=' drivers/staging/xgifb/vb_table.h
defsnc '\(static[ ]\)\?\(UCHAR\|unsigned[ ]char\)[ ]XGI330_HiTVGroup3\(Data\|Simu\|Text\)\[\][ ]*=' drivers/staging/xgifb/vb_table.h
defsnc '\(static[ ]\)\?\(UCHAR\|unsigned[ ]char\)[ ]XGI330_Ren\(525\|750\)pGroup3\[\][ ]*=' drivers/staging/xgifb/vb_table.h
defsnc '\(static[ ]\)\?\(struct[ ]\)\?XGI_PanelDelayTblStruct[ ]XGI330_PanelDelayTbl\[\]' drivers/staging/xgifb/vb_table.h
- defsnc '\(static[ ]\)\?\(struct[ ]\)\?XGI330_LVDSDataStruct[ ][ ]XGI\(330\)\?_LVDS\(320x480\|800x600\|1024x768\|1280x\(1024\|768[NS]\?\)\|1400x1050\|640x480\)Data_[12]\[\][ ]*=' drivers/staging/xgifb/vb_table.h
+ defsnc '\(static[ ]\)\?\(const[ ]\)\?\(struct[ ]\)\?\(XGI330\|SiS\)_LVDSData\(Struct\)\?[ ][ ]\?XGI\(330\)\?_LVDS\(320x480\|800x600\|1024x768\|1280x\(1024\|768[NS]\?\)\|1400x1050\|640x480\)Data_[12]\[\][ ]*=' drivers/staging/xgifb/vb_table.h
defsnc '\(static[ ]\)\?\(struct[ ]\)\?XGI_LVDSCRT1DataStruct[ ][ ]XGI_CHTVCRT1[UO]\(NTSC\|PAL\)\[\][ ]*=' drivers/staging/xgifb/vb_table.h
- defsnc '\(static[ ]\)\?\(struct[ ]\)\?XGI_ModeResInfoStruct[ ]XGI330_ModeResInfo\[\][ ]*=' drivers/staging/xgifb/vb_table.h
+ defsnc '\(static[ ]\)\?\(const[ ]\)\?\(struct[ ]\)\?XGI_ModeResInfo\(Struct\|_S\)[ ]XGI330_ModeResInfo\[\][ ]*=' drivers/staging/xgifb/vb_table.h
defsnc '\(static[ ]\)\?\(USHORT\|unsigned[ ]short\)[ ]XGINew_DRAMType\[17\]\[5\][ ]*=' 'drivers/staging/xgifb/\(vb_table\.h\|vb_init\.c\)'
defsnc '\(static[ ]\)\?\(USHORT\|unsigned[ ]short\)[ ]XGINew_SDRDRAM_TYPE\[13\]\[5\][ ]*=' 'drivers/staging/xgifb/\(vb_table\.h\|vb_init\.c\)'
defsnc '\(static[ ]\)\?\(USHORT\|unsigned[ ]short\)[ ]XGINew_DDRDRAM_TYPE20\[12\]\[5\][ ]*=' 'drivers/staging/xgifb/\(vb_table\.h\|vb_init\.c\)'
@@ -2842,7 +2842,6 @@ set_except () {
accept 'struct[ ]isci_orom[ ][*]isci_request_firmware[(]' 'drivers/scsi/isci/probe_roms\.[ch]'
accept '[ ]if[ ][(]request_firmware[(][&]fw[,][ ]ISCI_FW_NAME[,]' drivers/scsi/isci/probe_roms.c
accept '#define[ ]ISCI_FW_NAME[ ][ ]["]isci[/]isci_firmware\.bin["]' drivers/scsi/isci/probe_roms.h
- defsnc 'static[ ]struct[ ]XGI_ExtStruct[ ]XGI330_EModeIDTable\[\][ ]=' drivers/staging/xgifb/vb_table.h
defsnc 'static[ ]struct[ ]pll_limit[ ]\(cle266\|k800\|cx700\|vx855\)_pll_limits\[\][ ]=' drivers/video/via/hw.c
accept '[ ][ ]-e[ ]["][$]tmp_dir[/]lib[/]modules[/][$]KERNELRELEASE[/]modules\.dep\.bin["]' scripts/depmod.sh
blobname 'wm8958_\(enh_eq\|mbc\(_vss\)\?\)\.wfw' sound/soc/codecs/wm8958-dsp2.c
@@ -3047,9 +3046,8 @@ set_except () {
blobname 'TINfcInit_%d\.%d\.%d\.%d\.bts' drivers/nfc/nfcwilink.c
defsnc 'static[ ]int[ ]ab8500_\(charger\|fg_lowbat\)_voltage_map\[\][ ]=' drivers/power/ab8500_charger.c
defsnc '[ ]static[ ]const[ ]u8[ ]parity\[\][ ]=' drivers/staging/sep/sep_crypto.c
- defsnc 'static[ ]struct[ ]SiS_MCLKData[ ]XGI\(340\|27\)New_MCLKData\[\][ ]=' drivers/staging/xgifb/vb_table.h
- defsnc 'static[ ]struct[ ]SiS_StandTable_S[ ]XGI330_StandTable\[\][ ]=' drivers/staging/xgifb/vb_table.h
- defsnc 'static[ ]struct[ ]SiS_ModeResInfo_S[ ]XGI330_ModeResInfo\[\][ ]=' drivers/staging/xgifb/vb_table.h
+ defsnc 'static[ ]\(const[ ]\)\?struct[ ]SiS_MCLKData[ ]XGI\(340\|27\)New_MCLKData\[\][ ]=' drivers/staging/xgifb/vb_table.h
+ defsnc 'static[ ]\(const[ ]\)\?struct[ ]SiS_ModeResInfo_S[ ]XGI330_ModeResInfo\[\][ ]=' drivers/staging/xgifb/vb_table.h
defsnc 'static[ ]const[ ]u8[ ]dim_table\[101\][ ]=' drivers/video/backlight/ot200_bl.c
defsnc '[ ]static[ ]const[ ]unsigned[ ]char[ ]data_to_send\[\][ ]=' drivers/video/exynos/s6e8ax0.c
accept '[ ]ret[ ]=[ ]request_firmware\([(][&]firmware_p[,][ ]rproc->firmware[,][ ]dev[)]\|_nowait[(]THIS_MODULE[,][ ]FW_ACTION_HOTPLUG[,][\n][ ]*rproc->firmware[,][ ]dev[,][ ]GFP_KERNEL[,][\n][ ]*rproc[,][ ]rproc_fw_config_virtio[)]\)[;][\n][ ]if[ ][(]ret[ ]<[ ]0[)][ ][{][\n][ ][ ]dev_err[(]dev[,][ ]["]request_firmware\(_nowait\)\?[ ]failed' drivers/remoteproc/remoteproc_core.c
@@ -3088,12 +3086,11 @@ set_except () {
defsnc '[ ][}][ ]hw_config\[\][ ]=' drivers/nfc/pn544_hci.c
defsnc 'static[ ]const[ ]unsigned[ ]\(rgmii\|smii_0_1_2\|nand_8bit\|mcif\|pci_sata\|clcd\|arm_trace\|miphy_dbg\|emi\)_pins\[\][ ]=' drivers/pinctrl/spear/pinctrl-spear1310.c
defsnc 'static[ ]const[ ]long[ ]chan_freq_list\[\]\[2\][ ]=' drivers/staging/wlags49_h2/wl_util.c
- defsnc 'static[ ]struct[ ]SiS_StandTable_S[ ]XGI330_StandTable[ ]=' drivers/staging/xgifb/vb_table.h
defsnc '[ ]static[ ]const[ ]unsigned[ ]char[ ]data_to_send_panel_reverse\[\][ ]=' drivers/video/exynos/s6e8ax0.c
defsnc 'static[ ]const[ ]unsigned[ ]short[ ]__devinitconst[ ]SiS_DRAMType\[17\]\[5\][ ]=' drivers/video/sis/sis_main.c
defsnc 'static[ ]struct[ ]reg_default[ ]lm49453_reg_defs\[\][ ]=' sound/soc/codecs/lm49453.c
accept '-[ ]Replace[ ]hard-coded[ ]firmware[ ]paths[ ]with[ ]request_firmware' drivers/staging/gdm72xx/TODO
- blobname '\([/]lib[/]firmware[/]\)\?gdm72xx[/]gdms\(krn\|rfs\)\.bin' drivers/staging/gdm72xx/sdio_boot.c
+ blobname '\([/]lib[/]firmware[/]\)\?\(gdm72xx[/]\)\?gdms\(krn\|rfs\)\.bin' drivers/staging/gdm72xx/sdio_boot.c
blobname '\([/]lib[/]firmware[/]\)\?gdm72xx[/]gdmuimg\.bin' drivers/staging/gdm72xx/usb_boot.c
blobname 'mrvl[/]usb8797_uapsta\.bin' 'drivers/net/wireless/mwifiex/usb\.[ch]'
# This is compiled and assembled out of actual sources as part of the build.
@@ -3127,7 +3124,7 @@ set_except () {
blobname 'ti-connectivity[/]wl18xx-\(fw\|conf\)\.bin' drivers/net/wireless/wl18xx/main.c
defsnc 'static[ ]const[ ]unsigned[ ]int[ ]\(ldo5\|buck1\)_voltage_map\[\][ ]=' drivers/regulator/lp3972.c
defsnc 'static[ ]const[ ]unsigned[ ]int[ ]\(lp872x_ldo\|lp8720_ldo4\|lp8725_\(lilo\|buck\)\)_vtbl\[\][ ]=' drivers/regulator/lp872x.c
- defsnc 'const[ ]int[ ]lp8788_dldo1239_vtbl\[\][ ]=' drivers/regulator/lp8788-ldo.c
+ defsnc '\(static[ ]\)\?const[ ]int[ ]lp8788_dldo1239_vtbl\[\][ ]=' drivers/regulator/lp8788-ldo.c
defsnc 'static[ ]const[ ]unsigned[ ]int[ ]mc13892_sw1\?\[\][ ]=' drivers/regulator/mc13892-regulator.c
defsnc 'static[ ]const[ ]unsigned[ ]int[ ]VCORE_VSEL_table\[\][ ]=' drivers/regulator/tps65023-regulator.c
defsnc 'static[ ]const[ ]unsigned[ ]int[ ]VDCDCx_VSEL_table\[\][ ]=' drivers/regulator/tps6507x-regulator.c
@@ -3139,7 +3136,6 @@ set_except () {
defsnc 'omap4460_adc_to_temp\[OMAP4460_ADC_END_VALUE[ ]-[ ]OMAP4460_ADC_START_VALUE[ ][+][ ]1\][ ]=' drivers/staging/oma-thermal/omap4-thermal.c
defsnc 'omap5430_adc_to_temp\[OMAP5430_ADC_END_VALUE[ ]-[ ]OMAP5430_ADC_START_VALUE[ ][+][ ]1\][ ]=' drivers/staging/oma-thermal/omap5-thermal.c
defsnc 'static[ ]struct[ ]vesa_mode[ ]vesa_mode_table\[\][ ]=' drivers/staging/sm7xxfb/sm7xxfb.c
- defsnc 'static[ ]struct[ ]SiS_\(LCD\|LVDS\)Data[ ][ ]*XGI_\(\(\(St\|Ext\)LCD\|LVDS\)\(1024x768\|1280x1024\|1400x1050\)\|NoScaling\)Data\(_[12]\)\?\[\][ ]=' drivers/staging/xgifb/vb_table.h
defsnc 'static[ ]unsigned[ ]char[ ]rdesc\[\][ ]=' samples/uhid/uhid-example.c
defsnc 'static[ ]struct[ ]reg_default[ ]isabelle_reg_defs\[\][ ]=' sound/soc/codecs/isabelle.c
blobname 'dvb-usb-terratec-htc-stick-drxk\.fw' drivers/media/video/em28xx/em28xx-dvb.c
@@ -3204,7 +3200,7 @@ set_except () {
defsnc 'static[ ]const[ ]unsigned[ ]char[ ]XGI330_\(HiTV\|Ren\(525\|750\)p\)Group3\(Data\|Simu\|Text\)\?\[\][ ]=' drivers/staging/xgifb/vb_table.h
accept 'static[ ]inline[ ]int[\n]\(maybe_\)\?reject_ihex_firmware\(_nowait\)\?[(][^{;]*[)][\n][{]\([\n]\+[^\n}][^\n]*\)*[^\n]*[\n]\+[}]' include/linux/firmware.h
defsnc '[/][*][ ]callback[ ]from[ ]request_firmware_nowait' sound/pci/hda/hda_intel.c
- defsnc 'static[ ]int[ ]__devinit[ ]azx_probe[(][^)]*[)][\n][{]\([\n]\+[^\n}][^\n]*\)*[^\n]*request_firmware[^\n]*' sound/pci/hda/hda_intel.c
+ defsnc 'static[ ]int[ ]\(__devinit[ ]\)\?azx_probe[(][^)]*[)][\n][{]\([\n]\+[^\n}][^\n]*\)*[^\n]*request_firmware[^\n]*' sound/pci/hda/hda_intel.c
defsnc 'static[ ]struct[ ]reg_default[ ]da9055_reg_defaults\[\][ ]=' sound/soc/codecs/da9055.c
defsnc 'static[ ]const[ ]struct[ ]reg_default[ ]sta32x_regs\[\][ ]=' sound/soc/codecs/sta32x.c
blobname 'wm0010\(_stage2\.bin\|\.dfw\)' sound/soc/codecs/wm0010.c
@@ -3230,12 +3226,132 @@ set_except () {
blobname 'CMV4[pi]\.bin\(\.v2\)\?' drivers/usb/atm/ueagle-atm.c
blobname 'dvb-fe-tda10071\.fw' drivers/media/dvb/frontends/tda10071_priv.h
accept '[ ]st->it913x_config\.firmware[ ]=' drivers/media/usb/dvb-usb-v2/it913x.c
+ blobname 'ar3k[/]\(AthrBT_0x%08x\.dfu\|ramps_0x%08x_%d%s\)' drivers/bluetooth/ath3k.c
+
+ # New in 3.8
+ accept 'K_table:\([\n][ ]*\.quad[ ]*0x[0-9a-f]*[,]0x[0-9a-f]*\)*' arch/x86/crypto/crc32c-pcl-intel-asm_64.S
+ defsnc 'const[ ]u32[ ]cast_s[1234]\[256\][ ]=' crypto/cast_common.c
+ accept '[ ]request_firmware[ ]can[ ]be[ ]called[ ]safely' Documentation/firmware_class/README
+ defsnc 'static[ ]const[ ]int[ ]__initconst[ ]armada_370_xp_\(nb\|h\|dram\)clk_ratios\[32\]\[2\][ ]=' drivers/clk/mvebu/clk-core.c
+ defsnc 'static[ ]const[ ]int[ ]__initconst[ ]\(dove\|kirkwood\)_cpu_ddr_ratios\[16\]\[2\][ ]=' drivers/clk/mvebu/clk-core.c
+ defsnc 'static[ ]const[ ]int[ ]h_coef_8t\[GSC_COEF_RATIO\]\[GSC_COEF_ATTR\]\[GSC_COEF_H_8T\][ ]=' drivers/gpu/drm/exynos/exynos_drm_gsc.c
+ defsnc 'static[ ]const[ ]int[ ]v_coef_4t\[GSC_COEF_RATIO\]\[GSC_COEF_ATTR\]\[GSC_COEF_V_4T\][ ]=' drivers/gpu/drm/exynos/exynos_drm_gsc.c
+ defsnc 'static[ ]const[ ]struct[ ]atl1c_platform_patch[ ]plats\[\][ ]=' drivers/net/ethernet/atheros/atl1c/atl1c_main.c
+ defsnc 'u32[ ]RTL8723EPHY_REG_1TARRAY\[RTL8723E_PHY_REG_1TARRAY_LENGTH\][ ]=' drivers/net/wireless/rtlwifi/rtl8723ae/table.c
+ defsnc 'u32[ ]RTL8723EPHY_REG_ARRAY_PG\[RTL8723E_PHY_REG_ARRAY_PGLENGTH\][ ]=' drivers/net/wireless/rtlwifi/rtl8723ae/table.c
+ defsnc 'u32[ ]RTL8723E_RADIOA_1TARRAY\[Rtl8723ERADIOA_1TARRAYLENGTH\][ ]=' drivers/net/wireless/rtlwifi/rtl8723ae/table.c
+ defsnc 'u32[ ]RTL8723EMAC_ARRAY\[RTL8723E_MACARRAYLENGTH\][ ]=' drivers/net/wireless/rtlwifi/rtl8723ae/table.c
+ defsnc 'u32[ ]RTL8723EAGCTAB_1TARRAY\[RTL8723E_AGCTAB_1TARRAYLENGTH\][ ]=' drivers/net/wireless/rtlwifi/rtl8723ae/table.c
+ defsnc 'static[ ]struct[ ]abx500_v_to_cap[ ]cap_tbl\(_[AB]_thermistor\)\?\[\][ ]=' drivers/power/ab8500_bmdata.c
+ defsnc 'static[ ]u16[ ]rx51_temp_table2\[\][ ]=' drivers/power/rx51_battery.c
+ defsnc 'static[ ]const[ ]u32[ ]runnable_avg_yN_\(inv\|sum\)\[\][ ]=' kernel/sched/fair.c
+ defsnc '[ ]static[ ]const[ ]u32[ ]base\[4\]\[10\][ ]=' net/wireless/util.c
+ defsnc 'static[ ]unsigned[ ]short[ ]init[1234]\[128\][ ]=' sound/isa/sb/emu8000.c
+ defsnc 'static[ ]const[ ]struct[ ]reg_default[ ]wm8750_reg_defaults\[\][ ]=' sound/soc/codecs/wm8750.c
+ defsnc 'static[ ]const[ ]struct[ ]reg_default[ ]wm8770_reg_defaults\[\][ ]=' sound/soc/codecs/wm8770.c
+ defsnc 'static[ ]const[ ]struct[ ]reg_default[ ]wm8971_reg_defaults\[\][ ]=' sound/soc/codecs/wm8971.c
+ blobname 'nouveau[/]nv%02x_fuc%03x[dc]\?' drivers/gpu/drm/nouveau/core/core/falcon.c
+ blobname 'ar5523\.bin' drivers/net/wireless/ath/ar5523/ar5523.h
+ blobname 'rtlwifi[/]rtl8723\(ae\)\?fw\(_B\)\?\.bin' drivers/net/wireless/rtlwifi/rtl8723ae/sw.c
+ blobname '%s-dsp%d\.\(wmfw\|bin\)' sound/soc/codecs/wm_adsp.c
+ blobname 'fw-4\.bin' drivers/net/wireless/ath/ath6kl/core.h
+ accept '[ ]hdsp->firmware[ ]=[ ]fw' sound/pci/rme9652/hdsp.c
;;
*/*freedo*.patch | */*logo*.patch)
accept 'P[13]\([\n]#[^\n]*\)*[\n]*\([\n][0-9 ]*\)\+' drivers/video/logo/logo_libre_clut224.ppm
;;
+ */patch-3.7*)
+ # Removed chunks matched by entries that don't appear in the patch context.
+ initnc '[ ]0x019806b8[,][\n][ ]0x1427f116[,]' drivers/gpu/drm/nouveau/core/engine/graph/fuc/hubnvc0.fuc.h
+ initnc '[ ]0xf1160198[,][\n][ ]0xb6041427[,]' drivers/gpu/drm/nouveau/core/engine/graph/fuc/hubnve0.fuc.h
+ # Present in 3.7 and removed in the patch (for --reverse-patch).
+ defsnc 'static[ ]struct[ ]pinmux_cfg_reg[ ]pinmux_config_regs\[\][ ]=' 'arch/sh/kernel/cpu/sh2a/pinmux-sh7203\.c\|arch/arm/mach-shmobile/pfc-sh73[67]7\.c'
+ defsnc 'const[ ]u32[ ]cast5_s[1234]\[256\][ ]=' crypto/cast5_generic.c
+ defsnc 'const[ ]u32[ ]cast6_s[1234]\[256\][ ]=' crypto/cast6_generic.c
+ defsnc 'unsigned[ ]char[ ]\(QUALITY\|STRENGTH\)_MAP\[\][ ]=' drivers/staging/rtl8187se/r8180_core.c
+ defsnc 'static[ ]const[ ]u16[ ]rtl8225\(bcd\|z2\)_rxgain\[\][ ]=' 'drivers/net/wireless/rtl818x/rtl818[07]/rtl8225\.c'
+ defsnc '\(static[ ]const[ ]\)\?u\(8\|16\|32\)[ ]\(rtl8225\(z2\)\?_\(threshold\|gain_\(a\|bg\)\|chan\|rxgain\|agc\|tx_\(gain_cck\|power\)_ofdm\|tx_power_cck\(_ch14\)\?\)\|ZEBRA2_CCK_OFDM_GAIN_SETTING\)\[\][ ]\?=' drivers/staging/rtl8187se/r8180_rtl8225z2.c
+ defsnc '[ ]static[ ]unsigned[ ]char[ ]table_alaw2ulaw\[\][ ]=' drivers/staging/telephony/ixj.c
+ defsnc '[ ]static[ ]unsigned[ ]char[ ]table_ulaw2alaw\[\][ ]=' drivers/staging/telephony/ixj.c
+ # Chunks matched by other entries that don't appear in the patch context.
+ initnc '[ ][{][ ]19200000[,][ ]216000000[,]' arch/arm/mach-tegra/tegra20_clocks_data.c
+ initnc '[ ]0x16019806[,][\n][ ]0x041427f1[,]' drivers/gpu/drm/nouveau/core/engine/graph/fuc/hubnvc0.fuc.h
+ initnc '[ ]0x98069221[,][\n][ ]0x27f11601[,]' drivers/gpu/drm/nouveau/core/engine/graph/fuc/hubnve0.fuc.h
+ initnc '[ ][{]0x0000a284\([,][ ]0x00000000\)*\([,][ ]0x00000150\)*[}][,]' drivers/net/wireless/ath/ath9k/ar9462_2p0_initvals.h
+ initnc '[ ][{]0x0000a574\([,][ ]0x9c1fff0b\)*\([,][ ]0x5e001eeb\)*[}][,]' drivers/net/wireless/ath/ath9k/ar9485_initvals.h
+ initnc '[ ][{]0x0000a580[,][ ]0x00000000[}][,]' drivers/net/wireless/ath/ath9k/ar9485_initvals.h
+ initnc '[ ][{]0x0000a584\([,][ ]0x00000000\)*\([,][ ]0x00000150\)*[}][,]' drivers/net/wireless/ath/ath9k/ar9485_initvals.h
+ initnc '[ ][{]0x0000a0b4\([,][ ]0x00000000\)*\([,][ ]0x00000150\)*[}][,]' drivers/net/wireless/ath/ath9k/ar9485_initvals.h
+ initnc '[ ][{]0x0000982c\([,][ ]0x05eea6d4\)*[}][,]' drivers/net/wireless/ath/ath9k/ar9485_initvals.h
+ accept '[ ][ ]err[ ]=[ ]request_firmware_nowait[(]THIS_MODULE,[ ]true,[ ]patch\[dev\],' sound/pci/hda/hda_intel.c
+ initnc '[ ][{][ ]184[,][ ]0x00[ ][}][,]' sound/soc/codecs/lm49453.c
+ # Already present in 3.7.
+ defsnc '\(static[ ]\)\?unsigned[ ]char[ ]\(__attribute__[ ][(][(]aligned[(]16[)][)][)][ ]\)\?bootlogo_bits\[\][ ]=' arch/m68k/platform/68328/bootlogo.h
+ accept '[ ]-[ ]calls[ ]request_firmware[(]' Documentation/firmware_class/README
+ accept 'request_firmware\(_nowait\)\?[(]' drivers/base/firmware_class.c
+ defsnc '[ ][}][ ]regs\[\][ ]=' drivers/media/video/em28xx/em28xx-dvb.c
+ defsnc 'static[ ]const[ ]u32[ ]ar9300Modes_\(\(low\(est\)\?\|high\)_ob_db\|high_power\)_tx_gain_table_2p[02]\[\]\[5\][ ]=' 'drivers/net/wireless/ath/ath9k/ar9003_\(2p[02]_\)\?initvals\.h'
+ defsnc 'static[ ]const[ ]u32[ ]ar9485\(M\|_m\)odes_\(high\|low\|green\)\(est\)\?_\(power\|ob_db\)_tx_gain_1_[01]\[\]\[5\][ ]=' drivers/net/wireless/ath/ath9k/ar9485_initvals.h
+ defsnc 'static[ ]const[ ]u32[ ]ar9485\(\(C\|_c\)ommon_\(wo_xlna_\)\?rx_gain\)\?_1_[01]\(_\(radio\|baseband\|mac\)_core\)\?\[\]\[2\][ ]=' drivers/net/wireless/ath/ath9k/ar9485_initvals.h
+ defsnc '\(static[ ]\)\?const[ ]u16[ ]dot11lcn_sw_ctrl_tbl_\(4313_\)\?\(bt_\)\?\(epa_\)\?\(p250_\)\?rev0\(_combo\)\?\[\][ ]=' 'drivers/\(staging\|net/wireless\)/brcm80211/\(phy/wlc_phy_lcn\.c\|brcmsmac/phy/phytbl_lcn\.c\)'
+ defsnc 'static[ ]const[ ]u32[ ]ofdmswing_table\[OFDM_TABLE_SIZE\][ ]=' drivers/net/wireless/rtlwifi/rtl8192ce/dm.c
+ defsnc 'static[ ]const[ ]u8[ ]cckswing_table_ch\(1ch13\|14\)\[CCK_TABLE_SIZE\]\[8\][ ]=' drivers/net/wireless/rtlwifi/rtl8192ce/dm.c
+ defsnc 'static[ ]u8[ ]reserved_page_packet\[TOTAL_RESERVED_PKT_LEN\][ ]=' 'drivers/net/wireless/rtlwifi/rtl8192[cd]e/fw.c'
+ defsnc '[ ][}][ ]hw_config\[\][ ]=' drivers/nfc/pn544_hci.c
+ accept 'FIRMWARE[ ]LOADER[ ][(]request_firmware[)]' MAINTAINERS
+ blobname '\(comedi[/]\)\?jr3pci\.idm\(["]\.[\n][ ][*][/]\)\?' drivers/staging/comedi/drivers/jr3_pci.c
+ blobname '\([/]lib[/]firmware[/]\)\?\(gdm72xx[/]\)\?gdms\(krn\|rfs\)\.bin' drivers/staging/gdm72xx/sdio_boot.c
+ defsnc '[}][ ]sisfb_ddc[sf]modes\[\][ ]\(__devinitdata[ ]\)\?=' drivers/video/sis/sis_main.h
+ defsnc 'static[ ]\(const[ ]\)\?struct[ ]lms283gf05_seq[ ]disp_\(init\|pwdn\)seq\[\][ ]=' drivers/video/backlight/lms283gf05.c
+ blobname 'cxgb4[/]t4fw\.bin' 'drivers/\(net/cxgb4/cxgb4_main\.c\|scsi/csiostor/csio_hw\.h\)'
+ defsnc '\(static[ ]\)\?\(const[ ]\)\?\(struct[ ]\)\?XGI_[ME]CLKData\(Struct\)\?[ ]XGI\(3[34]0\|27\)\(New\)\?_[ME]CLKData\[\][ ]*=' drivers/staging/xgifb/vb_table.h
+ defsnc '\(static[ ]\)\?\(const[ ]\)\?\(UCHAR\|unsigned[ ]char\)[ ]XGI340_CR6[BE]\[8\]\[4\][ ]*=' drivers/staging/xgifb/vb_table.h
+ defsnc '\(static[ ]\)\?\(const[ ]\)\?\(UCHAR\|unsigned[ ]char\)[ ]XGI340_CR6F\[8\]\[32\][ ]*=' drivers/staging/xgifb/vb_table.h
+ defsnc '\(static[ ]\)\?\(const[ ]\)\?\(struct[ ]\)\?XGI_StStruct[ ]XGI330_SModeIDTable\[\][ ]*=' drivers/staging/xgifb/vb_table.h
+ defsnc '\(static[ ]\)\?\(const[ ]\)\?\(struct[ ]\)\?XGI_ExtStruct[ ][ ]\?XGI330_EModeIDTable\[\][ ]*=' drivers/staging/xgifb/vb_table.h
+ defsnc '\(static[ ]\)\?\(const[ ]\)\?\(struct[ ]\)\?\(XGI\|SiS\)_StandTable\(Struct\|_S\)[ ]XGI330_StandTable\(\[\]\)\?[ ]*=' drivers/staging/xgifb/vb_table.h
+ defsnc '\([/][*]\)\?\(static[ ]\)\?\(const[ ]\)\?\(struct[ ]\)\?\(XGI330\|SiS\)_LCDData\(Struct\)\?[ ][ ]\?XGI_\(\(St2\?\|Ext\)LCD\(1024x768\|1280x1024\)\|NoScaling\)Data\[\][ ]*=' drivers/staging/xgifb/vb_table.h
+ defsnc '\(static[ ]\)\?\(const[ ]\)\?\(struct[ ]\)\?\(XGI330\|SiS\)_LVDSData\(Struct\)\?[ ][ ]\?XGI\(330\)\?_LVDS\(320x480\|800x600\|1024x768\|1280x\(1024\|768[NS]\?\)\|1400x1050\|640x480\)Data_[12]\[\][ ]*=' drivers/staging/xgifb/vb_table.h
+ defsnc '\(static[ ]\)\?\(const[ ]\)\?\(struct[ ]\)\?XGI_ModeResInfo\(Struct\|_S\)[ ]XGI330_ModeResInfo\[\][ ]*=' drivers/staging/xgifb/vb_table.h
+ defsnc 'static[ ]struct[ ]XGI_ExtStruct[ ]XGI330_EModeIDTable\[\][ ]=' drivers/staging/xgifb/vb_table.h
+ defsnc 'static[ ]\(const[ ]\)\?struct[ ]SiS_MCLKData[ ]XGI\(340\|27\)New_MCLKData\[\][ ]=' drivers/staging/xgifb/vb_table.h
+ defsnc 'static[ ]\(const[ ]\)\?struct[ ]SiS_ModeResInfo_S[ ]XGI330_ModeResInfo\[\][ ]=' drivers/staging/xgifb/vb_table.h
+ defsnc 'static[ ]struct[ ]SiS_StandTable_S[ ]XGI330_StandTable[ ]=' drivers/staging/xgifb/vb_table.h
+ defsnc '\(static[ ]\)\?const[ ]int[ ]lp8788_dldo1239_vtbl\[\][ ]=' drivers/regulator/lp8788-ldo.c
+ defsnc 'static[ ]int[ ]\(__devinit[ ]\)\?azx_probe[(][^)]*[)][\n][{]\([\n]\+[^\n}][^\n]*\)*[^\n]*request_firmware[^\n]*' sound/pci/hda/hda_intel.c
+
+ # New in 3.8
+ accept 'K_table:\([\n][ ]*\.quad[ ]*0x[0-9a-f]*[,]0x[0-9a-f]*\)*' arch/x86/crypto/crc32c-pcl-intel-asm_64.S
+ defsnc 'const[ ]u32[ ]cast_s[1234]\[256\][ ]=' crypto/cast_common.c
+ accept '[ ]request_firmware[ ]can[ ]be[ ]called[ ]safely' Documentation/firmware_class/README
+ defsnc 'static[ ]const[ ]int[ ]__initconst[ ]armada_370_xp_\(nb\|h\|dram\)clk_ratios\[32\]\[2\][ ]=' drivers/clk/mvebu/clk-core.c
+ defsnc 'static[ ]const[ ]int[ ]__initconst[ ]\(dove\|kirkwood\)_cpu_ddr_ratios\[16\]\[2\][ ]=' drivers/clk/mvebu/clk-core.c
+ defsnc 'static[ ]const[ ]int[ ]h_coef_8t\[GSC_COEF_RATIO\]\[GSC_COEF_ATTR\]\[GSC_COEF_H_8T\][ ]=' drivers/gpu/drm/exynos/exynos_drm_gsc.c
+ defsnc 'static[ ]const[ ]int[ ]v_coef_4t\[GSC_COEF_RATIO\]\[GSC_COEF_ATTR\]\[GSC_COEF_V_4T\][ ]=' drivers/gpu/drm/exynos/exynos_drm_gsc.c
+ defsnc 'static[ ]const[ ]struct[ ]atl1c_platform_patch[ ]plats\[\][ ]=' drivers/net/ethernet/atheros/atl1c/atl1c_main.c
+ defsnc 'u32[ ]RTL8723EPHY_REG_1TARRAY\[RTL8723E_PHY_REG_1TARRAY_LENGTH\][ ]=' drivers/net/wireless/rtlwifi/rtl8723ae/table.c
+ defsnc 'u32[ ]RTL8723EPHY_REG_ARRAY_PG\[RTL8723E_PHY_REG_ARRAY_PGLENGTH\][ ]=' drivers/net/wireless/rtlwifi/rtl8723ae/table.c
+ defsnc 'u32[ ]RTL8723E_RADIOA_1TARRAY\[Rtl8723ERADIOA_1TARRAYLENGTH\][ ]=' drivers/net/wireless/rtlwifi/rtl8723ae/table.c
+ defsnc 'u32[ ]RTL8723EMAC_ARRAY\[RTL8723E_MACARRAYLENGTH\][ ]=' drivers/net/wireless/rtlwifi/rtl8723ae/table.c
+ defsnc 'u32[ ]RTL8723EAGCTAB_1TARRAY\[RTL8723E_AGCTAB_1TARRAYLENGTH\][ ]=' drivers/net/wireless/rtlwifi/rtl8723ae/table.c
+ defsnc 'static[ ]struct[ ]abx500_v_to_cap[ ]cap_tbl\(_[AB]_thermistor\)\?\[\][ ]=' drivers/power/ab8500_bmdata.c
+ defsnc 'static[ ]u16[ ]rx51_temp_table2\[\][ ]=' drivers/power/rx51_battery.c
+ defsnc 'static[ ]const[ ]u32[ ]runnable_avg_yN_\(inv\|sum\)\[\][ ]=' kernel/sched/fair.c
+ defsnc '[ ]static[ ]const[ ]u32[ ]base\[4\]\[10\][ ]=' net/wireless/util.c
+ defsnc 'static[ ]unsigned[ ]short[ ]init[1234]\[128\][ ]=' sound/isa/sb/emu8000.c
+ defsnc 'static[ ]const[ ]struct[ ]reg_default[ ]wm8750_reg_defaults\[\][ ]=' sound/soc/codecs/wm8750.c
+ defsnc 'static[ ]const[ ]struct[ ]reg_default[ ]wm8770_reg_defaults\[\][ ]=' sound/soc/codecs/wm8770.c
+ defsnc 'static[ ]const[ ]struct[ ]reg_default[ ]wm8971_reg_defaults\[\][ ]=' sound/soc/codecs/wm8971.c
+ blobname 'nouveau[/]nv%02x_fuc%03x[dc]\?' drivers/gpu/drm/nouveau/core/core/falcon.c
+ blobname 'ar5523\.bin' drivers/net/wireless/ath/ar5523/ar5523.h
+ blobname 'rtlwifi[/]rtl8723\(ae\)\?fw\(_B\)\?\.bin' drivers/net/wireless/rtlwifi/rtl8723ae/sw.c
+ blobname '%s-dsp%d\.\(wmfw\|bin\)' sound/soc/codecs/wm_adsp.c
+ blobname 'fw-4\.bin' drivers/net/wireless/ath/ath6kl/core.h
+ accept '[ ]hdsp->firmware[ ]=[ ]fw' sound/pci/rme9652/hdsp.c
+ ;;
+
*/patch-3.6*)
# Present in patch for 3.6.4.
accept 'MODULE_FIRMWARE[(]["]keyspan_pda[/]\(keyspan_pda\|xircom_pgs\)\.fw["][)][;]' drivers/usb/serial/keyspan_pda.c
diff --git a/freed-ora/current/master/linux-2.6-defaults-acpi-video.patch b/freed-ora/current/master/defaults-acpi-video.patch
index b83f4b614..b83f4b614 100644
--- a/freed-ora/current/master/linux-2.6-defaults-acpi-video.patch
+++ b/freed-ora/current/master/defaults-acpi-video.patch
diff --git a/freed-ora/current/master/dmar-disable-when-ricoh-multifunction.patch b/freed-ora/current/master/dmar-disable-when-ricoh-multifunction.patch
index a4528617e..839db5940 100644
--- a/freed-ora/current/master/dmar-disable-when-ricoh-multifunction.patch
+++ b/freed-ora/current/master/dmar-disable-when-ricoh-multifunction.patch
@@ -16,7 +16,7 @@ index 4789f8e..5923914 100644
DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, 0x006a, quirk_calpella_no_shadow_gtt);
+/* https://bugzilla.redhat.com/show_bug.cgi?id=605888 */
-+static void __devinit quirk_ricoh_multifunction(struct pci_dev *dev)
++static void quirk_ricoh_multifunction(struct pci_dev *dev)
+{
+ dmar_disabled = 1;
+}
diff --git a/freed-ora/current/master/efivarfs-3.7.patch b/freed-ora/current/master/efivarfs-3.7.patch
deleted file mode 100644
index 300910716..000000000
--- a/freed-ora/current/master/efivarfs-3.7.patch
+++ /dev/null
@@ -1,1630 +0,0 @@
-From cb6f23ee9601297c3c70d0cfe3d77dfde9bd119d Mon Sep 17 00:00:00 2001
-From: Matthew Garrett <mjg@redhat.com>
-Date: Fri, 5 Oct 2012 13:54:56 +0800
-Subject: [PATCH 01/17] efi: Add support for a UEFI variable filesystem
-
-The existing EFI variables code only supports variables of up to 1024
-bytes. This limitation existed in version 0.99 of the EFI specification,
-but was removed before any full releases. Since variables can now be
-larger than a single page, sysfs isn't the best interface for this. So,
-instead, let's add a filesystem. Variables can be read, written and
-created, with the first 4 bytes of each variable representing its UEFI
-attributes. The create() method doesn't actually commit to flash since
-zero-length variables can't exist per-spec.
-
-Updates from Jeremy Kerr <jeremy.kerr@canonical.com>.
-
-Signed-off-by: Matthew Garrett <mjg@redhat.com>
-Signed-off-by: Jeremy Kerr <jeremy.kerr@canonical.com>
-Signed-off-by: Matt Fleming <matt.fleming@intel.com>
----
- drivers/firmware/efivars.c | 384 ++++++++++++++++++++++++++++++++++++++++++++-
- include/linux/efi.h | 5 +
- 2 files changed, 383 insertions(+), 6 deletions(-)
-
-diff --git a/drivers/firmware/efivars.c b/drivers/firmware/efivars.c
-index d10c987..b605c48 100644
---- a/drivers/firmware/efivars.c
-+++ b/drivers/firmware/efivars.c
-@@ -80,6 +80,10 @@
- #include <linux/slab.h>
- #include <linux/pstore.h>
-
-+#include <linux/fs.h>
-+#include <linux/ramfs.h>
-+#include <linux/pagemap.h>
-+
- #include <asm/uaccess.h>
-
- #define EFIVARS_VERSION "0.08"
-@@ -91,6 +95,7 @@ MODULE_LICENSE("GPL");
- MODULE_VERSION(EFIVARS_VERSION);
-
- #define DUMP_NAME_LEN 52
-+#define GUID_LEN 37
-
- /*
- * The maximum size of VariableName + Data = 1024
-@@ -108,7 +113,6 @@ struct efi_variable {
- __u32 Attributes;
- } __attribute__((packed));
-
--
- struct efivar_entry {
- struct efivars *efivars;
- struct efi_variable var;
-@@ -122,6 +126,9 @@ struct efivar_attribute {
- ssize_t (*store)(struct efivar_entry *entry, const char *buf, size_t count);
- };
-
-+static struct efivars __efivars;
-+static struct efivar_operations ops;
-+
- #define PSTORE_EFI_ATTRIBUTES \
- (EFI_VARIABLE_NON_VOLATILE | \
- EFI_VARIABLE_BOOTSERVICE_ACCESS | \
-@@ -629,14 +636,380 @@ static struct kobj_type efivar_ktype = {
- .default_attrs = def_attrs,
- };
-
--static struct pstore_info efi_pstore_info;
--
- static inline void
- efivar_unregister(struct efivar_entry *var)
- {
- kobject_put(&var->kobj);
- }
-
-+static int efivarfs_file_open(struct inode *inode, struct file *file)
-+{
-+ file->private_data = inode->i_private;
-+ return 0;
-+}
-+
-+static ssize_t efivarfs_file_write(struct file *file,
-+ const char __user *userbuf, size_t count, loff_t *ppos)
-+{
-+ struct efivar_entry *var = file->private_data;
-+ struct efivars *efivars;
-+ efi_status_t status;
-+ void *data;
-+ u32 attributes;
-+ struct inode *inode = file->f_mapping->host;
-+ int datasize = count - sizeof(attributes);
-+
-+ if (count < sizeof(attributes))
-+ return -EINVAL;
-+
-+ data = kmalloc(datasize, GFP_KERNEL);
-+
-+ if (!data)
-+ return -ENOMEM;
-+
-+ efivars = var->efivars;
-+
-+ if (copy_from_user(&attributes, userbuf, sizeof(attributes))) {
-+ count = -EFAULT;
-+ goto out;
-+ }
-+
-+ if (attributes & ~(EFI_VARIABLE_MASK)) {
-+ count = -EINVAL;
-+ goto out;
-+ }
-+
-+ if (copy_from_user(data, userbuf + sizeof(attributes), datasize)) {
-+ count = -EFAULT;
-+ goto out;
-+ }
-+
-+ if (validate_var(&var->var, data, datasize) == false) {
-+ count = -EINVAL;
-+ goto out;
-+ }
-+
-+ status = efivars->ops->set_variable(var->var.VariableName,
-+ &var->var.VendorGuid,
-+ attributes, datasize,
-+ data);
-+
-+ switch (status) {
-+ case EFI_SUCCESS:
-+ mutex_lock(&inode->i_mutex);
-+ i_size_write(inode, count);
-+ mutex_unlock(&inode->i_mutex);
-+ break;
-+ case EFI_INVALID_PARAMETER:
-+ count = -EINVAL;
-+ break;
-+ case EFI_OUT_OF_RESOURCES:
-+ count = -ENOSPC;
-+ break;
-+ case EFI_DEVICE_ERROR:
-+ count = -EIO;
-+ break;
-+ case EFI_WRITE_PROTECTED:
-+ count = -EROFS;
-+ break;
-+ case EFI_SECURITY_VIOLATION:
-+ count = -EACCES;
-+ break;
-+ case EFI_NOT_FOUND:
-+ count = -ENOENT;
-+ break;
-+ default:
-+ count = -EINVAL;
-+ break;
-+ }
-+out:
-+ kfree(data);
-+
-+ return count;
-+}
-+
-+static ssize_t efivarfs_file_read(struct file *file, char __user *userbuf,
-+ size_t count, loff_t *ppos)
-+{
-+ struct efivar_entry *var = file->private_data;
-+ struct efivars *efivars = var->efivars;
-+ efi_status_t status;
-+ unsigned long datasize = 0;
-+ u32 attributes;
-+ void *data;
-+ ssize_t size;
-+
-+ status = efivars->ops->get_variable(var->var.VariableName,
-+ &var->var.VendorGuid,
-+ &attributes, &datasize, NULL);
-+
-+ if (status != EFI_BUFFER_TOO_SMALL)
-+ return 0;
-+
-+ data = kmalloc(datasize + 4, GFP_KERNEL);
-+
-+ if (!data)
-+ return 0;
-+
-+ status = efivars->ops->get_variable(var->var.VariableName,
-+ &var->var.VendorGuid,
-+ &attributes, &datasize,
-+ (data + 4));
-+
-+ if (status != EFI_SUCCESS)
-+ return 0;
-+
-+ memcpy(data, &attributes, 4);
-+ size = simple_read_from_buffer(userbuf, count, ppos,
-+ data, datasize + 4);
-+ kfree(data);
-+
-+ return size;
-+}
-+
-+static void efivarfs_evict_inode(struct inode *inode)
-+{
-+ clear_inode(inode);
-+}
-+
-+static const struct super_operations efivarfs_ops = {
-+ .statfs = simple_statfs,
-+ .drop_inode = generic_delete_inode,
-+ .evict_inode = efivarfs_evict_inode,
-+ .show_options = generic_show_options,
-+};
-+
-+static struct super_block *efivarfs_sb;
-+
-+static const struct inode_operations efivarfs_dir_inode_operations;
-+
-+static const struct file_operations efivarfs_file_operations = {
-+ .open = efivarfs_file_open,
-+ .read = efivarfs_file_read,
-+ .write = efivarfs_file_write,
-+ .llseek = no_llseek,
-+};
-+
-+static struct inode *efivarfs_get_inode(struct super_block *sb,
-+ const struct inode *dir, int mode, dev_t dev)
-+{
-+ struct inode *inode = new_inode(sb);
-+
-+ if (inode) {
-+ inode->i_ino = get_next_ino();
-+ inode->i_uid = inode->i_gid = 0;
-+ inode->i_mode = mode;
-+ inode->i_atime = inode->i_mtime = inode->i_ctime = CURRENT_TIME;
-+ switch (mode & S_IFMT) {
-+ case S_IFREG:
-+ inode->i_fop = &efivarfs_file_operations;
-+ break;
-+ case S_IFDIR:
-+ inode->i_op = &efivarfs_dir_inode_operations;
-+ inode->i_fop = &simple_dir_operations;
-+ inc_nlink(inode);
-+ break;
-+ }
-+ }
-+ return inode;
-+}
-+
-+static void efivarfs_hex_to_guid(const char *str, efi_guid_t *guid)
-+{
-+ guid->b[0] = hex_to_bin(str[6]) << 4 | hex_to_bin(str[7]);
-+ guid->b[1] = hex_to_bin(str[4]) << 4 | hex_to_bin(str[5]);
-+ guid->b[2] = hex_to_bin(str[2]) << 4 | hex_to_bin(str[3]);
-+ guid->b[3] = hex_to_bin(str[0]) << 4 | hex_to_bin(str[1]);
-+ guid->b[4] = hex_to_bin(str[11]) << 4 | hex_to_bin(str[12]);
-+ guid->b[5] = hex_to_bin(str[9]) << 4 | hex_to_bin(str[10]);
-+ guid->b[6] = hex_to_bin(str[16]) << 4 | hex_to_bin(str[17]);
-+ guid->b[7] = hex_to_bin(str[14]) << 4 | hex_to_bin(str[15]);
-+ guid->b[8] = hex_to_bin(str[19]) << 4 | hex_to_bin(str[20]);
-+ guid->b[9] = hex_to_bin(str[21]) << 4 | hex_to_bin(str[22]);
-+ guid->b[10] = hex_to_bin(str[24]) << 4 | hex_to_bin(str[25]);
-+ guid->b[11] = hex_to_bin(str[26]) << 4 | hex_to_bin(str[27]);
-+ guid->b[12] = hex_to_bin(str[28]) << 4 | hex_to_bin(str[29]);
-+ guid->b[13] = hex_to_bin(str[30]) << 4 | hex_to_bin(str[31]);
-+ guid->b[14] = hex_to_bin(str[32]) << 4 | hex_to_bin(str[33]);
-+ guid->b[15] = hex_to_bin(str[34]) << 4 | hex_to_bin(str[35]);
-+}
-+
-+static int efivarfs_create(struct inode *dir, struct dentry *dentry,
-+ umode_t mode, bool excl)
-+{
-+ struct inode *inode = efivarfs_get_inode(dir->i_sb, dir, mode, 0);
-+ struct efivars *efivars = &__efivars;
-+ struct efivar_entry *var;
-+ int namelen, i = 0, err = 0;
-+
-+ if (dentry->d_name.len < 38)
-+ return -EINVAL;
-+
-+ if (!inode)
-+ return -ENOSPC;
-+
-+ var = kzalloc(sizeof(struct efivar_entry), GFP_KERNEL);
-+
-+ if (!var)
-+ return -ENOMEM;
-+
-+ namelen = dentry->d_name.len - GUID_LEN;
-+
-+ efivarfs_hex_to_guid(dentry->d_name.name + namelen + 1,
-+ &var->var.VendorGuid);
-+
-+ for (i = 0; i < namelen; i++)
-+ var->var.VariableName[i] = dentry->d_name.name[i];
-+
-+ var->var.VariableName[i] = '\0';
-+
-+ inode->i_private = var;
-+ var->efivars = efivars;
-+ var->kobj.kset = efivars->kset;
-+
-+ err = kobject_init_and_add(&var->kobj, &efivar_ktype, NULL, "%s",
-+ dentry->d_name.name);
-+ if (err)
-+ goto out;
-+
-+ kobject_uevent(&var->kobj, KOBJ_ADD);
-+ spin_lock(&efivars->lock);
-+ list_add(&var->list, &efivars->list);
-+ spin_unlock(&efivars->lock);
-+ d_instantiate(dentry, inode);
-+ dget(dentry);
-+out:
-+ if (err)
-+ kfree(var);
-+ return err;
-+}
-+
-+static int efivarfs_unlink(struct inode *dir, struct dentry *dentry)
-+{
-+ struct efivar_entry *var = dentry->d_inode->i_private;
-+ struct efivars *efivars = var->efivars;
-+ efi_status_t status;
-+
-+ spin_lock(&efivars->lock);
-+
-+ status = efivars->ops->set_variable(var->var.VariableName,
-+ &var->var.VendorGuid,
-+ 0, 0, NULL);
-+
-+ if (status == EFI_SUCCESS || status == EFI_NOT_FOUND) {
-+ list_del(&var->list);
-+ spin_unlock(&efivars->lock);
-+ efivar_unregister(var);
-+ drop_nlink(dir);
-+ dput(dentry);
-+ return 0;
-+ }
-+
-+ spin_unlock(&efivars->lock);
-+ return -EINVAL;
-+};
-+
-+int efivarfs_fill_super(struct super_block *sb, void *data, int silent)
-+{
-+ struct inode *inode = NULL;
-+ struct dentry *root;
-+ struct efivar_entry *entry, *n;
-+ struct efivars *efivars = &__efivars;
-+ int err;
-+
-+ efivarfs_sb = sb;
-+
-+ sb->s_maxbytes = MAX_LFS_FILESIZE;
-+ sb->s_blocksize = PAGE_CACHE_SIZE;
-+ sb->s_blocksize_bits = PAGE_CACHE_SHIFT;
-+ sb->s_magic = PSTOREFS_MAGIC;
-+ sb->s_op = &efivarfs_ops;
-+ sb->s_time_gran = 1;
-+
-+ inode = efivarfs_get_inode(sb, NULL, S_IFDIR | 0755, 0);
-+ if (!inode) {
-+ err = -ENOMEM;
-+ goto fail;
-+ }
-+ inode->i_op = &efivarfs_dir_inode_operations;
-+
-+ root = d_make_root(inode);
-+ sb->s_root = root;
-+ if (!root) {
-+ err = -ENOMEM;
-+ goto fail;
-+ }
-+
-+ list_for_each_entry_safe(entry, n, &efivars->list, list) {
-+ struct inode *inode;
-+ struct dentry *dentry, *root = efivarfs_sb->s_root;
-+ char *name;
-+ unsigned long size = 0;
-+ int len, i;
-+
-+ len = utf16_strlen(entry->var.VariableName);
-+
-+ /* GUID plus trailing NULL */
-+ name = kmalloc(len + 38, GFP_ATOMIC);
-+
-+ for (i = 0; i < len; i++)
-+ name[i] = entry->var.VariableName[i] & 0xFF;
-+
-+ name[len] = '-';
-+
-+ efi_guid_unparse(&entry->var.VendorGuid, name + len + 1);
-+
-+ name[len+GUID_LEN] = '\0';
-+
-+ inode = efivarfs_get_inode(efivarfs_sb, root->d_inode,
-+ S_IFREG | 0644, 0);
-+ dentry = d_alloc_name(root, name);
-+
-+ efivars->ops->get_variable(entry->var.VariableName,
-+ &entry->var.VendorGuid,
-+ &entry->var.Attributes,
-+ &size,
-+ NULL);
-+
-+ mutex_lock(&inode->i_mutex);
-+ inode->i_private = entry;
-+ i_size_write(inode, size+4);
-+ mutex_unlock(&inode->i_mutex);
-+ d_add(dentry, inode);
-+ }
-+
-+ return 0;
-+fail:
-+ iput(inode);
-+ return err;
-+}
-+
-+static struct dentry *efivarfs_mount(struct file_system_type *fs_type,
-+ int flags, const char *dev_name, void *data)
-+{
-+ return mount_single(fs_type, flags, data, efivarfs_fill_super);
-+}
-+
-+static void efivarfs_kill_sb(struct super_block *sb)
-+{
-+ kill_litter_super(sb);
-+ efivarfs_sb = NULL;
-+}
-+
-+static struct file_system_type efivarfs_type = {
-+ .name = "efivarfs",
-+ .mount = efivarfs_mount,
-+ .kill_sb = efivarfs_kill_sb,
-+};
-+
-+static const struct inode_operations efivarfs_dir_inode_operations = {
-+ .lookup = simple_lookup,
-+ .unlink = efivarfs_unlink,
-+ .create = efivarfs_create,
-+};
-+
-+static struct pstore_info efi_pstore_info;
-+
- #ifdef CONFIG_PSTORE
-
- static int efi_pstore_open(struct pstore_info *psi)
-@@ -1198,6 +1571,8 @@ int register_efivars(struct efivars *efivars,
- pstore_register(&efivars->efi_pstore_info);
- }
-
-+ register_filesystem(&efivarfs_type);
-+
- out:
- kfree(variable_name);
-
-@@ -1205,9 +1580,6 @@ out:
- }
- EXPORT_SYMBOL_GPL(register_efivars);
-
--static struct efivars __efivars;
--static struct efivar_operations ops;
--
- /*
- * For now we register the efi subsystem with the firmware subsystem
- * and the vars subsystem with the efi subsystem. In the future, it
-diff --git a/include/linux/efi.h b/include/linux/efi.h
-index 8670eb1..b2af157 100644
---- a/include/linux/efi.h
-+++ b/include/linux/efi.h
-@@ -29,7 +29,12 @@
- #define EFI_UNSUPPORTED ( 3 | (1UL << (BITS_PER_LONG-1)))
- #define EFI_BAD_BUFFER_SIZE ( 4 | (1UL << (BITS_PER_LONG-1)))
- #define EFI_BUFFER_TOO_SMALL ( 5 | (1UL << (BITS_PER_LONG-1)))
-+#define EFI_NOT_READY ( 6 | (1UL << (BITS_PER_LONG-1)))
-+#define EFI_DEVICE_ERROR ( 7 | (1UL << (BITS_PER_LONG-1)))
-+#define EFI_WRITE_PROTECTED ( 8 | (1UL << (BITS_PER_LONG-1)))
-+#define EFI_OUT_OF_RESOURCES ( 9 | (1UL << (BITS_PER_LONG-1)))
- #define EFI_NOT_FOUND (14 | (1UL << (BITS_PER_LONG-1)))
-+#define EFI_SECURITY_VIOLATION (26 | (1UL << (BITS_PER_LONG-1)))
-
- typedef unsigned long efi_status_t;
- typedef u8 efi_bool_t;
---
-1.7.12.1
-
-
-From 2fc1dc88e97665c70f203f0132232ea55e8dd7eb Mon Sep 17 00:00:00 2001
-From: Jeremy Kerr <jeremy.kerr@canonical.com>
-Date: Fri, 5 Oct 2012 13:54:56 +0800
-Subject: [PATCH 02/17] efi: Handle deletions and size changes in
- efivarfs_write_file
-
-A write to an efivarfs file will not always result in a variable of
-'count' size after the EFI SetVariable() call. We may have appended to
-the existing data (ie, with the EFI_VARIABLE_APPEND_WRITE attribute), or
-even have deleted the variable (with an authenticated variable update,
-with a zero datasize).
-
-This change re-reads the updated variable from firmware, to check for
-size changes and deletions. In the latter case, we need to drop the
-dentry.
-
-Signed-off-by: Jeremy Kerr <jeremy.kerr@canonical.com>
-Signed-off-by: Matt Fleming <matt.fleming@intel.com>
----
- drivers/firmware/efivars.c | 49 ++++++++++++++++++++++++++++++++++++----------
- 1 file changed, 39 insertions(+), 10 deletions(-)
-
-diff --git a/drivers/firmware/efivars.c b/drivers/firmware/efivars.c
-index b605c48..d7658b4 100644
---- a/drivers/firmware/efivars.c
-+++ b/drivers/firmware/efivars.c
-@@ -658,6 +658,7 @@ static ssize_t efivarfs_file_write(struct file *file,
- u32 attributes;
- struct inode *inode = file->f_mapping->host;
- int datasize = count - sizeof(attributes);
-+ unsigned long newdatasize;
-
- if (count < sizeof(attributes))
- return -EINVAL;
-@@ -696,32 +697,60 @@ static ssize_t efivarfs_file_write(struct file *file,
-
- switch (status) {
- case EFI_SUCCESS:
-- mutex_lock(&inode->i_mutex);
-- i_size_write(inode, count);
-- mutex_unlock(&inode->i_mutex);
- break;
- case EFI_INVALID_PARAMETER:
- count = -EINVAL;
-- break;
-+ goto out;
- case EFI_OUT_OF_RESOURCES:
- count = -ENOSPC;
-- break;
-+ goto out;
- case EFI_DEVICE_ERROR:
- count = -EIO;
-- break;
-+ goto out;
- case EFI_WRITE_PROTECTED:
- count = -EROFS;
-- break;
-+ goto out;
- case EFI_SECURITY_VIOLATION:
- count = -EACCES;
-- break;
-+ goto out;
- case EFI_NOT_FOUND:
- count = -ENOENT;
-- break;
-+ goto out;
- default:
- count = -EINVAL;
-- break;
-+ goto out;
- }
-+
-+ /*
-+ * Writing to the variable may have caused a change in size (which
-+ * could either be an append or an overwrite), or the variable to be
-+ * deleted. Perform a GetVariable() so we can tell what actually
-+ * happened.
-+ */
-+ newdatasize = 0;
-+ status = efivars->ops->get_variable(var->var.VariableName,
-+ &var->var.VendorGuid,
-+ NULL, &newdatasize,
-+ NULL);
-+
-+ if (status == EFI_BUFFER_TOO_SMALL) {
-+ mutex_lock(&inode->i_mutex);
-+ i_size_write(inode, newdatasize + sizeof(attributes));
-+ mutex_unlock(&inode->i_mutex);
-+
-+ } else if (status == EFI_NOT_FOUND) {
-+ spin_lock(&efivars->lock);
-+ list_del(&var->list);
-+ spin_unlock(&efivars->lock);
-+ efivar_unregister(var);
-+ drop_nlink(inode);
-+ dput(file->f_dentry);
-+
-+ } else {
-+ pr_warn("efivarfs: inconsistent EFI variable implementation? "
-+ "status = %lx\n", status);
-+ }
-+
- out:
- kfree(data);
-
---
-1.7.12.1
-
-
-From c98611fc95672862950c9bc4d6a3a4c4453a3c3e Mon Sep 17 00:00:00 2001
-From: "Lee, Chun-Yi" <joeyli.kernel@gmail.com>
-Date: Fri, 5 Oct 2012 13:54:56 +0800
-Subject: [PATCH 03/17] efi: add efivars kobject to efi sysfs folder
-
-UEFI variable filesystem need a new mount point, so this patch add
-efivars kobject to efi_kobj for create a /sys/firmware/efi/efivars
-folder.
-
-Cc: Matthew Garrett <mjg@redhat.com>
-Cc: H. Peter Anvin <hpa@zytor.com>
-Signed-off-by: Lee, Chun-Yi <jlee@suse.com>
-Signed-off-by: Jeremy Kerr <jeremy.kerr@canonical.com>
-Signed-off-by: Matt Fleming <matt.fleming@intel.com>
----
- drivers/firmware/efivars.c | 9 +++++++++
- include/linux/efi.h | 1 +
- 2 files changed, 10 insertions(+)
-
-diff --git a/drivers/firmware/efivars.c b/drivers/firmware/efivars.c
-index d7658b4..6793965 100644
---- a/drivers/firmware/efivars.c
-+++ b/drivers/firmware/efivars.c
-@@ -1527,6 +1527,7 @@ void unregister_efivars(struct efivars *efivars)
- sysfs_remove_bin_file(&efivars->kset->kobj, efivars->del_var);
- kfree(efivars->new_var);
- kfree(efivars->del_var);
-+ kobject_put(efivars->kobject);
- kset_unregister(efivars->kset);
- }
- EXPORT_SYMBOL_GPL(unregister_efivars);
-@@ -1558,6 +1559,14 @@ int register_efivars(struct efivars *efivars,
- goto out;
- }
-
-+ efivars->kobject = kobject_create_and_add("efivars", parent_kobj);
-+ if (!efivars->kobject) {
-+ pr_err("efivars: Subsystem registration failed.\n");
-+ error = -ENOMEM;
-+ kset_unregister(efivars->kset);
-+ goto out;
-+ }
-+
- /*
- * Per EFI spec, the maximum storage allocated for both
- * the variable name and variable data is 1024 bytes.
-diff --git a/include/linux/efi.h b/include/linux/efi.h
-index b2af157..337aefb 100644
---- a/include/linux/efi.h
-+++ b/include/linux/efi.h
-@@ -662,6 +662,7 @@ struct efivars {
- spinlock_t lock;
- struct list_head list;
- struct kset *kset;
-+ struct kobject *kobject;
- struct bin_attribute *new_var, *del_var;
- const struct efivar_operations *ops;
- struct efivar_entry *walk_entry;
---
-1.7.12.1
-
-
-From 8ef5f49da57087022f2031820ceb3b1c6101d76c Mon Sep 17 00:00:00 2001
-From: Matt Fleming <matt.fleming@intel.com>
-Date: Thu, 4 Oct 2012 09:57:31 +0100
-Subject: [PATCH 04/17] efivarfs: Add documentation for the EFI variable
- filesystem
-
-Signed-off-by: Matt Fleming <matt.fleming@intel.com>
----
- Documentation/filesystems/00-INDEX | 2 ++
- Documentation/filesystems/efivarfs.txt | 16 ++++++++++++++++
- 2 files changed, 18 insertions(+)
- create mode 100644 Documentation/filesystems/efivarfs.txt
-
-diff --git a/Documentation/filesystems/00-INDEX b/Documentation/filesystems/00-INDEX
-index 8c624a1..7b52ba7 100644
---- a/Documentation/filesystems/00-INDEX
-+++ b/Documentation/filesystems/00-INDEX
-@@ -38,6 +38,8 @@ dnotify_test.c
- - example program for dnotify
- ecryptfs.txt
- - docs on eCryptfs: stacked cryptographic filesystem for Linux.
-+efivarfs.txt
-+ - info for the efivarfs filesystem.
- exofs.txt
- - info, usage, mount options, design about EXOFS.
- ext2.txt
-diff --git a/Documentation/filesystems/efivarfs.txt b/Documentation/filesystems/efivarfs.txt
-new file mode 100644
-index 0000000..c477af0
---- /dev/null
-+++ b/Documentation/filesystems/efivarfs.txt
-@@ -0,0 +1,16 @@
-+
-+efivarfs - a (U)EFI variable filesystem
-+
-+The efivarfs filesystem was created to address the shortcomings of
-+using entries in sysfs to maintain EFI variables. The old sysfs EFI
-+variables code only supported variables of up to 1024 bytes. This
-+limitation existed in version 0.99 of the EFI specification, but was
-+removed before any full releases. Since variables can now be larger
-+than a single page, sysfs isn't the best interface for this.
-+
-+Variables can be created, deleted and modified with the efivarfs
-+filesystem.
-+
-+efivarfs is typically mounted like this,
-+
-+ mount -t efivarfs none /sys/firmware/efi/efivars
---
-1.7.12.1
-
-
-From f69c39248e2f1eebf24f5ee55139602c56d15aec Mon Sep 17 00:00:00 2001
-From: Andy Whitcroft <apw@canonical.com>
-Date: Thu, 11 Oct 2012 11:32:17 +0100
-Subject: [PATCH 05/17] efivarfs: efivarfs_file_read ensure we free data in
- error paths
-
-Signed-off-by: Andy Whitcroft <apw@canonical.com>
-Acked-by: Matthew Garrett <mjg@redhat.com>
-Acked-by: Jeremy Kerr <jeremy.kerr@canonical.com>
-Signed-off-by: Matt Fleming <matt.fleming@intel.com>
----
- drivers/firmware/efivars.c | 6 +++---
- 1 file changed, 3 insertions(+), 3 deletions(-)
-
-diff --git a/drivers/firmware/efivars.c b/drivers/firmware/efivars.c
-index 6793965..b7c9a32 100644
---- a/drivers/firmware/efivars.c
-+++ b/drivers/firmware/efivars.c
-@@ -766,7 +766,7 @@ static ssize_t efivarfs_file_read(struct file *file, char __user *userbuf,
- unsigned long datasize = 0;
- u32 attributes;
- void *data;
-- ssize_t size;
-+ ssize_t size = 0;
-
- status = efivars->ops->get_variable(var->var.VariableName,
- &var->var.VendorGuid,
-@@ -784,13 +784,13 @@ static ssize_t efivarfs_file_read(struct file *file, char __user *userbuf,
- &var->var.VendorGuid,
- &attributes, &datasize,
- (data + 4));
--
- if (status != EFI_SUCCESS)
-- return 0;
-+ goto out_free;
-
- memcpy(data, &attributes, 4);
- size = simple_read_from_buffer(userbuf, count, ppos,
- data, datasize + 4);
-+out_free:
- kfree(data);
-
- return size;
---
-1.7.12.1
-
-
-From 429136e16c7c43bbebb8b8030203161a2d3fc3ce Mon Sep 17 00:00:00 2001
-From: Andy Whitcroft <apw@canonical.com>
-Date: Thu, 11 Oct 2012 11:32:18 +0100
-Subject: [PATCH 06/17] efivarfs: efivarfs_create() ensure we drop our
- reference on inode on error
-
-Signed-off-by: Andy Whitcroft <apw@canonical.com>
-Acked-by: Matthew Garrett <mjg@redhat.com>
-Acked-by: Jeremy Kerr <jeremy.kerr@canonical.com>
-Signed-off-by: Matt Fleming <matt.fleming@intel.com>
----
- drivers/firmware/efivars.c | 14 +++++++++-----
- 1 file changed, 9 insertions(+), 5 deletions(-)
-
-diff --git a/drivers/firmware/efivars.c b/drivers/firmware/efivars.c
-index b7c9a32..6e5f367 100644
---- a/drivers/firmware/efivars.c
-+++ b/drivers/firmware/efivars.c
-@@ -866,7 +866,7 @@ static void efivarfs_hex_to_guid(const char *str, efi_guid_t *guid)
- static int efivarfs_create(struct inode *dir, struct dentry *dentry,
- umode_t mode, bool excl)
- {
-- struct inode *inode = efivarfs_get_inode(dir->i_sb, dir, mode, 0);
-+ struct inode *inode;
- struct efivars *efivars = &__efivars;
- struct efivar_entry *var;
- int namelen, i = 0, err = 0;
-@@ -874,13 +874,15 @@ static int efivarfs_create(struct inode *dir, struct dentry *dentry,
- if (dentry->d_name.len < 38)
- return -EINVAL;
-
-+ inode = efivarfs_get_inode(dir->i_sb, dir, mode, 0);
- if (!inode)
- return -ENOSPC;
-
- var = kzalloc(sizeof(struct efivar_entry), GFP_KERNEL);
--
-- if (!var)
-- return -ENOMEM;
-+ if (!var) {
-+ err = -ENOMEM;
-+ goto out;
-+ }
-
- namelen = dentry->d_name.len - GUID_LEN;
-
-@@ -908,8 +910,10 @@ static int efivarfs_create(struct inode *dir, struct dentry *dentry,
- d_instantiate(dentry, inode);
- dget(dentry);
- out:
-- if (err)
-+ if (err) {
- kfree(var);
-+ iput(inode);
-+ }
- return err;
- }
-
---
-1.7.12.1
-
-
-From 1a19268e8a4bae43c1feb3f71ee468c6bc70aca6 Mon Sep 17 00:00:00 2001
-From: Andy Whitcroft <apw@canonical.com>
-Date: Thu, 11 Oct 2012 11:32:19 +0100
-Subject: [PATCH 07/17] efivarfs: efivarfs_fill_super() fix inode reference
- counts
-
-When d_make_root() fails it will automatically drop the reference
-on the root inode. We should not be doing so as well.
-
-Signed-off-by: Andy Whitcroft <apw@canonical.com>
-Acked-by: Matthew Garrett <mjg@redhat.com>
-Acked-by: Jeremy Kerr <jeremy.kerr@canonical.com>
-Signed-off-by: Matt Fleming <matt.fleming@intel.com>
----
- drivers/firmware/efivars.c | 16 ++++------------
- 1 file changed, 4 insertions(+), 12 deletions(-)
-
-diff --git a/drivers/firmware/efivars.c b/drivers/firmware/efivars.c
-index 6e5f367..adfc486 100644
---- a/drivers/firmware/efivars.c
-+++ b/drivers/firmware/efivars.c
-@@ -948,7 +948,6 @@ int efivarfs_fill_super(struct super_block *sb, void *data, int silent)
- struct dentry *root;
- struct efivar_entry *entry, *n;
- struct efivars *efivars = &__efivars;
-- int err;
-
- efivarfs_sb = sb;
-
-@@ -960,18 +959,14 @@ int efivarfs_fill_super(struct super_block *sb, void *data, int silent)
- sb->s_time_gran = 1;
-
- inode = efivarfs_get_inode(sb, NULL, S_IFDIR | 0755, 0);
-- if (!inode) {
-- err = -ENOMEM;
-- goto fail;
-- }
-+ if (!inode)
-+ return -ENOMEM;
- inode->i_op = &efivarfs_dir_inode_operations;
-
- root = d_make_root(inode);
- sb->s_root = root;
-- if (!root) {
-- err = -ENOMEM;
-- goto fail;
-- }
-+ if (!root)
-+ return -ENOMEM;
-
- list_for_each_entry_safe(entry, n, &efivars->list, list) {
- struct inode *inode;
-@@ -1012,9 +1007,6 @@ int efivarfs_fill_super(struct super_block *sb, void *data, int silent)
- }
-
- return 0;
--fail:
-- iput(inode);
-- return err;
- }
-
- static struct dentry *efivarfs_mount(struct file_system_type *fs_type,
---
-1.7.12.1
-
-
-From f0d90a4024493aed6fc77ce5cd3b93f278fed9c0 Mon Sep 17 00:00:00 2001
-From: Andy Whitcroft <apw@canonical.com>
-Date: Thu, 11 Oct 2012 11:32:20 +0100
-Subject: [PATCH 08/17] efivarfs: efivarfs_fill_super() ensure we free our
- temporary name
-
-d_alloc_name() copies the passed name to new storage, once complete we
-no longer need our name.
-
-Signed-off-by: Andy Whitcroft <apw@canonical.com>
-Acked-by: Matthew Garrett <mjg@redhat.com>
-Acked-by: Jeremy Kerr <jeremy.kerr@canonical.com>
-Signed-off-by: Matt Fleming <matt.fleming@intel.com>
----
- drivers/firmware/efivars.c | 2 ++
- 1 file changed, 2 insertions(+)
-
-diff --git a/drivers/firmware/efivars.c b/drivers/firmware/efivars.c
-index adfc486..36b3dd6 100644
---- a/drivers/firmware/efivars.c
-+++ b/drivers/firmware/efivars.c
-@@ -992,6 +992,8 @@ int efivarfs_fill_super(struct super_block *sb, void *data, int silent)
- inode = efivarfs_get_inode(efivarfs_sb, root->d_inode,
- S_IFREG | 0644, 0);
- dentry = d_alloc_name(root, name);
-+ /* copied by the above to local storage in the dentry. */
-+ kfree(name);
-
- efivars->ops->get_variable(entry->var.VariableName,
- &entry->var.VendorGuid,
---
-1.7.12.1
-
-
-From c4cf244c318218153200d0011d8ef0ebcf3146ea Mon Sep 17 00:00:00 2001
-From: Andy Whitcroft <apw@canonical.com>
-Date: Thu, 11 Oct 2012 11:32:21 +0100
-Subject: [PATCH 09/17] efivarfs: efivarfs_fill_super() ensure we clean up
- correctly on error
-
-Ensure we free both the name and inode on error when building the
-individual variables.
-
-Signed-off-by: Andy Whitcroft <apw@canonical.com>
-Acked-by: Matthew Garrett <mjg@redhat.com>
-Acked-by: Jeremy Kerr <jeremy.kerr@canonical.com>
-Signed-off-by: Matt Fleming <matt.fleming@intel.com>
----
- drivers/firmware/efivars.c | 20 ++++++++++++++++++--
- 1 file changed, 18 insertions(+), 2 deletions(-)
-
-diff --git a/drivers/firmware/efivars.c b/drivers/firmware/efivars.c
-index 36b3dd6..216086d 100644
---- a/drivers/firmware/efivars.c
-+++ b/drivers/firmware/efivars.c
-@@ -948,6 +948,7 @@ int efivarfs_fill_super(struct super_block *sb, void *data, int silent)
- struct dentry *root;
- struct efivar_entry *entry, *n;
- struct efivars *efivars = &__efivars;
-+ char *name;
-
- efivarfs_sb = sb;
-
-@@ -969,16 +970,18 @@ int efivarfs_fill_super(struct super_block *sb, void *data, int silent)
- return -ENOMEM;
-
- list_for_each_entry_safe(entry, n, &efivars->list, list) {
-- struct inode *inode;
- struct dentry *dentry, *root = efivarfs_sb->s_root;
-- char *name;
- unsigned long size = 0;
- int len, i;
-
-+ inode = NULL;
-+
- len = utf16_strlen(entry->var.VariableName);
-
- /* GUID plus trailing NULL */
- name = kmalloc(len + 38, GFP_ATOMIC);
-+ if (!name)
-+ goto fail;
-
- for (i = 0; i < len; i++)
- name[i] = entry->var.VariableName[i] & 0xFF;
-@@ -991,7 +994,13 @@ int efivarfs_fill_super(struct super_block *sb, void *data, int silent)
-
- inode = efivarfs_get_inode(efivarfs_sb, root->d_inode,
- S_IFREG | 0644, 0);
-+ if (!inode)
-+ goto fail_name;
-+
- dentry = d_alloc_name(root, name);
-+ if (!dentry)
-+ goto fail_inode;
-+
- /* copied by the above to local storage in the dentry. */
- kfree(name);
-
-@@ -1009,6 +1018,13 @@ int efivarfs_fill_super(struct super_block *sb, void *data, int silent)
- }
-
- return 0;
-+
-+fail_inode:
-+ iput(inode);
-+fail_name:
-+ kfree(name);
-+fail:
-+ return -ENOMEM;
- }
-
- static struct dentry *efivarfs_mount(struct file_system_type *fs_type,
---
-1.7.12.1
-
-
-From d3b7165568bcb50e4526c3dadda59e43f6681bc0 Mon Sep 17 00:00:00 2001
-From: Jeremy Kerr <jeremy.kerr@canonical.com>
-Date: Thu, 11 Oct 2012 21:19:11 +0800
-Subject: [PATCH 10/17] efivarfs: Implement exclusive access for
- {get,set}_variable
-
-Currently, efivarfs does not enforce exclusion over the get_variable and
-set_variable operations. Section 7.1 of UEFI requires us to only allow a
-single processor to enter {get,set}_variable services at once.
-
-This change acquires the efivars->lock over calls to these operations
-from the efivarfs paths.
-
-Signed-off-by: Jeremy Kerr <jeremy.kerr@canonical.com>
-Signed-off-by: Matt Fleming <matt.fleming@intel.com>
----
- drivers/firmware/efivars.c | 68 +++++++++++++++++++++++++++++-----------------
- 1 file changed, 43 insertions(+), 25 deletions(-)
-
-diff --git a/drivers/firmware/efivars.c b/drivers/firmware/efivars.c
-index 216086d..d478c56 100644
---- a/drivers/firmware/efivars.c
-+++ b/drivers/firmware/efivars.c
-@@ -690,35 +690,45 @@ static ssize_t efivarfs_file_write(struct file *file,
- goto out;
- }
-
-+ /*
-+ * The lock here protects the get_variable call, the conditional
-+ * set_variable call, and removal of the variable from the efivars
-+ * list (in the case of an authenticated delete).
-+ */
-+ spin_lock(&efivars->lock);
-+
- status = efivars->ops->set_variable(var->var.VariableName,
- &var->var.VendorGuid,
- attributes, datasize,
- data);
-
-- switch (status) {
-- case EFI_SUCCESS:
-- break;
-- case EFI_INVALID_PARAMETER:
-- count = -EINVAL;
-- goto out;
-- case EFI_OUT_OF_RESOURCES:
-- count = -ENOSPC;
-- goto out;
-- case EFI_DEVICE_ERROR:
-- count = -EIO;
-- goto out;
-- case EFI_WRITE_PROTECTED:
-- count = -EROFS;
-- goto out;
-- case EFI_SECURITY_VIOLATION:
-- count = -EACCES;
-- goto out;
-- case EFI_NOT_FOUND:
-- count = -ENOENT;
-- goto out;
-- default:
-- count = -EINVAL;
-- goto out;
-+ if (status != EFI_SUCCESS) {
-+ spin_unlock(&efivars->lock);
-+ kfree(data);
-+
-+ switch (status) {
-+ case EFI_INVALID_PARAMETER:
-+ count = -EINVAL;
-+ break;
-+ case EFI_OUT_OF_RESOURCES:
-+ count = -ENOSPC;
-+ break;
-+ case EFI_DEVICE_ERROR:
-+ count = -EIO;
-+ break;
-+ case EFI_WRITE_PROTECTED:
-+ count = -EROFS;
-+ break;
-+ case EFI_SECURITY_VIOLATION:
-+ count = -EACCES;
-+ break;
-+ case EFI_NOT_FOUND:
-+ count = -ENOENT;
-+ break;
-+ default:
-+ count = -EINVAL;
-+ }
-+ return count;
- }
-
- /*
-@@ -734,12 +744,12 @@ static ssize_t efivarfs_file_write(struct file *file,
- NULL);
-
- if (status == EFI_BUFFER_TOO_SMALL) {
-+ spin_unlock(&efivars->lock);
- mutex_lock(&inode->i_mutex);
- i_size_write(inode, newdatasize + sizeof(attributes));
- mutex_unlock(&inode->i_mutex);
-
- } else if (status == EFI_NOT_FOUND) {
-- spin_lock(&efivars->lock);
- list_del(&var->list);
- spin_unlock(&efivars->lock);
- efivar_unregister(var);
-@@ -747,6 +757,7 @@ static ssize_t efivarfs_file_write(struct file *file,
- dput(file->f_dentry);
-
- } else {
-+ spin_unlock(&efivars->lock);
- pr_warn("efivarfs: inconsistent EFI variable implementation? "
- "status = %lx\n", status);
- }
-@@ -768,9 +779,11 @@ static ssize_t efivarfs_file_read(struct file *file, char __user *userbuf,
- void *data;
- ssize_t size = 0;
-
-+ spin_lock(&efivars->lock);
- status = efivars->ops->get_variable(var->var.VariableName,
- &var->var.VendorGuid,
- &attributes, &datasize, NULL);
-+ spin_unlock(&efivars->lock);
-
- if (status != EFI_BUFFER_TOO_SMALL)
- return 0;
-@@ -780,10 +793,13 @@ static ssize_t efivarfs_file_read(struct file *file, char __user *userbuf,
- if (!data)
- return 0;
-
-+ spin_lock(&efivars->lock);
- status = efivars->ops->get_variable(var->var.VariableName,
- &var->var.VendorGuid,
- &attributes, &datasize,
- (data + 4));
-+ spin_unlock(&efivars->lock);
-+
- if (status != EFI_SUCCESS)
- goto out_free;
-
-@@ -1004,11 +1020,13 @@ int efivarfs_fill_super(struct super_block *sb, void *data, int silent)
- /* copied by the above to local storage in the dentry. */
- kfree(name);
-
-+ spin_lock(&efivars->lock);
- efivars->ops->get_variable(entry->var.VariableName,
- &entry->var.VendorGuid,
- &entry->var.Attributes,
- &size,
- NULL);
-+ spin_unlock(&efivars->lock);
-
- mutex_lock(&inode->i_mutex);
- inode->i_private = entry;
---
-1.7.12.1
-
-
-From 90a462e9cf439a1987e0f9434d1f615addcc1970 Mon Sep 17 00:00:00 2001
-From: Jeremy Kerr <jeremy.kerr@canonical.com>
-Date: Fri, 19 Oct 2012 15:16:45 +0800
-Subject: [PATCH 11/17] efi: Clarify GUID length calculations
-
-At present, the handling of GUIDs in efivar file names isn't consistent.
-We use GUID_LEN in some places, and 38 in others (GUID_LEN plus
-separator), and implicitly use the presence of the trailing NUL.
-
-This change removes the trailing NUL from GUID_LEN, so that we're
-explicitly adding it when required. We also replace magic numbers
-with GUID_LEN, and clarify the comments where appropriate.
-
-We also fix the allocation size in efivar_create_sysfs_entry, where
-we're allocating one byte too much, due to counting the trailing NUL
-twice - once when calculating short_name_size, and once in the kzalloc.
-
-Signed-off-by: Jeremy Kerr <jeremy.kerr@canonical.com>
-Signed-off-by: Matt Fleming <matt.fleming@intel.com>
----
- drivers/firmware/efivars.c | 33 +++++++++++++++++++++++++--------
- 1 file changed, 25 insertions(+), 8 deletions(-)
-
-diff --git a/drivers/firmware/efivars.c b/drivers/firmware/efivars.c
-index d478c56..a93e401 100644
---- a/drivers/firmware/efivars.c
-+++ b/drivers/firmware/efivars.c
-@@ -95,7 +95,12 @@ MODULE_LICENSE("GPL");
- MODULE_VERSION(EFIVARS_VERSION);
-
- #define DUMP_NAME_LEN 52
--#define GUID_LEN 37
-+
-+/*
-+ * Length of a GUID string (strlen("aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee"))
-+ * not including trailing NUL
-+ */
-+#define GUID_LEN 36
-
- /*
- * The maximum size of VariableName + Data = 1024
-@@ -887,7 +892,11 @@ static int efivarfs_create(struct inode *dir, struct dentry *dentry,
- struct efivar_entry *var;
- int namelen, i = 0, err = 0;
-
-- if (dentry->d_name.len < 38)
-+ /*
-+ * We need a GUID, plus at least one letter for the variable name,
-+ * plus the '-' separator
-+ */
-+ if (dentry->d_name.len < GUID_LEN + 2)
- return -EINVAL;
-
- inode = efivarfs_get_inode(dir->i_sb, dir, mode, 0);
-@@ -900,7 +909,8 @@ static int efivarfs_create(struct inode *dir, struct dentry *dentry,
- goto out;
- }
-
-- namelen = dentry->d_name.len - GUID_LEN;
-+ /* length of the variable name itself: remove GUID and separator */
-+ namelen = dentry->d_name.len - GUID_LEN - 1;
-
- efivarfs_hex_to_guid(dentry->d_name.name + namelen + 1,
- &var->var.VendorGuid);
-@@ -994,8 +1004,8 @@ int efivarfs_fill_super(struct super_block *sb, void *data, int silent)
-
- len = utf16_strlen(entry->var.VariableName);
-
-- /* GUID plus trailing NULL */
-- name = kmalloc(len + 38, GFP_ATOMIC);
-+ /* name, plus '-', plus GUID, plus NUL*/
-+ name = kmalloc(len + 1 + GUID_LEN + 1, GFP_ATOMIC);
- if (!name)
- goto fail;
-
-@@ -1006,7 +1016,7 @@ int efivarfs_fill_super(struct super_block *sb, void *data, int silent)
-
- efi_guid_unparse(&entry->var.VendorGuid, name + len + 1);
-
-- name[len+GUID_LEN] = '\0';
-+ name[len+GUID_LEN+1] = '\0';
-
- inode = efivarfs_get_inode(efivarfs_sb, root->d_inode,
- S_IFREG | 0644, 0);
-@@ -1435,11 +1445,18 @@ efivar_create_sysfs_entry(struct efivars *efivars,
- efi_char16_t *variable_name,
- efi_guid_t *vendor_guid)
- {
-- int i, short_name_size = variable_name_size / sizeof(efi_char16_t) + 38;
-+ int i, short_name_size;
- char *short_name;
- struct efivar_entry *new_efivar;
-
-- short_name = kzalloc(short_name_size + 1, GFP_KERNEL);
-+ /*
-+ * Length of the variable bytes in ASCII, plus the '-' separator,
-+ * plus the GUID, plus trailing NUL
-+ */
-+ short_name_size = variable_name_size / sizeof(efi_char16_t)
-+ + 1 + GUID_LEN + 1;
-+
-+ short_name = kzalloc(short_name_size, GFP_KERNEL);
- new_efivar = kzalloc(sizeof(struct efivar_entry), GFP_KERNEL);
-
- if (!short_name || !new_efivar) {
---
-1.7.12.1
-
-
-From ecbf90823d85ebb41e68e6be01f476862d184825 Mon Sep 17 00:00:00 2001
-From: Matt Fleming <matt.fleming@intel.com>
-Date: Tue, 16 Oct 2012 15:58:07 +0100
-Subject: [PATCH 12/17] efivarfs: Return an error if we fail to read a
- variable
-
-Instead of always returning 0 in efivarfs_file_read(), even when we
-fail to successfully read the variable, convert the EFI status to
-something meaningful and return that to the caller. This way the user
-will have some hint as to why the read failed.
-
-Acked-by: Jeremy Kerr <jeremy.kerr@canonical.com>
-Signed-off-by: Matt Fleming <matt.fleming@intel.com>
----
- drivers/firmware/efivars.c | 62 +++++++++++++++++++++++++++-------------------
- 1 file changed, 36 insertions(+), 26 deletions(-)
-
-diff --git a/drivers/firmware/efivars.c b/drivers/firmware/efivars.c
-index a93e401..277e426 100644
---- a/drivers/firmware/efivars.c
-+++ b/drivers/firmware/efivars.c
-@@ -653,6 +653,36 @@ static int efivarfs_file_open(struct inode *inode, struct file *file)
- return 0;
- }
-
-+static int efi_status_to_err(efi_status_t status)
-+{
-+ int err;
-+
-+ switch (status) {
-+ case EFI_INVALID_PARAMETER:
-+ err = -EINVAL;
-+ break;
-+ case EFI_OUT_OF_RESOURCES:
-+ err = -ENOSPC;
-+ break;
-+ case EFI_DEVICE_ERROR:
-+ err = -EIO;
-+ break;
-+ case EFI_WRITE_PROTECTED:
-+ err = -EROFS;
-+ break;
-+ case EFI_SECURITY_VIOLATION:
-+ err = -EACCES;
-+ break;
-+ case EFI_NOT_FOUND:
-+ err = -ENOENT;
-+ break;
-+ default:
-+ err = -EINVAL;
-+ }
-+
-+ return err;
-+}
-+
- static ssize_t efivarfs_file_write(struct file *file,
- const char __user *userbuf, size_t count, loff_t *ppos)
- {
-@@ -711,29 +741,7 @@ static ssize_t efivarfs_file_write(struct file *file,
- spin_unlock(&efivars->lock);
- kfree(data);
-
-- switch (status) {
-- case EFI_INVALID_PARAMETER:
-- count = -EINVAL;
-- break;
-- case EFI_OUT_OF_RESOURCES:
-- count = -ENOSPC;
-- break;
-- case EFI_DEVICE_ERROR:
-- count = -EIO;
-- break;
-- case EFI_WRITE_PROTECTED:
-- count = -EROFS;
-- break;
-- case EFI_SECURITY_VIOLATION:
-- count = -EACCES;
-- break;
-- case EFI_NOT_FOUND:
-- count = -ENOENT;
-- break;
-- default:
-- count = -EINVAL;
-- }
-- return count;
-+ return efi_status_to_err(status);
- }
-
- /*
-@@ -791,12 +799,12 @@ static ssize_t efivarfs_file_read(struct file *file, char __user *userbuf,
- spin_unlock(&efivars->lock);
-
- if (status != EFI_BUFFER_TOO_SMALL)
-- return 0;
-+ return efi_status_to_err(status);
-
- data = kmalloc(datasize + 4, GFP_KERNEL);
-
- if (!data)
-- return 0;
-+ return -ENOMEM;
-
- spin_lock(&efivars->lock);
- status = efivars->ops->get_variable(var->var.VariableName,
-@@ -805,8 +813,10 @@ static ssize_t efivarfs_file_read(struct file *file, char __user *userbuf,
- (data + 4));
- spin_unlock(&efivars->lock);
-
-- if (status != EFI_SUCCESS)
-+ if (status != EFI_SUCCESS) {
-+ size = efi_status_to_err(status);
- goto out_free;
-+ }
-
- memcpy(data, &attributes, 4);
- size = simple_read_from_buffer(userbuf, count, ppos,
---
-1.7.12.1
-
-
-From 39210330739b943856ff21b29b4a0804f4e8349f Mon Sep 17 00:00:00 2001
-From: Matt Fleming <matt.fleming@intel.com>
-Date: Mon, 22 Oct 2012 15:23:29 +0100
-Subject: [PATCH 13/17] efivarfs: Replace magic number with sizeof(attributes)
-
-Seeing "+ 4" littered throughout the functions gets a bit
-confusing. Use "sizeof(attributes)" which clearly explains what
-quantity we're adding.
-
-Acked-by: Jeremy Kerr <jeremy.kerr@canonical.com>
-Signed-off-by: Matt Fleming <matt.fleming@intel.com>
----
- drivers/firmware/efivars.c | 8 ++++----
- 1 file changed, 4 insertions(+), 4 deletions(-)
-
-diff --git a/drivers/firmware/efivars.c b/drivers/firmware/efivars.c
-index 277e426..2c04434 100644
---- a/drivers/firmware/efivars.c
-+++ b/drivers/firmware/efivars.c
-@@ -801,7 +801,7 @@ static ssize_t efivarfs_file_read(struct file *file, char __user *userbuf,
- if (status != EFI_BUFFER_TOO_SMALL)
- return efi_status_to_err(status);
-
-- data = kmalloc(datasize + 4, GFP_KERNEL);
-+ data = kmalloc(datasize + sizeof(attributes), GFP_KERNEL);
-
- if (!data)
- return -ENOMEM;
-@@ -810,7 +810,7 @@ static ssize_t efivarfs_file_read(struct file *file, char __user *userbuf,
- status = efivars->ops->get_variable(var->var.VariableName,
- &var->var.VendorGuid,
- &attributes, &datasize,
-- (data + 4));
-+ (data + sizeof(attributes)));
- spin_unlock(&efivars->lock);
-
- if (status != EFI_SUCCESS) {
-@@ -818,9 +818,9 @@ static ssize_t efivarfs_file_read(struct file *file, char __user *userbuf,
- goto out_free;
- }
-
-- memcpy(data, &attributes, 4);
-+ memcpy(data, &attributes, sizeof(attributes));
- size = simple_read_from_buffer(userbuf, count, ppos,
-- data, datasize + 4);
-+ data, datasize + sizeof(attributes));
- out_free:
- kfree(data);
-
---
-1.7.12.1
-
-
-From 5555f0af6294b3675a95a06da23101150644936d Mon Sep 17 00:00:00 2001
-From: Matt Fleming <matt.fleming@intel.com>
-Date: Mon, 22 Oct 2012 15:51:45 +0100
-Subject: [PATCH 14/17] efivarfs: Add unique magic number
-
-Using pstore's superblock magic number is no doubt going to cause
-problems in the future. Give efivarfs its own magic number.
-
-Acked-by: Jeremy Kerr <jeremy.kerr@canonical.com>
-Signed-off-by: Matt Fleming <matt.fleming@intel.com>
----
- drivers/firmware/efivars.c | 2 +-
- include/uapi/linux/magic.h | 1 +
- 2 files changed, 2 insertions(+), 1 deletion(-)
-
-diff --git a/drivers/firmware/efivars.c b/drivers/firmware/efivars.c
-index 2c04434..3b0cf9a 100644
---- a/drivers/firmware/efivars.c
-+++ b/drivers/firmware/efivars.c
-@@ -991,7 +991,7 @@ int efivarfs_fill_super(struct super_block *sb, void *data, int silent)
- sb->s_maxbytes = MAX_LFS_FILESIZE;
- sb->s_blocksize = PAGE_CACHE_SIZE;
- sb->s_blocksize_bits = PAGE_CACHE_SHIFT;
-- sb->s_magic = PSTOREFS_MAGIC;
-+ sb->s_magic = EFIVARFS_MAGIC;
- sb->s_op = &efivarfs_ops;
- sb->s_time_gran = 1;
-
-diff --git a/include/uapi/linux/magic.h b/include/uapi/linux/magic.h
-index e15192c..12f68c7 100644
---- a/include/uapi/linux/magic.h
-+++ b/include/uapi/linux/magic.h
-@@ -27,6 +27,7 @@
- #define ISOFS_SUPER_MAGIC 0x9660
- #define JFFS2_SUPER_MAGIC 0x72b6
- #define PSTOREFS_MAGIC 0x6165676C
-+#define EFIVARFS_MAGIC 0xde5e81e4
-
- #define MINIX_SUPER_MAGIC 0x137F /* minix v1 fs, 14 char names */
- #define MINIX_SUPER_MAGIC2 0x138F /* minix v1 fs, 30 char names */
---
-1.7.12.1
-
-
-From a42845c67f2386b164d0c5d8220838d7faf5a409 Mon Sep 17 00:00:00 2001
-From: Matt Fleming <matt.fleming@intel.com>
-Date: Tue, 23 Oct 2012 12:35:43 +0100
-Subject: [PATCH 15/17] efivarfs: Make 'datasize' unsigned long
-
-There's no reason to declare 'datasize' as an int, since the majority
-of the functions it's passed to expect an unsigned long anyway. Plus,
-this way we avoid any sign problems during arithmetic.
-
-Acked-by: Jeremy Kerr <jeremy.kerr@canonical.com>
-Signed-off-by: Matt Fleming <matt.fleming@intel.com>
----
- drivers/firmware/efivars.c | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/drivers/firmware/efivars.c b/drivers/firmware/efivars.c
-index 3b0cf9a..6a858d1 100644
---- a/drivers/firmware/efivars.c
-+++ b/drivers/firmware/efivars.c
-@@ -692,7 +692,7 @@ static ssize_t efivarfs_file_write(struct file *file,
- void *data;
- u32 attributes;
- struct inode *inode = file->f_mapping->host;
-- int datasize = count - sizeof(attributes);
-+ unsigned long datasize = count - sizeof(attributes);
- unsigned long newdatasize;
-
- if (count < sizeof(attributes))
---
-1.7.12.1
-
-
-From a268bdf6d7ce623ea4bdfcf39aa52ed3fbfdfd65 Mon Sep 17 00:00:00 2001
-From: Matt Fleming <matt.fleming@intel.com>
-Date: Tue, 23 Oct 2012 12:41:03 +0100
-Subject: [PATCH 16/17] efivarfs: Return a consistent error when
- efivarfs_get_inode() fails
-
-Instead of returning -ENOSPC if efivarfs_get_inode() fails we should
-be returning -ENOMEM, since running out of memory is the only reason
-it can fail. Furthermore, that's the error value used everywhere else
-in this file. It's also less likely to confuse users that hit this
-error case.
-
-Acked-by: Jeremy Kerr <jeremy.kerr@canonical.com>
-Signed-off-by: Matt Fleming <matt.fleming@intel.com>
----
- drivers/firmware/efivars.c | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/drivers/firmware/efivars.c b/drivers/firmware/efivars.c
-index 6a858d1..58cec62 100644
---- a/drivers/firmware/efivars.c
-+++ b/drivers/firmware/efivars.c
-@@ -911,7 +911,7 @@ static int efivarfs_create(struct inode *dir, struct dentry *dentry,
-
- inode = efivarfs_get_inode(dir->i_sb, dir, mode, 0);
- if (!inode)
-- return -ENOSPC;
-+ return -ENOMEM;
-
- var = kzalloc(sizeof(struct efivar_entry), GFP_KERNEL);
- if (!var) {
---
-1.7.12.1
-
-
-From 9c3136c987175b179c0aa725d76cda156894f918 Mon Sep 17 00:00:00 2001
-From: Matt Fleming <matt.fleming@intel.com>
-Date: Fri, 26 Oct 2012 12:18:53 +0100
-Subject: [PATCH 17/17] efivarfs: Fix return value of efivarfs_file_write()
-
-We're stuffing a variable of type size_t (unsigned) into a ssize_t
-(signed) which, even though both types should be the same number of
-bits, it's just asking for sign issues to be introduced.
-
-Cc: Jeremy Kerr <jeremy.kerr@canonical.com>
-Reported-by: Alan Cox <alan@lxorguk.ukuu.org.uk>
-Signed-off-by: Matt Fleming <matt.fleming@intel.com>
----
- drivers/firmware/efivars.c | 13 ++++++++-----
- 1 file changed, 8 insertions(+), 5 deletions(-)
-
-diff --git a/drivers/firmware/efivars.c b/drivers/firmware/efivars.c
-index 58cec62..9ac9340 100644
---- a/drivers/firmware/efivars.c
-+++ b/drivers/firmware/efivars.c
-@@ -694,6 +694,7 @@ static ssize_t efivarfs_file_write(struct file *file,
- struct inode *inode = file->f_mapping->host;
- unsigned long datasize = count - sizeof(attributes);
- unsigned long newdatasize;
-+ ssize_t bytes = 0;
-
- if (count < sizeof(attributes))
- return -EINVAL;
-@@ -706,22 +707,22 @@ static ssize_t efivarfs_file_write(struct file *file,
- efivars = var->efivars;
-
- if (copy_from_user(&attributes, userbuf, sizeof(attributes))) {
-- count = -EFAULT;
-+ bytes = -EFAULT;
- goto out;
- }
-
- if (attributes & ~(EFI_VARIABLE_MASK)) {
-- count = -EINVAL;
-+ bytes = -EINVAL;
- goto out;
- }
-
- if (copy_from_user(data, userbuf + sizeof(attributes), datasize)) {
-- count = -EFAULT;
-+ bytes = -EFAULT;
- goto out;
- }
-
- if (validate_var(&var->var, data, datasize) == false) {
-- count = -EINVAL;
-+ bytes = -EINVAL;
- goto out;
- }
-
-@@ -744,6 +745,8 @@ static ssize_t efivarfs_file_write(struct file *file,
- return efi_status_to_err(status);
- }
-
-+ bytes = count;
-+
- /*
- * Writing to the variable may have caused a change in size (which
- * could either be an append or an overwrite), or the variable to be
-@@ -778,7 +781,7 @@ static ssize_t efivarfs_file_write(struct file *file,
- out:
- kfree(data);
-
-- return count;
-+ return bytes;
- }
-
- static ssize_t efivarfs_file_read(struct file *file, char __user *userbuf,
---
-1.7.12.1
-
diff --git a/freed-ora/current/master/exec-do-not-leave-bprm-interp-on-stack.patch b/freed-ora/current/master/exec-do-not-leave-bprm-interp-on-stack.patch
deleted file mode 100644
index 5198824ed..000000000
--- a/freed-ora/current/master/exec-do-not-leave-bprm-interp-on-stack.patch
+++ /dev/null
@@ -1,118 +0,0 @@
-From 6752ab4cb863fc63ed85f1ca78a42235c09fad83 Mon Sep 17 00:00:00 2001
-From: Kees Cook <keescook@chromium.org>
-Date: Mon, 26 Nov 2012 09:07:50 -0500
-Subject: [PATCH 1/2] exec: do not leave bprm->interp on stack
-
-If a series of scripts are executed, each triggering module loading via
-unprintable bytes in the script header, kernel stack contents can leak
-into the command line.
-
-Normally execution of binfmt_script and binfmt_misc happens recursively.
-However, when modules are enabled, and unprintable bytes exist in the
-bprm->buf, execution will restart after attempting to load matching binfmt
-modules. Unfortunately, the logic in binfmt_script and binfmt_misc does
-not expect to get restarted. They leave bprm->interp pointing to their
-local stack. This means on restart bprm->interp is left pointing into
-unused stack memory which can then be copied into the userspace argv
-areas.
-
-After additional study, it seems that both recursion and restart remains
-the desirable way to handle exec with scripts, misc, and modules. As
-such, we need to protect the changes to interp.
-
-This changes the logic to require allocation for any changes to the
-bprm->interp. To avoid adding a new kmalloc to every exec, the default
-value is left as-is. Only when passing through binfmt_script or
-binfmt_misc does an allocation take place.
-
-For a proof of concept, see DoTest.sh from:
-http://www.halfdog.net/Security/2012/LinuxKernelBinfmtScriptStackDataDisclosure/
-
-Signed-off-by: Kees Cook <keescook@chromium.org>
-Cc: halfdog <me@halfdog.net>
-Cc: P J P <ppandit@redhat.com>
-Cc: Alexander Viro <viro@zeniv.linux.org.uk>
-Cc: <stable@vger.kernel.org>
-Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
----
- fs/binfmt_misc.c | 5 ++++-
- fs/binfmt_script.c | 4 +++-
- fs/exec.c | 15 +++++++++++++++
- include/linux/binfmts.h | 1 +
- 4 files changed, 23 insertions(+), 2 deletions(-)
-
-diff --git a/fs/binfmt_misc.c b/fs/binfmt_misc.c
-index 790b3cd..772428d 100644
---- a/fs/binfmt_misc.c
-+++ b/fs/binfmt_misc.c
-@@ -176,7 +176,10 @@ static int load_misc_binary(struct linux_binprm *bprm, struct pt_regs *regs)
- goto _error;
- bprm->argc ++;
-
-- bprm->interp = iname; /* for binfmt_script */
-+ /* Update interp in case binfmt_script needs it. */
-+ retval = bprm_change_interp(iname, bprm);
-+ if (retval < 0)
-+ goto _error;
-
- interp_file = open_exec (iname);
- retval = PTR_ERR (interp_file);
-diff --git a/fs/binfmt_script.c b/fs/binfmt_script.c
-index d3b8c1f..df49d48 100644
---- a/fs/binfmt_script.c
-+++ b/fs/binfmt_script.c
-@@ -82,7 +82,9 @@ static int load_script(struct linux_binprm *bprm,struct pt_regs *regs)
- retval = copy_strings_kernel(1, &i_name, bprm);
- if (retval) return retval;
- bprm->argc++;
-- bprm->interp = interp;
-+ retval = bprm_change_interp(interp, bprm);
-+ if (retval < 0)
-+ return retval;
-
- /*
- * OK, now restart the process with the interpreter's dentry.
-diff --git a/fs/exec.c b/fs/exec.c
-index 0039055..c6e6de4 100644
---- a/fs/exec.c
-+++ b/fs/exec.c
-@@ -1175,9 +1175,24 @@ void free_bprm(struct linux_binprm *bprm)
- mutex_unlock(&current->signal->cred_guard_mutex);
- abort_creds(bprm->cred);
- }
-+ /* If a binfmt changed the interp, free it. */
-+ if (bprm->interp != bprm->filename)
-+ kfree(bprm->interp);
- kfree(bprm);
- }
-
-+int bprm_change_interp(char *interp, struct linux_binprm *bprm)
-+{
-+ /* If a binfmt changed the interp, free it first. */
-+ if (bprm->interp != bprm->filename)
-+ kfree(bprm->interp);
-+ bprm->interp = kstrdup(interp, GFP_KERNEL);
-+ if (!bprm->interp)
-+ return -ENOMEM;
-+ return 0;
-+}
-+EXPORT_SYMBOL(bprm_change_interp);
-+
- /*
- * install the new credentials for this executable
- */
-diff --git a/include/linux/binfmts.h b/include/linux/binfmts.h
-index cfcc6bf..de0628e 100644
---- a/include/linux/binfmts.h
-+++ b/include/linux/binfmts.h
-@@ -114,6 +114,7 @@ extern int setup_arg_pages(struct linux_binprm * bprm,
- unsigned long stack_top,
- int executable_stack);
- extern int bprm_mm_init(struct linux_binprm *bprm);
-+extern int bprm_change_interp(char *interp, struct linux_binprm *bprm);
- extern int copy_strings_kernel(int argc, const char *const *argv,
- struct linux_binprm *bprm);
- extern int prepare_bprm_creds(struct linux_binprm *bprm);
---
-1.8.0
-
diff --git a/freed-ora/current/master/exec-use-eloop-for-max-recursion-depth.patch b/freed-ora/current/master/exec-use-eloop-for-max-recursion-depth.patch
deleted file mode 100644
index a3c48884f..000000000
--- a/freed-ora/current/master/exec-use-eloop-for-max-recursion-depth.patch
+++ /dev/null
@@ -1,144 +0,0 @@
-From ba1b23d05259e31d30a78017cdfbc010dcb08aa6 Mon Sep 17 00:00:00 2001
-From: Kees Cook <keescook@chromium.org>
-Date: Mon, 26 Nov 2012 09:02:11 -0500
-Subject: [PATCH 2/2] exec: use -ELOOP for max recursion depth
-
-To avoid an explosion of request_module calls on a chain of abusive
-scripts, fail maximum recursion with -ELOOP instead of -ENOEXEC. As soon
-as maximum recursion depth is hit, the error will fail all the way back
-up the chain, aborting immediately.
-
-This also has the side-effect of stopping the user's shell from attempting
-to reexecute the top-level file as a shell script. As seen in the
-dash source:
-
- if (cmd != path_bshell && errno == ENOEXEC) {
- *argv-- = cmd;
- *argv = cmd = path_bshell;
- goto repeat;
- }
-
-The above logic was designed for running scripts automatically that lacked
-the "#!" header, not to re-try failed recursion. On a legitimate -ENOEXEC,
-things continue to behave as the shell expects.
-
-Additionally, when tracking recursion, the binfmt handlers should not be
-involved. The recursion being tracked is the depth of calls through
-search_binary_handler(), so that function should be exclusively responsible
-for tracking the depth.
-
-Signed-off-by: Kees Cook <keescook@chromium.org>
-Cc: halfdog <me@halfdog.net>
-Cc: P J P <ppandit@redhat.com>
-Cc: Alexander Viro <viro@zeniv.linux.org.uk>
-Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
----
- fs/binfmt_em86.c | 1 -
- fs/binfmt_misc.c | 6 ------
- fs/binfmt_script.c | 4 +---
- fs/exec.c | 10 +++++-----
- include/linux/binfmts.h | 2 --
- 5 files changed, 6 insertions(+), 17 deletions(-)
-
-diff --git a/fs/binfmt_em86.c b/fs/binfmt_em86.c
-index 2790c7e..575796a 100644
---- a/fs/binfmt_em86.c
-+++ b/fs/binfmt_em86.c
-@@ -42,7 +42,6 @@ static int load_em86(struct linux_binprm *bprm,struct pt_regs *regs)
- return -ENOEXEC;
- }
-
-- bprm->recursion_depth++; /* Well, the bang-shell is implicit... */
- allow_write_access(bprm->file);
- fput(bprm->file);
- bprm->file = NULL;
-diff --git a/fs/binfmt_misc.c b/fs/binfmt_misc.c
-index 772428d..f0f1a06 100644
---- a/fs/binfmt_misc.c
-+++ b/fs/binfmt_misc.c
-@@ -117,10 +117,6 @@ static int load_misc_binary(struct linux_binprm *bprm, struct pt_regs *regs)
- if (!enabled)
- goto _ret;
-
-- retval = -ENOEXEC;
-- if (bprm->recursion_depth > BINPRM_MAX_RECURSION)
-- goto _ret;
--
- /* to keep locking time low, we copy the interpreter string */
- read_lock(&entries_lock);
- fmt = check_file(bprm);
-@@ -200,8 +196,6 @@ static int load_misc_binary(struct linux_binprm *bprm, struct pt_regs *regs)
- if (retval < 0)
- goto _error;
-
-- bprm->recursion_depth++;
--
- retval = search_binary_handler (bprm, regs);
- if (retval < 0)
- goto _error;
-diff --git a/fs/binfmt_script.c b/fs/binfmt_script.c
-index df49d48..8ae4be1 100644
---- a/fs/binfmt_script.c
-+++ b/fs/binfmt_script.c
-@@ -22,15 +22,13 @@ static int load_script(struct linux_binprm *bprm,struct pt_regs *regs)
- char interp[BINPRM_BUF_SIZE];
- int retval;
-
-- if ((bprm->buf[0] != '#') || (bprm->buf[1] != '!') ||
-- (bprm->recursion_depth > BINPRM_MAX_RECURSION))
-+ if ((bprm->buf[0] != '#') || (bprm->buf[1] != '!'))
- return -ENOEXEC;
- /*
- * This section does the #! interpretation.
- * Sorta complicated, but hopefully it will work. -TYT
- */
-
-- bprm->recursion_depth++;
- allow_write_access(bprm->file);
- fput(bprm->file);
- bprm->file = NULL;
-diff --git a/fs/exec.c b/fs/exec.c
-index c6e6de4..85c1f9e 100644
---- a/fs/exec.c
-+++ b/fs/exec.c
-@@ -1371,6 +1371,10 @@ int search_binary_handler(struct linux_binprm *bprm,struct pt_regs *regs)
- struct linux_binfmt *fmt;
- pid_t old_pid, old_vpid;
-
-+ /* This allows 4 levels of binfmt rewrites before failing hard. */
-+ if (depth > 5)
-+ return -ELOOP;
-+
- retval = security_bprm_check(bprm);
- if (retval)
- return retval;
-@@ -1395,12 +1399,8 @@ int search_binary_handler(struct linux_binprm *bprm,struct pt_regs *regs)
- if (!try_module_get(fmt->module))
- continue;
- read_unlock(&binfmt_lock);
-+ bprm->recursion_depth = depth + 1;
- retval = fn(bprm, regs);
-- /*
-- * Restore the depth counter to its starting value
-- * in this call, so we don't have to rely on every
-- * load_binary function to restore it on return.
-- */
- bprm->recursion_depth = depth;
- if (retval >= 0) {
- if (depth == 0) {
-diff --git a/include/linux/binfmts.h b/include/linux/binfmts.h
-index de0628e..54135f6 100644
---- a/include/linux/binfmts.h
-+++ b/include/linux/binfmts.h
-@@ -54,8 +54,6 @@ struct linux_binprm {
- #define BINPRM_FLAGS_EXECFD_BIT 1
- #define BINPRM_FLAGS_EXECFD (1 << BINPRM_FLAGS_EXECFD_BIT)
-
--#define BINPRM_MAX_RECURSION 4
--
- /* Function parameter for binfmt->coredump */
- struct coredump_params {
- siginfo_t *siginfo;
---
-1.8.0
-
diff --git a/freed-ora/current/master/handle-efi-roms.patch b/freed-ora/current/master/handle-efi-roms.patch
deleted file mode 100644
index bc080542b..000000000
--- a/freed-ora/current/master/handle-efi-roms.patch
+++ /dev/null
@@ -1,388 +0,0 @@
-diff -ur linux-3.6.0-0.rc2.git2.1.fc18.x86_64/arch/x86/boot/compressed/eboot.c ../kernel-3.5.fc18.bak/linux-3.6.0-0.rc2.git2.1.fc18.x86_64/arch/x86/boot/compressed/eboot.c
---- linux-3.6.0-0.rc2.git2.1.fc18.x86_64/arch/x86/boot/compressed/eboot.c 2012-08-22 15:26:32.485522068 -0400
-+++ ../kernel-3.5.fc18.bak/linux-3.6.0-0.rc2.git2.1.fc18.x86_64/arch/x86/boot/compressed/eboot.c 2012-08-22 15:25:40.529244868 -0400
-@@ -8,6 +8,7 @@
- * ----------------------------------------------------------------------- */
-
- #include <linux/efi.h>
-+#include <linux/pci.h>
- #include <asm/efi.h>
- #include <asm/setup.h>
- #include <asm/desc.h>
-@@ -243,6 +244,121 @@
- *size = len;
- }
-
-+static efi_status_t setup_efi_pci(struct boot_params *params)
-+{
-+ efi_pci_io_protocol *pci;
-+ efi_status_t status;
-+ void **pci_handle;
-+ efi_guid_t pci_proto = EFI_PCI_IO_PROTOCOL_GUID;
-+ unsigned long nr_pci, size = 0;
-+ int i;
-+ struct setup_data *data;
-+
-+ data = (struct setup_data *)params->hdr.setup_data;
-+
-+ while (data && data->next)
-+ data = (struct setup_data *)data->next;
-+
-+ status = efi_call_phys5(sys_table->boottime->locate_handle,
-+ EFI_LOCATE_BY_PROTOCOL, &pci_proto,
-+ NULL, &size, pci_handle);
-+
-+ if (status == EFI_BUFFER_TOO_SMALL) {
-+ status = efi_call_phys3(sys_table->boottime->allocate_pool,
-+ EFI_LOADER_DATA, size, &pci_handle);
-+
-+ if (status != EFI_SUCCESS)
-+ return status;
-+
-+ status = efi_call_phys5(sys_table->boottime->locate_handle,
-+ EFI_LOCATE_BY_PROTOCOL, &pci_proto,
-+ NULL, &size, pci_handle);
-+ }
-+
-+ if (status != EFI_SUCCESS)
-+ goto free_handle;
-+
-+ nr_pci = size / sizeof(void *);
-+ for (i = 0; i < nr_pci; i++) {
-+ void *h = pci_handle[i];
-+ uint64_t attributes;
-+ struct pci_setup_rom *rom;
-+
-+ status = efi_call_phys3(sys_table->boottime->handle_protocol,
-+ h, &pci_proto, &pci);
-+
-+ if (status != EFI_SUCCESS)
-+ continue;
-+
-+ if (!pci)
-+ continue;
-+
-+ status = efi_call_phys4(pci->attributes, pci,
-+ EfiPciIoAttributeOperationGet, 0,
-+ &attributes);
-+
-+ if (status != EFI_SUCCESS)
-+ continue;
-+
-+ if (!attributes & EFI_PCI_IO_ATTRIBUTE_EMBEDDED_ROM)
-+ continue;
-+
-+ if (!pci->romimage || !pci->romsize)
-+ continue;
-+
-+ size = pci->romsize + sizeof(*rom);
-+
-+ status = efi_call_phys3(sys_table->boottime->allocate_pool,
-+ EFI_LOADER_DATA, size, &rom);
-+
-+ if (status != EFI_SUCCESS)
-+ continue;
-+
-+ rom->data.type = SETUP_PCI;
-+ rom->data.len = size - sizeof(struct setup_data);
-+ rom->data.next = NULL;
-+ rom->pcilen = pci->romsize;
-+
-+ status = efi_call_phys5(pci->pci.read, pci,
-+ EfiPciIoWidthUint16, PCI_VENDOR_ID,
-+ 1, &(rom->vendor));
-+
-+ if (status != EFI_SUCCESS)
-+ goto free_struct;
-+
-+ status = efi_call_phys5(pci->pci.read, pci,
-+ EfiPciIoWidthUint16, PCI_DEVICE_ID,
-+ 1, &(rom->devid));
-+
-+ if (status != EFI_SUCCESS)
-+ goto free_struct;
-+
-+ status = efi_call_phys5(pci->get_location, pci,
-+ &(rom->segment), &(rom->bus),
-+ &(rom->device), &(rom->function));
-+
-+ if (status != EFI_SUCCESS)
-+ goto free_struct;
-+
-+ memcpy(rom->romdata, pci->romimage, pci->romsize);
-+
-+ if (data)
-+ data->next = (uint64_t)rom;
-+ else
-+ params->hdr.setup_data = (uint64_t)rom;
-+
-+ data = (struct setup_data *)rom;
-+
-+ continue;
-+ free_struct:
-+ efi_call_phys1(sys_table->boottime->free_pool, rom);
-+ }
-+
-+free_handle:
-+ efi_call_phys1(sys_table->boottime->free_pool, pci_handle);
-+ return status;
-+}
-+
- /*
- * See if we have Graphics Output Protocol
- */
-@@ -1052,6 +1171,8 @@
-
- setup_graphics(boot_params);
-
-+ setup_efi_pci(boot_params);
-+
- status = efi_call_phys3(sys_table->boottime->allocate_pool,
- EFI_LOADER_DATA, sizeof(*gdt),
- (void **)&gdt);
-diff -ur linux-3.6.0-0.rc2.git2.1.fc18.x86_64/arch/x86/include/asm/bootparam.h ../kernel-3.5.fc18.bak/linux-3.6.0-0.rc2.git2.1.fc18.x86_64/arch/x86/include/asm/bootparam.h
---- linux-3.6.0-0.rc2.git2.1.fc18.x86_64/arch/x86/include/asm/bootparam.h 2012-08-22 15:26:32.485522068 -0400
-+++ ../kernel-3.5.fc18.bak/linux-3.6.0-0.rc2.git2.1.fc18.x86_64/arch/x86/include/asm/bootparam.h 2012-08-22 15:25:40.530244882 -0400
-@@ -13,6 +13,7 @@
- #define SETUP_NONE 0
- #define SETUP_E820_EXT 1
- #define SETUP_DTB 2
-+#define SETUP_PCI 3
-
- /* extensible setup data list node */
- struct setup_data {
-diff -ur linux-3.6.0-0.rc2.git2.1.fc18.x86_64/arch/x86/include/asm/pci.h ../kernel-3.5.fc18.bak/linux-3.6.0-0.rc2.git2.1.fc18.x86_64/arch/x86/include/asm/pci.h
---- linux-3.6.0-0.rc2.git2.1.fc18.x86_64/arch/x86/include/asm/pci.h 2012-07-21 16:58:29.000000000 -0400
-+++ ../kernel-3.5.fc18.bak/linux-3.6.0-0.rc2.git2.1.fc18.x86_64/arch/x86/include/asm/pci.h 2012-08-22 15:25:40.530244882 -0400
-@@ -171,4 +171,16 @@
- }
- #endif
-
-+struct pci_setup_rom {
-+ struct setup_data data;
-+ uint16_t vendor;
-+ uint16_t devid;
-+ uint64_t pcilen;
-+ unsigned long segment;
-+ unsigned long bus;
-+ unsigned long device;
-+ unsigned long function;
-+ uint8_t romdata[0];
-+};
-+
- #endif /* _ASM_X86_PCI_H */
-diff -ur linux-3.6.0-0.rc2.git2.1.fc18.x86_64/arch/x86/pci/common.c ../kernel-3.5.fc18.bak/linux-3.6.0-0.rc2.git2.1.fc18.x86_64/arch/x86/pci/common.c
---- linux-3.6.0-0.rc2.git2.1.fc18.x86_64/arch/x86/pci/common.c 2012-08-22 15:24:45.477951182 -0400
-+++ ../kernel-3.5.fc18.bak/linux-3.6.0-0.rc2.git2.1.fc18.x86_64/arch/x86/pci/common.c 2012-08-22 15:25:40.530244882 -0400
-@@ -17,6 +17,7 @@
- #include <asm/io.h>
- #include <asm/smp.h>
- #include <asm/pci_x86.h>
-+#include <asm/setup.h>
-
- unsigned int pci_probe = PCI_PROBE_BIOS | PCI_PROBE_CONF1 | PCI_PROBE_CONF2 |
- PCI_PROBE_MMCONF;
-@@ -608,6 +609,38 @@
- return (pci_probe & PCI_ASSIGN_ALL_BUSSES) ? 1 : 0;
- }
-
-+int pcibios_add_device(struct pci_dev *dev)
-+{
-+ struct setup_data *data;
-+ struct pci_setup_rom *rom;
-+ u64 pa_data;
-+
-+ if (boot_params.hdr.version < 0x0209)
-+ return 0;
-+
-+ pa_data = boot_params.hdr.setup_data;
-+ while (pa_data) {
-+ data = phys_to_virt(pa_data);
-+
-+ if (data->type == SETUP_PCI) {
-+ rom = (struct pci_setup_rom *)data;
-+
-+ if ((pci_domain_nr(dev->bus) == rom->segment) &&
-+ (dev->bus->number == rom->bus) &&
-+ (PCI_SLOT(dev->devfn) == rom->device) &&
-+ (PCI_FUNC(dev->devfn) == rom->function) &&
-+ (dev->vendor == rom->vendor) &&
-+ (dev->device == rom->devid)) {
-+ dev->rom = (void *)(pa_data +
-+ offsetof(struct pci_setup_rom, romdata));
-+ dev->romlen = rom->pcilen;
-+ }
-+ }
-+ pa_data = data->next;
-+ }
-+ return 0;
-+}
-+
- int pcibios_enable_device(struct pci_dev *dev, int mask)
- {
- int err;
-diff -ur linux-3.6.0-0.rc2.git2.1.fc18.x86_64/drivers/pci/bus.c ../kernel-3.5.fc18.bak/linux-3.6.0-0.rc2.git2.1.fc18.x86_64/drivers/pci/bus.c
---- linux-3.6.0-0.rc2.git2.1.fc18.x86_64/drivers/pci/bus.c 2012-08-22 15:24:47.425961575 -0400
-+++ ../kernel-3.5.fc18.bak/linux-3.6.0-0.rc2.git2.1.fc18.x86_64/drivers/pci/bus.c 2012-08-22 15:26:20.147456241 -0400
-@@ -166,6 +166,11 @@
- int retval;
-
- pci_fixup_device(pci_fixup_final, dev);
-+
-+ retval = pcibios_add_device(dev);
-+ if (retval)
-+ return retval;
-+
- retval = device_add(&dev->dev);
- if (retval)
- return retval;
-diff -ur linux-3.6.0-0.rc2.git2.1.fc18.x86_64/drivers/pci/pci.c ../kernel-3.5.fc18.bak/linux-3.6.0-0.rc2.git2.1.fc18.x86_64/drivers/pci/pci.c
---- linux-3.6.0-0.rc2.git2.1.fc18.x86_64/drivers/pci/pci.c 2012-08-22 15:24:47.432961612 -0400
-+++ ../kernel-3.5.fc18.bak/linux-3.6.0-0.rc2.git2.1.fc18.x86_64/drivers/pci/pci.c 2012-08-22 15:25:40.531244893 -0400
-@@ -1385,6 +1385,19 @@
- dr->pinned = 1;
- }
-
-+/*
-+ * pcibios_add_device - provide arch specific hooks when adding device dev
-+ * @dev: the PCI device being added
-+ *
-+ * Permits the platform to provide architecture specific functionality when
-+ * devices are added. This is the default implementation. Architecture
-+ * implementations can override this.
-+ */
-+int __attribute__ ((weak)) pcibios_add_device (struct pci_dev *dev)
-+{
-+ return 0;
-+}
-+
- /**
- * pcibios_disable_device - disable arch specific PCI resources for device dev
- * @dev: the PCI device to disable
-diff -ur linux-3.6.0-0.rc2.git2.1.fc18.x86_64/drivers/pci/rom.c ../kernel-3.5.fc18.bak/linux-3.6.0-0.rc2.git2.1.fc18.x86_64/drivers/pci/rom.c
---- linux-3.6.0-0.rc2.git2.1.fc18.x86_64/drivers/pci/rom.c 2012-07-21 16:58:29.000000000 -0400
-+++ ../kernel-3.5.fc18.bak/linux-3.6.0-0.rc2.git2.1.fc18.x86_64/drivers/pci/rom.c 2012-08-22 15:25:40.531244893 -0400
-@@ -126,6 +126,12 @@
- /* primary video rom always starts here */
- start = (loff_t)0xC0000;
- *size = 0x20000; /* cover C000:0 through E000:0 */
-+ /*
-+ * Some devices may provide ROMs via a source other than the BAR
-+ */
-+ } else if (pdev->rom && pdev->romlen) {
-+ *size = pdev->romlen;
-+ return phys_to_virt(pdev->rom);
- } else {
- if (res->flags &
- (IORESOURCE_ROM_COPY | IORESOURCE_ROM_BIOS_COPY)) {
-@@ -219,7 +225,8 @@
- if (res->flags & (IORESOURCE_ROM_COPY | IORESOURCE_ROM_BIOS_COPY))
- return;
-
-- iounmap(rom);
-+ if (!pdev->rom || !pdev->romlen)
-+ iounmap(rom);
-
- /* Disable again before continuing, leave enabled if pci=rom */
- if (!(res->flags & (IORESOURCE_ROM_ENABLE | IORESOURCE_ROM_SHADOW)))
-diff -ur linux-3.6.0-0.rc2.git2.1.fc18.x86_64/include/linux/efi.h ../kernel-3.5.fc18.bak/linux-3.6.0-0.rc2.git2.1.fc18.x86_64/include/linux/efi.h
---- linux-3.6.0-0.rc2.git2.1.fc18.x86_64/include/linux/efi.h 2012-08-22 15:24:49.550972911 -0400
-+++ ../kernel-3.5.fc18.bak/linux-3.6.0-0.rc2.git2.1.fc18.x86_64/include/linux/efi.h 2012-08-22 15:25:40.533244906 -0400
-@@ -196,6 +196,77 @@
- void *create_event_ex;
- } efi_boot_services_t;
-
-+typedef enum {
-+ EfiPciIoWidthUint8,
-+ EfiPciIoWidthUint16,
-+ EfiPciIoWidthUint32,
-+ EfiPciIoWidthUint64,
-+ EfiPciIoWidthFifoUint8,
-+ EfiPciIoWidthFifoUint16,
-+ EfiPciIoWidthFifoUint32,
-+ EfiPciIoWidthFifoUint64,
-+ EfiPciIoWidthFillUint8,
-+ EfiPciIoWidthFillUint16,
-+ EfiPciIoWidthFillUint32,
-+ EfiPciIoWidthFillUint64,
-+ EfiPciIoWidthMaximum
-+} EFI_PCI_IO_PROTOCOL_WIDTH;
-+
-+typedef enum {
-+ EfiPciIoAttributeOperationGet,
-+ EfiPciIoAttributeOperationSet,
-+ EfiPciIoAttributeOperationEnable,
-+ EfiPciIoAttributeOperationDisable,
-+ EfiPciIoAttributeOperationSupported,
-+ EfiPciIoAttributeOperationMaximum
-+} EFI_PCI_IO_PROTOCOL_ATTRIBUTE_OPERATION;
-+
-+
-+typedef struct {
-+ void *read;
-+ void *write;
-+} efi_pci_io_protocol_access_t;
-+
-+typedef struct {
-+ void *poll_mem;
-+ void *poll_io;
-+ efi_pci_io_protocol_access_t mem;
-+ efi_pci_io_protocol_access_t io;
-+ efi_pci_io_protocol_access_t pci;
-+ void *copy_mem;
-+ void *map;
-+ void *unmap;
-+ void *allocate_buffer;
-+ void *free_buffer;
-+ void *flush;
-+ void *get_location;
-+ void *attributes;
-+ void *get_bar_attributes;
-+ void *set_bar_attributes;
-+ uint64_t romsize;
-+ void *romimage;
-+} efi_pci_io_protocol;
-+
-+#define EFI_PCI_IO_ATTRIBUTE_ISA_MOTHERBOARD_IO 0x0001
-+#define EFI_PCI_IO_ATTRIBUTE_ISA_IO 0x0002
-+#define EFI_PCI_IO_ATTRIBUTE_VGA_PALETTE_IO 0x0004
-+#define EFI_PCI_IO_ATTRIBUTE_VGA_MEMORY 0x0008
-+#define EFI_PCI_IO_ATTRIBUTE_VGA_IO 0x0010
-+#define EFI_PCI_IO_ATTRIBUTE_IDE_PRIMARY_IO 0x0020
-+#define EFI_PCI_IO_ATTRIBUTE_IDE_SECONDARY_IO 0x0040
-+#define EFI_PCI_IO_ATTRIBUTE_MEMORY_WRITE_COMBINE 0x0080
-+#define EFI_PCI_IO_ATTRIBUTE_IO 0x0100
-+#define EFI_PCI_IO_ATTRIBUTE_MEMORY 0x0200
-+#define EFI_PCI_IO_ATTRIBUTE_BUS_MASTER 0x0400
-+#define EFI_PCI_IO_ATTRIBUTE_MEMORY_CACHED 0x0800
-+#define EFI_PCI_IO_ATTRIBUTE_MEMORY_DISABLE 0x1000
-+#define EFI_PCI_IO_ATTRIBUTE_EMBEDDED_DEVICE 0x2000
-+#define EFI_PCI_IO_ATTRIBUTE_EMBEDDED_ROM 0x4000
-+#define EFI_PCI_IO_ATTRIBUTE_DUAL_ADDRESS_CYCLE 0x8000
-+#define EFI_PCI_IO_ATTRIBUTE_ISA_IO_16 0x10000
-+#define EFI_PCI_IO_ATTRIBUTE_VGA_PALETTE_IO_16 0x20000
-+#define EFI_PCI_IO_ATTRIBUTE_VGA_IO_16 0x40000
-+
- /*
- * Types and defines for EFI ResetSystem
- */
-diff -ur linux-3.6.0-0.rc2.git2.1.fc18.x86_64/include/linux/pci.h ../kernel-3.5.fc18.bak/linux-3.6.0-0.rc2.git2.1.fc18.x86_64/include/linux/pci.h
---- linux-3.6.0-0.rc2.git2.1.fc18.x86_64/include/linux/pci.h 2012-08-22 15:24:48.703968392 -0400
-+++ ../kernel-3.5.fc18.bak/linux-3.6.0-0.rc2.git2.1.fc18.x86_64/include/linux/pci.h 2012-08-22 15:25:40.534244910 -0400
-@@ -355,6 +355,8 @@
- };
- struct pci_ats *ats; /* Address Translation Service */
- #endif
-+ void *rom; /* Physical pointer to ROM if it's not from the BAR */
-+ size_t romlen; /* Length of ROM if it's not from the BAR */
- };
-
- static inline struct pci_dev *pci_physfn(struct pci_dev *dev)
-@@ -1582,6 +1584,7 @@
- void pcibios_set_master(struct pci_dev *dev);
- int pcibios_set_pcie_reset_state(struct pci_dev *dev,
- enum pcie_reset_state state);
-+int pcibios_add_device(struct pci_dev *dev);
-
- #ifdef CONFIG_PCI_MMCONFIG
- extern void __init pci_mmcfg_early_init(void);
diff --git a/freed-ora/current/master/linux-2.6-input-kill-stupid-messages.patch b/freed-ora/current/master/input-kill-stupid-messages.patch
index ff7023f51..ff7023f51 100644
--- a/freed-ora/current/master/linux-2.6-input-kill-stupid-messages.patch
+++ b/freed-ora/current/master/input-kill-stupid-messages.patch
diff --git a/freed-ora/current/master/iwlegacy-add-flush-callback.patch b/freed-ora/current/master/iwlegacy-add-flush-callback.patch
new file mode 100644
index 000000000..b8b656795
--- /dev/null
+++ b/freed-ora/current/master/iwlegacy-add-flush-callback.patch
@@ -0,0 +1,103 @@
+From 70277f47b58b174a6b0b891dcd06ae5125afb73b Mon Sep 17 00:00:00 2001
+From: Stanislaw Gruszka <sgruszka@redhat.com>
+Date: Thu, 20 Dec 2012 14:31:51 +0100
+Subject: [PATCH] iwlegacy: add flush callback
+
+Dump implementation of flush, which just wait until all TX queues
+become empty.
+
+Signed-off-by: Stanislaw Gruszka <sgruszka@redhat.com>
+Signed-off-by: John W. Linville <linville@tuxdriver.com>
+---
+ drivers/net/wireless/iwlegacy/3945-mac.c | 1 +
+ drivers/net/wireless/iwlegacy/4965-mac.c | 1 +
+ drivers/net/wireless/iwlegacy/common.c | 36 ++++++++++++++++++++++++++++++
+ drivers/net/wireless/iwlegacy/common.h | 1 +
+ 4 files changed, 39 insertions(+), 0 deletions(-)
+
+diff --git a/drivers/net/wireless/iwlegacy/3945-mac.c b/drivers/net/wireless/iwlegacy/3945-mac.c
+index d604b40..962400a 100644
+--- a/drivers/net/wireless/iwlegacy/3945-mac.c
++++ b/drivers/net/wireless/iwlegacy/3945-mac.c
+@@ -3474,6 +3474,7 @@ struct ieee80211_ops il3945_mac_ops = {
+ .sta_add = il3945_mac_sta_add,
+ .sta_remove = il_mac_sta_remove,
+ .tx_last_beacon = il_mac_tx_last_beacon,
++ .flush = il_mac_flush,
+ };
+
+ static int
+diff --git a/drivers/net/wireless/iwlegacy/4965-mac.c b/drivers/net/wireless/iwlegacy/4965-mac.c
+index 6a86ed4..c40020c 100644
+--- a/drivers/net/wireless/iwlegacy/4965-mac.c
++++ b/drivers/net/wireless/iwlegacy/4965-mac.c
+@@ -6308,6 +6308,7 @@ const struct ieee80211_ops il4965_mac_ops = {
+ .sta_remove = il_mac_sta_remove,
+ .channel_switch = il4965_mac_channel_switch,
+ .tx_last_beacon = il_mac_tx_last_beacon,
++ .flush = il_mac_flush,
+ };
+
+ static int
+diff --git a/drivers/net/wireless/iwlegacy/common.c b/drivers/net/wireless/iwlegacy/common.c
+index 7e16d10..56b8021 100644
+--- a/drivers/net/wireless/iwlegacy/common.c
++++ b/drivers/net/wireless/iwlegacy/common.c
+@@ -4707,6 +4707,42 @@ out:
+ }
+ EXPORT_SYMBOL(il_mac_change_interface);
+
++void
++il_mac_flush(struct ieee80211_hw *hw, bool drop)
++{
++ struct il_priv *il = hw->priv;
++ unsigned long timeout = jiffies + msecs_to_jiffies(500);
++ int i;
++
++ mutex_lock(&il->mutex);
++ D_MAC80211("enter\n");
++
++ if (il->txq == NULL)
++ goto out;
++
++ for (i = 0; i < il->hw_params.max_txq_num; i++) {
++ struct il_queue *q;
++
++ if (i == il->cmd_queue)
++ continue;
++
++ q = &il->txq[i].q;
++ if (q->read_ptr == q->write_ptr)
++ continue;
++
++ if (time_after(jiffies, timeout)) {
++ IL_ERR("Failed to flush queue %d\n", q->id);
++ break;
++ }
++
++ msleep(20);
++ }
++out:
++ D_MAC80211("leave\n");
++ mutex_unlock(&il->mutex);
++}
++EXPORT_SYMBOL(il_mac_flush);
++
+ /*
+ * On every watchdog tick we check (latest) time stamp. If it does not
+ * change during timeout period and queue is not empty we reset firmware.
+diff --git a/drivers/net/wireless/iwlegacy/common.h b/drivers/net/wireless/iwlegacy/common.h
+index a9a569f..37fe553 100644
+--- a/drivers/net/wireless/iwlegacy/common.h
++++ b/drivers/net/wireless/iwlegacy/common.h
+@@ -1723,6 +1723,7 @@ void il_mac_remove_interface(struct ieee80211_hw *hw,
+ struct ieee80211_vif *vif);
+ int il_mac_change_interface(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
+ enum nl80211_iftype newtype, bool newp2p);
++void il_mac_flush(struct ieee80211_hw *hw, bool drop);
+ int il_alloc_txq_mem(struct il_priv *il);
+ void il_free_txq_mem(struct il_priv *il);
+
+--
+1.7.7.6
+
diff --git a/freed-ora/current/master/kernel.spec b/freed-ora/current/master/kernel.spec
index 95c1548bf..b0504d6ae 100644
--- a/freed-ora/current/master/kernel.spec
+++ b/freed-ora/current/master/kernel.spec
@@ -6,7 +6,7 @@ Summary: The Linux kernel
# For a stable, released kernel, released_kernel should be 1. For rawhide
# and/or a kernel built from an rc or git snapshot, released_kernel should
# be 0.
-%global released_kernel 1
+%global released_kernel 0
# Sign modules on x86. Make sure the config files match this setting if more
# architectures are added.
@@ -62,7 +62,7 @@ Summary: The Linux kernel
# For non-released -rc kernels, this will be appended after the rcX and
# gitX tags, so a 3 here would become part of release "0.rcX.gitX.3"
#
-%global baserelease 6
+%global baserelease 1
%global fedora_build %{baserelease}
# base_sublevel is the kernel version we're starting with and patching
@@ -78,9 +78,9 @@ Summary: The Linux kernel
%define basegnu -gnu%{?librev}
# To be inserted between "patch" and "-2.6.".
-#define stablelibre -3.7%{?stablegnux}
-%define rcrevlibre -3.6%{?rcrevgnux}
-#define gitrevlibre -3.7%{?gitrevgnux}
+#define stablelibre -3.8%{?stablegnux}
+%define rcrevlibre -3.7%{?rcrevgnux}
+#define gitrevlibre -3.8%{?gitrevgnux}
%if 0%{?stablelibre:1}
%define stablegnu -gnu%{?librev}
@@ -131,9 +131,9 @@ Summary: The Linux kernel
# The next upstream release sublevel (base_sublevel+1)
%define upstream_sublevel %(echo $((%{base_sublevel} + 1)))
# The rc snapshot level
-%define rcrev 8
+%define rcrev 6
# The git snapshot level
-%define gitrev 0
+%define gitrev 2
# Set rpm version accordingly
%define rpmversion 3.%{upstream_sublevel}.0
%endif
@@ -178,8 +178,6 @@ Summary: The Linux kernel
%define with_tegra %{?_without_tegra: 0} %{?!_without_tegra: 1}
# kernel-kirkwood (only valid for arm)
%define with_kirkwood %{?_without_kirkwood: 0} %{?!_without_kirkwood: 1}
-# kernel-imx (only valid for arm)
-%define with_imx %{?_without_imx: 0} %{?!_without_imx: 1}
#
# Additional options for user-friendly one-off kernel building:
#
@@ -294,9 +292,8 @@ Summary: The Linux kernel
%define with_pae 0
%endif
-# kernel up (unified kernel target), tegra, omap and imx are only built on armv7 hfp/sfp
+# kernel up (unified kernel target), tegra and omap are only built on armv7 hfp/sfp
%ifnarch armv7hl armv7l
-%define with_imx 0
%define with_omap 0
%define with_tegra 0
%endif
@@ -379,7 +376,7 @@ Summary: The Linux kernel
%endif
# sparse blows up on ppc64 and sparc64
-%ifarch ppc64 ppc sparc64 ppc64p7
+%ifarch ppc64 ppc ppc64p7
%define with_sparse 0
%endif
@@ -420,19 +417,6 @@ Summary: The Linux kernel
%define with_tools 0
%endif
-%ifarch sparc64
-%define asmarch sparc
-%define all_arch_configs kernel-%{version}-sparc64*.config
-%define make_target vmlinux
-%define kernel_image vmlinux
-%define image_install_path boot
-%define with_tools 0
-%endif
-
-%ifarch sparcv9
-%define hdrarch sparc
-%endif
-
%ifarch ppc
%define asmarch powerpc
%define hdrarch powerpc
@@ -460,8 +444,6 @@ Summary: The Linux kernel
%define with_perf 0
%define with_tools 0
%endif
-# TEMPORARY until perf build fixed on ARM to get a new 3.7rc kernel
-%define with_perf 0
%endif
# Should make listnewconfig fail if there's config options
@@ -479,7 +461,7 @@ Summary: The Linux kernel
# Which is a BadThing(tm).
# We only build kernel-headers on the following...
-%define nobuildarches i386 s390 sparc sparcv9
+%define nobuildarches i386 s390
%ifarch %nobuildarches
%define with_up 0
@@ -575,7 +557,7 @@ Version: %{rpmversion}
Release: %{pkg_release}
# DO NOT CHANGE THE 'ExclusiveArch' LINE TO TEMPORARILY EXCLUDE AN ARCHITECTURE BUILD.
# SET %%nobuildarches (ABOVE) INSTEAD
-ExclusiveArch: noarch %{all_x86} x86_64 ppc ppc64 ppc64p7 %{sparc} s390 s390x %{arm}
+ExclusiveArch: noarch %{all_x86} x86_64 ppc ppc64 ppc64p7 s390 s390x %{arm}
ExclusiveOS: Linux
%kernel_reqprovconf
@@ -586,7 +568,7 @@ ExclusiveOS: Linux
BuildRequires: module-init-tools, patch >= 2.5.4, bash >= 2.03, sh-utils, tar
BuildRequires: bzip2, xz, findutils, gzip, m4, perl, make >= 3.78, diffutils, gawk
BuildRequires: gcc >= 3.4.2, binutils >= 2.12, redhat-rpm-config, hmaccalc
-BuildRequires: net-tools
+BuildRequires: net-tools, hostname
BuildRequires: xmlto, asciidoc
%if %{with_sparse}
BuildRequires: sparse >= 0.4.1
@@ -601,9 +583,9 @@ BuildRequires: pciutils-devel gettext
BuildConflicts: rhbuildsys(DiskFree) < 500Mb
%if %{with_debuginfo}
# Fancy new debuginfo generation introduced in Fedora 8/RHEL 6.
-# The -r flag to find-debuginfo.sh to invoke eu-strip --reloc-debug-sections
-# reduces the number of relocations in kernel module .ko.debug files and was
-# introduced with rpm 4.9 and elfutils 0.153.
+# The -r flag to find-debuginfo.sh invokes eu-strip --reloc-debug-sections
+# which reduces the number of relocations in kernel module .ko.debug files and
+# was introduced with rpm 4.9 and elfutils 0.153.
BuildRequires: rpm-build >= 4.9.0-1, elfutils >= elfutils-0.153-1
%define debuginfo_args --strict-build-id -r
%endif
@@ -619,7 +601,7 @@ Source0: http://linux-libre.fsfla.org/pub/linux-libre/freed-ora/src/linux%{?base
Source3: deblob-main
Source4: deblob-check
Source5: deblob-%{kversion}
-# Source6: deblob-3.%{upstream_sublevel}
+Source6: deblob-3.%{upstream_sublevel}
%if %{signmodules}
Source11: x509.genkey
@@ -628,7 +610,8 @@ Source11: x509.genkey
Source15: merge.pl
Source16: mod-extra.list
Source17: mod-extra.sh
-Source18: mod-extra-sign.sh
+Source18: mod-sign.sh
+%define modsign_cmd %{SOURCE18}
Source19: Makefile.release
Source20: Makefile.config
@@ -650,8 +633,6 @@ Source54: config-powerpc64p7
Source70: config-s390x
-Source90: config-sparc64-generic
-
# Unified ARM kernels
Source100: config-armv7
@@ -660,7 +641,6 @@ Source105: config-arm-generic
Source110: config-arm-omap
Source111: config-arm-tegra
Source112: config-arm-kirkwood
-Source113: config-arm-imx
# This file is intentionally left empty in the stock kernel. Its a nicety
# added for those wanting to do custom rebuilds with altered config opts.
@@ -705,12 +685,10 @@ Patch00: patch%{?gitrevlibre}-3.%{base_sublevel}-git%{gitrev}%{?gitrevgnu}.xz
%endif
# we also need compile fixes for -vanilla
-Patch04: linux-2.6-compile-fixes.patch
+Patch04: compile-fixes.patch
# build tweak for build ID magic, even for -vanilla
-Patch05: linux-2.6-makefile-after_link.patch
-
-Patch06: power-x86-destdir.patch
+Patch05: makefile-after_link.patch
Patch07: freedo.patch
@@ -718,7 +696,7 @@ Patch07: freedo.patch
# revert upstream patches we get via other methods
-Patch09: linux-2.6-upstream-reverts.patch
+Patch09: upstream-reverts.patch
# Git trees.
# Standalone patches
@@ -727,35 +705,29 @@ Patch100: taint-vbox.patch
Patch110: vmbugon-warnon.patch
-Patch390: linux-2.6-defaults-acpi-video.patch
-Patch391: linux-2.6-acpi-video-dos.patch
-Patch394: linux-2.6-acpi-debug-infinite-loop.patch
+Patch390: defaults-acpi-video.patch
+Patch391: acpi-video-dos.patch
+Patch394: acpi-debug-infinite-loop.patch
Patch396: acpi-sony-nonvs-blacklist.patch
-Patch450: linux-2.6-input-kill-stupid-messages.patch
-Patch452: linux-2.6.30-no-pcspkr-modalias.patch
+Patch450: input-kill-stupid-messages.patch
+Patch452: no-pcspkr-modalias.patch
-Patch460: linux-2.6-serial-460800.patch
+Patch460: serial-460800.patch
Patch470: die-floppy-die.patch
-Patch510: linux-2.6-silence-noise.patch
-Patch520: quite-apm.patch
-Patch530: linux-2.6-silence-fbcon-logo.patch
+Patch510: silence-noise.patch
+Patch520: quiet-apm.patch
+Patch530: silence-fbcon-logo.patch
+Patch540: silence-empty-ipi-mask-warning.patch
-Patch700: linux-2.6-e1000-ich9-montevina.patch
-
-Patch800: linux-2.6-crash-driver.patch
+Patch800: crash-driver.patch
# crypto/
-Patch900: modsign-post-KS-jwb.patch
# secure boot
-Patch1000: secure-boot-20121212.patch
-Patch1001: efivarfs-3.7.patch
-
-# Improve PCI support on UEFI
-Patch1100: handle-efi-roms.patch
+Patch1000: secure-boot-20130131.patch
# virt + ksm patches
@@ -770,12 +742,14 @@ Patch1825: drm-i915-dp-stfu.patch
# Quiet boot fixes
# silence the ACPI blacklist code
-Patch2802: linux-2.6-silence-acpi-blacklist.patch
+Patch2802: silence-acpi-blacklist.patch
# media patches
-Patch2899: linux-2.6-v4l-dvb-fixes.patch
-Patch2900: linux-2.6-v4l-dvb-update.patch
-Patch2901: linux-2.6-v4l-dvb-experimental.patch
+Patch2899: v4l-dvb-fixes.patch
+Patch2900: v4l-dvb-update.patch
+Patch2901: v4l-dvb-experimental.patch
+
+Patch3000: brcmsmac-double-timeout.patch
# fs fixes
@@ -799,16 +773,14 @@ Patch14010: lis3-improve-handling-of-null-rate.patch
Patch21000: arm-export-read_current_timer.patch
Patch21001: arm-allnoconfig-error-__LINUX_ARM_ARCH__-undeclared.patch
-# OMAP
-Patch21003: arm-omapdrm-fixinc.patch
+# IMX
+Patch21003: arm-imx-fixdrm.patch
# ARM tegra
Patch21004: arm-tegra-nvec-kconfig.patch
Patch21005: arm-tegra-usb-no-reset-linux33.patch
-Patch21006: arm-tegra-sdhci-module-fix.patch
-# ARM imx
-Patch21008: arm-imx-fixdrm.patch
+# versatile
#rhbz 754518
Patch21235: scsi-sd_revalidate_disk-prevent-NULL-ptr-deref.patch
@@ -821,26 +793,25 @@ Patch22001: selinux-apply-different-permission-to-ptrace-child.patch
# Build patch, should go away
Patch22070: irqnr-build.patch
-#rhbz 874791
-Patch22125: Bluetooth-Add-support-for-BCM20702A0.patch
-
#rhbz 859485
Patch21226: vt-Drop-K_OFF-for-VC_MUTE.patch
-#rhbz CVE-2012-4530 868285 880147
-Patch21228: exec-do-not-leave-bprm-interp-on-stack.patch
-Patch21229: exec-use-eloop-for-max-recursion-depth.patch
+#rhbz 863424
+Patch21229: Revert-iwlwifi-fix-the-reclaimed-packet-tracking-upon.patch
+
+#rhbz 799564
+Patch21240: Input-increase-struct-ps2dev-cmdbuf-to-8-bytes.patch
+Patch21241: Input-add-support-for-Cypress-PS2-Trackpads.patch
-#rhbz 851278
-Patch21234: Revert-8139cp-revert-set-ring-address-before-enabling.patch
-Patch21232: 8139cp-set-ring-address-after-enabling-C-mode.patch
-Patch21233: 8139cp-re-enable-interrupts-after-tx-timeout.patch
+# https://fedoraproject.org/wiki/Features/Checkpoint_Restore
+Patch21242: criu-no-expert.patch
-#rhbz 883414
-Patch21236: mac80211-fix-ibss-scanning.patch
+#rhbz 830151
+Patch21243: mac80211-improve-latency-and-throughput-while-software.patch
+Patch21244: iwlegacy-add-flush-callback.patch
-#rhbz 873107
-Patch21237: 0001-ACPI-sony-laptop-do-proper-memcpy-for-ACPI_TYPE_INTE.patch
+#rhbz 903881
+Patch21246: rtlwifi-Fix-scheduling-while-atomic-bug.patch
# END OF PATCH DEFINITIONS
@@ -1171,12 +1142,6 @@ non-Free blobs it includes by default.
This package includes a version of the Linux kernel with support for
marvell kirkwood based systems, i.e., guruplug, sheevaplug
-%define variant_summary The Linux kernel compiled for freescale boards
-%kernel_variant_package imx
-%description imx
-This package includes a version of the Linux kernel with support for
-freescale based systems, i.e., efika smartbook.
-
%define variant_summary The Linux kernel compiled for TI-OMAP boards
%kernel_variant_package omap
%description omap
@@ -1444,14 +1409,12 @@ do
done
%endif
-ApplyPatch linux-2.6-makefile-after_link.patch
+ApplyPatch makefile-after_link.patch
#
# misc small stuff to make things compile
#
-ApplyOptionalPatch linux-2.6-compile-fixes.patch
-
-ApplyPatch power-x86-destdir.patch
+ApplyOptionalPatch compile-fixes.patch
# Freedo logo.
ApplyPatch freedo.patch
@@ -1459,7 +1422,7 @@ ApplyPatch freedo.patch
%if !%{nopatches}
# revert patches from upstream that conflict or that we get via other means
-ApplyOptionalPatch linux-2.6-upstream-reverts.patch -R
+ApplyOptionalPatch upstream-reverts.patch -R
ApplyPatch taint-vbox.patch
@@ -1473,11 +1436,9 @@ ApplyPatch vmbugon-warnon.patch
#
ApplyPatch arm-export-read_current_timer.patch
ApplyPatch arm-allnoconfig-error-__LINUX_ARM_ARCH__-undeclared.patch
-ApplyPatch arm-omapdrm-fixinc.patch
-ApplyPatch arm-imx-fixdrm.patch
-ApplyPatch arm-tegra-nvec-kconfig.patch
+# ApplyPatch arm-tegra-nvec-kconfig.patch
ApplyPatch arm-tegra-usb-no-reset-linux33.patch
-ApplyPatch arm-tegra-sdhci-module-fix.patch
+ApplyPatch arm-imx-fixdrm.patch
#
# bugfixes to drivers and filesystems
@@ -1498,9 +1459,9 @@ ApplyPatch arm-tegra-sdhci-module-fix.patch
# WMI
# ACPI
-ApplyPatch linux-2.6-defaults-acpi-video.patch
-ApplyPatch linux-2.6-acpi-video-dos.patch
-ApplyPatch linux-2.6-acpi-debug-infinite-loop.patch
+ApplyPatch defaults-acpi-video.patch
+ApplyPatch acpi-video-dos.patch
+ApplyPatch acpi-debug-infinite-loop.patch
ApplyPatch acpi-sony-nonvs-blacklist.patch
#
@@ -1519,40 +1480,35 @@ ApplyPatch acpi-sony-nonvs-blacklist.patch
# Misc fixes
# The input layer spews crap no-one cares about.
-ApplyPatch linux-2.6-input-kill-stupid-messages.patch
+ApplyPatch input-kill-stupid-messages.patch
# stop floppy.ko from autoloading during udev...
ApplyPatch die-floppy-die.patch
-ApplyPatch linux-2.6.30-no-pcspkr-modalias.patch
+ApplyPatch no-pcspkr-modalias.patch
# Allow to use 480600 baud on 16C950 UARTs
-ApplyPatch linux-2.6-serial-460800.patch
+ApplyPatch serial-460800.patch
# Silence some useless messages that still get printed with 'quiet'
-ApplyPatch linux-2.6-silence-noise.patch
+ApplyPatch silence-noise.patch
# Make fbcon not show the penguins with 'quiet'
-ApplyPatch linux-2.6-silence-fbcon-logo.patch
+ApplyPatch silence-fbcon-logo.patch
+
+# no-one cares about these warnings.
+ApplyPatch silence-empty-ipi-mask-warning.patch
# Changes to upstream defaults.
# /dev/crash driver.
-ApplyPatch linux-2.6-crash-driver.patch
-
-# Hack e1000e to work on Montevina SDV
-ApplyPatch linux-2.6-e1000-ich9-montevina.patch
+ApplyPatch crash-driver.patch
# crypto/
-ApplyPatch modsign-post-KS-jwb.patch
# secure boot
-ApplyPatch efivarfs-3.7.patch
-ApplyPatch secure-boot-20121212.patch
-
-# Improved PCI support for UEFI
-ApplyPatch handle-efi-roms.patch
+ApplyPatch secure-boot-20130131.patch
# Assorted Virt Fixes
@@ -1567,14 +1523,17 @@ ApplyOptionalPatch drm-intel-next.patch
ApplyPatch drm-i915-dp-stfu.patch
# silence the ACPI blacklist code
-ApplyPatch linux-2.6-silence-acpi-blacklist.patch
-ApplyPatch quite-apm.patch
+ApplyPatch silence-acpi-blacklist.patch
+ApplyPatch quiet-apm.patch
# V4L/DVB updates/fixes/experimental drivers
# apply if non-empty
-ApplyOptionalPatch linux-2.6-v4l-dvb-fixes.patch
-ApplyOptionalPatch linux-2.6-v4l-dvb-update.patch
-ApplyOptionalPatch linux-2.6-v4l-dvb-experimental.patch
+ApplyOptionalPatch v4l-dvb-fixes.patch
+ApplyOptionalPatch v4l-dvb-update.patch
+ApplyOptionalPatch v4l-dvb-experimental.patch
+
+# Experiment: Double the length of the brcmsmac transmit timeout.
+ApplyPatch brcmsmac-double-timeout.patch
# Patches headed upstream
ApplyPatch fs-proc-devtree-remove_proc_entry.patch
@@ -1602,27 +1561,25 @@ ApplyPatch selinux-apply-different-permission-to-ptrace-child.patch
#Build patch, should go away
ApplyPatch irqnr-build.patch
-#rhbz 874791
-ApplyPatch Bluetooth-Add-support-for-BCM20702A0.patch
-
#rhbz 859485
ApplyPatch vt-Drop-K_OFF-for-VC_MUTE.patch
-#rhbz CVE-2012-4530 868285 880147
-ApplyPatch exec-do-not-leave-bprm-interp-on-stack.patch
-ApplyPatch exec-use-eloop-for-max-recursion-depth.patch
+#rhbz 863424
+ApplyPatch Revert-iwlwifi-fix-the-reclaimed-packet-tracking-upon.patch
-#rhbz 851278
-ApplyPatch Revert-8139cp-revert-set-ring-address-before-enabling.patch
-ApplyPatch 8139cp-set-ring-address-after-enabling-C-mode.patch
-ApplyPatch 8139cp-re-enable-interrupts-after-tx-timeout.patch
+#rhbz 799564
+ApplyPatch Input-increase-struct-ps2dev-cmdbuf-to-8-bytes.patch
+ApplyPatch Input-add-support-for-Cypress-PS2-Trackpads.patch
-#rhbz 883414
-ApplyPatch mac80211-fix-ibss-scanning.patch
+# https://fedoraproject.org/wiki/Features/Checkpoint_Restore
+ApplyPatch criu-no-expert.patch
-#rhbz 873107
-ApplyPatch 0001-ACPI-sony-laptop-do-proper-memcpy-for-ACPI_TYPE_INTE.patch
+#rhbz 830151
+ApplyPatch mac80211-improve-latency-and-throughput-while-software.patch
+ApplyPatch iwlegacy-add-flush-callback.patch
+#rhbz 903881
+ApplyPatch rtlwifi-Fix-scheduling-while-atomic-bug.patch
# END OF PATCH APPLICATIONS
@@ -1709,11 +1666,12 @@ BuildKernel() {
MakeTarget=$1
KernelImage=$2
Flavour=$3
+ Flav=${Flavour:+.${Flavour}}
InstallName=${4:-vmlinuz}
# Pick the right config file for the kernel we're building
Config=kernel-%{version}-%{_target_cpu}${Flavour:+-${Flavour}}.config
- DevelDir=/usr/src/kernels/%{KVERREL}${Flavour:+.${Flavour}}
+ DevelDir=/usr/src/kernels/%{KVERREL}${Flav}
# When the bootable image is just the ELF kernel, strip it.
# We already copy the unstripped file into the debuginfo package.
@@ -1723,7 +1681,7 @@ BuildKernel() {
CopyKernel=cp
fi
- KernelVer=%{version}-libre.%{release}.%{_target_cpu}${Flavour:+.${Flavour}}
+ KernelVer=%{version}-libre.%{release}.%{_target_cpu}${Flav}
echo BUILDING A KERNEL FOR ${Flavour} %{_target_cpu}...
%if 0%{?stable_update}
@@ -1732,7 +1690,7 @@ BuildKernel() {
%endif
# make sure EXTRAVERSION says what we want it to say
- perl -p -i -e "s/^EXTRAVERSION.*/EXTRAVERSION = -libre.%{release}.%{_target_cpu}${Flavour:+.${Flavour}}/" Makefile
+ perl -p -i -e "s/^EXTRAVERSION.*/EXTRAVERSION = -libre.%{release}.%{_target_cpu}${Flav}/" Makefile
# if pre-rc1 devel kernel, must fix up PATCHLEVEL for our versioning scheme
%if !0%{?rcrev}
@@ -1759,6 +1717,10 @@ BuildKernel() {
%ifarch %{arm}
# http://lists.infradead.org/pipermail/linux-arm-kernel/2012-March/091404.html
make -s ARCH=$Arch V=1 %{?_smp_mflags} $MakeTarget %{?sparse_mflags} KALLSYMS_EXTRA_PASS=1
+
+ make -s ARCH=$Arch V=1 dtbs
+ mkdir -p $RPM_BUILD_ROOT/%{image_install_path}/dtb-$KernelVer
+ install -m 644 arch/arm/boot/dts/*.dtb $RPM_BUILD_ROOT/boot/dtb-$KernelVer/
%else
make -s ARCH=$Arch V=1 %{?_smp_mflags} $MakeTarget %{?sparse_mflags}
%endif
@@ -1923,13 +1885,9 @@ BuildKernel() {
%{SOURCE17} $RPM_BUILD_ROOT/lib/modules/$KernelVer %{SOURCE16}
%if %{signmodules}
- # Save off the .tmp_versions/ directory. We'll use it in the
- # __debug_install_post macro below to sign the right things
- # Also save the signing keys so we actually sign the modules with the
- # right key.
- cp -r .tmp_versions .tmp_versions.sign${Flavour:+.${Flavour}}
- cp signing_key.priv signing_key.priv.sign${Flavour:+.${Flavour}}
- cp signing_key.x509 signing_key.x509.sign${Flavour:+.${Flavour}}
+ # Save the signing keys so we can sign the modules in __modsign_install_post
+ cp signing_key.priv signing_key.priv.sign${Flav}
+ cp signing_key.x509 signing_key.x509.sign${Flav}
%endif
# remove files that will be auto generated by depmod at rpm -i time
@@ -1979,10 +1937,6 @@ BuildKernel %make_target %kernel_image PAE
BuildKernel %make_target %kernel_image kirkwood
%endif
-%if %{with_imx}
-BuildKernel %make_target %kernel_image imx
-%endif
-
%if %{with_omap}
BuildKernel %make_target %kernel_image omap
%endif
@@ -2014,22 +1968,22 @@ BuildKernel %make_target %kernel_image smp
chmod +x tools/power/cpupower/utils/version-gen.sh
make %{?_smp_mflags} -C tools/power/cpupower CPUFREQ_BENCH=false
%ifarch %{ix86}
- cd tools/power/cpupower/debug/i386
+ pushd tools/power/cpupower/debug/i386
make %{?_smp_mflags} centrino-decode powernow-k8-decode
- cd -
+ popd
%endif
%ifarch x86_64
- cd tools/power/cpupower/debug/x86_64
+ pushd tools/power/cpupower/debug/x86_64
make %{?_smp_mflags} centrino-decode powernow-k8-decode
- cd -
+ popd
%endif
%ifarch %{ix86} x86_64
- cd tools/power/x86/x86_energy_perf_policy/
+ pushd tools/power/x86/x86_energy_perf_policy/
make
- cd -
- cd tools/power/x86/turbostat
+ popd
+ pushd tools/power/x86/turbostat
make
- cd -
+ popd
%endif #turbostat/x86_energy_perf_policy
%endif
%endif
@@ -2043,80 +1997,74 @@ chmod -R a=rX Documentation
find Documentation -type d | xargs chmod u+w
%endif
-###
-### Special hacks for debuginfo subpackages.
-###
-
-# This macro is used by %%install, so we must redefine it before that.
-%define debug_package %{nil}
-
# In the modsign case, we do 3 things. 1) We check the "flavour" and hard
# code the value in the following invocations. This is somewhat sub-optimal
# but we're doing this inside of an RPM macro and it isn't as easy as it
# could be because of that. 2) We restore the .tmp_versions/ directory from
# the one we saved off in BuildKernel above. This is to make sure we're
# signing the modules we actually built/installed in that flavour. 3) We
-# grab the arch and invoke 'make modules_sign' and the mod-extra-sign.sh
-# commands to actually sign the modules.
+# grab the arch and invoke mod-sign.sh command to actually sign the modules.
#
# We have to do all of those things _after_ find-debuginfo runs, otherwise
# that will strip the signature off of the modules.
-%if %{with_debuginfo}
-%define __debug_install_post \
- /usr/lib/rpm/find-debuginfo.sh %{debuginfo_args} %{_builddir}/%{?buildsubdir}\
- if [ "%{signmodules}" == "1" ]; \
- then \
- if [ "%{with_pae}" != "0" ]; \
- then \
- Arch=`head -1 configs/kernel-%{version}-%{_target_cpu}-PAE.config | cut -b 3-` \
- rm -rf .tmp_versions \
- mv .tmp_versions.sign.PAE .tmp_versions \
+%define __modsign_install_post \
+ if [ "%{signmodules}" == "1" ]; then \
+ if [ "%{with_pae}" != "0" ]; then \
mv signing_key.priv.sign.PAE signing_key.priv \
mv signing_key.x509.sign.PAE signing_key.x509 \
- make -s ARCH=$Arch V=1 INSTALL_MOD_PATH=$RPM_BUILD_ROOT modules_sign KERNELRELEASE=%{KVERREL}.PAE \
- %{SOURCE18} $RPM_BUILD_ROOT/lib/modules/%{KVERREL}.PAE/extra/ \
+ %{modsign_cmd} $RPM_BUILD_ROOT/lib/modules/%{KVERREL}.PAE/ \
fi \
- if [ "%{with_debug}" != "0" ]; \
- then \
- Arch=`head -1 configs/kernel-%{version}-%{_target_cpu}-debug.config | cut -b 3-` \
- rm -rf .tmp_versions \
- mv .tmp_versions.sign.debug .tmp_versions \
+ if [ "%{with_debug}" != "0" ]; then \
mv signing_key.priv.sign.debug signing_key.priv \
mv signing_key.x509.sign.debug signing_key.x509 \
- make -s ARCH=$Arch V=1 INSTALL_MOD_PATH=$RPM_BUILD_ROOT modules_sign KERNELRELEASE=%{KVERREL}.debug \
- %{SOURCE18} $RPM_BUILD_ROOT/lib/modules/%{KVERREL}.debug/extra/ \
+ %{modsign_cmd} $RPM_BUILD_ROOT/lib/modules/%{KVERREL}.debug/ \
fi \
- if [ "%{with_pae_debug}" != "0" ]; \
- then \
- Arch=`head -1 configs/kernel-%{version}-%{_target_cpu}-PAEdebug.config | cut -b 3-` \
- rm -rf .tmp_versions \
- mv .tmp_versions.sign.PAEdebug .tmp_versions \
+ if [ "%{with_pae_debug}" != "0" ]; then \
mv signing_key.priv.sign.PAEdebug signing_key.priv \
mv signing_key.x509.sign.PAEdebug signing_key.x509 \
- make -s ARCH=$Arch V=1 INSTALL_MOD_PATH=$RPM_BUILD_ROOT modules_sign KERNELRELEASE=%{KVERREL}.PAEdebug \
- %{SOURCE18} $RPM_BUILD_ROOT/lib/modules/%{KVERREL}.PAEdebug/extra/ \
+ %{modsign_cmd} $RPM_BUILD_ROOT/lib/modules/%{KVERREL}.PAEdebug/ \
fi \
- if [ "%{with_up}" != "0" ]; \
- then \
- Arch=`head -1 configs/kernel-%{version}-%{_target_cpu}.config | cut -b 3-` \
- rm -rf .tmp_versions \
- mv .tmp_versions.sign .tmp_versions \
+ if [ "%{with_up}" != "0" ]; then \
mv signing_key.priv.sign signing_key.priv \
mv signing_key.x509.sign signing_key.x509 \
- make -s ARCH=$Arch V=1 INSTALL_MOD_PATH=$RPM_BUILD_ROOT modules_sign KERNELRELEASE=%{KVERREL} \
- %{SOURCE18} $RPM_BUILD_ROOT/lib/modules/%{KVERREL}/extra/ \
+ %{modsign_cmd} $RPM_BUILD_ROOT/lib/modules/%{KVERREL}/ \
fi \
fi \
%{nil}
+###
+### Special hacks for debuginfo subpackages.
+###
+
+# This macro is used by %%install, so we must redefine it before that.
+%define debug_package %{nil}
+
+%if %{with_debuginfo}
+
+%define __debug_install_post \
+ /usr/lib/rpm/find-debuginfo.sh %{debuginfo_args} %{_builddir}/%{?buildsubdir}\
+%{nil}
+
%ifnarch noarch
%global __debug_package 1
%files -f debugfiles.list debuginfo-common-%{_target_cpu}
%defattr(-,root,root)
%endif
+
%endif
+#
+# Disgusting hack alert! We need to ensure we sign modules *after* all
+# invocations of strip occur, which is in __debug_install_post if
+# find-debuginfo.sh runs, and __os_install_post if not.
+#
+%define __spec_install_post \
+ %{?__debug_package:%{__debug_install_post}}\
+ %{__arch_install_post}\
+ %{__os_install_post}\
+ %{__modsign_install_post}
+
###
### install
###
@@ -2186,16 +2134,16 @@ rm -f %{buildroot}%{_libdir}/*.{a,la}
%find_lang cpupower
mv cpupower.lang ../
%ifarch %{ix86}
- cd tools/power/cpupower/debug/i386
+ pushd tools/power/cpupower/debug/i386
install -m755 centrino-decode %{buildroot}%{_bindir}/centrino-decode
install -m755 powernow-k8-decode %{buildroot}%{_bindir}/powernow-k8-decode
- cd -
+ popd
%endif
%ifarch x86_64
- cd tools/power/cpupower/debug/x86_64
+ pushd tools/power/cpupower/debug/x86_64
install -m755 centrino-decode %{buildroot}%{_bindir}/centrino-decode
install -m755 powernow-k8-decode %{buildroot}%{_bindir}/powernow-k8-decode
- cd -
+ popd
%endif
chmod 0755 %{buildroot}%{_libdir}/libcpupower.so*
mkdir -p %{buildroot}%{_unitdir} %{buildroot}%{_sysconfdir}/sysconfig
@@ -2204,12 +2152,12 @@ install -m644 %{SOURCE2001} %{buildroot}%{_sysconfdir}/sysconfig/cpupower
%endif
%ifarch %{ix86} x86_64
mkdir -p %{buildroot}%{_mandir}/man8
- cd tools/power/x86/x86_energy_perf_policy
+ pushd tools/power/x86/x86_energy_perf_policy
make DESTDIR=%{buildroot} install
- cd -
- cd tools/power/x86/turbostat
+ popd
+ pushd tools/power/x86/turbostat
make DESTDIR=%{buildroot} install
- cd -
+ popd
%endif #turbostat/x86_energy_perf_policy
%endif
@@ -2326,9 +2274,6 @@ fi}\
%kernel_variant_preun kirkwood
%kernel_variant_post -v kirkwood
-%kernel_variant_preun imx
-%kernel_variant_post -v imx
-
%kernel_variant_preun omap
%kernel_variant_post -v omap
@@ -2448,6 +2393,9 @@ fi
%defattr(-,root,root)\
/%{image_install_path}/%{?-k:%{-k*}}%{!?-k:vmlinuz}-%{KVERREL}%{?2:.%{2}}\
/%{image_install_path}/.vmlinuz-%{KVERREL}%{?2:.%{2}}.hmac \
+%ifarch %{arm}\
+/%{image_install_path}/dtb-%{KVERREL}%{?2:.%{2}} \
+%endif\
%attr(600,root,root) /boot/System.map-%{KVERREL}%{?2:.%{2}}\
/boot/config-%{KVERREL}%{?2:.%{2}}\
%dir /lib/modules/%{KVERREL}%{?2:.%{2}}\
@@ -2483,7 +2431,6 @@ fi
%kernel_variant_files %{with_pae} PAE
%kernel_variant_files %{with_pae_debug} PAEdebug
%kernel_variant_files %{with_kirkwood} kirkwood
-%kernel_variant_files %{with_imx} imx
%kernel_variant_files %{with_omap} omap
%kernel_variant_files %{with_tegra} tegra
@@ -2500,6 +2447,178 @@ fi
# ||----w |
# || ||
%changelog
+* Wed Feb 6 2013 Alexandre Oliva <lxoliva@fsfla.org> -libre
+- GNU Linux-libre 3.8-rc6-gnu.
+
+* Tue Feb 05 2013 Josh Boyer <jwboyer@redhat.com> - 3.8.0-0.rc6.git2.1
+- Linux v3.8-rc6-62-gfe547d7
+- Enable CONFIG_DRM_VMWGFX_FBCON (rhbz 907620)
+- Enable CONFIG_DETECT_HUNG_TASK
+
+* Mon Feb 04 2013 Josh Boyer <jwboyer@redhat.com> - 3.8.0-0.rc6.git1.1
+- Linux v3.8-rc6-22-g6edacf0
+- Enable CONFIG_EXT4_DEBUG
+- Fix rtlwifi scheduling while atomic from Larry Finger (rhbz 903881)
+
+* Fri Feb 01 2013 Josh Boyer <jwboyer@redhat.com> - 3.8.0-0.rc6.git0.1
+- Linux v3.8-rc6
+- Enable CONFIG_DMA_API_DEBUG
+- Add patches to improve mac80211 latency and throughput (rhbz 830151)
+
+* Thu Jan 31 2013 Josh Boyer <jwboyer@redhat.com> - 3.8.0-0.rc5.git3.1
+- Linux v3.8-rc5-245-g04c2eee
+- Enable CONFIG_DEBUG_STACK_USAGE
+
+* Wed Jan 30 2013 Josh Boyer <jwboyer@redhat.com> - 3.8.0-0.rc5.git2.1
+- Linux v3.8-rc5-218-ga56e160
+- Enable NAMESPACES and CHECKPOINT_RESTORE on x86_64 for F19 CRIU feature
+- Enable CONFIG_DEBUG_ATOMIC_SLEEP
+
+* Tue Jan 29 2013 Josh Boyer <jwboyer@redhat.com> - 3.8.0-0.rc5.git1.1
+- Linux v3.8-rc5-150-g6abb7c2
+
+* Tue Jan 29 2013 Josh Boyer <jwboyer@redhat.com>
+- Backport driver for Cypress PS/2 trackpad (rhbz 799564)
+
+* Mon Jan 28 2013 Josh Boyer <jwboyer@redhat.com> - 3.8.0-0.rc5.git0.1
+- Linux v3.8-rc5
+- Add patches to fix issues with iwlwifi (rhbz 863424)
+- Enable CONFIG_PROVE_RCU
+
+* Sun Jan 27 2013 Peter Robinson <pbrobinson@fedoraproject.org>
+- Reenable perf on ARM (was suppose to be temporary)
+- Build and package dtbs on ARM
+- Enable FB options for qemu vexpress on unified
+
+* Fri Jan 25 2013 Kyle McMartin <kmcmarti@redhat.com>
+- Sign all modules with the mod-extra-sign.sh script, ensures nothing gets
+ missed because of .config differences between invocations of BuildKernel.
+
+* Fri Jan 25 2013 Justin M. Forbes <jforbes@redhat.com>
+- Turn off THP for 32bit
+
+* Fri Jan 25 2013 Justin M. Forbes <jforbes@redhat.com> - 3.8.0-0.rc4.git5.1
+- Linux v3.8-rc4-277-g66e2d3e
+- Enable slub debug
+
+* Thu Jan 24 2013 Josh Boyer <jwboyer@redhat.com>
+- Update secure-boot patchset
+
+* Thu Jan 24 2013 Justin M. Forbes <jforbes@redhat.com> - 3.8.0-0.rc4.git4.1
+- Linux v3.8-rc4-183-gff7532c
+- Enable lockdep
+
+* Wed Jan 23 2013 Justin M. Forbes <jforbes@redhat.com> - 3.8.0-0.rc4.git3.1
+- Linux v3.8-rc4-139-g1d85490
+- Enable debug spinlocks
+
+* Wed Jan 23 2013 Dave Jones <davej@redhat.com>
+- Remove warnings about empty IPI masks.
+
+* Sun Jan 20 2013 Peter Robinson <pbrobinson@fedoraproject.org>
+- Remove obsolete ARM configs
+- Update OMAP config for TI AM35XX SoCs
+- Add patch to fix versatile build failure
+
+* Sat Jan 19 2013 Justin M. Forbes <jforbes@redhat.com> - 3.8.0-0.rc4.git1.1
+- Linux v3.8-rc4-42-g5da1f88
+
+* Fri Jan 18 2013 Justin M. Forbes <jforbes@redhat.com> - 3.8.0-0.rc4.git0.1
+- Linux v3.8-rc4
+- Disable debugging options.
+
+* Fri Jan 18 2013 Peter Robinson <pbrobinson@fedoraproject.org>
+- Disable problematic PL310 ARM errata
+- Minor ARM config tweaks
+- OMAP DRM driver to fix OMAP kernel build
+
+* Wed Jan 16 2013 Josh Boyer <jwboyer@redhat.com>
+- Fix power management sysfs on non-secure boot machines (rhbz 896243)
+
+* Wed Jan 16 2013 Dave Jones <davej@redhat.com>
+- Experiment: Double the length of the brcmsmac transmit timeout.
+
+* Wed Jan 16 2013 Josh Boyer <jwboyer@redhat.com>
+- Add patch from Stanislaw Gruszka to fix iwlegacy IBSS cleanup (rhbz 886946)
+
+* Tue Jan 15 2013 Justin M. Forbes <jforbes@redhat.com> - 3.8.0-0.rc3.git2.1
+- Linux v3.8-rc3-293-g406089d
+
+* Tue Jan 15 2013 Josh Boyer <jwboyer@redhat.com>
+- Enable CONFIG_DVB_USB_V2 (rhbz 895460)
+
+* Mon Jan 14 2013 Josh Boyer <jwboyer@redhat.com>
+- Enable Orinoco drivers in kernel-modules-extra (rhbz 894069)
+
+* Mon Jan 14 2013 Justin M. Forbes <jforbes@redhat.com> - 3.8.0-0.rc3.git1.1
+- Linux v3.8-rc3-74-gb719f43
+
+* Fri Jan 11 2013 Josh Boyer <jwboyer@redhat.com>
+- Update secure-boot patchset
+
+* Thu Jan 10 2013 Justin M. Forbes <jforbes@redhat.com> - 3.8.0-0.rc3.git0.2
+- Reenable debugging options.
+
+* Thu Jan 10 2013 Dave Jones <davej@redhat.com>
+- Drop old Montevina era E1000 workaround.
+
+* Thu Jan 10 2013 Justin M. Forbes <jforbes@redhat.com> - 3.8.0-0.rc3.git0.1
+- Linux v3.8-rc3
+- Disable debugging options.
+
+* Wed Jan 09 2013 Justin M. Forbes <jforbes@redhat.com> - 3.8.0-0.rc2.git4.1
+- Linux v3.8-rc2-370-g57a0c1e
+
+* Wed Jan 9 2013 Peter Robinson <pbrobinson@fedoraproject.org>
+- Update ARM mvebu config
+
+* Wed Jan 09 2013 Josh Boyer <jwboyer@redhat.com>
+- Enable CONFIG_CIFS_DEBUG as it was on before it was split out
+
+* Tue Jan 08 2013 Kyle McMartin <kmcmarti@redhat.com>
+- Ensure modules are signed even if *-debuginfo rpms are not produced by
+ re-defining __spec_install_post and adding a hook after all strip
+ invocations. Ideally, in the future, we could patch the rpm macro and
+ remove the re-define from kernel.spec, but that's another windmill to tilt
+ at.
+
+* Tue Jan 08 2013 Justin M. Forbes <jforbes@redhat.com> - 3.8.0-0.rc2.git3.1
+- Linux v3.8-rc2-222-g2a893f9
+
+* Mon Jan 07 2013 Justin M. Forbes <jforbes@redhat.com> - 3.8.0-0.rc2.git2.1
+- Linux v3.8-rc2-191-gd287b87
+- remove the namei-include.patch, it's upstream now
+
+* Mon Jan 07 2013 Justin M. Forbes <jforbes@redhat.com> - 3.8.0-0.rc2.git1.2
+- Reenable debugging options.
+
+* Mon Jan 7 2013 Peter Robinson <pbrobinson@fedoraproject.org>
+- Further ARM config updates
+- Add patch to fix building omapdrm
+
+* Mon Jan 07 2013 Justin M. Forbes <jforbes@redhat.com>
+- Bye sparc
+
+* Mon Jan 07 2013 Justin M. Forbes <jforbes@redhat.com>
+- Fix up configs for build
+
+* Mon Jan 07 2013 Josh Boyer <jwboyer@redhat.com>
+- Patch to fix efivarfs underflow from Lingzhu Xiang (rhbz 888163)
+
+* Sat Jan 5 2013 Peter Robinson <pbrobinson@fedoraproject.org>
+- Initial update of ARM configs for 3.8
+- Enable DRM driver for tegra
+- Drop separate imx kernel. Will be reintroduced soon in unified
+
+* Fri Jan 04 2013 Justin M. Forbes <jforbes@redhat.com> - 3.8.0-0.rc2.git1.1
+- Linux v3.8-rc2-116-g5f243b9
+
+* Thu Jan 03 2013 Justin M. Forbes <jforbes@redhat.com>
+- Initial 3.8-rc2 rebase
+
+* Wed Jan 02 2013 Josh Boyer <jwboyer@redhat.com>
+- BR the hostname package (rhbz 886113)
+
* Tue Dec 18 2012 Dave Jones <davej@redhat.com>
- On rebases, list new config options.
(Revert to pre-18 behaviour)
diff --git a/freed-ora/current/master/linux-2.6-e1000-ich9-montevina.patch b/freed-ora/current/master/linux-2.6-e1000-ich9-montevina.patch
deleted file mode 100644
index ec38a3902..000000000
--- a/freed-ora/current/master/linux-2.6-e1000-ich9-montevina.patch
+++ /dev/null
@@ -1,46 +0,0 @@
-From 802e6d8c8477a553a677b23a247d6d2638e01958 Mon Sep 17 00:00:00 2001
-From: Dave Jones <davej@redhat.com>
-Date: Wed, 26 Oct 2011 13:31:47 -0400
-Subject: [PATCH] e1000e: ich9 montevina
-
-This only showed up in one SDV (Montevina).
-The PCIE slots don't seem to like network cards, so this is the only hope
-to get networking working. It's never going upstream, but it's low impact
-enough to carry just to keep those SDVs working.
----
- drivers/net/ethernet/intel/e1000e/ich8lan.c | 6 ++++++
- drivers/net/ethernet/intel/e1000e/netdev.c | 1 +
- 2 files changed, 7 insertions(+), 0 deletions(-)
-
-diff --git a/drivers/net/ethernet/intel/e1000e/ich8lan.c b/drivers/net/ethernet/intel/e1000e/ich8lan.c
-index 6a17c62..0e40975 100644
---- a/drivers/net/ethernet/intel/e1000e/ich8lan.c
-+++ b/drivers/net/ethernet/intel/e1000e/ich8lan.c
-@@ -452,6 +452,12 @@ static s32 e1000_init_phy_params_ich8lan(struct e1000_hw *hw)
-
- /* Verify phy id */
- switch (phy->id) {
-+ case 0:
-+ if (hw->adapter->pdev->device == 0x10be)
-+ e_dbg("got 0 phy id, trying anyway");
-+ /* Fall through to IGP03E1000 case below */
-+ else
-+ return -E1000_ERR_PHY;
- case IGP03E1000_E_PHY_ID:
- phy->type = e1000_phy_igp_3;
- phy->autoneg_mask = AUTONEG_ADVERTISE_SPEED_DEFAULT;
-diff --git a/drivers/net/ethernet/intel/e1000e/netdev.c b/drivers/net/ethernet/intel/e1000e/netdev.c
-index a855db1..edac30b 100644
---- a/drivers/net/ethernet/intel/e1000e/netdev.c
-+++ b/drivers/net/ethernet/intel/e1000e/netdev.c
-@@ -6359,6 +6359,7 @@ static DEFINE_PCI_DEVICE_TABLE(e1000_pci_tbl) = {
- { PCI_VDEVICE(INTEL, E1000_DEV_ID_ICH9_IGP_M), board_ich9lan },
- { PCI_VDEVICE(INTEL, E1000_DEV_ID_ICH9_IGP_M_AMT), board_ich9lan },
- { PCI_VDEVICE(INTEL, E1000_DEV_ID_ICH9_IGP_M_V), board_ich9lan },
-+ { PCI_VDEVICE(INTEL, 0x10be), board_ich9lan },
-
- { PCI_VDEVICE(INTEL, E1000_DEV_ID_ICH10_R_BM_LM), board_ich9lan },
- { PCI_VDEVICE(INTEL, E1000_DEV_ID_ICH10_R_BM_LF), board_ich9lan },
---
-1.7.6.4
-
diff --git a/freed-ora/current/master/mac80211-fix-ibss-scanning.patch b/freed-ora/current/master/mac80211-fix-ibss-scanning.patch
deleted file mode 100644
index c2bc698a0..000000000
--- a/freed-ora/current/master/mac80211-fix-ibss-scanning.patch
+++ /dev/null
@@ -1,132 +0,0 @@
-Do not scan on no-IBSS and disabled channels in IBSS mode. Doing this
-can trigger Microcode errors on iwlwifi and iwlegacy drivers.
-
-Also rename ieee80211_request_internal_scan() function since it is only
-used in IBSS mode and simplify calling it from ieee80211_sta_find_ibss().
-
-This patch should address:
-https://bugzilla.redhat.com/show_bug.cgi?id=883414
-https://bugzilla.kernel.org/show_bug.cgi?id=49411
-
-Reported-by: Jesse Kahtava <jesse_kahtava@f-m.fm>
-Reported-by: Mikko Rapeli <mikko.rapeli@iki.fi>
-Cc: stable@vger.kernel.org
-Signed-off-by: Stanislaw Gruszka <sgruszka@redhat.com>
----
- net/mac80211/ibss.c | 9 ++++-----
- net/mac80211/ieee80211_i.h | 6 +++---
- net/mac80211/scan.c | 34 ++++++++++++++++++++++++----------
- 3 files changed, 31 insertions(+), 18 deletions(-)
-
-diff --git a/net/mac80211/ibss.c b/net/mac80211/ibss.c
-index c21e33d..d9df6b8 100644
---- a/net/mac80211/ibss.c
-+++ b/net/mac80211/ibss.c
-@@ -678,8 +678,8 @@ static void ieee80211_sta_merge_ibss(struct ieee80211_sub_if_data *sdata)
- sdata_info(sdata,
- "No active IBSS STAs - trying to scan for other IBSS networks with same SSID (merge)\n");
-
-- ieee80211_request_internal_scan(sdata,
-- ifibss->ssid, ifibss->ssid_len, NULL);
-+ ieee80211_request_ibss_scan(sdata, ifibss->ssid, ifibss->ssid_len,
-+ NULL);
- }
-
- static void ieee80211_sta_create_ibss(struct ieee80211_sub_if_data *sdata)
-@@ -777,9 +777,8 @@ static void ieee80211_sta_find_ibss(struct ieee80211_sub_if_data *sdata)
- IEEE80211_SCAN_INTERVAL)) {
- sdata_info(sdata, "Trigger new scan to find an IBSS to join\n");
-
-- ieee80211_request_internal_scan(sdata,
-- ifibss->ssid, ifibss->ssid_len,
-- ifibss->fixed_channel ? ifibss->channel : NULL);
-+ ieee80211_request_ibss_scan(sdata, ifibss->ssid,
-+ ifibss->ssid_len, chan);
- } else {
- int interval = IEEE80211_SCAN_INTERVAL;
-
-diff --git a/net/mac80211/ieee80211_i.h b/net/mac80211/ieee80211_i.h
-index 156e583..bc48d4d 100644
---- a/net/mac80211/ieee80211_i.h
-+++ b/net/mac80211/ieee80211_i.h
-@@ -1247,9 +1247,9 @@ void ieee80211_mesh_rx_queued_mgmt(struct ieee80211_sub_if_data *sdata,
-
- /* scan/BSS handling */
- void ieee80211_scan_work(struct work_struct *work);
--int ieee80211_request_internal_scan(struct ieee80211_sub_if_data *sdata,
-- const u8 *ssid, u8 ssid_len,
-- struct ieee80211_channel *chan);
-+int ieee80211_request_ibss_scan(struct ieee80211_sub_if_data *sdata,
-+ const u8 *ssid, u8 ssid_len,
-+ struct ieee80211_channel *chan);
- int ieee80211_request_scan(struct ieee80211_sub_if_data *sdata,
- struct cfg80211_scan_request *req);
- void ieee80211_scan_cancel(struct ieee80211_local *local);
-diff --git a/net/mac80211/scan.c b/net/mac80211/scan.c
-index 43e60b5..fab706f 100644
---- a/net/mac80211/scan.c
-+++ b/net/mac80211/scan.c
-@@ -819,9 +819,9 @@ int ieee80211_request_scan(struct ieee80211_sub_if_data *sdata,
- return res;
- }
-
--int ieee80211_request_internal_scan(struct ieee80211_sub_if_data *sdata,
-- const u8 *ssid, u8 ssid_len,
-- struct ieee80211_channel *chan)
-+int ieee80211_request_ibss_scan(struct ieee80211_sub_if_data *sdata,
-+ const u8 *ssid, u8 ssid_len,
-+ struct ieee80211_channel *chan)
- {
- struct ieee80211_local *local = sdata->local;
- int ret = -EBUSY;
-@@ -835,22 +835,36 @@ int ieee80211_request_internal_scan(struct ieee80211_sub_if_data *sdata,
-
- /* fill internal scan request */
- if (!chan) {
-- int i, nchan = 0;
-+ int i, max_n;
-+ int n_ch = 0;
-
- for (band = 0; band < IEEE80211_NUM_BANDS; band++) {
- if (!local->hw.wiphy->bands[band])
- continue;
-- for (i = 0;
-- i < local->hw.wiphy->bands[band]->n_channels;
-- i++) {
-- local->int_scan_req->channels[nchan] =
-+
-+ max_n = local->hw.wiphy->bands[band]->n_channels;
-+ for (i = 0; i < max_n; i++) {
-+ struct ieee80211_channel *tmp_ch =
- &local->hw.wiphy->bands[band]->channels[i];
-- nchan++;
-+
-+ if (tmp_ch->flags & (IEEE80211_CHAN_NO_IBSS |
-+ IEEE80211_CHAN_DISABLED))
-+ continue;
-+
-+ local->int_scan_req->channels[n_ch] = tmp_ch;
-+ n_ch++;
- }
- }
-
-- local->int_scan_req->n_channels = nchan;
-+ if (WARN_ON_ONCE(n_ch == 0))
-+ goto unlock;
-+
-+ local->int_scan_req->n_channels = n_ch;
- } else {
-+ if (WARN_ON_ONCE(chan->flags & (IEEE80211_CHAN_NO_IBSS |
-+ IEEE80211_CHAN_DISABLED)))
-+ goto unlock;
-+
- local->int_scan_req->channels[0] = chan;
- local->int_scan_req->n_channels = 1;
- }
---
-1.7.1
-
---
-To unsubscribe from this list: send the line "unsubscribe linux-wireless" in
-the body of a message to majordomo@vger.kernel.org
-More majordomo info at http://vger.kernel.org/majordomo-info.html \ No newline at end of file
diff --git a/freed-ora/current/master/mac80211-improve-latency-and-throughput-while-software.patch b/freed-ora/current/master/mac80211-improve-latency-and-throughput-while-software.patch
new file mode 100644
index 000000000..16f839418
--- /dev/null
+++ b/freed-ora/current/master/mac80211-improve-latency-and-throughput-while-software.patch
@@ -0,0 +1,142 @@
+From c790794fcb461842e6ae1d764b7f68e9a789d149 Mon Sep 17 00:00:00 2001
+From: Stanislaw Gruszka <sgruszka@redhat.com>
+Date: Wed, 23 Jan 2013 12:32:45 +0100
+Subject: [PATCH] mac80211: improve latency and throughput while software
+ scanning
+
+Patch vastly improve latency while scanning. Slight throughput
+improvements were observed as well. Is intended for improve performance
+of voice and video applications, when scan is periodically requested by
+user space (i.e. default NetworkManager behaviour).
+
+Patch remove latency requirement based on PM_QOS_NETWORK_LATENCY,
+this value is 2000 seconds by default (i.e. approximately 0.5 hour !?!).
+
+Also remove listen interval requirement, which based on beaconing and
+depending on BSS parameters. It can make we stay off-channel for a
+second or more.
+
+Instead try to offer the best latency that we could, i.e. be off-channel
+no longer than PASSIVE channel scan time: 125 ms. That mean we will
+scan two ACTIVE channels and go back to on-channel, and one PASSIVE
+channel, and go back to on-channel.
+
+Patch also decrease PASSIVE channel scan time to about 110 ms.
+
+As drawback patch increase overall scan time. On my tests, when scanning
+both 2GHz and 5GHz bands, scanning time increase from 5 seconds up to 10
+seconds. Since that increase happen only when we are associated, I think
+it can be acceptable. If eventually better scan time is needed for
+situations when we lose signal and quickly need to decide to which AP
+roam, additional scan flag or parameter can be introduced.
+
+I tested patch by doing:
+
+while true; do iw dev wlan0 scan; sleep 3; done > /dev/null
+
+and
+
+ping -i0.2 -c 1000 HOST
+
+on remote and local machine, results are as below:
+
+* Ping from local periodically scanning machine to AP:
+Unpatched: rtt min/avg/max/mdev = 0.928/24.946/182.135/36.873 ms
+Patched: rtt min/avg/max/mdev = 0.928/19.678/150.845/33.130 ms
+
+* Ping from remote machine to periodically scanning machine:
+Unpatched: rtt min/avg/max/mdev = 1.637/120.683/709.139/164.337 ms
+Patched: rtt min/avg/max/mdev = 1.807/26.893/201.435/40.284 ms
+
+Throughput measured by scp show following results.
+
+* Upload to periodically scanning machine:
+Unpatched: 3.9MB/s 03:15
+Patched: 4.3MB/s 02:58
+
+* Download from periodically scanning machine:
+Unpatched: 5.5MB/s 02:17
+Patched: 6.2MB/s 02:02
+
+Signed-off-by: Stanislaw Gruszka <sgruszka@redhat.com>
+Signed-off-by: Johannes Berg <johannes.berg@intel.com>
+---
+ net/mac80211/scan.c | 32 +++++---------------------------
+ 1 file changed, 5 insertions(+), 27 deletions(-)
+
+diff --git a/net/mac80211/scan.c b/net/mac80211/scan.c
+index bf82e69..e6b2ebc 100644
+--- a/net/mac80211/scan.c
++++ b/net/mac80211/scan.c
+@@ -27,7 +27,7 @@
+
+ #define IEEE80211_PROBE_DELAY (HZ / 33)
+ #define IEEE80211_CHANNEL_TIME (HZ / 33)
+-#define IEEE80211_PASSIVE_CHANNEL_TIME (HZ / 8)
++#define IEEE80211_PASSIVE_CHANNEL_TIME (HZ / 9)
+
+ static void ieee80211_rx_bss_free(struct cfg80211_bss *cbss)
+ {
+@@ -547,8 +547,6 @@ static void ieee80211_scan_state_decision(struct ieee80211_local *local,
+ bool associated = false;
+ bool tx_empty = true;
+ bool bad_latency;
+- bool listen_int_exceeded;
+- unsigned long min_beacon_int = 0;
+ struct ieee80211_sub_if_data *sdata;
+ struct ieee80211_channel *next_chan;
+ enum mac80211_scan_state next_scan_state;
+@@ -567,11 +565,6 @@ static void ieee80211_scan_state_decision(struct ieee80211_local *local,
+ if (sdata->u.mgd.associated) {
+ associated = true;
+
+- if (sdata->vif.bss_conf.beacon_int <
+- min_beacon_int || min_beacon_int == 0)
+- min_beacon_int =
+- sdata->vif.bss_conf.beacon_int;
+-
+ if (!qdisc_all_tx_empty(sdata->dev)) {
+ tx_empty = false;
+ break;
+@@ -588,34 +581,19 @@ static void ieee80211_scan_state_decision(struct ieee80211_local *local,
+ * see if we can scan another channel without interfering
+ * with the current traffic situation.
+ *
+- * Since we don't know if the AP has pending frames for us
+- * we can only check for our tx queues and use the current
+- * pm_qos requirements for rx. Hence, if no tx traffic occurs
+- * at all we will scan as many channels in a row as the pm_qos
+- * latency allows us to. Additionally we also check for the
+- * currently negotiated listen interval to prevent losing
+- * frames unnecessarily.
+- *
+- * Otherwise switch back to the operating channel.
++ * Keep good latency, do not stay off-channel more than 125 ms.
+ */
+
+ bad_latency = time_after(jiffies +
+- ieee80211_scan_get_channel_time(next_chan),
+- local->leave_oper_channel_time +
+- usecs_to_jiffies(pm_qos_request(PM_QOS_NETWORK_LATENCY)));
+-
+- listen_int_exceeded = time_after(jiffies +
+- ieee80211_scan_get_channel_time(next_chan),
+- local->leave_oper_channel_time +
+- usecs_to_jiffies(min_beacon_int * 1024) *
+- local->hw.conf.listen_interval);
++ ieee80211_scan_get_channel_time(next_chan),
++ local->leave_oper_channel_time + HZ / 8);
+
+ if (associated && !tx_empty) {
+ if (local->scan_req->flags & NL80211_SCAN_FLAG_LOW_PRIORITY)
+ next_scan_state = SCAN_ABORT;
+ else
+ next_scan_state = SCAN_SUSPEND;
+- } else if (associated && (bad_latency || listen_int_exceeded)) {
++ } else if (associated && bad_latency) {
+ next_scan_state = SCAN_SUSPEND;
+ } else {
+ next_scan_state = SCAN_SET_CHANNEL;
+--
+1.8.1
+
diff --git a/freed-ora/current/master/linux-2.6-makefile-after_link.patch b/freed-ora/current/master/makefile-after_link.patch
index b520b1942..b520b1942 100644
--- a/freed-ora/current/master/linux-2.6-makefile-after_link.patch
+++ b/freed-ora/current/master/makefile-after_link.patch
diff --git a/freed-ora/current/master/mod-extra.list b/freed-ora/current/master/mod-extra.list
index 124d74ef2..53f8c36b9 100644
--- a/freed-ora/current/master/mod-extra.list
+++ b/freed-ora/current/master/mod-extra.list
@@ -188,3 +188,9 @@ w1_ds2431.ko
w1_ds2423.ko
w1_bq27000.ko
ubifs.ko
+orinoco.ko
+orinoco_cs.ko
+orinoco_plx.ko
+orinoco_pci.ko
+orinoco_nortel.ko
+orinoco_usb.ko
diff --git a/freed-ora/current/master/mod-extra-sign.sh b/freed-ora/current/master/mod-sign.sh
index 9b24a4098..cae259298 100755
--- a/freed-ora/current/master/mod-extra-sign.sh
+++ b/freed-ora/current/master/mod-sign.sh
@@ -1,10 +1,10 @@
#! /bin/bash
-# We need to sign modules we've moved from <path>/kernel/ to <path>/extra/
-# during mod-extra processing by hand. The 'modules_sign' Kbuild target can
-# "handle" out-of-tree modules, but it does that by not signing them. Plus,
-# the modules we've moved aren't actually out-of-tree. We've just shifted
-# them to a different location behind Kbuild's back because we are mean.
+# The modules_sign target checks for corresponding .o files for every .ko that
+# is signed. This doesn't work for package builds which re-use the same build
+# directory for every flavour, and the .config may change between flavours.
+# So instead of using this script to just sign lib/modules/$KernelVer/extra,
+# sign all .ko in the buildroot.
# This essentially duplicates the 'modules_sign' Kbuild target and runs the
# same commands for those modules.
diff --git a/freed-ora/current/master/modsign-post-KS-jwb.patch b/freed-ora/current/master/modsign-post-KS-jwb.patch
deleted file mode 100644
index 1bafd22f5..000000000
--- a/freed-ora/current/master/modsign-post-KS-jwb.patch
+++ /dev/null
@@ -1,78 +0,0 @@
-From 56713a28675b966e027a824a0130b80dffab209f Mon Sep 17 00:00:00 2001
-From: Josh Boyer <jwboyer@redhat.com>
-Date: Mon, 5 Nov 2012 09:09:24 +1030
-Subject: [PATCH] MODSIGN: Add modules_sign make target
-
-If CONFIG_MODULE_SIG is set, and 'make modules_sign' is called then this
-patch will cause the modules to get a signature appended. The make target
-is intended to be run after 'make modules_install', and will modify the
-modules in-place in the installed location. It can be used to produce
-signed modules after they have been processed by distribution build
-scripts.
-
-Signed-off-by: Josh Boyer <jwboyer@redhat.com>
-Signed-off-by: Rusty Russell <rusty@rustcorp.com.au> (minor typo fix)
----
- Makefile | 6 ++++++
- scripts/Makefile.modsign | 32 ++++++++++++++++++++++++++++++++
- 2 files changed, 38 insertions(+), 0 deletions(-)
- create mode 100644 scripts/Makefile.modsign
-
-diff --git a/Makefile b/Makefile
-index 42d0e56..253aa1b 100644
---- a/Makefile
-+++ b/Makefile
-@@ -981,6 +981,12 @@ _modinst_post: _modinst_
- $(Q)$(MAKE) -f $(srctree)/scripts/Makefile.fwinst obj=firmware __fw_modinst
- $(call cmd,depmod)
-
-+ifeq ($(CONFIG_MODULE_SIG), y)
-+PHONY += modules_sign
-+modules_sign:
-+ $(Q)$(MAKE) -f $(srctree)/scripts/Makefile.modsign
-+endif
-+
- else # CONFIG_MODULES
-
- # Modules not configured
-diff --git a/scripts/Makefile.modsign b/scripts/Makefile.modsign
-new file mode 100644
-index 0000000..abfda62
---- /dev/null
-+++ b/scripts/Makefile.modsign
-@@ -0,0 +1,32 @@
-+# ==========================================================================
-+# Signing modules
-+# ==========================================================================
-+
-+PHONY := __modsign
-+__modsign:
-+
-+include scripts/Kbuild.include
-+
-+__modules := $(sort $(shell grep -h '\.ko' /dev/null $(wildcard $(MODVERDIR)/*.mod)))
-+modules := $(patsubst %.o,%.ko,$(wildcard $(__modules:.ko=.o)))
-+
-+PHONY += $(modules)
-+__modsign: $(modules)
-+ @:
-+
-+quiet_cmd_sign_ko = SIGN [M] $(2)/$(notdir $@)
-+ cmd_sign_ko = $(mod_sign_cmd) $(2)/$(notdir $@)
-+
-+# Modules built outside the kernel source tree go into extra by default
-+INSTALL_MOD_DIR ?= extra
-+ext-mod-dir = $(INSTALL_MOD_DIR)$(subst $(patsubst %/,%,$(KBUILD_EXTMOD)),,$(@D))
-+
-+modinst_dir = $(if $(KBUILD_EXTMOD),$(ext-mod-dir),kernel/$(@D))
-+
-+$(modules):
-+ $(call cmd,sign_ko,$(MODLIB)/$(modinst_dir))
-+
-+# Declare the contents of the .PHONY variable as phony. We keep that
-+# information in a variable se we can use it in if_changed and friends.
-+
-+.PHONY: $(PHONY)
---
-1.7.7.6
-
diff --git a/freed-ora/current/master/linux-2.6.30-no-pcspkr-modalias.patch b/freed-ora/current/master/no-pcspkr-modalias.patch
index 439269cef..439269cef 100644
--- a/freed-ora/current/master/linux-2.6.30-no-pcspkr-modalias.patch
+++ b/freed-ora/current/master/no-pcspkr-modalias.patch
diff --git a/freed-ora/current/master/patch-3.7-gnu-3.8-rc6-gnu.xz.sign b/freed-ora/current/master/patch-3.7-gnu-3.8-rc6-gnu.xz.sign
new file mode 100644
index 000000000..13f0ff9f4
--- /dev/null
+++ b/freed-ora/current/master/patch-3.7-gnu-3.8-rc6-gnu.xz.sign
@@ -0,0 +1,7 @@
+-----BEGIN PGP SIGNATURE-----
+Version: GnuPG v2.0.19 (GNU/Linux)
+
+iEYEABECAAYFAlESa7oACgkQvLfPh359R6dM4ACgmV8K/x2YZ9WDHVA9FY2SIktK
+LCwAniW4/Zu+Ny9y8ORKBb/56AyeCf1j
+=WoxD
+-----END PGP SIGNATURE-----
diff --git a/freed-ora/current/master/power-x86-destdir.patch b/freed-ora/current/master/power-x86-destdir.patch
deleted file mode 100644
index 97665314f..000000000
--- a/freed-ora/current/master/power-x86-destdir.patch
+++ /dev/null
@@ -1,35 +0,0 @@
-diff --git a/tools/power/x86/turbostat/Makefile b/tools/power/x86/turbostat/Makefile
-index f856495..984cc00 100644
---- a/tools/power/x86/turbostat/Makefile
-+++ b/tools/power/x86/turbostat/Makefile
-@@ -1,3 +1,5 @@
-+DESTDIR ?=
-+
- turbostat : turbostat.c
- CFLAGS += -Wall
-
-@@ -5,5 +7,5 @@ clean :
- rm -f turbostat
-
- install :
-- install turbostat /usr/bin/turbostat
-- install turbostat.8 /usr/share/man/man8
-+ install turbostat ${DESTDIR}/usr/bin/turbostat
-+ install turbostat.8 ${DESTDIR}/usr/share/man/man8
-diff --git a/tools/power/x86/x86_energy_perf_policy/Makefile b/tools/power/x86/x86_energy_perf_policy/Makefile
-index f458237..f9824f0 100644
---- a/tools/power/x86/x86_energy_perf_policy/Makefile
-+++ b/tools/power/x86/x86_energy_perf_policy/Makefile
-@@ -1,8 +1,10 @@
-+DESTDIR ?=
-+
- x86_energy_perf_policy : x86_energy_perf_policy.c
-
- clean :
- rm -f x86_energy_perf_policy
-
- install :
-- install x86_energy_perf_policy /usr/bin/
-- install x86_energy_perf_policy.8 /usr/share/man/man8/
-+ install x86_energy_perf_policy ${DESTDIR}/usr/bin/
-+ install x86_energy_perf_policy.8 ${DESTDIR}/usr/share/man/man8/
diff --git a/freed-ora/current/master/quite-apm.patch b/freed-ora/current/master/quiet-apm.patch
index c38511c41..c38511c41 100644
--- a/freed-ora/current/master/quite-apm.patch
+++ b/freed-ora/current/master/quiet-apm.patch
diff --git a/freed-ora/current/master/rtlwifi-Fix-scheduling-while-atomic-bug.patch b/freed-ora/current/master/rtlwifi-Fix-scheduling-while-atomic-bug.patch
new file mode 100644
index 000000000..d05b104b5
--- /dev/null
+++ b/freed-ora/current/master/rtlwifi-Fix-scheduling-while-atomic-bug.patch
@@ -0,0 +1,65 @@
+Kernel commits 41affd5 and 6539306 changed the locking in rtl_lps_leave()
+from a spinlock to a mutex by doing the calls indirectly from a work queue
+to reduce the time that interrupts were disabled. This change was fine for
+most systems; however a scheduling while atomic bug was reported in
+https://bugzilla.redhat.com/show_bug.cgi?id=903881. The backtrace indicates
+that routine rtl_is_special(), which calls rtl_lps_leave() in three places
+was entered in atomic context. These direct calls are replaced by putting a
+request on the appropriate work queue.
+
+Signed-off-by: Larry Finger <Larry.Finger@lwfinger.net>
+Reported-and-tested-by: Nathaniel Doherty <ntdoherty@gmail.com>
+Cc: Nathaniel Doherty <ntdoherty@gmail.com>
+Cc: Stanislaw Gruszka <sgruszka@redhat.com>
+Cc: Stable <stable@vger.kernel.org>
+---
+
+John,
+
+If DaveM will still accept bug fixes for 3.8, please push this one. It
+is unlikely to have any side effects.
+
+Thanks,
+
+Larry
+---
+
+ base.c | 7 ++++---
+ 1 file changed, 4 insertions(+), 3 deletions(-)
+
+Index: wireless-testing-new/drivers/net/wireless/rtlwifi/base.c
+===================================================================
+--- wireless-testing-new.orig/drivers/net/wireless/rtlwifi/base.c
++++ wireless-testing-new/drivers/net/wireless/rtlwifi/base.c
+@@ -1004,7 +1004,8 @@ u8 rtl_is_special_data(struct ieee80211_
+ is_tx ? "Tx" : "Rx");
+
+ if (is_tx) {
+- rtl_lps_leave(hw);
++ schedule_work(&rtlpriv->
++ works.lps_leave_work);
+ ppsc->last_delaylps_stamp_jiffies =
+ jiffies;
+ }
+@@ -1014,7 +1015,7 @@ u8 rtl_is_special_data(struct ieee80211_
+ }
+ } else if (ETH_P_ARP == ether_type) {
+ if (is_tx) {
+- rtl_lps_leave(hw);
++ schedule_work(&rtlpriv->works.lps_leave_work);
+ ppsc->last_delaylps_stamp_jiffies = jiffies;
+ }
+
+@@ -1024,7 +1025,7 @@ u8 rtl_is_special_data(struct ieee80211_
+ "802.1X %s EAPOL pkt!!\n", is_tx ? "Tx" : "Rx");
+
+ if (is_tx) {
+- rtl_lps_leave(hw);
++ schedule_work(&rtlpriv->works.lps_leave_work);
+ ppsc->last_delaylps_stamp_jiffies = jiffies;
+ }
+
+--
+To unsubscribe from this list: send the line "unsubscribe linux-wireless" in
+the body of a message to majordomo@vger.kernel.org
+More majordomo info at http://vger.kernel.org/majordomo-info.html \ No newline at end of file
diff --git a/freed-ora/current/master/secure-boot-20121212.patch b/freed-ora/current/master/secure-boot-20130131.patch
index 387302b90..c58f5997c 100644
--- a/freed-ora/current/master/secure-boot-20121212.patch
+++ b/freed-ora/current/master/secure-boot-20130131.patch
@@ -1,7 +1,7 @@
-From d510ea864f470d96aafb75d0de7f09450407095e Mon Sep 17 00:00:00 2001
+From 6fb120959c4578023de0af1af9c887ddf6859671 Mon Sep 17 00:00:00 2001
From: Matthew Garrett <mjg@redhat.com>
Date: Thu, 20 Sep 2012 10:40:56 -0400
-Subject: [PATCH 01/20] Secure boot: Add new capability
+Subject: [PATCH 01/17] Secure boot: Add new capability
Secure boot adds certain policy requirements, including that root must not
be able to do anything that could cause the kernel to execute arbitrary code.
@@ -32,297 +32,46 @@ index ba478fa..7109e65 100644
#define cap_valid(x) ((x) >= 0 && (x) <= CAP_LAST_CAP)
--
-1.8.0.1
+1.8.1
-From a07ae01ac4b304ac7f0e2b5d4193519f1a9eee8d Mon Sep 17 00:00:00 2001
-From: Matthew Garrett <mjg@redhat.com>
-Date: Thu, 20 Sep 2012 10:40:57 -0400
-Subject: [PATCH 02/20] PCI: Lock down BAR access in secure boot environments
-
-Any hardware that can potentially generate DMA has to be locked down from
-userspace in order to avoid it being possible for an attacker to cause
-arbitrary kernel behaviour. Default to paranoid - in future we can
-potentially relax this for sufficiently IOMMU-isolated devices.
-
-Signed-off-by: Matthew Garrett <mjg@redhat.com>
----
- drivers/pci/pci-sysfs.c | 9 +++++++++
- drivers/pci/proc.c | 8 +++++++-
- drivers/pci/syscall.c | 2 +-
- 3 files changed, 17 insertions(+), 2 deletions(-)
-
-diff --git a/drivers/pci/pci-sysfs.c b/drivers/pci/pci-sysfs.c
-index f39378d..1db1e74 100644
---- a/drivers/pci/pci-sysfs.c
-+++ b/drivers/pci/pci-sysfs.c
-@@ -546,6 +546,9 @@ pci_write_config(struct file* filp, struct kobject *kobj,
- loff_t init_off = off;
- u8 *data = (u8*) buf;
-
-+ if (!capable(CAP_COMPROMISE_KERNEL))
-+ return -EPERM;
-+
- if (off > dev->cfg_size)
- return 0;
- if (off + count > dev->cfg_size) {
-@@ -852,6 +855,9 @@ pci_mmap_resource(struct kobject *kobj, struct bin_attribute *attr,
- resource_size_t start, end;
- int i;
-
-+ if (!capable(CAP_COMPROMISE_KERNEL))
-+ return -EPERM;
-+
- for (i = 0; i < PCI_ROM_RESOURCE; i++)
- if (res == &pdev->resource[i])
- break;
-@@ -959,6 +965,9 @@ pci_write_resource_io(struct file *filp, struct kobject *kobj,
- struct bin_attribute *attr, char *buf,
- loff_t off, size_t count)
- {
-+ if (!capable(CAP_COMPROMISE_KERNEL))
-+ return -EPERM;
-+
- return pci_resource_io(filp, kobj, attr, buf, off, count, true);
- }
-
-diff --git a/drivers/pci/proc.c b/drivers/pci/proc.c
-index 9b8505c..35580bc 100644
---- a/drivers/pci/proc.c
-+++ b/drivers/pci/proc.c
-@@ -139,6 +139,9 @@ proc_bus_pci_write(struct file *file, const char __user *buf, size_t nbytes, lof
- int size = dp->size;
- int cnt;
-
-+ if (!capable(CAP_COMPROMISE_KERNEL))
-+ return -EPERM;
-+
- if (pos >= size)
- return 0;
- if (nbytes >= size)
-@@ -219,6 +222,9 @@ static long proc_bus_pci_ioctl(struct file *file, unsigned int cmd,
- #endif /* HAVE_PCI_MMAP */
- int ret = 0;
-
-+ if (!capable(CAP_COMPROMISE_KERNEL))
-+ return -EPERM;
-+
- switch (cmd) {
- case PCIIOC_CONTROLLER:
- ret = pci_domain_nr(dev->bus);
-@@ -259,7 +265,7 @@ static int proc_bus_pci_mmap(struct file *file, struct vm_area_struct *vma)
- struct pci_filp_private *fpriv = file->private_data;
- int i, ret;
-
-- if (!capable(CAP_SYS_RAWIO))
-+ if (!capable(CAP_SYS_RAWIO) || !capable(CAP_COMPROMISE_KERNEL))
- return -EPERM;
-
- /* Make sure the caller is mapping a real resource for this device */
-diff --git a/drivers/pci/syscall.c b/drivers/pci/syscall.c
-index e1c1ec5..97e785f 100644
---- a/drivers/pci/syscall.c
-+++ b/drivers/pci/syscall.c
-@@ -92,7 +92,7 @@ SYSCALL_DEFINE5(pciconfig_write, unsigned long, bus, unsigned long, dfn,
- u32 dword;
- int err = 0;
-
-- if (!capable(CAP_SYS_ADMIN))
-+ if (!capable(CAP_SYS_ADMIN) || !capable(CAP_COMPROMISE_KERNEL))
- return -EPERM;
-
- dev = pci_get_bus_and_slot(bus, dfn);
---
-1.8.0.1
-
-
-From 1b5a1b53577992b32a3f51b18aa07cb9b300a3b1 Mon Sep 17 00:00:00 2001
-From: Matthew Garrett <mjg@redhat.com>
-Date: Thu, 20 Sep 2012 10:40:58 -0400
-Subject: [PATCH 03/20] x86: Lock down IO port access in secure boot
- environments
-
-IO port access would permit users to gain access to PCI configuration
-registers, which in turn (on a lot of hardware) give access to MMIO register
-space. This would potentially permit root to trigger arbitrary DMA, so lock
-it down by default.
-
-Signed-off-by: Matthew Garrett <mjg@redhat.com>
----
- arch/x86/kernel/ioport.c | 4 ++--
- drivers/char/mem.c | 3 +++
- 2 files changed, 5 insertions(+), 2 deletions(-)
-
-diff --git a/arch/x86/kernel/ioport.c b/arch/x86/kernel/ioport.c
-index 8c96897..a2578c4 100644
---- a/arch/x86/kernel/ioport.c
-+++ b/arch/x86/kernel/ioport.c
-@@ -28,7 +28,7 @@ asmlinkage long sys_ioperm(unsigned long from, unsigned long num, int turn_on)
-
- if ((from + num <= from) || (from + num > IO_BITMAP_BITS))
- return -EINVAL;
-- if (turn_on && !capable(CAP_SYS_RAWIO))
-+ if (turn_on && (!capable(CAP_SYS_RAWIO) || !capable(CAP_COMPROMISE_KERNEL)))
- return -EPERM;
-
- /*
-@@ -102,7 +102,7 @@ long sys_iopl(unsigned int level, struct pt_regs *regs)
- return -EINVAL;
- /* Trying to gain more privileges? */
- if (level > old) {
-- if (!capable(CAP_SYS_RAWIO))
-+ if (!capable(CAP_SYS_RAWIO) || !capable(CAP_COMPROMISE_KERNEL))
- return -EPERM;
- }
- regs->flags = (regs->flags & ~X86_EFLAGS_IOPL) | (level << 12);
-diff --git a/drivers/char/mem.c b/drivers/char/mem.c
-index 0537903..47501fc 100644
---- a/drivers/char/mem.c
-+++ b/drivers/char/mem.c
-@@ -597,6 +597,9 @@ static ssize_t write_port(struct file *file, const char __user *buf,
- unsigned long i = *ppos;
- const char __user * tmp = buf;
-
-+ if (!capable(CAP_COMPROMISE_KERNEL))
-+ return -EPERM;
-+
- if (!access_ok(VERIFY_READ, buf, count))
- return -EFAULT;
- while (count-- > 0 && i < 65536) {
---
-1.8.0.1
-
-
-From 09c266136915eb1f4a9b36423b7ba65e3d024de4 Mon Sep 17 00:00:00 2001
-From: Matthew Garrett <mjg@redhat.com>
-Date: Thu, 20 Sep 2012 10:40:59 -0400
-Subject: [PATCH 04/20] ACPI: Limit access to custom_method
-
-It must be impossible for even root to get code executed in kernel context
-under a secure boot environment. custom_method effectively allows arbitrary
-access to system memory, so it needs to have a capability check here.
-
-Signed-off-by: Matthew Garrett <mjg@redhat.com>
----
- drivers/acpi/custom_method.c | 3 +++
- 1 file changed, 3 insertions(+)
-
-diff --git a/drivers/acpi/custom_method.c b/drivers/acpi/custom_method.c
-index 5d42c24..247d58b 100644
---- a/drivers/acpi/custom_method.c
-+++ b/drivers/acpi/custom_method.c
-@@ -29,6 +29,9 @@ static ssize_t cm_write(struct file *file, const char __user * user_buf,
- struct acpi_table_header table;
- acpi_status status;
-
-+ if (!capable(CAP_COMPROMISE_KERNEL))
-+ return -EPERM;
-+
- if (!(*ppos)) {
- /* parse the table header to get the table length */
- if (count <= sizeof(struct acpi_table_header))
---
-1.8.0.1
-
-
-From f3e9cb16e5ab3e680ec3ef464682c52371bbbbe3 Mon Sep 17 00:00:00 2001
-From: Matthew Garrett <mjg@redhat.com>
-Date: Thu, 20 Sep 2012 10:41:00 -0400
-Subject: [PATCH 05/20] asus-wmi: Restrict debugfs interface
-
-We have no way of validating what all of the Asus WMI methods do on a
-given machine, and there's a risk that some will allow hardware state to
-be manipulated in such a way that arbitrary code can be executed in the
-kernel. Add a capability check to prevent that.
-
-Signed-off-by: Matthew Garrett <mjg@redhat.com>
----
- drivers/platform/x86/asus-wmi.c | 9 +++++++++
- 1 file changed, 9 insertions(+)
-
-diff --git a/drivers/platform/x86/asus-wmi.c b/drivers/platform/x86/asus-wmi.c
-index c0e9ff4..3c10167 100644
---- a/drivers/platform/x86/asus-wmi.c
-+++ b/drivers/platform/x86/asus-wmi.c
-@@ -1521,6 +1521,9 @@ static int show_dsts(struct seq_file *m, void *data)
- int err;
- u32 retval = -1;
-
-+ if (!capable(CAP_COMPROMISE_KERNEL))
-+ return -EPERM;
-+
- err = asus_wmi_get_devstate(asus, asus->debug.dev_id, &retval);
-
- if (err < 0)
-@@ -1537,6 +1540,9 @@ static int show_devs(struct seq_file *m, void *data)
- int err;
- u32 retval = -1;
-
-+ if (!capable(CAP_COMPROMISE_KERNEL))
-+ return -EPERM;
-+
- err = asus_wmi_set_devstate(asus->debug.dev_id, asus->debug.ctrl_param,
- &retval);
-
-@@ -1561,6 +1567,9 @@ static int show_call(struct seq_file *m, void *data)
- union acpi_object *obj;
- acpi_status status;
-
-+ if (!capable(CAP_COMPROMISE_KERNEL))
-+ return -EPERM;
-+
- status = wmi_evaluate_method(ASUS_WMI_MGMT_GUID,
- 1, asus->debug.method_id,
- &input, &output);
---
-1.8.0.1
-
-
-From 23372d2a40135aca7a6d73511bd88790b598b489 Mon Sep 17 00:00:00 2001
-From: Matthew Garrett <mjg@redhat.com>
-Date: Thu, 20 Sep 2012 10:41:01 -0400
-Subject: [PATCH 06/20] Restrict /dev/mem and /dev/kmem in secure boot setups
+From 7aa8eb6a4b228db7e2920f323f1ba97063163de1 Mon Sep 17 00:00:00 2001
+From: Josh Boyer <jwboyer@redhat.com>
+Date: Thu, 20 Sep 2012 10:41:05 -0400
+Subject: [PATCH 02/17] SELinux: define mapping for new Secure Boot capability
-Allowing users to write to address space makes it possible for the kernel
-to be subverted. Restrict this when we need to protect the kernel.
+Add the name of the new Secure Boot capability. This allows SELinux
+policies to properly map CAP_COMPROMISE_KERNEL to the appropriate
+capability class.
-Signed-off-by: Matthew Garrett <mjg@redhat.com>
+Signed-off-by: Josh Boyer <jwboyer@redhat.com>
---
- drivers/char/mem.c | 6 ++++++
- 1 file changed, 6 insertions(+)
+ security/selinux/include/classmap.h | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
-diff --git a/drivers/char/mem.c b/drivers/char/mem.c
-index 47501fc..8817cdc 100644
---- a/drivers/char/mem.c
-+++ b/drivers/char/mem.c
-@@ -158,6 +158,9 @@ static ssize_t write_mem(struct file *file, const char __user *buf,
- unsigned long copied;
- void *ptr;
-
-+ if (!capable(CAP_COMPROMISE_KERNEL))
-+ return -EPERM;
-+
- if (!valid_phys_addr_range(p, count))
- return -EFAULT;
-
-@@ -530,6 +533,9 @@ static ssize_t write_kmem(struct file *file, const char __user *buf,
- char * kbuf; /* k-addr because vwrite() takes vmlist_lock rwlock */
- int err = 0;
-
-+ if (!capable(CAP_COMPROMISE_KERNEL))
-+ return -EPERM;
-+
- if (p < (unsigned long) high_memory) {
- unsigned long to_write = min_t(unsigned long, count,
- (unsigned long)high_memory - p);
+diff --git a/security/selinux/include/classmap.h b/security/selinux/include/classmap.h
+index 14d04e6..ed99a2d 100644
+--- a/security/selinux/include/classmap.h
++++ b/security/selinux/include/classmap.h
+@@ -146,8 +146,8 @@ struct security_class_mapping secclass_map[] = {
+ { "memprotect", { "mmap_zero", NULL } },
+ { "peer", { "recv", NULL } },
+ { "capability2",
+- { "mac_override", "mac_admin", "syslog", "wake_alarm", "block_suspend",
+- NULL } },
++ { "mac_override", "mac_admin", "syslog", "wake_alarm",
++ "block_suspend", "compromise_kernel", NULL } },
+ { "kernel_service", { "use_as_override", "create_files_as", NULL } },
+ { "tun_socket",
+ { COMMON_SOCK_PERMS, "attach_queue", NULL } },
--
-1.8.0.1
+1.8.1
-From a0c80b01e80a1f6484a2a2811b4a212322494614 Mon Sep 17 00:00:00 2001
+From 10ed514ecac144034eba27bf9436ef111ac2ebd2 Mon Sep 17 00:00:00 2001
From: Josh Boyer <jwboyer@redhat.com>
Date: Thu, 20 Sep 2012 10:41:02 -0400
-Subject: [PATCH 07/20] Secure boot: Add a dummy kernel parameter that will
+Subject: [PATCH 03/17] Secure boot: Add a dummy kernel parameter that will
switch on Secure Boot mode
This forcibly drops CAP_COMPROMISE_KERNEL from both cap_permitted and cap_bset
@@ -336,10 +85,10 @@ Signed-off-by: Josh Boyer <jwboyer@redhat.com>
2 files changed, 24 insertions(+)
diff --git a/Documentation/kernel-parameters.txt b/Documentation/kernel-parameters.txt
-index 9776f06..0d6c28d 100644
+index 363e348..832b39b 100644
--- a/Documentation/kernel-parameters.txt
+++ b/Documentation/kernel-parameters.txt
-@@ -2599,6 +2599,13 @@ bytes respectively. Such letter suffixes can also be entirely omitted.
+@@ -2654,6 +2654,13 @@ bytes respectively. Such letter suffixes can also be entirely omitted.
Note: increases power consumption, thus should only be
enabled if running jitter sensitive (HPC/RT) workloads.
@@ -354,10 +103,10 @@ index 9776f06..0d6c28d 100644
If this boot parameter is not specified, only the first
security module asking for security registration will be
diff --git a/kernel/cred.c b/kernel/cred.c
-index 48cea3d..3f5be65 100644
+index e0573a4..c3f4e3e 100644
--- a/kernel/cred.c
+++ b/kernel/cred.c
-@@ -623,6 +623,23 @@ void __init cred_init(void)
+@@ -565,6 +565,23 @@ void __init cred_init(void)
0, SLAB_HWCACHE_ALIGN|SLAB_PANIC, NULL);
}
@@ -382,46 +131,49 @@ index 48cea3d..3f5be65 100644
* prepare_kernel_cred - Prepare a set of credentials for a kernel service
* @daemon: A userspace daemon to be used as a reference
--
-1.8.0.1
+1.8.1
-From 640f088c49da87a344417f58d3faa72d63a4f6ed Mon Sep 17 00:00:00 2001
+From 066b811cd05432ef91473cd349d20fa856d5ab18 Mon Sep 17 00:00:00 2001
From: Matthew Garrett <mjg@redhat.com>
Date: Thu, 20 Sep 2012 10:41:03 -0400
-Subject: [PATCH 08/20] efi: Enable secure boot lockdown automatically when
+Subject: [PATCH 04/17] efi: Enable secure boot lockdown automatically when
enabled in firmware
The firmware has a set of flags that indicate whether secure boot is enabled
and enforcing. Use them to indicate whether the kernel should lock itself
-down.
+down. We also indicate the machine is in secure boot mode by adding the
+EFI_SECURE_BOOT bit for use with efi_enabled.
Signed-off-by: Matthew Garrett <mjg@redhat.com>
+Signed-off-by: Josh Boyer <jwboyer@redhat.com>
---
- Documentation/x86/zero-page.txt | 2 ++
- arch/x86/boot/compressed/eboot.c | 32 ++++++++++++++++++++++++++++++++
- arch/x86/include/asm/bootparam.h | 3 ++-
- arch/x86/kernel/setup.c | 3 +++
- include/linux/cred.h | 2 ++
- 5 files changed, 41 insertions(+), 1 deletion(-)
+ Documentation/x86/zero-page.txt | 2 ++
+ arch/x86/boot/compressed/eboot.c | 32 ++++++++++++++++++++++++++++++++
+ arch/x86/include/uapi/asm/bootparam.h | 3 ++-
+ arch/x86/kernel/setup.c | 5 +++++
+ include/linux/cred.h | 2 ++
+ include/linux/efi.h | 1 +
+ 6 files changed, 44 insertions(+), 1 deletion(-)
diff --git a/Documentation/x86/zero-page.txt b/Documentation/x86/zero-page.txt
-index cf5437d..7f9ed48 100644
+index 199f453..ff651d3 100644
--- a/Documentation/x86/zero-page.txt
+++ b/Documentation/x86/zero-page.txt
-@@ -27,6 +27,8 @@ Offset Proto Name Meaning
+@@ -30,6 +30,8 @@ Offset Proto Name Meaning
1E9/001 ALL eddbuf_entries Number of entries in eddbuf (below)
1EA/001 ALL edd_mbr_sig_buf_entries Number of entries in edd_mbr_sig_buffer
(below)
+1EB/001 ALL kbd_status Numlock is enabled
+1EC/001 ALL secure_boot Kernel should enable secure boot lockdowns
+ 1EF/001 ALL sentinel Used to detect broken bootloaders
290/040 ALL edd_mbr_sig_buffer EDD MBR signatures
2D0/A00 ALL e820_map E820 memory map table
- (array of struct e820entry)
diff --git a/arch/x86/boot/compressed/eboot.c b/arch/x86/boot/compressed/eboot.c
-index e87b0ca..260cace 100644
+index f8fa411..96bd86b 100644
--- a/arch/x86/boot/compressed/eboot.c
+++ b/arch/x86/boot/compressed/eboot.c
-@@ -732,6 +732,36 @@ fail:
+@@ -849,6 +849,36 @@ fail:
return status;
}
@@ -458,7 +210,7 @@ index e87b0ca..260cace 100644
/*
* Because the x86 boot code expects to be passed a boot_params we
* need to create one ourselves (usually the bootloader would create
-@@ -1026,6 +1056,8 @@ struct boot_params *efi_main(void *handle, efi_system_table_t *_table,
+@@ -1143,6 +1173,8 @@ struct boot_params *efi_main(void *handle, efi_system_table_t *_table,
if (sys_table->hdr.signature != EFI_SYSTEM_TABLE_SIGNATURE)
goto fail;
@@ -466,40 +218,42 @@ index e87b0ca..260cace 100644
+
setup_graphics(boot_params);
- status = efi_call_phys3(sys_table->boottime->allocate_pool,
-diff --git a/arch/x86/include/asm/bootparam.h b/arch/x86/include/asm/bootparam.h
-index 2ad874c..c7338e0 100644
---- a/arch/x86/include/asm/bootparam.h
-+++ b/arch/x86/include/asm/bootparam.h
-@@ -114,7 +114,8 @@ struct boot_params {
+ setup_efi_pci(boot_params);
+diff --git a/arch/x86/include/uapi/asm/bootparam.h b/arch/x86/include/uapi/asm/bootparam.h
+index c15ddaf..85d7685 100644
+--- a/arch/x86/include/uapi/asm/bootparam.h
++++ b/arch/x86/include/uapi/asm/bootparam.h
+@@ -131,7 +131,8 @@ struct boot_params {
__u8 eddbuf_entries; /* 0x1e9 */
__u8 edd_mbr_sig_buf_entries; /* 0x1ea */
__u8 kbd_status; /* 0x1eb */
-- __u8 _pad6[5]; /* 0x1ec */
+- __u8 _pad5[3]; /* 0x1ec */
+ __u8 secure_boot; /* 0x1ec */
-+ __u8 _pad6[4]; /* 0x1ed */
- struct setup_header hdr; /* setup header */ /* 0x1f1 */
- __u8 _pad7[0x290-0x1f1-sizeof(struct setup_header)];
- __u32 edd_mbr_sig_buffer[EDD_MBR_SIG_MAX]; /* 0x290 */
++ __u8 _pad5[2]; /* 0x1ed */
+ /*
+ * The sentinel is set to a nonzero value (0xff) in header.S.
+ *
diff --git a/arch/x86/kernel/setup.c b/arch/x86/kernel/setup.c
-index ca45696..800673d 100644
+index 8b24289..5355a54 100644
--- a/arch/x86/kernel/setup.c
+++ b/arch/x86/kernel/setup.c
-@@ -962,6 +962,9 @@ void __init setup_arch(char **cmdline_p)
+@@ -1042,6 +1042,11 @@ void __init setup_arch(char **cmdline_p)
io_delay_init();
-+ if (boot_params.secure_boot)
++ if (boot_params.secure_boot) {
++ set_bit(EFI_SECURE_BOOT, &x86_efi_facility);
+ secureboot_enable();
++ }
+
/*
* Parse the ACPI tables for possible boot-time SMP configuration.
*/
diff --git a/include/linux/cred.h b/include/linux/cred.h
-index ebbed2c..a24faf1 100644
+index 04421e8..9e69542 100644
--- a/include/linux/cred.h
+++ b/include/linux/cred.h
-@@ -170,6 +170,8 @@ extern int set_security_override_from_ctx(struct cred *, const char *);
+@@ -156,6 +156,8 @@ extern int set_security_override_from_ctx(struct cred *, const char *);
extern int set_create_files_as(struct cred *, struct inode *);
extern void __init cred_init(void);
@@ -508,215 +262,29 @@ index ebbed2c..a24faf1 100644
/*
* check for validity of credentials
*/
---
-1.8.0.1
-
-
-From 994d895b5b684fc53c3b43dda9aee460c1f526f2 Mon Sep 17 00:00:00 2001
-From: Josh Boyer <jwboyer@redhat.com>
-Date: Thu, 20 Sep 2012 10:41:04 -0400
-Subject: [PATCH 09/20] acpi: Ignore acpi_rsdp kernel parameter in a secure
- boot environment
-
-This option allows userspace to pass the RSDP address to the kernel. This
-could potentially be used to circumvent the secure boot trust model.
-We ignore the setting if we don't have the CAP_COMPROMISE_KERNEL capability.
-
-Signed-off-by: Josh Boyer <jwboyer@redhat.com>
----
- drivers/acpi/osl.c | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/drivers/acpi/osl.c b/drivers/acpi/osl.c
-index 9eaf708..f94341b 100644
---- a/drivers/acpi/osl.c
-+++ b/drivers/acpi/osl.c
-@@ -246,7 +246,7 @@ early_param("acpi_rsdp", setup_acpi_rsdp);
- acpi_physical_address __init acpi_os_get_root_pointer(void)
- {
- #ifdef CONFIG_KEXEC
-- if (acpi_rsdp)
-+ if (acpi_rsdp && capable(CAP_COMPROMISE_KERNEL))
- return acpi_rsdp;
- #endif
-
---
-1.8.0.1
-
-
-From c80aaf3eee3cb6b0d1a051e418ee99cd238c868c Mon Sep 17 00:00:00 2001
-From: Josh Boyer <jwboyer@redhat.com>
-Date: Thu, 20 Sep 2012 10:41:05 -0400
-Subject: [PATCH 10/20] SELinux: define mapping for new Secure Boot capability
-
-Add the name of the new Secure Boot capability. This allows SELinux
-policies to properly map CAP_COMPROMISE_KERNEL to the appropriate
-capability class.
-
-Signed-off-by: Josh Boyer <jwboyer@redhat.com>
----
- security/selinux/include/classmap.h | 4 ++--
- 1 file changed, 2 insertions(+), 2 deletions(-)
-
-diff --git a/security/selinux/include/classmap.h b/security/selinux/include/classmap.h
-index df2de54..70e2834 100644
---- a/security/selinux/include/classmap.h
-+++ b/security/selinux/include/classmap.h
-@@ -146,8 +146,8 @@ struct security_class_mapping secclass_map[] = {
- { "memprotect", { "mmap_zero", NULL } },
- { "peer", { "recv", NULL } },
- { "capability2",
-- { "mac_override", "mac_admin", "syslog", "wake_alarm", "block_suspend",
-- NULL } },
-+ { "mac_override", "mac_admin", "syslog", "wake_alarm",
-+ "block_suspend", "compromise_kernel", NULL } },
- { "kernel_service", { "use_as_override", "create_files_as", NULL } },
- { "tun_socket",
- { COMMON_SOCK_PERMS, NULL } },
---
-1.8.0.1
-
-
-From 26352bcb92468233dd960b5d02ba1db344df72b9 Mon Sep 17 00:00:00 2001
-From: Matthew Garrett <mjg@redhat.com>
-Date: Tue, 4 Sep 2012 11:55:13 -0400
-Subject: [PATCH 11/20] kexec: Disable in a secure boot environment
-
-kexec could be used as a vector for a malicious user to use a signed kernel
-to circumvent the secure boot trust model. In the long run we'll want to
-support signed kexec payloads, but for the moment we should just disable
-loading entirely in that situation.
-
-Signed-off-by: Matthew Garrett <mjg@redhat.com>
----
- kernel/kexec.c | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/kernel/kexec.c b/kernel/kexec.c
-index 5e4bd78..dd464e0 100644
---- a/kernel/kexec.c
-+++ b/kernel/kexec.c
-@@ -943,7 +943,7 @@ SYSCALL_DEFINE4(kexec_load, unsigned long, entry, unsigned long, nr_segments,
- int result;
-
- /* We only trust the superuser with rebooting the system. */
-- if (!capable(CAP_SYS_BOOT))
-+ if (!capable(CAP_SYS_BOOT) || !capable(CAP_COMPROMISE_KERNEL))
- return -EPERM;
-
- /*
---
-1.8.0.1
-
-
-From c03c68adceaec9656c55c47190fb4243bf903b40 Mon Sep 17 00:00:00 2001
-From: Josh Boyer <jwboyer@redhat.com>
-Date: Mon, 25 Jun 2012 21:29:46 -0400
-Subject: [PATCH 12/20] Documentation: kernel-parameters.txt remove
- capability.disable
-
-Remove the documentation for capability.disable. The code supporting this
-parameter was removed with:
-
- commit 5915eb53861c5776cfec33ca4fcc1fd20d66dd27
- Author: Miklos Szeredi <mszeredi@suse.cz>
- Date: Thu Jul 3 20:56:05 2008 +0200
-
- security: remove dummy module
-
-Signed-off-by: Josh Boyer <jwboyer@redhat.com>
----
- Documentation/kernel-parameters.txt | 6 ------
- 1 file changed, 6 deletions(-)
-
-diff --git a/Documentation/kernel-parameters.txt b/Documentation/kernel-parameters.txt
-index 0d6c28d..d9af501 100644
---- a/Documentation/kernel-parameters.txt
-+++ b/Documentation/kernel-parameters.txt
-@@ -446,12 +446,6 @@ bytes respectively. Such letter suffixes can also be entirely omitted.
- possible to determine what the correct size should be.
- This option provides an override for these situations.
-
-- capability.disable=
-- [SECURITY] Disable capabilities. This would normally
-- be used only if an alternative security model is to be
-- configured. Potentially dangerous and should only be
-- used if you are entirely sure of the consequences.
--
- ccw_timeout_log [S390]
- See Documentation/s390/CommonIO for details.
-
---
-1.8.0.1
-
-
-From 3f1bda64d2c7b369e2833bd32cd1f3ba6c90348f Mon Sep 17 00:00:00 2001
-From: Josh Boyer <jwboyer@redhat.com>
-Date: Fri, 5 Oct 2012 10:12:48 -0400
-Subject: [PATCH 13/20] modsign: Always enforce module signing in a Secure Boot
- environment
-
-If a machine is booted into a Secure Boot environment, we need to
-protect the trust model. This requires that all modules be signed
-with a key that is in the kernel's _modsign keyring. The checks for
-this are already done via the 'sig_enforce' module parameter. Make
-this visible within the kernel and force it to be true.
-
-Signed-off-by: Josh Boyer <jwboyer@redhat.com>
----
- kernel/cred.c | 8 ++++++++
- kernel/module.c | 4 ++--
- 2 files changed, 10 insertions(+), 2 deletions(-)
-
-diff --git a/kernel/cred.c b/kernel/cred.c
-index 3f5be65..a381e27 100644
---- a/kernel/cred.c
-+++ b/kernel/cred.c
-@@ -623,11 +623,19 @@ void __init cred_init(void)
- 0, SLAB_HWCACHE_ALIGN|SLAB_PANIC, NULL);
- }
-
-+#ifdef CONFIG_MODULE_SIG
-+extern bool sig_enforce;
-+#endif
-+
- void __init secureboot_enable()
- {
- pr_info("Secure boot enabled\n");
- cap_lower((&init_cred)->cap_bset, CAP_COMPROMISE_KERNEL);
- cap_lower((&init_cred)->cap_permitted, CAP_COMPROMISE_KERNEL);
-+#ifdef CONFIG_MODULE_SIG
-+ /* Enable module signature enforcing */
-+ sig_enforce = true;
-+#endif
- }
-
- /* Dummy Secure Boot enable option to fake out UEFI SB=1 */
-diff --git a/kernel/module.c b/kernel/module.c
-index 6e48c3a..6d5d2aa 100644
---- a/kernel/module.c
-+++ b/kernel/module.c
-@@ -106,9 +106,9 @@ struct list_head *kdb_modules = &modules; /* kdb needs the list of modules */
-
- #ifdef CONFIG_MODULE_SIG
- #ifdef CONFIG_MODULE_SIG_FORCE
--static bool sig_enforce = true;
-+bool sig_enforce = true;
- #else
--static bool sig_enforce = false;
-+bool sig_enforce = false;
+diff --git a/include/linux/efi.h b/include/linux/efi.h
+index 7a9498a..1ae16b6 100644
+--- a/include/linux/efi.h
++++ b/include/linux/efi.h
+@@ -627,6 +627,7 @@ extern int __init efi_setup_pcdp_console(char *);
+ #define EFI_RUNTIME_SERVICES 3 /* Can we use runtime services? */
+ #define EFI_MEMMAP 4 /* Can we use EFI memory map? */
+ #define EFI_64BIT 5 /* Is the firmware 64-bit? */
++#define EFI_SECURE_BOOT 6 /* Are we in Secure Boot mode? */
- static int param_set_bool_enable_only(const char *val,
- const struct kernel_param *kp)
+ #ifdef CONFIG_EFI
+ # ifdef CONFIG_X86
--
-1.8.0.1
+1.8.1
-From e6e3ec77b2fa037b32829e7f5ee468ad8a62dd05 Mon Sep 17 00:00:00 2001
+From 8d8349396e90630e2617c5a855682a6c87a7ae4d Mon Sep 17 00:00:00 2001
From: Dave Howells <dhowells@redhat.com>
Date: Tue, 23 Oct 2012 09:30:54 -0400
-Subject: [PATCH 14/20] Add EFI signature data types, such as are used for
- containing hashes, keys and certificates for cryptographic verification.
+Subject: [PATCH 05/17] Add EFI signature data types
+
+Add the data types that are used for containing hashes, keys and certificates
+for cryptographic verification.
Signed-off-by: David Howells <dhowells@redhat.com>
---
@@ -724,10 +292,10 @@ Signed-off-by: David Howells <dhowells@redhat.com>
1 file changed, 20 insertions(+)
diff --git a/include/linux/efi.h b/include/linux/efi.h
-index 337aefb..a01f8a7 100644
+index 1ae16b6..de7021d 100644
--- a/include/linux/efi.h
+++ b/include/linux/efi.h
-@@ -317,6 +317,12 @@ typedef efi_status_t efi_query_capsule_caps_t(efi_capsule_header_t **capsules,
+@@ -388,6 +388,12 @@ typedef efi_status_t efi_query_capsule_caps_t(efi_capsule_header_t **capsules,
#define EFI_FILE_SYSTEM_GUID \
EFI_GUID( 0x964e5b22, 0x6459, 0x11d2, 0x8e, 0x39, 0x00, 0xa0, 0xc9, 0x69, 0x72, 0x3b )
@@ -740,7 +308,7 @@ index 337aefb..a01f8a7 100644
typedef struct {
efi_guid_t guid;
u64 table;
-@@ -452,6 +458,20 @@ typedef struct {
+@@ -523,6 +529,20 @@ typedef struct {
#define EFI_INVALID_TABLE_ADDR (~0UL)
@@ -762,34 +330,37 @@ index 337aefb..a01f8a7 100644
* All runtime access to EFI goes through this structure:
*/
--
-1.8.0.1
+1.8.1
-From c2542256f632a22232cf02d5fd64568a5afa4516 Mon Sep 17 00:00:00 2001
+From a221d71dd4487a5ee2b337540d0258512b7c8dba Mon Sep 17 00:00:00 2001
From: Dave Howells <dhowells@redhat.com>
Date: Tue, 23 Oct 2012 09:36:28 -0400
-Subject: [PATCH 15/20] Add an EFI signature blob parser and key loader. X.509
- certificates are loaded into the specified keyring as asymmetric type keys.
+Subject: [PATCH 06/17] Add an EFI signature blob parser and key loader.
+
+X.509 certificates are loaded into the specified keyring as asymmetric type
+keys.
Signed-off-by: David Howells <dhowells@redhat.com>
---
- crypto/asymmetric_keys/Kconfig | 7 +++
+ crypto/asymmetric_keys/Kconfig | 8 +++
crypto/asymmetric_keys/Makefile | 1 +
- crypto/asymmetric_keys/efi_parser.c | 107 ++++++++++++++++++++++++++++++++++++
+ crypto/asymmetric_keys/efi_parser.c | 108 ++++++++++++++++++++++++++++++++++++
include/linux/efi.h | 4 ++
- 4 files changed, 119 insertions(+)
+ 4 files changed, 121 insertions(+)
create mode 100644 crypto/asymmetric_keys/efi_parser.c
diff --git a/crypto/asymmetric_keys/Kconfig b/crypto/asymmetric_keys/Kconfig
-index 6d2c2ea..eb53fc3 100644
+index 6d2c2ea..ace9c30 100644
--- a/crypto/asymmetric_keys/Kconfig
+++ b/crypto/asymmetric_keys/Kconfig
-@@ -35,4 +35,11 @@ config X509_CERTIFICATE_PARSER
+@@ -35,4 +35,12 @@ config X509_CERTIFICATE_PARSER
data and provides the ability to instantiate a crypto key from a
public key packet found inside the certificate.
+config EFI_SIGNATURE_LIST_PARSER
+ bool "EFI signature list parser"
++ depends on EFI
+ select X509_CERTIFICATE_PARSER
+ help
+ This option provides support for parsing EFI signature lists for
@@ -810,10 +381,10 @@ index 0727204..cd8388e 100644
# X.509 Certificate handling
diff --git a/crypto/asymmetric_keys/efi_parser.c b/crypto/asymmetric_keys/efi_parser.c
new file mode 100644
-index 0000000..59b859a
+index 0000000..636feb1
--- /dev/null
+++ b/crypto/asymmetric_keys/efi_parser.c
-@@ -0,0 +1,107 @@
+@@ -0,0 +1,108 @@
+/* EFI signature/key/certificate list parser
+ *
+ * Copyright (C) 2012 Red Hat, Inc. All Rights Reserved.
@@ -877,7 +448,7 @@ index 0000000..59b859a
+ elsize < esize ||
+ elsize % esize != 0) {
+ pr_devel("- bad size combo @%x\n", offs);
-+ continue;
++ return -EBADMSG;
+ }
+
+ if (efi_guidcmp(list.signature_type, efi_cert_x509_guid) != 0) {
@@ -910,8 +481,9 @@ index 0000000..59b859a
+ pr_err("Problem loading in-kernel X.509 certificate (%ld)\n",
+ PTR_ERR(key));
+ else
-+ pr_notice("Loaded cert '%s'\n",
-+ key_ref_to_ptr(key)->description);
++ pr_notice("Loaded cert '%s' linked to '%s'\n",
++ key_ref_to_ptr(key)->description,
++ keyring->description);
+
+ data += esize;
+ size -= esize;
@@ -922,10 +494,10 @@ index 0000000..59b859a
+ return 0;
+}
diff --git a/include/linux/efi.h b/include/linux/efi.h
-index a01f8a7..44a7faa 100644
+index de7021d..64b3e55 100644
--- a/include/linux/efi.h
+++ b/include/linux/efi.h
-@@ -541,6 +541,10 @@ extern int efi_set_rtc_mmss(unsigned long nowtime);
+@@ -612,6 +612,10 @@ extern int efi_set_rtc_mmss(unsigned long nowtime);
extern void efi_reserve_boot_services(void);
extern struct efi_memory_map memmap;
@@ -937,85 +509,13 @@ index a01f8a7..44a7faa 100644
* efi_range_is_wc - check the WC bit on an address range
* @start: starting kvirt address
--
-1.8.0.1
+1.8.1
-From a418e6fdd2aa946a30cf1bee5c9540d03d626981 Mon Sep 17 00:00:00 2001
-From: Josh Boyer <jwboyer@redhat.com>
-Date: Fri, 26 Oct 2012 12:29:49 -0400
-Subject: [PATCH 16/20] EFI: Add in-kernel variable to determine if Secure Boot
- is enabled
-
-There are a few cases where in-kernel functions may need to know if
-Secure Boot is enabled. The added capability check cannot be used as the
-kernel can't drop it's own capabilites, so we add a global variable
-similar to efi_enabled so they can determine if Secure Boot is enabled.
-
-Signed-off-by: Josh Boyer <jwboyer@redhat.com>
----
- arch/x86/kernel/setup.c | 6 +++++-
- arch/x86/platform/efi/efi.c | 2 ++
- include/linux/efi.h | 3 +++
- 3 files changed, 10 insertions(+), 1 deletion(-)
-
-diff --git a/arch/x86/kernel/setup.c b/arch/x86/kernel/setup.c
-index 800673d..cf8823b 100644
---- a/arch/x86/kernel/setup.c
-+++ b/arch/x86/kernel/setup.c
-@@ -962,8 +962,12 @@ void __init setup_arch(char **cmdline_p)
-
- io_delay_init();
-
-- if (boot_params.secure_boot)
-+ if (boot_params.secure_boot) {
- secureboot_enable();
-+#ifdef CONFIG_EFI
-+ secure_boot_enabled = 1;
-+#endif
-+ }
-
- /*
- * Parse the ACPI tables for possible boot-time SMP configuration.
-diff --git a/arch/x86/platform/efi/efi.c b/arch/x86/platform/efi/efi.c
-index ad44391..d22bfeb 100644
---- a/arch/x86/platform/efi/efi.c
-+++ b/arch/x86/platform/efi/efi.c
-@@ -54,6 +54,8 @@
- int efi_enabled;
- EXPORT_SYMBOL(efi_enabled);
-
-+int secure_boot_enabled;
-+
- struct efi __read_mostly efi = {
- .mps = EFI_INVALID_TABLE_ADDR,
- .acpi = EFI_INVALID_TABLE_ADDR,
-diff --git a/include/linux/efi.h b/include/linux/efi.h
-index 44a7faa..b5403ae 100644
---- a/include/linux/efi.h
-+++ b/include/linux/efi.h
-@@ -578,11 +578,14 @@ extern int __init efi_setup_pcdp_console(char *);
- # ifdef CONFIG_X86
- extern int efi_enabled;
- extern bool efi_64bit;
-+ extern int secure_boot_enabled;
- # else
- # define efi_enabled 1
-+# define secure_boot_enabled 0
- # endif
- #else
- # define efi_enabled 0
-+# define secure_boot_enabled 0
- #endif
-
- /*
---
-1.8.0.1
-
-
-From f6d05f0974f6a7667ebbbf91624678bcf32169ae Mon Sep 17 00:00:00 2001
+From 9c9d291a605d1d0864d047cff75724ad1cb8b97d Mon Sep 17 00:00:00 2001
From: Josh Boyer <jwboyer@redhat.com>
Date: Fri, 26 Oct 2012 12:36:24 -0400
-Subject: [PATCH 17/20] MODSIGN: Add module certificate blacklist keyring
+Subject: [PATCH 07/17] MODSIGN: Add module certificate blacklist keyring
This adds an additional keyring that is used to store certificates that
are blacklisted. This keyring is searched first when loading signed modules
@@ -1025,16 +525,16 @@ useful in cases where third party certificates are used for module signing.
Signed-off-by: Josh Boyer <jwboyer@redhat.com>
---
init/Kconfig | 8 ++++++++
- kernel/modsign_pubkey.c | 17 +++++++++++++++++
+ kernel/modsign_pubkey.c | 14 ++++++++++++++
kernel/module-internal.h | 3 +++
- kernel/module_signing.c | 14 +++++++++++++-
- 4 files changed, 41 insertions(+), 1 deletion(-)
+ kernel/module_signing.c | 12 ++++++++++++
+ 4 files changed, 37 insertions(+)
diff --git a/init/Kconfig b/init/Kconfig
-index 6fdd6e3..7a9bf00 100644
+index be8b7f5..d972b77 100644
--- a/init/Kconfig
+++ b/init/Kconfig
-@@ -1602,6 +1602,14 @@ config MODULE_SIG_FORCE
+@@ -1665,6 +1665,14 @@ config MODULE_SIG_FORCE
Reject unsigned modules or signed modules for which we don't have a
key. Without this, such modules will simply taint the kernel.
@@ -1050,7 +550,7 @@ index 6fdd6e3..7a9bf00 100644
prompt "Which hash algorithm should modules be signed with?"
depends on MODULE_SIG
diff --git a/kernel/modsign_pubkey.c b/kernel/modsign_pubkey.c
-index 767e559..3bfb7ed 100644
+index 2b6e699..4cd408d 100644
--- a/kernel/modsign_pubkey.c
+++ b/kernel/modsign_pubkey.c
@@ -17,6 +17,9 @@
@@ -1063,22 +563,19 @@ index 767e559..3bfb7ed 100644
extern __initdata const u8 modsign_certificate_list[];
extern __initdata const u8 modsign_certificate_list_end[];
-@@ -52,6 +55,20 @@ static __init int module_verify_init(void)
- if (key_instantiate_and_link(modsign_keyring, NULL, 0, NULL, NULL) < 0)
- panic("Can't instantiate module signing keyring\n");
+@@ -43,6 +46,17 @@ static __init int module_verify_init(void)
+ if (IS_ERR(modsign_keyring))
+ panic("Can't allocate module signing keyring\n");
+#ifdef CONFIG_MODULE_SIG_BLACKLIST
-+ modsign_blacklist = key_alloc(&key_type_keyring, ".modsign_blacklist",
++ modsign_blacklist = keyring_alloc(".modsign_blacklist",
+ KUIDT_INIT(0), KGIDT_INIT(0),
+ current_cred(),
+ (KEY_POS_ALL & ~KEY_POS_SETATTR) |
+ KEY_USR_VIEW | KEY_USR_READ,
-+ KEY_ALLOC_NOT_IN_QUOTA);
++ KEY_ALLOC_NOT_IN_QUOTA, NULL);
+ if (IS_ERR(modsign_blacklist))
+ panic("Can't allocate module signing blacklist keyring\n");
-+
-+ if (key_instantiate_and_link(modsign_blacklist, NULL, 0, NULL, NULL) < 0)
-+ panic("Can't instantiate module signing blacklist keyring\n");
+#endif
+
return 0;
@@ -1098,45 +595,36 @@ index 24f9247..51a8380 100644
extern int mod_verify_sig(const void *mod, unsigned long *_modlen);
diff --git a/kernel/module_signing.c b/kernel/module_signing.c
-index f2970bd..8ab83a6 100644
+index f2970bd..5423195 100644
--- a/kernel/module_signing.c
+++ b/kernel/module_signing.c
-@@ -132,7 +132,7 @@ static int mod_extract_mpi_array(struct public_key_signature *pks,
- static struct key *request_asymmetric_key(const char *signer, size_t signer_len,
- const u8 *key_id, size_t key_id_len)
- {
-- key_ref_t key;
-+ key_ref_t key, blacklist;
- size_t i;
- char *id, *q;
-
@@ -157,6 +157,18 @@ static struct key *request_asymmetric_key(const char *signer, size_t signer_len,
pr_debug("Look up: \"%s\"\n", id);
+#ifdef CONFIG_MODULE_SIG_BLACKLIST
-+ blacklist = keyring_search(make_key_ref(modsign_blacklist, 1),
++ key = keyring_search(make_key_ref(modsign_blacklist, 1),
+ &key_type_asymmetric, id);
-+ if (!IS_ERR(blacklist)) {
++ if (!IS_ERR(key)) {
+ /* module is signed with a cert in the blacklist. reject */
+ pr_err("Module key '%s' is in blacklist\n", id);
-+ key_ref_put(blacklist);
++ key_ref_put(key);
+ kfree(id);
+ return ERR_PTR(-EKEYREJECTED);
+ }
+#endif
-+
++
key = keyring_search(make_key_ref(modsign_keyring, 1),
&key_type_asymmetric, id);
if (IS_ERR(key))
--
-1.8.0.1
+1.8.1
-From ff0ed221fe8d5a46a9bc36323ca8fb6f75c22a83 Mon Sep 17 00:00:00 2001
+From 4b85122267e2ac07833e20f0cac71c5c8c9ac65c Mon Sep 17 00:00:00 2001
From: Josh Boyer <jwboyer@redhat.com>
Date: Fri, 26 Oct 2012 12:42:16 -0400
-Subject: [PATCH 18/20] MODSIGN: Import certificates from UEFI Secure Boot
+Subject: [PATCH 08/17] MODSIGN: Import certificates from UEFI Secure Boot
Secure Boot stores a list of allowed certificates in the 'db' variable.
This imports those certificates into the module signing keyring. This
@@ -1161,10 +649,10 @@ Signed-off-by: Josh Boyer <jwboyer@redhat.com>
create mode 100644 kernel/modsign_uefi.c
diff --git a/include/linux/efi.h b/include/linux/efi.h
-index b5403ae..bba53e3 100644
+index 64b3e55..76fe526 100644
--- a/include/linux/efi.h
+++ b/include/linux/efi.h
-@@ -323,6 +323,12 @@ typedef efi_status_t efi_query_capsule_caps_t(efi_capsule_header_t **capsules,
+@@ -394,6 +394,12 @@ typedef efi_status_t efi_query_capsule_caps_t(efi_capsule_header_t **capsules,
#define EFI_CERT_X509_GUID \
EFI_GUID( 0xa5c059a1, 0x94e4, 0x4aa7, 0x87, 0xb5, 0xab, 0x15, 0x5c, 0x2b, 0xf0, 0x72 )
@@ -1178,10 +666,10 @@ index b5403ae..bba53e3 100644
efi_guid_t guid;
u64 table;
diff --git a/init/Kconfig b/init/Kconfig
-index 7a9bf00..51aa170 100644
+index d972b77..27e3a82 100644
--- a/init/Kconfig
+++ b/init/Kconfig
-@@ -1610,6 +1610,15 @@ config MODULE_SIG_BLACKLIST
+@@ -1673,6 +1673,15 @@ config MODULE_SIG_BLACKLIST
should not pass module signature verification. If a module is
signed with something in this keyring, the load will be rejected.
@@ -1198,18 +686,18 @@ index 7a9bf00..51aa170 100644
prompt "Which hash algorithm should modules be signed with?"
depends on MODULE_SIG
diff --git a/kernel/Makefile b/kernel/Makefile
-index 86e3285..12e17ab 100644
+index 6c072b6..8848829 100644
--- a/kernel/Makefile
+++ b/kernel/Makefile
@@ -55,6 +55,7 @@ obj-$(CONFIG_PROVE_LOCKING) += spinlock.o
obj-$(CONFIG_UID16) += uid16.o
obj-$(CONFIG_MODULES) += module.o
- obj-$(CONFIG_MODULE_SIG) += module_signing.o modsign_pubkey.o
+ obj-$(CONFIG_MODULE_SIG) += module_signing.o modsign_pubkey.o modsign_certificate.o
+obj-$(CONFIG_MODULE_SIG_UEFI) += modsign_uefi.o
obj-$(CONFIG_KALLSYMS) += kallsyms.o
obj-$(CONFIG_BSD_PROCESS_ACCT) += acct.o
obj-$(CONFIG_KEXEC) += kexec.o
-@@ -113,6 +114,8 @@ obj-$(CONFIG_JUMP_LABEL) += jump_label.o
+@@ -114,6 +115,8 @@ obj-$(CONFIG_CONTEXT_TRACKING) += context_tracking.o
$(obj)/configs.o: $(obj)/config_data.h
@@ -1220,7 +708,7 @@ index 86e3285..12e17ab 100644
targets += config_data.gz
diff --git a/kernel/modsign_uefi.c b/kernel/modsign_uefi.c
new file mode 100644
-index 0000000..76a5a34
+index 0000000..b9237d7
--- /dev/null
+++ b/kernel/modsign_uefi.c
@@ -0,0 +1,90 @@
@@ -1274,7 +762,7 @@ index 0000000..76a5a34
+ int rc = 0;
+
+ /* Check if SB is enabled and just return if not */
-+ if (!secure_boot_enabled)
++ if (!efi_enabled(EFI_SECURE_BOOT))
+ return 0;
+
+ /* Get db, MokListRT, and dbx. They might not exist, so it isn't
@@ -1315,13 +803,423 @@ index 0000000..76a5a34
+}
+late_initcall(load_uefi_certs);
--
-1.8.0.1
+1.8.1
+
+
+From e6f51e0b73bdaf0bb8d6ebc07e041ce3b6126e9c Mon Sep 17 00:00:00 2001
+From: Matthew Garrett <mjg@redhat.com>
+Date: Thu, 20 Sep 2012 10:40:57 -0400
+Subject: [PATCH 09/17] PCI: Lock down BAR access in secure boot environments
+
+Any hardware that can potentially generate DMA has to be locked down from
+userspace in order to avoid it being possible for an attacker to cause
+arbitrary kernel behaviour. Default to paranoid - in future we can
+potentially relax this for sufficiently IOMMU-isolated devices.
+
+Signed-off-by: Matthew Garrett <mjg@redhat.com>
+---
+ drivers/pci/pci-sysfs.c | 9 +++++++++
+ drivers/pci/proc.c | 8 +++++++-
+ drivers/pci/syscall.c | 2 +-
+ 3 files changed, 17 insertions(+), 2 deletions(-)
+
+diff --git a/drivers/pci/pci-sysfs.c b/drivers/pci/pci-sysfs.c
+index 9c6e9bb..b966089 100644
+--- a/drivers/pci/pci-sysfs.c
++++ b/drivers/pci/pci-sysfs.c
+@@ -622,6 +622,9 @@ pci_write_config(struct file* filp, struct kobject *kobj,
+ loff_t init_off = off;
+ u8 *data = (u8*) buf;
+
++ if (!capable(CAP_COMPROMISE_KERNEL))
++ return -EPERM;
++
+ if (off > dev->cfg_size)
+ return 0;
+ if (off + count > dev->cfg_size) {
+@@ -928,6 +931,9 @@ pci_mmap_resource(struct kobject *kobj, struct bin_attribute *attr,
+ resource_size_t start, end;
+ int i;
+
++ if (!capable(CAP_COMPROMISE_KERNEL))
++ return -EPERM;
++
+ for (i = 0; i < PCI_ROM_RESOURCE; i++)
+ if (res == &pdev->resource[i])
+ break;
+@@ -1035,6 +1041,9 @@ pci_write_resource_io(struct file *filp, struct kobject *kobj,
+ struct bin_attribute *attr, char *buf,
+ loff_t off, size_t count)
+ {
++ if (!capable(CAP_COMPROMISE_KERNEL))
++ return -EPERM;
++
+ return pci_resource_io(filp, kobj, attr, buf, off, count, true);
+ }
+
+diff --git a/drivers/pci/proc.c b/drivers/pci/proc.c
+index 9b8505c..35580bc 100644
+--- a/drivers/pci/proc.c
++++ b/drivers/pci/proc.c
+@@ -139,6 +139,9 @@ proc_bus_pci_write(struct file *file, const char __user *buf, size_t nbytes, lof
+ int size = dp->size;
+ int cnt;
+
++ if (!capable(CAP_COMPROMISE_KERNEL))
++ return -EPERM;
++
+ if (pos >= size)
+ return 0;
+ if (nbytes >= size)
+@@ -219,6 +222,9 @@ static long proc_bus_pci_ioctl(struct file *file, unsigned int cmd,
+ #endif /* HAVE_PCI_MMAP */
+ int ret = 0;
+
++ if (!capable(CAP_COMPROMISE_KERNEL))
++ return -EPERM;
++
+ switch (cmd) {
+ case PCIIOC_CONTROLLER:
+ ret = pci_domain_nr(dev->bus);
+@@ -259,7 +265,7 @@ static int proc_bus_pci_mmap(struct file *file, struct vm_area_struct *vma)
+ struct pci_filp_private *fpriv = file->private_data;
+ int i, ret;
+
+- if (!capable(CAP_SYS_RAWIO))
++ if (!capable(CAP_SYS_RAWIO) || !capable(CAP_COMPROMISE_KERNEL))
+ return -EPERM;
+
+ /* Make sure the caller is mapping a real resource for this device */
+diff --git a/drivers/pci/syscall.c b/drivers/pci/syscall.c
+index e1c1ec5..97e785f 100644
+--- a/drivers/pci/syscall.c
++++ b/drivers/pci/syscall.c
+@@ -92,7 +92,7 @@ SYSCALL_DEFINE5(pciconfig_write, unsigned long, bus, unsigned long, dfn,
+ u32 dword;
+ int err = 0;
+
+- if (!capable(CAP_SYS_ADMIN))
++ if (!capable(CAP_SYS_ADMIN) || !capable(CAP_COMPROMISE_KERNEL))
+ return -EPERM;
+
+ dev = pci_get_bus_and_slot(bus, dfn);
+--
+1.8.1
+
+
+From c4399308a252ca147971bd6d2f1f56557f279201 Mon Sep 17 00:00:00 2001
+From: Matthew Garrett <mjg@redhat.com>
+Date: Thu, 20 Sep 2012 10:40:58 -0400
+Subject: [PATCH 10/17] x86: Lock down IO port access in secure boot
+ environments
+
+IO port access would permit users to gain access to PCI configuration
+registers, which in turn (on a lot of hardware) give access to MMIO register
+space. This would potentially permit root to trigger arbitrary DMA, so lock
+it down by default.
+
+Signed-off-by: Matthew Garrett <mjg@redhat.com>
+---
+ arch/x86/kernel/ioport.c | 4 ++--
+ drivers/char/mem.c | 3 +++
+ 2 files changed, 5 insertions(+), 2 deletions(-)
+
+diff --git a/arch/x86/kernel/ioport.c b/arch/x86/kernel/ioport.c
+index 8c96897..a2578c4 100644
+--- a/arch/x86/kernel/ioport.c
++++ b/arch/x86/kernel/ioport.c
+@@ -28,7 +28,7 @@ asmlinkage long sys_ioperm(unsigned long from, unsigned long num, int turn_on)
+
+ if ((from + num <= from) || (from + num > IO_BITMAP_BITS))
+ return -EINVAL;
+- if (turn_on && !capable(CAP_SYS_RAWIO))
++ if (turn_on && (!capable(CAP_SYS_RAWIO) || !capable(CAP_COMPROMISE_KERNEL)))
+ return -EPERM;
+
+ /*
+@@ -102,7 +102,7 @@ long sys_iopl(unsigned int level, struct pt_regs *regs)
+ return -EINVAL;
+ /* Trying to gain more privileges? */
+ if (level > old) {
+- if (!capable(CAP_SYS_RAWIO))
++ if (!capable(CAP_SYS_RAWIO) || !capable(CAP_COMPROMISE_KERNEL))
+ return -EPERM;
+ }
+ regs->flags = (regs->flags & ~X86_EFLAGS_IOPL) | (level << 12);
+diff --git a/drivers/char/mem.c b/drivers/char/mem.c
+index c6fa3bc..fc28099 100644
+--- a/drivers/char/mem.c
++++ b/drivers/char/mem.c
+@@ -597,6 +597,9 @@ static ssize_t write_port(struct file *file, const char __user *buf,
+ unsigned long i = *ppos;
+ const char __user * tmp = buf;
+
++ if (!capable(CAP_COMPROMISE_KERNEL))
++ return -EPERM;
++
+ if (!access_ok(VERIFY_READ, buf, count))
+ return -EFAULT;
+ while (count-- > 0 && i < 65536) {
+--
+1.8.1
+
+
+From b3e2bb87699c1b0aa235c772c1c5ae376b63ea49 Mon Sep 17 00:00:00 2001
+From: Matthew Garrett <mjg@redhat.com>
+Date: Thu, 20 Sep 2012 10:40:59 -0400
+Subject: [PATCH 11/17] ACPI: Limit access to custom_method
+
+It must be impossible for even root to get code executed in kernel context
+under a secure boot environment. custom_method effectively allows arbitrary
+access to system memory, so it needs to have a capability check here.
+
+Signed-off-by: Matthew Garrett <mjg@redhat.com>
+---
+ drivers/acpi/custom_method.c | 3 +++
+ 1 file changed, 3 insertions(+)
+
+diff --git a/drivers/acpi/custom_method.c b/drivers/acpi/custom_method.c
+index 5d42c24..247d58b 100644
+--- a/drivers/acpi/custom_method.c
++++ b/drivers/acpi/custom_method.c
+@@ -29,6 +29,9 @@ static ssize_t cm_write(struct file *file, const char __user * user_buf,
+ struct acpi_table_header table;
+ acpi_status status;
+
++ if (!capable(CAP_COMPROMISE_KERNEL))
++ return -EPERM;
++
+ if (!(*ppos)) {
+ /* parse the table header to get the table length */
+ if (count <= sizeof(struct acpi_table_header))
+--
+1.8.1
+
+
+From 300b9cc9e0833d66b0ea49c259c1e2f7dfe7de12 Mon Sep 17 00:00:00 2001
+From: Matthew Garrett <mjg@redhat.com>
+Date: Thu, 20 Sep 2012 10:41:00 -0400
+Subject: [PATCH 12/17] asus-wmi: Restrict debugfs interface
+
+We have no way of validating what all of the Asus WMI methods do on a
+given machine, and there's a risk that some will allow hardware state to
+be manipulated in such a way that arbitrary code can be executed in the
+kernel. Add a capability check to prevent that.
+
+Signed-off-by: Matthew Garrett <mjg@redhat.com>
+---
+ drivers/platform/x86/asus-wmi.c | 9 +++++++++
+ 1 file changed, 9 insertions(+)
+
+diff --git a/drivers/platform/x86/asus-wmi.c b/drivers/platform/x86/asus-wmi.c
+index f80ae4d..059195f 100644
+--- a/drivers/platform/x86/asus-wmi.c
++++ b/drivers/platform/x86/asus-wmi.c
+@@ -1521,6 +1521,9 @@ static int show_dsts(struct seq_file *m, void *data)
+ int err;
+ u32 retval = -1;
+
++ if (!capable(CAP_COMPROMISE_KERNEL))
++ return -EPERM;
++
+ err = asus_wmi_get_devstate(asus, asus->debug.dev_id, &retval);
+
+ if (err < 0)
+@@ -1537,6 +1540,9 @@ static int show_devs(struct seq_file *m, void *data)
+ int err;
+ u32 retval = -1;
+
++ if (!capable(CAP_COMPROMISE_KERNEL))
++ return -EPERM;
++
+ err = asus_wmi_set_devstate(asus->debug.dev_id, asus->debug.ctrl_param,
+ &retval);
+
+@@ -1561,6 +1567,9 @@ static int show_call(struct seq_file *m, void *data)
+ union acpi_object *obj;
+ acpi_status status;
+
++ if (!capable(CAP_COMPROMISE_KERNEL))
++ return -EPERM;
++
+ status = wmi_evaluate_method(ASUS_WMI_MGMT_GUID,
+ 1, asus->debug.method_id,
+ &input, &output);
+--
+1.8.1
+
+
+From 690713487cf5ac3949cf915e28a75a1270e2c2a6 Mon Sep 17 00:00:00 2001
+From: Matthew Garrett <mjg@redhat.com>
+Date: Thu, 20 Sep 2012 10:41:01 -0400
+Subject: [PATCH 13/17] Restrict /dev/mem and /dev/kmem in secure boot setups
+
+Allowing users to write to address space makes it possible for the kernel
+to be subverted. Restrict this when we need to protect the kernel.
+
+Signed-off-by: Matthew Garrett <mjg@redhat.com>
+---
+ drivers/char/mem.c | 6 ++++++
+ 1 file changed, 6 insertions(+)
+
+diff --git a/drivers/char/mem.c b/drivers/char/mem.c
+index fc28099..b5df7a8 100644
+--- a/drivers/char/mem.c
++++ b/drivers/char/mem.c
+@@ -158,6 +158,9 @@ static ssize_t write_mem(struct file *file, const char __user *buf,
+ unsigned long copied;
+ void *ptr;
+
++ if (!capable(CAP_COMPROMISE_KERNEL))
++ return -EPERM;
++
+ if (!valid_phys_addr_range(p, count))
+ return -EFAULT;
+
+@@ -530,6 +533,9 @@ static ssize_t write_kmem(struct file *file, const char __user *buf,
+ char * kbuf; /* k-addr because vwrite() takes vmlist_lock rwlock */
+ int err = 0;
+
++ if (!capable(CAP_COMPROMISE_KERNEL))
++ return -EPERM;
++
+ if (p < (unsigned long) high_memory) {
+ unsigned long to_write = min_t(unsigned long, count,
+ (unsigned long)high_memory - p);
+--
+1.8.1
+
+
+From 170cc9e113785b6f38cbd4bf5d8bbd42d844d119 Mon Sep 17 00:00:00 2001
+From: Josh Boyer <jwboyer@redhat.com>
+Date: Thu, 20 Sep 2012 10:41:04 -0400
+Subject: [PATCH 14/17] acpi: Ignore acpi_rsdp kernel parameter in a secure
+ boot environment
+
+This option allows userspace to pass the RSDP address to the kernel. This
+could potentially be used to circumvent the secure boot trust model.
+We ignore the setting if we don't have the CAP_COMPROMISE_KERNEL capability.
+
+Signed-off-by: Josh Boyer <jwboyer@redhat.com>
+---
+ drivers/acpi/osl.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/drivers/acpi/osl.c b/drivers/acpi/osl.c
+index bd22f86..88251d2 100644
+--- a/drivers/acpi/osl.c
++++ b/drivers/acpi/osl.c
+@@ -246,7 +246,7 @@ early_param("acpi_rsdp", setup_acpi_rsdp);
+ acpi_physical_address __init acpi_os_get_root_pointer(void)
+ {
+ #ifdef CONFIG_KEXEC
+- if (acpi_rsdp)
++ if (acpi_rsdp && capable(CAP_COMPROMISE_KERNEL))
+ return acpi_rsdp;
+ #endif
+
+--
+1.8.1
+
+
+From eb021ca148e35633480ece4b472807a621ca9a5f Mon Sep 17 00:00:00 2001
+From: Matthew Garrett <mjg@redhat.com>
+Date: Tue, 4 Sep 2012 11:55:13 -0400
+Subject: [PATCH 15/17] kexec: Disable in a secure boot environment
+
+kexec could be used as a vector for a malicious user to use a signed kernel
+to circumvent the secure boot trust model. In the long run we'll want to
+support signed kexec payloads, but for the moment we should just disable
+loading entirely in that situation.
+Signed-off-by: Matthew Garrett <mjg@redhat.com>
+---
+ kernel/kexec.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
-From 7d5629a2000d9dc92da91d2f1258af748e89cfd7 Mon Sep 17 00:00:00 2001
+diff --git a/kernel/kexec.c b/kernel/kexec.c
+index 5e4bd78..dd464e0 100644
+--- a/kernel/kexec.c
++++ b/kernel/kexec.c
+@@ -943,7 +943,7 @@ SYSCALL_DEFINE4(kexec_load, unsigned long, entry, unsigned long, nr_segments,
+ int result;
+
+ /* We only trust the superuser with rebooting the system. */
+- if (!capable(CAP_SYS_BOOT))
++ if (!capable(CAP_SYS_BOOT) || !capable(CAP_COMPROMISE_KERNEL))
+ return -EPERM;
+
+ /*
+--
+1.8.1
+
+
+From f170b22efeffede02664836a24604febd85ca061 Mon Sep 17 00:00:00 2001
+From: Josh Boyer <jwboyer@redhat.com>
+Date: Fri, 5 Oct 2012 10:12:48 -0400
+Subject: [PATCH 16/17] MODSIGN: Always enforce module signing in a Secure Boot
+ environment
+
+If a machine is booted into a Secure Boot environment, we need to
+protect the trust model. This requires that all modules be signed
+with a key that is in the kernel's _modsign keyring. The checks for
+this are already done via the 'sig_enforce' module parameter. Make
+this visible within the kernel and force it to be true.
+
+Signed-off-by: Josh Boyer <jwboyer@redhat.com>
+---
+ kernel/cred.c | 8 ++++++++
+ kernel/module.c | 4 ++--
+ 2 files changed, 10 insertions(+), 2 deletions(-)
+
+diff --git a/kernel/cred.c b/kernel/cred.c
+index c3f4e3e..c5554e0 100644
+--- a/kernel/cred.c
++++ b/kernel/cred.c
+@@ -565,11 +565,19 @@ void __init cred_init(void)
+ 0, SLAB_HWCACHE_ALIGN|SLAB_PANIC, NULL);
+ }
+
++#ifdef CONFIG_MODULE_SIG
++extern bool sig_enforce;
++#endif
++
+ void __init secureboot_enable()
+ {
+ pr_info("Secure boot enabled\n");
+ cap_lower((&init_cred)->cap_bset, CAP_COMPROMISE_KERNEL);
+ cap_lower((&init_cred)->cap_permitted, CAP_COMPROMISE_KERNEL);
++#ifdef CONFIG_MODULE_SIG
++ /* Enable module signature enforcing */
++ sig_enforce = true;
++#endif
+ }
+
+ /* Dummy Secure Boot enable option to fake out UEFI SB=1 */
+diff --git a/kernel/module.c b/kernel/module.c
+index eab0827..93a16dc 100644
+--- a/kernel/module.c
++++ b/kernel/module.c
+@@ -109,9 +109,9 @@ struct list_head *kdb_modules = &modules; /* kdb needs the list of modules */
+
+ #ifdef CONFIG_MODULE_SIG
+ #ifdef CONFIG_MODULE_SIG_FORCE
+-static bool sig_enforce = true;
++bool sig_enforce = true;
+ #else
+-static bool sig_enforce = false;
++bool sig_enforce = false;
+
+ static int param_set_bool_enable_only(const char *val,
+ const struct kernel_param *kp)
+--
+1.8.1
+
+
+From c44db6a096f11bd19182cb52c70fbd2f3de3dc6a Mon Sep 17 00:00:00 2001
From: Josh Boyer <jwboyer@redhat.com>
Date: Fri, 26 Oct 2012 14:02:09 -0400
-Subject: [PATCH 19/20] hibernate: Disable in a Secure Boot environment
+Subject: [PATCH 17/17] hibernate: Disable in a Secure Boot environment
There is currently no way to verify the resume image when returning
from hibernate. This might compromise the secure boot trust model,
@@ -1330,16 +1228,24 @@ a Secure Boot environment.
Signed-off-by: Josh Boyer <jwboyer@redhat.com>
---
- kernel/power/hibernate.c | 14 +++++++++++++-
- kernel/power/main.c | 4 +++-
+ kernel/power/hibernate.c | 15 ++++++++++++++-
+ kernel/power/main.c | 7 ++++++-
kernel/power/user.c | 3 +++
- 3 files changed, 19 insertions(+), 2 deletions(-)
+ 3 files changed, 23 insertions(+), 2 deletions(-)
diff --git a/kernel/power/hibernate.c b/kernel/power/hibernate.c
-index b26f5f1..f04343b 100644
+index b26f5f1..7f63cb4 100644
--- a/kernel/power/hibernate.c
+++ b/kernel/power/hibernate.c
-@@ -632,6 +632,10 @@ int hibernate(void)
+@@ -28,6 +28,7 @@
+ #include <linux/syscore_ops.h>
+ #include <linux/ctype.h>
+ #include <linux/genhd.h>
++#include <linux/efi.h>
+
+ #include "power.h"
+
+@@ -632,6 +633,10 @@ int hibernate(void)
{
int error;
@@ -1350,7 +1256,7 @@ index b26f5f1..f04343b 100644
lock_system_sleep();
/* The snapshot device should not be opened while we're running */
if (!atomic_add_unless(&snapshot_device_available, -1, 0)) {
-@@ -723,7 +727,7 @@ static int software_resume(void)
+@@ -723,7 +728,7 @@ static int software_resume(void)
/*
* If the user said "noresume".. bail out early.
*/
@@ -1359,11 +1265,11 @@ index b26f5f1..f04343b 100644
return 0;
/*
-@@ -889,6 +893,11 @@ static ssize_t disk_show(struct kobject *kobj, struct kobj_attribute *attr,
+@@ -889,6 +894,11 @@ static ssize_t disk_show(struct kobject *kobj, struct kobj_attribute *attr,
int i;
char *start = buf;
-+ if (!capable(CAP_COMPROMISE_KERNEL)) {
++ if (efi_enabled(EFI_SECURE_BOOT)) {
+ buf += sprintf(buf, "[%s]\n", "disabled");
+ return buf-start;
+ }
@@ -1371,7 +1277,7 @@ index b26f5f1..f04343b 100644
for (i = HIBERNATION_FIRST; i <= HIBERNATION_MAX; i++) {
if (!hibernation_modes[i])
continue;
-@@ -923,6 +932,9 @@ static ssize_t disk_store(struct kobject *kobj, struct kobj_attribute *attr,
+@@ -923,6 +933,9 @@ static ssize_t disk_store(struct kobject *kobj, struct kobj_attribute *attr,
char *p;
int mode = HIBERNATION_INVALID;
@@ -1382,16 +1288,26 @@ index b26f5f1..f04343b 100644
len = p ? p - buf : n;
diff --git a/kernel/power/main.c b/kernel/power/main.c
-index f458238..72580c1 100644
+index 1c16f91..4f915fc 100644
--- a/kernel/power/main.c
+++ b/kernel/power/main.c
-@@ -301,7 +301,9 @@ static ssize_t state_show(struct kobject *kobj, struct kobj_attribute *attr,
+@@ -15,6 +15,7 @@
+ #include <linux/workqueue.h>
+ #include <linux/debugfs.h>
+ #include <linux/seq_file.h>
++#include <linux/efi.h>
+
+ #include "power.h"
+
+@@ -301,7 +302,11 @@ static ssize_t state_show(struct kobject *kobj, struct kobj_attribute *attr,
}
#endif
#ifdef CONFIG_HIBERNATION
- s += sprintf(s, "%s\n", "disk");
-+ if (capable(CAP_COMPROMISE_KERNEL)) {
++ if (!efi_enabled(EFI_SECURE_BOOT)) {
+ s += sprintf(s, "%s\n", "disk");
++ } else {
++ s += sprintf(s, "\n");
+ }
#else
if (s != buf)
@@ -1411,42 +1327,5 @@ index 4ed81e7..b11a0f4 100644
if (!atomic_add_unless(&snapshot_device_available, -1, 0)) {
--
-1.8.0.1
-
-
-From 81adc779dba0f45f10b5ff307bd55832305f1112 Mon Sep 17 00:00:00 2001
-From: Josh Boyer <jwboyer@redhat.com>
-Date: Wed, 12 Dec 2012 11:48:49 -0500
-Subject: [PATCH 20/20] Don't soft lockup on bad EFI signature lists
-
-If a signature list is read from an UEFI variable and that contains bogus
-data, we can go into an infinite loop in efi_parse_signature_list. Notably,
-if one of the entries in the list has a signature_size that is larger than
-the actual signature size, it will fail the elsize < esize test. Simply
-continuing in the loop without modifying the data or size variables just
-leads to the same list entry being parsed repeatedly.
-
-Since the data is bogus, but we can't tell which value is actually
-incorrect, we need to stop parsing the list. Just return -EBADMSG instead.
-
-Signed-off-by: Josh Boyer <jwboyer@redhat.com>
----
- crypto/asymmetric_keys/efi_parser.c | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/crypto/asymmetric_keys/efi_parser.c b/crypto/asymmetric_keys/efi_parser.c
-index 59b859a..a0b8a3a 100644
---- a/crypto/asymmetric_keys/efi_parser.c
-+++ b/crypto/asymmetric_keys/efi_parser.c
-@@ -61,7 +61,7 @@ int __init parse_efi_signature_list(const void *data, size_t size, struct key *k
- elsize < esize ||
- elsize % esize != 0) {
- pr_devel("- bad size combo @%x\n", offs);
-- continue;
-+ return -EBADMSG;
- }
-
- if (efi_guidcmp(list.signature_type, efi_cert_x509_guid) != 0) {
---
-1.8.0.1
+1.8.1
diff --git a/freed-ora/current/master/linux-2.6-serial-460800.patch b/freed-ora/current/master/serial-460800.patch
index 0e68378e7..0e68378e7 100644
--- a/freed-ora/current/master/linux-2.6-serial-460800.patch
+++ b/freed-ora/current/master/serial-460800.patch
diff --git a/freed-ora/current/master/linux-2.6-silence-acpi-blacklist.patch b/freed-ora/current/master/silence-acpi-blacklist.patch
index c5997bb6e..c5997bb6e 100644
--- a/freed-ora/current/master/linux-2.6-silence-acpi-blacklist.patch
+++ b/freed-ora/current/master/silence-acpi-blacklist.patch
diff --git a/freed-ora/current/master/silence-empty-ipi-mask-warning.patch b/freed-ora/current/master/silence-empty-ipi-mask-warning.patch
new file mode 100644
index 000000000..65a637c06
--- /dev/null
+++ b/freed-ora/current/master/silence-empty-ipi-mask-warning.patch
@@ -0,0 +1,11 @@
+--- linux-3.6.noarch/arch/x86/kernel/apic/ipi.c~ 2013-01-23 10:48:14.716069615 -0500
++++ linux-3.6.noarch/arch/x86/kernel/apic/ipi.c 2013-01-23 10:48:26.217046545 -0500
+@@ -106,7 +106,7 @@ void default_send_IPI_mask_logical(const
+ unsigned long mask = cpumask_bits(cpumask)[0];
+ unsigned long flags;
+
+- if (WARN_ONCE(!mask, "empty IPI mask"))
++ if (!mask)
+ return;
+
+ local_irq_save(flags);
diff --git a/freed-ora/current/master/linux-2.6-silence-fbcon-logo.patch b/freed-ora/current/master/silence-fbcon-logo.patch
index 45ab73331..45ab73331 100644
--- a/freed-ora/current/master/linux-2.6-silence-fbcon-logo.patch
+++ b/freed-ora/current/master/silence-fbcon-logo.patch
diff --git a/freed-ora/current/master/linux-2.6-silence-noise.patch b/freed-ora/current/master/silence-noise.patch
index 1e4d7c57f..1e4d7c57f 100644
--- a/freed-ora/current/master/linux-2.6-silence-noise.patch
+++ b/freed-ora/current/master/silence-noise.patch
diff --git a/freed-ora/current/master/sources b/freed-ora/current/master/sources
index f2f1cee9e..b6141a416 100644
--- a/freed-ora/current/master/sources
+++ b/freed-ora/current/master/sources
@@ -1 +1,3 @@
06bf9601d859531e7378eb43d4ca7dd3 linux-libre-3.7-gnu.tar.xz
+f00c85f5db6bcc0ef47d399465fd464f patch-3.7-gnu-3.8-rc6-gnu.xz
+47c13c925f34642b05ed4524d62257ec patch-3.8-rc6-git2.xz
diff --git a/freed-ora/current/master/linux-2.6-upstream-reverts.patch b/freed-ora/current/master/upstream-reverts.patch
index 607602cfc..607602cfc 100644
--- a/freed-ora/current/master/linux-2.6-upstream-reverts.patch
+++ b/freed-ora/current/master/upstream-reverts.patch
diff --git a/freed-ora/current/master/linux-2.6-v4l-dvb-experimental.patch b/freed-ora/current/master/v4l-dvb-experimental.patch
index e69de29bb..e69de29bb 100644
--- a/freed-ora/current/master/linux-2.6-v4l-dvb-experimental.patch
+++ b/freed-ora/current/master/v4l-dvb-experimental.patch
diff --git a/freed-ora/current/master/linux-2.6-v4l-dvb-fixes.patch b/freed-ora/current/master/v4l-dvb-fixes.patch
index e69de29bb..e69de29bb 100644
--- a/freed-ora/current/master/linux-2.6-v4l-dvb-fixes.patch
+++ b/freed-ora/current/master/v4l-dvb-fixes.patch
diff --git a/freed-ora/current/master/linux-2.6-v4l-dvb-update.patch b/freed-ora/current/master/v4l-dvb-update.patch
index e69de29bb..e69de29bb 100644
--- a/freed-ora/current/master/linux-2.6-v4l-dvb-update.patch
+++ b/freed-ora/current/master/v4l-dvb-update.patch
OpenPOWER on IntegriCloud