summaryrefslogtreecommitdiffstats
path: root/freed-ora/current
diff options
context:
space:
mode:
authorAlexandre Oliva <lxoliva@fsfla.org>2011-02-25 05:23:55 +0000
committerAlexandre Oliva <lxoliva@fsfla.org>2011-02-25 05:23:55 +0000
commit40f3e7199ec41c44e0841bc779515b497259de1c (patch)
tree54e953ad9c7a71cdcafce7b48142d3c31a919c63 /freed-ora/current
parent11452b3dda7c03b5fc9b92abcf19e3ee1151785e (diff)
downloadlinux-libre-raptor-40f3e7199ec41c44e0841bc779515b497259de1c.tar.gz
linux-libre-raptor-40f3e7199ec41c44e0841bc779515b497259de1c.zip
2.6.38-0.rc6.git2.1.fc16
Diffstat (limited to 'freed-ora/current')
-rw-r--r--freed-ora/current/master/0001-use-__devexit-not-__exit-in-n2_unregister_algs-fixes.patch26
-rw-r--r--freed-ora/current/master/Makefile4
-rw-r--r--freed-ora/current/master/acpi-update-battery-information-on-notification-0x81.patch94
-rw-r--r--freed-ora/current/master/applesmc_update.patch2293
-rw-r--r--freed-ora/current/master/ath5k-fix-fast-channel-change.patch213
-rw-r--r--freed-ora/current/master/config-arm6
-rw-r--r--freed-ora/current/master/config-debug2
-rw-r--r--freed-ora/current/master/config-generic100
-rw-r--r--freed-ora/current/master/config-ia64-generic1
-rw-r--r--freed-ora/current/master/config-local2
-rw-r--r--freed-ora/current/master/config-nodebug2
-rw-r--r--freed-ora/current/master/config-powerpc-generic2
-rw-r--r--freed-ora/current/master/config-powerpc642
-rw-r--r--freed-ora/current/master/config-sparc64-generic4
-rw-r--r--freed-ora/current/master/config-x86-generic22
-rw-r--r--freed-ora/current/master/config-x86_64-generic18
-rwxr-xr-xfreed-ora/current/master/deblob-2.6.378
-rwxr-xr-xfreed-ora/current/master/deblob-2.6.382398
-rwxr-xr-xfreed-ora/current/master/deblob-check196
-rw-r--r--freed-ora/current/master/debug-tty-print-dev-name.patch17
-rw-r--r--freed-ora/current/master/drm-intel-big-hammer.patch12
-rw-r--r--freed-ora/current/master/drm-nouveau-updates.patch1334
-rw-r--r--freed-ora/current/master/drm_i915-check-eDP-encoder-correctly-when-setting-modes.patch33
-rw-r--r--freed-ora/current/master/fs-call-security_d_instantiate-in-d_obtain_alias.patch9
-rw-r--r--freed-ora/current/master/kernel.spec314
-rw-r--r--freed-ora/current/master/linux-2.6-32bit-mmap-exec-randomization.patch2
-rw-r--r--freed-ora/current/master/linux-2.6-debug-nmi-timeout.patch45
-rw-r--r--freed-ora/current/master/linux-2.6-ehci-check-port-status.patch54
-rw-r--r--freed-ora/current/master/linux-2.6-i386-nx-emulation.patch2
-rw-r--r--freed-ora/current/master/linux-2.6-serial-460800.patch4
-rw-r--r--freed-ora/current/master/linux-2.6-silence-noise.patch32
-rw-r--r--freed-ora/current/master/linux-2.6-tracehook.patch18
-rw-r--r--freed-ora/current/master/linux-2.6-utrace-ptrace.patch165
-rw-r--r--freed-ora/current/master/linux-2.6-utrace.patch54
-rw-r--r--freed-ora/current/master/linux-next-macbook-air-input.patch185
-rw-r--r--freed-ora/current/master/mm-page-allocator-adjust-the-per-cpu-counter-threshold-when-memory-is-low.patch389
-rw-r--r--freed-ora/current/master/mm-vmstat-use-a-single-setter-function-and-callback-for-adjusting-percpu-thresholds.patch167
-rw-r--r--freed-ora/current/master/net-AF_PACKET-vmalloc.patch254
-rw-r--r--freed-ora/current/master/patch-libre-2.6.38-rc6.bz2.sign7
-rw-r--r--freed-ora/current/master/patch-libre-2.6.38-rc6.xdeltabin0 -> 37155 bytes
-rw-r--r--freed-ora/current/master/patch-libre-2.6.38-rc6.xdelta.sign7
-rw-r--r--freed-ora/current/master/pci-disable-aspm-if-bios-asks-us-to.patch144
-rw-r--r--freed-ora/current/master/perf-gcc460-build-fixes.patch227
-rw-r--r--freed-ora/current/master/runtime_pm_fixups.patch70
-rwxr-xr-xfreed-ora/current/master/scripts/pull-upstreams.sh2
-rw-r--r--freed-ora/current/master/sources2
-rw-r--r--freed-ora/current/master/tpm-fix-stall-on-boot.patch24
47 files changed, 5031 insertions, 3935 deletions
diff --git a/freed-ora/current/master/0001-use-__devexit-not-__exit-in-n2_unregister_algs-fixes.patch b/freed-ora/current/master/0001-use-__devexit-not-__exit-in-n2_unregister_algs-fixes.patch
deleted file mode 100644
index a5c4c12dd..000000000
--- a/freed-ora/current/master/0001-use-__devexit-not-__exit-in-n2_unregister_algs-fixes.patch
+++ /dev/null
@@ -1,26 +0,0 @@
-From 56a2432f60ea0a0c85a93b0951ae8507e5b85270 Mon Sep 17 00:00:00 2001
-From: dennis <dennis@daedalus.ausil.us>
-Date: Wed, 5 Jan 2011 19:43:25 +0000
-Subject: [PATCH] use __devexit not __exit in n2_unregister_algs fixes build failure on fedora
-
-thanks to kylem for helping with debugging
----
- drivers/crypto/n2_core.c | 2 +-
- 1 files changed, 1 insertions(+), 1 deletions(-)
-
-diff --git a/drivers/crypto/n2_core.c b/drivers/crypto/n2_core.c
-index 88ee015..3372491 100644
---- a/drivers/crypto/n2_core.c
-+++ b/drivers/crypto/n2_core.c
-@@ -1542,7 +1542,7 @@ out:
- return err;
- }
-
--static void __exit n2_unregister_algs(void)
-+static void __devexit n2_unregister_algs(void)
- {
- mutex_lock(&spu_lock);
- if (!--algs_registered)
---
-1.6.6.1
-
diff --git a/freed-ora/current/master/Makefile b/freed-ora/current/master/Makefile
index ca62cce42..705670ff1 100644
--- a/freed-ora/current/master/Makefile
+++ b/freed-ora/current/master/Makefile
@@ -94,6 +94,8 @@ debug:
@perl -pi -e 's/# CONFIG_DEBUG_OBJECTS_PERCPU_COUNTER is not set/CONFIG_DEBUG_OBJECTS_PERCPU_COUNTER=y/' config-nodebug
@perl -pi -e 's/# CONFIG_TEST_LIST_SORT is not set/CONFIG_TEST_LIST_SORT=y/' config-nodebug
+ @perl -pi -e 's/# CONFIG_DEBUG_SET_MODULE_RONX is not set/CONFIG_DEBUG_SET_MODULE_RONX=y/' config-nodebug
+
@# just in case we're going from extremedebug -> debug
@perl -pi -e 's/CONFIG_DEBUG_PAGEALLOC=y/# CONFIG_DEBUG_PAGEALLOC is not set/' config-nodebug
@@ -171,6 +173,8 @@ release:
@perl -pi -e 's/CONFIG_DEBUG_OBJECTS_PERCPU_COUNTER=y/# CONFIG_DEBUG_OBJECTS_PERCPU_COUNTER is not set/' config-nodebug
@perl -pi -e 's/CONFIG_TEST_LIST_SORT=y/# CONFIG_TEST_LIST_SORT is not set/' config-nodebug
+ @perl -pi -e 's/CONFIG_DEBUG_SET_MODULE_RONX=y/# CONFIG_DEBUG_SET_MODULE_RONX is not set/' config-nodebug
+
@perl -pi -e 's/CONFIG_DEBUG_PAGEALLOC=y/# CONFIG_DEBUG_PAGEALLOC is not set/' config-debug
@perl -pi -e 's/CONFIG_DEBUG_PAGEALLOC=y/# CONFIG_DEBUG_PAGEALLOC is not set/' config-nodebug
diff --git a/freed-ora/current/master/acpi-update-battery-information-on-notification-0x81.patch b/freed-ora/current/master/acpi-update-battery-information-on-notification-0x81.patch
deleted file mode 100644
index 7f2c645fc..000000000
--- a/freed-ora/current/master/acpi-update-battery-information-on-notification-0x81.patch
+++ /dev/null
@@ -1,94 +0,0 @@
-From kyle@infradead.org Wed Sep 22 18:35:38 2010
-From: Matthew Garrett <mjg@redhat.com>
-To: linux-acpi@vger.kernel.org
-Cc: linux-kernel@vger.kernel.org, Matthew Garrett <mjg@redhat.com>
-Subject: [PATCH] acpi: Update battery information on notification 0x81
-Date: Mon, 16 Aug 2010 16:32:19 -0400
-
-A notification event 0x81 from an ACPI battery device requires us to
-re-read the battery information structure. Do so, and if the battery's
-reporting units have changed (as is the case on some Thinkpads) destroy
-and recreate the battery in order to populate the fields correctly.
-
-Signed-off-by: Matthew Garrett <mjg@redhat.com>
----
-
- drivers/acpi/battery.c | 21 ++++++++++++++++-----
- 1 files changed, 16 insertions(+), 5 deletions(-)
-
-diff --git a/drivers/acpi/battery.c b/drivers/acpi/battery.c
-index 95649d3..161e43a 100644
---- a/drivers/acpi/battery.c
-+++ b/drivers/acpi/battery.c
-@@ -152,6 +152,7 @@ static int acpi_battery_technology(struct acpi_battery *battery)
- return POWER_SUPPLY_TECHNOLOGY_UNKNOWN;
- }
-
-+static int acpi_battery_update(struct acpi_battery *battery, bool get_info);
- static int acpi_battery_get_state(struct acpi_battery *battery);
-
- static int acpi_battery_is_charged(struct acpi_battery *battery)
-@@ -605,9 +606,11 @@ static void acpi_battery_quirks2(struct acpi_battery *battery)
- }
- }
-
--static int acpi_battery_update(struct acpi_battery *battery)
-+static int acpi_battery_update(struct acpi_battery *battery, bool get_info)
- {
- int result, old_present = acpi_battery_present(battery);
-+ int old_power_unit = battery->power_unit;
-+
- result = acpi_battery_get_status(battery);
- if (result)
- return result;
-@@ -626,6 +629,14 @@ static int acpi_battery_update(struct acpi_battery *battery)
- }
- if (!battery->bat.dev)
- sysfs_add_battery(battery);
-+ if (get_info) {
-+ acpi_battery_get_info(battery);
-+ if (old_power_unit != battery->power_unit) {
-+ /* The battery has changed its reporting units */
-+ sysfs_remove_battery(battery);
-+ sysfs_add_battery(battery);
-+ }
-+ }
- result = acpi_battery_get_state(battery);
- acpi_battery_quirks2(battery);
- return result;
-@@ -803,7 +814,7 @@ static print_func acpi_print_funcs[ACPI_BATTERY_NUMFILES] = {
- static int acpi_battery_read(int fid, struct seq_file *seq)
- {
- struct acpi_battery *battery = seq->private;
-- int result = acpi_battery_update(battery);
-+ int result = acpi_battery_update(battery, false);
- return acpi_print_funcs[fid](seq, result);
- }
-
-@@ -914,7 +925,7 @@ static void acpi_battery_notify(struct acpi_device *device, u32 event)
- if (!battery)
- return;
- old = battery->bat.dev;
-- acpi_battery_update(battery);
-+ acpi_battery_update(battery, (event == ACPI_BATTERY_NOTIFY_INFO));
- acpi_bus_generate_proc_event(device, event,
- acpi_battery_present(battery));
- acpi_bus_generate_netlink_event(device->pnp.device_class,
-@@ -943,7 +954,7 @@ static int acpi_battery_add(struct acpi_device *device)
- if (ACPI_SUCCESS(acpi_get_handle(battery->device->handle,
- "_BIX", &handle)))
- set_bit(ACPI_BATTERY_XINFO_PRESENT, &battery->flags);
-- acpi_battery_update(battery);
-+ acpi_battery_update(battery, false);
- #ifdef CONFIG_ACPI_PROCFS_POWER
- result = acpi_battery_add_fs(device);
- #endif
-@@ -984,7 +995,7 @@ static int acpi_battery_resume(struct acpi_device *device)
- return -EINVAL;
- battery = acpi_driver_data(device);
- battery->update_time = 0;
-- acpi_battery_update(battery);
-+ acpi_battery_update(battery, true);
- return 0;
- }
-
diff --git a/freed-ora/current/master/applesmc_update.patch b/freed-ora/current/master/applesmc_update.patch
deleted file mode 100644
index d42146871..000000000
--- a/freed-ora/current/master/applesmc_update.patch
+++ /dev/null
@@ -1,2293 +0,0 @@
-Update the applesmc driver. Should work on all hardware. Upstream in .38?
-
-diff --git a/drivers/hwmon/applesmc.c b/drivers/hwmon/applesmc.c
-index b6598aa..0d7e9ae 100644
---- a/drivers/hwmon/applesmc.c
-+++ b/drivers/hwmon/applesmc.c
-@@ -4,6 +4,7 @@
- * computers.
- *
- * Copyright (C) 2007 Nicolas Boichat <nicolas@boichat.ch>
-+ * Copyright (C) 2010 Henrik Rydberg <rydberg@euromail.se>
- *
- * Based on hdaps.c driver:
- * Copyright (C) 2005 Robert Love <rml@novell.com>
-@@ -26,10 +27,12 @@
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
- */
-
-+#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
-+
- #include <linux/delay.h>
--#include <linux/platform_device.h>
- #include <linux/input-polldev.h>
- #include <linux/kernel.h>
-+#include <linux/slab.h>
- #include <linux/module.h>
- #include <linux/timer.h>
- #include <linux/dmi.h>
-@@ -39,16 +42,23 @@
- #include <linux/leds.h>
- #include <linux/hwmon.h>
- #include <linux/workqueue.h>
-+#include <linux/slab.h>
-+#include <linux/pnp.h>
-+#include <linux/irq.h>
-+#include <linux/interrupt.h>
-
- /* data port used by Apple SMC */
--#define APPLESMC_DATA_PORT 0x300
-+#define APPLESMC_DATA_PORT 0x0
- /* command/status port used by Apple SMC */
--#define APPLESMC_CMD_PORT 0x304
-+#define APPLESMC_CMD_PORT 0x4
-+/* interrupt status port */
-+#define APPLESMC_ISR_PORT 0x1f
-
- #define APPLESMC_NR_PORTS 32 /* 0x300-0x31f */
-
- #define APPLESMC_MAX_DATA_LENGTH 32
-
-+/* wait up to 32 ms for a status change. */
- #define APPLESMC_MIN_WAIT 0x0040
- #define APPLESMC_MAX_WAIT 0x8000
-
-@@ -71,106 +81,19 @@
- #define MOTION_SENSOR_Z_KEY "MO_Z" /* r-o sp78 (2 bytes) */
- #define MOTION_SENSOR_KEY "MOCN" /* r/w ui16 */
-
-+#define NOTIFICATION_KEY "NTOK"
-+
- #define FANS_COUNT "FNum" /* r-o ui8 */
- #define FANS_MANUAL "FS! " /* r-w ui16 */
--#define FAN_ACTUAL_SPEED "F0Ac" /* r-o fpe2 (2 bytes) */
--#define FAN_MIN_SPEED "F0Mn" /* r-o fpe2 (2 bytes) */
--#define FAN_MAX_SPEED "F0Mx" /* r-o fpe2 (2 bytes) */
--#define FAN_SAFE_SPEED "F0Sf" /* r-o fpe2 (2 bytes) */
--#define FAN_TARGET_SPEED "F0Tg" /* r-w fpe2 (2 bytes) */
--#define FAN_POSITION "F0ID" /* r-o char[16] */
--
--/*
-- * Temperature sensors keys (sp78 - 2 bytes).
-- */
--static const char *temperature_sensors_sets[][41] = {
--/* Set 0: Macbook Pro */
-- { "TA0P", "TB0T", "TC0D", "TC0P", "TG0H", "TG0P", "TG0T", "Th0H",
-- "Th1H", "Tm0P", "Ts0P", "Ts1P", NULL },
--/* Set 1: Macbook2 set */
-- { "TB0T", "TC0D", "TC0P", "TM0P", "TN0P", "TN1P", "TTF0", "Th0H",
-- "Th0S", "Th1H", NULL },
--/* Set 2: Macbook set */
-- { "TB0T", "TC0D", "TC0P", "TM0P", "TN0P", "TN1P", "Th0H", "Th0S",
-- "Th1H", "Ts0P", NULL },
--/* Set 3: Macmini set */
-- { "TC0D", "TC0P", NULL },
--/* Set 4: Mac Pro (2 x Quad-Core) */
-- { "TA0P", "TCAG", "TCAH", "TCBG", "TCBH", "TC0C", "TC0D", "TC0P",
-- "TC1C", "TC1D", "TC2C", "TC2D", "TC3C", "TC3D", "THTG", "TH0P",
-- "TH1P", "TH2P", "TH3P", "TMAP", "TMAS", "TMBS", "TM0P", "TM0S",
-- "TM1P", "TM1S", "TM2P", "TM2S", "TM3S", "TM8P", "TM8S", "TM9P",
-- "TM9S", "TN0H", "TS0C", NULL },
--/* Set 5: iMac */
-- { "TC0D", "TA0P", "TG0P", "TG0D", "TG0H", "TH0P", "Tm0P", "TO0P",
-- "Tp0C", NULL },
--/* Set 6: Macbook3 set */
-- { "TB0T", "TC0D", "TC0P", "TM0P", "TN0P", "TTF0", "TW0P", "Th0H",
-- "Th0S", "Th1H", NULL },
--/* Set 7: Macbook Air */
-- { "TB0T", "TB1S", "TB1T", "TB2S", "TB2T", "TC0D", "TC0P", "TCFP",
-- "TTF0", "TW0P", "Th0H", "Tp0P", "TpFP", "Ts0P", "Ts0S", NULL },
--/* Set 8: Macbook Pro 4,1 (Penryn) */
-- { "TB0T", "TC0D", "TC0P", "TG0D", "TG0H", "TTF0", "TW0P", "Th0H",
-- "Th1H", "Th2H", "Tm0P", "Ts0P", NULL },
--/* Set 9: Macbook Pro 3,1 (Santa Rosa) */
-- { "TALP", "TB0T", "TC0D", "TC0P", "TG0D", "TG0H", "TTF0", "TW0P",
-- "Th0H", "Th1H", "Th2H", "Tm0P", "Ts0P", NULL },
--/* Set 10: iMac 5,1 */
-- { "TA0P", "TC0D", "TC0P", "TG0D", "TH0P", "TO0P", "Tm0P", NULL },
--/* Set 11: Macbook 5,1 */
-- { "TB0T", "TB1T", "TB2T", "TB3T", "TC0D", "TC0P", "TN0D", "TN0P",
-- "TTF0", "Th0H", "Th1H", "ThFH", "Ts0P", "Ts0S", NULL },
--/* Set 12: Macbook Pro 5,1 */
-- { "TB0T", "TB1T", "TB2T", "TB3T", "TC0D", "TC0F", "TC0P", "TG0D",
-- "TG0F", "TG0H", "TG0P", "TG0T", "TG1H", "TN0D", "TN0P", "TTF0",
-- "Th2H", "Tm0P", "Ts0P", "Ts0S", NULL },
--/* Set 13: iMac 8,1 */
-- { "TA0P", "TC0D", "TC0H", "TC0P", "TG0D", "TG0H", "TG0P", "TH0P",
-- "TL0P", "TO0P", "TW0P", "Tm0P", "Tp0P", NULL },
--/* Set 14: iMac 6,1 */
-- { "TA0P", "TC0D", "TC0H", "TC0P", "TG0D", "TG0H", "TG0P", "TH0P",
-- "TO0P", "Tp0P", NULL },
--/* Set 15: MacBook Air 2,1 */
-- { "TB0T", "TB1S", "TB1T", "TB2S", "TB2T", "TC0D", "TN0D", "TTF0",
-- "TV0P", "TVFP", "TW0P", "Th0P", "Tp0P", "Tp1P", "TpFP", "Ts0P",
-- "Ts0S", NULL },
--/* Set 16: Mac Pro 3,1 (2 x Quad-Core) */
-- { "TA0P", "TCAG", "TCAH", "TCBG", "TCBH", "TC0C", "TC0D", "TC0P",
-- "TC1C", "TC1D", "TC2C", "TC2D", "TC3C", "TC3D", "TH0P", "TH1P",
-- "TH2P", "TH3P", "TMAP", "TMAS", "TMBS", "TM0P", "TM0S", "TM1P",
-- "TM1S", "TM2P", "TM2S", "TM3S", "TM8P", "TM8S", "TM9P", "TM9S",
-- "TN0C", "TN0D", "TN0H", "TS0C", "Tp0C", "Tp1C", "Tv0S", "Tv1S",
-- NULL },
--/* Set 17: iMac 9,1 */
-- { "TA0P", "TC0D", "TC0H", "TC0P", "TG0D", "TG0H", "TH0P", "TL0P",
-- "TN0D", "TN0H", "TN0P", "TO0P", "Tm0P", "Tp0P", NULL },
--/* Set 18: MacBook Pro 2,2 */
-- { "TB0T", "TC0D", "TC0P", "TG0H", "TG0P", "TG0T", "TM0P", "TTF0",
-- "Th0H", "Th1H", "Tm0P", "Ts0P", NULL },
--/* Set 19: Macbook Pro 5,3 */
-- { "TB0T", "TB1T", "TB2T", "TB3T", "TC0D", "TC0F", "TC0P", "TG0D",
-- "TG0F", "TG0H", "TG0P", "TG0T", "TN0D", "TN0P", "TTF0", "Th2H",
-- "Tm0P", "Ts0P", "Ts0S", NULL },
--/* Set 20: MacBook Pro 5,4 */
-- { "TB0T", "TB1T", "TB2T", "TB3T", "TC0D", "TC0F", "TC0P", "TN0D",
-- "TN0P", "TTF0", "Th2H", "Ts0P", "Ts0S", NULL },
--/* Set 21: MacBook Pro 6,2 */
-- { "TB0T", "TB1T", "TB2T", "TC0C", "TC0D", "TC0P", "TC1C", "TG0D",
-- "TG0P", "TG0T", "TMCD", "TP0P", "TPCD", "Th1H", "Th2H", "Tm0P",
-- "Ts0P", "Ts0S", NULL },
--/* Set 22: MacBook Pro 7,1 */
-- { "TB0T", "TB1T", "TB2T", "TC0D", "TC0P", "TN0D", "TN0P", "TN0S",
-- "TN1D", "TN1F", "TN1G", "TN1S", "Th1H", "Ts0P", "Ts0S", NULL },
--};
-+#define FAN_ID_FMT "F%dID" /* r-o char[16] */
-
- /* List of keys used to read/write fan speeds */
--static const char* fan_speed_keys[] = {
-- FAN_ACTUAL_SPEED,
-- FAN_MIN_SPEED,
-- FAN_MAX_SPEED,
-- FAN_SAFE_SPEED,
-- FAN_TARGET_SPEED
-+static const char *const fan_speed_fmt[] = {
-+ "F%dAc", /* actual speed */
-+ "F%dMn", /* minimum speed (rw) */
-+ "F%dMx", /* maximum speed */
-+ "F%dSf", /* safe speed - not all models */
-+ "F%dTg", /* target speed (manual: rw) */
- };
-
- #define INIT_TIMEOUT_MSECS 5000 /* wait up to 5s for device init ... */
-@@ -184,18 +107,58 @@ static const char* fan_speed_keys[] = {
- #define SENSOR_Y 1
- #define SENSOR_Z 2
-
--/* Structure to be passed to DMI_MATCH function */
--struct dmi_match_data {
--/* Indicates whether this computer has an accelerometer. */
-- int accelerometer;
--/* Indicates whether this computer has light sensors and keyboard backlight. */
-- int light;
--/* Indicates which temperature sensors set to use. */
-- int temperature_set;
-+#define to_index(attr) (to_sensor_dev_attr(attr)->index & 0xffff)
-+#define to_option(attr) (to_sensor_dev_attr(attr)->index >> 16)
-+
-+struct applesmc_pnp_device {
-+ int iobase;
-+ int iolen;
-+ int irq;
-+};
-+
-+struct pnp_dev *pdev;
-+struct applesmc_pnp_device *pnp_device;
-+
-+/* Dynamic device node attributes */
-+struct applesmc_dev_attr {
-+ struct sensor_device_attribute sda; /* hwmon attributes */
-+ char name[32]; /* room for node file name */
-+};
-+
-+/* Dynamic device node group */
-+struct applesmc_node_group {
-+ char *format; /* format string */
-+ void *show; /* show function */
-+ void *store; /* store function */
-+ int option; /* function argument */
-+ struct applesmc_dev_attr *nodes; /* dynamic node array */
- };
-
-+/* AppleSMC entry - cached register information */
-+struct applesmc_entry {
-+ char key[5]; /* four-letter key code */
-+ u8 valid; /* set when entry is successfully read once */
-+ u8 len; /* bounded by APPLESMC_MAX_DATA_LENGTH */
-+ char type[5]; /* four-letter type code */
-+ u8 flags; /* 0x10: func; 0x40: write; 0x80: read */
-+};
-+
-+/* Register lookup and registers common to all SMCs */
-+static struct applesmc_registers {
-+ struct mutex mutex; /* register read/write mutex */
-+ unsigned int key_count; /* number of SMC registers */
-+ unsigned int fan_count; /* number of fans */
-+ unsigned int temp_count; /* number of temperature registers */
-+ unsigned int temp_begin; /* temperature lower index bound */
-+ unsigned int temp_end; /* temperature upper index bound */
-+ int num_light_sensors; /* number of light sensors */
-+ bool has_accelerometer; /* has motion sensor */
-+ bool has_key_backlight; /* has keyboard backlight */
-+ bool init_complete; /* true when fully initialized */
-+ struct applesmc_entry *cache; /* cached key entries */
-+} smcreg;
-+
- static const int debug;
--static struct platform_device *pdev;
- static s16 rest_x;
- static s16 rest_y;
- static u8 backlight_state[2];
-@@ -203,20 +166,6 @@ static u8 backlight_state[2];
- static struct device *hwmon_dev;
- static struct input_polled_dev *applesmc_idev;
-
--/* Indicates whether this computer has an accelerometer. */
--static unsigned int applesmc_accelerometer;
--
--/* Indicates whether this computer has light sensors and keyboard backlight. */
--static unsigned int applesmc_light;
--
--/* The number of fans handled by the driver */
--static unsigned int fans_handled;
--
--/* Indicates which temperature sensors set to use. */
--static unsigned int applesmc_temperature_set;
--
--static DEFINE_MUTEX(applesmc_lock);
--
- /*
- * Last index written to key_at_index sysfs file, and value to use for all other
- * key_at_index_* sysfs files.
-@@ -225,6 +174,16 @@ static unsigned int key_at_index;
-
- static struct workqueue_struct *applesmc_led_wq;
-
-+static u8 applesmc_read_reg(u8 reg)
-+{
-+ return inb(pnp_device->iobase + reg);
-+}
-+
-+static void applesmc_write_reg(u8 val, u8 reg)
-+{
-+ outb(val, pnp_device->iobase + reg);
-+}
-+
- /*
- * __wait_status - Wait up to 32ms for the status port to get a certain value
- * (masked with 0x0f), returning zero if the value is obtained. Callers must
-@@ -238,18 +197,12 @@ static int __wait_status(u8 val)
-
- for (us = APPLESMC_MIN_WAIT; us < APPLESMC_MAX_WAIT; us <<= 1) {
- udelay(us);
-- if ((inb(APPLESMC_CMD_PORT) & APPLESMC_STATUS_MASK) == val) {
-- if (debug)
-- printk(KERN_DEBUG
-- "Waited %d us for status %x\n",
-- 2 * us - APPLESMC_MIN_WAIT, val);
-+ if ((applesmc_read_reg(APPLESMC_CMD_PORT)
-+ & APPLESMC_STATUS_MASK) == val) {
- return 0;
- }
- }
-
-- printk(KERN_WARNING "applesmc: wait status failed: %x != %x\n",
-- val, inb(APPLESMC_CMD_PORT));
--
- return -EIO;
- }
-
-@@ -262,162 +215,246 @@ static int send_command(u8 cmd)
- {
- int us;
- for (us = APPLESMC_MIN_WAIT; us < APPLESMC_MAX_WAIT; us <<= 1) {
-- outb(cmd, APPLESMC_CMD_PORT);
-+ applesmc_write_reg(cmd, APPLESMC_CMD_PORT);
- udelay(us);
-- if ((inb(APPLESMC_CMD_PORT) & APPLESMC_STATUS_MASK) == 0x0c)
-+ if ((applesmc_read_reg(APPLESMC_CMD_PORT)
-+ & APPLESMC_STATUS_MASK) == 0x0c)
- return 0;
- }
-- printk(KERN_WARNING "applesmc: command failed: %x -> %x\n",
-- cmd, inb(APPLESMC_CMD_PORT));
- return -EIO;
- }
-
--/*
-- * applesmc_read_key - reads len bytes from a given key, and put them in buffer.
-- * Returns zero on success or a negative error on failure. Callers must
-- * hold applesmc_lock.
-- */
--static int applesmc_read_key(const char* key, u8* buffer, u8 len)
-+static int send_argument(const char *key)
- {
- int i;
-
-- if (len > APPLESMC_MAX_DATA_LENGTH) {
-- printk(KERN_ERR "applesmc_read_key: cannot read more than "
-- "%d bytes\n", APPLESMC_MAX_DATA_LENGTH);
-- return -EINVAL;
-- }
--
-- if (send_command(APPLESMC_READ_CMD))
-- return -EIO;
--
- for (i = 0; i < 4; i++) {
-- outb(key[i], APPLESMC_DATA_PORT);
-+ applesmc_write_reg(key[i], APPLESMC_DATA_PORT);
- if (__wait_status(0x04))
- return -EIO;
- }
-- if (debug)
-- printk(KERN_DEBUG "<%s", key);
-+ return 0;
-+}
-
-- outb(len, APPLESMC_DATA_PORT);
-- if (debug)
-- printk(KERN_DEBUG ">%x", len);
-+static int read_smc(u8 cmd, const char *key, u8 *buffer, u8 len)
-+{
-+ int i;
-+
-+ if (send_command(cmd) || send_argument(key)) {
-+ pr_warn("%s: read arg fail\n", key);
-+ return -EIO;
-+ }
-+
-+ applesmc_write_reg(len, APPLESMC_DATA_PORT);
-
- for (i = 0; i < len; i++) {
-- if (__wait_status(0x05))
-+ if (__wait_status(0x05)) {
-+ pr_warn("%s: read data fail\n", key);
- return -EIO;
-- buffer[i] = inb(APPLESMC_DATA_PORT);
-- if (debug)
-- printk(KERN_DEBUG "<%x", buffer[i]);
-+ }
-+ buffer[i] = applesmc_read_reg(APPLESMC_DATA_PORT);
- }
-- if (debug)
-- printk(KERN_DEBUG "\n");
-
- return 0;
- }
-
--/*
-- * applesmc_write_key - writes len bytes from buffer to a given key.
-- * Returns zero on success or a negative error on failure. Callers must
-- * hold applesmc_lock.
-- */
--static int applesmc_write_key(const char* key, u8* buffer, u8 len)
-+static int write_smc(u8 cmd, const char *key, const u8 *buffer, u8 len)
- {
- int i;
-
-- if (len > APPLESMC_MAX_DATA_LENGTH) {
-- printk(KERN_ERR "applesmc_write_key: cannot write more than "
-- "%d bytes\n", APPLESMC_MAX_DATA_LENGTH);
-- return -EINVAL;
-- }
--
-- if (send_command(APPLESMC_WRITE_CMD))
-+ if (send_command(cmd) || send_argument(key)) {
-+ pr_warn("%s: write arg fail\n", key);
- return -EIO;
--
-- for (i = 0; i < 4; i++) {
-- outb(key[i], APPLESMC_DATA_PORT);
-- if (__wait_status(0x04))
-- return -EIO;
- }
-
-- outb(len, APPLESMC_DATA_PORT);
-+ applesmc_write_reg(len, APPLESMC_DATA_PORT);
-
- for (i = 0; i < len; i++) {
-- if (__wait_status(0x04))
-+ if (__wait_status(0x04)) {
-+ pr_warn("%s: write data fail\n", key);
- return -EIO;
-- outb(buffer[i], APPLESMC_DATA_PORT);
-+ }
-+ applesmc_write_reg(buffer[i], APPLESMC_DATA_PORT);
- }
-
- return 0;
- }
-
-+static int read_register_count(unsigned int *count)
-+{
-+ __be32 be;
-+ int ret;
-+
-+ ret = read_smc(APPLESMC_READ_CMD, KEY_COUNT_KEY, (u8 *)&be, 4);
-+ if (ret)
-+ return ret;
-+
-+ *count = be32_to_cpu(be);
-+ return 0;
-+}
-+
- /*
-- * applesmc_get_key_at_index - get key at index, and put the result in key
-- * (char[6]). Returns zero on success or a negative error on failure. Callers
-- * must hold applesmc_lock.
-+ * Serialized I/O
-+ *
-+ * Returns zero on success or a negative error on failure.
-+ * All functions below are concurrency safe - callers should NOT hold lock.
- */
--static int applesmc_get_key_at_index(int index, char* key)
-+
-+static int applesmc_read_entry(const struct applesmc_entry *entry,
-+ u8 *buf, u8 len)
- {
-- int i;
-- u8 readkey[4];
-- readkey[0] = index >> 24;
-- readkey[1] = index >> 16;
-- readkey[2] = index >> 8;
-- readkey[3] = index;
-+ int ret;
-
-- if (send_command(APPLESMC_GET_KEY_BY_INDEX_CMD))
-- return -EIO;
-+ if (entry->len != len)
-+ return -EINVAL;
-+ mutex_lock(&smcreg.mutex);
-+ ret = read_smc(APPLESMC_READ_CMD, entry->key, buf, len);
-+ mutex_unlock(&smcreg.mutex);
-
-- for (i = 0; i < 4; i++) {
-- outb(readkey[i], APPLESMC_DATA_PORT);
-- if (__wait_status(0x04))
-- return -EIO;
-+ return ret;
-+}
-+
-+static int applesmc_write_entry(const struct applesmc_entry *entry,
-+ const u8 *buf, u8 len)
-+{
-+ int ret;
-+
-+ if (entry->len != len)
-+ return -EINVAL;
-+ mutex_lock(&smcreg.mutex);
-+ ret = write_smc(APPLESMC_WRITE_CMD, entry->key, buf, len);
-+ mutex_unlock(&smcreg.mutex);
-+ return ret;
-+}
-+
-+static const struct applesmc_entry *applesmc_get_entry_by_index(int index)
-+{
-+ struct applesmc_entry *cache = &smcreg.cache[index];
-+ u8 key[4], info[6];
-+ __be32 be;
-+ int ret = 0;
-+
-+ if (cache->valid)
-+ return cache;
-+
-+ mutex_lock(&smcreg.mutex);
-+
-+ if (cache->valid)
-+ goto out;
-+ be = cpu_to_be32(index);
-+ ret = read_smc(APPLESMC_GET_KEY_BY_INDEX_CMD, (u8 *)&be, key, 4);
-+ if (ret)
-+ goto out;
-+ ret = read_smc(APPLESMC_GET_KEY_TYPE_CMD, key, info, 6);
-+ if (ret)
-+ goto out;
-+
-+ memcpy(cache->key, key, 4);
-+ cache->len = info[0];
-+ memcpy(cache->type, &info[1], 4);
-+ cache->flags = info[5];
-+ cache->valid = 1;
-+
-+out:
-+ mutex_unlock(&smcreg.mutex);
-+ if (ret)
-+ return ERR_PTR(ret);
-+ return cache;
-+}
-+
-+static int applesmc_get_lower_bound(unsigned int *lo, const char *key)
-+{
-+ int begin = 0, end = smcreg.key_count;
-+ const struct applesmc_entry *entry;
-+
-+ while (begin != end) {
-+ int middle = begin + (end - begin) / 2;
-+ entry = applesmc_get_entry_by_index(middle);
-+ if (IS_ERR(entry))
-+ return PTR_ERR(entry);
-+ if (strcmp(entry->key, key) < 0)
-+ begin = middle + 1;
-+ else
-+ end = middle;
- }
-
-- outb(4, APPLESMC_DATA_PORT);
-+ *lo = begin;
-+ return 0;
-+}
-
-- for (i = 0; i < 4; i++) {
-- if (__wait_status(0x05))
-- return -EIO;
-- key[i] = inb(APPLESMC_DATA_PORT);
-+static int applesmc_get_upper_bound(unsigned int *hi, const char *key)
-+{
-+ int begin = 0, end = smcreg.key_count;
-+ const struct applesmc_entry *entry;
-+
-+ while (begin != end) {
-+ int middle = begin + (end - begin) / 2;
-+ entry = applesmc_get_entry_by_index(middle);
-+ if (IS_ERR(entry))
-+ return PTR_ERR(entry);
-+ if (strcmp(key, entry->key) < 0)
-+ end = middle;
-+ else
-+ begin = middle + 1;
- }
-- key[4] = 0;
-
-+ *hi = begin;
- return 0;
- }
-
--/*
-- * applesmc_get_key_type - get key type, and put the result in type (char[6]).
-- * Returns zero on success or a negative error on failure. Callers must
-- * hold applesmc_lock.
-- */
--static int applesmc_get_key_type(char* key, char* type)
-+static const struct applesmc_entry *applesmc_get_entry_by_key(const char *key)
- {
-- int i;
-+ int begin, end;
-+ int ret;
-
-- if (send_command(APPLESMC_GET_KEY_TYPE_CMD))
-- return -EIO;
-+ ret = applesmc_get_lower_bound(&begin, key);
-+ if (ret)
-+ return ERR_PTR(ret);
-+ ret = applesmc_get_upper_bound(&end, key);
-+ if (ret)
-+ return ERR_PTR(ret);
-+ if (end - begin != 1)
-+ return ERR_PTR(-EINVAL);
-
-- for (i = 0; i < 4; i++) {
-- outb(key[i], APPLESMC_DATA_PORT);
-- if (__wait_status(0x04))
-- return -EIO;
-- }
-+ return applesmc_get_entry_by_index(begin);
-+}
-
-- outb(6, APPLESMC_DATA_PORT);
-+static int applesmc_read_key(const char *key, u8 *buffer, u8 len)
-+{
-+ const struct applesmc_entry *entry;
-
-- for (i = 0; i < 6; i++) {
-- if (__wait_status(0x05))
-- return -EIO;
-- type[i] = inb(APPLESMC_DATA_PORT);
-- }
-- type[5] = 0;
-+ entry = applesmc_get_entry_by_key(key);
-+ if (IS_ERR(entry))
-+ return PTR_ERR(entry);
-+
-+ return applesmc_read_entry(entry, buffer, len);
-+}
-+
-+static int applesmc_write_key(const char *key, const u8 *buffer, u8 len)
-+{
-+ const struct applesmc_entry *entry;
-+
-+ entry = applesmc_get_entry_by_key(key);
-+ if (IS_ERR(entry))
-+ return PTR_ERR(entry);
-+
-+ return applesmc_write_entry(entry, buffer, len);
-+}
-+
-+static int applesmc_has_key(const char *key, bool *value)
-+{
-+ const struct applesmc_entry *entry;
-
-+ entry = applesmc_get_entry_by_key(key);
-+ if (IS_ERR(entry) && PTR_ERR(entry) != -EINVAL)
-+ return PTR_ERR(entry);
-+
-+ *value = !IS_ERR(entry);
- return 0;
- }
-
- /*
-- * applesmc_read_motion_sensor - Read motion sensor (X, Y or Z). Callers must
-- * hold applesmc_lock.
-+ * applesmc_read_motion_sensor - Read motion sensor (X, Y or Z).
- */
- static int applesmc_read_motion_sensor(int index, s16* value)
- {
-@@ -444,100 +481,130 @@ static int applesmc_read_motion_sensor(int index, s16* value)
- }
-
- /*
-- * applesmc_device_init - initialize the accelerometer. Returns zero on success
-- * and negative error code on failure. Can sleep.
-+ * applesmc_device_init - initialize the accelerometer. Can sleep.
- */
--static int applesmc_device_init(void)
-+static void applesmc_device_init(void)
- {
-- int total, ret = -ENXIO;
-+ int total;
- u8 buffer[2];
-
-- if (!applesmc_accelerometer)
-- return 0;
--
-- mutex_lock(&applesmc_lock);
-+ if (!smcreg.has_accelerometer)
-+ return;
-
- for (total = INIT_TIMEOUT_MSECS; total > 0; total -= INIT_WAIT_MSECS) {
-- if (debug)
-- printk(KERN_DEBUG "applesmc try %d\n", total);
- if (!applesmc_read_key(MOTION_SENSOR_KEY, buffer, 2) &&
-- (buffer[0] != 0x00 || buffer[1] != 0x00)) {
-- if (total == INIT_TIMEOUT_MSECS) {
-- printk(KERN_DEBUG "applesmc: device has"
-- " already been initialized"
-- " (0x%02x, 0x%02x).\n",
-- buffer[0], buffer[1]);
-- } else {
-- printk(KERN_DEBUG "applesmc: device"
-- " successfully initialized"
-- " (0x%02x, 0x%02x).\n",
-- buffer[0], buffer[1]);
-- }
-- ret = 0;
-- goto out;
-- }
-+ (buffer[0] != 0x00 || buffer[1] != 0x00))
-+ return;
- buffer[0] = 0xe0;
- buffer[1] = 0x00;
- applesmc_write_key(MOTION_SENSOR_KEY, buffer, 2);
- msleep(INIT_WAIT_MSECS);
- }
-
-- printk(KERN_WARNING "applesmc: failed to init the device\n");
--
--out:
-- mutex_unlock(&applesmc_lock);
-- return ret;
-+ pr_warn("failed to init the device\n");
- }
-
- /*
-- * applesmc_get_fan_count - get the number of fans. Callers must NOT hold
-- * applesmc_lock.
-+ * applesmc_init_smcreg_try - Try to initialize register cache. Idempotent.
- */
--static int applesmc_get_fan_count(void)
-+static int applesmc_init_smcreg_try(void)
- {
-+ struct applesmc_registers *s = &smcreg;
-+ bool left_light_sensor, right_light_sensor;
-+ u8 tmp[1];
- int ret;
-- u8 buffer[1];
-
-- mutex_lock(&applesmc_lock);
-+ if (s->init_complete)
-+ return 0;
-
-- ret = applesmc_read_key(FANS_COUNT, buffer, 1);
-+ mutex_init(&s->mutex);
-
-- mutex_unlock(&applesmc_lock);
-+ ret = read_register_count(&s->key_count);
- if (ret)
- return ret;
-- else
-- return buffer[0];
--}
-
--/* Device model stuff */
--static int applesmc_probe(struct platform_device *dev)
--{
-- int ret;
-+ if (!s->cache)
-+ s->cache = kcalloc(s->key_count, sizeof(*s->cache), GFP_KERNEL);
-+ if (!s->cache)
-+ return -ENOMEM;
-
-- ret = applesmc_device_init();
-+ ret = applesmc_read_key(FANS_COUNT, tmp, 1);
- if (ret)
- return ret;
-+ s->fan_count = tmp[0];
-+
-+ ret = applesmc_get_lower_bound(&s->temp_begin, "T");
-+ if (ret)
-+ return ret;
-+ ret = applesmc_get_lower_bound(&s->temp_end, "U");
-+ if (ret)
-+ return ret;
-+ s->temp_count = s->temp_end - s->temp_begin;
-+
-+ ret = applesmc_has_key(LIGHT_SENSOR_LEFT_KEY, &left_light_sensor);
-+ if (ret)
-+ return ret;
-+ ret = applesmc_has_key(LIGHT_SENSOR_RIGHT_KEY, &right_light_sensor);
-+ if (ret)
-+ return ret;
-+ ret = applesmc_has_key(MOTION_SENSOR_KEY, &s->has_accelerometer);
-+ if (ret)
-+ return ret;
-+ ret = applesmc_has_key(BACKLIGHT_KEY, &s->has_key_backlight);
-+ if (ret)
-+ return ret;
-+
-+ s->num_light_sensors = left_light_sensor + right_light_sensor;
-+ s->init_complete = true;
-+
-+ pr_info("key=%d fan=%d temp=%d acc=%d lux=%d kbd=%d\n",
-+ s->key_count, s->fan_count, s->temp_count,
-+ s->has_accelerometer,
-+ s->num_light_sensors,
-+ s->has_key_backlight);
-
-- printk(KERN_INFO "applesmc: device successfully initialized.\n");
- return 0;
- }
-
-+/*
-+ * applesmc_init_smcreg - Initialize register cache.
-+ *
-+ * Retries until initialization is successful, or the operation times out.
-+ *
-+ */
-+static int applesmc_init_smcreg(void)
-+{
-+ int ms, ret;
-+
-+ for (ms = 0; ms < INIT_TIMEOUT_MSECS; ms += INIT_WAIT_MSECS) {
-+ ret = applesmc_init_smcreg_try();
-+ if (!ret)
-+ return 0;
-+ pr_warn("slow init, retrying\n");
-+ msleep(INIT_WAIT_MSECS);
-+ }
-+
-+ return ret;
-+}
-+
-+static void applesmc_destroy_smcreg(void)
-+{
-+ kfree(smcreg.cache);
-+ memset(&smcreg, 0, sizeof(smcreg));
-+}
-+
- /* Synchronize device with memorized backlight state */
- static int applesmc_pm_resume(struct device *dev)
- {
-- mutex_lock(&applesmc_lock);
-- if (applesmc_light)
-+ if (smcreg.has_key_backlight)
- applesmc_write_key(BACKLIGHT_KEY, backlight_state, 2);
-- mutex_unlock(&applesmc_lock);
- return 0;
- }
-
- /* Reinitialize device on resume from hibernation */
- static int applesmc_pm_restore(struct device *dev)
- {
-- int ret = applesmc_device_init();
-- if (ret)
-- return ret;
-+ applesmc_device_init();
- return applesmc_pm_resume(dev);
- }
-
-@@ -546,15 +613,6 @@ static const struct dev_pm_ops applesmc_pm_ops = {
- .restore = applesmc_pm_restore,
- };
-
--static struct platform_driver applesmc_driver = {
-- .probe = applesmc_probe,
-- .driver = {
-- .name = "applesmc",
-- .owner = THIS_MODULE,
-- .pm = &applesmc_pm_ops,
-- },
--};
--
- /*
- * applesmc_calibrate - Set our "resting" values. Callers must
- * hold applesmc_lock.
-@@ -571,20 +629,15 @@ static void applesmc_idev_poll(struct input_polled_dev *dev)
- struct input_dev *idev = dev->input;
- s16 x, y;
-
-- mutex_lock(&applesmc_lock);
--
- if (applesmc_read_motion_sensor(SENSOR_X, &x))
-- goto out;
-+ return;
- if (applesmc_read_motion_sensor(SENSOR_Y, &y))
-- goto out;
-+ return;
-
- x = -x;
- input_report_abs(idev, ABS_X, x - rest_x);
- input_report_abs(idev, ABS_Y, y - rest_y);
- input_sync(idev);
--
--out:
-- mutex_unlock(&applesmc_lock);
- }
-
- /* Sysfs Files */
-@@ -601,8 +654,6 @@ static ssize_t applesmc_position_show(struct device *dev,
- int ret;
- s16 x, y, z;
-
-- mutex_lock(&applesmc_lock);
--
- ret = applesmc_read_motion_sensor(SENSOR_X, &x);
- if (ret)
- goto out;
-@@ -614,7 +665,6 @@ static ssize_t applesmc_position_show(struct device *dev,
- goto out;
-
- out:
-- mutex_unlock(&applesmc_lock);
- if (ret)
- return ret;
- else
-@@ -624,20 +674,20 @@ out:
- static ssize_t applesmc_light_show(struct device *dev,
- struct device_attribute *attr, char *sysfsbuf)
- {
-+ const struct applesmc_entry *entry;
- static int data_length;
- int ret;
- u8 left = 0, right = 0;
-- u8 buffer[10], query[6];
--
-- mutex_lock(&applesmc_lock);
-+ u8 buffer[10];
-
- if (!data_length) {
-- ret = applesmc_get_key_type(LIGHT_SENSOR_LEFT_KEY, query);
-- if (ret)
-- goto out;
-- data_length = clamp_val(query[0], 0, 10);
-- printk(KERN_INFO "applesmc: light sensor data length set to "
-- "%d\n", data_length);
-+ entry = applesmc_get_entry_by_key(LIGHT_SENSOR_LEFT_KEY);
-+ if (IS_ERR(entry))
-+ return PTR_ERR(entry);
-+ if (entry->len > 10)
-+ return -ENXIO;
-+ data_length = entry->len;
-+ pr_info("light sensor data length set to %d\n", data_length);
- }
-
- ret = applesmc_read_key(LIGHT_SENSOR_LEFT_KEY, buffer, data_length);
-@@ -653,7 +703,6 @@ static ssize_t applesmc_light_show(struct device *dev,
- right = buffer[2];
-
- out:
-- mutex_unlock(&applesmc_lock);
- if (ret)
- return ret;
- else
-@@ -664,36 +713,48 @@ out:
- static ssize_t applesmc_show_sensor_label(struct device *dev,
- struct device_attribute *devattr, char *sysfsbuf)
- {
-- struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
-- const char *key =
-- temperature_sensors_sets[applesmc_temperature_set][attr->index];
-+ int index = smcreg.temp_begin + to_index(devattr);
-+ const struct applesmc_entry *entry;
-+
-+ entry = applesmc_get_entry_by_index(index);
-+ if (IS_ERR(entry))
-+ return PTR_ERR(entry);
-
-- return snprintf(sysfsbuf, PAGE_SIZE, "%s\n", key);
-+ return snprintf(sysfsbuf, PAGE_SIZE, "%s\n", entry->key);
- }
-
- /* Displays degree Celsius * 1000 */
- static ssize_t applesmc_show_temperature(struct device *dev,
- struct device_attribute *devattr, char *sysfsbuf)
- {
-+ int index = smcreg.temp_begin + to_index(devattr);
-+ const struct applesmc_entry *entry;
- int ret;
- u8 buffer[2];
- unsigned int temp;
-- struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
-- const char* key =
-- temperature_sensors_sets[applesmc_temperature_set][attr->index];
-
-- mutex_lock(&applesmc_lock);
--
-- ret = applesmc_read_key(key, buffer, 2);
-- temp = buffer[0]*1000;
-- temp += (buffer[1] >> 6) * 250;
--
-- mutex_unlock(&applesmc_lock);
-+ entry = applesmc_get_entry_by_index(index);
-+ if (IS_ERR(entry))
-+ return PTR_ERR(entry);
-+ if (entry->len > 2)
-+ return -EINVAL;
-
-+ ret = applesmc_read_entry(entry, buffer, entry->len);
- if (ret)
- return ret;
-- else
-- return snprintf(sysfsbuf, PAGE_SIZE, "%u\n", temp);
-+
-+ if (entry->len == 2) {
-+ if (buffer[0] >= 0x80) {
-+ /* The two byte format is signed - ignore negative */
-+ return -EINVAL;
-+ }
-+ temp = buffer[0] * 1000;
-+ temp += (buffer[1] >> 6) * 250;
-+ } else {
-+ temp = buffer[0] * 4000;
-+ }
-+
-+ return snprintf(sysfsbuf, PAGE_SIZE, "%u\n", temp);
- }
-
- static ssize_t applesmc_show_fan_speed(struct device *dev,
-@@ -703,21 +764,12 @@ static ssize_t applesmc_show_fan_speed(struct device *dev,
- unsigned int speed = 0;
- char newkey[5];
- u8 buffer[2];
-- struct sensor_device_attribute_2 *sensor_attr =
-- to_sensor_dev_attr_2(attr);
-
-- newkey[0] = fan_speed_keys[sensor_attr->nr][0];
-- newkey[1] = '0' + sensor_attr->index;
-- newkey[2] = fan_speed_keys[sensor_attr->nr][2];
-- newkey[3] = fan_speed_keys[sensor_attr->nr][3];
-- newkey[4] = 0;
--
-- mutex_lock(&applesmc_lock);
-+ sprintf(newkey, fan_speed_fmt[to_option(attr)], to_index(attr));
-
- ret = applesmc_read_key(newkey, buffer, 2);
- speed = ((buffer[0] << 8 | buffer[1]) >> 2);
-
-- mutex_unlock(&applesmc_lock);
- if (ret)
- return ret;
- else
-@@ -732,27 +784,18 @@ static ssize_t applesmc_store_fan_speed(struct device *dev,
- u32 speed;
- char newkey[5];
- u8 buffer[2];
-- struct sensor_device_attribute_2 *sensor_attr =
-- to_sensor_dev_attr_2(attr);
-
- speed = simple_strtoul(sysfsbuf, NULL, 10);
-
- if (speed > 0x4000) /* Bigger than a 14-bit value */
- return -EINVAL;
-
-- newkey[0] = fan_speed_keys[sensor_attr->nr][0];
-- newkey[1] = '0' + sensor_attr->index;
-- newkey[2] = fan_speed_keys[sensor_attr->nr][2];
-- newkey[3] = fan_speed_keys[sensor_attr->nr][3];
-- newkey[4] = 0;
--
-- mutex_lock(&applesmc_lock);
-+ sprintf(newkey, fan_speed_fmt[to_option(attr)], to_index(attr));
-
- buffer[0] = (speed >> 6) & 0xff;
- buffer[1] = (speed << 2) & 0xff;
- ret = applesmc_write_key(newkey, buffer, 2);
-
-- mutex_unlock(&applesmc_lock);
- if (ret)
- return ret;
- else
-@@ -760,19 +803,15 @@ static ssize_t applesmc_store_fan_speed(struct device *dev,
- }
-
- static ssize_t applesmc_show_fan_manual(struct device *dev,
-- struct device_attribute *devattr, char *sysfsbuf)
-+ struct device_attribute *attr, char *sysfsbuf)
- {
- int ret;
- u16 manual = 0;
- u8 buffer[2];
-- struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
--
-- mutex_lock(&applesmc_lock);
-
- ret = applesmc_read_key(FANS_MANUAL, buffer, 2);
-- manual = ((buffer[0] << 8 | buffer[1]) >> attr->index) & 0x01;
-+ manual = ((buffer[0] << 8 | buffer[1]) >> to_index(attr)) & 0x01;
-
-- mutex_unlock(&applesmc_lock);
- if (ret)
- return ret;
- else
-@@ -780,28 +819,25 @@ static ssize_t applesmc_show_fan_manual(struct device *dev,
- }
-
- static ssize_t applesmc_store_fan_manual(struct device *dev,
-- struct device_attribute *devattr,
-+ struct device_attribute *attr,
- const char *sysfsbuf, size_t count)
- {
- int ret;
- u8 buffer[2];
- u32 input;
- u16 val;
-- struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
-
- input = simple_strtoul(sysfsbuf, NULL, 10);
-
-- mutex_lock(&applesmc_lock);
--
- ret = applesmc_read_key(FANS_MANUAL, buffer, 2);
- val = (buffer[0] << 8 | buffer[1]);
- if (ret)
- goto out;
-
- if (input)
-- val = val | (0x01 << attr->index);
-+ val = val | (0x01 << to_index(attr));
- else
-- val = val & ~(0x01 << attr->index);
-+ val = val & ~(0x01 << to_index(attr));
-
- buffer[0] = (val >> 8) & 0xFF;
- buffer[1] = val & 0xFF;
-@@ -809,7 +845,6 @@ static ssize_t applesmc_store_fan_manual(struct device *dev,
- ret = applesmc_write_key(FANS_MANUAL, buffer, 2);
-
- out:
-- mutex_unlock(&applesmc_lock);
- if (ret)
- return ret;
- else
-@@ -822,21 +857,12 @@ static ssize_t applesmc_show_fan_position(struct device *dev,
- int ret;
- char newkey[5];
- u8 buffer[17];
-- struct sensor_device_attribute_2 *sensor_attr =
-- to_sensor_dev_attr_2(attr);
-
-- newkey[0] = FAN_POSITION[0];
-- newkey[1] = '0' + sensor_attr->index;
-- newkey[2] = FAN_POSITION[2];
-- newkey[3] = FAN_POSITION[3];
-- newkey[4] = 0;
--
-- mutex_lock(&applesmc_lock);
-+ sprintf(newkey, FAN_ID_FMT, to_index(attr));
-
- ret = applesmc_read_key(newkey, buffer, 16);
- buffer[16] = 0;
-
-- mutex_unlock(&applesmc_lock);
- if (ret)
- return ret;
- else
-@@ -852,18 +878,14 @@ static ssize_t applesmc_calibrate_show(struct device *dev,
- static ssize_t applesmc_calibrate_store(struct device *dev,
- struct device_attribute *attr, const char *sysfsbuf, size_t count)
- {
-- mutex_lock(&applesmc_lock);
- applesmc_calibrate();
-- mutex_unlock(&applesmc_lock);
-
- return count;
- }
-
- static void applesmc_backlight_set(struct work_struct *work)
- {
-- mutex_lock(&applesmc_lock);
- applesmc_write_key(BACKLIGHT_KEY, backlight_state, 2);
-- mutex_unlock(&applesmc_lock);
- }
- static DECLARE_WORK(backlight_work, &applesmc_backlight_set);
-
-@@ -886,13 +908,10 @@ static ssize_t applesmc_key_count_show(struct device *dev,
- u8 buffer[4];
- u32 count;
-
-- mutex_lock(&applesmc_lock);
--
- ret = applesmc_read_key(KEY_COUNT_KEY, buffer, 4);
- count = ((u32)buffer[0]<<24) + ((u32)buffer[1]<<16) +
- ((u32)buffer[2]<<8) + buffer[3];
-
-- mutex_unlock(&applesmc_lock);
- if (ret)
- return ret;
- else
-@@ -902,113 +921,53 @@ static ssize_t applesmc_key_count_show(struct device *dev,
- static ssize_t applesmc_key_at_index_read_show(struct device *dev,
- struct device_attribute *attr, char *sysfsbuf)
- {
-- char key[5];
-- char info[6];
-+ const struct applesmc_entry *entry;
- int ret;
-
-- mutex_lock(&applesmc_lock);
--
-- ret = applesmc_get_key_at_index(key_at_index, key);
--
-- if (ret || !key[0]) {
-- mutex_unlock(&applesmc_lock);
--
-- return -EINVAL;
-- }
--
-- ret = applesmc_get_key_type(key, info);
--
-- if (ret) {
-- mutex_unlock(&applesmc_lock);
--
-+ entry = applesmc_get_entry_by_index(key_at_index);
-+ if (IS_ERR(entry))
-+ return PTR_ERR(entry);
-+ ret = applesmc_read_entry(entry, sysfsbuf, entry->len);
-+ if (ret)
- return ret;
-- }
--
-- /*
-- * info[0] maximum value (APPLESMC_MAX_DATA_LENGTH) is much lower than
-- * PAGE_SIZE, so we don't need any checks before writing to sysfsbuf.
-- */
-- ret = applesmc_read_key(key, sysfsbuf, info[0]);
--
-- mutex_unlock(&applesmc_lock);
-
-- if (!ret) {
-- return info[0];
-- } else {
-- return ret;
-- }
-+ return entry->len;
- }
-
- static ssize_t applesmc_key_at_index_data_length_show(struct device *dev,
- struct device_attribute *attr, char *sysfsbuf)
- {
-- char key[5];
-- char info[6];
-- int ret;
--
-- mutex_lock(&applesmc_lock);
-+ const struct applesmc_entry *entry;
-
-- ret = applesmc_get_key_at_index(key_at_index, key);
-+ entry = applesmc_get_entry_by_index(key_at_index);
-+ if (IS_ERR(entry))
-+ return PTR_ERR(entry);
-
-- if (ret || !key[0]) {
-- mutex_unlock(&applesmc_lock);
--
-- return -EINVAL;
-- }
--
-- ret = applesmc_get_key_type(key, info);
--
-- mutex_unlock(&applesmc_lock);
--
-- if (!ret)
-- return snprintf(sysfsbuf, PAGE_SIZE, "%d\n", info[0]);
-- else
-- return ret;
-+ return snprintf(sysfsbuf, PAGE_SIZE, "%d\n", entry->len);
- }
-
- static ssize_t applesmc_key_at_index_type_show(struct device *dev,
- struct device_attribute *attr, char *sysfsbuf)
- {
-- char key[5];
-- char info[6];
-- int ret;
-+ const struct applesmc_entry *entry;
-
-- mutex_lock(&applesmc_lock);
-+ entry = applesmc_get_entry_by_index(key_at_index);
-+ if (IS_ERR(entry))
-+ return PTR_ERR(entry);
-
-- ret = applesmc_get_key_at_index(key_at_index, key);
--
-- if (ret || !key[0]) {
-- mutex_unlock(&applesmc_lock);
--
-- return -EINVAL;
-- }
--
-- ret = applesmc_get_key_type(key, info);
--
-- mutex_unlock(&applesmc_lock);
--
-- if (!ret)
-- return snprintf(sysfsbuf, PAGE_SIZE, "%s\n", info+1);
-- else
-- return ret;
-+ return snprintf(sysfsbuf, PAGE_SIZE, "%s\n", entry->type);
- }
-
- static ssize_t applesmc_key_at_index_name_show(struct device *dev,
- struct device_attribute *attr, char *sysfsbuf)
- {
-- char key[5];
-- int ret;
--
-- mutex_lock(&applesmc_lock);
--
-- ret = applesmc_get_key_at_index(key_at_index, key);
-+ const struct applesmc_entry *entry;
-
-- mutex_unlock(&applesmc_lock);
-+ entry = applesmc_get_entry_by_index(key_at_index);
-+ if (IS_ERR(entry))
-+ return PTR_ERR(entry);
-
-- if (!ret && key[0])
-- return snprintf(sysfsbuf, PAGE_SIZE, "%s\n", key);
-- else
-- return -EINVAL;
-+ return snprintf(sysfsbuf, PAGE_SIZE, "%s\n", entry->key);
- }
-
- static ssize_t applesmc_key_at_index_show(struct device *dev,
-@@ -1020,12 +979,8 @@ static ssize_t applesmc_key_at_index_show(struct device *dev,
- static ssize_t applesmc_key_at_index_store(struct device *dev,
- struct device_attribute *attr, const char *sysfsbuf, size_t count)
- {
-- mutex_lock(&applesmc_lock);
--
- key_at_index = simple_strtoul(sysfsbuf, NULL, 10);
-
-- mutex_unlock(&applesmc_lock);
--
- return count;
- }
-
-@@ -1035,387 +990,101 @@ static struct led_classdev applesmc_backlight = {
- .brightness_set = applesmc_brightness_set,
- };
-
--static DEVICE_ATTR(name, 0444, applesmc_name_show, NULL);
--
--static DEVICE_ATTR(position, 0444, applesmc_position_show, NULL);
--static DEVICE_ATTR(calibrate, 0644,
-- applesmc_calibrate_show, applesmc_calibrate_store);
--
--static struct attribute *accelerometer_attributes[] = {
-- &dev_attr_position.attr,
-- &dev_attr_calibrate.attr,
-- NULL
--};
--
--static const struct attribute_group accelerometer_attributes_group =
-- { .attrs = accelerometer_attributes };
--
--static DEVICE_ATTR(light, 0444, applesmc_light_show, NULL);
--
--static DEVICE_ATTR(key_count, 0444, applesmc_key_count_show, NULL);
--static DEVICE_ATTR(key_at_index, 0644,
-- applesmc_key_at_index_show, applesmc_key_at_index_store);
--static DEVICE_ATTR(key_at_index_name, 0444,
-- applesmc_key_at_index_name_show, NULL);
--static DEVICE_ATTR(key_at_index_type, 0444,
-- applesmc_key_at_index_type_show, NULL);
--static DEVICE_ATTR(key_at_index_data_length, 0444,
-- applesmc_key_at_index_data_length_show, NULL);
--static DEVICE_ATTR(key_at_index_data, 0444,
-- applesmc_key_at_index_read_show, NULL);
--
--static struct attribute *key_enumeration_attributes[] = {
-- &dev_attr_key_count.attr,
-- &dev_attr_key_at_index.attr,
-- &dev_attr_key_at_index_name.attr,
-- &dev_attr_key_at_index_type.attr,
-- &dev_attr_key_at_index_data_length.attr,
-- &dev_attr_key_at_index_data.attr,
-- NULL
--};
--
--static const struct attribute_group key_enumeration_group =
-- { .attrs = key_enumeration_attributes };
--
--/*
-- * Macro defining SENSOR_DEVICE_ATTR for a fan sysfs entries.
-- * - show actual speed
-- * - show/store minimum speed
-- * - show maximum speed
-- * - show safe speed
-- * - show/store target speed
-- * - show/store manual mode
-- */
--#define sysfs_fan_speeds_offset(offset) \
--static SENSOR_DEVICE_ATTR_2(fan##offset##_input, S_IRUGO, \
-- applesmc_show_fan_speed, NULL, 0, offset-1); \
--\
--static SENSOR_DEVICE_ATTR_2(fan##offset##_min, S_IRUGO | S_IWUSR, \
-- applesmc_show_fan_speed, applesmc_store_fan_speed, 1, offset-1); \
--\
--static SENSOR_DEVICE_ATTR_2(fan##offset##_max, S_IRUGO, \
-- applesmc_show_fan_speed, NULL, 2, offset-1); \
--\
--static SENSOR_DEVICE_ATTR_2(fan##offset##_safe, S_IRUGO, \
-- applesmc_show_fan_speed, NULL, 3, offset-1); \
--\
--static SENSOR_DEVICE_ATTR_2(fan##offset##_output, S_IRUGO | S_IWUSR, \
-- applesmc_show_fan_speed, applesmc_store_fan_speed, 4, offset-1); \
--\
--static SENSOR_DEVICE_ATTR(fan##offset##_manual, S_IRUGO | S_IWUSR, \
-- applesmc_show_fan_manual, applesmc_store_fan_manual, offset-1); \
--\
--static SENSOR_DEVICE_ATTR(fan##offset##_label, S_IRUGO, \
-- applesmc_show_fan_position, NULL, offset-1); \
--\
--static struct attribute *fan##offset##_attributes[] = { \
-- &sensor_dev_attr_fan##offset##_input.dev_attr.attr, \
-- &sensor_dev_attr_fan##offset##_min.dev_attr.attr, \
-- &sensor_dev_attr_fan##offset##_max.dev_attr.attr, \
-- &sensor_dev_attr_fan##offset##_safe.dev_attr.attr, \
-- &sensor_dev_attr_fan##offset##_output.dev_attr.attr, \
-- &sensor_dev_attr_fan##offset##_manual.dev_attr.attr, \
-- &sensor_dev_attr_fan##offset##_label.dev_attr.attr, \
-- NULL \
-+static struct applesmc_node_group info_group[] = {
-+ { "name", applesmc_name_show },
-+ { "key_count", applesmc_key_count_show },
-+ { "key_at_index", applesmc_key_at_index_show, applesmc_key_at_index_store },
-+ { "key_at_index_name", applesmc_key_at_index_name_show },
-+ { "key_at_index_type", applesmc_key_at_index_type_show },
-+ { "key_at_index_data_length", applesmc_key_at_index_data_length_show },
-+ { "key_at_index_data", applesmc_key_at_index_read_show },
-+ { }
- };
-
--/*
-- * Create the needed functions for each fan using the macro defined above
-- * (4 fans are supported)
-- */
--sysfs_fan_speeds_offset(1);
--sysfs_fan_speeds_offset(2);
--sysfs_fan_speeds_offset(3);
--sysfs_fan_speeds_offset(4);
--
--static const struct attribute_group fan_attribute_groups[] = {
-- { .attrs = fan1_attributes },
-- { .attrs = fan2_attributes },
-- { .attrs = fan3_attributes },
-- { .attrs = fan4_attributes },
-+static struct applesmc_node_group accelerometer_group[] = {
-+ { "position", applesmc_position_show },
-+ { "calibrate", applesmc_calibrate_show, applesmc_calibrate_store },
-+ { }
- };
-
--/*
-- * Temperature sensors sysfs entries.
-- */
--static SENSOR_DEVICE_ATTR(temp1_label, S_IRUGO,
-- applesmc_show_sensor_label, NULL, 0);
--static SENSOR_DEVICE_ATTR(temp2_label, S_IRUGO,
-- applesmc_show_sensor_label, NULL, 1);
--static SENSOR_DEVICE_ATTR(temp3_label, S_IRUGO,
-- applesmc_show_sensor_label, NULL, 2);
--static SENSOR_DEVICE_ATTR(temp4_label, S_IRUGO,
-- applesmc_show_sensor_label, NULL, 3);
--static SENSOR_DEVICE_ATTR(temp5_label, S_IRUGO,
-- applesmc_show_sensor_label, NULL, 4);
--static SENSOR_DEVICE_ATTR(temp6_label, S_IRUGO,
-- applesmc_show_sensor_label, NULL, 5);
--static SENSOR_DEVICE_ATTR(temp7_label, S_IRUGO,
-- applesmc_show_sensor_label, NULL, 6);
--static SENSOR_DEVICE_ATTR(temp8_label, S_IRUGO,
-- applesmc_show_sensor_label, NULL, 7);
--static SENSOR_DEVICE_ATTR(temp9_label, S_IRUGO,
-- applesmc_show_sensor_label, NULL, 8);
--static SENSOR_DEVICE_ATTR(temp10_label, S_IRUGO,
-- applesmc_show_sensor_label, NULL, 9);
--static SENSOR_DEVICE_ATTR(temp11_label, S_IRUGO,
-- applesmc_show_sensor_label, NULL, 10);
--static SENSOR_DEVICE_ATTR(temp12_label, S_IRUGO,
-- applesmc_show_sensor_label, NULL, 11);
--static SENSOR_DEVICE_ATTR(temp13_label, S_IRUGO,
-- applesmc_show_sensor_label, NULL, 12);
--static SENSOR_DEVICE_ATTR(temp14_label, S_IRUGO,
-- applesmc_show_sensor_label, NULL, 13);
--static SENSOR_DEVICE_ATTR(temp15_label, S_IRUGO,
-- applesmc_show_sensor_label, NULL, 14);
--static SENSOR_DEVICE_ATTR(temp16_label, S_IRUGO,
-- applesmc_show_sensor_label, NULL, 15);
--static SENSOR_DEVICE_ATTR(temp17_label, S_IRUGO,
-- applesmc_show_sensor_label, NULL, 16);
--static SENSOR_DEVICE_ATTR(temp18_label, S_IRUGO,
-- applesmc_show_sensor_label, NULL, 17);
--static SENSOR_DEVICE_ATTR(temp19_label, S_IRUGO,
-- applesmc_show_sensor_label, NULL, 18);
--static SENSOR_DEVICE_ATTR(temp20_label, S_IRUGO,
-- applesmc_show_sensor_label, NULL, 19);
--static SENSOR_DEVICE_ATTR(temp21_label, S_IRUGO,
-- applesmc_show_sensor_label, NULL, 20);
--static SENSOR_DEVICE_ATTR(temp22_label, S_IRUGO,
-- applesmc_show_sensor_label, NULL, 21);
--static SENSOR_DEVICE_ATTR(temp23_label, S_IRUGO,
-- applesmc_show_sensor_label, NULL, 22);
--static SENSOR_DEVICE_ATTR(temp24_label, S_IRUGO,
-- applesmc_show_sensor_label, NULL, 23);
--static SENSOR_DEVICE_ATTR(temp25_label, S_IRUGO,
-- applesmc_show_sensor_label, NULL, 24);
--static SENSOR_DEVICE_ATTR(temp26_label, S_IRUGO,
-- applesmc_show_sensor_label, NULL, 25);
--static SENSOR_DEVICE_ATTR(temp27_label, S_IRUGO,
-- applesmc_show_sensor_label, NULL, 26);
--static SENSOR_DEVICE_ATTR(temp28_label, S_IRUGO,
-- applesmc_show_sensor_label, NULL, 27);
--static SENSOR_DEVICE_ATTR(temp29_label, S_IRUGO,
-- applesmc_show_sensor_label, NULL, 28);
--static SENSOR_DEVICE_ATTR(temp30_label, S_IRUGO,
-- applesmc_show_sensor_label, NULL, 29);
--static SENSOR_DEVICE_ATTR(temp31_label, S_IRUGO,
-- applesmc_show_sensor_label, NULL, 30);
--static SENSOR_DEVICE_ATTR(temp32_label, S_IRUGO,
-- applesmc_show_sensor_label, NULL, 31);
--static SENSOR_DEVICE_ATTR(temp33_label, S_IRUGO,
-- applesmc_show_sensor_label, NULL, 32);
--static SENSOR_DEVICE_ATTR(temp34_label, S_IRUGO,
-- applesmc_show_sensor_label, NULL, 33);
--static SENSOR_DEVICE_ATTR(temp35_label, S_IRUGO,
-- applesmc_show_sensor_label, NULL, 34);
--static SENSOR_DEVICE_ATTR(temp36_label, S_IRUGO,
-- applesmc_show_sensor_label, NULL, 35);
--static SENSOR_DEVICE_ATTR(temp37_label, S_IRUGO,
-- applesmc_show_sensor_label, NULL, 36);
--static SENSOR_DEVICE_ATTR(temp38_label, S_IRUGO,
-- applesmc_show_sensor_label, NULL, 37);
--static SENSOR_DEVICE_ATTR(temp39_label, S_IRUGO,
-- applesmc_show_sensor_label, NULL, 38);
--static SENSOR_DEVICE_ATTR(temp40_label, S_IRUGO,
-- applesmc_show_sensor_label, NULL, 39);
--static SENSOR_DEVICE_ATTR(temp1_input, S_IRUGO,
-- applesmc_show_temperature, NULL, 0);
--static SENSOR_DEVICE_ATTR(temp2_input, S_IRUGO,
-- applesmc_show_temperature, NULL, 1);
--static SENSOR_DEVICE_ATTR(temp3_input, S_IRUGO,
-- applesmc_show_temperature, NULL, 2);
--static SENSOR_DEVICE_ATTR(temp4_input, S_IRUGO,
-- applesmc_show_temperature, NULL, 3);
--static SENSOR_DEVICE_ATTR(temp5_input, S_IRUGO,
-- applesmc_show_temperature, NULL, 4);
--static SENSOR_DEVICE_ATTR(temp6_input, S_IRUGO,
-- applesmc_show_temperature, NULL, 5);
--static SENSOR_DEVICE_ATTR(temp7_input, S_IRUGO,
-- applesmc_show_temperature, NULL, 6);
--static SENSOR_DEVICE_ATTR(temp8_input, S_IRUGO,
-- applesmc_show_temperature, NULL, 7);
--static SENSOR_DEVICE_ATTR(temp9_input, S_IRUGO,
-- applesmc_show_temperature, NULL, 8);
--static SENSOR_DEVICE_ATTR(temp10_input, S_IRUGO,
-- applesmc_show_temperature, NULL, 9);
--static SENSOR_DEVICE_ATTR(temp11_input, S_IRUGO,
-- applesmc_show_temperature, NULL, 10);
--static SENSOR_DEVICE_ATTR(temp12_input, S_IRUGO,
-- applesmc_show_temperature, NULL, 11);
--static SENSOR_DEVICE_ATTR(temp13_input, S_IRUGO,
-- applesmc_show_temperature, NULL, 12);
--static SENSOR_DEVICE_ATTR(temp14_input, S_IRUGO,
-- applesmc_show_temperature, NULL, 13);
--static SENSOR_DEVICE_ATTR(temp15_input, S_IRUGO,
-- applesmc_show_temperature, NULL, 14);
--static SENSOR_DEVICE_ATTR(temp16_input, S_IRUGO,
-- applesmc_show_temperature, NULL, 15);
--static SENSOR_DEVICE_ATTR(temp17_input, S_IRUGO,
-- applesmc_show_temperature, NULL, 16);
--static SENSOR_DEVICE_ATTR(temp18_input, S_IRUGO,
-- applesmc_show_temperature, NULL, 17);
--static SENSOR_DEVICE_ATTR(temp19_input, S_IRUGO,
-- applesmc_show_temperature, NULL, 18);
--static SENSOR_DEVICE_ATTR(temp20_input, S_IRUGO,
-- applesmc_show_temperature, NULL, 19);
--static SENSOR_DEVICE_ATTR(temp21_input, S_IRUGO,
-- applesmc_show_temperature, NULL, 20);
--static SENSOR_DEVICE_ATTR(temp22_input, S_IRUGO,
-- applesmc_show_temperature, NULL, 21);
--static SENSOR_DEVICE_ATTR(temp23_input, S_IRUGO,
-- applesmc_show_temperature, NULL, 22);
--static SENSOR_DEVICE_ATTR(temp24_input, S_IRUGO,
-- applesmc_show_temperature, NULL, 23);
--static SENSOR_DEVICE_ATTR(temp25_input, S_IRUGO,
-- applesmc_show_temperature, NULL, 24);
--static SENSOR_DEVICE_ATTR(temp26_input, S_IRUGO,
-- applesmc_show_temperature, NULL, 25);
--static SENSOR_DEVICE_ATTR(temp27_input, S_IRUGO,
-- applesmc_show_temperature, NULL, 26);
--static SENSOR_DEVICE_ATTR(temp28_input, S_IRUGO,
-- applesmc_show_temperature, NULL, 27);
--static SENSOR_DEVICE_ATTR(temp29_input, S_IRUGO,
-- applesmc_show_temperature, NULL, 28);
--static SENSOR_DEVICE_ATTR(temp30_input, S_IRUGO,
-- applesmc_show_temperature, NULL, 29);
--static SENSOR_DEVICE_ATTR(temp31_input, S_IRUGO,
-- applesmc_show_temperature, NULL, 30);
--static SENSOR_DEVICE_ATTR(temp32_input, S_IRUGO,
-- applesmc_show_temperature, NULL, 31);
--static SENSOR_DEVICE_ATTR(temp33_input, S_IRUGO,
-- applesmc_show_temperature, NULL, 32);
--static SENSOR_DEVICE_ATTR(temp34_input, S_IRUGO,
-- applesmc_show_temperature, NULL, 33);
--static SENSOR_DEVICE_ATTR(temp35_input, S_IRUGO,
-- applesmc_show_temperature, NULL, 34);
--static SENSOR_DEVICE_ATTR(temp36_input, S_IRUGO,
-- applesmc_show_temperature, NULL, 35);
--static SENSOR_DEVICE_ATTR(temp37_input, S_IRUGO,
-- applesmc_show_temperature, NULL, 36);
--static SENSOR_DEVICE_ATTR(temp38_input, S_IRUGO,
-- applesmc_show_temperature, NULL, 37);
--static SENSOR_DEVICE_ATTR(temp39_input, S_IRUGO,
-- applesmc_show_temperature, NULL, 38);
--static SENSOR_DEVICE_ATTR(temp40_input, S_IRUGO,
-- applesmc_show_temperature, NULL, 39);
--
--static struct attribute *label_attributes[] = {
-- &sensor_dev_attr_temp1_label.dev_attr.attr,
-- &sensor_dev_attr_temp2_label.dev_attr.attr,
-- &sensor_dev_attr_temp3_label.dev_attr.attr,
-- &sensor_dev_attr_temp4_label.dev_attr.attr,
-- &sensor_dev_attr_temp5_label.dev_attr.attr,
-- &sensor_dev_attr_temp6_label.dev_attr.attr,
-- &sensor_dev_attr_temp7_label.dev_attr.attr,
-- &sensor_dev_attr_temp8_label.dev_attr.attr,
-- &sensor_dev_attr_temp9_label.dev_attr.attr,
-- &sensor_dev_attr_temp10_label.dev_attr.attr,
-- &sensor_dev_attr_temp11_label.dev_attr.attr,
-- &sensor_dev_attr_temp12_label.dev_attr.attr,
-- &sensor_dev_attr_temp13_label.dev_attr.attr,
-- &sensor_dev_attr_temp14_label.dev_attr.attr,
-- &sensor_dev_attr_temp15_label.dev_attr.attr,
-- &sensor_dev_attr_temp16_label.dev_attr.attr,
-- &sensor_dev_attr_temp17_label.dev_attr.attr,
-- &sensor_dev_attr_temp18_label.dev_attr.attr,
-- &sensor_dev_attr_temp19_label.dev_attr.attr,
-- &sensor_dev_attr_temp20_label.dev_attr.attr,
-- &sensor_dev_attr_temp21_label.dev_attr.attr,
-- &sensor_dev_attr_temp22_label.dev_attr.attr,
-- &sensor_dev_attr_temp23_label.dev_attr.attr,
-- &sensor_dev_attr_temp24_label.dev_attr.attr,
-- &sensor_dev_attr_temp25_label.dev_attr.attr,
-- &sensor_dev_attr_temp26_label.dev_attr.attr,
-- &sensor_dev_attr_temp27_label.dev_attr.attr,
-- &sensor_dev_attr_temp28_label.dev_attr.attr,
-- &sensor_dev_attr_temp29_label.dev_attr.attr,
-- &sensor_dev_attr_temp30_label.dev_attr.attr,
-- &sensor_dev_attr_temp31_label.dev_attr.attr,
-- &sensor_dev_attr_temp32_label.dev_attr.attr,
-- &sensor_dev_attr_temp33_label.dev_attr.attr,
-- &sensor_dev_attr_temp34_label.dev_attr.attr,
-- &sensor_dev_attr_temp35_label.dev_attr.attr,
-- &sensor_dev_attr_temp36_label.dev_attr.attr,
-- &sensor_dev_attr_temp37_label.dev_attr.attr,
-- &sensor_dev_attr_temp38_label.dev_attr.attr,
-- &sensor_dev_attr_temp39_label.dev_attr.attr,
-- &sensor_dev_attr_temp40_label.dev_attr.attr,
-- NULL
-+static struct applesmc_node_group light_sensor_group[] = {
-+ { "light", applesmc_light_show },
-+ { }
- };
-
--static struct attribute *temperature_attributes[] = {
-- &sensor_dev_attr_temp1_input.dev_attr.attr,
-- &sensor_dev_attr_temp2_input.dev_attr.attr,
-- &sensor_dev_attr_temp3_input.dev_attr.attr,
-- &sensor_dev_attr_temp4_input.dev_attr.attr,
-- &sensor_dev_attr_temp5_input.dev_attr.attr,
-- &sensor_dev_attr_temp6_input.dev_attr.attr,
-- &sensor_dev_attr_temp7_input.dev_attr.attr,
-- &sensor_dev_attr_temp8_input.dev_attr.attr,
-- &sensor_dev_attr_temp9_input.dev_attr.attr,
-- &sensor_dev_attr_temp10_input.dev_attr.attr,
-- &sensor_dev_attr_temp11_input.dev_attr.attr,
-- &sensor_dev_attr_temp12_input.dev_attr.attr,
-- &sensor_dev_attr_temp13_input.dev_attr.attr,
-- &sensor_dev_attr_temp14_input.dev_attr.attr,
-- &sensor_dev_attr_temp15_input.dev_attr.attr,
-- &sensor_dev_attr_temp16_input.dev_attr.attr,
-- &sensor_dev_attr_temp17_input.dev_attr.attr,
-- &sensor_dev_attr_temp18_input.dev_attr.attr,
-- &sensor_dev_attr_temp19_input.dev_attr.attr,
-- &sensor_dev_attr_temp20_input.dev_attr.attr,
-- &sensor_dev_attr_temp21_input.dev_attr.attr,
-- &sensor_dev_attr_temp22_input.dev_attr.attr,
-- &sensor_dev_attr_temp23_input.dev_attr.attr,
-- &sensor_dev_attr_temp24_input.dev_attr.attr,
-- &sensor_dev_attr_temp25_input.dev_attr.attr,
-- &sensor_dev_attr_temp26_input.dev_attr.attr,
-- &sensor_dev_attr_temp27_input.dev_attr.attr,
-- &sensor_dev_attr_temp28_input.dev_attr.attr,
-- &sensor_dev_attr_temp29_input.dev_attr.attr,
-- &sensor_dev_attr_temp30_input.dev_attr.attr,
-- &sensor_dev_attr_temp31_input.dev_attr.attr,
-- &sensor_dev_attr_temp32_input.dev_attr.attr,
-- &sensor_dev_attr_temp33_input.dev_attr.attr,
-- &sensor_dev_attr_temp34_input.dev_attr.attr,
-- &sensor_dev_attr_temp35_input.dev_attr.attr,
-- &sensor_dev_attr_temp36_input.dev_attr.attr,
-- &sensor_dev_attr_temp37_input.dev_attr.attr,
-- &sensor_dev_attr_temp38_input.dev_attr.attr,
-- &sensor_dev_attr_temp39_input.dev_attr.attr,
-- &sensor_dev_attr_temp40_input.dev_attr.attr,
-- NULL
-+static struct applesmc_node_group fan_group[] = {
-+ { "fan%d_label", applesmc_show_fan_position },
-+ { "fan%d_input", applesmc_show_fan_speed, NULL, 0 },
-+ { "fan%d_min", applesmc_show_fan_speed, applesmc_store_fan_speed, 1 },
-+ { "fan%d_max", applesmc_show_fan_speed, NULL, 2 },
-+ { "fan%d_safe", applesmc_show_fan_speed, NULL, 3 },
-+ { "fan%d_output", applesmc_show_fan_speed, applesmc_store_fan_speed, 4 },
-+ { "fan%d_manual", applesmc_show_fan_manual, applesmc_store_fan_manual },
-+ { }
- };
-
--static const struct attribute_group temperature_attributes_group =
-- { .attrs = temperature_attributes };
--
--static const struct attribute_group label_attributes_group = {
-- .attrs = label_attributes
-+static struct applesmc_node_group temp_group[] = {
-+ { "temp%d_label", applesmc_show_sensor_label },
-+ { "temp%d_input", applesmc_show_temperature },
-+ { }
- };
-
- /* Module stuff */
-
- /*
-- * applesmc_dmi_match - found a match. return one, short-circuiting the hunt.
-+ * applesmc_destroy_nodes - remove files and free associated memory
- */
--static int applesmc_dmi_match(const struct dmi_system_id *id)
-+static void applesmc_destroy_nodes(struct applesmc_node_group *groups)
- {
-- int i = 0;
-- struct dmi_match_data* dmi_data = id->driver_data;
-- printk(KERN_INFO "applesmc: %s detected:\n", id->ident);
-- applesmc_accelerometer = dmi_data->accelerometer;
-- printk(KERN_INFO "applesmc: - Model %s accelerometer\n",
-- applesmc_accelerometer ? "with" : "without");
-- applesmc_light = dmi_data->light;
-- printk(KERN_INFO "applesmc: - Model %s light sensors and backlight\n",
-- applesmc_light ? "with" : "without");
--
-- applesmc_temperature_set = dmi_data->temperature_set;
-- while (temperature_sensors_sets[applesmc_temperature_set][i] != NULL)
-- i++;
-- printk(KERN_INFO "applesmc: - Model with %d temperature sensors\n", i);
-- return 1;
-+ struct applesmc_node_group *grp;
-+ struct applesmc_dev_attr *node;
-+
-+ for (grp = groups; grp->nodes; grp++) {
-+ for (node = grp->nodes; node->sda.dev_attr.attr.name; node++)
-+ sysfs_remove_file(&pdev->dev.kobj,
-+ &node->sda.dev_attr.attr);
-+ kfree(grp->nodes);
-+ grp->nodes = NULL;
-+ }
-+}
-+
-+/*
-+ * applesmc_create_nodes - create a two-dimensional group of sysfs files
-+ */
-+static int applesmc_create_nodes(struct applesmc_node_group *groups, int num)
-+{
-+ struct applesmc_node_group *grp;
-+ struct applesmc_dev_attr *node;
-+ struct attribute *attr;
-+ int ret, i;
-+
-+ for (grp = groups; grp->format; grp++) {
-+ grp->nodes = kcalloc(num + 1, sizeof(*node), GFP_KERNEL);
-+ if (!grp->nodes) {
-+ ret = -ENOMEM;
-+ goto out;
-+ }
-+ for (i = 0; i < num; i++) {
-+ node = &grp->nodes[i];
-+ sprintf(node->name, grp->format, i + 1);
-+ node->sda.index = (grp->option << 16) | (i & 0xffff);
-+ node->sda.dev_attr.show = grp->show;
-+ node->sda.dev_attr.store = grp->store;
-+ attr = &node->sda.dev_attr.attr;
-+ attr->name = node->name;
-+ attr->mode = S_IRUGO | (grp->store ? S_IWUSR : 0);
-+ ret = sysfs_create_file(&pdev->dev.kobj, attr);
-+ if (ret) {
-+ attr->name = NULL;
-+ goto out;
-+ }
-+ }
-+ }
-+
-+ return 0;
-+out:
-+ applesmc_destroy_nodes(groups);
-+ return ret;
- }
-
- /* Create accelerometer ressources */
-@@ -1424,8 +1093,10 @@ static int applesmc_create_accelerometer(void)
- struct input_dev *idev;
- int ret;
-
-- ret = sysfs_create_group(&pdev->dev.kobj,
-- &accelerometer_attributes_group);
-+ if (!smcreg.has_accelerometer)
-+ return 0;
-+
-+ ret = applesmc_create_nodes(accelerometer_group, 1);
- if (ret)
- goto out;
-
-@@ -1462,282 +1133,132 @@ out_idev:
- input_free_polled_device(applesmc_idev);
-
- out_sysfs:
-- sysfs_remove_group(&pdev->dev.kobj, &accelerometer_attributes_group);
-+ applesmc_destroy_nodes(accelerometer_group);
-
- out:
-- printk(KERN_WARNING "applesmc: driver init failed (ret=%d)!\n", ret);
-+ pr_warn("driver init failed (ret=%d)!\n", ret);
- return ret;
- }
-
- /* Release all ressources used by the accelerometer */
- static void applesmc_release_accelerometer(void)
- {
-+ if (!smcreg.has_accelerometer)
-+ return;
- input_unregister_polled_device(applesmc_idev);
- input_free_polled_device(applesmc_idev);
-- sysfs_remove_group(&pdev->dev.kobj, &accelerometer_attributes_group);
-+ applesmc_destroy_nodes(accelerometer_group);
- }
-
--static __initdata struct dmi_match_data applesmc_dmi_data[] = {
--/* MacBook Pro: accelerometer, backlight and temperature set 0 */
-- { .accelerometer = 1, .light = 1, .temperature_set = 0 },
--/* MacBook2: accelerometer and temperature set 1 */
-- { .accelerometer = 1, .light = 0, .temperature_set = 1 },
--/* MacBook: accelerometer and temperature set 2 */
-- { .accelerometer = 1, .light = 0, .temperature_set = 2 },
--/* MacMini: temperature set 3 */
-- { .accelerometer = 0, .light = 0, .temperature_set = 3 },
--/* MacPro: temperature set 4 */
-- { .accelerometer = 0, .light = 0, .temperature_set = 4 },
--/* iMac: temperature set 5 */
-- { .accelerometer = 0, .light = 0, .temperature_set = 5 },
--/* MacBook3, MacBook4: accelerometer and temperature set 6 */
-- { .accelerometer = 1, .light = 0, .temperature_set = 6 },
--/* MacBook Air: accelerometer, backlight and temperature set 7 */
-- { .accelerometer = 1, .light = 1, .temperature_set = 7 },
--/* MacBook Pro 4: accelerometer, backlight and temperature set 8 */
-- { .accelerometer = 1, .light = 1, .temperature_set = 8 },
--/* MacBook Pro 3: accelerometer, backlight and temperature set 9 */
-- { .accelerometer = 1, .light = 1, .temperature_set = 9 },
--/* iMac 5: light sensor only, temperature set 10 */
-- { .accelerometer = 0, .light = 0, .temperature_set = 10 },
--/* MacBook 5: accelerometer, backlight and temperature set 11 */
-- { .accelerometer = 1, .light = 1, .temperature_set = 11 },
--/* MacBook Pro 5: accelerometer, backlight and temperature set 12 */
-- { .accelerometer = 1, .light = 1, .temperature_set = 12 },
--/* iMac 8: light sensor only, temperature set 13 */
-- { .accelerometer = 0, .light = 0, .temperature_set = 13 },
--/* iMac 6: light sensor only, temperature set 14 */
-- { .accelerometer = 0, .light = 0, .temperature_set = 14 },
--/* MacBook Air 2,1: accelerometer, backlight and temperature set 15 */
-- { .accelerometer = 1, .light = 1, .temperature_set = 15 },
--/* MacPro3,1: temperature set 16 */
-- { .accelerometer = 0, .light = 0, .temperature_set = 16 },
--/* iMac 9,1: light sensor only, temperature set 17 */
-- { .accelerometer = 0, .light = 0, .temperature_set = 17 },
--/* MacBook Pro 2,2: accelerometer, backlight and temperature set 18 */
-- { .accelerometer = 1, .light = 1, .temperature_set = 18 },
--/* MacBook Pro 5,3: accelerometer, backlight and temperature set 19 */
-- { .accelerometer = 1, .light = 1, .temperature_set = 19 },
--/* MacBook Pro 5,4: accelerometer, backlight and temperature set 20 */
-- { .accelerometer = 1, .light = 1, .temperature_set = 20 },
--/* MacBook Pro 6,2: accelerometer, backlight and temperature set 21 */
-- { .accelerometer = 1, .light = 1, .temperature_set = 21 },
--/* MacBook Pro 7,1: accelerometer, backlight and temperature set 22 */
-- { .accelerometer = 1, .light = 1, .temperature_set = 22 },
--};
-+static int applesmc_create_light_sensor(void)
-+{
-+ if (!smcreg.num_light_sensors)
-+ return 0;
-+ return applesmc_create_nodes(light_sensor_group, 1);
-+}
-
--/* Note that DMI_MATCH(...,"MacBook") will match "MacBookPro1,1".
-- * So we need to put "Apple MacBook Pro" before "Apple MacBook". */
--static __initdata struct dmi_system_id applesmc_whitelist[] = {
-- { applesmc_dmi_match, "Apple MacBook Air 2", {
-- DMI_MATCH(DMI_BOARD_VENDOR, "Apple"),
-- DMI_MATCH(DMI_PRODUCT_NAME, "MacBookAir2") },
-- &applesmc_dmi_data[15]},
-- { applesmc_dmi_match, "Apple MacBook Air", {
-- DMI_MATCH(DMI_BOARD_VENDOR, "Apple"),
-- DMI_MATCH(DMI_PRODUCT_NAME, "MacBookAir") },
-- &applesmc_dmi_data[7]},
-- { applesmc_dmi_match, "Apple MacBook Pro 7", {
-- DMI_MATCH(DMI_BOARD_VENDOR, "Apple"),
-- DMI_MATCH(DMI_PRODUCT_NAME, "MacBookPro7") },
-- &applesmc_dmi_data[22]},
-- { applesmc_dmi_match, "Apple MacBook Pro 5,4", {
-- DMI_MATCH(DMI_BOARD_VENDOR, "Apple"),
-- DMI_MATCH(DMI_PRODUCT_NAME, "MacBookPro5,4") },
-- &applesmc_dmi_data[20]},
-- { applesmc_dmi_match, "Apple MacBook Pro 5,3", {
-- DMI_MATCH(DMI_BOARD_VENDOR, "Apple"),
-- DMI_MATCH(DMI_PRODUCT_NAME, "MacBookPro5,3") },
-- &applesmc_dmi_data[19]},
-- { applesmc_dmi_match, "Apple MacBook Pro 6", {
-- DMI_MATCH(DMI_BOARD_VENDOR, "Apple"),
-- DMI_MATCH(DMI_PRODUCT_NAME, "MacBookPro6") },
-- &applesmc_dmi_data[21]},
-- { applesmc_dmi_match, "Apple MacBook Pro 5", {
-- DMI_MATCH(DMI_BOARD_VENDOR, "Apple"),
-- DMI_MATCH(DMI_PRODUCT_NAME, "MacBookPro5") },
-- &applesmc_dmi_data[12]},
-- { applesmc_dmi_match, "Apple MacBook Pro 4", {
-- DMI_MATCH(DMI_BOARD_VENDOR, "Apple"),
-- DMI_MATCH(DMI_PRODUCT_NAME, "MacBookPro4") },
-- &applesmc_dmi_data[8]},
-- { applesmc_dmi_match, "Apple MacBook Pro 3", {
-- DMI_MATCH(DMI_BOARD_VENDOR, "Apple"),
-- DMI_MATCH(DMI_PRODUCT_NAME, "MacBookPro3") },
-- &applesmc_dmi_data[9]},
-- { applesmc_dmi_match, "Apple MacBook Pro 2,2", {
-- DMI_MATCH(DMI_BOARD_VENDOR, "Apple Computer, Inc."),
-- DMI_MATCH(DMI_PRODUCT_NAME, "MacBookPro2,2") },
-- &applesmc_dmi_data[18]},
-- { applesmc_dmi_match, "Apple MacBook Pro", {
-- DMI_MATCH(DMI_BOARD_VENDOR,"Apple"),
-- DMI_MATCH(DMI_PRODUCT_NAME,"MacBookPro") },
-- &applesmc_dmi_data[0]},
-- { applesmc_dmi_match, "Apple MacBook (v2)", {
-- DMI_MATCH(DMI_BOARD_VENDOR,"Apple"),
-- DMI_MATCH(DMI_PRODUCT_NAME,"MacBook2") },
-- &applesmc_dmi_data[1]},
-- { applesmc_dmi_match, "Apple MacBook (v3)", {
-- DMI_MATCH(DMI_BOARD_VENDOR,"Apple"),
-- DMI_MATCH(DMI_PRODUCT_NAME,"MacBook3") },
-- &applesmc_dmi_data[6]},
-- { applesmc_dmi_match, "Apple MacBook 4", {
-- DMI_MATCH(DMI_BOARD_VENDOR, "Apple"),
-- DMI_MATCH(DMI_PRODUCT_NAME, "MacBook4") },
-- &applesmc_dmi_data[6]},
-- { applesmc_dmi_match, "Apple MacBook 5", {
-- DMI_MATCH(DMI_BOARD_VENDOR, "Apple"),
-- DMI_MATCH(DMI_PRODUCT_NAME, "MacBook5") },
-- &applesmc_dmi_data[11]},
-- { applesmc_dmi_match, "Apple MacBook", {
-- DMI_MATCH(DMI_BOARD_VENDOR,"Apple"),
-- DMI_MATCH(DMI_PRODUCT_NAME,"MacBook") },
-- &applesmc_dmi_data[2]},
-- { applesmc_dmi_match, "Apple Macmini", {
-- DMI_MATCH(DMI_BOARD_VENDOR,"Apple"),
-- DMI_MATCH(DMI_PRODUCT_NAME,"Macmini") },
-- &applesmc_dmi_data[3]},
-- { applesmc_dmi_match, "Apple MacPro2", {
-- DMI_MATCH(DMI_BOARD_VENDOR,"Apple"),
-- DMI_MATCH(DMI_PRODUCT_NAME,"MacPro2") },
-- &applesmc_dmi_data[4]},
-- { applesmc_dmi_match, "Apple MacPro3", {
-- DMI_MATCH(DMI_BOARD_VENDOR, "Apple"),
-- DMI_MATCH(DMI_PRODUCT_NAME, "MacPro3") },
-- &applesmc_dmi_data[16]},
-- { applesmc_dmi_match, "Apple MacPro", {
-- DMI_MATCH(DMI_BOARD_VENDOR, "Apple"),
-- DMI_MATCH(DMI_PRODUCT_NAME, "MacPro") },
-- &applesmc_dmi_data[4]},
-- { applesmc_dmi_match, "Apple iMac 9,1", {
-- DMI_MATCH(DMI_BOARD_VENDOR, "Apple Inc."),
-- DMI_MATCH(DMI_PRODUCT_NAME, "iMac9,1") },
-- &applesmc_dmi_data[17]},
-- { applesmc_dmi_match, "Apple iMac 8", {
-- DMI_MATCH(DMI_BOARD_VENDOR, "Apple"),
-- DMI_MATCH(DMI_PRODUCT_NAME, "iMac8") },
-- &applesmc_dmi_data[13]},
-- { applesmc_dmi_match, "Apple iMac 6", {
-- DMI_MATCH(DMI_BOARD_VENDOR, "Apple"),
-- DMI_MATCH(DMI_PRODUCT_NAME, "iMac6") },
-- &applesmc_dmi_data[14]},
-- { applesmc_dmi_match, "Apple iMac 5", {
-- DMI_MATCH(DMI_BOARD_VENDOR, "Apple"),
-- DMI_MATCH(DMI_PRODUCT_NAME, "iMac5") },
-- &applesmc_dmi_data[10]},
-- { applesmc_dmi_match, "Apple iMac", {
-- DMI_MATCH(DMI_BOARD_VENDOR,"Apple"),
-- DMI_MATCH(DMI_PRODUCT_NAME,"iMac") },
-- &applesmc_dmi_data[5]},
-- { .ident = NULL }
--};
-+static void applesmc_release_light_sensor(void)
-+{
-+ if (!smcreg.num_light_sensors)
-+ return;
-+ applesmc_destroy_nodes(light_sensor_group);
-+}
-
--static int __init applesmc_init(void)
-+static int applesmc_create_key_backlight(void)
-+{
-+ if (!smcreg.has_key_backlight)
-+ return 0;
-+ applesmc_led_wq = create_singlethread_workqueue("applesmc-led");
-+ if (!applesmc_led_wq)
-+ return -ENOMEM;
-+ return led_classdev_register(&pdev->dev, &applesmc_backlight);
-+}
-+
-+static void applesmc_release_key_backlight(void)
-+{
-+ if (!smcreg.has_key_backlight)
-+ return;
-+ led_classdev_unregister(&applesmc_backlight);
-+ destroy_workqueue(applesmc_led_wq);
-+}
-+
-+static void applesmc_set_interrupt(u8 enable)
-+{
-+ applesmc_write_key(NOTIFICATION_KEY, &enable, 1);
-+}
-+
-+static irqreturn_t applesmc_interrupt(int irq, void *dev)
-+{
-+ printk("SMC Interrupt\n");
-+ return IRQ_HANDLED;
-+}
-+
-+static int __devinit applesmc_pnp_probe(struct pnp_dev *dev,
-+ const struct pnp_device_id *dev_id)
- {
- int ret;
-- int count;
-- int i;
-+ struct resource *res;
-+ struct applesmc_pnp_device *applesmc_pnp_device;
-
-- if (!dmi_check_system(applesmc_whitelist)) {
-- printk(KERN_WARNING "applesmc: supported laptop not found!\n");
-- ret = -ENODEV;
-+ pdev = dev;
-+
-+ applesmc_pnp_device = kzalloc(sizeof(struct applesmc_pnp_device),
-+ GFP_KERNEL);
-+
-+ if (!applesmc_pnp_device) {
-+ ret = -ENOMEM;
- goto out;
- }
-
-- if (!request_region(APPLESMC_DATA_PORT, APPLESMC_NR_PORTS,
-- "applesmc")) {
-+ pnp_device = applesmc_pnp_device;
-+
-+ pnp_set_drvdata(dev, applesmc_pnp_device);
-+
-+ res = pnp_get_resource(dev, IORESOURCE_IO, 0);
-+
-+ if (!res) {
- ret = -ENXIO;
- goto out;
- }
-
-- ret = platform_driver_register(&applesmc_driver);
-- if (ret)
-- goto out_region;
-+ applesmc_pnp_device->iobase = res->start;
-+ applesmc_pnp_device->iolen = res->end - res->start + 1;
-
-- pdev = platform_device_register_simple("applesmc", APPLESMC_DATA_PORT,
-- NULL, 0);
-- if (IS_ERR(pdev)) {
-- ret = PTR_ERR(pdev);
-- goto out_driver;
-+ if (!request_region(pnp_device->iobase, pnp_device->iolen, "applesmc")) {
-+ ret = -ENXIO;
-+ goto out;
- }
-
-- ret = sysfs_create_file(&pdev->dev.kobj, &dev_attr_name.attr);
-+ /* create register cache */
-+ ret = applesmc_init_smcreg();
- if (ret)
-- goto out_device;
--
-- /* Create key enumeration sysfs files */
-- ret = sysfs_create_group(&pdev->dev.kobj, &key_enumeration_group);
-- if (ret)
-- goto out_name;
--
-- /* create fan files */
-- count = applesmc_get_fan_count();
-- if (count < 0)
-- printk(KERN_ERR "applesmc: Cannot get the number of fans.\n");
-- else
-- printk(KERN_INFO "applesmc: %d fans found.\n", count);
-+ goto out_region;
-
-- if (count > 4) {
-- count = 4;
-- printk(KERN_WARNING "applesmc: More than 4 fans found,"
-- " but at most 4 fans are supported"
-- " by the driver.\n");
-- }
-+ applesmc_device_init();
-
-- while (fans_handled < count) {
-- ret = sysfs_create_group(&pdev->dev.kobj,
-- &fan_attribute_groups[fans_handled]);
-- if (ret)
-- goto out_fans;
-- fans_handled++;
-- }
-+ ret = applesmc_create_nodes(info_group, 1);
-+ if (ret)
-+ goto out_smcreg;
-
-- for (i = 0;
-- temperature_sensors_sets[applesmc_temperature_set][i] != NULL;
-- i++) {
-- if (temperature_attributes[i] == NULL ||
-- label_attributes[i] == NULL) {
-- printk(KERN_ERR "applesmc: More temperature sensors "
-- "in temperature_sensors_sets (at least %i)"
-- "than available sysfs files in "
-- "temperature_attributes (%i), please report "
-- "this bug.\n", i, i-1);
-- goto out_temperature;
-- }
-- ret = sysfs_create_file(&pdev->dev.kobj,
-- temperature_attributes[i]);
-- if (ret)
-- goto out_temperature;
-- ret = sysfs_create_file(&pdev->dev.kobj,
-- label_attributes[i]);
-- if (ret)
-- goto out_temperature;
-- }
-+ ret = applesmc_create_nodes(fan_group, smcreg.fan_count);
-+ if (ret)
-+ goto out_info;
-
-- if (applesmc_accelerometer) {
-- ret = applesmc_create_accelerometer();
-- if (ret)
-- goto out_temperature;
-- }
-+ ret = applesmc_create_nodes(temp_group, smcreg.temp_count);
-+ if (ret)
-+ goto out_fans;
-
-- if (applesmc_light) {
-- /* Add light sensor file */
-- ret = sysfs_create_file(&pdev->dev.kobj, &dev_attr_light.attr);
-- if (ret)
-- goto out_accelerometer;
-+ ret = applesmc_create_accelerometer();
-+ if (ret)
-+ goto out_temperature;
-
-- /* Create the workqueue */
-- applesmc_led_wq = create_singlethread_workqueue("applesmc-led");
-- if (!applesmc_led_wq) {
-- ret = -ENOMEM;
-- goto out_light_sysfs;
-- }
-+ ret = applesmc_create_light_sensor();
-+ if (ret)
-+ goto out_accelerometer;
-
-- /* register as a led device */
-- ret = led_classdev_register(&pdev->dev, &applesmc_backlight);
-- if (ret < 0)
-- goto out_light_wq;
-- }
-+ ret = applesmc_create_key_backlight();
-+ if (ret)
-+ goto out_light_sysfs;
-
- hwmon_dev = hwmon_device_register(&pdev->dev);
- if (IS_ERR(hwmon_dev)) {
-@@ -1745,65 +1266,85 @@ static int __init applesmc_init(void)
- goto out_light_ledclass;
- }
-
-- printk(KERN_INFO "applesmc: driver successfully loaded.\n");
-+ res = pnp_get_resource(dev, IORESOURCE_IRQ, 0);
-+
-+ if (res) {
-+ applesmc_pnp_device->irq = res->start;
-+ ret = request_irq(res->start, applesmc_interrupt, IRQF_SHARED,
-+ "applesmc", dev);
-+ if (ret)
-+ applesmc_pnp_device->irq = 0;
-+ else
-+ applesmc_set_interrupt(1);
-+ }
-
- return 0;
-
- out_light_ledclass:
-- if (applesmc_light)
-- led_classdev_unregister(&applesmc_backlight);
--out_light_wq:
-- if (applesmc_light)
-- destroy_workqueue(applesmc_led_wq);
-+ applesmc_release_key_backlight();
- out_light_sysfs:
-- if (applesmc_light)
-- sysfs_remove_file(&pdev->dev.kobj, &dev_attr_light.attr);
-+ applesmc_release_light_sensor();
- out_accelerometer:
-- if (applesmc_accelerometer)
-- applesmc_release_accelerometer();
-+ applesmc_release_accelerometer();
- out_temperature:
-- sysfs_remove_group(&pdev->dev.kobj, &label_attributes_group);
-- sysfs_remove_group(&pdev->dev.kobj, &temperature_attributes_group);
-+ applesmc_destroy_nodes(temp_group);
- out_fans:
-- while (fans_handled)
-- sysfs_remove_group(&pdev->dev.kobj,
-- &fan_attribute_groups[--fans_handled]);
-- sysfs_remove_group(&pdev->dev.kobj, &key_enumeration_group);
--out_name:
-- sysfs_remove_file(&pdev->dev.kobj, &dev_attr_name.attr);
--out_device:
-- platform_device_unregister(pdev);
--out_driver:
-- platform_driver_unregister(&applesmc_driver);
-+ applesmc_destroy_nodes(fan_group);
-+out_info:
-+ applesmc_destroy_nodes(info_group);
-+out_smcreg:
-+ applesmc_destroy_smcreg();
- out_region:
-- release_region(APPLESMC_DATA_PORT, APPLESMC_NR_PORTS);
-+ release_region(pnp_device->iobase, pnp_device->iolen);
- out:
-- printk(KERN_WARNING "applesmc: driver init failed (ret=%d)!\n", ret);
-+ pr_warn("driver init failed (ret=%d)!\n", ret);
- return ret;
- }
-
--static void __exit applesmc_exit(void)
-+static void __devexit applesmc_pnp_remove(struct pnp_dev *dev)
- {
-- hwmon_device_unregister(hwmon_dev);
-- if (applesmc_light) {
-- led_classdev_unregister(&applesmc_backlight);
-- destroy_workqueue(applesmc_led_wq);
-- sysfs_remove_file(&pdev->dev.kobj, &dev_attr_light.attr);
-+ struct applesmc_pnp_device *applesmc_pnp_device = pnp_get_drvdata(dev);
-+
-+ if (applesmc_pnp_device->irq) {
-+ applesmc_set_interrupt(0);
-+ free_irq(applesmc_pnp_device->irq, dev);
- }
-- if (applesmc_accelerometer)
-- applesmc_release_accelerometer();
-- sysfs_remove_group(&pdev->dev.kobj, &label_attributes_group);
-- sysfs_remove_group(&pdev->dev.kobj, &temperature_attributes_group);
-- while (fans_handled)
-- sysfs_remove_group(&pdev->dev.kobj,
-- &fan_attribute_groups[--fans_handled]);
-- sysfs_remove_group(&pdev->dev.kobj, &key_enumeration_group);
-- sysfs_remove_file(&pdev->dev.kobj, &dev_attr_name.attr);
-- platform_device_unregister(pdev);
-- platform_driver_unregister(&applesmc_driver);
-- release_region(APPLESMC_DATA_PORT, APPLESMC_NR_PORTS);
--
-- printk(KERN_INFO "applesmc: driver unloaded.\n");
-+
-+ hwmon_device_unregister(hwmon_dev);
-+ applesmc_release_key_backlight();
-+ applesmc_release_light_sensor();
-+ applesmc_release_accelerometer();
-+ applesmc_destroy_nodes(temp_group);
-+ applesmc_destroy_nodes(fan_group);
-+ applesmc_destroy_nodes(info_group);
-+ applesmc_destroy_smcreg();
-+ release_region(pnp_device->iobase, pnp_device->iolen);
-+ kfree(applesmc_pnp_device);
-+}
-+
-+static const struct pnp_device_id applesmc_dev_table[] = {
-+ {"APP0001", 0},
-+ {"", 0},
-+};
-+
-+static struct pnp_driver applesmc_pnp_driver = {
-+ .name = "Apple SMC",
-+ .probe = applesmc_pnp_probe,
-+ .remove = applesmc_pnp_remove,
-+ .id_table = applesmc_dev_table,
-+ .driver = {
-+ .pm = &applesmc_pm_ops,
-+ },
-+};
-+
-+static int __init applesmc_init(void)
-+{
-+ return pnp_register_driver(&applesmc_pnp_driver);
-+}
-+
-+static void __exit applesmc_exit(void)
-+{
-+ pnp_unregister_driver(&applesmc_pnp_driver);
- }
-
- module_init(applesmc_init);
-@@ -1812,4 +1353,4 @@ module_exit(applesmc_exit);
- MODULE_AUTHOR("Nicolas Boichat");
- MODULE_DESCRIPTION("Apple SMC");
- MODULE_LICENSE("GPL v2");
--MODULE_DEVICE_TABLE(dmi, applesmc_whitelist);
-+MODULE_DEVICE_TABLE(pnp, applesmc_dev_table);
diff --git a/freed-ora/current/master/ath5k-fix-fast-channel-change.patch b/freed-ora/current/master/ath5k-fix-fast-channel-change.patch
new file mode 100644
index 000000000..cb1cbf392
--- /dev/null
+++ b/freed-ora/current/master/ath5k-fix-fast-channel-change.patch
@@ -0,0 +1,213 @@
+From sgruszka@redhat.com Thu Feb 3 07:58:52 2011
+Date: Thu, 3 Feb 2011 13:58:51 +0100
+From: Stanislaw Gruszka <sgruszka@redhat.com>
+To: kernel@lists.fedoraproject.org
+Cc: Kyle McMartin <kmcmartin@redhat.com>
+Subject: [PATCH F-15] ath5k: fix fast channel change
+Message-ID: <20110203125134.GA4515@redhat.com>
+
+From: Nick Kossifidis <mickflemm@gmail.com>
+
+ Fast channel change fixes:
+
+ a) Always set OFDM timings
+ b) Don't re-activate PHY
+ c) Enable only NF calibration, not AGC
+
+Resolves:
+https://bugzilla.redhat.com/show_bug.cgi?id=672778
+
+---
+ drivers/net/wireless/ath/ath5k/phy.c | 142 +++++++++++++++++++++-------------
+ 1 files changed, 87 insertions(+), 55 deletions(-)
+
+diff --git a/drivers/net/wireless/ath/ath5k/phy.c b/drivers/net/wireless/ath/ath5k/phy.c
+index 78c26fd..d673ab2 100644
+--- a/drivers/net/wireless/ath/ath5k/phy.c
++++ b/drivers/net/wireless/ath/ath5k/phy.c
+@@ -282,6 +282,34 @@ int ath5k_hw_phy_disable(struct ath5k_hw *ah)
+ return 0;
+ }
+
++/*
++ * Wait for synth to settle
++ */
++static void ath5k_hw_wait_for_synth(struct ath5k_hw *ah,
++ struct ieee80211_channel *channel)
++{
++ /*
++ * On 5211+ read activation -> rx delay
++ * and use it (100ns steps).
++ */
++ if (ah->ah_version != AR5K_AR5210) {
++ u32 delay;
++ delay = ath5k_hw_reg_read(ah, AR5K_PHY_RX_DELAY) &
++ AR5K_PHY_RX_DELAY_M;
++ delay = (channel->hw_value & CHANNEL_CCK) ?
++ ((delay << 2) / 22) : (delay / 10);
++ if (ah->ah_bwmode == AR5K_BWMODE_10MHZ)
++ delay = delay << 1;
++ if (ah->ah_bwmode == AR5K_BWMODE_5MHZ)
++ delay = delay << 2;
++ /* XXX: /2 on turbo ? Let's be safe
++ * for now */
++ udelay(100 + delay);
++ } else {
++ mdelay(1);
++ }
++}
++
+
+ /**********************\
+ * RF Gain optimization *
+@@ -3237,6 +3265,13 @@ int ath5k_hw_phy_init(struct ath5k_hw *ah, struct ieee80211_channel *channel,
+ /* Failed */
+ if (i >= 100)
+ return -EIO;
++
++ /* Set channel and wait for synth */
++ ret = ath5k_hw_channel(ah, channel);
++ if (ret)
++ return ret;
++
++ ath5k_hw_wait_for_synth(ah, channel);
+ }
+
+ /*
+@@ -3251,13 +3286,53 @@ int ath5k_hw_phy_init(struct ath5k_hw *ah, struct ieee80211_channel *channel,
+ if (ret)
+ return ret;
+
++ /* Write OFDM timings on 5212*/
++ if (ah->ah_version == AR5K_AR5212 &&
++ channel->hw_value & CHANNEL_OFDM) {
++
++ ret = ath5k_hw_write_ofdm_timings(ah, channel);
++ if (ret)
++ return ret;
++
++ /* Spur info is available only from EEPROM versions
++ * greater than 5.3, but the EEPROM routines will use
++ * static values for older versions */
++ if (ah->ah_mac_srev >= AR5K_SREV_AR5424)
++ ath5k_hw_set_spur_mitigation_filter(ah,
++ channel);
++ }
++
++ /* If we used fast channel switching
++ * we are done, release RF bus and
++ * fire up NF calibration.
++ *
++ * Note: Only NF calibration due to
++ * channel change, not AGC calibration
++ * since AGC is still running !
++ */
++ if (fast) {
++ /*
++ * Release RF Bus grant
++ */
++ AR5K_REG_DISABLE_BITS(ah, AR5K_PHY_RFBUS_REQ,
++ AR5K_PHY_RFBUS_REQ_REQUEST);
++
++ /*
++ * Start NF calibration
++ */
++ AR5K_REG_ENABLE_BITS(ah, AR5K_PHY_AGCCTL,
++ AR5K_PHY_AGCCTL_NF);
++
++ return ret;
++ }
++
+ /*
+ * For 5210 we do all initialization using
+ * initvals, so we don't have to modify
+ * any settings (5210 also only supports
+ * a/aturbo modes)
+ */
+- if ((ah->ah_version != AR5K_AR5210) && !fast) {
++ if (ah->ah_version != AR5K_AR5210) {
+
+ /*
+ * Write initial RF gain settings
+@@ -3276,22 +3351,6 @@ int ath5k_hw_phy_init(struct ath5k_hw *ah, struct ieee80211_channel *channel,
+ if (ret)
+ return ret;
+
+- /* Write OFDM timings on 5212*/
+- if (ah->ah_version == AR5K_AR5212 &&
+- channel->hw_value & CHANNEL_OFDM) {
+-
+- ret = ath5k_hw_write_ofdm_timings(ah, channel);
+- if (ret)
+- return ret;
+-
+- /* Spur info is available only from EEPROM versions
+- * greater than 5.3, but the EEPROM routines will use
+- * static values for older versions */
+- if (ah->ah_mac_srev >= AR5K_SREV_AR5424)
+- ath5k_hw_set_spur_mitigation_filter(ah,
+- channel);
+- }
+-
+ /*Enable/disable 802.11b mode on 5111
+ (enable 2111 frequency converter + CCK)*/
+ if (ah->ah_radio == AR5K_RF5111) {
+@@ -3322,47 +3381,20 @@ int ath5k_hw_phy_init(struct ath5k_hw *ah, struct ieee80211_channel *channel,
+ */
+ ath5k_hw_reg_write(ah, AR5K_PHY_ACT_ENABLE, AR5K_PHY_ACT);
+
++ ath5k_hw_wait_for_synth(ah, channel);
++
+ /*
+- * On 5211+ read activation -> rx delay
+- * and use it.
++ * Perform ADC test to see if baseband is ready
++ * Set tx hold and check adc test register
+ */
+- if (ah->ah_version != AR5K_AR5210) {
+- u32 delay;
+- delay = ath5k_hw_reg_read(ah, AR5K_PHY_RX_DELAY) &
+- AR5K_PHY_RX_DELAY_M;
+- delay = (channel->hw_value & CHANNEL_CCK) ?
+- ((delay << 2) / 22) : (delay / 10);
+- if (ah->ah_bwmode == AR5K_BWMODE_10MHZ)
+- delay = delay << 1;
+- if (ah->ah_bwmode == AR5K_BWMODE_5MHZ)
+- delay = delay << 2;
+- /* XXX: /2 on turbo ? Let's be safe
+- * for now */
+- udelay(100 + delay);
+- } else {
+- mdelay(1);
+- }
+-
+- if (fast)
+- /*
+- * Release RF Bus grant
+- */
+- AR5K_REG_DISABLE_BITS(ah, AR5K_PHY_RFBUS_REQ,
+- AR5K_PHY_RFBUS_REQ_REQUEST);
+- else {
+- /*
+- * Perform ADC test to see if baseband is ready
+- * Set tx hold and check adc test register
+- */
+- phy_tst1 = ath5k_hw_reg_read(ah, AR5K_PHY_TST1);
+- ath5k_hw_reg_write(ah, AR5K_PHY_TST1_TXHOLD, AR5K_PHY_TST1);
+- for (i = 0; i <= 20; i++) {
+- if (!(ath5k_hw_reg_read(ah, AR5K_PHY_ADC_TEST) & 0x10))
+- break;
+- udelay(200);
+- }
+- ath5k_hw_reg_write(ah, phy_tst1, AR5K_PHY_TST1);
++ phy_tst1 = ath5k_hw_reg_read(ah, AR5K_PHY_TST1);
++ ath5k_hw_reg_write(ah, AR5K_PHY_TST1_TXHOLD, AR5K_PHY_TST1);
++ for (i = 0; i <= 20; i++) {
++ if (!(ath5k_hw_reg_read(ah, AR5K_PHY_ADC_TEST) & 0x10))
++ break;
++ udelay(200);
+ }
++ ath5k_hw_reg_write(ah, phy_tst1, AR5K_PHY_TST1);
+
+ /*
+ * Start automatic gain control calibration
diff --git a/freed-ora/current/master/config-arm b/freed-ora/current/master/config-arm
index 22335ef40..e2d8af390 100644
--- a/freed-ora/current/master/config-arm
+++ b/freed-ora/current/master/config-arm
@@ -89,6 +89,8 @@ CONFIG_USB_TUSB6010=y
# CONFIG_USB_MUSB_DEBUG is not set
CONFIG_MMC_ARMMMCI=m
+CONFIG_MMC_DW=m
+# CONFIG_MMC_DW_IDMAC is not set
CONFIG_RTC_DRV_PL030=m
CONFIG_RTC_DRV_PL031=m
@@ -129,3 +131,7 @@ CONFIG_SECCOMP=y
CONFIG_STRICT_DEVMEM=y
# CONFIG_AMBA_PL08X is not set
+
+# CONFIG_HVC_DCC is not set
+
+CONFIG_SPARSE_IRQ=y
diff --git a/freed-ora/current/master/config-debug b/freed-ora/current/master/config-debug
index 5366a8461..86aa2cc04 100644
--- a/freed-ora/current/master/config-debug
+++ b/freed-ora/current/master/config-debug
@@ -97,3 +97,5 @@ CONFIG_KDB_KEYBOARD=y
CONFIG_DEBUG_OBJECTS_PERCPU_COUNTER=y
CONFIG_TEST_LIST_SORT=y
+
+CONFIG_DEBUG_SET_MODULE_RONX=y
diff --git a/freed-ora/current/master/config-generic b/freed-ora/current/master/config-generic
index 6111cecac..b4b71eab7 100644
--- a/freed-ora/current/master/config-generic
+++ b/freed-ora/current/master/config-generic
@@ -40,6 +40,7 @@ CONFIG_SYSCTL=y
CONFIG_LOG_BUF_SHIFT=17
# CONFIG_IKCONFIG is not set
# CONFIG_EMBEDDED is not set
+# CONFIG_EXPERT is not set
CONFIG_KALLSYMS=y
CONFIG_KALLSYMS_ALL=y
CONFIG_KALLSYMS_EXTRA_PASS=y
@@ -123,6 +124,7 @@ CONFIG_SDIO_UART=m
# CONFIG_MMC_TEST is not set
# CONFIG_MMC_DEBUG is not set
# CONFIG_MMC_UNSAFE_RESUME is not set
+# CONFIG_MMC_CLKGATE is not set
CONFIG_MMC_BLOCK=m
CONFIG_MMC_BLOCK_MINORS=8
CONFIG_MMC_BLOCK_BOUNCE=y
@@ -433,7 +435,7 @@ CONFIG_VIRTIO_BALLOON=m
CONFIG_VIRTIO_NET=m
CONFIG_VMXNET3=m
CONFIG_HW_RANDOM_VIRTIO=m
-CONFIG_VIRTIO_CONSOLE=m
+CONFIG_VIRTIO_CONSOLE=y
CONFIG_VHOST_NET=m
#
@@ -564,6 +566,7 @@ CONFIG_SATA_SX4=m
CONFIG_SATA_ULI=m
CONFIG_SATA_VIA=m
CONFIG_SATA_VITESSE=m
+CONFIG_SATA_ACARD_AHCI=m
CONFIG_PATA_ACPI=m
CONFIG_PATA_ALI=m
@@ -687,6 +690,7 @@ CONFIG_DM_ZERO=y
CONFIG_DM_LOG_USERSPACE=m
CONFIG_DM_MULTIPATH_QL=m
CONFIG_DM_MULTIPATH_ST=m
+CONFIG_DM_RAID=m
#
# Fusion MPT device support
@@ -1436,6 +1440,7 @@ CONFIG_B43_PCMCIA=y
CONFIG_B43_SDIO=y
# CONFIG_B43_DEBUG is not set
CONFIG_B43_PHY_LP=y
+CONFIG_B43_PHY_N=y
# CONFIG_B43_FORCE_PIO is not set
CONFIG_B43LEGACY=m
# CONFIG_B43LEGACY_DEBUG is not set
@@ -1503,12 +1508,12 @@ CONFIG_RT2500PCI=m
CONFIG_RT61PCI=m
CONFIG_RT2500USB=m
CONFIG_RT2800USB=m
-# CONFIG_RT2800USB_RT30XX is not set
-# CONFIG_RT2800USB_RT35XX is not set
-# CONFIG_RT2800USB_UNKNOWN is not set
+CONFIG_RT2800USB_RT33XX=y
+CONFIG_RT2800USB_RT35XX=y
+CONFIG_RT2800USB_UNKNOWN=y
CONFIG_RT2800PCI=m
-# CONFIG_RT2800PCI_RT30XX is not set
-# CONFIG_RT2800PCI_RT35XX is not set
+CONFIG_RT2800PCI_RT33XX=y
+CONFIG_RT2800PCI_RT35XX=y
CONFIG_RT73USB=m
CONFIG_RTL8180=m
CONFIG_RTL8187=m
@@ -1520,7 +1525,13 @@ CONFIG_ZD1211RW=m
# CONFIG_ZD1211RW_DEBUG is not set
CONFIG_AR9170_USB=m
-CONFIG_WL12XX=y
+CONFIG_WL12XX_MENU=m
+CONFIG_WL12XX=m
+# CONFIG_WL12XX_HT is not set
+CONFIG_WL12XX_SPI=m
+CONFIG_WL12XX_SDIO=m
+# CONFIG_WL12XX_SDIO_TEST is not set
+
CONFIG_WL1251=m
CONFIG_WL1251_SPI=m
CONFIG_WL1251_SDIO=m
@@ -1528,6 +1539,8 @@ CONFIG_WL1271=m
CONFIG_WL1271_SDIO=m
CONFIG_WL1271_SPI=m
+CONFIG_RTL8192CE=m
+
#
# Token Ring devices
#
@@ -1583,7 +1596,10 @@ CONFIG_CAN_ESD_USB2=m
CONFIG_CAN_KVASER_PCI=m
CONFIG_CAN_PLX_PCI=m
CONFIG_CAN_TSCAN1=m
-CONFIG_PCH_CAN=m
+CONFIG_CAN_SLCAN=m
+CONFIG_CAN_SOFTING=m
+CONFIG_CAN_SOFTING_CS=m
+# CONFIG_PCH_CAN is not set
CONFIG_NETROM=m
CONFIG_ROSE=m
CONFIG_MKISS=m
@@ -1832,6 +1848,8 @@ CONFIG_INPUT_CM109=m
CONFIG_INPUT_POLLDEV=m
CONFIG_INPUT_SPARSEKMAP=m
# CONFIG_INPUT_ADXL34X is not set
+CONFIG_INPUT_CMA3000=m
+CONFIG_INPUT_CMA3000_I2C=m
#
# Input I/O drivers
@@ -1911,6 +1929,7 @@ CONFIG_JOYSTICK_XPAD=m
CONFIG_JOYSTICK_XPAD_FF=y
CONFIG_JOYSTICK_XPAD_LEDS=y
CONFIG_JOYSTICK_ZHENHUA=m
+# CONFIG_JOYSTICK_AS5011 is not set
CONFIG_INPUT_TOUCHSCREEN=y
# CONFIG_TOUCHSCREEN_AD7879 is not set
@@ -1941,6 +1960,7 @@ CONFIG_TOUCHSCREEN_USB_COMPOSITE=m
# CONFIG_TOUCHSCREEN_WM97XX is not set
CONFIG_TOUCHSCREEN_W90X900=m
# CONFIG_TOUCHSCREEN_BU21013 is not set
+CONFIG_TOUCHSCREEN_ST1232=m
CONFIG_INPUT_MISC=y
CONFIG_INPUT_PCSPKR=m
@@ -1997,7 +2017,7 @@ CONFIG_SERIAL_8250_RUNTIME_UARTS=4
CONFIG_SERIAL_8250_EXTENDED=y
CONFIG_SERIAL_8250_MANY_PORTS=y
CONFIG_SERIAL_8250_SHARE_IRQ=y
-CONFIG_SERIAL_8250_DETECT_IRQ=y
+# CONFIG_SERIAL_8250_DETECT_IRQ is not set
CONFIG_SERIAL_8250_RSA=y
# CONFIG_COMPUTONE is not set
CONFIG_CYCLADES=m
@@ -2067,6 +2087,7 @@ CONFIG_I2C_ALGOPCA=m
# CONFIG_I2C_ISCH is not set
# CONFIG_I2C_NFORCE2_S4985 is not set
# CONFIG_I2C_INTEL_MID is not set
+# CONFIG_I2C_EG20T is not set
CONFIG_EEPROM_AT24=m
CONFIG_EEPROM_LEGACY=m
@@ -2198,10 +2219,13 @@ CONFIG_SENSORS_LTC4261=m
# CONFIG_SENSORS_GPIO_FAN is not set
CONFIG_SENSORS_W83795=m
# CONFIG_SENSORS_W83795_FANCTRL is not set
+CONFIG_SENSORS_DS620=m
+CONFIG_SENSORS_SHT21=m
# CONFIG_HMC6352 is not set
# CONFIG_BMP085 is not set
# CONFIG_PCH_PHUB is not set
+# CONFIG_SERIAL_PCH_UART is not set
CONFIG_W1=m
CONFIG_W1_CON=y
@@ -2218,6 +2242,8 @@ CONFIG_W1_SLAVE_DS2431=m
CONFIG_W1_SLAVE_DS2433=m
CONFIG_W1_SLAVE_DS2433_CRC=y
CONFIG_W1_SLAVE_DS2760=m
+CONFIG_W1_SLAVE_DS2423=m
+
#
# Mice
#
@@ -2418,6 +2444,7 @@ CONFIG_VIDEO_EM28XX_DVB=m
CONFIG_VIDEO_CX231XX=m
CONFIG_VIDEO_CX231XX_ALSA=m
CONFIG_VIDEO_CX231XX_DVB=m
+CONFIG_VIDEO_CX231XX_RC=y
CONFIG_VIDEO_HEXIUM_ORION=m
CONFIG_VIDEO_HEXIUM_GEMINI=m
CONFIG_VIDEO_IVTV=m
@@ -2447,6 +2474,7 @@ CONFIG_VIDEO_ZORAN_ZR36060=m
CONFIG_VIDEO_FB_IVTV=m
CONFIG_VIDEO_SAA7164=m
CONFIG_VIDEO_TLG2300=m
+# CONFIG_VIDEO_TIMBERDALE is not set
CONFIG_USB_VIDEO_CLASS=m
CONFIG_USB_VIDEO_CLASS_INPUT_EVDEV=y
@@ -2457,6 +2485,7 @@ CONFIG_USB_VIDEO_CLASS_INPUT_EVDEV=y
CONFIG_RADIO_GEMTEK_PCI=m
CONFIG_RADIO_MAXIRADIO=m
CONFIG_RADIO_MAESTRO=m
+CONFIG_RADIO_WL1273=m
CONFIG_MEDIA_ATTACH=y
CONFIG_MEDIA_TUNER_CUSTOMISE=y
@@ -2573,6 +2602,7 @@ CONFIG_DVB_LGS8GL5=m
CONFIG_DVB_DUMMY_FE=m
CONFIG_DVB_FIREDTV=m
CONFIG_DVB_NGENE=m
+CONFIG_DVB_MB86A20S=m
#
# Supported SAA7146 based PCI Adapters
@@ -2637,6 +2667,8 @@ CONFIG_VIDEO_PVRUSB2=m
CONFIG_VIDEO_PVRUSB2_SYSFS=y
# CONFIG_VIDEO_PVRUSB2_DEBUGIFC is not set
+CONFIG_RC_CORE=m
+CONFIG_RC_LOOPBACK=m
CONFIG_RC_MAP=m
CONFIG_IR_NEC_DECODER=m
CONFIG_IR_RC5_DECODER=m
@@ -3017,6 +3049,7 @@ CONFIG_HID_3M_PCT=y
CONFIG_LOGIG940_FF=y
CONFIG_HID_MAGICMOUSE=y
CONFIG_HID_MOSART=y
+CONFIG_HID_MULTITOUCH=m
CONFIG_HID_NTRIG=y
CONFIG_HID_QUANTA=y
CONFIG_HID_STANTUM=y
@@ -3042,10 +3075,12 @@ CONFIG_HID_THRUSTMASTER=m
CONFIG_HID_ZEROPLUS=m
CONFIG_HID_ZYDACRON=m
CONFIG_HID_ACRUX_FF=m
+CONFIG_HID_EMS_FF=m
CONFIG_HID_ELECOM=m
CONFIG_HID_UCLOGIC=m
CONFIG_HID_WALTOP=m
CONFIG_HID_ROCCAT_PYRA=m
+CONFIG_HID_ROCCAT_KONEPLUS=m
#
# USB Imaging devices
@@ -3128,6 +3163,7 @@ CONFIG_SOC_CAMERA_RJ54N1=m
CONFIG_SOC_CAMERA_OV9640=m
CONFIG_SOC_CAMERA_OV6650=m
CONFIG_SOC_CAMERA_IMX074=m
+CONFIG_SOC_CAMERA_OV2640=m
#
# USB Network adaptors
@@ -3149,6 +3185,7 @@ CONFIG_USB_NET_MCS7830=m
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_ZAURUS=m
CONFIG_USB_NET_CX82310_ETH=m
CONFIG_USB_NET_INT51X1=m
@@ -3356,6 +3393,7 @@ CONFIG_MFD_WM8400=m
# CONFIG_MFD_RDC321X is not set
# CONFIG_MFD_JANZ_CMODIO is not set
# CONFIG_MFD_WM831X_I2C is not set
+CONFIG_MFD_CS5535=m
#
# File systems
@@ -3482,6 +3520,7 @@ CONFIG_CRAMFS=m
CONFIG_SQUASHFS=m
CONFIG_SQUASHFS_XATTR=y
CONFIG_SQUASHFS_LZO=y
+CONFIG_SQUASHFS_XZ=y
# CONFIG_SQUASHFS_EMBEDDED is not set
CONFIG_VXFS_FS=m
# CONFIG_HPFS_FS is not set
@@ -3696,12 +3735,14 @@ CONFIG_AUDITSYSCALL=y
#
CONFIG_CRYPTO=y
CONFIG_CRYPTO_FIPS=y
+CONFIG_CRYPTO_USER_API_HASH=y
+CONFIG_CRYPTO_USER_API_SKCIPHER=y
CONFIG_CRYPTO_MANAGER_TESTS=y
CONFIG_CRYPTO_HW=y
CONFIG_CRYPTO_BLKCIPHER=y
CONFIG_CRYPTO_MANAGER=m
# CONFIG_CRYPTO_CRYPTD is not set
-CONFIG_CRYPTO_AES=m
+CONFIG_CRYPTO_AES=y
CONFIG_CRYPTO_ARC4=m
CONFIG_CRYPTO_ANUBIS=m
CONFIG_CRYPTO_AUTHENC=m
@@ -3709,14 +3750,14 @@ CONFIG_CRYPTO_BLOWFISH=m
CONFIG_CRYPTO_CAMELLIA=m
CONFIG_CRYPTO_CAST5=m
CONFIG_CRYPTO_CAST6=m
-CONFIG_CRYPTO_CBC=m
+CONFIG_CRYPTO_CBC=y
CONFIG_CRYPTO_CCM=m
CONFIG_CRYPTO_CRC32C=y
-CONFIG_CRYPTO_CTR=m
+CONFIG_CRYPTO_CTR=y
CONFIG_CRYPTO_CTS=m
CONFIG_CRYPTO_DEFLATE=m
CONFIG_CRYPTO_DES=m
-CONFIG_CRYPTO_ECB=m
+CONFIG_CRYPTO_ECB=y
CONFIG_CRYPTO_FCRYPT=m
CONFIG_CRYPTO_GCM=m
CONFIG_CRYPTO_GF128MUL=m
@@ -3774,6 +3815,8 @@ CONFIG_ZLIB_DEFLATE=m
CONFIG_INITRAMFS_SOURCE=""
CONFIG_KEYS=y
+CONFIG_TRUSTED_KEYS=m
+CONFIG_ENCRYPTED_KEYS=m
CONFIG_KEYS_DEBUG_PROC_KEYS=y
CONFIG_CDROM_PKTCDVD=m
CONFIG_CDROM_PKTCDVD_BUFFERS=8
@@ -3802,6 +3845,7 @@ CONFIG_FAIR_GROUP_SCHED=y
CONFIG_SCHED_OMIT_FRAME_POINTER=y
CONFIG_GROUP_SCHED=y
CONFIG_RT_GROUP_SCHED=y
+CONFIG_SCHED_AUTOGROUP=y
CONFIG_CPUSETS=y
CONFIG_PROC_PID_CPUSET=y
@@ -4077,15 +4121,17 @@ CONFIG_POWER_SUPPLY=m
# CONFIG_POWER_SUPPLY_DEBUG is not set
# CONFIG_TEST_POWER is not set
CONFIG_APM_POWER=m
-CONFIG_WM831X_POWER=m
+# CONFIG_WM831X_POWER is not set
# CONFIG_BATTERY_DS2760 is not set
# CONFIG_BATTERY_DS2782 is not set
# CONFIG_BATTERY_BQ20Z75 is not set
# CONFIG_CHARGER_ISP1704 is not set
CONFIG_BATTERY_PMU=m
-CONFIG_BATTERY_BQ27x00=m
-CONFIG_BATTERY_MAX17040=m
+# CONFIG_BATTERY_BQ27x00 is not set
+# CONFIG_BATTERY_MAX17040 is not set
# CONFIG_PDA_POWER is not set
+# CONFIG_CHARGER_GPIO is not set
+# CONFIG_BATTERY_MAX17042 is not set
CONFIG_AUXDISPLAY=y
@@ -4281,6 +4327,9 @@ CONFIG_USB_ATMEL=m
# CONFIG_BCM_WIMAX is not set
# CONFIG_FT1000 is not set
# CONFIG_SPEAKUP is not set
+# CONFIG_DX_SEP is not set
+# CONFIG_TOUCHSCREEN_SYNAPTICS_I2C_RMI4 is not set
+# CONFIG_TOUCHSCREEN_CLEARPAD_TM1217 is not set
#
# Android
@@ -4323,6 +4372,7 @@ CONFIG_STRIP_ASM_SYMS=y
# CONFIG_RCU_FANOUT_EXACT is not set
CONFIG_RCU_FAST_NO_HZ=y
+CONFIG_SRCU_SYNCHRONIZE_DELAY=10
CONFIG_KSM=y
CONFIG_DEFAULT_MMAP_MIN_ADDR=4096
@@ -4341,6 +4391,9 @@ CONFIG_PPS=m
# CONFIG_PPS_CLIENT_KTIMER is not set
CONFIG_PPS_CLIENT_LDISC=m
# CONFIG_PPS_DEBUG is not set
+CONFIG_PPS_CLIENT_PARPORT=m
+CONFIG_PPS_GENERATOR_PARPORT=m
+CONFIG_NTP_PPS=y
# CONFIG_USB_SERIAL_QUATECH2 is not set
# CONFIG_VT6655 is not set
@@ -4406,6 +4459,7 @@ CONFIG_GPIO_SYSFS=y
# CONFIG_GPIO_BASIC_MMIO is not set
# CONFIG_GPIO_VX855 is not set
# CONFIG_GPIO_PCH is not set
+# CONFIG_GPIO_ML_IOH is not set
CONFIG_KSYM_TRACER=y
CONFIG_PROFILE_KSYM_TRACER=y
@@ -4416,14 +4470,28 @@ CONFIG_KPROBE_EVENT=y
CONFIG_IR_CORE=m
CONFIG_IR_ENE=m
CONFIG_IR_STREAMZAP=m
+CONFIG_IR_WINBOND_CIR=m
# CONFIG_GPIO_SX150X is not set
# CONFIG_MFD_STMPE is not set
# CONFIG_MFD_MAX8998 is not set
# CONFIG_MFD_TPS6586X is not set
+# CONFIG_MFD_TC3589X is not set
CONFIG_SPARSE_RCU_POINTER=y
# CONFIG_PM_OPP is not set
CONFIG_BKL=y
+
+CONFIG_EVENT_POWER_TRACING_DEPRECATED=y
+
+# CONFIG_XZ_DEC_TEST is not set
+
+CONFIG_NFC_DEVICES=y
+CONFIG_PN544_NFC=m
+
+CONFIG_TARGET_CORE=m
+CONFIG_TCM_IBLOCK=m
+CONFIG_TCM_FILEIO=m
+CONFIG_TCM_PSCSI=m
diff --git a/freed-ora/current/master/config-ia64-generic b/freed-ora/current/master/config-ia64-generic
index a178b8a17..5c864b3d0 100644
--- a/freed-ora/current/master/config-ia64-generic
+++ b/freed-ora/current/master/config-ia64-generic
@@ -139,6 +139,7 @@ CONFIG_ACPI_VIDEO=m
# CONFIG_ACPI_PROC_EVENT is not set
CONFIG_ACPI_HED=m
CONFIG_ACPI_EC_DEBUGFS=m
+CONFIG_ACPI_IPMI=m
CONFIG_PM=y
CONFIG_HOTPLUG_PCI=y
diff --git a/freed-ora/current/master/config-local b/freed-ora/current/master/config-local
new file mode 100644
index 000000000..8c32be5be
--- /dev/null
+++ b/freed-ora/current/master/config-local
@@ -0,0 +1,2 @@
+# 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.
diff --git a/freed-ora/current/master/config-nodebug b/freed-ora/current/master/config-nodebug
index b37614825..c81b03b85 100644
--- a/freed-ora/current/master/config-nodebug
+++ b/freed-ora/current/master/config-nodebug
@@ -97,3 +97,5 @@ CONFIG_KDB_KEYBOARD=y
# CONFIG_DEBUG_OBJECTS_PERCPU_COUNTER is not set
# CONFIG_TEST_LIST_SORT is not set
+
+# CONFIG_DEBUG_SET_MODULE_RONX is not set
diff --git a/freed-ora/current/master/config-powerpc-generic b/freed-ora/current/master/config-powerpc-generic
index 1b05f4a90..9cd30a459 100644
--- a/freed-ora/current/master/config-powerpc-generic
+++ b/freed-ora/current/master/config-powerpc-generic
@@ -335,4 +335,6 @@ CONFIG_SERIAL_GRLIB_GAISLER_APBUART=m
# CONFIG_PPC_MPC512x is not set
+CONFIG_MPC512X_DMA=m
+
CONFIG_KVM_GUEST=y
diff --git a/freed-ora/current/master/config-powerpc64 b/freed-ora/current/master/config-powerpc64
index e2e8f99f0..74f33d1aa 100644
--- a/freed-ora/current/master/config-powerpc64
+++ b/freed-ora/current/master/config-powerpc64
@@ -182,3 +182,5 @@ CONFIG_PPC_SMLPAR=y
CONFIG_CMM=y
#-- DLPAR memory remove
# CONFIG_SPARSEMEM_VMEMMAP is not set
+
+CONFIG_PSERIES_ENERGY=m
diff --git a/freed-ora/current/master/config-sparc64-generic b/freed-ora/current/master/config-sparc64-generic
index 61612cb71..dac8a644f 100644
--- a/freed-ora/current/master/config-sparc64-generic
+++ b/freed-ora/current/master/config-sparc64-generic
@@ -203,3 +203,7 @@ CONFIG_FB_XVR1000=y
CONFIG_CRYPTO_DEV_NIAGARA2=y
CONFIG_JUMP_LABEL=y
+
+# CONFIG_MTD_OF_PARTS is not set
+# CONFIG_MTD_PHYSMAP_OF is not set
+# CONFIG_MMC_SDHCI_OF is not set
diff --git a/freed-ora/current/master/config-x86-generic b/freed-ora/current/master/config-x86-generic
index d47bd0a07..d6feae847 100644
--- a/freed-ora/current/master/config-x86-generic
+++ b/freed-ora/current/master/config-x86-generic
@@ -154,6 +154,7 @@ CONFIG_ACPI_HED=m
CONFIG_ACPI_APEI=y
CONFIG_ACPI_APEI_GHES=m
# CONFIG_ACPI_APEI_EINJ is not set
+CONFIG_ACPI_IPMI=m
#
# CPUFreq processor drivers
@@ -373,6 +374,10 @@ CONFIG_XEN_NETDEV_FRONTEND=m
CONFIG_XEN_PCIDEV_FRONTEND=m
CONFIG_XENFS=m
CONFIG_XEN_COMPAT_XENFS=y
+CONFIG_XEN_BACKEND=y
+CONFIG_XEN_DEBUG_FS=y
+CONFIG_XEN_PLATFORM_PCI=m
+CONFIG_XEN_GNTDEV=m
CONFIG_MTD_ESB2ROM=m
CONFIG_MTD_CK804XROM=m
@@ -407,6 +412,8 @@ CONFIG_SENSORS_I5K_AMB=m
# CONFIG_PROVIDE_OHCI1394_DMA_INIT is not set
CONFIG_HP_WATCHDOG=m
+CONFIG_NV_TCO=m
+CONFIG_SP5100_TCO=m
CONFIG_OLPC=y
CONFIG_OLPC_OPENFIRMWARE=y
@@ -444,7 +451,6 @@ CONFIG_X86_RESERVE_LOW_64K=y
CONFIG_PANASONIC_LAPTOP=m
-CONFIG_XEN_DEBUG_FS=y
CONFIG_X86_PTRACE_BTS=y
CONFIG_X86_REROUTE_FOR_BROKEN_BOOT_IRQS=y
@@ -508,7 +514,6 @@ CONFIG_HPWDT_NMI_DECODING=y
# CONFIG_MFD_TPS6586X is not set
# CONFIG_INTEL_MID_DMAC is not set
CONFIG_PCH_DMA=m
-CONFIG_XEN_PLATFORM_PCI=m
# CONFIG_ACPI_QUICKSTART is not set
CONFIG_IDEAPAD_ACPI=m
CONFIG_INTEL_IPS=m
@@ -526,3 +531,16 @@ CONFIG_PCH_GBE=m
CONFIG_PCH_PHUB=m
CONFIG_JUMP_LABEL=y
+
+CONFIG_X86_32_IRIS=m
+
+CONFIG_TRANSPARENT_HUGEPAGE=y
+
+CONFIG_CRYPTO_AES_NI_INTEL=m
+
+CONFIG_MTD_OF_PARTS=m
+CONFIG_MTD_PHYSMAP_OF=m
+CONFIG_PROC_DEVICETREE=y
+CONFIG_SERIAL_OF_PLATFORM=m
+CONFIG_SERIAL_GRLIB_GAISLER_APBUART=m
+# CONFIG_MMC_SDHCI_OF is not set
diff --git a/freed-ora/current/master/config-x86_64-generic b/freed-ora/current/master/config-x86_64-generic
index b583f7759..0154cf1b0 100644
--- a/freed-ora/current/master/config-x86_64-generic
+++ b/freed-ora/current/master/config-x86_64-generic
@@ -13,6 +13,7 @@ CONFIG_X86_CPUID=y
CONFIG_MTRR=y
CONFIG_NUMA=y
CONFIG_K8_NUMA=y
+CONFIG_AMD_NUMA=y
CONFIG_X86_64_ACPI_NUMA=y
# CONFIG_NUMA_EMU is not set
CONFIG_NR_CPUS=256
@@ -43,6 +44,8 @@ CONFIG_EFI_VARS=y
CONFIG_EFI_PCDP=y
CONFIG_FB_EFI=y
+CONFIG_SCSI_ADVANSYS=m
+
CONFIG_SECCOMP=y
CONFIG_CAPI_EICON=y
@@ -97,6 +100,7 @@ CONFIG_ACPI_HED=m
CONFIG_ACPI_APEI=y
CONFIG_ACPI_APEI_GHES=m
# CONFIG_ACPI_APEI_EINJ is not set
+CONFIG_ACPI_IPMI=m
CONFIG_X86_PLATFORM_DEVICES=y
CONFIG_ASUS_LAPTOP=m
@@ -154,8 +158,8 @@ CONFIG_CRYPTO_DEV_PADLOCK=m
CONFIG_CRYPTO_DEV_PADLOCK_AES=m
CONFIG_CRYPTO_DEV_PADLOCK_SHA=m
-CONFIG_CRYPTO_AES_X86_64=m
-CONFIG_CRYPTO_AES_NI_INTEL=m
+CONFIG_CRYPTO_AES_X86_64=y
+CONFIG_CRYPTO_AES_NI_INTEL=y
CONFIG_CRYPTO_TWOFISH_X86_64=m
CONFIG_CRYPTO_SALSA20_X86_64=m
@@ -304,6 +308,10 @@ CONFIG_XENFS=m
CONFIG_XEN_COMPAT_XENFS=y
CONFIG_XEN_DEV_EVTCHN=m
CONFIG_XEN_SYS_HYPERVISOR=y
+CONFIG_XEN_BACKEND=y
+CONFIG_XEN_GNTDEV=m
+CONFIG_XEN_DEBUG_FS=y
+CONFIG_XEN_PLATFORM_PCI=m
CONFIG_DMADEVICES=y
CONFIG_INTEL_IOATDMA=m
@@ -316,6 +324,8 @@ CONFIG_PROVIDE_OHCI1394_DMA_INIT=y
# CONFIG_CPA_DEBUG is not set
CONFIG_HP_WATCHDOG=m
+CONFIG_NV_TCO=m
+CONFIG_SP5100_TCO=m
CONFIG_FRAME_WARN=2048
@@ -355,7 +365,6 @@ CONFIG_X86_RESERVE_LOW_64K=y
CONFIG_PANASONIC_LAPTOP=m
-CONFIG_XEN_DEBUG_FS=y
CONFIG_X86_PTRACE_BTS=y
CONFIG_I7300_IDLE=m
@@ -420,7 +429,6 @@ CONFIG_HPWDT_NMI_DECODING=y
# CONFIG_MFD_TPS6586X is not set
# CONFIG_INTEL_MID_DMAC is not set
CONFIG_PCH_DMA=m
-CONFIG_XEN_PLATFORM_PCI=m
# CONFIG_ACPI_QUICKSTART is not set
CONFIG_IDEAPAD_ACPI=m
CONFIG_INTEL_IPS=m
@@ -439,3 +447,5 @@ CONFIG_VIDEO_VIA_CAMERA=m
CONFIG_JUMP_LABEL=y
CONFIG_HP_ILO=m
+
+CONFIG_TRANSPARENT_HUGEPAGE=y
diff --git a/freed-ora/current/master/deblob-2.6.37 b/freed-ora/current/master/deblob-2.6.37
index b161fa68b..15955a77e 100755
--- a/freed-ora/current/master/deblob-2.6.37
+++ b/freed-ora/current/master/deblob-2.6.37
@@ -1242,15 +1242,15 @@ 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
+# 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
+# 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.
diff --git a/freed-ora/current/master/deblob-2.6.38 b/freed-ora/current/master/deblob-2.6.38
new file mode 100755
index 000000000..807076ee8
--- /dev/null
+++ b/freed-ora/current/master/deblob-2.6.38
@@ -0,0 +1,2398 @@
+#!/bin/sh
+
+# Copyright (C) 2008, 2009, 2010, 2011 Alexandre Oliva <lxoliva@fsfla.org>
+# Copyright (C) 2008 Jeff Moe
+# Copyright (C) 2009 Rubén Rodríguez <ruben@gnu.org>
+#
+# 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=2.6.38 extra=0-
+
+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=:
+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
+ $check "$@" -i linux-$kver $name > $name.deblob
+ 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_firmware\(_nowait\)\?,maybe_reject_firmware\1,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/char/ser_a2232fw.h \
+ drivers/char/ser_a2232fw.ax \
+ drivers/net/ixp2000/ixp2400_rx.ucode \
+ drivers/net/ixp2000/ixp2400_rx.uc \
+ drivers/net/ixp2000/ixp2400_tx.ucode \
+ drivers/net/ixp2000/ixp2400_rx.uc \
+ drivers/net/wan/wanxlfw.inc_shipped \
+ drivers/net/wan/wanxlfw.S \
+ drivers/net/wireless/atmel.c \
+ drivers/net/wireless/atmel.c \
+ drivers/scsi/53c700_d.h_shipped \
+ drivers/scsi/53c700.scr \
+ drivers/scsi/aic7xxx/aic79xx_seq.h_shipped \
+ drivers/scsi/aic7xxx/aic79xx.seq \
+ drivers/scsi/aic7xxx/aic7xxx_seq.h_shipped \
+ drivers/scsi/aic7xxx/aic7xxx.seq \
+ drivers/scsi/aic7xxx_old/aic7xxx_seq.c \
+ drivers/scsi/aic7xxx_old/aic7xxx.seq \
+ drivers/scsi/53c7xx_d.h_shipped \
+ drivers/scsi/53c7xx.scr \
+ drivers/scsi/sym53c8xx_2/sym_fw1.h \
+ drivers/scsi/sym53c8xx_2/sym_fw1.h \
+ drivers/scsi/sym53c8xx_2/sym_fw2.h \
+ drivers/scsi/sym53c8xx_2/sym_fw2.h \
+ 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
+ if test ! $f; then
+ die $f is not present, something is amiss && return
+ fi
+done
+
+# Identify the tarball.
+grep -q 'EXTRAVERSION.*-libre' Makefile ||
+clean_sed "s,^EXTRAVERSION.*,&-libre$extra,
+" Makefile 'added -libre to EXTRAVERSION'
+
+grep -q Linux-libre README ||
+clean_sed '
+1,3 s,Linux kernel release.*kernel\.org.*,Linux-libre <http://linux-libre.fsfla.org>,
+2,5 s,Linux version 2.6,Linux-libre,
+1,20 s,\(operating system \)\?Unix,Unix kernel,
+/WHAT IS LINUX/i\
+WHAT IS Linux-libre?\
+\
+ 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.\
+\
+ The 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 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 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'
+
+########
+# 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 Documentation/arm/IXP4xx
+
+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/netx-eth.c
+clean_kconfig arch/arm/Kconfig 'ARCH_NETX'
+clean_mk CONFIG_ARCH_NETX arch/arm/Makefile
+
+announce WESTBRIDGE_DEVICE_DRIVER - "West Bridge Device Driver"
+reject_firmware drivers/staging/westbridge/astoria/device/cyasdevice.c
+clean_blob drivers/staging/westbridge/astoria/device/cyasdevice.c
+clean_kconfig drivers/staging/westbridge/astoria/device/Kconfig 'WESTBRIDGE_DEVICE_DRIVER'
+clean_mk 'CONFIG_WESTBRIDGE_DEVICE_DRIVER' drivers/staging/westbridge/astoria/device/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
+
+########
+# char #
+########
+
+announce COMPUTONE - "Computone IntelliPort Plus serial"
+drop_fw_file firmware/intelliport2.bin.ihex firmware/intelliport2.bin
+reject_firmware drivers/char/ip2/ip2main.c
+clean_blob drivers/char/ip2/ip2main.c
+clean_kconfig drivers/char/Kconfig 'COMPUTONE'
+clean_mk CONFIG_COMPUTONE drivers/char/Makefile
+
+announce CYCLADES - "Cyclades async mux support"
+reject_firmware drivers/char/cyclades.c
+clean_blob drivers/char/cyclades.c
+clean_kconfig drivers/char/Kconfig 'CYCLADES'
+clean_mk CONFIG_CYCLADES drivers/char/Makefile
+
+announce ISI - "Multi-Tech multiport card support"
+reject_firmware drivers/char/isicom.c
+clean_blob drivers/char/isicom.c
+clean_kconfig drivers/char/Kconfig 'ISI'
+clean_mk CONFIG_ISI drivers/char/Makefile
+
+announce MOXA_INTELLIO - "Moxa Intellio support"
+reject_firmware drivers/char/moxa.c
+clean_blob drivers/char/moxa.c
+clean_kconfig drivers/char/Kconfig 'MOXA_INTELLIO'
+clean_mk CONFIG_MOXA_INTELLIO drivers/char/Makefile
+
+# gpu drm
+
+announce DRM_NOUVEAU - "Nouveau (nVidia) cards"
+reject_firmware drivers/gpu/drm/nouveau/nvc0_graph.c
+clean_blob drivers/gpu/drm/nouveau/nvc0_graph.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
+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 drivers/dma/imx-sdma.c
+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/common/tuners/tuner-xc2028.h \
+ drivers/media/video/saa7134/saa7134-cards.c \
+ drivers/media/video/ivtv/ivtv-driver.c \
+ drivers/media/video/cx18/cx18-driver.c \
+ drivers/media/video/cx18/cx18-dvb.c \
+ drivers/media/video/cx23885/cx23885-dvb.c \
+ drivers/media/video/cx23885/cx23885-video.c \
+ drivers/media/video/cx88/cx88-dvb.c \
+ drivers/media/video/cx88/cx88-cards.c \
+ drivers/media/video/em28xx/em28xx-cards.c \
+ drivers/media/dvb/dvb-usb/dib0700_devices.c \
+ drivers/media/dvb/dvb-usb/cxusb.c
+reject_firmware drivers/media/common/tuners/tuner-xc2028.c
+clean_kconfig drivers/media/common/tuners/Kconfig 'MEDIA_TUNER_XC2028'
+clean_mk CONFIG_MEDIA_TUNER_XC2028 drivers/media/common/tuners/Makefile
+
+announce VIDEO_TM6000_DVB - "DVB Support for tm6000 based TV cards"
+clean_blob drivers/staging/tm6000/tm6000-cards.c
+clean_kconfig drivers/staging/tm6000/Kconfig 'VIDEO_TM6000_DVB'
+clean_mk CONFIG_VIDEO_TM6000_DVB drivers/staging/tm6000/Makefile
+
+announce MEDIA_TUNER_XC5000 - "Xceive XC5000 silicon tuner"
+undefine_macro 'XC5000_DEFAULT_FIRMWARE_SIZE' 0 \
+ 'removed non-Free firmware size' drivers/media/common/tuners/xc5000.c
+undefault_firmware 'XC5000' \
+ drivers/media/common/tuners/xc5000.c \
+ drivers/media/video/cx231xx/cx231xx-cards.c
+reject_firmware drivers/media/common/tuners/xc5000.c
+clean_kconfig drivers/media/common/tuners/Kconfig 'MEDIA_TUNER_XC5000'
+clean_mk CONFIG_MEDIA_TUNER_XC5000 drivers/media/common/tuners/Makefile
+
+announce DVB_USB - "Support for various USB DVB devices"
+reject_firmware drivers/media/dvb/dvb-usb/dvb-usb-firmware.c
+clean_kconfig drivers/media/dvb/dvb-usb/Kconfig 'DVB_USB'
+clean_mk CONFIG_DVB_USB drivers/media/dvb/dvb-usb/Makefile
+
+announce DVB_USB_AF9005 - "Afatech AF9005 DVB-T USB1.1"
+clean_file drivers/media/dvb/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/dvb/dvb-usb/af9005-fe.c 'report missing Free init script'
+clean_blob drivers/media/dvb/dvb-usb/af9005-fe.c
+clean_kconfig drivers/media/dvb/dvb-usb/Kconfig 'DVB_USB_AF9005'
+clean_mk CONFIG_DVB_USB_AF9005 drivers/media/dvb/dvb-usb/Makefile
+
+announce DVB_B2C2_FLEXCOP - "Technisat/B2C2 FlexCopII(b) and FlexCopIII adapters"
+reject_firmware drivers/media/dvb/b2c2/flexcop-fe-tuner.c
+
+announce DVB_BT8XX - "BT8xx based PCI cards"
+reject_firmware drivers/media/dvb/bt8xx/dvb-bt8xx.c
+
+announce DVB_USB_A800 - "AVerMedia AverTV DVB-T USB 2.0 (A800)"
+clean_blob drivers/media/dvb/dvb-usb/a800.c
+clean_kconfig drivers/media/dvb/dvb-usb/Kconfig 'DVB_USB_A800'
+clean_mk CONFIG_DVB_USB_A800 drivers/media/dvb/dvb-usb/Makefile
+
+announce DVB_USB_AF9005 - "Afatech AF9005 DVB-T USB1.1 support"
+clean_blob drivers/media/dvb/dvb-usb/af9005.c
+clean_kconfig drivers/media/dvb/dvb-usb/Kconfig 'DVB_USB_AF9005'
+clean_mk CONFIG_DVB_USB_AF9005 drivers/media/dvb/dvb-usb/Makefile
+
+announce DVB_USB_AF9015 - "Afatech AF9015 DVB-T USB2.0 support"
+clean_blob drivers/media/dvb/dvb-usb/af9015.c
+clean_kconfig drivers/media/dvb/dvb-usb/Kconfig 'DVB_USB_AF9015'
+clean_mk CONFIG_DVB_USB_AF9015 drivers/media/dvb/dvb-usb/Makefile
+
+announce DVB_USB_AZ6027 - "Azurewave DVB-S/S2 USB2.0 AZ6027 support"
+clean_blob drivers/media/dvb/dvb-usb/az6027.c
+clean_kconfig drivers/media/dvb/dvb-usb/Kconfig 'DVB_USB_AZ6027'
+clean_mk CONFIG_DVB_USB_AZ6027 drivers/media/dvb/dvb-usb/Makefile
+
+announce DVB_USB_CXUSB - "Conexant USB2.0 hybrid reference design support"
+clean_blob drivers/media/dvb/dvb-usb/cxusb.c
+clean_kconfig drivers/media/dvb/dvb-usb/Kconfig 'DVB_USB_CXUSB'
+clean_mk CONFIG_DVB_USB_CXUSB drivers/media/dvb/dvb-usb/Makefile
+
+announce DVB_USB_DIB0700 - "DiBcom DiB0700 USB DVB devices"
+clean_blob drivers/media/dvb/dvb-usb/dib0700_devices.c
+clean_kconfig drivers/media/dvb/dvb-usb/Kconfig 'DVB_USB_DIB0700'
+clean_mk CONFIG_DVB_USB_DIB0700 drivers/media/dvb/dvb-usb/Makefile
+
+announce DVB_USB_DIBUSB_MB - "DiBcom USB DVB-T devices (based on the DiB3000M-B)"
+clean_blob drivers/media/dvb/dvb-usb/dibusb-mb.c
+clean_kconfig drivers/media/dvb/dvb-usb/Kconfig 'DVB_USB_DIBUSB_MB'
+clean_mk CONFIG_DVB_USB_DIBUSB_MB drivers/media/dvb/dvb-usb/Makefile
+
+announce DVB_USB_DIBUSB_MC - "DiBcom USB DVB-T devices (based on the DiB3000M-C/P)"
+clean_blob drivers/media/dvb/dvb-usb/dibusb-mc.c
+clean_kconfig drivers/media/dvb/dvb-usb/Kconfig 'DVB_USB_DIBUSB_MC'
+clean_mk CONFIG_DVB_USB_DIBUSB_MC drivers/media/dvb/dvb-usb/Makefile
+
+announce DVB_USB_DIGITV - "Nebula Electronics uDigiTV DVB-T USB2.0 support"
+clean_blob drivers/media/dvb/dvb-usb/digitv.c
+clean_kconfig drivers/media/dvb/dvb-usb/Kconfig 'DVB_USB_DIGITV'
+clean_mk CONFIG_DVB_USB_DIGITV drivers/media/dvb/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/dvb/dvb-usb/dtt200u.c
+clean_kconfig drivers/media/dvb/dvb-usb/Kconfig 'DVB_USB_DTT200U'
+clean_mk CONFIG_DVB_USB_DTT200U drivers/media/dvb/dvb-usb/Makefile
+
+announce DVB_USB_DW2102 - "DvbWorld DVB-S/S2 USB2.0 support"
+reject_firmware drivers/media/dvb/dvb-usb/dw2102.c
+clean_blob drivers/media/dvb/dvb-usb/dw2102.c
+clean_kconfig drivers/media/dvb/dvb-usb/Kconfig 'DVB_USB_DW2102'
+clean_mk CONFIG_DVB_USB_DW2102 drivers/media/dvb/dvb-usb/Makefile
+
+announce DVB_USB_EC168 - "E3C EC168 DVB-T USB2.0 support"
+clean_blob drivers/media/dvb/dvb-usb/ec168.c
+clean_kconfig drivers/media/dvb/dvb-usb/Kconfig 'DVB_USB_EC168'
+clean_mk CONFIG_DVB_USB_EC168 drivers/media/dvb/dvb-usb/Makefile
+
+announce DVB_USB_GP8PSK - "GENPIX 8PSK->USB module support"
+reject_firmware drivers/media/dvb/dvb-usb/gp8psk.c
+clean_blob drivers/media/dvb/dvb-usb/gp8psk.c
+clean_kconfig drivers/media/dvb/dvb-usb/Kconfig 'DVB_USB_GP8PSK'
+clean_mk CONFIG_DVB_USB_GP8PSK drivers/media/dvb/dvb-usb/Makefile
+
+announce DVB_USB_LME2510 - "LME DM04/QQBOX DVB-S USB2.0 support"
+reject_firmware drivers/media/dvb/dvb-usb/lmedm04.c
+clean_blob drivers/media/dvb/dvb-usb/lmedm04.c
+clean_file Documentation/dvb/lmedm04.txt
+clean_kconfig drivers/media/dvb/dvb-usb/Kconfig 'DVB_USB_LME2510'
+clean_mk CONFIG_DVB_USB_LME2510 drivers/media/dvb/dvb-usb/Makefile
+
+announce DVB_USB_M920X - "Uli m920x DVB-T USB2.0 support"
+reject_firmware drivers/media/dvb/dvb-usb/m920x.c
+clean_blob drivers/media/dvb/dvb-usb/m920x.c
+clean_kconfig drivers/media/dvb/dvb-usb/Kconfig 'DVB_USB_M920X'
+clean_mk CONFIG_DVB_USB_M920X drivers/media/dvb/dvb-usb/Makefile
+
+announce DVB_USB_NOVA_T_USB2 - "Hauppauge WinTV-NOVA-T usb2 DVB-T USB2.0 support"
+clean_blob drivers/media/dvb/dvb-usb/nova-t-usb2.c
+clean_kconfig drivers/media/dvb/dvb-usb/Kconfig 'DVB_USB_NOVA_T_USB2'
+clean_mk CONFIG_DVB_USB_NOVA_T_USB2 drivers/media/dvb/dvb-usb/Makefile
+
+announce DVB_USB_OPERA1 - "Opera1 DVB-S USB2.0 receiver"
+reject_firmware drivers/media/dvb/dvb-usb/opera1.c
+clean_blob drivers/media/dvb/dvb-usb/opera1.c
+clean_kconfig drivers/media/dvb/dvb-usb/Kconfig 'DVB_USB_OPERA1'
+clean_mk CONFIG_DVB_USB_OPERA1 drivers/media/dvb/dvb-usb/Makefile
+
+announce DVB_USB_TTUSB2 - "Pinnacle 400e DVB-S USB2.0 support"
+clean_blob drivers/media/dvb/dvb-usb/ttusb2.c
+clean_kconfig drivers/media/dvb/dvb-usb/Kconfig 'DVB_USB_TTUSB2'
+clean_mk CONFIG_DVB_USB_TTUSB2 drivers/media/dvb/dvb-usb/Makefile
+
+announce DVB_USB_UMT_010 - "HanfTek UMT-010 DVB-T USB2.0 support"
+clean_blob drivers/media/dvb/dvb-usb/umt-010.c
+clean_kconfig drivers/media/dvb/dvb-usb/Kconfig 'DVB_USB_UMT_010'
+clean_mk CONFIG_DVB_USB_UMT_010 drivers/media/dvb/dvb-usb/Makefile
+
+announce DVB_USB_VP702X - "TwinhanDTV StarBox and clones DVB-S USB2.0 support"
+clean_blob drivers/media/dvb/dvb-usb/vp702x.c
+clean_kconfig drivers/media/dvb/dvb-usb/Kconfig 'DVB_USB_VP702X'
+clean_mk CONFIG_DVB_USB_VP702X drivers/media/dvb/dvb-usb/Makefile
+
+announce DVB_USB_VP7045 - "TwinhanDTV Alpha/MagicBoxII, DNTV tinyUSB2, Beetle USB2.0 support"
+clean_blob drivers/media/dvb/dvb-usb/vp7045.c
+clean_kconfig drivers/media/dvb/dvb-usb/Kconfig 'DVB_USB_VP7045'
+clean_mk CONFIG_DVB_USB_VP7045 drivers/media/dvb/dvb-usb/Makefile
+
+# dvb/frontends
+
+announce DVB_AF9013 - "Afatech AF9013 demodulator"
+undefault_firmware 'AF9013' \
+ drivers/media/dvb/frontends/af9013.c \
+ drivers/media/dvb/frontends/af9013_priv.h
+reject_firmware drivers/media/dvb/frontends/af9013.c
+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
+
+# dvb
+
+announce DVB_AV7110 - "AV7110 cards"
+reject_firmware drivers/media/dvb/ttpci/av7110.c
+clean_blob drivers/media/dvb/ttpci/av7110.c
+clean_kconfig drivers/media/dvb/ttpci/Kconfig 'DVB_AV7110'
+clean_mk CONFIG_DVB_AV7110 drivers/media/dvb/ttpci/Makefile
+
+announce DVB_BUDGET - "Budget cards"
+reject_firmware drivers/media/dvb/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/dvb/ttpci/budget-av.c
+
+announce DVB_BUDGET_CI - "Budget cards with onboard CI connector"
+reject_firmware drivers/media/dvb/ttpci/budget-ci.c
+
+announce DVB_DRX397XD - "Micronas DRX3975D/DRX3977D based"
+reject_firmware drivers/media/dvb/frontends/drx397xD.c
+clean_blob drivers/media/dvb/frontends/drx397xD_fw.h
+clean_kconfig drivers/media/dvb/frontends/Kconfig 'DVB_DRX397XD'
+clean_mk CONFIG_DVB_DRX397XD drivers/media/dvb/frontends/Makefile
+
+announce DVB_NGENE - "Micronas nGene support"
+reject_firmware drivers/media/dvb/ngene/ngene-core.c
+clean_blob drivers/media/dvb/ngene/ngene-core.c
+clean_kconfig drivers/media/dvb/ngene/Kconfig 'DVB_NGENE'
+clean_mk CONFIG_DVB_NGENE drivers/media/dvb/ngene/Makefile
+
+announce DVB_PLUTO2 - "Pluto2 cards"
+reject_firmware drivers/media/dvb/pluto2/pluto2.c
+
+announce SMS_SIANO_MDTV - "Siano SMS1xxx based MDTV receiver"
+reject_firmware drivers/media/dvb/siano/smscoreapi.c
+clean_blob drivers/media/dvb/siano/smscoreapi.c
+clean_blob drivers/media/dvb/siano/sms-cards.c
+clean_kconfig drivers/media/dvb/siano/Kconfig 'SMS_SIANO_MDTV'
+clean_mk CONFIG_SMS_SIANO_MDTV drivers/media/dvb/siano/Makefile
+
+announce SMS_USB_DRV - "Siano's USB interface support"
+reject_firmware drivers/media/dvb/siano/smsusb.c
+clean_blob drivers/media/dvb/siano/smsusb.c
+clean_kconfig drivers/media/dvb/siano/Kconfig 'SMS_USB_DRV'
+clean_mk CONFIG_SMS_USB_DRV drivers/media/dvb/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/dvb/ttusb-budget/dvb-ttusb-budget.c
+clean_blob drivers/media/dvb/ttusb-budget/dvb-ttusb-budget.c
+clean_kconfig drivers/media/dvb/ttusb-budget/Kconfig 'DVB_TTUSB_BUDGET'
+clean_mk CONFIG_DVB_TTUSB_BUDGET drivers/media/dvb/ttusb-budget/Makefile
+
+announce DVB_TTUSB_DEC - "Technotrend/Hauppauge USB DEC devices"
+reject_firmware drivers/media/dvb/ttusb-dec/ttusb_dec.c
+clean_blob drivers/media/dvb/ttusb-dec/ttusb_dec.c
+clean_kconfig drivers/media/dvb/ttusb-dec/Kconfig 'DVB_TTUSB_DEC'
+clean_mk CONFIG_DVB_TTUSB_DEC drivers/media/dvb/ttusb-dec/Makefile
+
+# video
+
+announce VIDEO_BT848 - "BT848 Video For Linux"
+reject_firmware drivers/media/video/bt8xx/bttv-cards.c
+clean_kconfig drivers/media/video/bt8xx/Kconfig 'VIDEO_BT848'
+clean_mk CONFIG_VIDEO_BT848 drivers/media/video/bt8xx/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/video/cpia2/cpia2_core.c
+clean_blob drivers/media/video/cpia2/cpia2_core.c
+clean_kconfig drivers/media/video/cpia2/Kconfig 'VIDEO_CPIA2'
+clean_mk CONFIG_VIDEO_CPIA2 drivers/media/video/cpia2/Makefile
+
+announce VIDEO_CX18 - "Conexant cx23418 MPEG encoder support"
+reject_firmware drivers/media/video/cx18/cx18-av-firmware.c
+reject_firmware drivers/media/video/cx18/cx18-dvb.c
+reject_firmware drivers/media/video/cx18/cx18-firmware.c
+clean_blob drivers/media/video/cx18/cx18-av-firmware.c
+clean_blob drivers/media/video/cx18/cx18-dvb.c
+clean_blob drivers/media/video/cx18/cx18-firmware.c
+clean_kconfig drivers/media/video/cx18/Kconfig 'VIDEO_CX18'
+clean_mk CONFIG_VIDEO_CX18 drivers/media/video/cx18/Makefile
+
+announce VIDEO_CX231XX - "Conexant cx231xx USB video capture support"
+reject_firmware drivers/media/video/cx231xx/cx231xx-417.c
+clean_blob drivers/media/video/cx231xx/cx231xx-417.c
+clean_kconfig drivers/media/video/cx231xx/Kconfig 'VIDEO_CX231XX'
+clean_mk CONFIG_VIDEO_CX231XX drivers/media/video/cx231xx/Makefile
+
+announce VIDEO_CX23885 - "Conexant cx23885 (2388x successor) support"
+reject_firmware drivers/media/video/cx23885/cx23885-417.c
+clean_blob drivers/media/video/cx23885/cx23885-417.c
+clean_kconfig drivers/media/video/cx23885/Kconfig 'VIDEO_CX23885'
+clean_mk CONFIG_VIDEO_CX23885 drivers/media/video/cx23885/Makefile
+
+announce VIDEO_CX25840 - "Conexant CX2584x audio/video decoders"
+reject_firmware drivers/media/video/cx25840/cx25840-firmware.c
+clean_blob drivers/media/video/cx25840/cx25840-firmware.c
+clean_kconfig drivers/media/video/cx25840/Kconfig 'VIDEO_CX25840'
+clean_mk CONFIG_VIDEO_CX25840 drivers/media/video/cx25840/Makefile
+
+announce VIDEO_CX88_BLACKBIRD - "Blackbird MPEG encoder support (cx2388x + cx23416)"
+reject_firmware drivers/media/video/cx88/cx88-blackbird.c
+clean_kconfig drivers/media/video/cx88/Kconfig 'VIDEO_CX88_BLACKBIRD'
+clean_mk CONFIG_VIDEO_CX88_BLACKBIRD drivers/media/video/cx88/Makefile
+
+announce VIDEO_IVTV - "Conexant cx23416/cx23415 MPEG encoder/decoder support"
+reject_firmware drivers/media/video/ivtv/ivtv-firmware.c
+clean_blob drivers/media/video/ivtv/ivtv-firmware.c
+clean_kconfig drivers/media/video/ivtv/Kconfig 'VIDEO_IVTV'
+clean_mk CONFIG_VIDEO_IVTV drivers/media/video/ivtv/Makefile
+
+announce VIDEO_PVRUSB2 - "Hauppauge WinTV-PVR USB2 support"
+reject_firmware drivers/media/video/pvrusb2/pvrusb2-hdw.c
+clean_blob drivers/media/video/pvrusb2/pvrusb2-devattr.c
+clean_kconfig drivers/media/video/pvrusb2/Kconfig 'VIDEO_PVRUSB2'
+clean_mk CONFIG_VIDEO_PVRUSB2 drivers/media/video/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/go7007/go7007-driver.c
+clean_blob drivers/staging/go7007/go7007-driver.c
+reject_firmware drivers/staging/go7007/go7007-fw.c
+clean_blob drivers/staging/go7007/go7007-usb.c
+clean_blob drivers/staging/go7007/saa7134-go7007.c
+clean_kconfig drivers/staging/go7007/Kconfig 'VIDEO_GO7007'
+clean_mk CONFIG_VIDEO_GO7007 drivers/staging/go7007/Makefile
+
+announce VIDEO_GO7007_USB_S2250_BOARD - "Sensoray 2250/2251 support"
+reject_firmware drivers/staging/go7007/s2250-loader.c
+clean_blob drivers/staging/go7007/s2250-loader.c
+clean_kconfig drivers/staging/go7007/Kconfig 'VIDEO_GO7007_USB_S2250_BOARD'
+clean_mk CONFIG_VIDEO_GO7007_USB_S2250_BOARD drivers/staging/go7007/Makefile
+
+announce VIDEO_SAA7134_DVB - "DVB/ATSC Support for saa7134 based TV cards"
+reject_firmware drivers/media/video/saa7134/saa7134-dvb.c
+clean_kconfig drivers/media/video/saa7134/Kconfig 'VIDEO_SAA7134_DVB'
+clean_mk CONFIG_VIDEO_SAA7134_DVB drivers/media/video/saa7134/Makefile
+
+announce VIDEO_SAA7164 - "NXP SAA7164 support"
+reject_firmware drivers/media/video/saa7164/saa7164-fw.c
+clean_blob drivers/media/video/saa7164/saa7164-fw.c
+clean_kconfig drivers/media/video/saa7164/Kconfig 'VIDEO_SAA7164'
+clean_mk CONFIG_VIDEO_SAA7164 drivers/media/video/saa7164/Makefile
+
+announce VIDEO_TLG2300 - "Telegent TLG2300 USB video capture support"
+reject_firmware drivers/media/video/tlg2300/pd-main.c
+clean_blob drivers/media/video/tlg2300/pd-main.c
+clean_kconfig drivers/media/video/tlg2300/Kconfig 'VIDEO_TLG2300'
+clean_mk CONFIG_VIDEO_TLG2300 drivers/media/video/tlg2300/Makefile
+
+announce USB_DABUSB - "DABUSB driver"
+clean_fw firmware/dabusb/bitstream.bin.ihex firmware/dabusb/bitstream.bin
+clean_fw firmware/dabusb/firmware.HEX firmware/dabusb/firmware.fw
+reject_firmware drivers/staging/dabusb/dabusb.c
+clean_blob drivers/staging/dabusb/dabusb.c
+clean_kconfig drivers/staging/dabusb/Kconfig 'USB_DABUSB'
+clean_mk CONFIG_USB_DABUSB drivers/staging/dabusb/Makefile
+
+announce USB_S2255 - "USB Sensoray 2255 video capture device"
+reject_firmware drivers/media/video/s2255drv.c
+clean_blob drivers/media/video/s2255drv.c
+clean_kconfig drivers/media/video/Kconfig 'USB_S2255'
+clean_mk CONFIG_USB_S2255 drivers/media/video/Makefile
+
+announce USB_VICAM - "USB 3com HomeConnect, AKA vicam"
+drop_fw_file firmware/vicam/firmware.H16 firmware/vicam/firmware.fw
+reject_firmware drivers/staging/usbvideo/vicam.c
+clean_blob drivers/staging/usbvideo/vicam.c
+clean_kconfig drivers/staging/usbvideo/Kconfig 'USB_VICAM'
+clean_mk CONFIG_USB_VICAM drivers/staging/usbvideo/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
+
+#######
+# 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/acenic.c
+clean_blob drivers/net/acenic.c
+clean_kconfig drivers/net/Kconfig 'ACENIC'
+clean_mk CONFIG_ACENIC drivers/net/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/starfire.c
+clean_blob drivers/net/starfire.c
+clean_kconfig drivers/net/Kconfig 'ADAPTEC_STARFIRE'
+clean_mk CONFIG_ADAPTEC_STARFIRE drivers/net/Makefile
+
+announce CONFIG_BNA - "Brocade 1010/1020 10Gb Ethernet Driver support"
+clean_blob drivers/net/bna/bnad.c
+clean_blob drivers/net/bna/cna.h
+reject_firmware drivers/net/bna/cna_fwimg.c
+clean_kconfig drivers/net/Kconfig 'BNA'
+clean_mk CONFIG_BNA drivers/net/bna/Makefile
+
+announce BNX2 - "Broadcom NetXtremeII"
+drop_fw_file firmware/bnx2/bnx2-mips-09-6.2.1.fw.ihex firmware/bnx2/bnx2-mips-09-6.2.1.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/bnx2.c
+clean_blob drivers/net/bnx2.c
+clean_kconfig drivers/net/Kconfig 'BNX2'
+clean_mk CONFIG_BNX2 drivers/net/Makefile
+
+announce BNX2X - "Broadcom NetXtremeII 10Gb support"
+drop_fw_file firmware/bnx2x/bnx2x-e1-6.2.5.0.fw.ihex firmware/bnx2x/bnx2x-e1-6.2.5.0.fw
+drop_fw_file firmware/bnx2x/bnx2x-e1h-6.2.5.0.fw.ihex firmware/bnx2x/bnx2x-e1h-6.2.5.0.fw
+drop_fw_file firmware/bnx2x/bnx2x-e2-6.2.5.0.fw.ihex firmware/bnx2x/bnx2x-e2-6.2.5.0.fw
+reject_firmware drivers/net/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/bnx2x/bnx2x_main.c 'report missing Free firmware'
+clean_blob drivers/net/bnx2x/bnx2x_main.c
+clean_blob drivers/net/bnx2x/bnx2x_hsi.h
+clean_blob drivers/net/bnx2x/bnx2x_init_ops.h
+clean_kconfig drivers/net/Kconfig 'BNX2X'
+clean_mk CONFIG_BNX2X drivers/net/Makefile
+
+announce CASSINI - "Sun Cassini"
+drop_fw_file firmware/sun/cassini.bin.ihex firmware/sun/cassini.bin
+reject_firmware drivers/net/cassini.c
+clean_blob drivers/net/cassini.c
+clean_kconfig drivers/net/Kconfig 'CASSINI'
+clean_mk CONFIG_CASSINI drivers/net/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/t3fw-7.10.0.bin.ihex firmware/cxgb3/t3fw-7.10.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/cxgb3/cxgb3_main.c
+clean_blob drivers/net/cxgb3/cxgb3_main.c
+clean_kconfig drivers/net/Kconfig 'CHELSIO_T3'
+clean_mk CONFIG_CHELSIO_T3 drivers/net/cxgb3/Makefile
+
+announce CHELSIO_T4 - "Chelsio Communications T4 Ethernet support"
+reject_firmware drivers/net/cxgb4/cxgb4_main.c
+clean_blob drivers/net/cxgb4/cxgb4_main.c
+clean_kconfig drivers/net/Kconfig 'CHELSIO_T4'
+clean_mk CONFIG_CHELSIO_T4 drivers/net/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/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/e100.c 'proceed without firmware'
+clean_blob drivers/net/e100.c
+clean_kconfig drivers/net/Kconfig 'E100'
+clean_mk CONFIG_E100 drivers/net/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
+reject_firmware drivers/net/myri_sbus.c
+clean_blob drivers/net/myri_sbus.c
+clean_kconfig drivers/net/Kconfig 'MYRI_SBUS'
+clean_mk CONFIG_MYRI_SBUS drivers/net/Makefile
+
+announce MYRI10GE - "Myricom Myri-10G Ethernet support"
+reject_firmware drivers/net/myri10ge/myri10ge.c
+clean_blob drivers/net/myri10ge/myri10ge.c
+clean_kconfig drivers/net/Kconfig 'MYRI10GE'
+clean_mk CONFIG_MYRI10GE drivers/net/myri10ge/Makefile
+
+announce NETXEN_NIC - "NetXen Multi port (1/10) Gigabit Ethernet NIC"
+reject_firmware drivers/net/netxen/netxen_nic.h
+reject_firmware drivers/net/netxen/netxen_nic_main.c
+reject_firmware drivers/net/netxen/netxen_nic_init.c
+clean_blob drivers/net/netxen/netxen_nic.h
+clean_blob drivers/net/netxen/netxen_nic_main.c
+clean_kconfig drivers/net/Kconfig 'NETXEN_NIC'
+clean_mk CONFIG_NETXEN_NIC drivers/net/Makefile
+
+announce QLCNIC - "QLOGIC QLCNIC 1/10Gb Converged Ethernet NIC Support"
+reject_firmware drivers/net/qlcnic/qlcnic.h
+reject_firmware drivers/net/qlcnic/qlcnic_init.c
+reject_firmware drivers/net/qlcnic/qlcnic_main.c
+clean_blob drivers/net/qlcnic/qlcnic.h
+clean_blob drivers/net/qlcnic/qlcnic_main.c
+clean_kconfig drivers/net/Kconfig 'QLCNIC'
+clean_mk CONFIG_QLCNIC drivers/net/qlcnic/Makefile
+
+announce R8169 - "Realtek 8169 gigabit ethernet support"
+reject_firmware drivers/net/r8169.c
+clean_blob drivers/net/r8169.c
+clean_kconfig drivers/net/Kconfig R8169
+clean_mk CONFIG_R8169 drivers/net/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/spider_net.c
+clean_sed 's,spider_fw\.bin,DEBLOBBED.bin,g' \
+ drivers/net/spider_net.c 'removed non-Free firmware notes'
+clean_blob drivers/net/spider_net.c
+clean_blob drivers/net/spider_net.h
+clean_kconfig drivers/net/Kconfig 'SPIDER_NET'
+clean_mk CONFIG_SPIDER_NET drivers/net/Makefile
+
+announce TEHUTI - "Tehuti Networks 10G Ethernet"
+drop_fw_file firmware/tehuti/bdx.bin.ihex firmware/tehuti/bdx.bin
+reject_firmware drivers/net/tehuti.c
+clean_blob drivers/net/tehuti.c
+clean_kconfig drivers/net/Kconfig 'TEHUTI'
+clean_mk CONFIG_TEHUTI drivers/net/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/tg3.c
+clean_blob drivers/net/tg3.c
+clean_kconfig drivers/net/Kconfig 'TIGON3'
+clean_mk CONFIG_TIGON3 drivers/net/Makefile
+
+announce TYPHOON - "3cr990 series Typhoon"
+drop_fw_file firmware/3com/typhoon.bin.ihex firmware/3com/typhoon.bin
+reject_firmware drivers/net/typhoon.c
+clean_blob drivers/net/typhoon.c
+clean_kconfig drivers/net/Kconfig 'TYPHOON'
+clean_mk CONFIG_TYPHOON drivers/net/Makefile
+
+announce VXGE - "Exar X3100 Series 10GbE PCIe Server Adapter"
+reject_firmware drivers/net/vxge/vxge-main.c
+clean_blob drivers/net/vxge/vxge-main.c
+clean_kconfig drivers/net/Kconfig 'VXGE'
+clean_mk CONFIG_VXGE drivers/net/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
+
+# pcmcia
+
+announce PCMCIA_SMC91C92 - "SMC 91Cxx PCMCIA"
+drop_fw_file firmware/ositech/Xilinx7OD.bin.ihex firmware/ositech/Xilinx7OD.bin
+reject_firmware drivers/net/pcmcia/smc91c92_cs.c
+clean_blob drivers/net/pcmcia/smc91c92_cs.c
+clean_kconfig drivers/net/pcmcia/Kconfig 'PCMCIA_SMC91C92'
+clean_mk CONFIG_PCMCIA_SMC91C92 drivers/net/pcmcia/Makefile
+
+# 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
+
+# tokenring
+
+announce 3C359 - "3Com 3C359 Token Link Velocity XL adapter"
+drop_fw_file firmware/3com/3C359.bin.ihex firmware/3com/3C359.bin
+reject_firmware drivers/net/tokenring/3c359.c
+clean_blob drivers/net/tokenring/3c359.c
+clean_kconfig drivers/net/tokenring/Kconfig '3C359'
+clean_mk CONFIG_3C359 drivers/net/tokenring/Makefile
+
+announce SMCTR - "SMC ISA/MCA adapter"
+drop_fw_file firmware/tr_smctr.bin.ihex firmware/tr_smctr.bin
+reject_firmware drivers/net/tokenring/smctr.c
+clean_blob drivers/net/tokenring/smctr.c
+clean_kconfig drivers/net/tokenring/Kconfig 'SMCTR'
+clean_mk CONFIG_SMCTR drivers/net/tokenring/Makefile
+
+announce TMS380TR - "Generic TMS380 Token Ring ISA/PCI adapter support"
+reject_firmware drivers/net/tokenring/tms380tr.c
+clean_blob drivers/net/tokenring/tms380tr.c
+clean_kconfig drivers/net/tokenring/Kconfig 'TMS380TR'
+clean_mk CONFIG_TMS380TR drivers/net/tokenring/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 BRCM80211_PCI - "Broadcom IEEE802.11n PCIe SoftMAC WLAN driver"
+clean_blob drivers/staging/brcm80211/README
+reject_firmware drivers/staging/brcm80211/sys/wl_mac80211.c
+clean_blob drivers/staging/brcm80211/sys/wl_mac80211.c
+clean_kconfig drivers/staging/brcm80211/Kconfig 'BRCM80211_PCI'
+clean_mk CONFIG_BRCM80211_PCI drivers/staging/brcm80211/Makefile
+
+announce BRCMFMAC - "Broadcom IEEE802.11n embedded FullMAC WLAN driver"
+clean_blob drivers/staging/brcm80211/brcmfmac/README
+reject_firmware drivers/staging/brcm80211/brcmfmac/wl_cfg80211.c
+clean_blob drivers/staging/brcm80211/brcmfmac/wl_cfg80211.c
+clean_kconfig drivers/staging/brcm80211/Kconfig 'BRCMFMAC'
+clean_mk CONFIG_BRCMFMAC drivers/staging/brcm80211/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_file drivers/staging/wlags49_h2/ap_h2.c
+clean_file drivers/staging/wlags49_h2/sta_h2.c
+clean_blob drivers/staging/wlags49_h2/wl_profile.c
+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'
+clean_file drivers/staging/wlags49_h2/ap_h25.c
+clean_file 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/iwlwifi/iwl3945-base.c
+clean_blob drivers/net/wireless/iwlwifi/iwl3945-base.c
+clean_blob drivers/net/wireless/iwlwifi/iwl-3945.h
+clean_kconfig drivers/net/wireless/iwlwifi/Kconfig 'IWL3945'
+clean_mk CONFIG_IWL3945 drivers/net/wireless/iwlwifi/Makefile
+
+announce IWLAGN - "Intel Wireless WiFi Next Gen AGN"
+reject_firmware drivers/net/wireless/iwlwifi/iwl-agn.c
+clean_blob drivers/net/wireless/iwlwifi/iwl-agn.c
+clean_kconfig drivers/net/wireless/iwlwifi/Kconfig 'IWLAGN'
+clean_mk CONFIG_IWLAGN drivers/net/wireless/iwlwifi/Makefile
+
+announce IWL4965 - "Intel Wireless WiFi 4965AGN"
+clean_blob drivers/net/wireless/iwlwifi/iwl-4965.c
+clean_kconfig drivers/net/wireless/iwlwifi/Kconfig 'IWL4965'
+clean_mk CONFIG_IWL4965 drivers/net/wireless/iwlwifi/Makefile
+
+announce IWL5000 - "Intel Wireless WiFi 5000AGN"
+clean_blob drivers/net/wireless/iwlwifi/iwl-5000.c
+clean_blob drivers/net/wireless/iwlwifi/iwl-6000.c
+clean_blob drivers/net/wireless/iwlwifi/iwl-1000.c
+clean_kconfig drivers/net/wireless/iwlwifi/Kconfig 'IWL5000'
+clean_mk CONFIG_IWL5000 drivers/net/wireless/iwlwifi/Makefile
+
+announce IWM - "Intel Wireless Multicomm 3200 WiFi driver"
+reject_firmware drivers/net/wireless/iwmc3200wifi/fw.c
+clean_blob drivers/net/wireless/iwmc3200wifi/sdio.c
+clean_kconfig drivers/net/wireless/iwmc3200wifi/Kconfig 'IWM'
+clean_mk CONFIG_IWM drivers/net/wireless/iwmc3200wifi/Makefile
+
+announce IWMC3200TOP - "Intel Wireless MultiCom Top Driver"
+reject_firmware drivers/misc/iwmc3200top/fw-download.c
+undefine_macro '_FW_NAME(api)' '"/*(DEBLOBBED)*/"' \
+ 'removed non-Free firmware name' drivers/misc/iwmc3200top/iwmc3200top.h
+clean_blob drivers/misc/iwmc3200top/main.c
+clean_kconfig drivers/misc/iwmc3200top/Kconfig 'IWMC3200TOP'
+clean_mk CONFIG_IWMC3200TOP drivers/misc/iwmc3200top/Makefile
+
+announce LIBERTAS - "Marvell 8xxx Libertas WLAN driver support"
+reject_firmware drivers/net/wireless/libertas/main.c '
+/Try user-specified firmware first/{
+ :end1
+ /request_firmware(helper, user_helper/! {N; b end1;};
+ :end2
+ /request_firmware(helper, user_helper.*request_firmware(mainfw, user_mainfw/! {N; b end2;};
+ /request_firmware(helper, user_helper.*request_firmware(mainfw, user_mainfw/{
+ /request_firmware.*request_firmware.*request_firmware/!{p; d;};
+ }
+}
+'
+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"
+reject_firmware drivers/net/wireless/libertas/if_usb.c '
+/Try user-specified firmware first/{
+ /request_firmware/!N;
+ /request_firmware/!N;
+ /request_firmware/{p; d;};
+}
+'
+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 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 ATH6K_LEGACY - "Atheros AR6003 support (non mac80211)"
+reject_firmware drivers/staging/ath6kl/os/linux/ar6000_android.c
+reject_firmware drivers/staging/ath6kl/os/linux/include/osapi_linux.h
+clean_sed '
+/\*firmware_p = firmware = kzalloc/ i\
+ return -1;
+' drivers/staging/ath6kl/os/linux/ar6000_android.c \
+ 'disabled non-Free firmware loading machinery'
+clean_blob drivers/staging/ath6kl/os/linux/include/ar6000_drv.h
+clean_kconfig drivers/staging/ath6kl/Kconfig 'ATH6K_LEGACY'
+clean_mk CONFIG_ATH6K_LEGACY drivers/staging/ath6kl/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 RT2860 - "Ralink 2860/3090 wireless support"
+reject_firmware drivers/staging/rt2860/common/rtmp_mcu.c
+clean_blob drivers/staging/rt2860/common/rtmp_mcu.c
+clean_blob drivers/staging/rt2860/rtmp_def.h
+clean_blob drivers/staging/rt2860/common/ee_efuse.c
+clean_kconfig drivers/staging/rt2860/Kconfig RT2860
+clean_mk CONFIG_RT2860 drivers/staging/rt2860/Makefile
+
+announce RT2870 - "Ralink 2870/3070 wireless support"
+clean_kconfig drivers/staging/rt2870/Kconfig RT2870
+clean_mk CONFIG_RT2870 drivers/staging/rt2870/Makefile
+
+announce RTL8192CE - "Realtek RTL8192CE/RTL8188SE Wireless Network Adapter"
+reject_firmware drivers/net/wireless/rtlwifi/rtl8192ce/fw.c
+clean_blob drivers/net/wireless/rtlwifi/rtl8192ce/sw.c
+clean_kconfig drivers/net/wireless/rtlwifi RTL8192CE
+clean_mk CONFIG_RTL8192CE drivers/net/wireless/rtlwifi/rtl8192ce/Makefile
+
+announce RTL8192E - "RealTek RTL8192E Wireless LAN NIC driver"
+reject_firmware drivers/staging/rtl8192e/r819xE_firmware.c
+clean_blob drivers/staging/rtl8192e/r819xE_firmware.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_blob drivers/staging/rtl8192u/r819xU_firmware_img.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"
+clean_blob drivers/staging/rtl8712/farray.h
+clean_sed '
+/^static u32 rtl871x_open_fw(/i\
+#define rtl871x_open_fw(a,b,c) 0
+' drivers/staging/rtl8712/hal_init.c \
+ 'disabling non-Free firmware loading machinery'
+clean_blob drivers/staging/rtl8712/hal_init.c
+clean_kconfig drivers/staging/rtl8712/Kconfig 'R8712U'
+clean_mk CONFIG_R8712U drivers/staging/rtl8712/Makefile
+
+announce VT6656 - "VIA Technologies VT6656 support"
+clean_sed '
+/^FIRMWAREbDownload($/,/^}$/ {
+ /PBYTE.*pBuffer/ i\
+ PBYTE abyFirmware[1] = { 0 };
+ /-->Download firmware/ i\
+ printk("vt6656: missing Free firmware\\n");\
+ return (FALSE);
+}' drivers/staging/vt6656/firmware.c 'report missing Free firmware'
+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/wl1251/main.c
+clean_blob drivers/net/wireless/wl1251/main.c
+clean_blob drivers/net/wireless/wl1251/wl1251.h
+clean_kconfig drivers/net/wireless/wl1251/Kconfig 'WL1251'
+clean_mk CONFIG_WL1251 drivers/net/wireless/wl1251/Makefile
+
+announce WL12XX - "TI wl12xx support"
+reject_firmware drivers/net/wireless/wl12xx/main.c
+clean_blob drivers/net/wireless/wl12xx/wl12xx.h
+clean_kconfig drivers/net/wireless/wl12xx/Kconfig 'WL12XX'
+clean_mk CONFIG_WL12XX drivers/net/wireless/wl12xx/Makefile
+
+announce WL12XX_SDIO - "TI wl12xx SDIO support"
+clean_blob drivers/net/wireless/wl12xx/sdio.c
+clean_kconfig drivers/net/wireless/wl12xx/Kconfig 'WL12XX_SDIO'
+clean_mk CONFIG_WL12XX_SDIO drivers/net/wireless/wl12xx/Makefile
+
+announce WL12XX_SDIO_TEST - "TI wl12xx SDIO testing support"
+reject_firmware drivers/net/wireless/wl12xx/sdio_test.c
+clean_kconfig drivers/net/wireless/wl12xx/Kconfig 'WL12XX_SDIO_TEST'
+clean_mk CONFIG_WL12XX_SDIO_TEST drivers/net/wireless/wl12xx/Makefile
+
+announce WL12XX_SPI - "TI wl12xx SPI support"
+clean_blob drivers/net/wireless/wl12xx/spi.c
+clean_kconfig drivers/net/wireless/wl12xx/Kconfig 'WL12XX_SPI'
+clean_mk CONFIG_WL12XX_SPI drivers/net/wireless/wl12xx/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/sdio.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/,/^}$/ {
+ /oldfs=get_fs();/i\
+ return /*(DEBLOBBED)*/ NULL;
+}' 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
+
+# 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_QT602240 - "QT602240 I2C Touchscreen"
+reject_firmware drivers/input/touchscreen/qt602240_ts.c
+clean_blob drivers/input/touchscreen/qt602240_ts.c
+clean_kconfig drivers/net/Kconfig 'TOUCHSCREEN_QT602240'
+clean_mk CONFIG_TOUCHSCREEN_QT602240 drivers/input/touchscreen/Makefile
+
+announce LIRC_ZILOG - "Zilog/Hauppauge IR Transmitter"
+reject_firmware drivers/staging/lirc/lirc_zilog.c
+clean_blob drivers/staging/lirc/lirc_zilog.c
+clean_kconfig drivers/staging/lirc/Kconfig 'LIRC_ZILOG'
+clean_mk CONFIG_LIRC_ZILOG drivers/staging/lirc/Makefile
+
+####################
+# Data acquisition #
+####################
+
+announce COMEDI_PCI_DRIVERS - "Data acquisition support Comedi PCI drivers"
+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_PCI_DRIVERS'
+clean_mk CONFIG_COMEDI_PCI_DRIVERS 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
+
+
+########
+# 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"
+clean_blob drivers/scsi/bfa/bfad_im.h
+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_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_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_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'
+reject_firmware drivers/usb/serial/keyspan.c
+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_KEYSPAN_PDA - "USB Keyspan PDA Single Port Serial Driver"
+clean_sed '
+s,request_ihex_firmware,/*KEYSPAN_PDA*/&,
+' drivers/usb/serial/keyspan_pda.c 'accept Free firmware'
+
+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
+reject_firmware drivers/usb/serial/whiteheat.c
+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
+
+
+
+#########
+# 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_INTEL_SST - "Intel SST (LPE) Driver"
+reject_firmware drivers/staging/intel_sst/intel_sst_drv_interface.c
+clean_blob drivers/staging/intel_sst/intel_sst_drv_interface.c
+reject_firmware drivers/staging/intel_sst/intel_sst_dsp.c
+clean_kconfig drivers/staging/intel_sst/Kconfig 'SND_INTEL_SST'
+clean_mk 'CONFIG_SND_INTEL_SST' drivers/staging/intel_sst/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
+
+# 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 driver"
+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_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
+
+##########
+# Crypto #
+##########
+
+announce DX_SEP - "Discretix SEP driver"
+reject_firmware drivers/staging/sep/sep_driver.c
+clean_blob drivers/staging/sep/sep_driver.c
+clean_kconfig drivers/staging/sep/Kconfig 'DX_SEP'
+clean_mk CONFIG_DX_SEP drivers/staging/sep/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/dvb/ttusb-dec.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 27d48f902..ec4fdf5a8 100755
--- a/freed-ora/current/master/deblob-check
+++ b/freed-ora/current/master/deblob-check
@@ -1,6 +1,6 @@
#! /bin/sh
-# deblob-check version 2011-01-03
+# deblob-check version 2011-02-24.2
# Inspired in gNewSense's find-firmware script.
# Written by Alexandre Oliva <lxoliva@fsfla.org>
@@ -878,9 +878,10 @@ fi
set_except () {
blob "$blobseq"
- blobna 'request_firmware_nowait'
- blobna 'request_firmware'
- blobna 'request_ihex_firmware'
+ # We leave out the initial and final letters of request_firmware so
+ # that deblobbing turns them into r/*DEBLOBBED*/e, a syntax error.
+ blobna 'equest_firmwar'
+ blobna 'equest_ihex_firmwar'
blobna 'MODULE_FIRMWARE[ ]*[(][^\n;]*[)][ ]*[;]\([ \n]*MODULE_FIRMWARE[ ]*[(][^\n;]*[)][ ]*[;]\)*'
blobna 'DEFAULT_FIRMWARE'
blobna '\([.]\|->\)firmware[ \n]*=[^=]'
@@ -1027,11 +1028,11 @@ set_except () {
defsnc 'static[ ]const[ ]struct[ ]arb_line[ ]write_arb_data\[NUM_WR_Q\]\[MAX_WR_ORD[ ][+][ ]1\][ ]=' drivers/net/bnx2x/bnx2x_init_opts.h
initnc '[ ][ ][}][ ]blinkrates\[\][ ]='
initnc 'static[ ]const[ ]struct[ ]ath5k_ini[ ]ar5212_ini\[\][ ]='
- initnc 'static[ ]const[ ]struct[ ]ath5k_ini_mode[ ]rf5413_ini_mode_end\[\][ ]='
- initnc 'static[ ]const[ ]struct[ ]ath5k_ini_rf[ ]rfregs_5111\[\][ ]='
- initnc 'static[ ]const[ ]struct[ ]ath5k_ini_rf[ ]rfregs_5112\[\][ ]='
- initnc 'static[ ]const[ ]struct[ ]ath5k_ini_rf[ ]rfregs_5112a\[\][ ]='
- initnc 'static[ ]const[ ]struct[ ]ath5k_ini_rf[ ]rfregs_5413\[\][ ]='
+ defsnc 'static[ ]const[ ]struct[ ]ath5k_ini_mode[ ]rf5413_ini_mode_end\[\][ ]=' drivers/net/wireless/ath/ath5k/initvals.c
+ defsnc 'static[ ]const[ ]struct[ ]ath5k_ini_rf[ ]rfregs_5111\[\][ ]=' drivers/net/wireless/ath/ath5k/rfbuffer.h
+ defsnc 'static[ ]const[ ]struct[ ]ath5k_ini_rf[ ]rfregs_5112\[\][ ]=' drivers/net/wireless/ath/ath5k/rfbuffer.h
+ defsnc 'static[ ]const[ ]struct[ ]ath5k_ini_rf[ ]rfregs_5112a\[\][ ]=' drivers/net/wireless/ath/ath5k/rfbuffer.h
+ defsnc 'static[ ]const[ ]struct[ ]ath5k_ini_rf[ ]rfregs_5413\[\][ ]=' drivers/net/wireless/ath/ath5k/rfbuffer.h
defsnc '\(static[ ]\)\?const[ ]u\(8\|16\|32\)[ ]b43_ntab_\(\(adjustpower\|estimatepowerlt\|gainctl\|iqlt\|loftlt\|noisevar1\|tdi[24]0a\)[01]\|channelest\|frame\(lookup\|struct\)\|mcs\|pilot\|tdtrn\|tmap\)\[\][ ]=' drivers/net/wireless/b43/tables_nphy.c
# new in 2.6.26
@@ -1073,7 +1074,7 @@ set_except () {
defsnc 'static[ ]const[ ]__u8[ ]\(start\|page[34]\)_73\(02\|11\)\[\][ ]=' 'drivers/media/video/gspca/pac73\(02\|11\)\.c'
initnc 'static[ ]const[ ]__u8[ ]init\(Hv7131\|Ov\(6650\|7630\(_3\)\?\)\|Pas\(106\|202\)\|Tas51[13]0\)\[\][ ]=' drivers/media/video/gspca/sonixb.c
initnc 'static[ ]const[ ]__u8[ ]\(hv7131\|ov\(6650\|7630\(_3\)\?\)\|pas\(106\|202\)\|tas51[13]0\)_sensor_init\(_com\)\?\[\]\[8\][ ]=' drivers/media/video/gspca/sonixb.c
- defsnc 'static[ ]\(const[ ]\)\?\(__\)\?u8[ ]\(mt9v111\|sp80708\|hv7131r\|mi0360b\?\|mo4000\|ov76\([36]0\|48\)\|om6802\|po1030\)_sensor_\(init\|param1\)\[\]\[8\][ ]=' drivers/media/video/gspca/sonixj.c
+ defsnc 'static[ ]\(const[ ]\)\?\(__\)\?u8[ ]\(mt9v111\|sp80708\|hv7131[rd]\|mi0360b\?\|mo4000\|ov76\([36]0\|48\)\|om6802\|po1030\)_sensor_\(init\|param1\)\[\]\[8\][ ]=' drivers/media/video/gspca/sonixj.c
initnc 'static[ ]const[ ]__u8[ ]qtable4\[\][ ]=' drivers/media/video/gspca/sonixj.c
initnc 'static[ ]const[ ]__u16[ ]\(spca500_visual\|Clicksmart510\)_defaults\[\]\[3\][ ]=' drivers/media/video/gspca/spca500.c
initnc 'static[ ]const[ ]__u8[ ]qtable_\(creative_pccam\|kodak_ez200\|pocketdv\)\[2\]\[64\][ ]=' drivers/media/video/gspca/spca500.c
@@ -1086,10 +1087,7 @@ set_except () {
initnc 'static[ ]const[ ]__u8[ ]\(effects\|gamma\)_table\[\(MAX_[A-Z]*\|[A-Z]*_MAX\)\]\[[0-9]*\][ ]=' drivers/media/video/gspca/t631.c
initnc 'static[ ]const[ ]\(__\)\?u8[ ]tas5130a_sensor_init\[\]\[8\][ ]=' drivers/media/video/gspca/t613.c
defsnc 'static[ ]const[ ]struct[ ]usb_action[ ]\(cs2102\|hdcs2020xx\|icm105a\(xx\)\?\|ov7630c\|mt9v111_[13]\|pb0330\([3x]x\)\?\|mi0360soc\)_Initial\(Scale\)\?\[\][ ]=' drivers/media/video/gspca/zc3xx.c
- initnc 'static[ ]const[ ]u8[ ]rtl8225z2_agc\[\][ ]=' drivers/net/wireless/rtl8187_rtl8225.c
- initnc 'static[ ]const[ ]u8[ ]rtl8225z2_ofdm\[\][ ]=' drivers/net/wireless/rtl8187_rtl8225.c
- initnc 'static[ ]const[ ]u8[ ]rtl8225z2_tx_power_cck\[\][ ]=' drivers/net/wireless/rtl8187_rtl8225.c
- initnc 'static[ ]const[ ]u8[ ]rtl8225z2_tx_power_cck_ch14\[\][ ]=' drivers/net/wireless/rtl8187_rtl8225.c
+ initnc 'static[ ]const[ ]u8[ ]rtl8225z2_\(agc\|ofdm\|power_cck\(_ch14\)\?\)\[\][ ]=' drivers/net/wireless/rtl8187_rtl8225.c
initnc 'static[ ]const[ ]__u16[ ]t10_dif_crc_table\[256\][ ]=' lib/crc-t10dif.c
initnc 'static[ ]crb_128M_2M_block_map_t[ ]crb_128M_2M_map\[64\][ ]=' drivers/net/netxen/netxen_hw.c
initnc 'static[ ]const[ ]__u16[ ]crc10_table\[256\][ ]=' drivers/usb/serial/safe_serial.c
@@ -1511,7 +1509,7 @@ set_except () {
# can be trivially converted back to a textual form, without loss.
# blobname '\(cis[/]\)\?SW_\([78]xx\|555\)_SER\.cis' drivers/serial/serial_cs.c
- accept '[ ]dev_dbg[(][&]dev->dev,[ ]["]trying[ ]to[ ]load[ ]CIS[ ]file[ ]%s[\\]n["],[ ]filename[)][;][\n]*[ ]if[ ][(]request_firmware[(]' drivers/pcmcia/ds.c
+ accept '[ ]\(ds_\)\?\(dev_\)\?dbg[(]\(1[,][ ]\)\?\([&]dev->dev,[ ]\)\?["]trying[ ]to[ ]load[ ]\(CIS[ ]file\|firmware\)[ ]%s[\\]n["],[ ]filename[)][;][\n]*[ ]if[ ][(]\(strlen[(]filename[)][^\n]*\([{][^}]*[ ][}]\|[)][\n][ ]*return[^\n]*[;]\)[\n]*[ ]snprintf[(]path,[ ]\(20\|sizeof[(]path[)]\),[^\n]*,[ ]filename[)][;][\n]*[ ]if[ ][(]request_firmware[(][&]fw,[ ]path\|request_firmware[(][&]fw,[ ]filename\),[ ][&]dev->dev[)][^\n]*[)][ ][{][\n][ ]*if[ ][(]fw->size[ ]>=[ ]CISTPL_MAX_CIS_SIZE[)]' drivers/pcmcia/ds.c
accept 'MODULE_FIRMWARE[(]["]\(cis[/]\)\?\(PCMLM28\|DP83903\|3C\(CF\|X\)EM556\|MT5634ZLX\|COMpad[24]\|RS-COM-2P\|GLOBETROTTER\|SW_\([78]xx\|555\)_SER\)\.cis["][)][;]\([\n]MODULE_FIRMWARE[(]["]\(cis[/]\)\?\(PCMLM28\|DP83903\|3C\(CF\|X\)EM556\|MT5634ZLX\|COMpad[24]\|RS-COM-2P\|GLOBETROTTER\|SW_\([78]xx\|555\)_SER\)\.cis["][)][;]\)*' drivers/serial/serial_cs.c
accept 'MODULE_FIRMWARE[(]["]\(cis[/]\)\?\(PCMLM28\|DP83903\|LA-PCM\|PE520\|NE2K\|PE-200\|tamarack\)\.cis["][)][;]\([\n]MODULE_FIRMWARE[(]["]\(cis[/]\)\?\(PCMLM28\|DP83903\|LA-PCM\|PE520\|NE2K\|PE-200\|tamarack\)\.cis["][)][;]\)*' drivers/net/pcnet_cs.c
@@ -1920,7 +1918,7 @@ set_except () {
initnc '[ ][}][ ]vm_devices\[\][ ]='
initnc '[ ][ ][ ][ ]static[ ]const[ ]code[ ]distfix\[32\][ ]='
initnc '[ ][ ][ ][ ]static[ ]const[ ]code[ ]lenfix\[512\][ ]='
- initnc '[ ][ ]int[ ]poly\[\]='
+ defsnc '[ ][ ]int[ ]poly\[\]=' drivers/net/pcmcia/nmclan_cs.c
defsnc '[ ][ ]static[ ]const[ ]unsigned[ ]char[ ]asso_values\[\][ ]=' scripts/genksyms/keywords.c_shipped
defsnc '[ ][ ]static[ ]unsigned[ ]char[ ]asso_values\[\][ ]=' scripts/kconfig/zconf.hash.c_shipped
initnc '[ ][ ][}][ ]cards_ds\[\][ ]='
@@ -1984,10 +1982,8 @@ set_except () {
initnc 'static[ ]const[ ]struct[ ]rf_channel[ ]rf_vals_seq\[\][ ]='
defsnc 'static[ ]const[ ]u16[ ]Sbox\[256\][ ]=' # 'drivers/staging/rtl8192u/r819xU_firmware.c' and elsewhere
initnc 'static[ ]const[ ]u16[ ]count_lut\[\][ ]=' drivers/misc/tsl2550.c
- # drivers/net/e1000e/phy.c
- initnc 'static[ ]const[ ]u16[ ]e1000_igp_2_cable_length_table\[\][ ]='
- initnc 'static[ ]const[ ]u16[ ]rtl8225bcd_rxgain\[\][ ]='
- initnc 'static[ ]const[ ]u16[ ]rtl8225z2_rxgain\[\][ ]='
+ defsnc 'static[ ]const[ ]u16[ ]e1000_igp_2_cable_length_table\[\][ ]=' drivers/net/e1000e/phy.c
+ defsnc 'static[ ]const[ ]u16[ ]rtl8225\(bcd\|z2\)_rxgain\[\][ ]=' 'drivers/net/wireless/rtl818x/rtl818[07]/rtl8225\.c'
defsnc 'static[ ]const[ ]u16[ ]stufftab\[5[ ][*][ ]256\][ ]=' drivers/isdn/gigaset/isocdata.c
initnc 'static[ ]const[ ]u16[ ]tkip_sbox\[256\][ ]='
defsnc 'static[ ]const[ ]u16[ ]wm8753_reg\[\][ ]=' sound/soc/codecs/wm8753.c
@@ -2024,10 +2020,7 @@ set_except () {
initnc 'static[ ]const[ ]u8[ ]q[01]\[256\][ ]='
defsnc 'static[ ]const[ ]u8[ ]ratio_lut\[\][ ]=' drivers/misc/tsl2550.c
initnc 'static[ ]const[ ]u8[ ]rs\[256\][ ]='
- initnc 'static[ ]const[ ]u8[ ]rtl8225_agc\[\][ ]='
- initnc 'static[ ]const[ ]u8[ ]rtl8225_tx_power_cck\[\][ ]='
- initnc 'static[ ]const[ ]u8[ ]rtl8225_tx_power_cck_ch14\[\][ ]='
- initnc 'static[ ]const[ ]u8[ ]rtl8225z2_tx_gain_cck_ofdm\[\][ ]='
+ defsnc 'static[ ]const[ ]u8[ ]rtl8225_\(agc\|tx_\(power\|gain\)_cck\(_ch14\|_ofdm\)\?\)\[\][ ]=' 'drivers/net/wireless/rtl818x/rtl818[07]/rtl8225\.c'
initnc 'static[ ]const[ ]u_char[ ]irq_to_siubit\[\][ ]='
initnc 'static[ ]const[ ]u_char[ ]irq_to_siureg\[\][ ]='
initnc 'static[ ]const[ ]uint8_t[ ]parity\[256\][ ]='
@@ -2055,7 +2048,7 @@ set_except () {
defsnc 'static[ ]const[ ]unsigned[ ]short[ ]x86_keycodes\[256\][ ]=' drivers/tty/vt/keyboard.c
initnc 'static[ ]const[ ]unsigned[ ]table\[\][ ]='
initnc 'static[ ]int[ ]MV300_reg_8bit\[256\][ ]\?=' drivers/video/atafb.c
- initnc 'static[ ]int[ ]fifo_map\[\]\[MAX_TX_FIFOS\][ ]='
+ defsnc 'static[ ]int[ ]fifo_map\[\]\[MAX_TX_FIFOS\][ ]=' drivers/net/s2io.h
initnc 'static[ ]int[ ]initial_lfsr\[\][ ]='
initnc 'static[ ]int[ ]log_tbl\[129\][ ]='
initnc 'static[ ]int[ ]miro_fmtuner\[\][ ][ ]=' drivers/media/video/bt8xx/bt-cards.c
@@ -2346,7 +2339,7 @@ set_except () {
defsnc '[ ]struct[ ]jlj_command[ ]start_commands\[\][ ]=' drivers/media/video/gspca/jeilinj.c
defsnc 'static[ ]u8[ ]init_code\[\]\[2\][ ]=' drivers/media/dvb/dvb-usb/friio-fe.c
defsnc 'static[ ]const[ ]u8[ ]va1j5jf8007[ts]_\(2[05]mhz_\)\?prepare_bufs\[\]\[2\][ ]=' 'drivers/media/dvb/pt1/va1j5jf8007[st]\.c'
- accept '[ ]request_firmware[(][)][ ]will[ ]hit[ ]an[ ]OOPS' drivers/media/dvb/frontends/dib7000p.c
+ accept '[ ]\+request_firmware[(][)][ ]will[ ]hit[ ]an[ ]OOPS' drivers/media/dvb/frontends/dib7000p.c
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'
@@ -2700,6 +2693,55 @@ set_except () {
defsnc 'static[ ]const[ ]u8[ ]gsm_fcs8\[256\][ ]=' drivers/tty/n_gsm.c
defsnc '[ ]static[ ]const[ ]struct[ ]dispc_v_coef[ ]coef_v\(up\|down\)_3tap\[8\][ ]=' drivers/video/omap2/dss/dispc.c
blobname 'c[bt]fw_\(fc\|cna\)\.bin' drivers/scsi/bfa/bfad_im.h
+
+ # New in 2.6.38
+ blobname '%s%04x%s["][,][ ]["]fw_sst_["][,][ \n]*sst_drv_ctx->pci_id[,][ ]["]\.bin' drivers/staging/intel_sst/intel_sst_common.h
+ accept '[*][ ]*0[ ]1[ ]2[ ]3[ ]4[ ]5[ ]6[ ]7[ ]8[ ]9[ ]0[ ]1[ ]2[ ]3[ ]4[ ]5[ ]6[ ]7[ ]8[ ]9[ ]0[ ]1[ ]2[ ]3[ ]4[ ]5[ ]6[ ]7[ ]8[ ]9[ ]0[ ]1' arch/x86/crypto/aesni-intel_asm.S
+ defsnc 'static[ ]struct[ ]aead_testvec[ ]\(aes_gcm_rfc4106\)_\(enc\|dec\)_tv_template\[\][ ]=' 'crypto/testmgr.h'
+ defsnc 'const[ ]struct[ ]\(stk1160\|saa7113\)config[ ]\([{][^}]*[}][ ]\)\?\(stk1160\|saa7113\)config\(PAL\|NTSC\)\[256\][ ]=' drivers/staging/easycap/easycap_low.c
+ blobname '\(sep[/]\)\?\extapp\.image\.bin' drivers/staging/sep/sep_driver.c
+ blobname 'radeon[/]\(BARTS\|BTC\|TURKS\|CAICOS\|%s\)_\(pfp\|rlc\|m[ec]\)\.bin' drivers/gpu/drm/radeon/ni.c
+ defsnc 'static[ ]const[ ]u32[ ]\(barts\|turks\|caicos\)_io_mc_regs\[BTC_IO_MC_REGS_SIZE\]\[2\][ ]=' drivers/gpu/drm/radeon/ni.c
+ defsnc 'static[ ]int[ ]types\[0x80\][ ]=' drivers/gpu/drm/nouveau/nv50_vram.c
+ blobname '\(nouveau[/]\)\?fuc4\(09\|1a\)[cd]' drivers/gpu/drm/nouveau/nvc0_graph.c
+ defsnc '[ ][}][ ]v_table\[\][ ]=' drivers/gpu/drm/i915/i915_dma.c
+ defsnc '[}][ ]nec_8048_init_seq\[\][ ]=' drivers/video/omap2/displays/panel-nec-nl8048hl11-01b.c
+ defsnc 'static[ ]const[ ]int[ ]mc13892_sw1\?\[\][ ]=' drivers/regulator/mc13892-regulator.c
+ defsnc 'static[ ]const[ ]int[ ]dcdc[12]_voltages\[\][ ]=' drivers/regulator/tps6524x-regulator.c
+ defsnc '[ ]\(static[ ]const[ ]\)\?u8[ ]init_hash_seed\[\][ ]=' drivers/net/qlge/qlge_main.c
+ blobname 'vxge[/]X3fw\(-pxe\)\.ncf' drivers/net/vxge/vxge-main.c
+ defsnc '[ ][ ]\(static[ ]const[ ]\)\?int[ ]poly\[\]=' drivers/net/pcmcia/nmclan_cs.c
+ defsnc 'static[ ]\(const[ ]\)\?int[ ]fifo_map\[\]\[MAX_TX_FIFOS\][ ]=' drivers/net/s2io.h
+ defsnc 'static[ ]const[ ]struct[ ]efuse_map[ ]RTL8712_SDIO_EFUSE_TABLE\[\][ ]=' drivers/net/wireless/rtlwifi/efuse.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
+ blobname 'rtlwifi[/]rtl8192cfw\.bin' drivers/net/wireless/rtlwifi/rtl8192ce/sw.c
+ # This looks like pure data.
+ defsnc 'static[ ]u8[ ]reserved_page_packet\[TOTAL_RESERVED_PKT_LEN\][ ]=' drivers/net/wireless/rtlwifi/rtl8192ce/fw.c
+ defsnc 'u32[ ]RTL8192CE\(PHY_REG\|_\?RADIO[AB]\|MAC\|AGCTAB\)_\([21]T_\?ARRAY\|ARRAY_PG\)\[\(PHY_REG\|RADIO[AB]\|MAC\|AGCTAB\)_\([21]T_\?ARRAY_\?\|ARRAY_PG\)LENGTH\][ ]=' drivers/net/wireless/rtlwifi/rtl8192ce/table.c
+ defsc 'static[ ]const[ ]struct[ ]ar9300_eeprom[ ]ar9300_[hx]11[236][ ]=' drivers/net/wireless/ath/ath9k/ar9003_eeprom.c
+ defsnc 'static[ ]const[ ]u32[ ]ar9485_1_0_\(mac\|baseband\)_postamble\[\]\[5\][ ]=' drivers/net/wireless/ath/ath9k/ar9485_initvals.h
+ defsnc 'static[ ]const[ ]u32[ ]ar9485\(Common_\(wo_xlna_\)\?rx_gain\)\?_1_0\(_\(radio\|baseband\|mac\)_core\)\?\[\]\[2\][ ]=' drivers/net/wireless/ath/ath9k/ar9485_initvals.h
+ defsnc 'static[ ]const[ ]u32[ ]ar9485Modes_\(high\|low\)\(est\)\?_\(power\|ob_db\)_tx_gain_1_0\[\]\[5\][ ]=' drivers/net/wireless/ath/ath9k/ar9485_initvals.h
+ defsnc 'static[ ]const[ ]struct[ ]b43_nphy_channeltab_entry_rev3[ ]b43_nphy_channeltab_rev\([34568]\|7_9\)\[\][ ]=' drivers/net/wireless/b43/radio_2056.c
+ blobname '["]softing-4[.]6[/]["]' drivers/net/can/softing/softing_platform.h
+ blobname '\(softing-4[.]6[/]\)\?\(\(b\|ld\)card2\?\|can\(card\|sja\|crd2\)\)\.bin' drivers/net/can/softing/softing_cs.c
+ blobna 'which[ ]you[ ]can[ ]get[ ]at[\n][ ][ ][ ]http:[/][/][^\n]*[/]socketcan[/][\n][^-]*firmware[ ]version' drivers/net/can/softing/Kconfig
+ defsnc 'static[ ]struct[ ]regdata[ ]mb86a20s_init\[\][ ]=' drivers/media/dvb/frontends/mb86a20s.c
+ defsnc 'static[ ]struct[ ]regdata[ ]s921_init\[\][ ]=' drivers/media/dvb/frontends/s921.c
+ defsnc 'static[ ]const[ ]struct[ ]regval_list[ ]ov2640_init_regs\[\][ ]=' drivers/media/video/ov2640.c
+ defsnc 'static[ ]const[ ]struct[ ]ov_i2c_regvals[ ]norm_7660\[\][ ]=' drivers/media/video/ov519.c
+ defsnc '[ ]static[ ]const[ ]struct[ ]ov_regvals[ ]bridge_ov7660\[2\]\[10\][ ]=' drivers/media/video/gspca/ov519.c
+ defsnc '[ ]static[ ]const[ ]u8[ ]fr_tb\[2\]\[6\]\[3\][ ]=' drivers/media/video/gspca/ov519.c
+ defsnc '[ ]static[ ]const[ ]struct[ ]ov_i2c_regvals[ ]\(brit\|contrast\|colors\)_7660\[\]\[\(6\|7\|31\)\][ ]=' drivers/media/video/gspca/ov519.c
+ blobname 'radio-wl1273-fw\.bin' drivers/media/radio/radio-wl1273.c
+ defsnc '[}][ ]scrubrates\[\][ ]=' drivers/edac/amd64_edac.c
+ defsnc '[ ]static[ ]const[ ]uint8_t[ ]branch_table\[32\][ ]=' lib/xz/xz_dec_bcj.c
+ defsnc 'static[ ]const[ ]struct[ ]_pll_div[ ]codec_master_pll_div\[\][ ]=' sound/soc/codecs/alc5623.c
+ defsnc '[}][ ]coeff_div\[\][ ]=' sound/soc/codecs/wm8737.c
+ blobname 'rpm_firmware\(_rev11\)\?\.bin' sound/pci/rme9652/hdsp.c
+ blobname 'mwl8k[/]fmimage_8366_ap-["][ ][#]api[ ]["]\.fw' drivers/net/wireless/mwl8k.c
+ blobname 'rtl_nic[/]rtl8168d-[12]\.fw' drivers/net/r8169.c
;;
*/*freedo*.patch | */*logo*.patch)
@@ -2710,6 +2752,92 @@ set_except () {
defsnc 'static[ ]u8[ ]sa2400_rf_rssi_map\[\][ ]=' drivers/net/wireless/rtl818x/rtl8180_sa2400.c
;;
+ */patch*-2.6.38-rc*)
+ # New in 2.6.38
+ blobname '%s%04x%s["][,][ ]["]fw_sst_["][,][ \n]*sst_drv_ctx->pci_id[,][ ]["]\.bin' drivers/staging/intel_sst/intel_sst_common.h
+ accept '[*][ ]*0[ ]1[ ]2[ ]3[ ]4[ ]5[ ]6[ ]7[ ]8[ ]9[ ]0[ ]1[ ]2[ ]3[ ]4[ ]5[ ]6[ ]7[ ]8[ ]9[ ]0[ ]1[ ]2[ ]3[ ]4[ ]5[ ]6[ ]7[ ]8[ ]9[ ]0[ ]1' arch/x86/crypto/aesni-intel_asm.S
+ defsnc 'static[ ]struct[ ]aead_testvec[ ]\(aes_gcm_rfc4106\)_\(enc\|dec\)_tv_template\[\][ ]=' 'crypto/testmgr.h'
+ defsnc 'const[ ]struct[ ]\(stk1160\|saa7113\)config[ ]\([{][^}]*[}][ ]\)\?\(stk1160\|saa7113\)config\(PAL\|NTSC\)\?\[256\][ ]=' drivers/staging/easycap/easycap_low.c
+ blobname '\(sep[/]\)\?\extapp\.image\.bin' drivers/staging/sep/sep_driver.c
+ blobname 'radeon[/]\(BARTS\|BTC\|TURKS\|CAICOS\|%s\)_\(pfp\|rlc\|m[ec]\)\.bin' drivers/gpu/drm/radeon/ni.c
+ defsnc 'static[ ]const[ ]u32[ ]\(barts\|turks\|caicos\)_io_mc_regs\[BTC_IO_MC_REGS_SIZE\]\[2\][ ]=' drivers/gpu/drm/radeon/ni.c
+ defsnc 'static[ ]int[ ]types\[0x80\][ ]=' drivers/gpu/drm/nouveau/nv50_vram.c
+ blobname '\(nouveau[/]\)\?fuc4\(09\|1a\)[cd]' drivers/gpu/drm/nouveau/nvc0_graph.c
+ defsnc '[ ][}][ ]v_table\[\][ ]=' drivers/gpu/drm/i915/i915_dma.c
+ defsnc '[}][ ]nec_8048_init_seq\[\][ ]=' drivers/video/omap2/displays/panel-nec-nl8048hl11-01b.c
+ defsnc 'static[ ]const[ ]int[ ]mc13892_sw1\?\[\][ ]=' drivers/regulator/mc13892-regulator.c
+ defsnc 'static[ ]const[ ]int[ ]dcdc[12]_voltages\[\][ ]=' drivers/regulator/tps6524x-regulator.c
+ defsnc '[ ]\(static[ ]const[ ]\)\?u8[ ]init_hash_seed\[\][ ]=' drivers/net/qlge/qlge_main.c
+ blobname 'vxge[/]X3fw\(-pxe\)\.ncf' drivers/net/vxge/vxge-main.c
+ defsnc '[ ][ ]\(static[ ]const[ ]\)\?int[ ]poly\[\]=' drivers/net/pcmcia/nmclan_cs.c
+ defsnc 'static[ ]\(const[ ]\)\?int[ ]fifo_map\[\]\[MAX_TX_FIFOS\][ ]=' drivers/net/s2io.h
+ defsnc 'static[ ]const[ ]struct[ ]efuse_map[ ]RTL8712_SDIO_EFUSE_TABLE\[\][ ]=' drivers/net/wireless/rtlwifi/efuse.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
+ blobname 'rtlwifi[/]rtl8192cfw\.bin' drivers/net/wireless/rtlwifi/rtl8192ce/sw.c
+ # This looks like pure data.
+ defsnc 'static[ ]u8[ ]reserved_page_packet\[TOTAL_RESERVED_PKT_LEN\][ ]=' drivers/net/wireless/rtlwifi/rtl8192ce/fw.c
+ defsnc 'u32[ ]RTL8192CE\(PHY_REG\|_\?RADIO[AB]\|MAC\|AGCTAB\)_\([21]T_\?ARRAY\|ARRAY_PG\)\[\(PHY_REG\|RADIO[AB]\|MAC\|AGCTAB\)_\([21]T_\?ARRAY_\?\|ARRAY_PG\)LENGTH\][ ]=' drivers/net/wireless/rtlwifi/rtl8192ce/table.c
+ defsc 'static[ ]const[ ]struct[ ]ar9300_eeprom[ ]ar9300_[hx]11[236][ ]=' drivers/net/wireless/ath/ath9k/ar9003_eeprom.c
+ defsnc 'static[ ]const[ ]u32[ ]ar9485_1_0_\(mac\|baseband\)_postamble\[\]\[5\][ ]=' drivers/net/wireless/ath/ath9k/ar9485_initvals.h
+ defsnc 'static[ ]const[ ]u32[ ]ar9485\(Common_\(wo_xlna_\)\?rx_gain\)\?_1_0\(_\(radio\|baseband\|mac\)_core\)\?\[\]\[2\][ ]=' drivers/net/wireless/ath/ath9k/ar9485_initvals.h
+ defsnc 'static[ ]const[ ]u32[ ]ar9485Modes_\(high\|low\)\(est\)\?_\(power\|ob_db\)_tx_gain_1_0\[\]\[5\][ ]=' drivers/net/wireless/ath/ath9k/ar9485_initvals.h
+ defsnc 'static[ ]const[ ]struct[ ]b43_nphy_channeltab_entry_rev3[ ]b43_nphy_channeltab_rev\([34568]\|7_9\)\[\][ ]=' drivers/net/wireless/b43/radio_2056.c
+ blobname '["]softing-4[.]6[/]["]' drivers/net/can/softing/softing_platform.h
+ blobname '\(softing-4[.]6[/]\)\?\(\(b\|ld\)card2\?\|can\(card\|sja\|crd2\)\)\.bin' drivers/net/can/softing/softing_cs.c
+ blobna 'which[ ]you[ ]can[ ]get[ ]at[\n][ ][ ][ ]http:[/][/][^\n]*[/]socketcan[/][\n][^-]*firmware[ ]version' drivers/net/can/softing/Kconfig
+ defsnc 'static[ ]struct[ ]regdata[ ]mb86a20s_init\[\][ ]=' drivers/media/dvb/frontends/mb86a20s.c
+ defsnc 'static[ ]struct[ ]regdata[ ]s921_init\[\][ ]=' drivers/media/dvb/frontends/s921.c
+ defsnc 'static[ ]const[ ]struct[ ]regval_list[ ]ov2640_init_regs\[\][ ]=' drivers/media/video/ov2640.c
+ defsnc 'static[ ]const[ ]struct[ ]ov_i2c_regvals[ ]norm_7660\[\][ ]=' drivers/media/video/ov519.c
+ defsnc '[ ]static[ ]const[ ]struct[ ]ov_regvals[ ]bridge_ov7660\[2\]\[10\][ ]=' drivers/media/video/gspca/ov519.c
+ defsnc '[ ]static[ ]const[ ]u8[ ]fr_tb\[2\]\[6\]\[3\][ ]=' drivers/media/video/gspca/ov519.c
+ defsnc '[ ]static[ ]const[ ]struct[ ]ov_i2c_regvals[ ]\(brit\|contrast\|colors\)_7660\[\]\[\(6\|7\|31\)\][ ]=' drivers/media/video/gspca/ov519.c
+ blobname 'radio-wl1273-fw\.bin' drivers/media/radio/radio-wl1273.c
+ defsnc '[}][ ]scrubrates\[\][ ]=' drivers/edac/amd64_edac.c
+ defsnc '[ ]static[ ]const[ ]uint8_t[ ]branch_table\[32\][ ]=' lib/xz/xz_dec_bcj.c
+ defsnc 'static[ ]const[ ]struct[ ]_pll_div[ ]codec_master_pll_div\[\][ ]=' sound/soc/codecs/alc5623.c
+ defsnc '[}][ ]coeff_div\[\][ ]=' sound/soc/codecs/wm8737.c
+ blobname 'rpm_firmware\(_rev11\)\?\.bin' sound/pci/rme9652/hdsp.c
+ blobname 'mwl8k[/]fmimage_8366_ap-["][ ][#]api[ ]["]\.fw' drivers/net/wireless/mwl8k.c
+ blobname 'rtl_nic[/]rtl8168d-[12]\.fw' drivers/net/r8169.c
+ # Above is for patterns new in 2.6.38, below is for older patterns.
+ initnc '\([;][/][*]@@[ ]-[0-9]*,[0-9]*[ ][+][0-9]*,[0-9]*[ ]@@[ ]\)\?static[ ]const[ ]__u8[ ]pac207_sensor_init\[\]\[8\(\][ ]=[ ][{]\)\?\([*][/][;]\)\?' drivers/media/video/gspca/pac207.c
+ initnc '\([;][/][*]@@[ ]-[0-9]*,[0-9]*[ ][+][0-9]*,[0-9]*[ ]@@[ ]\)\?static[ ]const[ ]__u8[ ]pas202_sensor_init\[\]\[8\(\][ ]=[ ][{]\)\?\([*][/][;]\)\?' drivers/media/video/gspca/sonixb.c
+ initnc '\([;][/][*]@@[ ]-[0-9]*,[0-9]*[ ][+][0-9]*,[0-9]*[ ]@@[ ]\)\?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'
+ initnc '\([;][/][*]@@[ ]-[0-9]*,[0-9]*[ ][+][0-9]*,[0-9]*[ ]@@[ ]\)\?static[ ]const[ ]u32[ ]ar9300_2p[02]_\(radio\|mac\|baseband\)_postamble\[\]\[5\][ ]=\([ ][{][*][/][;]\)\?' 'drivers/net/wireless/ath/ath9k/ar9003_\(2p[02]_\)\?initvals\.h'
+ initc '\([;][/][*]@@[ ]-[0-9]*,[0-9]*[ ][+][0-9]*,[0-9]*[ ]@@[ ]\)\?static[ ]const[ ]struct[ ]ar9300_eeprom[ ]ar9300_default[ ]=\([ ][{][*][/][;]\)\?' drivers/net/wireless/ath/ath9k/ar9003_eeprom.c
+ initnc '\([;][/][*]@@[ ]-[0-9]*,[0-9]*[ ][+][0-9]*,[0-9]*[ ]@@[ ]\)\?\(static[ ]\)\?const[ ]u32[ ]b43_ntab_framestruct\[\][ ]=\([ ][{][*][/][;]\)\?' drivers/net/wireless/b43/tables_nphy.c
+ initnc '\([;][/][*]@@[ ]-[0-9]*,[0-9]*[ ][+][0-9]*,[0-9]*[ ]@@[ ]\)\?int[ ]tones\[2048\][ ]=\([ ][{][*][/][;]\)\?' drivers/staging/easycap/easycap_testcard.c
+ initnc '\([;][/][*]@@[ ]-[0-9]*,[0-9]*[ ][+][0-9]*,[0-9]*[ ]@@[ ]\)\?static[ ]\(yy\)\?const[ ]\(yytype\|flex\)_u\?int\(8\|16\|32\)\(_t\)\?[ ]yy[^\n []*\[[0-9]*\][ ]=\([*][/][;]\)\?' '.*\.tab\.c_shipped'
+ initnc "[ ][ ][ ]interrupts[ ]=[ ]<\\(0x\\)\\?3[ ]\\(0x\\)\\?0[ ]\\(0x\\)\\?0[ ][ ]$blobpat*>[;]" 'arch/powerpc/boot/dts/\(cm5200\|lite5200b\?\|kuroboxHG\|pcm030\|tqm5200\).dts'
+ accept '[ ]p7500->firmware[ ]=' drivers/media/dvb/dvb-usb/dw2102.c
+ defsnc 'static[ ]\(const[ ]\)\?\(__\)\?u8[ ]\(mt9v111\|sp80708\|hv7131[rd]\|mi0360b\?\|mo4000\|ov76\([36]0\|48\)\|om6802\)_sensor_\(init\|param1\)\[\]\[8\][ ]=' drivers/media/video/gspca/sonixj.c
+ initnc '\(uint16_t\|u16\)[ ]e1000_igp_2_cable_length_table\[IGP02E1000_AGC_LENGTH_TABLE_SIZE\][ ]=' drivers/net/e1000/e1000_hw.c # u16 on 2.6.26
+ defsnc 'static[ ]const[ ]u16[ ]e1000_igp_2_cable_length_table\[\][ ]=' drivers/net/e1000e/phy.c
+ initnc 'static[ ]const[ ]u32[ ]\(main\|gear\)_seedset\[BACKOFF_SEEDSET_ROWS\]\[BACKOFF_SEEDSET_LFSRS\][ ]=' drivers/net/forcedeth.c
+ defsnc '[ ][ ]*\(static[ ]\)\?\(const[ ]\)\?struct[ ]phy_reg[ ]phy_reg_init\(_0\)\?\[\][ ]=' drivers/net/r8169.c
+ defsnc 'static[ ]const[ ]struct[ ]ath5k_ini_mode[ ]rf5413_ini_mode_end\[\][ ]=' drivers/net/wireless/ath/ath5k/initvals.c
+ defsnc 'static[ ]const[ ]struct[ ]ath5k_ini_rfbuffer[ ]rfb_\(511[12]a\?\|5413\|231[67]\|24\(1[37]\|25\)\)\[\][ ]=' drivers/net/wireless/ath5k/rfbuffer.h
+ accept '[ ]hif_dev->firmware[ ]=[ ]NULL[;]' drivers/net/wireless/ath/ath9k/hif_usb.c
+ defsnc '\(static[ ]\)\?const[ ]u\(8\|16\|32\)[ ]b43_ntab_\(\(adjustpower\|estimatepowerlt\|gainctl\|iqlt\|loftlt\|noisevar1\|tdi[24]0a\)[01]\|channelest\|frame\(lookup\|struct\)\|mcs\|pilot\|tdtrn\|tmap\)\[\][ ]=' drivers/net/wireless/b43/tables_nphy.c
+ defsnc 'static[ ]const[ ]u8[ ]rtl8225\(z2\)\?_\(agc\|ofdm\|\(tx_\)\?\(power\|gain\)_cck\(_ch14\|_ofdm\)\?\)\[\][ ]=' 'drivers/net/wireless/rtl818x/rtl818[07]/rtl8225\.c'
+ defsnc 'static[ ]const[ ]u16[ ]rtl8225\(bcd\|z2\)_rxgain\[\][ ]=' 'drivers/net/wireless/rtl818x/rtl818[07]/rtl8225\.c'
+ defsnc 'static[ ]u8[ ]sa2400_rf_rssi_map\[\][ ]=' drivers/net/wireless/rtl818x/rtl8180_sa2400.c
+ defsnc 'static[ ]const[ ]u8[ ]rtl8187b_reg_table\[\]\[3\][ ]=' drivers/net/wireless/rtl8187_dev.c
+ defsnc '[ ][ ][ ][ ]u8[ ]ConnectionMsg\[\][ ]=' drivers/staging/ft1000/ft1000-usb/ft1000_chdev.c
+ accept '[ ]len[ ][+]=[ ]snprintf[(]buf[ ][+][ ]len[,][ ]sizeof[(]buf[)][ ]-[ ]len,[ ]["][.]bin["][)][;]' drivers/staging/intel_sst/intel_sst_dsp.c
+ defsnc 'static[ ]unsigned[ ]char[ ]vid_vop_header\[\][ ]=' drivers/staging/solo6x10/solo6010-v4l2-enc.c
+ accept 'MODULE_FIRMWARE[(]["]\(cis[/]\)\?\(PCMLM28\|DP83903\|3C\(CF\|X\)EM556\|MT5634ZLX\|COMpad[24]\|RS-COM-2P\|GLOBETROTTER\|SW_\([78]xx\|555\)_SER\)\.cis["][)][;]\([\n]MODULE_FIRMWARE[(]["]\(cis[/]\)\?\(PCMLM28\|DP83903\|3C\(CF\|X\)EM556\|MT5634ZLX\|COMpad[24]\|RS-COM-2P\|GLOBETROTTER\|SW_\([78]xx\|555\)_SER\)\.cis["][)][;]\)*' drivers/serial/serial_cs.c
+ defsnc 'static[ ]struct[ ]v_table[ ]v_table\[\][ ]=' drivers/gpu/drm/i915/i915_dma.c
+ defsnc 'static[ ]u8[ ]\(init\|c\)_table\[\]=' drivers/media/dvb/frontends/s921_core.c
+ defsnc 'static[ ]\(u16\|struct[ ]i2c_reg_u16\)[ ]\(bridge\|mt9\(v\(11[12]\|011\)\|m001\)\)_init\[\]\(\[2\]\)\?[ ]=' drivers/media/video/gspca/sn9c20x.c
+ defsnc '[ ]static[ ]const[ ]struct[ ]struct_initData[ ]initData\[\][ ]=' drivers/media/video/usbvideo/ibmcam.c
+ defsnc '[ ]u32[ ]reg_boundaries\[\][ ]=' drivers/net/bnx2.c
+ initnc 'static[ ]const[ ]struct[ ]ath5k_ini_mode[ ]rf\(5413\|24\(13\|25\)\)_ini_mode_end\[\][ ]=' drivers/net/wireless/ath5k/initvals.c
+ defsnc 'static[ ]u32[ ]\(h_prescale\|v_gain\)\[64\][ ]=' drivers/staging/stradis/stradis.c
+ ;;
+
*/patch*-2.6.37-rc*) # up to -rc8-git3
defsnc 'static[ ]u32[ ]epll_div\[\]\[6\][ ]=' arch/arm/mach-s5pv210/clock.c
defsnc 'static[ ]struct[ ]titan_gpio_cfg[ ]titan_gpio_table\[\][ ]=' arch/mips/ar7/gpio.c
@@ -3032,7 +3160,7 @@ set_except () {
accept '[ ]p7500->firmware[ ]=' drivers/media/dvb/dvb-usb/dw2102.c
blobname 'dvb-usb-p7500\.fw' drivers/media/dvb/dvb-usb/dw2102.c
defsnc 'static[ ]u8[ ]ITUDecoderSetup\[4\]\[16\][ ]=' drivers/media/dvb/ngene/ngene-core.c
- blobname 'ngene_1[567]\.fw' drivers/media/dvb/ngene/ngene-core.c
+ blobname 'ngene_1[5678]\.fw' drivers/media/dvb/ngene/ngene-core.c
blobname 'sms1xxx-hcw-55xxx-i\?sdbt-02\.fw' drivers/media/dvb/siano/sms-cards.c
defsnc 'static[ ]u8[ ]samsung_smt_7020_inittab\[\][ ]=' drivers/media/video/cx88/cx88-dvb.c
defsnc 'static[ ]const[ ]u8[ ]\(bridge\|sensor\)_init\(_2\)\?\[\]\[2\][ ]=' drivers/media/video/gspca/ov534_9.c
@@ -3439,8 +3567,7 @@ set_except () {
accept '[ ][ ][ ][ ][ ]\([ ]49,\)*[\n]\([ 0-9,]*[\n]\)*[ ][ ][ ][ ][ ]\([ ]49,\)*$'
initnc 'static[ ]const[ ]unsigned[ ]char[ ]wm_vol\[256\][ ]='
accept 'domain<N>[ ]<cpumask>[ ]1[ ]2[ ]3[ ]4[ ]5[ ]6[ ]7[ ]8[ ]9[ ]10[ ]11[ ]12[ ]13[ ]14[ ]15[ ]16[ ]17[ ]18[ ]19[ ]20[ ]21[ ]22[ ]23[ ]24[ ]25[ ]26[ ]27[ ]28[ ]29[ ]30[ ]31[ ]32[ ]33[ ]34[ ]35[ ]36$'
- # drivers/net/e1000e/phy.c
- initnc 'static[ ]const[ ]u16[ ]e1000_igp_2_cable_length_table\[\][ ]='
+ defsnc 'static[ ]const[ ]u16[ ]e1000_igp_2_cable_length_table\[\][ ]=' drivers/net/e1000e/phy.c
accept '[ ]24[ ]=>[ ]\[[\n]\([^\n]*[\n]\)*[ ]\]\(,[ ][0-9]\+[ ]=>[ ]\[\)\?$'
accept '[ ][ ]'"[']"'0x[^\n]*[\n]\([^\n]*[\n]\)*[ ]\]\([,][ ][0-9]\+[ ]=>[ ]\[\)\?$'
initnc 'const[ ]u\(8\|16\|32\)[ ]b43_ntab_\(\(adjustpower\|estimatepowerlt\|gainctl\|iqlt\|loftlt\|noisevar1\|tdi[24]0a\)[01]\|channelest\|frame\(lookup\|struct\)\|mcs\|pilot\|tdtrn\|tmap\)\[\][ ]='
@@ -3486,6 +3613,15 @@ set_except () {
accept '[(]at[ ]which[ ]point[ ]it[ ]should[ ]use[ ]request_firmware'
;;
*/linux-2.6-v4l-dvb*.patch)
+ # post 2.6.37 fixes start here
+ defsnc 'static[ ]const[ ]struct[ ]dib0090_pll[ ]dib0090_p1g_pll_table\[\][ ]=' drivers/media/dvb/frontends/dib0090.c
+ defsnc '[ ]static[ ]u8[ ]sine\[\][ ]=' drivers/media/dvb/frontends/dib7000p.c
+ defsnc 'u32[ ]fe_info\[44\][ ]=' drivers/media/dvb/frontends/dib9000.c
+ defsnc 'static[ ]const[ ]struct[ ]regval_list[ ]ov2640_init_regs\[\][ ]=' drivers/media/video/ov2640.c
+ accept 'static[ ]struct[ ]dvb_usb_device_properties[ ]technisat_usb2_devices[ ]=[ ][{][\n]\([ ]\.\(caps\|usb_ctrl\)[ ]*=[ ][^",]*,[\n]*\)*\([ ]\.identify_state[ ]*=[ ]technisat_usb2_identify_state,[\n]\)\?[ ]\.firmware[ ]*=[ ]' drivers/media/dvb/dvb-usb/technisat-usb2.c
+ # present in 2.6.37
+ accept 'static[ ]struct[ ]dvb_usb_device_properties[ ]lme2510c\?_properties[ ]=[ ][{][\n]\([ ]\.\(caps\|usb_ctrl\)[ ]*=[ ][^",]*,[\n]*\)*\([ ]\.download_firmware[ ]=[ ]lme2510_download_firmware,[\n]\)\?[ ]\.firmware[ ]*=[ ]' drivers/media/dvb/dvb-usb/lmedm04.c
+ accept '[ ]\+request_firmware[(][)][ ]will[ ]hit[ ]an[ ]OOPS' drivers/media/dvb/frontends/dib7000p.c
# post 2.6.35 fixes start here
defsnc '[ ]static[ ]u8[ ]def_regs\[\][ ]=' drivers/media/common/tuners/tda18218.c
accept '[ ]p7500->firmware[ ]=' drivers/media/dvb/dvb-usb/dw2102.c
@@ -3507,7 +3643,7 @@ set_except () {
defsnc '[ ]static[ ]const[ ]struct[ ]ov_i2c_regvals[ ]colors_7660\[\]\[6\][ ]=' drivers/media/video/gspca/ov519.c
initnc '\([;][/][*]@@[ ]-[0-9]*,[0-9]*[ ][+][0-9]*,[0-9]*[ ]@@[ ]\)\?static[ ]const[ ]__u8[ ]pac207_sensor_init\[\]\[8\(\][ ]=[ ][{]\)\?\([*][/][;]\)\?' drivers/media/video/gspca/pac207.c
initnc '\([;][/][*]@@[ ]-[0-9]*,[0-9]*[ ][+][0-9]*,[0-9]*[ ]@@[ ]\)\?static[ ]const[ ]__u8[ ]pas202_sensor_init\[\]\[8\(\][ ]=[ ][{]\)\?\([*][/][;]\)\?' drivers/media/video/gspca/sonixb.c
- defsnc 'static[ ]\(const[ ]\)\?\(__\)\?u8[ ]\(mt9v111\|sp80708\|hv7131r\|mi0360b\?\|mo4000\|ov76\([36]0\|48\)\|om6802\)_sensor_\(init\|param1\)\[\]\[8\][ ]=' drivers/media/video/gspca/sonixj.c
+ defsnc 'static[ ]\(const[ ]\)\?\(__\)\?u8[ ]\(mt9v111\|sp80708\|hv7131[rd]\|mi0360b\?\|mo4000\|ov76\([36]0\|48\)\|om6802\)_sensor_\(init\|param1\)\[\]\[8\][ ]=' drivers/media/video/gspca/sonixj.c
defsnc 'static[ ]const[ ]struct[ ]ucbus_write_cmd[ ]\(icx098bq\|lz24bp\)_start_[012]\[\][ ]=' drivers/media/video/gspca/sq930x.c
defsnc '[}][ ]capconfig\[4\]\[2\][ ]=' drivers/media/video/gspca/sq930x.c
defsnc 'static[ ]const[ ]u16[ ]rca_initdata\[\]\[3\][ ]=' drivers/media/video/gspca/xirlink_cit.c
diff --git a/freed-ora/current/master/debug-tty-print-dev-name.patch b/freed-ora/current/master/debug-tty-print-dev-name.patch
deleted file mode 100644
index 5c06dd991..000000000
--- a/freed-ora/current/master/debug-tty-print-dev-name.patch
+++ /dev/null
@@ -1,17 +0,0 @@
-diff --git a/drivers/tty/tty_io.c b/drivers/tty/tty_io.c
-index 878f6d6..8d6867d 100644
---- a/drivers/tty/tty_io.c
-+++ b/drivers/tty/tty_io.c
-@@ -1329,7 +1330,11 @@ static int tty_reopen(struct tty_struct *tty)
- tty->driver = driver; /* N.B. why do this every time?? */
-
- mutex_lock(&tty->ldisc_mutex);
-- WARN_ON(!test_bit(TTY_LDISC, &tty->flags));
-+ if (!test_bit(TTY_LDISC, &tty->flags)) {
-+ printk("%s: !test_bit(TTY_LDISC, &tty->flags) dev=%s ldisc=%s flags=%x\n",
-+ __func__, tty->name, tty->ldisc ? tty->ldisc->ops ? tty->ldisc->ops->name : NULL : NULL, tty->flags);
-+ WARN_ON(1);
-+ }
- mutex_unlock(&tty->ldisc_mutex);
-
- return 0;
diff --git a/freed-ora/current/master/drm-intel-big-hammer.patch b/freed-ora/current/master/drm-intel-big-hammer.patch
index 97bb2e8cd..bf152af3b 100644
--- a/freed-ora/current/master/drm-intel-big-hammer.patch
+++ b/freed-ora/current/master/drm-intel-big-hammer.patch
@@ -1,13 +1,13 @@
omgwtfbbqchainsaw?
---
- drivers/gpu/drm/i915/i915_gem.c | 5 +++++
+ drivers/gpu/drm/i915/i915_gem_execbuffer.c | 5 +++++
1 files changed, 5 insertions(+), 0 deletions(-)
-diff --git a/drivers/gpu/drm/i915/i915_gem.c b/drivers/gpu/drm/i915/i915_gem.c
-index 8eb8453..36fa9d7 100644
---- a/drivers/gpu/drm/i915/i915_gem.c
-+++ b/drivers/gpu/drm/i915/i915_gem.c
-@@ -3692,6 +3692,11 @@ i915_gem_do_execbuffer(struct drm_device *dev, void *data,
+diff --git a/drivers/gpu/drm/i915/i915_gem_execbuffer.c b/drivers/gpu/drm/i915/i915_gem_execbuffer.c
+index e698343..21e601d1 100644
+--- a/drivers/gpu/drm/i915/i915_gem_execbuffer.c
++++ b/drivers/gpu/drm/i915/i915_gem_execbuffer.c
+@@ -1090,6 +1090,11 @@ i915_gem_do_execbuffer(struct drm_device *dev, void *data,
if (ret)
goto pre_mutex_err;
diff --git a/freed-ora/current/master/drm-nouveau-updates.patch b/freed-ora/current/master/drm-nouveau-updates.patch
index 607602cfc..d012a1c34 100644
--- a/freed-ora/current/master/drm-nouveau-updates.patch
+++ b/freed-ora/current/master/drm-nouveau-updates.patch
@@ -1 +1,1333 @@
-nil
+ drivers/gpu/drm/nouveau/nouveau_bios.c | 25 +--
+ drivers/gpu/drm/nouveau/nouveau_bo.c | 6 +-
+ drivers/gpu/drm/nouveau/nouveau_channel.c | 2 +-
+ drivers/gpu/drm/nouveau/nouveau_dp.c | 2 -
+ drivers/gpu/drm/nouveau/nouveau_drv.h | 13 +-
+ drivers/gpu/drm/nouveau/nouveau_fence.c | 190 ++++++++++------
+ drivers/gpu/drm/nouveau/nouveau_mem.c | 16 +-
+ drivers/gpu/drm/nouveau/nouveau_object.c | 22 ++-
+ drivers/gpu/drm/nouveau/nouveau_sgdma.c | 342 +++++++++++++++++++++++++----
+ drivers/gpu/drm/nouveau/nouveau_state.c | 10 +-
+ drivers/gpu/drm/nouveau/nouveau_temp.c | 4 +-
+ drivers/gpu/drm/nouveau/nv04_fifo.c | 17 ++-
+ drivers/gpu/drm/nouveau/nv40_fb.c | 59 +++++-
+ drivers/gpu/drm/nouveau/nv50_display.c | 7 +-
+ drivers/gpu/drm/nouveau/nv50_fifo.c | 3 +-
+ drivers/gpu/drm/nouveau/nv50_gpio.c | 13 +-
+ drivers/gpu/drm/nouveau/nv50_graph.c | 8 +-
+ drivers/gpu/drm/nouveau/nv50_vm.c | 1 -
+ drivers/gpu/drm/nouveau/nvc0_fifo.c | 15 +-
+ drivers/gpu/drm/nouveau/nvc0_graph.c | 2 -
+ 20 files changed, 567 insertions(+), 190 deletions(-)
+
+diff --git a/drivers/gpu/drm/nouveau/nouveau_bios.c b/drivers/gpu/drm/nouveau/nouveau_bios.c
+index 6bdab89..b8ff1e7 100644
+--- a/drivers/gpu/drm/nouveau/nouveau_bios.c
++++ b/drivers/gpu/drm/nouveau/nouveau_bios.c
+@@ -5950,6 +5950,11 @@ apply_dcb_connector_quirks(struct nvbios *bios, int idx)
+ }
+ }
+
++static const u8 hpd_gpio[16] = {
++ 0xff, 0x07, 0x08, 0xff, 0xff, 0x51, 0x52, 0xff,
++ 0xff, 0xff, 0xff, 0xff, 0xff, 0x5e, 0x5f, 0x60,
++};
++
+ static void
+ parse_dcb_connector_table(struct nvbios *bios)
+ {
+@@ -5986,23 +5991,9 @@ parse_dcb_connector_table(struct nvbios *bios)
+
+ cte->type = (cte->entry & 0x000000ff) >> 0;
+ cte->index2 = (cte->entry & 0x00000f00) >> 8;
+- switch (cte->entry & 0x00033000) {
+- case 0x00001000:
+- cte->gpio_tag = 0x07;
+- break;
+- case 0x00002000:
+- cte->gpio_tag = 0x08;
+- break;
+- case 0x00010000:
+- cte->gpio_tag = 0x51;
+- break;
+- case 0x00020000:
+- cte->gpio_tag = 0x52;
+- break;
+- default:
+- cte->gpio_tag = 0xff;
+- break;
+- }
++
++ cte->gpio_tag = ffs((cte->entry & 0x07033000) >> 12);
++ cte->gpio_tag = hpd_gpio[cte->gpio_tag];
+
+ if (cte->type == 0xff)
+ continue;
+diff --git a/drivers/gpu/drm/nouveau/nouveau_bo.c b/drivers/gpu/drm/nouveau/nouveau_bo.c
+index d38a4d9..bf260af 100644
+--- a/drivers/gpu/drm/nouveau/nouveau_bo.c
++++ b/drivers/gpu/drm/nouveau/nouveau_bo.c
+@@ -382,7 +382,8 @@ nouveau_bo_create_ttm_backend_entry(struct ttm_bo_device *bdev)
+ case NOUVEAU_GART_AGP:
+ return ttm_agp_backend_init(bdev, dev->agp->bridge);
+ #endif
+- case NOUVEAU_GART_SGDMA:
++ case NOUVEAU_GART_PDMA:
++ case NOUVEAU_GART_HW:
+ return nouveau_sgdma_init_ttm(dev);
+ default:
+ NV_ERROR(dev, "Unknown GART type %d\n",
+@@ -436,7 +437,8 @@ nouveau_bo_init_mem_type(struct ttm_bo_device *bdev, uint32_t type,
+ TTM_PL_FLAG_WC;
+ man->default_caching = TTM_PL_FLAG_WC;
+ break;
+- case NOUVEAU_GART_SGDMA:
++ case NOUVEAU_GART_PDMA:
++ case NOUVEAU_GART_HW:
+ man->flags = TTM_MEMTYPE_FLAG_MAPPABLE |
+ TTM_MEMTYPE_FLAG_CMA;
+ man->available_caching = TTM_PL_MASK_CACHING;
+diff --git a/drivers/gpu/drm/nouveau/nouveau_channel.c b/drivers/gpu/drm/nouveau/nouveau_channel.c
+index 3960d66..3d7b316 100644
+--- a/drivers/gpu/drm/nouveau/nouveau_channel.c
++++ b/drivers/gpu/drm/nouveau/nouveau_channel.c
+@@ -35,7 +35,7 @@ nouveau_channel_pushbuf_ctxdma_init(struct nouveau_channel *chan)
+ struct drm_nouveau_private *dev_priv = dev->dev_private;
+ struct nouveau_bo *pb = chan->pushbuf_bo;
+ struct nouveau_gpuobj *pushbuf = NULL;
+- int ret;
++ int ret = 0;
+
+ if (dev_priv->card_type >= NV_50) {
+ if (dev_priv->card_type < NV_C0) {
+diff --git a/drivers/gpu/drm/nouveau/nouveau_dp.c b/drivers/gpu/drm/nouveau/nouveau_dp.c
+index 38d5995..7beb82a 100644
+--- a/drivers/gpu/drm/nouveau/nouveau_dp.c
++++ b/drivers/gpu/drm/nouveau/nouveau_dp.c
+@@ -175,7 +175,6 @@ nouveau_dp_link_train_adjust(struct drm_encoder *encoder, uint8_t *config)
+ {
+ struct nouveau_encoder *nv_encoder = nouveau_encoder(encoder);
+ struct drm_device *dev = encoder->dev;
+- struct bit_displayport_encoder_table_entry *dpse;
+ struct bit_displayport_encoder_table *dpe;
+ int ret, i, dpe_headerlen, vs = 0, pre = 0;
+ uint8_t request[2];
+@@ -183,7 +182,6 @@ nouveau_dp_link_train_adjust(struct drm_encoder *encoder, uint8_t *config)
+ dpe = nouveau_bios_dp_table(dev, nv_encoder->dcb, &dpe_headerlen);
+ if (!dpe)
+ return false;
+- dpse = (void *)((char *)dpe + dpe_headerlen);
+
+ ret = auxch_rd(encoder, DP_ADJUST_REQUEST_LANE0_1, request, 2);
+ if (ret)
+diff --git a/drivers/gpu/drm/nouveau/nouveau_drv.h b/drivers/gpu/drm/nouveau/nouveau_drv.h
+index 9821fca..2e3d7fb 100644
+--- a/drivers/gpu/drm/nouveau/nouveau_drv.h
++++ b/drivers/gpu/drm/nouveau/nouveau_drv.h
+@@ -652,7 +652,6 @@ struct drm_nouveau_private {
+ /* interrupt handling */
+ void (*irq_handler[32])(struct drm_device *);
+ bool msi_enabled;
+- struct workqueue_struct *wq;
+ struct work_struct irq_work;
+
+ struct list_head vbl_waiting;
+@@ -691,13 +690,21 @@ struct drm_nouveau_private {
+ struct {
+ enum {
+ NOUVEAU_GART_NONE = 0,
+- NOUVEAU_GART_AGP,
+- NOUVEAU_GART_SGDMA
++ NOUVEAU_GART_AGP, /* AGP */
++ NOUVEAU_GART_PDMA, /* paged dma object */
++ NOUVEAU_GART_HW /* on-chip gart/vm */
+ } type;
+ uint64_t aper_base;
+ uint64_t aper_size;
+ uint64_t aper_free;
+
++ struct ttm_backend_func *func;
++
++ struct {
++ struct page *page;
++ dma_addr_t addr;
++ } dummy;
++
+ struct nouveau_gpuobj *sg_ctxdma;
+ struct nouveau_vma vma;
+ } gart_info;
+diff --git a/drivers/gpu/drm/nouveau/nouveau_fence.c b/drivers/gpu/drm/nouveau/nouveau_fence.c
+index 221b846..8b46392 100644
+--- a/drivers/gpu/drm/nouveau/nouveau_fence.c
++++ b/drivers/gpu/drm/nouveau/nouveau_fence.c
+@@ -32,8 +32,7 @@
+ #include "nouveau_dma.h"
+
+ #define USE_REFCNT(dev) (nouveau_private(dev)->chipset >= 0x10)
+-#define USE_SEMA(dev) (nouveau_private(dev)->chipset >= 0x17 && \
+- nouveau_private(dev)->card_type < NV_C0)
++#define USE_SEMA(dev) (nouveau_private(dev)->chipset >= 0x17)
+
+ struct nouveau_fence {
+ struct nouveau_channel *channel;
+@@ -259,11 +258,12 @@ __nouveau_fence_wait(void *sync_obj, void *sync_arg, bool lazy, bool intr)
+ }
+
+ static struct nouveau_semaphore *
+-alloc_semaphore(struct drm_device *dev)
++semaphore_alloc(struct drm_device *dev)
+ {
+ struct drm_nouveau_private *dev_priv = dev->dev_private;
+ struct nouveau_semaphore *sema;
+- int ret;
++ int size = (dev_priv->chipset < 0x84) ? 4 : 16;
++ int ret, i;
+
+ if (!USE_SEMA(dev))
+ return NULL;
+@@ -277,9 +277,9 @@ alloc_semaphore(struct drm_device *dev)
+ goto fail;
+
+ spin_lock(&dev_priv->fence.lock);
+- sema->mem = drm_mm_search_free(&dev_priv->fence.heap, 4, 0, 0);
++ sema->mem = drm_mm_search_free(&dev_priv->fence.heap, size, 0, 0);
+ if (sema->mem)
+- sema->mem = drm_mm_get_block_atomic(sema->mem, 4, 0);
++ sema->mem = drm_mm_get_block_atomic(sema->mem, size, 0);
+ spin_unlock(&dev_priv->fence.lock);
+
+ if (!sema->mem)
+@@ -287,7 +287,8 @@ alloc_semaphore(struct drm_device *dev)
+
+ kref_init(&sema->ref);
+ sema->dev = dev;
+- nouveau_bo_wr32(dev_priv->fence.bo, sema->mem->start / 4, 0);
++ for (i = sema->mem->start; i < sema->mem->start + size; i += 4)
++ nouveau_bo_wr32(dev_priv->fence.bo, i / 4, 0);
+
+ return sema;
+ fail:
+@@ -296,7 +297,7 @@ fail:
+ }
+
+ static void
+-free_semaphore(struct kref *ref)
++semaphore_free(struct kref *ref)
+ {
+ struct nouveau_semaphore *sema =
+ container_of(ref, struct nouveau_semaphore, ref);
+@@ -318,61 +319,107 @@ semaphore_work(void *priv, bool signalled)
+ if (unlikely(!signalled))
+ nouveau_bo_wr32(dev_priv->fence.bo, sema->mem->start / 4, 1);
+
+- kref_put(&sema->ref, free_semaphore);
++ kref_put(&sema->ref, semaphore_free);
+ }
+
+ static int
+-emit_semaphore(struct nouveau_channel *chan, int method,
+- struct nouveau_semaphore *sema)
++semaphore_acquire(struct nouveau_channel *chan, struct nouveau_semaphore *sema)
+ {
+- struct drm_nouveau_private *dev_priv = sema->dev->dev_private;
+- struct nouveau_fence *fence;
+- bool smart = (dev_priv->card_type >= NV_50);
++ struct drm_nouveau_private *dev_priv = chan->dev->dev_private;
++ struct nouveau_fence *fence = NULL;
+ int ret;
+
+- ret = RING_SPACE(chan, smart ? 8 : 4);
++ if (dev_priv->chipset < 0x84) {
++ ret = RING_SPACE(chan, 3);
++ if (ret)
++ return ret;
++
++ BEGIN_RING(chan, NvSubSw, NV_SW_SEMAPHORE_OFFSET, 2);
++ OUT_RING (chan, sema->mem->start);
++ OUT_RING (chan, 1);
++ } else
++ if (dev_priv->chipset < 0xc0) {
++ struct nouveau_vma *vma = &dev_priv->fence.bo->vma;
++ u64 offset = vma->offset + sema->mem->start;
++
++ ret = RING_SPACE(chan, 5);
++ if (ret)
++ return ret;
++
++ BEGIN_RING(chan, NvSubSw, 0x0010, 4);
++ OUT_RING (chan, upper_32_bits(offset));
++ OUT_RING (chan, lower_32_bits(offset));
++ OUT_RING (chan, 1);
++ OUT_RING (chan, 1); /* ACQUIRE_EQ */
++ } else {
++ struct nouveau_vma *vma = &dev_priv->fence.bo->vma;
++ u64 offset = vma->offset + sema->mem->start;
++
++ ret = RING_SPACE(chan, 5);
++ if (ret)
++ return ret;
++
++ BEGIN_NVC0(chan, 2, NvSubM2MF, 0x0010, 4);
++ OUT_RING (chan, upper_32_bits(offset));
++ OUT_RING (chan, lower_32_bits(offset));
++ OUT_RING (chan, 1);
++ OUT_RING (chan, 0x1001); /* ACQUIRE_EQ */
++ }
++
++ /* Delay semaphore destruction until its work is done */
++ ret = nouveau_fence_new(chan, &fence, true);
+ if (ret)
+ return ret;
+
+- if (smart) {
+- BEGIN_RING(chan, NvSubSw, NV_SW_DMA_SEMAPHORE, 1);
+- OUT_RING(chan, NvSema);
+- }
+- BEGIN_RING(chan, NvSubSw, NV_SW_SEMAPHORE_OFFSET, 1);
+- OUT_RING(chan, sema->mem->start);
+-
+- if (smart && method == NV_SW_SEMAPHORE_ACQUIRE) {
+- /*
+- * NV50 tries to be too smart and context-switch
+- * between semaphores instead of doing a "first come,
+- * first served" strategy like previous cards
+- * do.
+- *
+- * That's bad because the ACQUIRE latency can get as
+- * large as the PFIFO context time slice in the
+- * typical DRI2 case where you have several
+- * outstanding semaphores at the same moment.
+- *
+- * If we're going to ACQUIRE, force the card to
+- * context switch before, just in case the matching
+- * RELEASE is already scheduled to be executed in
+- * another channel.
+- */
+- BEGIN_RING(chan, NvSubSw, NV_SW_YIELD, 1);
+- OUT_RING(chan, 0);
+- }
++ kref_get(&sema->ref);
++ nouveau_fence_work(fence, semaphore_work, sema);
++ nouveau_fence_unref(&fence);
++ return 0;
++}
++
++static int
++semaphore_release(struct nouveau_channel *chan, struct nouveau_semaphore *sema)
++{
++ struct drm_nouveau_private *dev_priv = chan->dev->dev_private;
++ struct nouveau_fence *fence = NULL;
++ int ret;
++
++ if (dev_priv->chipset < 0x84) {
++ ret = RING_SPACE(chan, 4);
++ if (ret)
++ return ret;
++
++ BEGIN_RING(chan, NvSubSw, NV_SW_SEMAPHORE_OFFSET, 1);
++ OUT_RING (chan, sema->mem->start);
++ BEGIN_RING(chan, NvSubSw, NV_SW_SEMAPHORE_RELEASE, 1);
++ OUT_RING (chan, 1);
++ } else
++ if (dev_priv->chipset < 0xc0) {
++ struct nouveau_vma *vma = &dev_priv->fence.bo->vma;
++ u64 offset = vma->offset + sema->mem->start;
+
+- BEGIN_RING(chan, NvSubSw, method, 1);
+- OUT_RING(chan, 1);
+-
+- if (smart && method == NV_SW_SEMAPHORE_RELEASE) {
+- /*
+- * Force the card to context switch, there may be
+- * another channel waiting for the semaphore we just
+- * released.
+- */
+- BEGIN_RING(chan, NvSubSw, NV_SW_YIELD, 1);
+- OUT_RING(chan, 0);
++ ret = RING_SPACE(chan, 5);
++ if (ret)
++ return ret;
++
++ BEGIN_RING(chan, NvSubSw, 0x0010, 4);
++ OUT_RING (chan, upper_32_bits(offset));
++ OUT_RING (chan, lower_32_bits(offset));
++ OUT_RING (chan, 1);
++ OUT_RING (chan, 2); /* RELEASE */
++ } else {
++ struct nouveau_vma *vma = &dev_priv->fence.bo->vma;
++ u64 offset = vma->offset + sema->mem->start;
++
++ ret = RING_SPACE(chan, 5);
++ if (ret)
++ return ret;
++
++ BEGIN_NVC0(chan, 2, NvSubM2MF, 0x0010, 4);
++ OUT_RING (chan, upper_32_bits(offset));
++ OUT_RING (chan, lower_32_bits(offset));
++ OUT_RING (chan, 1);
++ OUT_RING (chan, 0x1002); /* RELEASE */
+ }
+
+ /* Delay semaphore destruction until its work is done */
+@@ -383,7 +430,6 @@ emit_semaphore(struct nouveau_channel *chan, int method,
+ kref_get(&sema->ref);
+ nouveau_fence_work(fence, semaphore_work, sema);
+ nouveau_fence_unref(&fence);
+-
+ return 0;
+ }
+
+@@ -400,7 +446,7 @@ nouveau_fence_sync(struct nouveau_fence *fence,
+ nouveau_fence_signalled(fence)))
+ goto out;
+
+- sema = alloc_semaphore(dev);
++ sema = semaphore_alloc(dev);
+ if (!sema) {
+ /* Early card or broken userspace, fall back to
+ * software sync. */
+@@ -418,17 +464,17 @@ nouveau_fence_sync(struct nouveau_fence *fence,
+ }
+
+ /* Make wchan wait until it gets signalled */
+- ret = emit_semaphore(wchan, NV_SW_SEMAPHORE_ACQUIRE, sema);
++ ret = semaphore_acquire(wchan, sema);
+ if (ret)
+ goto out_unlock;
+
+ /* Signal the semaphore from chan */
+- ret = emit_semaphore(chan, NV_SW_SEMAPHORE_RELEASE, sema);
++ ret = semaphore_release(chan, sema);
+
+ out_unlock:
+ mutex_unlock(&chan->mutex);
+ out_unref:
+- kref_put(&sema->ref, free_semaphore);
++ kref_put(&sema->ref, semaphore_free);
+ out:
+ if (chan)
+ nouveau_channel_put_unlocked(&chan);
+@@ -449,22 +495,23 @@ nouveau_fence_channel_init(struct nouveau_channel *chan)
+ struct nouveau_gpuobj *obj = NULL;
+ int ret;
+
++ if (dev_priv->card_type >= NV_C0)
++ goto out_initialised;
++
+ /* Create an NV_SW object for various sync purposes */
+ ret = nouveau_gpuobj_gr_new(chan, NvSw, NV_SW);
+ if (ret)
+ return ret;
+
+ /* we leave subchannel empty for nvc0 */
+- if (dev_priv->card_type < NV_C0) {
+- ret = RING_SPACE(chan, 2);
+- if (ret)
+- return ret;
+- BEGIN_RING(chan, NvSubSw, 0, 1);
+- OUT_RING(chan, NvSw);
+- }
++ ret = RING_SPACE(chan, 2);
++ if (ret)
++ return ret;
++ BEGIN_RING(chan, NvSubSw, 0, 1);
++ OUT_RING(chan, NvSw);
+
+ /* Create a DMA object for the shared cross-channel sync area. */
+- if (USE_SEMA(dev)) {
++ if (USE_SEMA(dev) && dev_priv->chipset < 0x84) {
+ struct ttm_mem_reg *mem = &dev_priv->fence.bo->bo.mem;
+
+ ret = nouveau_gpuobj_dma_new(chan, NV_CLASS_DMA_IN_MEMORY,
+@@ -484,14 +531,20 @@ nouveau_fence_channel_init(struct nouveau_channel *chan)
+ return ret;
+ BEGIN_RING(chan, NvSubSw, NV_SW_DMA_SEMAPHORE, 1);
+ OUT_RING(chan, NvSema);
++ } else {
++ ret = RING_SPACE(chan, 2);
++ if (ret)
++ return ret;
++ BEGIN_RING(chan, NvSubSw, NV_SW_DMA_SEMAPHORE, 1);
++ OUT_RING (chan, chan->vram_handle); /* whole VM */
+ }
+
+ FIRE_RING(chan);
+
++out_initialised:
+ INIT_LIST_HEAD(&chan->fence.pending);
+ spin_lock_init(&chan->fence.lock);
+ atomic_set(&chan->fence.last_sequence_irq, 0);
+-
+ return 0;
+ }
+
+@@ -519,11 +572,12 @@ int
+ nouveau_fence_init(struct drm_device *dev)
+ {
+ struct drm_nouveau_private *dev_priv = dev->dev_private;
++ int size = (dev_priv->chipset < 0x84) ? 4096 : 16384;
+ int ret;
+
+ /* Create a shared VRAM heap for cross-channel sync. */
+ if (USE_SEMA(dev)) {
+- ret = nouveau_bo_new(dev, NULL, 4096, 0, TTM_PL_FLAG_VRAM,
++ ret = nouveau_bo_new(dev, NULL, size, 0, TTM_PL_FLAG_VRAM,
+ 0, 0, false, true, &dev_priv->fence.bo);
+ if (ret)
+ return ret;
+diff --git a/drivers/gpu/drm/nouveau/nouveau_mem.c b/drivers/gpu/drm/nouveau/nouveau_mem.c
+index 26347b7..30bd230 100644
+--- a/drivers/gpu/drm/nouveau/nouveau_mem.c
++++ b/drivers/gpu/drm/nouveau/nouveau_mem.c
+@@ -393,11 +393,17 @@ nouveau_mem_vram_init(struct drm_device *dev)
+ struct ttm_bo_device *bdev = &dev_priv->ttm.bdev;
+ int ret, dma_bits;
+
+- if (dev_priv->card_type >= NV_50 &&
+- pci_dma_supported(dev->pdev, DMA_BIT_MASK(40)))
+- dma_bits = 40;
+- else
+- dma_bits = 32;
++ dma_bits = 32;
++ if (dev_priv->card_type >= NV_50) {
++ if (pci_dma_supported(dev->pdev, DMA_BIT_MASK(40)))
++ dma_bits = 40;
++ } else
++ if (drm_device_is_pcie(dev) &&
++ dev_priv->chipset != 0x40 &&
++ dev_priv->chipset != 0x45) {
++ if (pci_dma_supported(dev->pdev, DMA_BIT_MASK(39)))
++ dma_bits = 39;
++ }
+
+ ret = pci_set_dma_mask(dev->pdev, DMA_BIT_MASK(dma_bits));
+ if (ret)
+diff --git a/drivers/gpu/drm/nouveau/nouveau_object.c b/drivers/gpu/drm/nouveau/nouveau_object.c
+index 30b6544..3c12461 100644
+--- a/drivers/gpu/drm/nouveau/nouveau_object.c
++++ b/drivers/gpu/drm/nouveau/nouveau_object.c
+@@ -490,16 +490,22 @@ nouveau_gpuobj_dma_new(struct nouveau_channel *chan, int class, u64 base,
+ }
+
+ if (target == NV_MEM_TARGET_GART) {
+- if (dev_priv->gart_info.type == NOUVEAU_GART_AGP) {
+- target = NV_MEM_TARGET_PCI_NOSNOOP;
+- base += dev_priv->gart_info.aper_base;
+- } else
+- if (base != 0) {
+- base = nouveau_sgdma_get_physical(dev, base);
++ struct nouveau_gpuobj *gart = dev_priv->gart_info.sg_ctxdma;
++
++ if (dev_priv->gart_info.type == NOUVEAU_GART_PDMA) {
++ if (base == 0) {
++ nouveau_gpuobj_ref(gart, pobj);
++ return 0;
++ }
++
++ base = nouveau_sgdma_get_physical(dev, base);
+ target = NV_MEM_TARGET_PCI;
+ } else {
+- nouveau_gpuobj_ref(dev_priv->gart_info.sg_ctxdma, pobj);
+- return 0;
++ base += dev_priv->gart_info.aper_base;
++ if (dev_priv->gart_info.type == NOUVEAU_GART_AGP)
++ target = NV_MEM_TARGET_PCI_NOSNOOP;
++ else
++ target = NV_MEM_TARGET_PCI;
+ }
+ }
+
+diff --git a/drivers/gpu/drm/nouveau/nouveau_sgdma.c b/drivers/gpu/drm/nouveau/nouveau_sgdma.c
+index 9a250eb..bdbaa54 100644
+--- a/drivers/gpu/drm/nouveau/nouveau_sgdma.c
++++ b/drivers/gpu/drm/nouveau/nouveau_sgdma.c
+@@ -74,8 +74,24 @@ nouveau_sgdma_clear(struct ttm_backend *be)
+ }
+ }
+
++static void
++nouveau_sgdma_destroy(struct ttm_backend *be)
++{
++ struct nouveau_sgdma_be *nvbe = (struct nouveau_sgdma_be *)be;
++
++ if (be) {
++ NV_DEBUG(nvbe->dev, "\n");
++
++ if (nvbe) {
++ if (nvbe->pages)
++ be->func->clear(be);
++ kfree(nvbe);
++ }
++ }
++}
++
+ static int
+-nouveau_sgdma_bind(struct ttm_backend *be, struct ttm_mem_reg *mem)
++nv04_sgdma_bind(struct ttm_backend *be, struct ttm_mem_reg *mem)
+ {
+ struct nouveau_sgdma_be *nvbe = (struct nouveau_sgdma_be *)be;
+ struct drm_device *dev = nvbe->dev;
+@@ -102,7 +118,7 @@ nouveau_sgdma_bind(struct ttm_backend *be, struct ttm_mem_reg *mem)
+ }
+
+ static int
+-nouveau_sgdma_unbind(struct ttm_backend *be)
++nv04_sgdma_unbind(struct ttm_backend *be)
+ {
+ struct nouveau_sgdma_be *nvbe = (struct nouveau_sgdma_be *)be;
+ struct drm_device *dev = nvbe->dev;
+@@ -125,23 +141,222 @@ nouveau_sgdma_unbind(struct ttm_backend *be)
+ return 0;
+ }
+
++static struct ttm_backend_func nv04_sgdma_backend = {
++ .populate = nouveau_sgdma_populate,
++ .clear = nouveau_sgdma_clear,
++ .bind = nv04_sgdma_bind,
++ .unbind = nv04_sgdma_unbind,
++ .destroy = nouveau_sgdma_destroy
++};
++
+ static void
+-nouveau_sgdma_destroy(struct ttm_backend *be)
++nv41_sgdma_flush(struct nouveau_sgdma_be *nvbe)
++{
++ struct drm_device *dev = nvbe->dev;
++
++ nv_wr32(dev, 0x100810, 0x00000022);
++ if (!nv_wait(dev, 0x100810, 0x00000100, 0x00000100))
++ NV_ERROR(dev, "vm flush timeout: 0x%08x\n",
++ nv_rd32(dev, 0x100810));
++ nv_wr32(dev, 0x100810, 0x00000000);
++}
++
++static int
++nv41_sgdma_bind(struct ttm_backend *be, struct ttm_mem_reg *mem)
+ {
+ struct nouveau_sgdma_be *nvbe = (struct nouveau_sgdma_be *)be;
++ struct drm_nouveau_private *dev_priv = nvbe->dev->dev_private;
++ struct nouveau_gpuobj *pgt = dev_priv->gart_info.sg_ctxdma;
++ dma_addr_t *list = nvbe->pages;
++ u32 pte = mem->start << 2;
++ u32 cnt = nvbe->nr_pages;
+
+- if (be) {
+- NV_DEBUG(nvbe->dev, "\n");
++ nvbe->offset = mem->start << PAGE_SHIFT;
+
+- if (nvbe) {
+- if (nvbe->pages)
+- be->func->clear(be);
+- kfree(nvbe);
++ while (cnt--) {
++ nv_wo32(pgt, pte, (*list++ >> 7) | 1);
++ pte += 4;
++ }
++
++ nv41_sgdma_flush(nvbe);
++ nvbe->bound = true;
++ return 0;
++}
++
++static int
++nv41_sgdma_unbind(struct ttm_backend *be)
++{
++ struct nouveau_sgdma_be *nvbe = (struct nouveau_sgdma_be *)be;
++ struct drm_nouveau_private *dev_priv = nvbe->dev->dev_private;
++ struct nouveau_gpuobj *pgt = dev_priv->gart_info.sg_ctxdma;
++ u32 pte = (nvbe->offset >> 12) << 2;
++ u32 cnt = nvbe->nr_pages;
++
++ while (cnt--) {
++ nv_wo32(pgt, pte, 0x00000000);
++ pte += 4;
++ }
++
++ nv41_sgdma_flush(nvbe);
++ nvbe->bound = false;
++ return 0;
++}
++
++static struct ttm_backend_func nv41_sgdma_backend = {
++ .populate = nouveau_sgdma_populate,
++ .clear = nouveau_sgdma_clear,
++ .bind = nv41_sgdma_bind,
++ .unbind = nv41_sgdma_unbind,
++ .destroy = nouveau_sgdma_destroy
++};
++
++static void
++nv44_sgdma_flush(struct nouveau_sgdma_be *nvbe)
++{
++ struct drm_device *dev = nvbe->dev;
++
++ nv_wr32(dev, 0x100814, (nvbe->nr_pages - 1) << 12);
++ nv_wr32(dev, 0x100808, nvbe->offset | 0x20);
++ if (!nv_wait(dev, 0x100808, 0x00000001, 0x00000001))
++ NV_ERROR(dev, "gart flush timeout: 0x%08x\n",
++ nv_rd32(dev, 0x100808));
++ nv_wr32(dev, 0x100808, 0x00000000);
++}
++
++static void
++nv44_sgdma_fill(struct nouveau_gpuobj *pgt, dma_addr_t *list, u32 base, u32 cnt)
++{
++ struct drm_nouveau_private *dev_priv = pgt->dev->dev_private;
++ dma_addr_t dummy = dev_priv->gart_info.dummy.addr;
++ u32 pte, tmp[4];
++
++ pte = base >> 2;
++ base &= ~0x0000000f;
++
++ tmp[0] = nv_ro32(pgt, base + 0x0);
++ tmp[1] = nv_ro32(pgt, base + 0x4);
++ tmp[2] = nv_ro32(pgt, base + 0x8);
++ tmp[3] = nv_ro32(pgt, base + 0xc);
++ while (cnt--) {
++ u32 addr = list ? (*list++ >> 12) : (dummy >> 12);
++ switch (pte++ & 0x3) {
++ case 0:
++ tmp[0] &= ~0x07ffffff;
++ tmp[0] |= addr;
++ break;
++ case 1:
++ tmp[0] &= ~0xf8000000;
++ tmp[0] |= addr << 27;
++ tmp[1] &= ~0x003fffff;
++ tmp[1] |= addr >> 5;
++ break;
++ case 2:
++ tmp[1] &= ~0xffc00000;
++ tmp[1] |= addr << 22;
++ tmp[2] &= ~0x0001ffff;
++ tmp[2] |= addr >> 10;
++ break;
++ case 3:
++ tmp[2] &= ~0xfffe0000;
++ tmp[2] |= addr << 17;
++ tmp[3] &= ~0x00000fff;
++ tmp[3] |= addr >> 15;
++ break;
+ }
+ }
++
++ tmp[3] |= 0x40000000;
++
++ nv_wo32(pgt, base + 0x0, tmp[0]);
++ nv_wo32(pgt, base + 0x4, tmp[1]);
++ nv_wo32(pgt, base + 0x8, tmp[2]);
++ nv_wo32(pgt, base + 0xc, tmp[3]);
+ }
+
+ static int
++nv44_sgdma_bind(struct ttm_backend *be, struct ttm_mem_reg *mem)
++{
++ struct nouveau_sgdma_be *nvbe = (struct nouveau_sgdma_be *)be;
++ struct drm_nouveau_private *dev_priv = nvbe->dev->dev_private;
++ struct nouveau_gpuobj *pgt = dev_priv->gart_info.sg_ctxdma;
++ dma_addr_t *list = nvbe->pages;
++ u32 pte = mem->start << 2, tmp[4];
++ u32 cnt = nvbe->nr_pages;
++ int i;
++
++ nvbe->offset = mem->start << PAGE_SHIFT;
++
++ if (pte & 0x0000000c) {
++ u32 max = 4 - ((pte >> 2) & 0x3);
++ u32 part = (cnt > max) ? max : cnt;
++ nv44_sgdma_fill(pgt, list, pte, part);
++ pte += (part << 2);
++ list += part;
++ cnt -= part;
++ }
++
++ while (cnt >= 4) {
++ for (i = 0; i < 4; i++)
++ tmp[i] = *list++ >> 12;
++ nv_wo32(pgt, pte + 0x0, tmp[0] >> 0 | tmp[1] << 27);
++ nv_wo32(pgt, pte + 0x4, tmp[1] >> 5 | tmp[2] << 22);
++ nv_wo32(pgt, pte + 0x8, tmp[2] >> 10 | tmp[3] << 17);
++ nv_wo32(pgt, pte + 0xc, tmp[3] >> 15 | 0x40000000);
++ pte += 0x10;
++ cnt -= 4;
++ }
++
++ if (cnt)
++ nv44_sgdma_fill(pgt, list, pte, cnt);
++
++ nv44_sgdma_flush(nvbe);
++ nvbe->bound = true;
++ return 0;
++}
++
++static int
++nv44_sgdma_unbind(struct ttm_backend *be)
++{
++ struct nouveau_sgdma_be *nvbe = (struct nouveau_sgdma_be *)be;
++ struct drm_nouveau_private *dev_priv = nvbe->dev->dev_private;
++ struct nouveau_gpuobj *pgt = dev_priv->gart_info.sg_ctxdma;
++ u32 pte = (nvbe->offset >> 12) << 2;
++ u32 cnt = nvbe->nr_pages;
++
++ if (pte & 0x0000000c) {
++ u32 max = 4 - ((pte >> 2) & 0x3);
++ u32 part = (cnt > max) ? max : cnt;
++ nv44_sgdma_fill(pgt, NULL, pte, part);
++ pte += (part << 2);
++ cnt -= part;
++ }
++
++ while (cnt >= 4) {
++ nv_wo32(pgt, pte + 0x0, 0x00000000);
++ nv_wo32(pgt, pte + 0x4, 0x00000000);
++ nv_wo32(pgt, pte + 0x8, 0x00000000);
++ nv_wo32(pgt, pte + 0xc, 0x00000000);
++ pte += 0x10;
++ cnt -= 4;
++ }
++
++ if (cnt)
++ nv44_sgdma_fill(pgt, NULL, pte, cnt);
++
++ nv44_sgdma_flush(nvbe);
++ nvbe->bound = false;
++ return 0;
++}
++
++static struct ttm_backend_func nv44_sgdma_backend = {
++ .populate = nouveau_sgdma_populate,
++ .clear = nouveau_sgdma_clear,
++ .bind = nv44_sgdma_bind,
++ .unbind = nv44_sgdma_unbind,
++ .destroy = nouveau_sgdma_destroy
++};
++
++static int
+ nv50_sgdma_bind(struct ttm_backend *be, struct ttm_mem_reg *mem)
+ {
+ struct nouveau_sgdma_be *nvbe = (struct nouveau_sgdma_be *)be;
+@@ -170,14 +385,6 @@ nv50_sgdma_unbind(struct ttm_backend *be)
+ return 0;
+ }
+
+-static struct ttm_backend_func nouveau_sgdma_backend = {
+- .populate = nouveau_sgdma_populate,
+- .clear = nouveau_sgdma_clear,
+- .bind = nouveau_sgdma_bind,
+- .unbind = nouveau_sgdma_unbind,
+- .destroy = nouveau_sgdma_destroy
+-};
+-
+ static struct ttm_backend_func nv50_sgdma_backend = {
+ .populate = nouveau_sgdma_populate,
+ .clear = nouveau_sgdma_clear,
+@@ -198,10 +405,7 @@ nouveau_sgdma_init_ttm(struct drm_device *dev)
+
+ nvbe->dev = dev;
+
+- if (dev_priv->card_type < NV_50)
+- nvbe->backend.func = &nouveau_sgdma_backend;
+- else
+- nvbe->backend.func = &nv50_sgdma_backend;
++ nvbe->backend.func = dev_priv->gart_info.func;
+ return &nvbe->backend;
+ }
+
+@@ -210,21 +414,71 @@ nouveau_sgdma_init(struct drm_device *dev)
+ {
+ struct drm_nouveau_private *dev_priv = dev->dev_private;
+ struct nouveau_gpuobj *gpuobj = NULL;
+- uint32_t aper_size, obj_size;
+- int i, ret;
++ u32 aper_size, align;
++ int ret;
++
++ if (dev_priv->card_type >= NV_50 ||
++ dev_priv->ramin_rsvd_vram >= 2 * 1024 * 1024)
++ aper_size = 512 * 1024 * 1024;
++ else
++ aper_size = 64 * 1024 * 1024;
++
++ /* Dear NVIDIA, NV44+ would like proper present bits in PTEs for
++ * christmas. The cards before it have them, the cards after
++ * it have them, why is NV44 so unloved?
++ */
++ dev_priv->gart_info.dummy.page = alloc_page(GFP_DMA32 | GFP_KERNEL);
++ if (!dev_priv->gart_info.dummy.page)
++ return -ENOMEM;
++
++ dev_priv->gart_info.dummy.addr =
++ pci_map_page(dev->pdev, dev_priv->gart_info.dummy.page,
++ 0, PAGE_SIZE, PCI_DMA_BIDIRECTIONAL);
++ if (pci_dma_mapping_error(dev->pdev, dev_priv->gart_info.dummy.addr)) {
++ NV_ERROR(dev, "error mapping dummy page\n");
++ __free_page(dev_priv->gart_info.dummy.page);
++ dev_priv->gart_info.dummy.page = NULL;
++ return -ENOMEM;
++ }
+
+- if (dev_priv->card_type < NV_50) {
+- if(dev_priv->ramin_rsvd_vram < 2 * 1024 * 1024)
+- aper_size = 64 * 1024 * 1024;
+- else
+- aper_size = 512 * 1024 * 1024;
++ if (dev_priv->card_type >= NV_50) {
++ ret = nouveau_vm_get(dev_priv->chan_vm, aper_size,
++ 12, NV_MEM_ACCESS_RW,
++ &dev_priv->gart_info.vma);
++ if (ret)
++ return ret;
++
++ dev_priv->gart_info.aper_base = dev_priv->gart_info.vma.offset;
++ dev_priv->gart_info.aper_size = aper_size;
++ dev_priv->gart_info.type = NOUVEAU_GART_HW;
++ dev_priv->gart_info.func = &nv50_sgdma_backend;
++ } else
++ if (drm_device_is_pcie(dev) &&
++ dev_priv->chipset != 0x40 && dev_priv->chipset != 0x45) {
++ if (nv44_graph_class(dev)) {
++ dev_priv->gart_info.func = &nv44_sgdma_backend;
++ align = 512 * 1024;
++ } else {
++ dev_priv->gart_info.func = &nv41_sgdma_backend;
++ align = 16;
++ }
+
+- obj_size = (aper_size >> NV_CTXDMA_PAGE_SHIFT) * 4;
+- obj_size += 8; /* ctxdma header */
++ ret = nouveau_gpuobj_new(dev, NULL, aper_size / 1024, align,
++ NVOBJ_FLAG_ZERO_ALLOC |
++ NVOBJ_FLAG_ZERO_FREE, &gpuobj);
++ if (ret) {
++ NV_ERROR(dev, "Error creating sgdma object: %d\n", ret);
++ return ret;
++ }
+
+- ret = nouveau_gpuobj_new(dev, NULL, obj_size, 16,
+- NVOBJ_FLAG_ZERO_ALLOC |
+- NVOBJ_FLAG_ZERO_FREE, &gpuobj);
++ dev_priv->gart_info.sg_ctxdma = gpuobj;
++ dev_priv->gart_info.aper_base = 0;
++ dev_priv->gart_info.aper_size = aper_size;
++ dev_priv->gart_info.type = NOUVEAU_GART_HW;
++ } else {
++ ret = nouveau_gpuobj_new(dev, NULL, (aper_size / 1024) + 8, 16,
++ NVOBJ_FLAG_ZERO_ALLOC |
++ NVOBJ_FLAG_ZERO_FREE, &gpuobj);
+ if (ret) {
+ NV_ERROR(dev, "Error creating sgdma object: %d\n", ret);
+ return ret;
+@@ -236,25 +490,14 @@ nouveau_sgdma_init(struct drm_device *dev)
+ (0 << 14) /* RW */ |
+ (2 << 16) /* PCI */);
+ nv_wo32(gpuobj, 4, aper_size - 1);
+- for (i = 2; i < 2 + (aper_size >> 12); i++)
+- nv_wo32(gpuobj, i * 4, 0x00000000);
+
+ dev_priv->gart_info.sg_ctxdma = gpuobj;
+ dev_priv->gart_info.aper_base = 0;
+ dev_priv->gart_info.aper_size = aper_size;
+- } else
+- if (dev_priv->chan_vm) {
+- ret = nouveau_vm_get(dev_priv->chan_vm, 512 * 1024 * 1024,
+- 12, NV_MEM_ACCESS_RW,
+- &dev_priv->gart_info.vma);
+- if (ret)
+- return ret;
+-
+- dev_priv->gart_info.aper_base = dev_priv->gart_info.vma.offset;
+- dev_priv->gart_info.aper_size = 512 * 1024 * 1024;
++ dev_priv->gart_info.type = NOUVEAU_GART_PDMA;
++ dev_priv->gart_info.func = &nv04_sgdma_backend;
+ }
+
+- dev_priv->gart_info.type = NOUVEAU_GART_SGDMA;
+ return 0;
+ }
+
+@@ -265,6 +508,13 @@ nouveau_sgdma_takedown(struct drm_device *dev)
+
+ nouveau_gpuobj_ref(NULL, &dev_priv->gart_info.sg_ctxdma);
+ nouveau_vm_put(&dev_priv->gart_info.vma);
++
++ if (dev_priv->gart_info.dummy.page) {
++ pci_unmap_page(dev->pdev, dev_priv->gart_info.dummy.addr,
++ PAGE_SIZE, PCI_DMA_BIDIRECTIONAL);
++ __free_page(dev_priv->gart_info.dummy.page);
++ dev_priv->gart_info.dummy.page = NULL;
++ }
+ }
+
+ uint32_t
+diff --git a/drivers/gpu/drm/nouveau/nouveau_state.c b/drivers/gpu/drm/nouveau/nouveau_state.c
+index a54fc43..916505d 100644
+--- a/drivers/gpu/drm/nouveau/nouveau_state.c
++++ b/drivers/gpu/drm/nouveau/nouveau_state.c
+@@ -929,12 +929,6 @@ int nouveau_load(struct drm_device *dev, unsigned long flags)
+ NV_DEBUG(dev, "vendor: 0x%X device: 0x%X class: 0x%X\n",
+ dev->pci_vendor, dev->pci_device, dev->pdev->class);
+
+- dev_priv->wq = create_workqueue("nouveau");
+- if (!dev_priv->wq) {
+- ret = -EINVAL;
+- goto err_priv;
+- }
+-
+ /* resource 0 is mmio regs */
+ /* resource 1 is linear FB */
+ /* resource 2 is RAMIN (mmio regs + 0x1000000) */
+@@ -947,7 +941,7 @@ int nouveau_load(struct drm_device *dev, unsigned long flags)
+ NV_ERROR(dev, "Unable to initialize the mmio mapping. "
+ "Please report your setup to " DRIVER_EMAIL "\n");
+ ret = -EINVAL;
+- goto err_wq;
++ goto err_priv;
+ }
+ NV_DEBUG(dev, "regs mapped ok at 0x%llx\n",
+ (unsigned long long)mmio_start_offs);
+@@ -1054,8 +1048,6 @@ err_ramin:
+ iounmap(dev_priv->ramin);
+ err_mmio:
+ iounmap(dev_priv->mmio);
+-err_wq:
+- destroy_workqueue(dev_priv->wq);
+ err_priv:
+ kfree(dev_priv);
+ dev->dev_private = NULL;
+diff --git a/drivers/gpu/drm/nouveau/nouveau_temp.c b/drivers/gpu/drm/nouveau/nouveau_temp.c
+index 8d9968e..649b041 100644
+--- a/drivers/gpu/drm/nouveau/nouveau_temp.c
++++ b/drivers/gpu/drm/nouveau/nouveau_temp.c
+@@ -239,11 +239,9 @@ static bool
+ probe_monitoring_device(struct nouveau_i2c_chan *i2c,
+ struct i2c_board_info *info)
+ {
+- char modalias[16] = "i2c:";
+ struct i2c_client *client;
+
+- strlcat(modalias, info->type, sizeof(modalias));
+- request_module(modalias);
++ request_module("%s%s", I2C_MODULE_PREFIX, info->type);
+
+ client = i2c_new_device(&i2c->adapter, info);
+ if (!client)
+diff --git a/drivers/gpu/drm/nouveau/nv04_fifo.c b/drivers/gpu/drm/nouveau/nv04_fifo.c
+index f89d104..dfa600c 100644
+--- a/drivers/gpu/drm/nouveau/nv04_fifo.c
++++ b/drivers/gpu/drm/nouveau/nv04_fifo.c
+@@ -379,6 +379,15 @@ out:
+ return handled;
+ }
+
++static const char *nv_dma_state_err(u32 state)
++{
++ static const char * const desc[] = {
++ "NONE", "CALL_SUBR_ACTIVE", "INVALID_MTHD", "RET_SUBR_INACTIVE",
++ "INVALID_CMD", "IB_EMPTY"/* NV50+ */, "MEM_FAULT", "UNK"
++ };
++ return desc[(state >> 29) & 0x7];
++}
++
+ void
+ nv04_fifo_isr(struct drm_device *dev)
+ {
+@@ -460,9 +469,10 @@ nv04_fifo_isr(struct drm_device *dev)
+ if (nouveau_ratelimit())
+ NV_INFO(dev, "PFIFO_DMA_PUSHER - Ch %d Get 0x%02x%08x "
+ "Put 0x%02x%08x IbGet 0x%08x IbPut 0x%08x "
+- "State 0x%08x Push 0x%08x\n",
++ "State 0x%08x (err: %s) Push 0x%08x\n",
+ chid, ho_get, dma_get, ho_put,
+ dma_put, ib_get, ib_put, state,
++ nv_dma_state_err(state),
+ push);
+
+ /* METHOD_COUNT, in DMA_STATE on earlier chipsets */
+@@ -476,8 +486,9 @@ nv04_fifo_isr(struct drm_device *dev)
+ }
+ } else {
+ NV_INFO(dev, "PFIFO_DMA_PUSHER - Ch %d Get 0x%08x "
+- "Put 0x%08x State 0x%08x Push 0x%08x\n",
+- chid, dma_get, dma_put, state, push);
++ "Put 0x%08x State 0x%08x (err: %s) Push 0x%08x\n",
++ chid, dma_get, dma_put, state,
++ nv_dma_state_err(state), push);
+
+ if (dma_get != dma_put)
+ nv_wr32(dev, 0x003244, dma_put);
+diff --git a/drivers/gpu/drm/nouveau/nv40_fb.c b/drivers/gpu/drm/nouveau/nv40_fb.c
+index f3d9c05..f0ac2a7 100644
+--- a/drivers/gpu/drm/nouveau/nv40_fb.c
++++ b/drivers/gpu/drm/nouveau/nv40_fb.c
+@@ -24,6 +24,53 @@ nv40_fb_set_tile_region(struct drm_device *dev, int i)
+ }
+ }
+
++static void
++nv40_fb_init_gart(struct drm_device *dev)
++{
++ struct drm_nouveau_private *dev_priv = dev->dev_private;
++ struct nouveau_gpuobj *gart = dev_priv->gart_info.sg_ctxdma;
++
++ if (dev_priv->gart_info.type != NOUVEAU_GART_HW) {
++ nv_wr32(dev, 0x100800, 0x00000001);
++ return;
++ }
++
++ nv_wr32(dev, 0x100800, gart->pinst | 0x00000002);
++ nv_mask(dev, 0x10008c, 0x00000100, 0x00000100);
++ nv_wr32(dev, 0x100820, 0x00000000);
++}
++
++static void
++nv44_fb_init_gart(struct drm_device *dev)
++{
++ struct drm_nouveau_private *dev_priv = dev->dev_private;
++ struct nouveau_gpuobj *gart = dev_priv->gart_info.sg_ctxdma;
++ u32 vinst;
++
++ if (dev_priv->gart_info.type != NOUVEAU_GART_HW) {
++ nv_wr32(dev, 0x100850, 0x80000000);
++ nv_wr32(dev, 0x100800, 0x00000001);
++ return;
++ }
++
++ /* calculate vram address of this PRAMIN block, object
++ * must be allocated on 512KiB alignment, and not exceed
++ * a total size of 512KiB for this to work correctly
++ */
++ vinst = nv_rd32(dev, 0x10020c);
++ vinst -= ((gart->pinst >> 19) + 1) << 19;
++
++ nv_wr32(dev, 0x100850, 0x80000000);
++ nv_wr32(dev, 0x100818, dev_priv->gart_info.dummy.addr);
++
++ nv_wr32(dev, 0x100804, dev_priv->gart_info.aper_size);
++ nv_wr32(dev, 0x100850, 0x00008000);
++ nv_mask(dev, 0x10008c, 0x00000200, 0x00000200);
++ nv_wr32(dev, 0x100820, 0x00000000);
++ nv_wr32(dev, 0x10082c, 0x00000001);
++ nv_wr32(dev, 0x100800, vinst | 0x00000010);
++}
++
+ int
+ nv40_fb_init(struct drm_device *dev)
+ {
+@@ -32,12 +79,12 @@ nv40_fb_init(struct drm_device *dev)
+ uint32_t tmp;
+ int i;
+
+- /* This is strictly a NV4x register (don't know about NV5x). */
+- /* The blob sets these to all kinds of values, and they mess up our setup. */
+- /* I got value 0x52802 instead. For some cards the blob even sets it back to 0x1. */
+- /* Note: the blob doesn't read this value, so i'm pretty sure this is safe for all cards. */
+- /* Any idea what this is? */
+- nv_wr32(dev, NV40_PFB_UNK_800, 0x1);
++ if (dev_priv->chipset != 0x40 && dev_priv->chipset != 0x45) {
++ if (nv44_graph_class(dev))
++ nv44_fb_init_gart(dev);
++ else
++ nv40_fb_init_gart(dev);
++ }
+
+ switch (dev_priv->chipset) {
+ case 0x40:
+diff --git a/drivers/gpu/drm/nouveau/nv50_display.c b/drivers/gpu/drm/nouveau/nv50_display.c
+index 7cc94ed..a804a35 100644
+--- a/drivers/gpu/drm/nouveau/nv50_display.c
++++ b/drivers/gpu/drm/nouveau/nv50_display.c
+@@ -345,12 +345,15 @@ int nv50_display_create(struct drm_device *dev)
+ void
+ nv50_display_destroy(struct drm_device *dev)
+ {
++ struct drm_nouveau_private *dev_priv = dev->dev_private;
++
+ NV_DEBUG_KMS(dev, "\n");
+
+ drm_mode_config_cleanup(dev);
+
+ nv50_display_disable(dev);
+ nouveau_irq_unregister(dev, 26);
++ flush_work_sync(&dev_priv->irq_work);
+ }
+
+ static u16
+@@ -587,7 +590,7 @@ static void
+ nv50_display_unk20_handler(struct drm_device *dev)
+ {
+ struct drm_nouveau_private *dev_priv = dev->dev_private;
+- u32 unk30 = nv_rd32(dev, 0x610030), tmp, pclk, script, mc;
++ u32 unk30 = nv_rd32(dev, 0x610030), tmp, pclk, script, mc = 0;
+ struct dcb_entry *dcb;
+ int i, crtc, or, type = OUTPUT_ANY;
+
+@@ -836,7 +839,7 @@ nv50_display_isr(struct drm_device *dev)
+ if (clock) {
+ nv_wr32(dev, NV03_PMC_INTR_EN_0, 0);
+ if (!work_pending(&dev_priv->irq_work))
+- queue_work(dev_priv->wq, &dev_priv->irq_work);
++ schedule_work(&dev_priv->irq_work);
+ delayed |= clock;
+ intr1 &= ~clock;
+ }
+diff --git a/drivers/gpu/drm/nouveau/nv50_fifo.c b/drivers/gpu/drm/nouveau/nv50_fifo.c
+index 8dd04c5..c34a074 100644
+--- a/drivers/gpu/drm/nouveau/nv50_fifo.c
++++ b/drivers/gpu/drm/nouveau/nv50_fifo.c
+@@ -149,6 +149,7 @@ nv50_fifo_init_regs(struct drm_device *dev)
+ nv_wr32(dev, 0x3204, 0);
+ nv_wr32(dev, 0x3210, 0);
+ nv_wr32(dev, 0x3270, 0);
++ nv_wr32(dev, 0x2044, 0x01003fff);
+
+ /* Enable dummy channels setup by nv50_instmem.c */
+ nv50_fifo_channel_enable(dev, 0);
+@@ -273,7 +274,7 @@ nv50_fifo_create_context(struct nouveau_channel *chan)
+ nv_wo32(ramfc, 0x80, ((chan->ramht->bits - 9) << 27) |
+ (4 << 24) /* SEARCH_FULL */ |
+ (chan->ramht->gpuobj->cinst >> 4));
+- nv_wo32(ramfc, 0x44, 0x2101ffff);
++ nv_wo32(ramfc, 0x44, 0x01003fff);
+ nv_wo32(ramfc, 0x60, 0x7fffffff);
+ nv_wo32(ramfc, 0x40, 0x00000000);
+ nv_wo32(ramfc, 0x7c, 0x30000001);
+diff --git a/drivers/gpu/drm/nouveau/nv50_gpio.c b/drivers/gpu/drm/nouveau/nv50_gpio.c
+index 6b149c0..d4f4206 100644
+--- a/drivers/gpu/drm/nouveau/nv50_gpio.c
++++ b/drivers/gpu/drm/nouveau/nv50_gpio.c
+@@ -137,6 +137,7 @@ nv50_gpio_irq_unregister(struct drm_device *dev, enum dcb_gpio_tag tag,
+ struct nv50_gpio_priv *priv = pgpio->priv;
+ struct nv50_gpio_handler *gpioh, *tmp;
+ struct dcb_gpio_entry *gpio;
++ LIST_HEAD(tofree);
+ unsigned long flags;
+
+ gpio = nouveau_bios_gpio_entry(dev, tag);
+@@ -149,10 +150,14 @@ nv50_gpio_irq_unregister(struct drm_device *dev, enum dcb_gpio_tag tag,
+ gpioh->handler != handler ||
+ gpioh->data != data)
+ continue;
+- list_del(&gpioh->head);
+- kfree(gpioh);
++ list_move(&gpioh->head, &tofree);
+ }
+ spin_unlock_irqrestore(&priv->lock, flags);
++
++ list_for_each_entry_safe(gpioh, tmp, &tofree, head) {
++ flush_work_sync(&gpioh->work);
++ kfree(gpioh);
++ }
+ }
+
+ bool
+@@ -205,7 +210,6 @@ nv50_gpio_init(struct drm_device *dev)
+ {
+ struct drm_nouveau_private *dev_priv = dev->dev_private;
+ struct nouveau_gpio_engine *pgpio = &dev_priv->engine.gpio;
+- struct nv50_gpio_priv *priv;
+ int ret;
+
+ if (!pgpio->priv) {
+@@ -213,7 +217,6 @@ nv50_gpio_init(struct drm_device *dev)
+ if (ret)
+ return ret;
+ }
+- priv = pgpio->priv;
+
+ /* disable, and ack any pending gpio interrupts */
+ nv_wr32(dev, 0xe050, 0x00000000);
+@@ -293,7 +296,7 @@ nv50_gpio_isr(struct drm_device *dev)
+ continue;
+ gpioh->inhibit = true;
+
+- queue_work(dev_priv->wq, &gpioh->work);
++ schedule_work(&gpioh->work);
+ }
+ spin_unlock(&priv->lock);
+ }
+diff --git a/drivers/gpu/drm/nouveau/nv50_graph.c b/drivers/gpu/drm/nouveau/nv50_graph.c
+index 37e21d2..c75cff1 100644
+--- a/drivers/gpu/drm/nouveau/nv50_graph.c
++++ b/drivers/gpu/drm/nouveau/nv50_graph.c
+@@ -912,10 +912,10 @@ nv50_pgraph_trap_handler(struct drm_device *dev, u32 display, u64 inst, u32 chid
+ printk("\n");
+ NV_INFO(dev, "PGRAPH - TRAP_CCACHE %08x %08x %08x %08x"
+ " %08x %08x %08x\n",
+- nv_rd32(dev, 0x405800), nv_rd32(dev, 0x405804),
+- nv_rd32(dev, 0x405808), nv_rd32(dev, 0x40580c),
+- nv_rd32(dev, 0x405810), nv_rd32(dev, 0x405814),
+- nv_rd32(dev, 0x40581c));
++ nv_rd32(dev, 0x405000), nv_rd32(dev, 0x405004),
++ nv_rd32(dev, 0x405008), nv_rd32(dev, 0x40500c),
++ nv_rd32(dev, 0x405010), nv_rd32(dev, 0x405014),
++ nv_rd32(dev, 0x40501c));
+
+ }
+
+diff --git a/drivers/gpu/drm/nouveau/nv50_vm.c b/drivers/gpu/drm/nouveau/nv50_vm.c
+index 459ff08..03c1a63 100644
+--- a/drivers/gpu/drm/nouveau/nv50_vm.c
++++ b/drivers/gpu/drm/nouveau/nv50_vm.c
+@@ -31,7 +31,6 @@ void
+ nv50_vm_map_pgt(struct nouveau_gpuobj *pgd, u32 pde,
+ struct nouveau_gpuobj *pgt[2])
+ {
+- struct drm_nouveau_private *dev_priv = pgd->dev->dev_private;
+ u64 phys = 0xdeadcafe00000000ULL;
+ u32 coverage = 0;
+
+diff --git a/drivers/gpu/drm/nouveau/nvc0_fifo.c b/drivers/gpu/drm/nouveau/nvc0_fifo.c
+index e6f92c5..e9f8643 100644
+--- a/drivers/gpu/drm/nouveau/nvc0_fifo.c
++++ b/drivers/gpu/drm/nouveau/nvc0_fifo.c
+@@ -418,6 +418,12 @@ nvc0_fifo_isr(struct drm_device *dev)
+ {
+ u32 stat = nv_rd32(dev, 0x002100);
+
++ if (stat & 0x00000100) {
++ NV_INFO(dev, "PFIFO: unknown status 0x00000100\n");
++ nv_wr32(dev, 0x002100, 0x00000100);
++ stat &= ~0x00000100;
++ }
++
+ if (stat & 0x10000000) {
+ u32 units = nv_rd32(dev, 0x00259c);
+ u32 u = units;
+@@ -446,10 +452,15 @@ nvc0_fifo_isr(struct drm_device *dev)
+ stat &= ~0x20000000;
+ }
+
++ if (stat & 0x40000000) {
++ NV_INFO(dev, "PFIFO: unknown status 0x40000000\n");
++ nv_mask(dev, 0x002a00, 0x00000000, 0x00000000);
++ stat &= ~0x40000000;
++ }
++
+ if (stat) {
+ NV_INFO(dev, "PFIFO: unhandled status 0x%08x\n", stat);
+ nv_wr32(dev, 0x002100, stat);
++ nv_wr32(dev, 0x002140, 0);
+ }
+-
+- nv_wr32(dev, 0x2140, 0);
+ }
+diff --git a/drivers/gpu/drm/nouveau/nvc0_graph.c b/drivers/gpu/drm/nouveau/nvc0_graph.c
+index eb18a7e..afa7afe 100644
+--- a/drivers/gpu/drm/nouveau/nvc0_graph.c
++++ b/drivers/gpu/drm/nouveau/nvc0_graph.c
+@@ -640,7 +640,6 @@ nvc0_graph_init(struct drm_device *dev)
+ {
+ struct drm_nouveau_private *dev_priv = dev->dev_private;
+ struct nouveau_pgraph_engine *pgraph = &dev_priv->engine.graph;
+- struct nvc0_graph_priv *priv;
+ int ret;
+
+ dev_priv->engine.graph.accel_blocked = true;
+@@ -665,7 +664,6 @@ nvc0_graph_init(struct drm_device *dev)
+ if (ret)
+ return ret;
+ }
+- priv = pgraph->priv;
+
+ nvc0_graph_init_obj418880(dev);
+ nvc0_graph_init_regs(dev);
diff --git a/freed-ora/current/master/drm_i915-check-eDP-encoder-correctly-when-setting-modes.patch b/freed-ora/current/master/drm_i915-check-eDP-encoder-correctly-when-setting-modes.patch
deleted file mode 100644
index 9f6800a4b..000000000
--- a/freed-ora/current/master/drm_i915-check-eDP-encoder-correctly-when-setting-modes.patch
+++ /dev/null
@@ -1,33 +0,0 @@
-From patchwork Tue Jan 4 18:46:49 2011
-Content-Type: text/plain; charset="utf-8"
-MIME-Version: 1.0
-Content-Transfer-Encoding: 7bit
-Subject: drm/i915: check eDP encoder correctly when setting modes
-Date: Tue, 04 Jan 2011 18:46:49 -0000
-From: Jesse Barnes <jbarnes@virtuousgeek.org>
-X-Patchwork-Id: 451441
-Message-Id: <1294166809-3316-1-git-send-email-jbarnes@virtuousgeek.org>
-To: intel-gfx@lists.freedesktop.org
-
-We were using a stale pointer in the check which caused us to use CPU
-attached DP params when we should have been using PCH attached params.
-
-Signed-off-by: Jesse Barnes <jbarnes@virtuousgeek.org>
-
----
-drivers/gpu/drm/i915/intel_display.c | 2 +-
- 1 files changed, 1 insertions(+), 1 deletions(-)
-
-diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
-index fe56cb3..28d58ef 100644
---- a/drivers/gpu/drm/i915/intel_display.c
-+++ b/drivers/gpu/drm/i915/intel_display.c
-@@ -3949,7 +3949,7 @@ static int intel_crtc_mode_set(struct drm_crtc *crtc,
- int lane = 0, link_bw, bpp;
- /* CPU eDP doesn't require FDI link, so just set DP M/N
- according to current link config */
-- if (has_edp_encoder && !intel_encoder_is_pch_edp(&encoder->base)) {
-+ if (has_edp_encoder && !intel_encoder_is_pch_edp(&has_edp_encoder->base)) {
- target_clock = mode->clock;
- intel_edp_link_config(has_edp_encoder,
- &lane, &link_bw);
diff --git a/freed-ora/current/master/fs-call-security_d_instantiate-in-d_obtain_alias.patch b/freed-ora/current/master/fs-call-security_d_instantiate-in-d_obtain_alias.patch
index b151c0a70..3bce47f5e 100644
--- a/freed-ora/current/master/fs-call-security_d_instantiate-in-d_obtain_alias.patch
+++ b/freed-ora/current/master/fs-call-security_d_instantiate-in-d_obtain_alias.patch
@@ -39,14 +39,15 @@ V1->V2:
1 files changed, 3 insertions(+), 0 deletions(-)
diff --git a/fs/dcache.c b/fs/dcache.c
-index 23702a9..119d489 100644
+index 5699d4c..85388fc 100644
--- a/fs/dcache.c
+++ b/fs/dcache.c
-@@ -1201,9 +1201,12 @@ struct dentry *d_obtain_alias(struct inode *inode)
+@@ -1577,9 +1577,13 @@ struct dentry *d_obtain_alias(struct inode *inode)
spin_unlock(&tmp->d_lock);
+ spin_unlock(&inode->i_lock);
- spin_unlock(&dcache_lock);
+ security_d_instantiate(tmp, inode);
++
return tmp;
out_iput:
@@ -55,8 +56,6 @@ index 23702a9..119d489 100644
iput(inode);
return res;
}
---
-1.6.6.1
--
To unsubscribe from this list: send the line "unsubscribe linux-fsdevel" in
diff --git a/freed-ora/current/master/kernel.spec b/freed-ora/current/master/kernel.spec
index f87be691a..852e3b746 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
# Save original buildid for later if it's defined
%if 0%{?buildid:1}
@@ -51,7 +51,7 @@ Summary: The Linux kernel
# For non-released -rc kernels, this will be prepended with "0.", so
# for example a 3 here will become 0.3
#
-%global baserelease 2
+%global baserelease 1
%global fedora_build %{baserelease}
# base_sublevel is the kernel version we're starting with and patching
@@ -65,7 +65,7 @@ Summary: The Linux kernel
# To be inserted between "patch" and "-2.6.".
#define stablelibre -libre
-#define rcrevlibre -libre
+%define rcrevlibre -libre
#define gitrevlibre -libre
# libres (s for suffix) may be bumped for rebuilds in which patches
@@ -96,9 +96,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 0
+%define rcrev 6
# The git snapshot level
-%define gitrev 0
+%define gitrev 2
# Set rpm version accordingly
%define rpmversion 2.6.%{upstream_sublevel}
%endif
@@ -117,6 +117,8 @@ Summary: The Linux kernel
%define with_up %{?_without_up: 0} %{?!_without_up: 1}
# kernel-smp (only valid for ppc 32-bit)
%define with_smp %{?_without_smp: 0} %{?!_without_smp: 1}
+# kernel-PAE (only valid for i686)
+%define with_pae %{?_without_pae: 0} %{?!_without_pae: 1}
# kernel-debug
%define with_debug %{?_without_debug: 0} %{?!_without_debug: 1}
# kernel-doc
@@ -154,6 +156,8 @@ Summary: The Linux kernel
%define with_baseonly %{?_with_baseonly: 1} %{?!_with_baseonly: 0}
# Only build the smp kernel (--with smponly):
%define with_smponly %{?_with_smponly: 1} %{?!_with_smponly: 0}
+# Only build the pae kernel (--with paeonly):
+%define with_paeonly %{?_with_paeonly: 1} %{?!_with_paeonly: 0}
# Only build the debug kernel (--with dbgonly):
%define with_dbgonly %{?_with_dbgonly: 1} %{?!_with_dbgonly: 0}
@@ -236,21 +240,28 @@ Summary: The Linux kernel
%define debuginfodir /usr/lib/debug
# kernel-PAE is only built on i686.
-%ifarch i686
-%define with_pae 1
-%else
+%ifnarch i686
%define with_pae 0
%endif
# if requested, only build base kernel
%if %{with_baseonly}
%define with_smp 0
+%define with_pae 0
%define with_debug 0
%endif
# if requested, only build smp kernel
%if %{with_smponly}
%define with_up 0
+%define with_pae 0
+%define with_debug 0
+%endif
+
+# if requested, only build pae kernel
+%if %{with_paeonly}
+%define with_up 0
+%define with_smp 0
%define with_debug 0
%endif
@@ -258,6 +269,7 @@ Summary: The Linux kernel
%if %{with_dbgonly}
%if %{debugbuildsenabled}
%define with_up 0
+%define with_pae 0
%endif
%define with_smp 0
%define with_pae 0
@@ -538,6 +550,7 @@ Source0: http://linux-libre.fsfla.org/pub/linux-libre/freed-ora/src/linux-%{kver
Source3: deblob-main
Source4: deblob-%{kversion}
Source5: deblob-check
+Source6: deblob-2.6.%{upstream_sublevel}
Source11: genkey
Source14: find-provides
@@ -567,6 +580,10 @@ Source90: config-sparc64-generic
Source100: config-arm
+# 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.
+Source1000: config-local
+
# Here should be only the patches up to the upstream canonical Linus tree.
# For a stable release kernel
@@ -627,13 +644,11 @@ Patch31: linux-2.6-utrace.patch
Patch32: linux-2.6-utrace-ptrace.patch
Patch150: linux-2.6.29-sparc-IOC_TYPECHECK.patch
-Patch151: 0001-use-__devexit-not-__exit-in-n2_unregister_algs-fixes.patch
Patch160: linux-2.6-32bit-mmap-exec-randomization.patch
Patch161: linux-2.6-i386-nx-emulation.patch
Patch200: linux-2.6-debug-sizeof-structs.patch
-Patch201: linux-2.6-debug-nmi-timeout.patch
Patch202: linux-2.6-debug-taint-vm.patch
Patch203: linux-2.6-debug-vm-would-have-oomkilled.patch
Patch204: linux-2.6-debug-always-inline-kzalloc.patch
@@ -641,7 +656,6 @@ Patch204: linux-2.6-debug-always-inline-kzalloc.patch
Patch380: linux-2.6-defaults-pci_no_msi.patch
Patch381: linux-2.6-defaults-pci_use_crs.patch
Patch383: linux-2.6-defaults-aspm.patch
-Patch384: pci-disable-aspm-if-bios-asks-us-to.patch
Patch386: pci-_osc-supported-field-should-contain-supported-features-not-enabled-ones.patch
Patch385: ima-allow-it-to-be-completely-disabled-and-default-off.patch
@@ -650,7 +664,6 @@ Patch390: linux-2.6-defaults-acpi-video.patch
Patch391: linux-2.6-acpi-video-dos.patch
Patch393: acpi-ec-add-delay-before-write.patch
Patch394: linux-2.6-acpi-debug-infinite-loop.patch
-Patch395: acpi-update-battery-information-on-notification-0x81.patch
Patch450: linux-2.6-input-kill-stupid-messages.patch
Patch452: linux-2.6.30-no-pcspkr-modalias.patch
@@ -686,7 +699,6 @@ Patch1824: drm-intel-next.patch
# make sure the lvds comes back on lid open
Patch1825: drm-intel-make-lvds-work.patch
Patch1826: drm-intel-edp-fixes.patch
-Patch1827: drm_i915-check-eDP-encoder-correctly-when-setting-modes.patch
Patch1900: linux-2.6-intel-iommu-igfx.patch
@@ -708,7 +720,7 @@ Patch2910: linux-2.6-v4l-dvb-add-lgdt3304-support.patch
Patch2912: linux-2.6-v4l-dvb-ir-core-update.patch
#Patch2916: lirc-staging-2.6.36-fixes.patch
-Patch2917: hdpvr-ir-enable.patch
+#Patch2917: hdpvr-ir-enable.patch
Patch2918: flexcop-fix-xlate_proc_name-warning.patch
@@ -718,6 +730,8 @@ Patch2918: flexcop-fix-xlate_proc_name-warning.patch
# patches headed upstream
+Patch12001: perf-gcc460-build-fixes.patch
+
Patch12010: add-appleir-usb-driver.patch
Patch12016: disable-i8042-check-on-apple-mac.patch
@@ -726,30 +740,22 @@ Patch12017: prevent-runtime-conntrack-changes.patch
Patch12018: neuter_intel_microcode_load.patch
-Patch12030: tpm-fix-stall-on-boot.patch
-
-Patch12100: applesmc_update.patch
Patch12101: apple_backlight.patch
Patch12102: efifb_update.patch
-Patch12103: linux-next-macbook-air-input.patch
Patch12200: acpi_reboot.patch
Patch12210: efi_default_physical.patch
# Runtime power management
+Patch12202: linux-2.6-ehci-check-port-status.patch
Patch12203: linux-2.6-usb-pci-autosuspend.patch
Patch12204: linux-2.6-enable-more-pci-autosuspend.patch
Patch12205: runtime_pm_fixups.patch
Patch12303: dmar-disable-when-ricoh-multifunction.patch
-Patch12401: debug-tty-print-dev-name.patch
-
-Patch12410: mm-page-allocator-adjust-the-per-cpu-counter-threshold-when-memory-is-low.patch
-Patch12411: mm-vmstat-use-a-single-setter-function-and-callback-for-adjusting-percpu-thresholds.patch
-
Patch12421: fs-call-security_d_instantiate-in-d_obtain_alias.patch
-Patch12422: net-AF_PACKET-vmalloc.patch
+Patch12438: ath5k-fix-fast-channel-change.patch
%endif
@@ -1085,7 +1091,7 @@ if [ ! -d kernel-%{kversion}%{?dist}/vanilla-%{vanillaversion} ]; then
fi
-perl -p -i -e "s/^EXTRAVERSION.*/EXTRAVERSION =/" vanilla-%{kversion}/Makefile
+perl -p -i -e "s/^EXTRAVERSION.*/EXTRAVERSION =%{?stablelibre:-libre%{?librev}}/" vanilla-%{kversion}/Makefile
%if "%{kversion}" != "%{vanillaversion}"
@@ -1107,13 +1113,22 @@ perl -p -i -e "s/^EXTRAVERSION.*/EXTRAVERSION =/" vanilla-%{kversion}/Makefile
# Update vanilla to the latest upstream.
# (non-released_kernel case only)
%if 0%{?rcrev}
+%if "%{?stablelibre}" != "%{?rcrevlibre}"
+ perl -p -i -e "s/^EXTRAVERSION.*/EXTRAVERSION =%{?rcrevlibre:-libre%{?librev}}/" Makefile
+%endif
ApplyPatch patch%{?rcrevlibre}-2.6.%{upstream_sublevel}-rc%{rcrev}.bz2
%if 0%{?gitrev}
+%if "%{rcrevlibre}" != "%{gitrevlibre}"
+ perl -p -i -e "s/^EXTRAVERSION.*/EXTRAVERSION = -rc%{rcrev}%{?gitrevlibre:-libre%{?librev}}/" Makefile
+%endif
ApplyPatch patch%{?gitrevlibre}-2.6.%{upstream_sublevel}-rc%{rcrev}-git%{gitrev}.bz2
%endif
%else
# pre-{base_sublevel+1}-rc1 case
%if 0%{?gitrev}
+%if "%{stablerevlibre}" != "%{gitrevlibre}"
+ perl -p -i -e "s/^EXTRAVERSION.*/EXTRAVERSION = -rc%{rcrev}%{?gitrevlibre:-libre%{?librev}}/" Makefile
+%endif
ApplyPatch patch%{?gitrevlibre}-2.6.%{base_sublevel}-git%{gitrev}.bz2
%endif
%endif
@@ -1163,6 +1178,7 @@ cp %{SOURCE15} .
# Dynamically generate kernel .config files from config-* files
make -f %{SOURCE20} VERSION=%{version} configs
+%if %{?all_arch_configs:1}%{!?all_arch_configs:0}
#if a rhel kernel, apply the rhel config options
%if 0%{?rhel}
for i in %{all_arch_configs}
@@ -1173,6 +1189,15 @@ make -f %{SOURCE20} VERSION=%{version} configs
done
%endif
+# Merge in any user-provided local config option changes
+for i in %{all_arch_configs}
+do
+ mv $i $i.tmp
+ ./merge.pl %{SOURCE1000} $i.tmp > $i
+ rm $i.tmp
+done
+%endif
+
ApplyOptionalPatch git-linus.diff
ApplyPatch linux-2.6-makefile-after_link.patch
@@ -1212,7 +1237,6 @@ ApplyPatch linux-2.6-utrace-ptrace.patch
# SPARC64
#
ApplyPatch linux-2.6.29-sparc-IOC_TYPECHECK.patch
-ApplyPatch 0001-use-__devexit-not-__exit-in-n2_unregister_algs-fixes.patch
#
# Exec shield
@@ -1244,11 +1268,9 @@ ApplyPatch linux-2.6-defaults-acpi-video.patch
ApplyPatch linux-2.6-acpi-video-dos.patch
ApplyPatch acpi-ec-add-delay-before-write.patch
ApplyPatch linux-2.6-acpi-debug-infinite-loop.patch
-ApplyPatch acpi-update-battery-information-on-notification-0x81.patch
# Various low-impact patches to aid debugging.
ApplyPatch linux-2.6-debug-sizeof-structs.patch
-ApplyPatch linux-2.6-debug-nmi-timeout.patch
ApplyPatch linux-2.6-debug-taint-vm.patch
ApplyPatch linux-2.6-debug-vm-would-have-oomkilled.patch
ApplyPatch linux-2.6-debug-always-inline-kzalloc.patch
@@ -1261,9 +1283,8 @@ ApplyPatch linux-2.6-defaults-pci_no_msi.patch
ApplyPatch linux-2.6-defaults-pci_use_crs.patch
# enable ASPM by default on hardware we expect to work
ApplyPatch linux-2.6-defaults-aspm.patch
-ApplyPatch pci-disable-aspm-if-bios-asks-us-to.patch
# rhbz#638912
-ApplyPatch pci-_osc-supported-field-should-contain-supported-features-not-enabled-ones.patch
+#ApplyPatch pci-_osc-supported-field-should-contain-supported-features-not-enabled-ones.patch
#ApplyPatch ima-allow-it-to-be-completely-disabled-and-default-off.patch
@@ -1329,7 +1350,6 @@ ApplyPatch drm-intel-big-hammer.patch
ApplyPatch drm-intel-make-lvds-work.patch
ApplyPatch linux-2.6-intel-iommu-igfx.patch
ApplyPatch drm-intel-edp-fixes.patch
-ApplyPatch drm_i915-check-eDP-encoder-correctly-when-setting-modes.patch
# linux1394 git patches
#ApplyPatch linux-2.6-firewire-git-update.patch
@@ -1351,49 +1371,41 @@ ApplyOptionalPatch linux-2.6-v4l-dvb-experimental.patch
# http://www.lirc.org/
#ApplyOptionalPatch lirc-staging-2.6.36-fixes.patch
# enable IR receiver on Hauppauge HD PVR (v4l-dvb merge pending)
-ApplyPatch hdpvr-ir-enable.patch
+#ApplyPatch hdpvr-ir-enable.patch
# rhbz#664852
ApplyPatch flexcop-fix-xlate_proc_name-warning.patch
# Patches headed upstream
+ApplyPatch perf-gcc460-build-fixes.patch
+
ApplyPatch disable-i8042-check-on-apple-mac.patch
ApplyPatch add-appleir-usb-driver.patch
ApplyPatch neuter_intel_microcode_load.patch
-# try to fix stalls during boot (#530393)
-ApplyPatch tpm-fix-stall-on-boot.patch
-
# various fixes for Apple and EFI
-ApplyPatch applesmc_update.patch
ApplyPatch apple_backlight.patch
ApplyPatch efifb_update.patch
-ApplyPatch linux-next-macbook-air-input.patch
ApplyPatch acpi_reboot.patch
ApplyPatch efi_default_physical.patch
# Runtime PM
-ApplyPatch linux-2.6-usb-pci-autosuspend.patch
-ApplyPatch linux-2.6-enable-more-pci-autosuspend.patch
-ApplyPatch runtime_pm_fixups.patch
+ApplyPatch linux-2.6-ehci-check-port-status.patch
+#ApplyPatch linux-2.6-usb-pci-autosuspend.patch
+### Broken by implicit notify support & ACPICA rebase
+###ApplyPatch linux-2.6-enable-more-pci-autosuspend.patch
+#ApplyPatch runtime_pm_fixups.patch
# rhbz#605888
ApplyPatch dmar-disable-when-ricoh-multifunction.patch
-# rhbz#630464
-ApplyPatch debug-tty-print-dev-name.patch
-
-# backport some fixes for kswapd from mmotm, rhbz#649694
-ApplyPatch mm-page-allocator-adjust-the-per-cpu-counter-threshold-when-memory-is-low.patch
-ApplyPatch mm-vmstat-use-a-single-setter-function-and-callback-for-adjusting-percpu-thresholds.patch
-
# rhbz#662344,600690
ApplyPatch fs-call-security_d_instantiate-in-d_obtain_alias.patch
-# rhbz#637619
-ApplyPatch net-AF_PACKET-vmalloc.patch
+# rhbz#672778
+ApplyPatch ath5k-fix-fast-channel-change.patch
# END OF PATCH APPLICATIONS
@@ -1430,7 +1442,7 @@ do
%if %{listnewconfig_fail}
if [ -s .newoptions ]; then
cat .newoptions
- exit 0
+ exit 1
fi
%endif
rm -f .newoptions
@@ -1659,7 +1671,7 @@ BuildKernel() {
rm -f modinfo modnames
# remove files that will be auto generated by depmod at rpm -i time
- for i in alias alias.bin ccwmap dep dep.bin ieee1394map inputmap isapnpmap ofmap pcimap seriomap symbols symbols.bin usbmap
+ for i in alias alias.bin builtin.bin ccwmap dep dep.bin ieee1394map inputmap isapnpmap ofmap pcimap seriomap symbols symbols.bin usbmap
do
rm -f $RPM_BUILD_ROOT/lib/modules/$KernelVer/modules.$i
done
@@ -1997,25 +2009,201 @@ fi
# plz don't put in a version string unless you're going to tag
# and build.
-# ___________________________________________________________
-# / This branch is for Fedora 15. You probably want to commit \
-# \ to the F-14 branch instead, or in addition to this one. /
-# -----------------------------------------------------------
-# \ ^__^
-# \ (@@)\_______
-# (__)\ )\/\
-# ||----w |
-# || ||
-
%changelog
+* Wed Feb 23 2011 Chuck Ebbert <cebbert@redhat.com> 2.6.38-0.rc6.git2.1
+- Linux 2.6.38-rc6-git2
+
+* Wed Feb 23 2011 Alexandre Oliva <lxoliva@fsfla.org> -libre Thu Feb 24
+- Deblobbed patch-libre-2.6.38-rc6.
+
+* Wed Feb 23 2011 Ben Skeggs <bskeggs@redhat.com> 2.6.38-0.rc6.git0.2
+- nouveau: nv4x pciegart fixes, nvc0 accel improvements
+
+* Tue Feb 22 2011 Kyle McMartin <kmcmartin@redhat.com> 2.6.38-0.rc6.git0.1
+- Linux 2.6.38-rc6
+
+* Tue Feb 22 2011 Chuck Ebbert <cebbert@redhat.com> 2.6.38-0.rc5.git7.1
+- Linux 2.6.38-rc5-git7
+
+* Mon Feb 21 2011 Dave Jones <davej@redhat.com> 2.6.38-0.rc5.git6.1
+- Linux 2.6.38-rc5-git6
+
+* Sat Feb 19 2011 Chuck Ebbert <cebbert@redhat.com> 2.6.38-0.rc5.git5.1
+- Linux 2.6.38-rc5-git5
+
+* Wed Feb 16 2011 Chuck Ebbert <cebbert@redhat.com> 2.6.38-0.rc5.git1.1
+- Linux 2.6.38-rc5-git1
+- Add support for Airprime/Sierra USB IP modem (#676860)
+- Make virtio_console built-in on x86_64 (#677713)
+- Revert check for read-only block device added in .38 (#672265)
+
+* Tue Feb 15 2011 Kyle McMartin <kmcmartin@redhat.com> 2.6.38-0.rc5.git0.1
+- Linux 2.6.38-rc5 (81 minutes later...)
+
+* Sun Feb 13 2011 Chuck Ebbert <cebbert@redhat.com> 2.6.38-0.rc4.git7.1
+- Linux 2.6.38-rc4-git7
+
+* Sat Feb 12 2011 Chuck Ebbert <cebbert@redhat.com> 2.6.38-0.rc4.git6.1
+- Linux 2.6.38-rc4-git6
+- Fix memory corruption caused by bug in bridge code.
+
+* Thu Feb 10 2011 Chuck Ebbert <cebbert@redhat.com> 2.6.38-0.rc4.git3.1
+- Linux 2.6.38-rc4-git3
+
+* Mon Feb 07 2011 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 2.6.38-0.rc4.git0.2
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_15_Mass_Rebuild
+
+* Mon Feb 07 2011 Kyle McMartin <kmcmartin@redhat.com> 2.6.38-0.rc4.git0.1
+- Linux 2.6.38-rc4
+
+* Fri Feb 04 2011 Chuck Ebbert <cebbert@redhat.com> 2.6.38-0.rc3.git4.1
+- Linux 2.6.38-rc3-git4
+
+* Thu Feb 03 2011 Chuck Ebbert <cebbert@redhat.com>
+- Linux 2.6.38-rc3-git3
+- Enable Advansys SCSI driver on x86_64 (#589115)
+
+* Thu Feb 03 2011 Kyle McMartin <kmcmartin@redhat.com> 2.6.38-0.rc3.git2.1
+- Linux 2.6.38-rc3-git2 snapshot
+- [sgruszka] ath5k: fix fast channel change (#672778)
+
+* Wed Feb 02 2011 Kyle McMartin <kmcmartin@redhat.com> 2.6.38-0.rc3.git1.1
+- Linux 2.6.38-rc3-git1 snapshot.
+
+* Wed Feb 02 2011 Chuck Ebbert <cebbert@redhat.com>
+- Fix autoload of atl1c driver for latest hardware (#607499)
+
+* Tue Feb 01 2011 Chuck Ebbert <cebbert@redhat.com> 2.6.38-0.rc3.git0.1
+- Linux 2.6.38-rc3
+- Try to fix some obvious bugs in hfsplus mount failure handling (#673857)
+
+* Mon Jan 31 2011 Chuck Ebbert <cebbert@redhat.com> 2.6.38-0.rc2.git9.1
+- Linux 2.6.38-rc2-git9
+
+* Mon Jan 31 2011 Kyle McMartin <kmcmartin@redhat.com>
+- disable CONFIG_SERIAL_8250_DETECT_IRQ (from mschmidt@redhat.com)
+
+* Mon Jan 31 2011 Chuck Ebbert <cebbert@redhat.com>
+- Linux 2.6.38-rc2-git8
+- Add Trond's NFS bugfixes branch from git.linux-nfs.org
+
+* Mon Jan 31 2011 Chuck Ebbert <cebbert@redhat.com> 2.6.38-0.rc2.git7.2
+- Fix build failure on s390.
+
+* Fri Jan 28 2011 Chuck Ebbert <cebbert@redhat.com> 2.6.38-0.rc2.git7.1
+- Linux 2.6.38-rc2-git7
+
+* Wed Jan 26 2011 Kyle McMartin <kmcmartin@redhat.com> 2.6.38-0.rc2.git5.1
+- Linux 2.6.38-rc2-git5
+- [x86] Re-enable TRANSPARENT_HUGEPAGE, should be fixed by cacf061c.
+
+* Tue Jan 25 2011 Kyle McMartin <kmcmartin@redhat.com> 2.6.38-0.rc2.git3.2
+- [x86] Disable TRANSPARENT_HUGEPAGE for now, there be dragons there.
+
+* Tue Jan 25 2011 Kyle McMartin <kmcmartin@redhat.com> 2.6.38-0.rc2.git3.1
+- Linux 2.6.38-rc2-git3
+- perf-gcc460-build-fixes.patch: fix context from [9486aa38]
+
+* Mon Jan 24 2011 Kyle McMartin <kmcmartin@redhat.com> 2.6.38-0.rc2.git1.3
+- Disable usb/pci/acpi autosuspend goo until it can be checked.
+
+* Mon Jan 24 2011 Kyle McMartin <kmcmartin@redhat.com>
+- debug-tty-print-dev-name.patch: drop, haven't seen any warnings recently.
+- runtime_pm_fixups.patch: rebase and re-enable, make acpi_power_transition
+ in pci_bind actually do the right thing instead of (likely) always
+ trying to transition to D0.
+
+* Mon Jan 24 2011 Kyle McMartin <kmcmartin@redhat.com> 2.6.38-0.rc2.git1.1
+- Linux 2.6.38-rc2-git1
+- [e5cce6c1] tpm: fix panic caused by "tpm: Autodetect itpm devices"
+ may fix some boot issues people were having.
+- tpm-fix-stall-on-boot.patch: upstream.
+- perf-gcc460-build-fixes.patch: fix build issues with warn-unused-but-set
+ in gcc 4.6.0
+
+* Sat Jan 22 2011 Kyle McMartin <kmcmartin@redhat.com> 2.6.38-0.rc2.git0.1
+- Linux 2.6.38-rc2
+- linux-2.6-serial-460800.patch, drivers/serial => drivers/tty/serial
+
+* Thu Jan 20 2011 Kyle McMartin <kmcmartin@redhat.com> 2.6.38-0.rc1.git1.1
+- Linux 2.6.38-rc1-git1, should fix boot failure in -rc1.
+
+* Wed Jan 19 2011 Roland McGrath <roland@redhat.com>
+- utrace update
+
+* Wed Jan 19 2011 Kyle McMartin <kmcmartin@redhat.com> 2.6.38-0.rc1.git0.1
+- Linux 2.6.38-rc1
+
+* Tue Jan 18 2011 Kyle McMartin <kmcmartin@redhat.com> 2.6.38-0.rc0.git18.1
+- Linux 2.6.37-git18
+
+* Mon Jan 17 2011 Kyle McMartin <kmcmartin@redhat.com> 2.6.38-0.rc0.git16.1
+- Linux 2.6.37-git16
+- config changes:
+ - CONFIG_SQUASHFS_XZ=y [generic]
+ - CONFIG_SPARSE_IRQ=y [arm]
+
+* Sat Jan 15 2011 Kyle McMartin <kmcmartin@redhat.com> 2.6.38-0.rc0.git13.1
+- Linux 2.6.37-git13
+- Drop xen_export-arbitrary_virt_to_machine.patch, upstream.
+
+* Fri Jan 14 2011 Kyle McMartin <kmcmartin@redhat.com>
+- xen_export-arbitrary_virt_to_machine.patch: pull patch from upstream
+ to fix build error.
+
+* Fri Jan 14 2011 Kyle McMartin <kmcmartin@redhat.com> 2.6.38-0.rc0.git12.1
+- Linux 2.6.37-git12
+- 0001-use-__devexit-not-__exit-in-n2_unregister_algs-fixes.patch: drop
+ upstream patch.
+- acpi-update-battery-information-on-notification-0x81.patch: drop upstream
+ patch.
+- mm-*.patch: drop upstream patches.
+- important config changes:
+ ACPI_IPMI=m
+ CRYPTO_AES_NI_INTEL=m [i386]
+ TRANSPARENT_HUGEPAGE=y
+
+* Wed Jan 12 2011 Kyle McMartin <kmcmartin@redhat.com> 2.6.38-0.rc0.git9.1
+- Linux 2.6.37-git9
+- Re-enable DEBUG_SET_MODULE_RONX since commit 94462ad3 fixed it.
+- Enable some more new random HID and sensor junk as modules.
+
+* Tue Jan 11 2011 Matthew Garrett <mjg@redhat.com>
+- linux-2.6-ehci-check-port-status.patch - fix USB resume on some AMD systems
+
+* Mon Jan 10 2011 Jarod Wilson <jarod@redhat.com>
+- Add support for local rebuild config option overrides
+- Add missing --with/--without pae build flag support
+
+* Mon Jan 10 2011 Kyle McMartin <kmcmartin@redhat.com> 2.6.38-0.rc0.git4.2
+- Disable DEBUG_SET_MODULE_RONX for now, it causes boot-up to fail since
+ dynamic ftrace is trying to rewrite instructions on module load.
+
+* Mon Jan 10 2011 Kyle McMartin <kmcmartin@redhat.com>
+- Drop obsolete linux-2.6-debug-nmi-timeout.patch
+
+* Mon Jan 10 2011 Kyle McMartin <kmcmartin@redhat.com> 2.6.38-0.rc0.git4.1
+- Branch for 2.6.38
+- Rebase trivial patches.
+- Switch debug configs back on.
+- config changes:
+ DEBUG_SET_MODULE_RONX=y
+ B43_PHY_N=y
+ RT2800USB_RT33XX=y |
+ RT2800PCI_RT33XX=y | experimental
+ WL12XX=m
+ RTL8192CE=m
+ CAN_SLCAN=m
+ SCHED_AUTOGROUP=n
+
* Fri Jan 07 2011 Kyle McMartin <kmcmartin@redhat.com> 2.6.37-2
- drm_i915-check-eDP-encoder-correctly-when-setting-modes.patch reported to
fix HP/Sony eDP issues by adamw and airlied.
-* Wed Jan 05 2011 Dennis Gilmore <dennis@ausil.us>
+* Wed Jan 05 2011 Dennis Gilmore <dennis@ausil.us>
- build sparc headers on sparcv9
-* Tue Jan 04 2011 Dennis Gilmore <dennis@ausil.us>
+* Tue Jan 04 2011 Dennis Gilmore <dennis@ausil.us>
- add patch for sparc build failure
* Tue Jan 04 2011 Alexandre Oliva <lxoliva@fsfla.org> -libre Wed Jan 05
diff --git a/freed-ora/current/master/linux-2.6-32bit-mmap-exec-randomization.patch b/freed-ora/current/master/linux-2.6-32bit-mmap-exec-randomization.patch
index d42638c27..dd40b60df 100644
--- a/freed-ora/current/master/linux-2.6-32bit-mmap-exec-randomization.patch
+++ b/freed-ora/current/master/linux-2.6-32bit-mmap-exec-randomization.patch
@@ -14,9 +14,9 @@
--- b/mm/mmap.c
+++ b/mm/mmap.c
@@ -28,6 +28,7 @@
- #include <linux/mmu_notifier.h>
#include <linux/perf_event.h>
#include <linux/audit.h>
+ #include <linux/khugepaged.h>
+#include <linux/random.h>
#include <asm/uaccess.h>
diff --git a/freed-ora/current/master/linux-2.6-debug-nmi-timeout.patch b/freed-ora/current/master/linux-2.6-debug-nmi-timeout.patch
deleted file mode 100644
index f54d26ae9..000000000
--- a/freed-ora/current/master/linux-2.6-debug-nmi-timeout.patch
+++ /dev/null
@@ -1,45 +0,0 @@
-From 542dee6f43067fa0101b53925aadf1d08c997cd4 Mon Sep 17 00:00:00 2001
-From: Kyle McMartin <kyle@phobos.i.jkkm.org>
-Date: Mon, 29 Mar 2010 23:40:27 -0400
-Subject: linux-2.6-debug-nmi-timeout
-
----
- arch/x86/kernel/apic/nmi.c | 2 +-
- lib/Kconfig.debug | 8 ++++++++
- 2 files changed, 9 insertions(+), 1 deletions(-)
-
-diff --git a/arch/x86/kernel/apic/nmi.c b/arch/x86/kernel/apic/nmi.c
-index 8aa65ad..ba7d55e 100644
---- a/arch/x86/kernel/apic/nmi.c
-+++ b/arch/x86/kernel/apic/nmi.c
-@@ -439,7 +439,7 @@ nmi_watchdog_tick(struct pt_regs *regs, unsigned reason)
- * wait a few IRQs (5 seconds) before doing the oops ...
- */
- __this_cpu_inc(alert_counter);
-- if (__this_cpu_read(alert_counter) == 5 * nmi_hz)
-+ if (__this_cpu_read(alert_counter) == CONFIG_DEBUG_NMI_TIMEOUT * nmi_hz)
- /*
- * die_nmi will return ONLY if NOTIFY_STOP happens..
- */
-diff --git a/lib/Kconfig.debug b/lib/Kconfig.debug
-index 1fafb4b..963e78b 100644
---- a/lib/Kconfig.debug
-+++ b/lib/Kconfig.debug
-@@ -254,6 +254,14 @@ config SCHEDSTATS
- application, you can say N to avoid the very slight overhead
- this adds.
-
-+config DEBUG_NMI_TIMEOUT
-+ int "Number of seconds before NMI timeout"
-+ depends on X86
-+ default 5
-+ help
-+ This value is the number of seconds the NMI watchdog will tick
-+ before it decides the machine has hung.
-+
- config TIMER_STATS
- bool "Collect kernel timers statistics"
- depends on DEBUG_KERNEL && PROC_FS
---
-1.7.0.1
-
diff --git a/freed-ora/current/master/linux-2.6-ehci-check-port-status.patch b/freed-ora/current/master/linux-2.6-ehci-check-port-status.patch
new file mode 100644
index 000000000..f3c5faf70
--- /dev/null
+++ b/freed-ora/current/master/linux-2.6-ehci-check-port-status.patch
@@ -0,0 +1,54 @@
+commit e17a07a9e0b62d5a5f0a5683ecbabad3aa95a4d5
+Author: Matthew Garrett <mjg@redhat.com>
+Date: Tue Jan 11 12:19:40 2011 -0500
+
+ ehci: Check individual port status registers on resume
+
+ If a device plug/unplug is detected on an ATI SB700 USB controller in D3,
+ it appears to set the port status register but not the controller status
+ register. As a result we'll fail to detect the plug event. Check the port
+ status register on resume as well in order to catch this case.
+
+ Signed-off-by: Matthew Garrett <mjg@redhat.com>
+
+diff --git a/drivers/usb/host/ehci-hub.c b/drivers/usb/host/ehci-hub.c
+index 796ea0c..d9c0748 100644
+--- a/drivers/usb/host/ehci-hub.c
++++ b/drivers/usb/host/ehci-hub.c
+@@ -106,6 +106,27 @@ static void ehci_handover_companion_ports(struct ehci_hcd *ehci)
+ ehci->owned_ports = 0;
+ }
+
++static int ehci_port_change(struct ehci_hcd *ehci)
++{
++ int i = HCS_N_PORTS(ehci->hcs_params);
++
++ /* First check if the controller indicates a change event */
++
++ if (ehci_readl(ehci, &ehci->regs->status) & STS_PCD)
++ return 1;
++
++ /*
++ * Not all controllers appear to update this while going from D3 to D0,
++ * so check the individual port status registers as well
++ */
++
++ while (i--)
++ if (ehci_readl(ehci, &ehci->regs->port_status[i]) & PORT_CSC)
++ return 1;
++
++ return 0;
++}
++
+ static void ehci_adjust_port_wakeup_flags(struct ehci_hcd *ehci,
+ bool suspending, bool do_wakeup)
+ {
+@@ -168,7 +189,7 @@ static void ehci_adjust_port_wakeup_flags(struct ehci_hcd *ehci,
+ }
+
+ /* Does the root hub have a port wakeup pending? */
+- if (!suspending && (ehci_readl(ehci, &ehci->regs->status) & STS_PCD))
++ if (!suspending && ehci_port_change(ehci))
+ usb_hcd_resume_root_hub(ehci_to_hcd(ehci));
+
+ spin_unlock_irqrestore(&ehci->lock, flags);
diff --git a/freed-ora/current/master/linux-2.6-i386-nx-emulation.patch b/freed-ora/current/master/linux-2.6-i386-nx-emulation.patch
index 24a2ed500..da84cc672 100644
--- a/freed-ora/current/master/linux-2.6-i386-nx-emulation.patch
+++ b/freed-ora/current/master/linux-2.6-i386-nx-emulation.patch
@@ -389,7 +389,7 @@
+ else
+
printk(KERN_NOTICE "Notice: NX (Execute Disable) protection "
- "missing in CPU or disabled in BIOS!\n");
+ "missing in CPU!\n");
} else {
--- a/arch/x86/mm/tlb.c
+++ b/arch/x86/mm/tlb.c
diff --git a/freed-ora/current/master/linux-2.6-serial-460800.patch b/freed-ora/current/master/linux-2.6-serial-460800.patch
index 17d67ef64..9aa392c9e 100644
--- a/freed-ora/current/master/linux-2.6-serial-460800.patch
+++ b/freed-ora/current/master/linux-2.6-serial-460800.patch
@@ -1,7 +1,7 @@
diff --git a/drivers/serial/8250.c b/drivers/serial/8250.c
index 2209620..659c1bb 100644
---- a/drivers/serial/8250.c
-+++ b/drivers/serial/8250.c
+--- a/drivers/tty/serial/8250.c
++++ b/drivers/tty/serial/8250.c
@@ -7,6 +7,9 @@
*
* Copyright (C) 2001 Russell King.
diff --git a/freed-ora/current/master/linux-2.6-silence-noise.patch b/freed-ora/current/master/linux-2.6-silence-noise.patch
index 119a97769..32c678b1f 100644
--- a/freed-ora/current/master/linux-2.6-silence-noise.patch
+++ b/freed-ora/current/master/linux-2.6-silence-noise.patch
@@ -1,15 +1,3 @@
---- linux-2.6.26.noarch/drivers/base/power/main.c~ 2008-08-22 20:57:57.000000000 -0400
-+++ linux-2.6.26.noarch/drivers/base/power/main.c 2008-08-22 20:58:05.000000000 -0400
-@@ -69,9 +69,6 @@ void device_pm_unlock(void)
- */
- void device_pm_add(struct device *dev)
- {
-- pr_debug("PM: Adding info for %s:%s\n",
-- dev->bus ? dev->bus->name : "No Bus",
-- kobject_name(&dev->kobj));
- mutex_lock(&dpm_list_mtx);
- if (dev->parent) {
- if (dev->parent->power.status >= DPM_SUSPENDING)
From b4e96f34c17e5a79cd28774cc722bb33e7e02c6e Mon Sep 17 00:00:00 2001
From: Peter Jones <pjones@redhat.com>
Date: Thu, 25 Sep 2008 16:23:33 -0400
@@ -31,7 +19,7 @@ index 170f71e..4f3e632 100644
static int i8042_controller_check(void)
{
- if (i8042_flush() == I8042_BUFFER_SIZE) {
-- printk(KERN_ERR "i8042.c: No controller found.\n");
+- pr_err("No controller found\n");
+ if (i8042_flush() == I8042_BUFFER_SIZE)
return -ENODEV;
- }
@@ -64,3 +52,21 @@ Signed-off-by: Dave Jones <davej@redhat.com>
}
#endif
+This was removed in revision 1.6 of linux-2.6-silence-noise.patch
+in ye olde CVS tree. I have no idea why. Originally the pr_debug in
+device_pm_remove was nuked as well, but that seems to have gotten lost in
+the r1.634 of kernel.spec (2.6.26-rc2-git5.)
+
+diff --git a/drivers/base/power/main.c b/drivers/base/power/main.c
+index 2a52270..bacbdd2 100644
+--- a/drivers/base/power/main.c
++++ b/drivers/base/power/main.c
+@@ -87,8 +87,6 @@ void device_pm_unlock(void)
+ */
+ void device_pm_add(struct device *dev)
+ {
+- pr_debug("PM: Adding info for %s:%s\n",
+- dev->bus ? dev->bus->name : "No Bus", dev_name(dev));
+ mutex_lock(&dpm_list_mtx);
+ if (dev->parent && dev->parent->power.in_suspend)
+ dev_warn(dev, "parent %s should not be sleeping\n",
diff --git a/freed-ora/current/master/linux-2.6-tracehook.patch b/freed-ora/current/master/linux-2.6-tracehook.patch
index b4928fcae..027c6d533 100644
--- a/freed-ora/current/master/linux-2.6-tracehook.patch
+++ b/freed-ora/current/master/linux-2.6-tracehook.patch
@@ -20,10 +20,10 @@ Signed-off-by: Roland McGrath <roland@redhat.com>
5 files changed, 10 insertions(+), 8 deletions(-)
diff --git a/include/linux/ptrace.h b/include/linux/ptrace.h
-index 4272521..a85fb41 100644
+index 092a04f..619cdf0 100644
--- a/include/linux/ptrace.h
+++ b/include/linux/ptrace.h
-@@ -105,6 +105,7 @@ extern int ptrace_traceme(void);
+@@ -106,6 +106,7 @@ extern int ptrace_traceme(void);
extern int ptrace_readdata(struct task_struct *tsk, unsigned long src, char __user *dst, int len);
extern int ptrace_writedata(struct task_struct *tsk, char __user *src, unsigned long dst, int len);
extern int ptrace_attach(struct task_struct *tsk);
@@ -32,10 +32,10 @@ index 4272521..a85fb41 100644
extern void ptrace_disable(struct task_struct *);
extern int ptrace_check_attach(struct task_struct *task, int kill);
diff --git a/include/linux/sched.h b/include/linux/sched.h
-index ce160d6..5e7cc95 100644
+index 2238745..09f26df 100644
--- a/include/linux/sched.h
+++ b/include/linux/sched.h
-@@ -2030,6 +2030,7 @@ extern int kill_pgrp(struct pid *pid, in
+@@ -2061,6 +2061,7 @@ extern int kill_pgrp(struct pid *pid, in
extern int kill_pid(struct pid *pid, int sig, int priv);
extern int kill_proc_info(int, struct siginfo *, pid_t);
extern int do_notify_parent(struct task_struct *, int);
@@ -44,7 +44,7 @@ index ce160d6..5e7cc95 100644
extern void force_sig(int, struct task_struct *);
extern int send_sig(int, struct task_struct *, int);
diff --git a/include/linux/tracehook.h b/include/linux/tracehook.h
-index 10db010..c78b2f4 100644
+index 3a2e66d..98917e9 100644
--- a/include/linux/tracehook.h
+++ b/include/linux/tracehook.h
@@ -134,7 +134,7 @@ static inline __must_check int tracehook
@@ -93,7 +93,7 @@ index 10db010..c78b2f4 100644
/**
diff --git a/kernel/ptrace.c b/kernel/ptrace.c
-index f34d798..8049cb5 100644
+index 99bbaa3..84d9f8f 100644
--- a/kernel/ptrace.c
+++ b/kernel/ptrace.c
@@ -270,7 +270,7 @@ static int ignoring_children(struct sigh
@@ -106,10 +106,10 @@ index f34d798..8049cb5 100644
__ptrace_unlink(p);
diff --git a/kernel/signal.c b/kernel/signal.c
-index bded651..6d13d9f 100644
+index 4e3cff1..b74324d 100644
--- a/kernel/signal.c
+++ b/kernel/signal.c
-@@ -1521,7 +1521,7 @@ int do_notify_parent(struct task_struct
+@@ -1522,7 +1522,7 @@ int do_notify_parent(struct task_struct
return ret;
}
@@ -118,7 +118,7 @@ index bded651..6d13d9f 100644
{
struct siginfo info;
unsigned long flags;
-@@ -1791,7 +1791,7 @@ static int do_signal_stop(int signr)
+@@ -1794,7 +1794,7 @@ static int do_signal_stop(int signr)
static int ptrace_signal(int signr, siginfo_t *info,
struct pt_regs *regs, void *cookie)
{
diff --git a/freed-ora/current/master/linux-2.6-utrace-ptrace.patch b/freed-ora/current/master/linux-2.6-utrace-ptrace.patch
index caeae6760..bc5681d95 100644
--- a/freed-ora/current/master/linux-2.6-utrace-ptrace.patch
+++ b/freed-ora/current/master/linux-2.6-utrace-ptrace.patch
@@ -12,28 +12,27 @@ change to userland when CONFIG_UTRACE is enabled.
Signed-off-by: Roland McGrath <roland@redhat.com>
Signed-off-by: Oleg Nesterov <oleg@redhat.com>
---
- include/linux/ptrace.h | 2 +-
+ include/linux/ptrace.h | 1 +
kernel/Makefile | 1 +
- kernel/ptrace-utrace.c | 1138 ++++++++++++++++++++++++++++++++++++++++++++++++
- kernel/ptrace.c | 688 ++++++++++++++---------------
+ kernel/ptrace-utrace.c | 1187 ++++++++++++++++++++++++++++++++++++++++++++++++
+ kernel/ptrace.c | 690 ++++++++++++++--------------
kernel/utrace.c | 16 +
- 5 files changed, 1494 insertions(+), 351 deletions(-)
+ 5 files changed, 1544 insertions(+), 351 deletions(-)
diff --git a/include/linux/ptrace.h b/include/linux/ptrace.h
-index a85fb41..235c1b0 100644
+index 619cdf0..e391bdb 100644
--- a/include/linux/ptrace.h
+++ b/include/linux/ptrace.h
-@@ -99,7 +99,7 @@
- #include <linux/compiler.h> /* For unlikely. */
+@@ -100,6 +100,7 @@
#include <linux/sched.h> /* For struct task_struct. */
--
+
+extern void ptrace_notify_stop(struct task_struct *tracee);
extern long arch_ptrace(struct task_struct *child, long request,
unsigned long addr, unsigned long data);
extern int ptrace_traceme(void);
diff --git a/kernel/Makefile b/kernel/Makefile
-index 6004913..b09c9a5 100644
+index 1172528..9a815a5 100644
--- a/kernel/Makefile
+++ b/kernel/Makefile
@@ -71,6 +71,7 @@ obj-$(CONFIG_RESOURCE_COUNTERS) += res_c
@@ -46,10 +45,10 @@ index 6004913..b09c9a5 100644
obj-$(CONFIG_AUDIT_WATCH) += audit_watch.o
diff --git a/kernel/ptrace-utrace.c b/kernel/ptrace-utrace.c
new file mode 100644
-index ...a90078d 100644
+index ...a5bcb9e 100644
--- /dev/null
+++ b/kernel/ptrace-utrace.c
-@@ -0,0 +1,1138 @@
+@@ -0,0 +1,1187 @@
+/*
+ * linux/kernel/ptrace.c
+ *
@@ -119,6 +118,7 @@ index ...a90078d 100644
+#define PT_UTRACED 0x00001000
+
+#define PTRACE_O_SYSEMU 0x100
++#define PTRACE_O_DETACHED 0x200
+
+#define PTRACE_EVENT_SYSCALL (1 << 16)
+#define PTRACE_EVENT_SIGTRAP (2 << 16)
@@ -155,6 +155,19 @@ index ...a90078d 100644
+ &ptrace_utrace_ops, NULL);
+}
+
++static int utrace_barrier_uninterruptible(struct task_struct *target,
++ struct utrace_engine *engine)
++{
++ for (;;) {
++ int err = utrace_barrier(target, engine);
++
++ if (err != -ERESTARTSYS)
++ return err;
++
++ schedule_timeout_uninterruptible(1);
++ }
++}
++
+static struct utrace_engine *
+ptrace_reuse_engine(struct task_struct *tracee)
+{
@@ -167,7 +180,7 @@ index ...a90078d 100644
+ return engine;
+
+ ctx = ptrace_context(engine);
-+ if (unlikely(ctx->resume == UTRACE_DETACH)) {
++ if (unlikely(ctx->options == PTRACE_O_DETACHED)) {
+ /*
+ * Try to reuse this self-detaching engine.
+ * The only caller which can hit this case is ptrace_attach(),
@@ -181,12 +194,16 @@ index ...a90078d 100644
+ if (!err || err == -EINPROGRESS) {
+ ctx->resume = UTRACE_RESUME;
+ /* synchronize with ptrace_report_signal() */
-+ err = utrace_barrier(tracee, engine);
++ err = utrace_barrier_uninterruptible(tracee, engine);
+ }
-+ WARN_ON(!err != (engine->ops == &ptrace_utrace_ops));
+
-+ if (!err)
++ if (!err) {
++ WARN_ON(engine->ops != &ptrace_utrace_ops &&
++ !tracee->exit_state);
+ return engine;
++ }
++
++ WARN_ON(engine->ops == &ptrace_utrace_ops);
+ }
+
+ utrace_engine_put(engine);
@@ -296,32 +313,60 @@ index ...a90078d 100644
+ * If true, the caller is PTRACE_DETACH, otherwise
+ * the tracer detaches implicitly during exit.
+ */
-+ bool voluntary = (sig >= 0);
++ bool explicit = (sig >= 0);
+ struct utrace_engine *engine = ptrace_lookup_engine(tracee);
+ enum utrace_resume_action action = UTRACE_DETACH;
++ struct ptrace_context *ctx;
+
+ if (unlikely(IS_ERR(engine)))
+ return;
+
-+ if (sig) {
-+ struct ptrace_context *ctx = ptrace_context(engine);
++ ctx = ptrace_context(engine);
++
++ if (!explicit) {
++ int err;
++
++ /*
++ * We are going to detach, the tracee can be running.
++ * Ensure ptrace_report_signal() won't report a signal.
++ */
++ ctx->resume = UTRACE_DETACH;
++ err = utrace_barrier_uninterruptible(tracee, engine);
++
++ if (!err && ctx->siginfo) {
++ /*
++ * The tracee has already reported a signal
++ * before utrace_barrier().
++ *
++ * Resume it like we do in PTRACE_EVENT_SIGNAL
++ * case below. The difference is that we can race
++ * with ptrace_report_signal() if the tracee is
++ * running but this doesn't matter. In any case
++ * UTRACE_SIGNAL_REPORT must be pending and it
++ * can return nothing but UTRACE_DETACH.
++ */
++ action = UTRACE_RESUME;
++ }
+
++ } else if (sig) {
+ switch (get_stop_event(ctx)) {
+ case PTRACE_EVENT_SYSCALL:
-+ if (voluntary)
-+ send_sig_info(sig, SEND_SIG_PRIV, tracee);
++ send_sig_info(sig, SEND_SIG_PRIV, tracee);
+ break;
+
+ case PTRACE_EVENT_SIGNAL:
-+ if (voluntary)
-+ ctx->signr = sig;
++ ctx->signr = sig;
+ ctx->resume = UTRACE_DETACH;
+ action = UTRACE_RESUME;
+ break;
+ }
+ }
+
-+ ptrace_wake_up(tracee, engine, action, voluntary);
++ ptrace_wake_up(tracee, engine, action, explicit);
++
++ if (action != UTRACE_DETACH)
++ ctx->options = PTRACE_O_DETACHED;
++
+ utrace_engine_put(engine);
+}
+
@@ -453,6 +498,11 @@ index ...a90078d 100644
+ return UTRACE_SYSCALL_RUN | UTRACE_STOP;
+}
+
++static inline bool is_step_resume(enum utrace_resume_action resume)
++{
++ return resume == UTRACE_BLOCKSTEP || resume == UTRACE_SINGLESTEP;
++}
++
+static u32 ptrace_report_syscall_exit(u32 action, struct utrace_engine *engine,
+ struct pt_regs *regs)
+{
@@ -461,11 +511,7 @@ index ...a90078d 100644
+ if (ptrace_event_pending(ctx))
+ return UTRACE_STOP;
+
-+ if (ctx->resume != UTRACE_RESUME) {
-+ WARN_ON(ctx->resume != UTRACE_BLOCKSTEP &&
-+ ctx->resume != UTRACE_SINGLESTEP);
-+ ctx->resume = UTRACE_RESUME;
-+
++ if (is_step_resume(ctx->resume)) {
+ ctx->signr = SIGTRAP;
+ return UTRACE_INTERRUPT;
+ }
@@ -553,10 +599,7 @@ index ...a90078d 100644
+ if (WARN_ON(ctx->siginfo))
+ ctx->siginfo = NULL;
+
-+ if (resume != UTRACE_RESUME) {
-+ WARN_ON(resume != UTRACE_BLOCKSTEP &&
-+ resume != UTRACE_SINGLESTEP);
-+
++ if (is_step_resume(resume)) {
+ set_stop_code(ctx, PTRACE_EVENT_SIGTRAP);
+ return UTRACE_STOP | UTRACE_SIGNAL_IGN;
+ }
@@ -583,6 +626,11 @@ index ...a90078d 100644
+ }
+
+ WARN_ON(ctx->siginfo);
++
++ /* Raced with the exiting tracer ? */
++ if (resume == UTRACE_DETACH)
++ return action;
++
+ ctx->siginfo = info;
+ /*
+ * ctx->siginfo points to the caller's stack.
@@ -811,7 +859,7 @@ index ...a90078d 100644
+static int ptrace_set_options(struct task_struct *tracee,
+ struct utrace_engine *engine, long data)
+{
-+ BUILD_BUG_ON(PTRACE_O_MASK & PTRACE_O_SYSEMU);
++ BUILD_BUG_ON(PTRACE_O_MASK & (PTRACE_O_SYSEMU | PTRACE_O_DETACHED));
+
+ ptrace_set_events(tracee, engine, data & PTRACE_O_MASK);
+ return (data & ~PTRACE_O_MASK) ? -EINVAL : 0;
@@ -1189,7 +1237,7 @@ index ...a90078d 100644
+}
+#endif /* CONFIG_COMPAT */
diff --git a/kernel/ptrace.c b/kernel/ptrace.c
-index 23bde94..daed9e8 100644
+index e275608..72ea65c 100644
--- a/kernel/ptrace.c
+++ b/kernel/ptrace.c
@@ -15,7 +15,6 @@
@@ -1200,7 +1248,7 @@ index 23bde94..daed9e8 100644
#include <linux/security.h>
#include <linux/signal.h>
#include <linux/audit.h>
-@@ -24,7 +23,317 @@
+@@ -24,7 +23,320 @@
#include <linux/uaccess.h>
#include <linux/regset.h>
@@ -1412,7 +1460,8 @@ index 23bde94..daed9e8 100644
+#define arch_ptrace_attach(child) do { } while (0)
+#endif
+
-+SYSCALL_DEFINE4(ptrace, long, request, long, pid, unsigned long, addr, unsigned long, data)
++SYSCALL_DEFINE4(ptrace, long, request, long, pid, unsigned long, addr,
++ unsigned long, data)
+{
+ struct task_struct *child;
+ long ret;
@@ -1423,13 +1472,13 @@ index 23bde94..daed9e8 100644
+ arch_ptrace_attach(current);
+ goto out;
+ }
-+
+
+ child = ptrace_get_task_struct(pid);
+ if (IS_ERR(child)) {
+ ret = PTR_ERR(child);
+ goto out;
+ }
-
++
+ if (request == PTRACE_ATTACH) {
+ ret = ptrace_attach(child);
+ /*
@@ -1453,7 +1502,8 @@ index 23bde94..daed9e8 100644
+ return ret;
+}
+
-+int generic_ptrace_peekdata(struct task_struct *tsk, unsigned long addr, unsigned long data)
++int generic_ptrace_peekdata(struct task_struct *tsk, unsigned long addr,
++ unsigned long data)
+{
+ unsigned long tmp;
+ int copied;
@@ -1464,7 +1514,8 @@ index 23bde94..daed9e8 100644
+ return put_user(tmp, (unsigned long __user *)data);
+}
+
-+int generic_ptrace_pokedata(struct task_struct *tsk, unsigned long addr, unsigned long data)
++int generic_ptrace_pokedata(struct task_struct *tsk, unsigned long addr,
++ unsigned long data)
+{
+ int copied;
+
@@ -1518,7 +1569,7 @@ index 23bde94..daed9e8 100644
/*
* ptrace a task: make the debugger its new parent and
* move it to the ptrace list.
-@@ -117,61 +426,6 @@ int ptrace_check_attach(struct task_stru
+@@ -117,61 +429,6 @@ int ptrace_check_attach(struct task_stru
return ret;
}
@@ -1580,7 +1631,7 @@ index 23bde94..daed9e8 100644
int ptrace_attach(struct task_struct *task)
{
int retval;
-@@ -195,8 +449,6 @@ int ptrace_attach(struct task_struct *ta
+@@ -195,8 +452,6 @@ int ptrace_attach(struct task_struct *ta
task_lock(task);
retval = __ptrace_may_access(task, PTRACE_MODE_ATTACH);
@@ -1589,13 +1640,10 @@ index 23bde94..daed9e8 100644
task_unlock(task);
if (retval)
goto unlock_creds;
-@@ -217,94 +469,40 @@ int ptrace_attach(struct task_struct *ta
-
- retval = 0;
- unlock_tasklist:
-- write_unlock_irq(&tasklist_lock);
--unlock_creds:
-- mutex_unlock(&task->signal->cred_guard_mutex);
+@@ -220,91 +475,37 @@ unlock_tasklist:
+ write_unlock_irq(&tasklist_lock);
+ unlock_creds:
+ mutex_unlock(&task->signal->cred_guard_mutex);
-out:
- return retval;
-}
@@ -1654,9 +1702,6 @@ index 23bde94..daed9e8 100644
- * If it's a zombie, our attachedness prevented normal parent notification
- * or self-reaping. Do notification now if it would have happened earlier.
- * If it should reap itself, return true.
-+ write_unlock_irq(&tasklist_lock);
-+unlock_creds:
-+ mutex_unlock(&task->signal->cred_guard_mutex);
+out:
+ return retval;
+}
@@ -1711,7 +1756,7 @@ index 23bde94..daed9e8 100644
}
int ptrace_detach(struct task_struct *child, unsigned int data)
-@@ -366,56 +564,6 @@ void exit_ptrace(struct task_struct *tra
+@@ -368,57 +569,7 @@ void exit_ptrace(struct task_struct *tra
write_lock_irq(&tasklist_lock);
}
@@ -1765,10 +1810,12 @@ index 23bde94..daed9e8 100644
- return copied;
-}
-
- static int ptrace_setoptions(struct task_struct *child, unsigned long data)
+-static int ptrace_setoptions(struct task_struct *child, unsigned long data)
++static int ptrace_setoptions(struct task_struct *child, long data)
{
child->ptrace &= ~PT_TRACE_MASK;
-@@ -530,47 +677,6 @@ static int ptrace_resume(struct task_str
+
+@@ -533,47 +683,6 @@ static int ptrace_resume(struct task_str
return 0;
}
@@ -1816,7 +1863,7 @@ index 23bde94..daed9e8 100644
int ptrace_request(struct task_struct *child, long request,
unsigned long addr, unsigned long data)
{
-@@ -686,91 +792,7 @@ int ptrace_request(struct task_struct *c
+@@ -689,91 +798,7 @@ int ptrace_request(struct task_struct *c
return ret;
}
@@ -1908,7 +1955,7 @@ index 23bde94..daed9e8 100644
int compat_ptrace_request(struct task_struct *child, compat_long_t request,
compat_ulong_t addr, compat_ulong_t data)
{
-@@ -845,42 +870,5 @@ int compat_ptrace_request(struct task_st
+@@ -851,42 +876,5 @@ int compat_ptrace_request(struct task_st
return ret;
}
@@ -1953,10 +2000,10 @@ index 23bde94..daed9e8 100644
#endif /* CONFIG_COMPAT */
+#endif /* CONFIG_UTRACE */
diff --git a/kernel/utrace.c b/kernel/utrace.c
-index 43f38b7..fd21b7b 100644
+index 26d6faf..37dce16 100644
--- a/kernel/utrace.c
+++ b/kernel/utrace.c
-@@ -809,6 +809,22 @@ relock:
+@@ -816,6 +816,22 @@ relock:
spin_unlock_irq(&task->sighand->siglock);
spin_unlock(&utrace->lock);
diff --git a/freed-ora/current/master/linux-2.6-utrace.patch b/freed-ora/current/master/linux-2.6-utrace.patch
index c50b83ea8..366b8a176 100644
--- a/freed-ora/current/master/linux-2.6-utrace.patch
+++ b/freed-ora/current/master/linux-2.6-utrace.patch
@@ -35,11 +35,11 @@ Signed-off-by: Roland McGrath <roland@redhat.com>
kernel/Makefile | 1 +
kernel/fork.c | 3 +
kernel/ptrace.c | 14 +
- kernel/utrace.c | 2434 +++++++++++++++++++++++++++++++++++++
- 11 files changed, 3837 insertions(+), 2 deletions(-)
+ kernel/utrace.c | 2440 +++++++++++++++++++++++++++++++++++++
+ 11 files changed, 3843 insertions(+), 2 deletions(-)
diff --git a/Documentation/DocBook/Makefile b/Documentation/DocBook/Makefile
-index 34929f2..884c36b 100644
+index 8b6e00a..2740633 100644
--- a/Documentation/DocBook/Makefile
+++ b/Documentation/DocBook/Makefile
@@ -14,7 +14,7 @@ DOCBOOKS := z8530book.xml mcabook.xml de
@@ -668,10 +668,10 @@ index fff6572..a67bd83 100644
if (p->files)
fdt = files_fdtable(p->files);
diff --git a/include/linux/sched.h b/include/linux/sched.h
-index 5e7cc95..66a1ec8 100644
+index 09f26df..e6fa5e9 100644
--- a/include/linux/sched.h
+++ b/include/linux/sched.h
-@@ -1339,6 +1339,11 @@ struct task_struct {
+@@ -1357,6 +1357,11 @@ struct task_struct {
#endif
seccomp_t seccomp;
@@ -684,7 +684,7 @@ index 5e7cc95..66a1ec8 100644
u32 parent_exec_id;
u32 self_exec_id;
diff --git a/include/linux/tracehook.h b/include/linux/tracehook.h
-index c78b2f4..71fa250 100644
+index 98917e9..afba8f8 100644
--- a/include/linux/tracehook.h
+++ b/include/linux/tracehook.h
@@ -49,6 +49,7 @@
@@ -1620,10 +1620,10 @@ index ...f251efe 100644
+
+#endif /* linux/utrace.h */
diff --git a/init/Kconfig b/init/Kconfig
-index 2de5b1c..a283086 100644
+index c972899..17483b7 100644
--- a/init/Kconfig
+++ b/init/Kconfig
-@@ -332,6 +332,15 @@ config AUDIT_TREE
+@@ -339,6 +339,15 @@ config AUDIT_TREE
depends on AUDITSYSCALL
select FSNOTIFY
@@ -1640,7 +1640,7 @@ index 2de5b1c..a283086 100644
menu "RCU Subsystem"
diff --git a/kernel/Makefile b/kernel/Makefile
-index 0b72d1a..6004913 100644
+index 0b5ff08..1172528 100644
--- a/kernel/Makefile
+++ b/kernel/Makefile
@@ -70,6 +70,7 @@ obj-$(CONFIG_IKCONFIG) += configs.o
@@ -1652,10 +1652,10 @@ index 0b72d1a..6004913 100644
obj-$(CONFIG_AUDITSYSCALL) += auditsc.o
obj-$(CONFIG_AUDIT_WATCH) += audit_watch.o
diff --git a/kernel/fork.c b/kernel/fork.c
-index 98b4508..3ceff6f 100644
+index 5447dc7..10a39fe 100644
--- a/kernel/fork.c
+++ b/kernel/fork.c
-@@ -161,6 +161,7 @@ void free_task(struct task_struct *tsk)
+@@ -162,6 +162,7 @@ void free_task(struct task_struct *tsk)
free_thread_info(tsk->stack);
rt_mutex_debug_task_free(tsk);
ftrace_graph_exit_task(tsk);
@@ -1663,7 +1663,7 @@ index 98b4508..3ceff6f 100644
free_task_struct(tsk);
}
EXPORT_SYMBOL(free_task);
-@@ -1008,6 +1009,8 @@ static struct task_struct *copy_process(
+@@ -1018,6 +1019,8 @@ static struct task_struct *copy_process(
if (!p)
goto fork_out;
@@ -1673,7 +1673,7 @@ index 98b4508..3ceff6f 100644
rt_mutex_init_task(p);
diff --git a/kernel/ptrace.c b/kernel/ptrace.c
-index 8049cb5..23bde94 100644
+index 84d9f8f..e275608 100644
--- a/kernel/ptrace.c
+++ b/kernel/ptrace.c
@@ -15,6 +15,7 @@
@@ -1720,10 +1720,10 @@ index 8049cb5..23bde94 100644
if (!current->ptrace) {
diff --git a/kernel/utrace.c b/kernel/utrace.c
new file mode 100644
-index ...43f38b7 100644
+index ...26d6faf 100644
--- /dev/null
+++ b/kernel/utrace.c
-@@ -0,0 +1,2434 @@
+@@ -0,0 +1,2440 @@
+/*
+ * utrace infrastructure interface for debugging user processes
+ *
@@ -2440,8 +2440,15 @@ index ...43f38b7 100644
+ /*
+ * If no more engines want it stopped, wake it up.
+ */
-+ if (task_is_traced(task) && !(flags & ENGINE_STOP))
++ if (task_is_traced(task) && !(flags & ENGINE_STOP)) {
++ /*
++ * It just resumes, so make sure single-step
++ * is not left set.
++ */
++ if (utrace->resume == UTRACE_RESUME)
++ user_disable_single_step(task);
+ utrace_wakeup(task, utrace);
++ }
+
+ /*
+ * In theory spin_lock() doesn't imply rcu_read_lock().
@@ -2865,14 +2872,7 @@ index ...43f38b7 100644
+ break;
+
+ case UTRACE_RESUME:
-+ /*
-+ * This and all other cases imply resuming if stopped.
-+ * There might not be another report before it just
-+ * resumes, so make sure single-step is not left set.
-+ */
+ clear_engine_wants_stop(engine);
-+ if (likely(reset))
-+ user_disable_single_step(target);
+ break;
+
+ case UTRACE_BLOCKSTEP:
@@ -3238,6 +3238,12 @@ index ...43f38b7 100644
+ engine, event)))
+ return NULL;
+
++ if (!event) {
++ /* We only got here to report QUIESCE */
++ report->spurious = false;
++ return NULL;
++ }
++
+ /*
+ * finish_callback() reset utrace->reporting after the
+ * quiesce callback. Now we set it again (as above)
@@ -3253,7 +3259,7 @@ index ...43f38b7 100644
+ if (want & ENGINE_STOP)
+ report->action = UTRACE_STOP;
+
-+ if (want & (event ?: UTRACE_EVENT(QUIESCE))) {
++ if (want & event) {
+ report->spurious = false;
+ return ops;
+ }
diff --git a/freed-ora/current/master/linux-next-macbook-air-input.patch b/freed-ora/current/master/linux-next-macbook-air-input.patch
deleted file mode 100644
index 16d4d6d39..000000000
--- a/freed-ora/current/master/linux-next-macbook-air-input.patch
+++ /dev/null
@@ -1,185 +0,0 @@
-Support for USB HID devices on the new Macbook Airs. From -next.
-
-diff --git a/drivers/hid/hid-apple.c b/drivers/hid/hid-apple.c
-index eaeca56..6c52203 100644
---- a/drivers/hid/hid-apple.c
-+++ b/drivers/hid/hid-apple.c
-@@ -59,6 +59,27 @@ struct apple_key_translation {
- u8 flags;
- };
-
-+static const struct apple_key_translation macbookair_fn_keys[] = {
-+ { KEY_BACKSPACE, KEY_DELETE },
-+ { KEY_ENTER, KEY_INSERT },
-+ { KEY_F1, KEY_BRIGHTNESSDOWN, APPLE_FLAG_FKEY },
-+ { KEY_F2, KEY_BRIGHTNESSUP, APPLE_FLAG_FKEY },
-+ { KEY_F3, KEY_SCALE, APPLE_FLAG_FKEY },
-+ { KEY_F4, KEY_DASHBOARD, APPLE_FLAG_FKEY },
-+ { KEY_F6, KEY_PREVIOUSSONG, APPLE_FLAG_FKEY },
-+ { KEY_F7, KEY_PLAYPAUSE, APPLE_FLAG_FKEY },
-+ { KEY_F8, KEY_NEXTSONG, APPLE_FLAG_FKEY },
-+ { KEY_F9, KEY_MUTE, APPLE_FLAG_FKEY },
-+ { KEY_F10, KEY_VOLUMEDOWN, APPLE_FLAG_FKEY },
-+ { KEY_F11, KEY_VOLUMEUP, APPLE_FLAG_FKEY },
-+ { KEY_F12, KEY_EJECTCD, APPLE_FLAG_FKEY },
-+ { KEY_UP, KEY_PAGEUP },
-+ { KEY_DOWN, KEY_PAGEDOWN },
-+ { KEY_LEFT, KEY_HOME },
-+ { KEY_RIGHT, KEY_END },
-+ { }
-+};
-+
- static const struct apple_key_translation apple_fn_keys[] = {
- { KEY_BACKSPACE, KEY_DELETE },
- { KEY_ENTER, KEY_INSERT },
-@@ -157,10 +178,15 @@ static int hidinput_apple_event(struct hid_device *hid, struct input_dev *input,
- if (fnmode) {
- int do_translate;
-
-- trans = apple_find_translation((hid->product < 0x21d ||
-- hid->product >= 0x300) ?
-- powerbook_fn_keys : apple_fn_keys,
-- usage->code);
-+ if(hid->product >= USB_DEVICE_ID_APPLE_WELLSPRING4_ANSI &&
-+ hid->product <= USB_DEVICE_ID_APPLE_WELLSPRING4A_JIS) {
-+ trans = apple_find_translation(macbookair_fn_keys, usage->code);
-+ } else if (hid->product < 0x21d || hid->product >= 0x300) {
-+ trans = apple_find_translation(powerbook_fn_keys, usage->code);
-+ } else {
-+ trans = apple_find_translation(apple_fn_keys, usage->code);
-+ }
-+
- if (trans) {
- if (test_bit(usage->code, asc->pressed_fn))
- do_translate = 1;
-@@ -436,6 +462,18 @@ static const struct hid_device_id apple_devices[] = {
- .driver_data = APPLE_HAS_FN | APPLE_ISO_KEYBOARD },
- { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING3_JIS),
- .driver_data = APPLE_HAS_FN | APPLE_RDESC_JIS },
-+ { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING4_ANSI),
-+ .driver_data = APPLE_HAS_FN },
-+ { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING4_ISO),
-+ .driver_data = APPLE_HAS_FN | APPLE_ISO_KEYBOARD },
-+ { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING4_JIS),
-+ .driver_data = APPLE_HAS_FN | APPLE_RDESC_JIS },
-+ { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING4A_ANSI),
-+ .driver_data = APPLE_HAS_FN },
-+ { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING4A_ISO),
-+ .driver_data = APPLE_HAS_FN | APPLE_ISO_KEYBOARD },
-+ { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING4A_JIS),
-+ .driver_data = APPLE_HAS_FN | APPLE_RDESC_JIS },
- { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_ALU_WIRELESS_2009_ANSI),
- .driver_data = APPLE_NUMLOCK_EMULATION | APPLE_HAS_FN },
- { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_ALU_WIRELESS_2009_ISO),
-diff --git a/drivers/hid/hid-core.c b/drivers/hid/hid-core.c
-index b3393e1..53ac909 100644
---- a/drivers/hid/hid-core.c
-+++ b/drivers/hid/hid-core.c
-@@ -1274,6 +1274,12 @@ static const struct hid_device_id hid_blacklist[] = {
- { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING3_ANSI) },
- { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING3_ISO) },
- { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING3_JIS) },
-+ { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING4_ANSI) },
-+ { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING4_ISO) },
-+ { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING4_JIS) },
-+ { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING4A_ANSI) },
-+ { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING4A_ISO) },
-+ { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING4A_JIS) },
- { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_ALU_WIRELESS_2009_ANSI) },
- { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_ALU_WIRELESS_2009_ISO) },
- { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_ALU_WIRELESS_2009_JIS) },
-@@ -1760,6 +1766,12 @@ static const struct hid_device_id hid_mouse_ignore_list[] = {
- { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING3_ANSI) },
- { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING3_ISO) },
- { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING3_JIS) },
-+ { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING4_ANSI) },
-+ { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING4_ISO) },
-+ { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING4_JIS) },
-+ { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING4A_ANSI) },
-+ { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING4A_ISO) },
-+ { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING4A_JIS) },
- { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_FOUNTAIN_TP_ONLY) },
- { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_GEYSER1_TP_ONLY) },
- { }
-diff --git a/drivers/hid/hid-ids.h b/drivers/hid/hid-ids.h
-index 68114db..104b9f9 100644
---- a/drivers/hid/hid-ids.h
-+++ b/drivers/hid/hid-ids.h
-@@ -97,6 +97,12 @@
- #define USB_DEVICE_ID_APPLE_WELLSPRING3_ANSI 0x0236
- #define USB_DEVICE_ID_APPLE_WELLSPRING3_ISO 0x0237
- #define USB_DEVICE_ID_APPLE_WELLSPRING3_JIS 0x0238
-+#define USB_DEVICE_ID_APPLE_WELLSPRING4_ANSI 0x023f
-+#define USB_DEVICE_ID_APPLE_WELLSPRING4_ISO 0x0240
-+#define USB_DEVICE_ID_APPLE_WELLSPRING4_JIS 0x0241
-+#define USB_DEVICE_ID_APPLE_WELLSPRING4A_ANSI 0x0242
-+#define USB_DEVICE_ID_APPLE_WELLSPRING4A_ISO 0x0243
-+#define USB_DEVICE_ID_APPLE_WELLSPRING4A_JIS 0x0244
- #define USB_DEVICE_ID_APPLE_ALU_WIRELESS_2009_ANSI 0x0239
- #define USB_DEVICE_ID_APPLE_ALU_WIRELESS_2009_ISO 0x023a
- #define USB_DEVICE_ID_APPLE_ALU_WIRELESS_2009_JIS 0x023b
-
-diff --git a/drivers/input/mouse/bcm5974.c b/drivers/input/mouse/bcm5974.c
-index b952317..ee82851 100644
---- a/drivers/input/mouse/bcm5974.c
-+++ b/drivers/input/mouse/bcm5974.c
-@@ -55,6 +55,14 @@
- #define USB_DEVICE_ID_APPLE_WELLSPRING3_ANSI 0x0236
- #define USB_DEVICE_ID_APPLE_WELLSPRING3_ISO 0x0237
- #define USB_DEVICE_ID_APPLE_WELLSPRING3_JIS 0x0238
-+/* MacbookAir3,2 (unibody), aka wellspring5 */
-+#define USB_DEVICE_ID_APPLE_WELLSPRING4_ANSI 0x023f
-+#define USB_DEVICE_ID_APPLE_WELLSPRING4_ISO 0x0240
-+#define USB_DEVICE_ID_APPLE_WELLSPRING4_JIS 0x0241
-+/* MacbookAir3,1 (unibody), aka wellspring4 */
-+#define USB_DEVICE_ID_APPLE_WELLSPRING4A_ANSI 0x0242
-+#define USB_DEVICE_ID_APPLE_WELLSPRING4A_ISO 0x0243
-+#define USB_DEVICE_ID_APPLE_WELLSPRING4A_JIS 0x0244
-
- #define BCM5974_DEVICE(prod) { \
- .match_flags = (USB_DEVICE_ID_MATCH_DEVICE | \
-@@ -80,6 +88,14 @@ static const struct usb_device_id bcm5974_table[] = {
- BCM5974_DEVICE(USB_DEVICE_ID_APPLE_WELLSPRING3_ANSI),
- BCM5974_DEVICE(USB_DEVICE_ID_APPLE_WELLSPRING3_ISO),
- BCM5974_DEVICE(USB_DEVICE_ID_APPLE_WELLSPRING3_JIS),
-+ /* MacbookAir3,2 */
-+ BCM5974_DEVICE(USB_DEVICE_ID_APPLE_WELLSPRING4_ANSI),
-+ BCM5974_DEVICE(USB_DEVICE_ID_APPLE_WELLSPRING4_ISO),
-+ BCM5974_DEVICE(USB_DEVICE_ID_APPLE_WELLSPRING4_JIS),
-+ /* MacbookAir3,1 */
-+ BCM5974_DEVICE(USB_DEVICE_ID_APPLE_WELLSPRING4A_ANSI),
-+ BCM5974_DEVICE(USB_DEVICE_ID_APPLE_WELLSPRING4A_ISO),
-+ BCM5974_DEVICE(USB_DEVICE_ID_APPLE_WELLSPRING4A_JIS),
- /* Terminating entry */
- {}
- };
-@@ -234,6 +250,30 @@ static const struct bcm5974_config bcm5974_config_table[] = {
- { DIM_X, DIM_X / SN_COORD, -4460, 5166 },
- { DIM_Y, DIM_Y / SN_COORD, -75, 6700 }
- },
-+ {
-+ USB_DEVICE_ID_APPLE_WELLSPRING4_ANSI,
-+ USB_DEVICE_ID_APPLE_WELLSPRING4_ISO,
-+ USB_DEVICE_ID_APPLE_WELLSPRING4_JIS,
-+ HAS_INTEGRATED_BUTTON,
-+ 0x84, sizeof(struct bt_data),
-+ 0x81, TYPE2, FINGER_TYPE2, FINGER_TYPE2 + SIZEOF_ALL_FINGERS,
-+ { DIM_PRESSURE, DIM_PRESSURE / SN_PRESSURE, 0, 300 },
-+ { DIM_WIDTH, DIM_WIDTH / SN_WIDTH, 0, 2048 },
-+ { DIM_X, DIM_X / SN_COORD, -4620, 5140 },
-+ { DIM_Y, DIM_Y / SN_COORD, -150, 6600 }
-+ },
-+ {
-+ USB_DEVICE_ID_APPLE_WELLSPRING4A_ANSI,
-+ USB_DEVICE_ID_APPLE_WELLSPRING4A_ISO,
-+ USB_DEVICE_ID_APPLE_WELLSPRING4A_JIS,
-+ HAS_INTEGRATED_BUTTON,
-+ 0x84, sizeof(struct bt_data),
-+ 0x81, TYPE2, FINGER_TYPE2, FINGER_TYPE2 + SIZEOF_ALL_FINGERS,
-+ { DIM_PRESSURE, DIM_PRESSURE / SN_PRESSURE, 0, 300 },
-+ { DIM_WIDTH, DIM_WIDTH / SN_WIDTH, 0, 2048 },
-+ { DIM_X, DIM_X / SN_COORD, -4616, 5112 },
-+ { DIM_Y, DIM_Y / SN_COORD, -142, 5234 }
-+ },
- {}
- };
diff --git a/freed-ora/current/master/mm-page-allocator-adjust-the-per-cpu-counter-threshold-when-memory-is-low.patch b/freed-ora/current/master/mm-page-allocator-adjust-the-per-cpu-counter-threshold-when-memory-is-low.patch
deleted file mode 100644
index 561c5897e..000000000
--- a/freed-ora/current/master/mm-page-allocator-adjust-the-per-cpu-counter-threshold-when-memory-is-low.patch
+++ /dev/null
@@ -1,389 +0,0 @@
-From df43fae25437d7bc7dfff72599c1e825038b67cf Mon Sep 17 00:00:00 2001
-From: Mel Gorman <mel@csn.ul.ie>
-Date: Wed, 24 Nov 2010 22:18:23 -0500
-Subject: [PATCH 1/2] mm: page allocator: Adjust the per-cpu counter threshold when memory is low
-
-Commit aa45484 ("calculate a better estimate of NR_FREE_PAGES when memory
-is low") noted that watermarks were based on the vmstat NR_FREE_PAGES. To
-avoid synchronization overhead, these counters are maintained on a per-cpu
-basis and drained both periodically and when a threshold is above a
-threshold. On large CPU systems, the difference between the estimate and
-real value of NR_FREE_PAGES can be very high. The system can get into a
-case where pages are allocated far below the min watermark potentially
-causing livelock issues. The commit solved the problem by taking a better
-reading of NR_FREE_PAGES when memory was low.
-
-Unfortately, as reported by Shaohua Li this accurate reading can consume a
-large amount of CPU time on systems with many sockets due to cache line
-bouncing. This patch takes a different approach. For large machines
-where counter drift might be unsafe and while kswapd is awake, the per-cpu
-thresholds for the target pgdat are reduced to limit the level of drift to
-what should be a safe level. This incurs a performance penalty in heavy
-memory pressure by a factor that depends on the workload and the machine
-but the machine should function correctly without accidentally exhausting
-all memory on a node. There is an additional cost when kswapd wakes and
-sleeps but the event is not expected to be frequent - in Shaohua's test
-case, there was one recorded sleep and wake event at least.
-
-To ensure that kswapd wakes up, a safe version of zone_watermark_ok() is
-introduced that takes a more accurate reading of NR_FREE_PAGES when called
-from wakeup_kswapd, when deciding whether it is really safe to go back to
-sleep in sleeping_prematurely() and when deciding if a zone is really
-balanced or not in balance_pgdat(). We are still using an expensive
-function but limiting how often it is called.
-
-When the test case is reproduced, the time spent in the watermark
-functions is reduced. The following report is on the percentage of time
-spent cumulatively spent in the functions zone_nr_free_pages(),
-zone_watermark_ok(), __zone_watermark_ok(), zone_watermark_ok_safe(),
-zone_page_state_snapshot(), zone_page_state().
-
-vanilla 11.6615%
-disable-threshold 0.2584%
-
-Reported-by: Shaohua Li <shaohua.li@intel.com>
-Signed-off-by: Mel Gorman <mel@csn.ul.ie>
-Reviewed-by: Christoph Lameter <cl@linux.com>
-Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
-[[http://userweb.kernel.org/~akpm/mmotm/broken-out/mm-page-allocator-adjust-the-per-cpu-counter-threshold-when-memory-is-low.patch]]
----
- include/linux/mmzone.h | 10 ++-----
- include/linux/vmstat.h | 5 +++
- mm/mmzone.c | 21 ---------------
- mm/page_alloc.c | 35 +++++++++++++++++++-----
- mm/vmscan.c | 23 +++++++++-------
- mm/vmstat.c | 68 +++++++++++++++++++++++++++++++++++++++++++++++-
- 6 files changed, 115 insertions(+), 47 deletions(-)
-
-diff --git a/include/linux/mmzone.h b/include/linux/mmzone.h
-index 3984c4e..8d789d7 100644
---- a/include/linux/mmzone.h
-+++ b/include/linux/mmzone.h
-@@ -448,12 +448,6 @@ static inline int zone_is_oom_locked(const struct zone *zone)
- return test_bit(ZONE_OOM_LOCKED, &zone->flags);
- }
-
--#ifdef CONFIG_SMP
--unsigned long zone_nr_free_pages(struct zone *zone);
--#else
--#define zone_nr_free_pages(zone) zone_page_state(zone, NR_FREE_PAGES)
--#endif /* CONFIG_SMP */
--
- /*
- * The "priority" of VM scanning is how much of the queues we will scan in one
- * go. A value of 12 for DEF_PRIORITY implies that we will scan 1/4096th of the
-@@ -651,7 +645,9 @@ typedef struct pglist_data {
- extern struct mutex zonelists_mutex;
- void build_all_zonelists(void *data);
- void wakeup_kswapd(struct zone *zone, int order);
--int zone_watermark_ok(struct zone *z, int order, unsigned long mark,
-+bool zone_watermark_ok(struct zone *z, int order, unsigned long mark,
-+ int classzone_idx, int alloc_flags);
-+bool zone_watermark_ok_safe(struct zone *z, int order, unsigned long mark,
- int classzone_idx, int alloc_flags);
- enum memmap_context {
- MEMMAP_EARLY,
-diff --git a/include/linux/vmstat.h b/include/linux/vmstat.h
-index eaaea37..e4cc21c 100644
---- a/include/linux/vmstat.h
-+++ b/include/linux/vmstat.h
-@@ -254,6 +254,8 @@ extern void dec_zone_state(struct zone *, enum zone_stat_item);
- extern void __dec_zone_state(struct zone *, enum zone_stat_item);
-
- void refresh_cpu_vm_stats(int);
-+void reduce_pgdat_percpu_threshold(pg_data_t *pgdat);
-+void restore_pgdat_percpu_threshold(pg_data_t *pgdat);
- #else /* CONFIG_SMP */
-
- /*
-@@ -298,6 +300,9 @@ static inline void __dec_zone_page_state(struct page *page,
- #define dec_zone_page_state __dec_zone_page_state
- #define mod_zone_page_state __mod_zone_page_state
-
-+static inline void reduce_pgdat_percpu_threshold(pg_data_t *pgdat) { }
-+static inline void restore_pgdat_percpu_threshold(pg_data_t *pgdat) { }
-+
- static inline void refresh_cpu_vm_stats(int cpu) { }
- #endif
-
-diff --git a/mm/mmzone.c b/mm/mmzone.c
-index e35bfb8..f5b7d17 100644
---- a/mm/mmzone.c
-+++ b/mm/mmzone.c
-@@ -87,24 +87,3 @@ int memmap_valid_within(unsigned long pfn,
- return 1;
- }
- #endif /* CONFIG_ARCH_HAS_HOLES_MEMORYMODEL */
--
--#ifdef CONFIG_SMP
--/* Called when a more accurate view of NR_FREE_PAGES is needed */
--unsigned long zone_nr_free_pages(struct zone *zone)
--{
-- unsigned long nr_free_pages = zone_page_state(zone, NR_FREE_PAGES);
--
-- /*
-- * While kswapd is awake, it is considered the zone is under some
-- * memory pressure. Under pressure, there is a risk that
-- * per-cpu-counter-drift will allow the min watermark to be breached
-- * potentially causing a live-lock. While kswapd is awake and
-- * free pages are low, get a better estimate for free pages
-- */
-- if (nr_free_pages < zone->percpu_drift_mark &&
-- !waitqueue_active(&zone->zone_pgdat->kswapd_wait))
-- return zone_page_state_snapshot(zone, NR_FREE_PAGES);
--
-- return nr_free_pages;
--}
--#endif /* CONFIG_SMP */
-diff --git a/mm/page_alloc.c b/mm/page_alloc.c
-index f12ad18..0286150 100644
---- a/mm/page_alloc.c
-+++ b/mm/page_alloc.c
-@@ -1454,24 +1454,24 @@ static inline int should_fail_alloc_page(gfp_t gfp_mask, unsigned int order)
- #endif /* CONFIG_FAIL_PAGE_ALLOC */
-
- /*
-- * Return 1 if free pages are above 'mark'. This takes into account the order
-+ * Return true if free pages are above 'mark'. This takes into account the order
- * of the allocation.
- */
--int zone_watermark_ok(struct zone *z, int order, unsigned long mark,
-- int classzone_idx, int alloc_flags)
-+static bool __zone_watermark_ok(struct zone *z, int order, unsigned long mark,
-+ int classzone_idx, int alloc_flags, long free_pages)
- {
- /* free_pages my go negative - that's OK */
- long min = mark;
-- long free_pages = zone_nr_free_pages(z) - (1 << order) + 1;
- int o;
-
-+ free_pages -= (1 << order) + 1;
- if (alloc_flags & ALLOC_HIGH)
- min -= min / 2;
- if (alloc_flags & ALLOC_HARDER)
- min -= min / 4;
-
- if (free_pages <= min + z->lowmem_reserve[classzone_idx])
-- return 0;
-+ return false;
- for (o = 0; o < order; o++) {
- /* At the next order, this order's pages become unavailable */
- free_pages -= z->free_area[o].nr_free << o;
-@@ -1480,9 +1480,28 @@ int zone_watermark_ok(struct zone *z, int order, unsigned long mark,
- min >>= 1;
-
- if (free_pages <= min)
-- return 0;
-+ return false;
- }
-- return 1;
-+ return true;
-+}
-+
-+bool zone_watermark_ok(struct zone *z, int order, unsigned long mark,
-+ int classzone_idx, int alloc_flags)
-+{
-+ return __zone_watermark_ok(z, order, mark, classzone_idx, alloc_flags,
-+ zone_page_state(z, NR_FREE_PAGES));
-+}
-+
-+bool zone_watermark_ok_safe(struct zone *z, int order, unsigned long mark,
-+ int classzone_idx, int alloc_flags)
-+{
-+ long free_pages = zone_page_state(z, NR_FREE_PAGES);
-+
-+ if (z->percpu_drift_mark && free_pages < z->percpu_drift_mark)
-+ free_pages = zone_page_state_snapshot(z, NR_FREE_PAGES);
-+
-+ return __zone_watermark_ok(z, order, mark, classzone_idx, alloc_flags,
-+ free_pages);
- }
-
- #ifdef CONFIG_NUMA
-@@ -2436,7 +2455,7 @@ void show_free_areas(void)
- " all_unreclaimable? %s"
- "\n",
- zone->name,
-- K(zone_nr_free_pages(zone)),
-+ K(zone_page_state(zone, NR_FREE_PAGES)),
- K(min_wmark_pages(zone)),
- K(low_wmark_pages(zone)),
- K(high_wmark_pages(zone)),
-diff --git a/mm/vmscan.c b/mm/vmscan.c
-index c5dfabf..3e71cb1 100644
---- a/mm/vmscan.c
-+++ b/mm/vmscan.c
-@@ -2082,7 +2082,7 @@ static int sleeping_prematurely(pg_data_t *pgdat, int order, long remaining)
- if (zone->all_unreclaimable)
- continue;
-
-- if (!zone_watermark_ok(zone, order, high_wmark_pages(zone),
-+ if (!zone_watermark_ok_safe(zone, order, high_wmark_pages(zone),
- 0, 0))
- return 1;
- }
-@@ -2169,7 +2169,7 @@ loop_again:
- shrink_active_list(SWAP_CLUSTER_MAX, zone,
- &sc, priority, 0);
-
-- if (!zone_watermark_ok(zone, order,
-+ if (!zone_watermark_ok_safe(zone, order,
- high_wmark_pages(zone), 0, 0)) {
- end_zone = i;
- break;
-@@ -2215,7 +2215,7 @@ loop_again:
- * We put equal pressure on every zone, unless one
- * zone has way too many pages free already.
- */
-- if (!zone_watermark_ok(zone, order,
-+ if (!zone_watermark_ok_safe(zone, order,
- 8*high_wmark_pages(zone), end_zone, 0))
- shrink_zone(priority, zone, &sc);
- reclaim_state->reclaimed_slab = 0;
-@@ -2236,7 +2236,7 @@ loop_again:
- total_scanned > sc.nr_reclaimed + sc.nr_reclaimed / 2)
- sc.may_writepage = 1;
-
-- if (!zone_watermark_ok(zone, order,
-+ if (!zone_watermark_ok_safe(zone, order,
- high_wmark_pages(zone), end_zone, 0)) {
- all_zones_ok = 0;
- /*
-@@ -2244,7 +2244,7 @@ loop_again:
- * means that we have a GFP_ATOMIC allocation
- * failure risk. Hurry up!
- */
-- if (!zone_watermark_ok(zone, order,
-+ if (!zone_watermark_ok_safe(zone, order,
- min_wmark_pages(zone), end_zone, 0))
- has_under_min_watermark_zone = 1;
- }
-@@ -2378,7 +2378,9 @@ static int kswapd(void *p)
- */
- if (!sleeping_prematurely(pgdat, order, remaining)) {
- trace_mm_vmscan_kswapd_sleep(pgdat->node_id);
-+ restore_pgdat_percpu_threshold(pgdat);
- schedule();
-+ reduce_pgdat_percpu_threshold(pgdat);
- } else {
- if (remaining)
- count_vm_event(KSWAPD_LOW_WMARK_HIT_QUICKLY);
-@@ -2417,16 +2419,17 @@ void wakeup_kswapd(struct zone *zone, int order)
- if (!populated_zone(zone))
- return;
-
-- pgdat = zone->zone_pgdat;
-- if (zone_watermark_ok(zone, order, low_wmark_pages(zone), 0, 0))
-+ if (!cpuset_zone_allowed_hardwall(zone, GFP_KERNEL))
- return;
-+ pgdat = zone->zone_pgdat;
- if (pgdat->kswapd_max_order < order)
- pgdat->kswapd_max_order = order;
-- trace_mm_vmscan_wakeup_kswapd(pgdat->node_id, zone_idx(zone), order);
-- if (!cpuset_zone_allowed_hardwall(zone, GFP_KERNEL))
-- return;
- if (!waitqueue_active(&pgdat->kswapd_wait))
- return;
-+ if (zone_watermark_ok_safe(zone, order, low_wmark_pages(zone), 0, 0))
-+ return;
-+
-+ trace_mm_vmscan_wakeup_kswapd(pgdat->node_id, zone_idx(zone), order);
- wake_up_interruptible(&pgdat->kswapd_wait);
- }
-
-diff --git a/mm/vmstat.c b/mm/vmstat.c
-index 355a9e6..4d7faeb 100644
---- a/mm/vmstat.c
-+++ b/mm/vmstat.c
-@@ -81,6 +81,30 @@ EXPORT_SYMBOL(vm_stat);
-
- #ifdef CONFIG_SMP
-
-+static int calculate_pressure_threshold(struct zone *zone)
-+{
-+ int threshold;
-+ int watermark_distance;
-+
-+ /*
-+ * As vmstats are not up to date, there is drift between the estimated
-+ * and real values. For high thresholds and a high number of CPUs, it
-+ * is possible for the min watermark to be breached while the estimated
-+ * value looks fine. The pressure threshold is a reduced value such
-+ * that even the maximum amount of drift will not accidentally breach
-+ * the min watermark
-+ */
-+ watermark_distance = low_wmark_pages(zone) - min_wmark_pages(zone);
-+ threshold = max(1, (int)(watermark_distance / num_online_cpus()));
-+
-+ /*
-+ * Maximum threshold is 125
-+ */
-+ threshold = min(125, threshold);
-+
-+ return threshold;
-+}
-+
- static int calculate_threshold(struct zone *zone)
- {
- int threshold;
-@@ -159,6 +183,48 @@ static void refresh_zone_stat_thresholds(void)
- }
- }
-
-+void reduce_pgdat_percpu_threshold(pg_data_t *pgdat)
-+{
-+ struct zone *zone;
-+ int cpu;
-+ int threshold;
-+ int i;
-+
-+ get_online_cpus();
-+ for (i = 0; i < pgdat->nr_zones; i++) {
-+ zone = &pgdat->node_zones[i];
-+ if (!zone->percpu_drift_mark)
-+ continue;
-+
-+ threshold = calculate_pressure_threshold(zone);
-+ for_each_online_cpu(cpu)
-+ per_cpu_ptr(zone->pageset, cpu)->stat_threshold
-+ = threshold;
-+ }
-+ put_online_cpus();
-+}
-+
-+void restore_pgdat_percpu_threshold(pg_data_t *pgdat)
-+{
-+ struct zone *zone;
-+ int cpu;
-+ int threshold;
-+ int i;
-+
-+ get_online_cpus();
-+ for (i = 0; i < pgdat->nr_zones; i++) {
-+ zone = &pgdat->node_zones[i];
-+ if (!zone->percpu_drift_mark)
-+ continue;
-+
-+ threshold = calculate_threshold(zone);
-+ for_each_online_cpu(cpu)
-+ per_cpu_ptr(zone->pageset, cpu)->stat_threshold
-+ = threshold;
-+ }
-+ put_online_cpus();
-+}
-+
- /*
- * For use when we know that interrupts are disabled.
- */
-@@ -826,7 +892,7 @@ static void zoneinfo_show_print(struct seq_file *m, pg_data_t *pgdat,
- "\n scanned %lu"
- "\n spanned %lu"
- "\n present %lu",
-- zone_nr_free_pages(zone),
-+ zone_page_state(zone, NR_FREE_PAGES),
- min_wmark_pages(zone),
- low_wmark_pages(zone),
- high_wmark_pages(zone),
---
-1.7.3.2
-
diff --git a/freed-ora/current/master/mm-vmstat-use-a-single-setter-function-and-callback-for-adjusting-percpu-thresholds.patch b/freed-ora/current/master/mm-vmstat-use-a-single-setter-function-and-callback-for-adjusting-percpu-thresholds.patch
deleted file mode 100644
index 058b1399a..000000000
--- a/freed-ora/current/master/mm-vmstat-use-a-single-setter-function-and-callback-for-adjusting-percpu-thresholds.patch
+++ /dev/null
@@ -1,167 +0,0 @@
-From 82e3d4969144377d13da97d511e849e8cf3e6dcc Mon Sep 17 00:00:00 2001
-From: Mel Gorman <mel@csn.ul.ie>
-Date: Wed, 24 Nov 2010 22:24:24 -0500
-Subject: [PATCH 2/2] mm: vmstat: Use a single setter function and callback for adjusting percpu thresholds
-
-reduce_pgdat_percpu_threshold() and restore_pgdat_percpu_threshold() exist
-to adjust the per-cpu vmstat thresholds while kswapd is awake to avoid
-errors due to counter drift. The functions duplicate some code so this
-patch replaces them with a single set_pgdat_percpu_threshold() that takes
-a callback function to calculate the desired threshold as a parameter.
-
-Signed-off-by: Mel Gorman <mel@csn.ul.ie>
-Reviewed-by: Christoph Lameter <cl@linux.com>
-Reviewed-by: KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com>
-Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
-[the various mmotm patches updating this were rolled up. --kyle]
-[[http://userweb.kernel.org/~akpm/mmotm/broken-out/mm-vmstat-use-a-single-setter-function-and-callback-for-adjusting-percpu-thresholds-fix-set_pgdat_percpu_threshold-dont-use-for_each_online_cpu.patch]]
----
- include/linux/vmstat.h | 10 ++++++----
- mm/vmscan.c | 19 +++++++++++++++++--
- mm/vmstat.c | 36 +++++++-----------------------------
- 3 files changed, 30 insertions(+), 35 deletions(-)
-
-diff --git a/include/linux/vmstat.h b/include/linux/vmstat.h
-index e4cc21c..833e676 100644
---- a/include/linux/vmstat.h
-+++ b/include/linux/vmstat.h
-@@ -254,8 +254,11 @@ extern void dec_zone_state(struct zone *, enum zone_stat_item);
- extern void __dec_zone_state(struct zone *, enum zone_stat_item);
-
- void refresh_cpu_vm_stats(int);
--void reduce_pgdat_percpu_threshold(pg_data_t *pgdat);
--void restore_pgdat_percpu_threshold(pg_data_t *pgdat);
-+
-+int calculate_pressure_threshold(struct zone *zone);
-+int calculate_normal_threshold(struct zone *zone);
-+void set_pgdat_percpu_threshold(pg_data_t *pgdat,
-+ int (*calculate_pressure)(struct zone *));
- #else /* CONFIG_SMP */
-
- /*
-@@ -300,8 +303,7 @@ static inline void __dec_zone_page_state(struct page *page,
- #define dec_zone_page_state __dec_zone_page_state
- #define mod_zone_page_state __mod_zone_page_state
-
--static inline void reduce_pgdat_percpu_threshold(pg_data_t *pgdat) { }
--static inline void restore_pgdat_percpu_threshold(pg_data_t *pgdat) { }
-+#define set_pgdat_percpu_threshold(pgdat, callback) { }
-
- static inline void refresh_cpu_vm_stats(int cpu) { }
- #endif
-diff --git a/mm/vmscan.c b/mm/vmscan.c
-index 3e71cb1..ba39948 100644
---- a/mm/vmscan.c
-+++ b/mm/vmscan.c
-@@ -2378,9 +2378,24 @@ static int kswapd(void *p)
- */
- if (!sleeping_prematurely(pgdat, order, remaining)) {
- trace_mm_vmscan_kswapd_sleep(pgdat->node_id);
-- restore_pgdat_percpu_threshold(pgdat);
-+
-+ /*
-+ * vmstat counters are not perfectly
-+ * accurate and the estimated value
-+ * for counters such as NR_FREE_PAGES
-+ * can deviate from the true value by
-+ * nr_online_cpus * threshold. To
-+ * avoid the zone watermarks being
-+ * breached while under pressure, we
-+ * reduce the per-cpu vmstat threshold
-+ * while kswapd is awake and restore
-+ * them before going back to sleep.
-+ */
-+ set_pgdat_percpu_threshold(pgdat,
-+ calculate_normal_threshold);
- schedule();
-- reduce_pgdat_percpu_threshold(pgdat);
-+ set_pgdat_percpu_threshold(pgdat,
-+ calculate_pressure_threshold);
- } else {
- if (remaining)
- count_vm_event(KSWAPD_LOW_WMARK_HIT_QUICKLY);
-diff --git a/mm/vmstat.c b/mm/vmstat.c
-index 4d7faeb..511c2c0 100644
---- a/mm/vmstat.c
-+++ b/mm/vmstat.c
-@@ -81,7 +81,7 @@ EXPORT_SYMBOL(vm_stat);
-
- #ifdef CONFIG_SMP
-
--static int calculate_pressure_threshold(struct zone *zone)
-+int calculate_pressure_threshold(struct zone *zone)
- {
- int threshold;
- int watermark_distance;
-@@ -105,7 +105,7 @@ static int calculate_pressure_threshold(struct zone *zone)
- return threshold;
- }
-
--static int calculate_threshold(struct zone *zone)
-+int calculate_normal_threshold(struct zone *zone)
- {
- int threshold;
- int mem; /* memory in 128 MB units */
-@@ -164,7 +164,7 @@ static void refresh_zone_stat_thresholds(void)
- for_each_populated_zone(zone) {
- unsigned long max_drift, tolerate_drift;
-
-- threshold = calculate_threshold(zone);
-+ threshold = calculate_normal_threshold(zone);
-
- for_each_online_cpu(cpu)
- per_cpu_ptr(zone->pageset, cpu)->stat_threshold
-@@ -183,46 +183,24 @@ static void refresh_zone_stat_thresholds(void)
- }
- }
-
--void reduce_pgdat_percpu_threshold(pg_data_t *pgdat)
-+void set_pgdat_percpu_threshold(pg_data_t *pgdat,
-+ int (*calculate_pressure)(struct zone *))
- {
- struct zone *zone;
- int cpu;
- int threshold;
- int i;
-
-- get_online_cpus();
-- for (i = 0; i < pgdat->nr_zones; i++) {
-- zone = &pgdat->node_zones[i];
-- if (!zone->percpu_drift_mark)
-- continue;
--
-- threshold = calculate_pressure_threshold(zone);
-- for_each_online_cpu(cpu)
-- per_cpu_ptr(zone->pageset, cpu)->stat_threshold
-- = threshold;
-- }
-- put_online_cpus();
--}
--
--void restore_pgdat_percpu_threshold(pg_data_t *pgdat)
--{
-- struct zone *zone;
-- int cpu;
-- int threshold;
-- int i;
--
-- get_online_cpus();
- for (i = 0; i < pgdat->nr_zones; i++) {
- zone = &pgdat->node_zones[i];
- if (!zone->percpu_drift_mark)
- continue;
-
-- threshold = calculate_threshold(zone);
-- for_each_online_cpu(cpu)
-+ threshold = (*calculate_pressure)(zone);
-+ for_each_possible_cpu(cpu)
- per_cpu_ptr(zone->pageset, cpu)->stat_threshold
- = threshold;
- }
-- put_online_cpus();
- }
-
- /*
---
-1.7.3.2
-
diff --git a/freed-ora/current/master/net-AF_PACKET-vmalloc.patch b/freed-ora/current/master/net-AF_PACKET-vmalloc.patch
deleted file mode 100644
index 192b5ba4a..000000000
--- a/freed-ora/current/master/net-AF_PACKET-vmalloc.patch
+++ /dev/null
@@ -1,254 +0,0 @@
-Author: Neil Horman <nhorman@tuxdriver.com>
-Date: Fri Dec 17 13:35:36 2010 -0500
-
-Enhance AF_PACKET to support using non-contiguous memory when allocating ring
-buffer space. This is a combined backport of the following commits from
-net-next-2.6:
-0e3125c755445664f00ad036e4fc2cd32fd52877
-bbce5a59e4e0e6e1dbc85492caaf310ff6611309
-0af55bb58f8fa7865004ac48d16affe125ac1b7f
-920b8d913bd3d963d5c88bca160a272b71e0c95a
-
-diff -up linux-2.6.34.x86_64/net/packet/af_packet.c.orig linux-2.6.34.x86_64/net/packet/af_packet.c
---- linux-2.6.34.x86_64/net/packet/af_packet.c.orig 2010-12-17 12:16:58.000000000 -0500
-+++ linux-2.6.34.x86_64/net/packet/af_packet.c 2010-12-17 12:30:14.000000000 -0500
-@@ -61,6 +61,7 @@
- #include <linux/kernel.h>
- #include <linux/kmod.h>
- #include <linux/slab.h>
-+#include <linux/vmalloc.h>
- #include <net/net_namespace.h>
- #include <net/ip.h>
- #include <net/protocol.h>
-@@ -161,8 +162,14 @@ struct packet_mreq_max {
- static int packet_set_ring(struct sock *sk, struct tpacket_req *req,
- int closing, int tx_ring);
-
-+#define PGV_FROM_VMALLOC 1
-+struct pgv {
-+ char *buffer;
-+ unsigned char flags;
-+};
-+
- struct packet_ring_buffer {
-- char **pg_vec;
-+ struct pgv *pg_vec;
- unsigned int head;
- unsigned int frames_per_block;
- unsigned int frame_size;
-@@ -214,6 +221,13 @@ struct packet_skb_cb {
-
- #define PACKET_SKB_CB(__skb) ((struct packet_skb_cb *)((__skb)->cb))
-
-+static inline struct page *pgv_to_page(void *addr)
-+{
-+ if (is_vmalloc_addr(addr))
-+ return vmalloc_to_page(addr);
-+ return virt_to_page(addr);
-+}
-+
- static void __packet_set_status(struct packet_sock *po, void *frame, int status)
- {
- union {
-@@ -226,11 +240,11 @@ static void __packet_set_status(struct p
- switch (po->tp_version) {
- case TPACKET_V1:
- h.h1->tp_status = status;
-- flush_dcache_page(virt_to_page(&h.h1->tp_status));
-+ flush_dcache_page(pgv_to_page(&h.h1->tp_status));
- break;
- case TPACKET_V2:
- h.h2->tp_status = status;
-- flush_dcache_page(virt_to_page(&h.h2->tp_status));
-+ flush_dcache_page(pgv_to_page(&h.h2->tp_status));
- break;
- default:
- pr_err("TPACKET version not supported\n");
-@@ -253,10 +267,10 @@ static int __packet_get_status(struct pa
- h.raw = frame;
- switch (po->tp_version) {
- case TPACKET_V1:
-- flush_dcache_page(virt_to_page(&h.h1->tp_status));
-+ flush_dcache_page(pgv_to_page(&h.h1->tp_status));
- return h.h1->tp_status;
- case TPACKET_V2:
-- flush_dcache_page(virt_to_page(&h.h2->tp_status));
-+ flush_dcache_page(pgv_to_page(&h.h2->tp_status));
- return h.h2->tp_status;
- default:
- pr_err("TPACKET version not supported\n");
-@@ -280,7 +294,8 @@ static void *packet_lookup_frame(struct
- pg_vec_pos = position / rb->frames_per_block;
- frame_offset = position % rb->frames_per_block;
-
-- h.raw = rb->pg_vec[pg_vec_pos] + (frame_offset * rb->frame_size);
-+ h.raw = rb->pg_vec[pg_vec_pos].buffer +
-+ (frame_offset * rb->frame_size);
-
- if (status != __packet_get_status(po, h.raw))
- return NULL;
-@@ -771,15 +786,11 @@ static int tpacket_rcv(struct sk_buff *s
- __packet_set_status(po, h.raw, status);
- smp_mb();
- {
-- struct page *p_start, *p_end;
-- u8 *h_end = h.raw + macoff + snaplen - 1;
-+ u8 *start, *end;
-
-- p_start = virt_to_page(h.raw);
-- p_end = virt_to_page(h_end);
-- while (p_start <= p_end) {
-- flush_dcache_page(p_start);
-- p_start++;
-- }
-+ end = (u8 *)PAGE_ALIGN((unsigned long)h.raw + macoff + snaplen);
-+ for (start = h.raw; start < end; start += PAGE_SIZE)
-+ flush_dcache_page(pgv_to_page(start));
- }
-
- sk->sk_data_ready(sk, 0);
-@@ -886,7 +897,6 @@ static int tpacket_fill_skb(struct packe
- }
-
- err = -EFAULT;
-- page = virt_to_page(data);
- offset = offset_in_page(data);
- len_max = PAGE_SIZE - offset;
- len = ((to_write > len_max) ? len_max : to_write);
-@@ -905,11 +915,11 @@ static int tpacket_fill_skb(struct packe
- return -EFAULT;
- }
-
-+ page = pgv_to_page(data);
-+ data += len;
- flush_dcache_page(page);
- get_page(page);
-- skb_fill_page_desc(skb,
-- nr_frags,
-- page++, offset, len);
-+ skb_fill_page_desc(skb, nr_frags, page, offset, len);
- to_write -= len;
- offset = 0;
- len_max = PAGE_SIZE;
-@@ -2230,37 +2240,76 @@ static const struct vm_operations_struct
- .close = packet_mm_close,
- };
-
--static void free_pg_vec(char **pg_vec, unsigned int order, unsigned int len)
-+static void free_pg_vec(struct pgv *pg_vec, unsigned int order,
-+ unsigned int len)
- {
- int i;
-
- for (i = 0; i < len; i++) {
-- if (likely(pg_vec[i]))
-- free_pages((unsigned long) pg_vec[i], order);
-+ if (likely(pg_vec[i].buffer)) {
-+ if (pg_vec[i].flags & PGV_FROM_VMALLOC)
-+ vfree(pg_vec[i].buffer);
-+ else
-+ free_pages((unsigned long)pg_vec[i].buffer,
-+ order);
-+ pg_vec[i].buffer = NULL;
-+ }
- }
- kfree(pg_vec);
- }
-
--static inline char *alloc_one_pg_vec_page(unsigned long order)
-+static inline char *alloc_one_pg_vec_page(unsigned long order,
-+ unsigned char *flags)
- {
-- gfp_t gfp_flags = GFP_KERNEL | __GFP_COMP | __GFP_ZERO | __GFP_NOWARN;
-+ char *buffer = NULL;
-+ gfp_t gfp_flags = GFP_KERNEL | __GFP_COMP |
-+ __GFP_ZERO | __GFP_NOWARN | __GFP_NORETRY;
-+
-+ buffer = (char *) __get_free_pages(gfp_flags, order);
-
-- return (char *) __get_free_pages(gfp_flags, order);
-+ if (buffer)
-+ return buffer;
-+
-+ /*
-+ * __get_free_pages failed, fall back to vmalloc
-+ */
-+ *flags |= PGV_FROM_VMALLOC;
-+ buffer = vmalloc((1 << order) * PAGE_SIZE);
-+
-+ if (buffer) {
-+ memset(buffer, 0, (1 << order) * PAGE_SIZE);
-+ return buffer;
-+ }
-+
-+ /*
-+ * vmalloc failed, lets dig into swap here
-+ */
-+ *flags = 0;
-+ gfp_flags &= ~__GFP_NORETRY;
-+ buffer = (char *)__get_free_pages(gfp_flags, order);
-+ if (buffer)
-+ return buffer;
-+
-+ /*
-+ * complete and utter failure
-+ */
-+ return NULL;
- }
-
--static char **alloc_pg_vec(struct tpacket_req *req, int order)
-+static struct pgv *alloc_pg_vec(struct tpacket_req *req, int order)
- {
- unsigned int block_nr = req->tp_block_nr;
-- char **pg_vec;
-+ struct pgv *pg_vec;
- int i;
-
-- pg_vec = kzalloc(block_nr * sizeof(char *), GFP_KERNEL);
-+ pg_vec = kcalloc(block_nr, sizeof(struct pgv), GFP_KERNEL);
- if (unlikely(!pg_vec))
- goto out;
-
- for (i = 0; i < block_nr; i++) {
-- pg_vec[i] = alloc_one_pg_vec_page(order);
-- if (unlikely(!pg_vec[i]))
-+ pg_vec[i].buffer = alloc_one_pg_vec_page(order,
-+ &pg_vec[i].flags);
-+ if (unlikely(!pg_vec[i].buffer))
- goto out_free_pgvec;
- }
-
-@@ -2276,7 +2325,7 @@ out_free_pgvec:
- static int packet_set_ring(struct sock *sk, struct tpacket_req *req,
- int closing, int tx_ring)
- {
-- char **pg_vec = NULL;
-+ struct pgv *pg_vec = NULL;
- struct packet_sock *po = pkt_sk(sk);
- int was_running, order = 0;
- struct packet_ring_buffer *rb;
-@@ -2438,15 +2487,22 @@ static int packet_mmap(struct file *file
- continue;
-
- for (i = 0; i < rb->pg_vec_len; i++) {
-- struct page *page = virt_to_page(rb->pg_vec[i]);
-+ struct page *page;
-+ void *kaddr = rb->pg_vec[i].buffer;
- int pg_num;
-
- for (pg_num = 0; pg_num < rb->pg_vec_pages;
-- pg_num++, page++) {
-+ pg_num++) {
-+ if (rb->pg_vec[i].flags & PGV_FROM_VMALLOC)
-+ page = vmalloc_to_page(kaddr);
-+ else
-+ page = virt_to_page(kaddr);
-+
- err = vm_insert_page(vma, start, page);
- if (unlikely(err))
- goto out;
- start += PAGE_SIZE;
-+ kaddr += PAGE_SIZE;
- }
- }
- }
diff --git a/freed-ora/current/master/patch-libre-2.6.38-rc6.bz2.sign b/freed-ora/current/master/patch-libre-2.6.38-rc6.bz2.sign
new file mode 100644
index 000000000..da2d4db96
--- /dev/null
+++ b/freed-ora/current/master/patch-libre-2.6.38-rc6.bz2.sign
@@ -0,0 +1,7 @@
+-----BEGIN PGP SIGNATURE-----
+Version: GnuPG v2.0.16 (GNU/Linux)
+
+iEYEABECAAYFAk1mB5IACgkQvLfPh359R6dTnACglBfQJWCGbz2wReSQqOlH01ek
+XIMAn0KFMlJ9OiINUKmM70BHgoBs6ilF
+=8ZlE
+-----END PGP SIGNATURE-----
diff --git a/freed-ora/current/master/patch-libre-2.6.38-rc6.xdelta b/freed-ora/current/master/patch-libre-2.6.38-rc6.xdelta
new file mode 100644
index 000000000..0c00e77e6
--- /dev/null
+++ b/freed-ora/current/master/patch-libre-2.6.38-rc6.xdelta
Binary files differ
diff --git a/freed-ora/current/master/patch-libre-2.6.38-rc6.xdelta.sign b/freed-ora/current/master/patch-libre-2.6.38-rc6.xdelta.sign
new file mode 100644
index 000000000..3a5fd7504
--- /dev/null
+++ b/freed-ora/current/master/patch-libre-2.6.38-rc6.xdelta.sign
@@ -0,0 +1,7 @@
+-----BEGIN PGP SIGNATURE-----
+Version: GnuPG v2.0.16 (GNU/Linux)
+
+iEYEABECAAYFAk1mB48ACgkQvLfPh359R6eN5wCbBcGcUn9Naj031WvSlNKV5rtZ
+8aAAoJprIXaAyOY72SyBKmwIGZ2RpiTt
+=3+ej
+-----END PGP SIGNATURE-----
diff --git a/freed-ora/current/master/pci-disable-aspm-if-bios-asks-us-to.patch b/freed-ora/current/master/pci-disable-aspm-if-bios-asks-us-to.patch
deleted file mode 100644
index d67dda45b..000000000
--- a/freed-ora/current/master/pci-disable-aspm-if-bios-asks-us-to.patch
+++ /dev/null
@@ -1,144 +0,0 @@
-From linux-kernel-owner@vger.kernel.org Mon Dec 6 14:01:17 2010
-From: Matthew Garrett <mjg@redhat.com>
-To: linux-pci@vger.kernel.org
-Cc: linux-kernel@vger.kernel.org, jbarnes@virtuousgeek.org,
- Matthew Garrett <mjg@redhat.com>
-Subject: [PATCH v2] PCI: Disable ASPM if BIOS asks us to
-Date: Mon, 6 Dec 2010 14:00:56 -0500
-Message-Id: <1291662056-6055-1-git-send-email-mjg@redhat.com>
-
-We currently refuse to touch the ASPM registers if the BIOS tells us that
-ASPM isn't supported. This can cause problems if the BIOS has (for any
-reason) enabled ASPM on some devices anyway. Change the code such that we
-explicitly clear ASPM if the FADT indicates that ASPM isn't supported,
-and make sure we tidy up appropriately on device removal in order to deal
-with the hotplug case. If ASPM is disabled because the BIOS doesn't hand
-over control then we won't touch the registers.
-
-Signed-off-by: Matthew Garrett <mjg@redhat.com>
----
-
-Implement Rafael's suggestion to use two separate functions, and also
-ensure that we clear the clkpm bit as well as the ASPM bits.
-
- drivers/pci/pci-acpi.c | 1 +
- drivers/pci/pcie/aspm.c | 21 +++++++++++++++++----
- include/linux/pci-aspm.h | 5 ++++-
- 3 files changed, 22 insertions(+), 5 deletions(-)
-
-diff --git a/drivers/pci/pci-acpi.c b/drivers/pci/pci-acpi.c
-index 24e19c5..d7ea699 100644
---- a/drivers/pci/pci-acpi.c
-+++ b/drivers/pci/pci-acpi.c
-@@ -399,6 +399,7 @@ static int __init acpi_pci_init(void)
-
- if (acpi_gbl_FADT.boot_flags & ACPI_FADT_NO_ASPM) {
- printk(KERN_INFO"ACPI FADT declares the system doesn't support PCIe ASPM, so disable it\n");
-+ pcie_clear_aspm();
- pcie_no_aspm();
- }
-
-diff --git a/drivers/pci/pcie/aspm.c b/drivers/pci/pcie/aspm.c
-index 7122281..8112415 100644
---- a/drivers/pci/pcie/aspm.c
-+++ b/drivers/pci/pcie/aspm.c
-@@ -68,7 +68,7 @@ struct pcie_link_state {
- struct aspm_latency acceptable[8];
- };
-
--static int aspm_disabled, aspm_force;
-+static int aspm_disabled, aspm_force, aspm_clear_state;
- static DEFINE_MUTEX(aspm_lock);
- static LIST_HEAD(link_list);
-
-@@ -139,7 +139,7 @@ static void pcie_set_clkpm(struct pcie_link_state *link, int enable)
- {
- /* Don't enable Clock PM if the link is not Clock PM capable */
- if (!link->clkpm_capable && enable)
-- return;
-+ enable = 0;
- /* Need nothing if the specified equals to current state */
- if (link->clkpm_enabled == enable)
- return;
-@@ -498,6 +498,10 @@ static int pcie_aspm_sanity_check(struct pci_dev *pdev)
- struct pci_dev *child;
- int pos;
- u32 reg32;
-+
-+ if (aspm_clear_state)
-+ return -EINVAL;
-+
- /*
- * Some functions in a slot might not all be PCIe functions,
- * very strange. Disable ASPM for the whole slot
-@@ -563,12 +567,15 @@ void pcie_aspm_init_link_state(struct pci_dev *pdev)
- struct pcie_link_state *link;
- int blacklist = !!pcie_aspm_sanity_check(pdev);
-
-- if (aspm_disabled || !pci_is_pcie(pdev) || pdev->link_state)
-+ if (!pci_is_pcie(pdev) || pdev->link_state)
- return;
- if (pdev->pcie_type != PCI_EXP_TYPE_ROOT_PORT &&
- pdev->pcie_type != PCI_EXP_TYPE_DOWNSTREAM)
- return;
-
-+ if (aspm_disabled && !aspm_clear_state)
-+ return;
-+
- /* VIA has a strange chipset, root port is under a bridge */
- if (pdev->pcie_type == PCI_EXP_TYPE_ROOT_PORT &&
- pdev->bus->self)
-@@ -641,7 +648,7 @@ void pcie_aspm_exit_link_state(struct pci_dev *pdev)
- struct pci_dev *parent = pdev->bus->self;
- struct pcie_link_state *link, *root, *parent_link;
-
-- if (aspm_disabled || !pci_is_pcie(pdev) ||
-+ if ((aspm_disabled && !aspm_clear_state) || !pci_is_pcie(pdev) ||
- !parent || !parent->link_state)
- return;
- if ((parent->pcie_type != PCI_EXP_TYPE_ROOT_PORT) &&
-@@ -899,6 +906,12 @@ static int __init pcie_aspm_disable(char *str)
-
- __setup("pcie_aspm=", pcie_aspm_disable);
-
-+void pcie_clear_aspm(void)
-+{
-+ if (!aspm_force)
-+ aspm_clear_state = 1;
-+}
-+
- void pcie_no_aspm(void)
- {
- if (!aspm_force)
-diff --git a/include/linux/pci-aspm.h b/include/linux/pci-aspm.h
-index 91ba0b3..ce68105 100644
---- a/include/linux/pci-aspm.h
-+++ b/include/linux/pci-aspm.h
-@@ -27,6 +27,7 @@ extern void pcie_aspm_init_link_state(struct pci_dev *pdev);
- extern void pcie_aspm_exit_link_state(struct pci_dev *pdev);
- extern void pcie_aspm_pm_state_change(struct pci_dev *pdev);
- extern void pci_disable_link_state(struct pci_dev *pdev, int state);
-+extern void pcie_clear_aspm(void);
- extern void pcie_no_aspm(void);
- #else
- static inline void pcie_aspm_init_link_state(struct pci_dev *pdev)
-@@ -41,7 +42,9 @@ static inline void pcie_aspm_pm_state_change(struct pci_dev *pdev)
- static inline void pci_disable_link_state(struct pci_dev *pdev, int state)
- {
- }
--
-+static inline void pcie_clear_aspm(void)
-+{
-+}
- static inline void pcie_no_aspm(void)
- {
- }
---
-1.7.3.2
-
---
-To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
-the body of a message to majordomo@vger.kernel.org
-More majordomo info at http://vger.kernel.org/majordomo-info.html
-Please read the FAQ at http://www.tux.org/lkml/
-
diff --git a/freed-ora/current/master/perf-gcc460-build-fixes.patch b/freed-ora/current/master/perf-gcc460-build-fixes.patch
new file mode 100644
index 000000000..074ab6f20
--- /dev/null
+++ b/freed-ora/current/master/perf-gcc460-build-fixes.patch
@@ -0,0 +1,227 @@
+From linux-kernel-owner@vger.kernel.org Mon Jan 24 11:13:12 2011
+Date: Mon, 24 Jan 2011 11:13:04 -0500
+From: Kyle McMartin <kyle@mcmartin.ca>
+To: mingo@redhat.com
+Cc: linux-kernel@vger.kernel.org, acme@redhat.com
+Subject: [PATCH] perf: fix gcc 4.6.0 issues with tools/perf
+Message-ID: <20110124161304.GK27353@bombadil.infradead.org>
+
+Hi Ingo,
+
+GCC 4.6.0 in Fedora rawhide turned up some compile errors in tools/perf
+due to the -Werror=unused-but-set-variable flag.
+
+I've gone through and annotated some of the assignments that had side
+effects (ie: return value from a function) with the __used annotation,
+and in some cases, just removed unused code.
+
+In a few cases, we were assigning something useful, but not using it in
+later parts of the function.
+
+regards, Kyle
+
+kyle@dreadnought:~/src% gcc --version
+gcc (GCC) 4.6.0 20110122 (Red Hat 4.6.0-0.3)
+
+---
+
+ bench/sched-pipe.c | 2 +-
+ builtin-sched.c | 12 +++---------
+ builtin-top.c | 5 +----
+ util/header.c | 2 +-
+ util/hist.c | 3 ---
+ util/scripting-engines/trace-event-python.c | 3 +--
+ util/symbol.c | 4 ++--
+ util/trace-event-parse.c | 2 +-
+ util/ui/browsers/map.c | 2 +-
+ 9 files changed, 11 insertions(+), 24 deletions(-)
+
+diff --git a/tools/perf/bench/sched-pipe.c b/tools/perf/bench/sched-pipe.c
+index d9ab3ce..0c7454f 100644
+--- a/tools/perf/bench/sched-pipe.c
++++ b/tools/perf/bench/sched-pipe.c
+@@ -55,7 +55,7 @@ int bench_sched_pipe(int argc, const char **argv,
+ * discarding returned value of read(), write()
+ * causes error in building environment for perf
+ */
+- int ret, wait_stat;
++ int __used ret, wait_stat;
+ pid_t pid, retpid;
+
+ argc = parse_options(argc, argv, options,
+diff --git a/tools/perf/builtin-sched.c b/tools/perf/builtin-sched.c
+index 29e7ffd..f9e304f 100644
+--- a/tools/perf/builtin-sched.c
++++ b/tools/perf/builtin-sched.c
+@@ -369,11 +369,6 @@ static void
+ process_sched_event(struct task_desc *this_task __used, struct sched_atom *atom)
+ {
+ int ret = 0;
+- u64 now;
+- long long delta;
+-
+- now = get_nsecs();
+- delta = start_time + atom->timestamp - now;
+
+ switch (atom->type) {
+ case SCHED_EVENT_RUN:
+@@ -562,7 +557,7 @@ static void wait_for_tasks(void)
+
+ static void run_one_test(void)
+ {
+- u64 T0, T1, delta, avg_delta, fluct, std_dev;
++ u64 T0, T1, delta, avg_delta, fluct;
+
+ T0 = get_nsecs();
+ wait_for_tasks();
+@@ -578,7 +573,6 @@ static void run_one_test(void)
+ else
+ fluct = delta - avg_delta;
+ sum_fluct += fluct;
+- std_dev = sum_fluct / nr_runs / sqrt(nr_runs);
+ if (!run_avg)
+ run_avg = delta;
+ run_avg = (run_avg*9 + delta)/10;
+@@ -799,7 +793,7 @@ replay_switch_event(struct trace_switch_event *switch_event,
+ u64 timestamp,
+ struct thread *thread __used)
+ {
+- struct task_desc *prev, *next;
++ struct task_desc *prev, __used *next;
+ u64 timestamp0;
+ s64 delta;
+
+@@ -1404,7 +1398,7 @@ map_switch_event(struct trace_switch_event *switch_event,
+ u64 timestamp,
+ struct thread *thread __used)
+ {
+- struct thread *sched_out, *sched_in;
++ struct thread *sched_out __used, *sched_in;
+ int new_shortname;
+ u64 timestamp0;
+ s64 delta;
+diff --git a/tools/perf/builtin-top.c b/tools/perf/builtin-top.c
+index 05344c6..373cfc0 100644
+--- a/tools/perf/builtin-top.c
++++ b/tools/perf/builtin-top.c
+@@ -182,7 +182,6 @@ static int parse_source(struct sym_entry *syme)
+ FILE *file;
+ char command[PATH_MAX*2];
+ const char *path;
+- u64 len;
+
+ if (!syme)
+ return -1;
+@@ -211,8 +210,6 @@ static int parse_source(struct sym_entry *syme)
+ }
+ path = map->dso->long_name;
+
+- len = sym->end - sym->start;
+-
+ sprintf(command,
+ "objdump --start-address=%#0*" PRIx64 " --stop-address=%#0*" PRIx64 " -dS %s",
+ BITS_PER_LONG / 4, map__rip_2objdump(map, sym->start),
+@@ -1295,7 +1292,7 @@ static int __cmd_top(void)
+ {
+ pthread_t thread;
+ struct perf_evsel *counter;
+- int i, ret;
++ int i, ret __used;
+ /*
+ * FIXME: perf_session__new should allow passing a O_MMAP, so that all this
+ * mmap reading, etc is encapsulated in it. Use O_WRONLY for now.
+diff --git a/tools/perf/util/header.c b/tools/perf/util/header.c
+index 989fa2d..c0e5019 100644
+--- a/tools/perf/util/header.c
++++ b/tools/perf/util/header.c
+@@ -1139,7 +1139,7 @@ int event__synthesize_tracing_data(int fd, struct list_head *pattrs,
+ {
+ event_t ev;
+ ssize_t size = 0, aligned_size = 0, padding;
+- int err = 0;
++ int err __used = 0;
+
+ memset(&ev, 0, sizeof(ev));
+
+diff --git a/tools/perf/util/hist.c b/tools/perf/util/hist.c
+index c749ba6..a01a33d 100644
+--- a/tools/perf/util/hist.c
++++ b/tools/perf/util/hist.c
+@@ -1091,7 +1091,6 @@ int hist_entry__annotate(struct hist_entry *self, struct list_head *head,
+ char command[PATH_MAX * 2];
+ FILE *file;
+ int err = 0;
+- u64 len;
+ char symfs_filename[PATH_MAX];
+
+ if (filename) {
+@@ -1136,8 +1135,6 @@ fallback:
+ filename, sym->name, map->unmap_ip(map, sym->start),
+ map->unmap_ip(map, sym->end));
+
+- len = sym->end - sym->start;
+-
+ pr_debug("annotating [%p] %30s : [%p] %30s\n",
+ dso, dso->long_name, sym, sym->name);
+
+diff --git a/tools/perf/util/scripting-engines/trace-event-python.c b/tools/perf/util/scripting-engines/trace-event-python.c
+index c6d9933..2040b85 100644
+--- a/tools/perf/util/scripting-engines/trace-event-python.c
++++ b/tools/perf/util/scripting-engines/trace-event-python.c
+@@ -248,8 +248,7 @@ static void python_process_event(int cpu, void *data,
+ context = PyCObject_FromVoidPtr(scripting_context, NULL);
+
+ PyTuple_SetItem(t, n++, PyString_FromString(handler_name));
+- PyTuple_SetItem(t, n++,
+- PyCObject_FromVoidPtr(scripting_context, NULL));
++ PyTuple_SetItem(t, n++, context);
+
+ if (handler) {
+ PyTuple_SetItem(t, n++, PyInt_FromLong(cpu));
+diff --git a/tools/perf/util/symbol.c b/tools/perf/util/symbol.c
+index 15ccfba..52e82cf 100644
+--- a/tools/perf/util/symbol.c
++++ b/tools/perf/util/symbol.c
+@@ -1517,8 +1517,8 @@ int dso__load(struct dso *self, struct map *map, symbol_filter_t filter)
+ symbol_conf.symfs, self->long_name);
+ break;
+ case DSO__ORIG_GUEST_KMODULE:
+- if (map->groups && map->groups->machine)
+- root_dir = map->groups->machine->root_dir;
++ if (map->groups && machine)
++ root_dir = machine->root_dir;
+ else
+ root_dir = "";
+ snprintf(name, size, "%s%s%s", symbol_conf.symfs,
+diff --git a/tools/perf/util/trace-event-parse.c b/tools/perf/util/trace-event-parse.c
+index 73a0222..d8e622d 100644
+--- a/tools/perf/util/trace-event-parse.c
++++ b/tools/perf/util/trace-event-parse.c
+@@ -153,7 +153,7 @@ void parse_proc_kallsyms(char *file, unsigned int size __unused)
+ char *next = NULL;
+ char *addr_str;
+ char ch;
+- int ret;
++ int ret __used;
+ int i;
+
+ line = strtok_r(file, "\n", &next);
+diff --git a/tools/perf/util/ui/browsers/map.c b/tools/perf/util/ui/browsers/map.c
+index e35437d..3788cad 100644
+--- a/tools/perf/util/ui/browsers/map.c
++++ b/tools/perf/util/ui/browsers/map.c
+@@ -40,7 +40,7 @@ static int ui_entry__read(const char *title, char *bf, size_t size, int width)
+ out_free_form:
+ newtPopWindow();
+ newtFormDestroy(form);
+- return 0;
++ return err;
+ }
+
+ struct map_browser {
+--
+To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
+the body of a message to majordomo@vger.kernel.org
+More majordomo info at http://vger.kernel.org/majordomo-info.html
+Please read the FAQ at http://www.tux.org/lkml/
+
diff --git a/freed-ora/current/master/runtime_pm_fixups.patch b/freed-ora/current/master/runtime_pm_fixups.patch
index 789115810..1be6149d6 100644
--- a/freed-ora/current/master/runtime_pm_fixups.patch
+++ b/freed-ora/current/master/runtime_pm_fixups.patch
@@ -1,14 +1,26 @@
-Experimental fixes for the interactions between runtime PM and ACPI power
-resources. Needs some work with upstream.
+From 141d0d01ab292d4ea3a6d5e96b4048e10e68c1d3 Mon Sep 17 00:00:00 2001
+From: Kyle McMartin <kyle@mcmartin.ca>
+Date: Mon, 24 Jan 2011 13:01:57 -0500
+Subject: [PATCH] runtime_pm_fixups
+
+---
+ drivers/acpi/bus.c | 3 ++-
+ drivers/acpi/pci_bind.c | 6 ++++++
+ drivers/acpi/power.c | 5 ++++-
+ drivers/acpi/sleep.c | 2 +-
+ drivers/acpi/wakeup.c | 2 +-
+ drivers/pci/pci-acpi.c | 2 +-
+ include/acpi/acpi_bus.h | 2 +-
+ 7 files changed, 16 insertions(+), 6 deletions(-)
diff --git a/drivers/acpi/bus.c b/drivers/acpi/bus.c
-index 310e3b9..371debe 100644
+index 7ced61f..e4e0114 100644
--- a/drivers/acpi/bus.c
+++ b/drivers/acpi/bus.c
-@@ -329,7 +329,8 @@ int acpi_bus_set_power(acpi_handle handle, int state)
- goto end;
- }
- }
+@@ -256,7 +256,8 @@ static int __acpi_bus_set_power(struct acpi_device *device, int state)
+ * a lower-powered state.
+ */
+ if (state < device->power.state) {
- if (device->power.flags.power_resources) {
+ if (device->power.flags.power_resources &&
+ !device->wakeup.run_wake_count) {
@@ -16,10 +28,10 @@ index 310e3b9..371debe 100644
if (result)
goto end;
diff --git a/drivers/acpi/pci_bind.c b/drivers/acpi/pci_bind.c
-index 8b3cc6a..b013174 100644
+index 2ef0409..4b0bb68 100644
--- a/drivers/acpi/pci_bind.c
+++ b/drivers/acpi/pci_bind.c
-@@ -33,6 +33,8 @@
+@@ -32,6 +32,8 @@
#include <acpi/acpi_bus.h>
#include <acpi/acpi_drivers.h>
@@ -28,20 +40,29 @@ index 8b3cc6a..b013174 100644
#define _COMPONENT ACPI_PCI_COMPONENT
ACPI_MODULE_NAME("pci_bind");
-@@ -173,6 +175,8 @@ static int acpi_pci_bind(struct acpi_device *device)
+@@ -65,6 +67,7 @@ static int acpi_pci_bind(struct acpi_device *device)
+ acpi_handle handle;
+ struct pci_bus *bus;
+ struct pci_dev *dev;
++ int state;
+
+ dev = acpi_get_pci_dev(device->handle);
+ if (!dev)
+@@ -87,6 +90,9 @@ static int acpi_pci_bind(struct acpi_device *device)
device->ops.unbind = acpi_pci_unbind;
}
-+ acpi_power_transition(device, acpi_power_get_inferred_state(device));
++ acpi_power_get_inferred_state(device, &state);
++ acpi_power_transition(device, state);
+
/*
* Evaluate and parse _PRT, if exists. This code allows parsing of
* _PRT objects within the scope of non-bridge devices. Note that
diff --git a/drivers/acpi/power.c b/drivers/acpi/power.c
-index 844c155..8a42ddf 100644
+index 9ac2a9f..cd6a8df 100644
--- a/drivers/acpi/power.c
+++ b/drivers/acpi/power.c
-@@ -394,7 +394,7 @@ int acpi_enable_wakeup_device_power(struct acpi_device *dev, int sleep_state)
+@@ -412,7 +412,7 @@ int acpi_enable_wakeup_device_power(struct acpi_device *dev, int sleep_state)
* State Wake) for the device, if present
* 2. Shutdown down the power resources
*/
@@ -50,7 +71,7 @@ index 844c155..8a42ddf 100644
{
int i, err = 0;
-@@ -417,6 +417,9 @@ int acpi_disable_wakeup_device_power(struct acpi_device *dev)
+@@ -435,6 +435,9 @@ int acpi_disable_wakeup_device_power(struct acpi_device *dev)
if (err)
goto out;
@@ -59,12 +80,12 @@ index 844c155..8a42ddf 100644
+
/* Close power resource */
for (i = 0; i < dev->wakeup.resources.count; i++) {
- int ret = acpi_power_off_device(
+ int ret = acpi_power_off(dev->wakeup.resources.handles[i]);
diff --git a/drivers/acpi/sleep.c b/drivers/acpi/sleep.c
-index 2c5cd02..6bf016b 100644
+index d6a8cd1..5d68dc0 100644
--- a/drivers/acpi/sleep.c
+++ b/drivers/acpi/sleep.c
-@@ -670,7 +670,7 @@ int acpi_pm_device_sleep_wake(struct device *dev, bool enable)
+@@ -697,7 +697,7 @@ int acpi_pm_device_sleep_wake(struct device *dev, bool enable)
error = enable ?
acpi_enable_wakeup_device_power(adev, acpi_target_sleep_state) :
@@ -74,20 +95,20 @@ index 2c5cd02..6bf016b 100644
dev_info(dev, "wake-up capability %s by ACPI\n",
enable ? "enabled" : "disabled");
diff --git a/drivers/acpi/wakeup.c b/drivers/acpi/wakeup.c
-index f62a50c..ff48a54 100644
+index ed65014..a0cabc3 100644
--- a/drivers/acpi/wakeup.c
+++ b/drivers/acpi/wakeup.c
-@@ -71,7 +71,7 @@ void acpi_disable_wakeup_devices(u8 sleep_state)
+@@ -73,7 +73,7 @@ void acpi_disable_wakeup_devices(u8 sleep_state)
ACPI_GPE_DISABLE);
- if (dev->wakeup.state.enabled)
+ if (device_may_wakeup(&dev->dev))
- acpi_disable_wakeup_device_power(dev);
+ acpi_disable_wakeup_device_power(dev, sleep_state);
}
}
diff --git a/drivers/pci/pci-acpi.c b/drivers/pci/pci-acpi.c
-index 24e19c5..cd99494 100644
+index 6fe0772..819fa7a 100644
--- a/drivers/pci/pci-acpi.c
+++ b/drivers/pci/pci-acpi.c
@@ -302,7 +302,7 @@ static int acpi_dev_run_wake(struct device *phys_dev, bool enable)
@@ -100,10 +121,10 @@ index 24e19c5..cd99494 100644
} else {
error = -EALREADY;
diff --git a/include/acpi/acpi_bus.h b/include/acpi/acpi_bus.h
-index 4de84ce..284f43c 100644
+index 78ca429..92d6e86 100644
--- a/include/acpi/acpi_bus.h
+++ b/include/acpi/acpi_bus.h
-@@ -387,7 +387,7 @@ struct acpi_pci_root *acpi_pci_find_root(acpi_handle handle);
+@@ -379,7 +379,7 @@ struct acpi_pci_root *acpi_pci_find_root(acpi_handle handle);
#define DEVICE_ACPI_HANDLE(dev) ((acpi_handle)((dev)->archdata.acpi_handle))
int acpi_enable_wakeup_device_power(struct acpi_device *dev, int state);
@@ -112,3 +133,6 @@ index 4de84ce..284f43c 100644
#ifdef CONFIG_PM_OPS
int acpi_pm_device_sleep_state(struct device *, int *);
+--
+1.7.3.5
+
diff --git a/freed-ora/current/master/scripts/pull-upstreams.sh b/freed-ora/current/master/scripts/pull-upstreams.sh
index 11df40466..8dc8497d8 100755
--- a/freed-ora/current/master/scripts/pull-upstreams.sh
+++ b/freed-ora/current/master/scripts/pull-upstreams.sh
@@ -1,6 +1,6 @@
#!/bin/bash
-utrace_base=2.6-current
+utrace_base=2.6.37
url=http://people.redhat.com/roland/utrace/${1:-$utrace_base}
diff --git a/freed-ora/current/master/sources b/freed-ora/current/master/sources
index 38c5fc2c5..46741dc56 100644
--- a/freed-ora/current/master/sources
+++ b/freed-ora/current/master/sources
@@ -1 +1,3 @@
3e80c55a0927b4439f3aad4f973f05cc linux-2.6.37-libre.tar.bz2
+35ff89b92aa6b26ff9dd982ca0beb86b patch-libre-2.6.38-rc6.bz2
+3ddbe38f2ca6ae526dd0017fafdf846a patch-2.6.38-rc6-git2.bz2
diff --git a/freed-ora/current/master/tpm-fix-stall-on-boot.patch b/freed-ora/current/master/tpm-fix-stall-on-boot.patch
deleted file mode 100644
index adba40a6e..000000000
--- a/freed-ora/current/master/tpm-fix-stall-on-boot.patch
+++ /dev/null
@@ -1,24 +0,0 @@
-Fix TPM timeouts on boot (#530393)
-
---- a/drivers/char/tpm/tpm.c
-+++ a/drivers/char/tpm/tpm.c
-@@ -354,12 +354,14 @@ unsigned long tpm_calc_ordinal_duration(struct tpm_chip *chip,
- tpm_protected_ordinal_duration[ordinal &
- TPM_PROTECTED_ORDINAL_MASK];
-
-- if (duration_idx != TPM_UNDEFINED)
-+ if (duration_idx != TPM_UNDEFINED) {
- duration = chip->vendor.duration[duration_idx];
-- if (duration <= 0)
-+ /* if duration is 0, it's because chip->vendor.duration wasn't */
-+ /* filled yet, so we set the lowest timeout just to give enough */
-+ /* time to tpm_get_timeouts() succeed */
-+ return (duration <= 0 ? HZ : duration);
-+ } else
- return 2 * 60 * HZ;
-- else
-- return duration;
- }
- EXPORT_SYMBOL_GPL(tpm_calc_ordinal_duration);
-
-
OpenPOWER on IntegriCloud