diff options
author | Alexandre Oliva <lxoliva@fsfla.org> | 2011-02-25 05:23:55 +0000 |
---|---|---|
committer | Alexandre Oliva <lxoliva@fsfla.org> | 2011-02-25 05:23:55 +0000 |
commit | 40f3e7199ec41c44e0841bc779515b497259de1c (patch) | |
tree | 54e953ad9c7a71cdcafce7b48142d3c31a919c63 /freed-ora/current | |
parent | 11452b3dda7c03b5fc9b92abcf19e3ee1151785e (diff) | |
download | linux-libre-raptor-40f3e7199ec41c44e0841bc779515b497259de1c.tar.gz linux-libre-raptor-40f3e7199ec41c44e0841bc779515b497259de1c.zip |
2.6.38-0.rc6.git2.1.fc16
Diffstat (limited to 'freed-ora/current')
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 Binary files differnew file mode 100644 index 000000000..0c00e77e6 --- /dev/null +++ b/freed-ora/current/master/patch-libre-2.6.38-rc6.xdelta 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); - - |