summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authoreisnerd <eisnerd@localhost>2008-02-05 15:00:17 +0000
committereisnerd <eisnerd@localhost>2008-02-05 15:00:17 +0000
commit4ee80b962832a3bae2f3e6904b305c9c471d4ba2 (patch)
treee31b1760015143ea78e188e4c4166ccb41ab1f38 /sys-kernel
parentsys-kernel/thinkpad-sources: Cleanup (remove broken Versions) and Bump to 2.6.24 (diff)
downloadjokey-4ee80b962832a3bae2f3e6904b305c9c471d4ba2.tar.gz
jokey-4ee80b962832a3bae2f3e6904b305c9c471d4ba2.tar.bz2
jokey-4ee80b962832a3bae2f3e6904b305c9c471d4ba2.zip
sys-kernel/thinkpad-sources: Version r1 with some more patches pcie-powersaving, coloured printk, iwlwifi led patch
svn path=/trunk/; revision=346
Diffstat (limited to 'sys-kernel')
-rw-r--r--sys-kernel/thinkpad-sources/ChangeLog9
-rw-r--r--sys-kernel/thinkpad-sources/Manifest7
-rw-r--r--sys-kernel/thinkpad-sources/files/2.6.24-r1/colored-printk-output-2.6.24.patch347
-rw-r--r--sys-kernel/thinkpad-sources/files/2.6.24-r1/iwlwifi-leds-v2-2.6.24-rc4.diff532
-rw-r--r--sys-kernel/thinkpad-sources/files/2.6.24-r1/pci-e_aspm_v3.patch1041
-rw-r--r--sys-kernel/thinkpad-sources/files/configs/config-for-core-or-core2-2.6.24-r12078
-rw-r--r--sys-kernel/thinkpad-sources/thinkpad-sources-2.6.24-r1.ebuild78
7 files changed, 4091 insertions, 1 deletions
diff --git a/sys-kernel/thinkpad-sources/ChangeLog b/sys-kernel/thinkpad-sources/ChangeLog
index a2d6432..638c72d 100644
--- a/sys-kernel/thinkpad-sources/ChangeLog
+++ b/sys-kernel/thinkpad-sources/ChangeLog
@@ -1,5 +1,14 @@
+ 05 Feb 2008; Florian Manschwetus <florianmanschwetus@gmx.de>
+ +files/configs/config-for-core-or-core2-2.6.24-r1,
+ +thinkpad-sources-2.6.24-r1.ebuild,
+ +files/2.6.24-r1/iwlwifi-leds-v2-2.6.24-rc4.diff,
+ +files/2.6.24-r1/colored-printk-output-2.6.24.patch, +files/2.6.24-r1,
+ +files/2.6.24-r1/pci-e_aspm_v3.patch:
+ Version r1 with some more patches pcie-powersaving, coloured printk, iwlwifi
+ led patch
+
31 Jan 2008; Florian Manschwetus <florianmanschwetus@gmx.de>
+files/2.6.24, -files/configs/config-for-core-or-core2,
-files/2.6.23/linux-phc-0.3.1-for-2.6.23.patch,
diff --git a/sys-kernel/thinkpad-sources/Manifest b/sys-kernel/thinkpad-sources/Manifest
index 4a2f104..fee61f8 100644
--- a/sys-kernel/thinkpad-sources/Manifest
+++ b/sys-kernel/thinkpad-sources/Manifest
@@ -1,11 +1,16 @@
+AUX 2.6.24-r1/colored-printk-output-2.6.24.patch 11150 RMD160 b16121f94651256d561ee0d7af8e910f76a4ac32 SHA1 635d332e0e13aa3c492f4dd65ea1dc696a7ec99c SHA256 7868c3ea8550b66d1c31aa71a19725ad5198d4e63767410465747e6a23f03e3d
+AUX 2.6.24-r1/iwlwifi-leds-v2-2.6.24-rc4.diff 14641 RMD160 1dd66b789095ee7b66a1bbc2a460b88f5b34ff98 SHA1 0f4b5127db2b0bd8bb244edba1cba389fff0bc9b SHA256 ab9ba7cebf01f2b060a0c852ada40fdbd9940b81e6e335db7dd33bd58c2d3932
+AUX 2.6.24-r1/pci-e_aspm_v3.patch 30672 RMD160 6533c11e2e8b8b7f092488b193e9b31ff432f5ab SHA1 39ca821c88c9fa0500a958d76c83b676e5885fb7 SHA256 88174311c4c5a95b16534f4174fb7782a359d5f076f6f5c081e414ba21f90902
AUX 2.6.24/disk-protect-for-2.6.24.patch 26920 RMD160 6ec7ac0b4c56ba15d0bc66cfe1c2ec71263cfbd0 SHA1 917c4d0f3620227f61e399a73bbedf6ec227e357 SHA256 bf831e5a068ffbf4182974287c600646afee84878c12697da05f8bca440ae22e
AUX 2.6.24/linux-phc-0.3.1-for-2.6.24-rc1.patch 15425 RMD160 a1317ed8dabde11a1abde5887d972912bb8130b3 SHA1 4c31ff80c16ab0238e6fa254507d79f11e301241 SHA256 0789f27d86f8aa580d628ce0190eb50a0232678107f85d63819ba09a435ff057
AUX configs/config-for-core-or-core2-2.6.24 49564 RMD160 86b3094cfd88db4c201579757d39bc028d6d1f76 SHA1 c957910a711d7cc48387f04a76d1b2173fb60445 SHA256 057354d17eb762163c66af00ca1faa636fa9a52c098ce8a8722951ce810a6ac3
+AUX configs/config-for-core-or-core2-2.6.24-r1 49929 RMD160 b7571a56e1d29656987ed7df51a737c4803b1ea7 SHA1 0752f74f11dea7979382ed30b1f0a69e77716c49 SHA256 b37494926a59b36d380cd8e7e8dcb6dc9aa8e0c0ef85b6326347cc801200073b
DIST genpatches-2.6.24-1.base.tar.bz2 960 RMD160 a7b9932bc33e8a56da4bfafbdf16749bf141db6c SHA1 19271490c3faf040b7cf580123690785e95c1c66 SHA256 3f7c948b72494aed970be1187a75c7c8573ad500e35c5bc9610b87ffa42bd54f
DIST genpatches-2.6.24-1.extras.tar.bz2 41902 RMD160 259b831110120518149bbccdacf9982330af5ef0 SHA1 48d85d6b6cf84369b34d6fbd169fbfdaf97fc83f SHA256 bc8723863cace59d8bcb6d84d678cc9c370a5e2144133f543396b45e4655b063
DIST linux-2.6.24.tar.bz2 46737783 RMD160 0e5194c69c3d82c41ece689c4f84e638f8776d34 SHA1 351aebc784a5395fe4c92d1e514a89680482f7e2 SHA256 413c64fbbcf81244cb5571be4963644a1e81166a2b0f008a016528363b65c5d3
DIST thinkpad-acpi-0.19-20080107_v2.6.24-rc7.patch.gz 36028 RMD160 ff652f9416faf533f584950ce1a77fa4cde21703 SHA1 aacfcd3967ff6ca6749e8c9e8bfa5270c2c98986 SHA256 237c12599e6b19908c7a1d8b8347691d4e681de0385bb9f783d2d5b828fbed1c
DIST tuxonice-3.0-rc5-for-2.6.24-rc8-git4.patch.bz2 113258 RMD160 c1fde23de970b6347302ae2bff71bf3ab1bfbeb3 SHA1 bf559c8dead1d0372d3388e4f9d2c4d145862ec1 SHA256 0a3b502b89bebbcd0f701a0e89c072797257ce766b2ea2d2bda1f6762ca2ce9b
+EBUILD thinkpad-sources-2.6.24-r1.ebuild 3393 RMD160 5ae7a51929d5df37cf28f0b4adaab61804072aa6 SHA1 9d1dcc2546733a5faf3354771e556be49ea68c46 SHA256 8e014bb58eab436cfd0021b290b274ac80ac728fa113eeb8afbc49009ab2a4de
EBUILD thinkpad-sources-2.6.24.ebuild 2437 RMD160 36d0d67517f6ed70fe5d701d3e98c263d13de640 SHA1 7ecbd46cf4829428ac36e8e206761e21a94ec35e SHA256 065332432fdb9997a51664f7e554374a87ae46be646871740fb61ded15597860
-MISC ChangeLog 2179 RMD160 aeb87362491b606d4170a167a6a2c25c59eae170 SHA1 99877fa39d2c304d9c4a86864fe1a0452e028c36 SHA256 a8496789d18b943239b461f1eac59f9b7eb2fe1d0daa937e3f0db5fb1c9eebac
+MISC ChangeLog 2590 RMD160 d69c9aabb359ac700b5503dfaffcd82a9182286e SHA1 dbcb42aed06da2009c7a446cc26925d420e74747 SHA256 2a7b0296a7fb6c5ad2354d5d10bff7571e4f36a6b1c4ba1ff621520ec56784bd
MISC metadata.xml 284 RMD160 5062b08f804b7eaf9e1765c0d38b7fc95bc467e4 SHA1 687ba9103e597aad8a7231ff9a470d841f7121df SHA256 6ca83c8927bd3516baac49bc9ea82ddbeeddbe38a5a98b637d6eb1f1d436c84a
diff --git a/sys-kernel/thinkpad-sources/files/2.6.24-r1/colored-printk-output-2.6.24.patch b/sys-kernel/thinkpad-sources/files/2.6.24-r1/colored-printk-output-2.6.24.patch
new file mode 100644
index 0000000..0ccf792
--- /dev/null
+++ b/sys-kernel/thinkpad-sources/files/2.6.24-r1/colored-printk-output-2.6.24.patch
@@ -0,0 +1,347 @@
+diff -ruN linux-2.6.23.orig/arch/x86/kernel/early_printk.c linux-2.6.23/arch/x86/kernel/early_printk.c
+--- linux-2.6.23.orig/arch/x86/kernel/early_printk.c 2007-10-02 05:24:52.000000000 +0200
++++ linux-2.6.23/arch/x86/kernel/early_printk.c 2007-10-06 23:00:39.000000000 +0200
+@@ -20,7 +20,8 @@
+ static int max_ypos = 25, max_xpos = 80;
+ static int current_ypos = 25, current_xpos = 0;
+
+-static void early_vga_write(struct console *con, const char *str, unsigned n)
++static void early_vga_write(struct console *con, const char *str, unsigned n,
++ unsigned int loglevel)
+ {
+ char c;
+ int i, k, j;
+@@ -89,7 +90,8 @@
+ return timeout ? 0 : -1;
+ }
+
+-static void early_serial_write(struct console *con, const char *s, unsigned n)
++static void early_serial_write(struct console *con, const char *s, unsigned n,
++ unsigned int loglevel)
+ {
+ while (*s && n-- > 0) {
+ if (*s == '\n')
+@@ -185,7 +187,8 @@
+ simnow_fd = simnow(XOPEN, (unsigned long)fn, O_WRONLY|O_APPEND|O_CREAT, 0644);
+ }
+
+-static void simnow_write(struct console *con, const char *s, unsigned n)
++static void simnow_write(struct console *con, const char *s, unsigned n,
++ unsigned int loglevel)
+ {
+ simnow(XWRITE, simnow_fd, (unsigned long)s, n);
+ }
+@@ -209,7 +212,7 @@
+
+ va_start(ap,fmt);
+ n = vscnprintf(buf,512,fmt,ap);
+- early_console->write(early_console,buf,n);
++ early_console->write(early_console, buf, n, 0);
+ va_end(ap);
+ }
+
+diff -ruN linux-2.6.23.orig/drivers/char/Kconfig linux-2.6.23/drivers/char/Kconfig
+--- linux-2.6.23.orig/drivers/char/Kconfig 2007-10-02 05:24:52.000000000 +0200
++++ linux-2.6.23/drivers/char/Kconfig 2007-10-06 23:06:55.000000000 +0200
+@@ -58,6 +58,111 @@
+
+ If unsure, say Y.
+
++menuconfig VT_CKO
++ bool "Colored kernel message output"
++ depends on VT_CONSOLE
++ ---help---
++ This option enables kernel messages to be emitted in
++ colors other than the default.
++
++ The color value you need to enter is composed (OR-ed)
++ of a foreground and a background color.
++
++ Foreground:
++ 0x00 = black, 0x08 = dark gray,
++ 0x01 = red, 0x09 = light red,
++ 0x02 = green, 0x0A = light green,
++ 0x03 = brown, 0x0B = yellow,
++ 0x04 = blue, 0x0C = light blue,
++ 0x05 = magenta, 0x0D = light magenta,
++ 0x06 = cyan, 0x0E = light cyan,
++ 0x07 = gray, 0x0F = white,
++
++ (Foreground colors 0x08 to 0x0F do not work when a VGA
++ console font with 512 glyphs is used.)
++
++ Background:
++ 0x00 = black, 0x40 = blue,
++ 0x10 = red, 0x50 = magenta,
++ 0x20 = green, 0x60 = cyan,
++ 0x30 = brown, 0x70 = gray,
++
++ For example, 0x1F would yield white on red.
++
++ If unsure, say N.
++
++config VT_PRINTK_EMERG_COLOR
++ hex "Emergency messages color"
++ range 0x00 0xFF
++ depends on VT_CKO
++ default 0x07
++ ---help---
++ This option defines with which color kernel emergency messages will
++ be printed to the console.
++
++config VT_PRINTK_ALERT_COLOR
++ hex "Alert messages color"
++ range 0x00 0xFF
++ depends on VT_CKO
++ default 0x07
++ ---help---
++ This option defines with which color kernel alert messages will
++ be printed to the console.
++
++config VT_PRINTK_CRIT_COLOR
++ hex "Critical messages color"
++ range 0x00 0xFF
++ depends on VT_CKO
++ default 0x07
++ ---help---
++ This option defines with which color kernel critical messages will
++ be printed to the console.
++
++config VT_PRINTK_ERR_COLOR
++ hex "Error messages color"
++ range 0x00 0xFF
++ depends on VT_CKO
++ default 0x07
++ ---help---
++ This option defines with which color kernel error messages will
++ be printed to the console.
++
++config VT_PRINTK_WARNING_COLOR
++ hex "Warning messages color"
++ range 0x00 0xFF
++ depends on VT_CKO
++ default 0x07
++ ---help---
++ This option defines with which color kernel warning messages will
++ be printed to the console.
++
++config VT_PRINTK_NOTICE_COLOR
++ hex "Notice messages color"
++ range 0x00 0xFF
++ depends on VT_CKO
++ default 0x07
++ ---help---
++ This option defines with which color kernel notice messages will
++ be printed to the console.
++
++config VT_PRINTK_INFO_COLOR
++ hex "Information messages color"
++ range 0x00 0xFF
++ depends on VT_CKO
++ default 0x07
++ ---help---
++ This option defines with which color kernel information messages will
++ be printed to the console.
++
++config VT_PRINTK_DEBUG_COLOR
++ hex "Debug messages color"
++ range 0x00 0xFF
++ depends on VT_CKO
++ default 0x07
++ ---help---
++ This option defines with which color kernel debug messages will
++ be printed to the console.
++
+ config HW_CONSOLE
+ bool
+ depends on VT && !S390 && !UML
+diff -ruN linux-2.6.23.orig/drivers/char/vt.c linux-2.6.23/drivers/char/vt.c
+--- linux-2.6.23.orig/drivers/char/vt.c 2007-10-02 05:24:52.000000000 +0200
++++ linux-2.6.23/drivers/char/vt.c 2007-10-06 23:06:55.000000000 +0200
+@@ -73,6 +73,7 @@
+ */
+
+ #include <linux/module.h>
++#include <linux/moduleparam.h>
+ #include <linux/types.h>
+ #include <linux/sched.h>
+ #include <linux/tty.h>
+@@ -2344,16 +2345,44 @@
+
+ #ifdef CONFIG_VT_CONSOLE
+
++#ifdef CONFIG_VT_CKO
++static unsigned int printk_color[8] __read_mostly = {
++ CONFIG_VT_PRINTK_EMERG_COLOR, /* KERN_EMERG */
++ CONFIG_VT_PRINTK_ALERT_COLOR, /* KERN_ALERT */
++ CONFIG_VT_PRINTK_CRIT_COLOR, /* KERN_CRIT */
++ CONFIG_VT_PRINTK_ERR_COLOR, /* KERN_ERR */
++ CONFIG_VT_PRINTK_WARNING_COLOR, /* KERN_WARNING */
++ CONFIG_VT_PRINTK_NOTICE_COLOR, /* KERN_NOTICE */
++ CONFIG_VT_PRINTK_INFO_COLOR, /* KERN_INFO */
++ CONFIG_VT_PRINTK_DEBUG_COLOR, /* KERN_DEBUG */
++};
++module_param_array(printk_color, uint, NULL, S_IRUGO | S_IWUSR);
++
++static inline void vc_set_color(struct vc_data *vc, unsigned char color)
++{
++ vc->vc_color = color_table[color & 0xF] |
++ (color_table[(color >> 4) & 0x7] << 4) |
++ (color & 0x80);
++ update_attr(vc);
++}
++#else
++static unsigned int printk_color[8];
++static inline void vc_set_color(const struct vc_data *vc, unsigned char c)
++{
++}
++#endif
++
+ /*
+ * Console on virtual terminal
+ *
+ * The console must be locked when we get here.
+ */
+
+-static void vt_console_print(struct console *co, const char *b, unsigned count)
++static void vt_console_print(struct console *co, const char *b, unsigned count,
++ unsigned int loglevel)
+ {
+ struct vc_data *vc = vc_cons[fg_console].d;
+- unsigned char c;
++ unsigned char current_color, c;
+ static unsigned long printing;
+ const ushort *start;
+ ushort cnt = 0;
+@@ -2385,11 +2414,19 @@
+
+ start = (ushort *)vc->vc_pos;
+
++ /*
++ * We always get a valid loglevel - <8> and "no level" is transformed
++ * to <4> in the typical kernel.
++ */
++ current_color = printk_color[loglevel];
++ vc_set_color(vc, current_color);
++
+ /* Contrived structure to try to emulate original need_wrap behaviour
+ * Problems caused when we have need_wrap set on '\n' character */
+ while (count--) {
+ c = *b++;
+ if (c == 10 || c == 13 || c == 8 || vc->vc_need_wrap) {
++ vc_set_color(vc, vc->vc_def_color);
+ if (cnt > 0) {
+ if (CON_IS_VISIBLE(vc))
+ vc->vc_sw->con_putcs(vc, start, cnt, vc->vc_y, vc->vc_x);
+@@ -2402,6 +2439,7 @@
+ bs(vc);
+ start = (ushort *)vc->vc_pos;
+ myx = vc->vc_x;
++ vc_set_color(vc, current_color);
+ continue;
+ }
+ if (c != 13)
+@@ -2409,6 +2447,7 @@
+ cr(vc);
+ start = (ushort *)vc->vc_pos;
+ myx = vc->vc_x;
++ vc_set_color(vc, current_color);
+ if (c == 10 || c == 13)
+ continue;
+ }
+@@ -2430,6 +2469,7 @@
+ vc->vc_need_wrap = 1;
+ }
+ }
++ vc_set_color(vc, vc->vc_def_color);
+ set_cursor(vc);
+
+ quit:
+diff -ruN linux-2.6.23.orig/drivers/net/netconsole.c linux-2.6.23/drivers/net/netconsole.c
+--- linux-2.6.23.orig/drivers/net/netconsole.c 2007-10-02 05:24:52.000000000 +0200
++++ linux-2.6.23/drivers/net/netconsole.c 2007-10-06 23:00:39.000000000 +0200
+@@ -65,7 +65,8 @@
+
+ #define MAX_PRINT_CHUNK 1000
+
+-static void write_msg(struct console *con, const char *msg, unsigned int len)
++static void write_msg(struct console *con, const char *msg, unsigned int len,
++ unsigned int loglevel)
+ {
+ int frag, left;
+ unsigned long flags;
+diff -ruN linux-2.6.23.orig/drivers/serial/8250.c linux-2.6.23/drivers/serial/8250.c
+--- linux-2.6.23.orig/drivers/serial/8250.c 2007-10-02 05:24:52.000000000 +0200
++++ linux-2.6.23/drivers/serial/8250.c 2007-10-06 23:00:39.000000000 +0200
+@@ -2464,7 +2464,8 @@
+ * The console_lock must be held when we get here.
+ */
+ static void
+-serial8250_console_write(struct console *co, const char *s, unsigned int count)
++serial8250_console_write(struct console *co, const char *s, unsigned int count,
++ unsigned int loglevel)
+ {
+ struct uart_8250_port *up = &serial8250_ports[co->index];
+ unsigned long flags;
+diff -ruN linux-2.6.23.orig/drivers/serial/8250_early.c linux-2.6.23/drivers/serial/8250_early.c
+--- linux-2.6.23.orig/drivers/serial/8250_early.c 2007-10-02 05:24:52.000000000 +0200
++++ linux-2.6.23/drivers/serial/8250_early.c 2007-10-06 23:00:39.000000000 +0200
+@@ -82,7 +82,8 @@
+ serial_out(port, UART_TX, c);
+ }
+
+-static void __init early_serial8250_write(struct console *console, const char *s, unsigned int count)
++static void __init early_serial8250_write(struct console *console,
++ const char *s, unsigned int count, unsigned int loglevel)
+ {
+ struct uart_port *port = &early_device.port;
+ unsigned int ier;
+diff -ruN linux-2.6.23.orig/include/linux/console.h linux-2.6.23/include/linux/console.h
+--- linux-2.6.23.orig/include/linux/console.h 2007-10-02 05:24:52.000000000 +0200
++++ linux-2.6.23/include/linux/console.h 2007-10-06 23:00:39.000000000 +0200
+@@ -93,7 +93,7 @@
+
+ struct console {
+ char name[16];
+- void (*write)(struct console *, const char *, unsigned);
++ void (*write)(struct console *, const char *, unsigned, unsigned int);
+ int (*read)(struct console *, char *, unsigned);
+ struct tty_driver *(*device)(struct console *, int *);
+ void (*unblank)(void);
+diff -ruN linux-2.6.23.orig/kernel/printk.c linux-2.6.23/kernel/printk.c
+--- linux-2.6.23.orig/kernel/printk.c 2007-10-02 05:24:52.000000000 +0200
++++ linux-2.6.23/kernel/printk.c 2007-10-06 23:00:39.000000000 +0200
+@@ -320,7 +320,8 @@
+ /*
+ * Call the console drivers on a range of log_buf
+ */
+-static void __call_console_drivers(unsigned long start, unsigned long end)
++static void __call_console_drivers(unsigned long start, unsigned long end,
++ unsigned int loglevel)
+ {
+ struct console *con;
+
+@@ -328,7 +329,7 @@
+ if ((con->flags & CON_ENABLED) && con->write &&
+ (cpu_online(smp_processor_id()) ||
+ (con->flags & CON_ANYTIME)))
+- con->write(con, &LOG_BUF(start), end - start);
++ con->write(con, &LOG_BUF(start), end - start, loglevel);
+ }
+ }
+
+@@ -355,10 +356,11 @@
+ if ((start & LOG_BUF_MASK) > (end & LOG_BUF_MASK)) {
+ /* wrapped write */
+ __call_console_drivers(start & LOG_BUF_MASK,
+- log_buf_len);
+- __call_console_drivers(0, end & LOG_BUF_MASK);
++ log_buf_len, msg_log_level);
++ __call_console_drivers(0, end & LOG_BUF_MASK,
++ msg_log_level);
+ } else {
+- __call_console_drivers(start, end);
++ __call_console_drivers(start, end, msg_log_level);
+ }
+ }
+ }
diff --git a/sys-kernel/thinkpad-sources/files/2.6.24-r1/iwlwifi-leds-v2-2.6.24-rc4.diff b/sys-kernel/thinkpad-sources/files/2.6.24-r1/iwlwifi-leds-v2-2.6.24-rc4.diff
new file mode 100644
index 0000000..22e8d9c
--- /dev/null
+++ b/sys-kernel/thinkpad-sources/files/2.6.24-r1/iwlwifi-leds-v2-2.6.24-rc4.diff
@@ -0,0 +1,532 @@
+--- ./drivers/net/wireless/iwlwifi/Kconfig.orig 2007-12-04 07:57:24.000000000 +0100
++++ ./drivers/net/wireless/iwlwifi/Kconfig 2007-12-04 13:04:52.000000000 +0100
+@@ -126,3 +126,9 @@
+ inserted in and remvoed from the running kernel whenever you want),
+ say M here and read <file:Documentation/kbuild/modules.txt>. The
+ module will be called iwl3945.ko.
++config IWLWIFI_LEDS
++ bool "IWLWIFI leds"
++ depends on IWLWIFI && MAC80211_LEDS
++ default y
++ ---help---
++ This options enables the wireless led.
+--- ./drivers/net/wireless/iwlwifi/iwl-priv.h.orig 2007-12-04 07:57:24.000000000 +0100
++++ ./drivers/net/wireless/iwlwifi/iwl-priv.h 2007-12-04 13:04:52.000000000 +0100
+@@ -127,11 +127,14 @@
+ struct iwl_init_alive_resp card_alive_init;
+ struct iwl_alive_resp card_alive;
+
+-#ifdef LED
+- /* LED related variables */
+- struct iwl_activity_blink activity;
+- unsigned long led_packets;
+- int led_state;
++
++#ifdef CONFIG_IWLWIFI_LEDS
++ u8 led_state;
++ unsigned int rxtxpackets;
++ atomic_t ledtimer;
++ struct iwl_led tx_led;
++ struct iwl_led rx_led;
++ struct iwl_led assoc_led;
+ #endif
+
+ u16 active_rate;
+@@ -274,6 +277,7 @@
+ struct delayed_work gather_stats;
+ struct delayed_work scan_check;
+ struct delayed_work post_associate;
++ struct delayed_work update_led;
+
+ #define IWL_DEFAULT_TX_POWER 0x0F
+ s8 user_txpower_limit;
+--- ./drivers/net/wireless/iwlwifi/iwlwifi.h.orig 2007-12-04 07:57:24.000000000 +0100
++++ ./drivers/net/wireless/iwlwifi/iwlwifi.h 2007-12-04 13:04:52.000000000 +0100
+@@ -50,6 +50,9 @@
+
+ #include "iwl-prph.h"
+
++#ifdef CONFIG_IWLWIFI_LEDS
++#include "iwl-leds.h"
++#endif
+ /*
+ * Driver implementation data structures, constants, inline
+ * functions
+--- ./drivers/net/wireless/iwlwifi/iwl-leds.h.orig 2007-12-04 13:04:52.000000000 +0100
++++ ./drivers/net/wireless/iwlwifi/iwl-leds.h 2007-12-04 13:04:52.000000000 +0100
+@@ -0,0 +1,20 @@
++#ifndef __iwl_leds_h__
++#define __iwl_leds_h__
++
++
++#include <linux/leds.h>
++
++
++#define IWL_LED_ACTIVITY (0<<1)
++#define IWL_LED_LINK (1<<1)
++#define IWL_LED_INTERVAL __constant_cpu_to_le32(1000)
++#define IWL_LED_ACTIVITY_PERIOD msecs_to_jiffies(500)
++#define IWL_LED_MAX_NAME_LEN 31
++
++struct iwl_led {
++ char name[IWL_LED_MAX_NAME_LEN + 1];
++ struct led_classdev cdev;
++};
++
++
++#endif
+--- ./drivers/net/wireless/iwlwifi/iwl3945-base.c.orig 2007-12-04 07:57:24.000000000 +0100
++++ ./drivers/net/wireless/iwlwifi/iwl3945-base.c 2007-12-04 13:06:17.000000000 +0100
+@@ -6086,6 +6086,173 @@
+ queue_work(priv->workqueue, &priv->restart);
+ }
+
++#ifdef CONFIG_IWLWIFI_LEDS
++static int iwl_led_cmd_callback(struct iwl_priv *priv,
++ struct iwl_cmd *cmd, struct sk_buff *skb)
++{
++ return 1;
++}
++
++static void iwl_bg_led_update(struct work_struct *data)
++{
++ struct iwl_priv *priv =
++ container_of(data, struct iwl_priv, update_led.work);
++ struct iwl_led_cmd led_cmd = {
++ .id = IWL_LED_ACTIVITY,
++ .interval = IWL_LED_INTERVAL,
++ };
++ struct iwl_host_cmd cmd = {
++ .id = REPLY_LEDS_CMD,
++ .len = sizeof(struct iwl_led_cmd),
++ .data = &led_cmd,
++ .meta.flags = CMD_ASYNC,
++ .meta.u.callback = iwl_led_cmd_callback,
++ };
++ u8 on;
++ unsigned long flags;
++
++ if (test_bit(STATUS_EXIT_PENDING, &priv->status) ||
++ !test_bit(STATUS_READY, &priv->status))
++ return;
++
++ spin_lock_irqsave(&priv->lock, flags);
++
++ if (priv->rxtxpackets) {
++ on = 25 + 230 / (1 + (priv->rxtxpackets >> 2));
++ priv->rxtxpackets = 0;
++ queue_delayed_work(priv->workqueue, &priv->update_led,
++ IWL_LED_ACTIVITY_PERIOD);
++
++ if (on == priv->led_state)
++ goto exit_unlock;
++
++ led_cmd.on = led_cmd.off = on;
++ priv->led_state = on;
++
++ }
++ else {
++ atomic_set(&priv->ledtimer, 0);
++ led_cmd.on = led_cmd.off = 0;
++ priv->led_state = 0;
++ }
++
++ spin_unlock_irqrestore(&priv->lock, flags);
++ iwl_send_cmd(priv, &cmd);
++
++ return;
++
++exit_unlock:
++ spin_unlock_irqrestore(&priv->lock, flags);
++}
++
++static void iwl_led_set_rx(struct led_classdev *led_cdev,
++ enum led_brightness value)
++{
++ struct iwl_priv *priv = container_of(led_cdev, struct iwl_priv,
++ rx_led.cdev);
++ unsigned long flags;
++
++ if (test_bit(STATUS_EXIT_PENDING, &priv->status) ||
++ !test_bit(STATUS_READY, &priv->status))
++ return;
++
++ spin_lock_irqsave(&priv->lock, flags);
++ priv->rxtxpackets += 2;
++ if (!atomic_xchg(&priv->ledtimer, 1))
++ queue_delayed_work(priv->workqueue, &priv->update_led,
++ IWL_LED_ACTIVITY_PERIOD);
++ spin_unlock_irqrestore(&priv->lock, flags);
++
++}
++
++static void iwl_led_set_tx(struct led_classdev *led_cdev,
++ enum led_brightness value)
++{
++ struct iwl_priv *priv = container_of(led_cdev, struct iwl_priv,
++ tx_led.cdev);
++ unsigned long flags;
++
++ if (test_bit(STATUS_EXIT_PENDING, &priv->status) ||
++ !test_bit(STATUS_READY, &priv->status))
++ return;
++
++ spin_lock_irqsave(&priv->lock, flags);
++ priv->rxtxpackets++;
++ if (!atomic_xchg(&priv->ledtimer, 1))
++ queue_delayed_work(priv->workqueue, &priv->update_led,
++ IWL_LED_ACTIVITY_PERIOD);
++ spin_unlock_irqrestore(&priv->lock, flags);
++}
++
++static void iwl_led_set_assoc(struct led_classdev *led_cdev,
++ enum led_brightness value)
++{
++ struct iwl_priv *priv = container_of(led_cdev, struct iwl_priv,
++ assoc_led.cdev);
++ struct iwl_led_cmd led_cmd = {
++ .id = IWL_LED_LINK,
++ .interval = IWL_LED_INTERVAL,
++ };
++ struct iwl_host_cmd cmd = {
++ .id = REPLY_LEDS_CMD,
++ .len = sizeof(struct iwl_led_cmd),
++ .data = &led_cmd,
++ .meta.flags = CMD_ASYNC,
++ .meta.u.callback = iwl_led_cmd_callback
++ };
++
++ if (test_bit(STATUS_EXIT_PENDING, &priv->status) ||
++ !test_bit(STATUS_READY, &priv->status))
++ return;
++
++ switch(value)
++ {
++ case LED_OFF:
++ led_cmd.off = 0;
++ led_cmd.on = 0;
++ break;
++ case LED_HALF:
++ case LED_FULL:
++ led_cmd.off = 0;
++ led_cmd.on = 40;
++ }
++ iwl_send_cmd(priv, &cmd);
++}
++
++
++static int iwl_register_led(struct iwl_priv *priv, struct iwl_led *led, char *ledname,
++ char *triggername, void (*callback)
++ (struct led_classdev *, enum led_brightness))
++{
++ snprintf(led->name, sizeof(led->name), ledname,
++ wiphy_name(priv->hw->wiphy));
++ led->cdev.name = led->name;
++ led->cdev.brightness_set = callback;
++ led->cdev.default_trigger = triggername;
++
++ return led_classdev_register(&priv->pci_dev->dev, &led->cdev);
++}
++
++static void iwl_register_leds(struct iwl_priv *priv)
++{
++ iwl_register_led(priv, &priv->tx_led, "iwl-%s:tx",
++ ieee80211_get_tx_led_name(priv->hw),
++ iwl_led_set_tx);
++ iwl_register_led(priv, &priv->rx_led, "iwl-%s:rx",
++ ieee80211_get_rx_led_name(priv->hw),
++ iwl_led_set_rx);
++ iwl_register_led(priv, &priv->assoc_led, "iwl-%s:asoc",
++ ieee80211_get_assoc_led_name(priv->hw),
++ iwl_led_set_assoc);
++}
++
++static void iwl_unregister_leds(struct iwl_priv *priv)
++{
++ led_classdev_unregister(&priv->tx_led.cdev);
++ led_classdev_unregister(&priv->rx_led.cdev);
++ led_classdev_unregister(&priv->assoc_led.cdev);
++}
++#endif
+
+ /**
+ * iwl_alive_start - called after REPLY_ALIVE notification received
+@@ -6161,6 +6328,9 @@
+ if (iwl_is_rfkill(priv))
+ return;
+
++#ifdef CONFIG_IWLWIFI_LEDS
++ atomic_set(&priv->ledtimer, 0);
++#endif
+ if (!priv->mac80211_registered) {
+ /* Unlock so any user space entry points can call back into
+ * the driver without a deadlock... */
+@@ -6179,6 +6349,9 @@
+ priv->mac80211_registered = 1;
+
+ iwl_reset_channel_flag(priv);
++#ifdef CONFIG_IWLWIFI_LEDS
++ iwl_register_leds(priv);
++#endif
+ } else
+ ieee80211_start_queues(priv->hw);
+
+@@ -8266,7 +8439,9 @@
+ INIT_DELAYED_WORK(&priv->init_alive_start, iwl_bg_init_alive_start);
+ INIT_DELAYED_WORK(&priv->alive_start, iwl_bg_alive_start);
+ INIT_DELAYED_WORK(&priv->scan_check, iwl_bg_scan_check);
+-
++#ifdef CONFIG_IWLWIFI_LEDS
++ INIT_DELAYED_WORK(&priv->update_led, iwl_bg_led_update);
++#endif
+ iwl_hw_setup_deferred_work(priv);
+
+ tasklet_init(&priv->irq_tasklet, (void (*)(unsigned long))
+@@ -8278,6 +8453,9 @@
+ iwl_hw_cancel_deferred_work(priv);
+
+ cancel_delayed_work_sync(&priv->init_alive_start);
++#ifdef CONFIG_IWLWIFI_LEDS
++ cancel_delayed_work(&priv->update_led);
++#endif
+ cancel_delayed_work(&priv->scan_check);
+ cancel_delayed_work(&priv->alive_start);
+ cancel_delayed_work(&priv->post_associate);
+@@ -8602,6 +8780,9 @@
+ iwl_clear_stations_table(priv);
+
+ if (priv->mac80211_registered) {
++#ifdef CONFIG_IWLWIFI_LEDS
++ iwl_unregister_leds(priv);
++#endif
+ ieee80211_unregister_hw(priv->hw);
+ iwl_rate_control_unregister(priv->hw);
+ }
+--- ./drivers/net/wireless/iwlwifi/iwl4965-base.c.orig 2007-12-04 07:57:24.000000000 +0100
++++ ./drivers/net/wireless/iwlwifi/iwl4965-base.c 2007-12-04 13:06:54.000000000 +0100
+@@ -6462,6 +6462,174 @@
+ queue_work(priv->workqueue, &priv->restart);
+ }
+
++#ifdef CONFIG_IWLWIFI_LEDS
++static int iwl_led_cmd_callback(struct iwl_priv *priv,
++ struct iwl_cmd *cmd, struct sk_buff *skb)
++{
++ return 1;
++}
++
++static void iwl_bg_led_update(struct work_struct *data)
++{
++ struct iwl_priv *priv =
++ container_of(data, struct iwl_priv, update_led.work);
++ struct iwl_led_cmd led_cmd = {
++ .id = IWL_LED_ACTIVITY,
++ .interval = IWL_LED_INTERVAL,
++ };
++ struct iwl_host_cmd cmd = {
++ .id = REPLY_LEDS_CMD,
++ .len = sizeof(struct iwl_led_cmd),
++ .data = &led_cmd,
++ .meta.flags = CMD_ASYNC,
++ .meta.u.callback = iwl_led_cmd_callback,
++ };
++ u8 on;
++ unsigned long flags;
++
++ if (test_bit(STATUS_EXIT_PENDING, &priv->status) ||
++ !test_bit(STATUS_READY, &priv->status))
++ return;
++
++ spin_lock_irqsave(&priv->lock, flags);
++
++ if (priv->rxtxpackets) {
++ on = 25 + 230 / (1 + (priv->rxtxpackets >> 2));
++ priv->rxtxpackets = 0;
++ queue_delayed_work(priv->workqueue, &priv->update_led,
++ IWL_LED_ACTIVITY_PERIOD);
++
++ if (on == priv->led_state)
++ goto exit_unlock;
++
++ led_cmd.on = led_cmd.off = on;
++ priv->led_state = on;
++
++ }
++ else {
++ atomic_set(&priv->ledtimer, 0);
++ led_cmd.on = led_cmd.off = 0;
++ priv->led_state = 0;
++ }
++
++ spin_unlock_irqrestore(&priv->lock, flags);
++ iwl_send_cmd(priv, &cmd);
++
++ return;
++
++exit_unlock:
++ spin_unlock_irqrestore(&priv->lock, flags);
++}
++
++static void iwl_led_set_rx(struct led_classdev *led_cdev,
++ enum led_brightness value)
++{
++ struct iwl_priv *priv = container_of(led_cdev, struct iwl_priv,
++ rx_led.cdev);
++ unsigned long flags;
++
++ if (test_bit(STATUS_EXIT_PENDING, &priv->status) ||
++ !test_bit(STATUS_READY, &priv->status))
++ return;
++
++ spin_lock_irqsave(&priv->lock, flags);
++ priv->rxtxpackets += 2;
++ if (!atomic_xchg(&priv->ledtimer, 1))
++ queue_delayed_work(priv->workqueue, &priv->update_led,
++ IWL_LED_ACTIVITY_PERIOD);
++ spin_unlock_irqrestore(&priv->lock, flags);
++
++}
++
++static void iwl_led_set_tx(struct led_classdev *led_cdev,
++ enum led_brightness value)
++{
++ struct iwl_priv *priv = container_of(led_cdev, struct iwl_priv,
++ tx_led.cdev);
++ unsigned long flags;
++
++ if (test_bit(STATUS_EXIT_PENDING, &priv->status) ||
++ !test_bit(STATUS_READY, &priv->status))
++ return;
++
++ spin_lock_irqsave(&priv->lock, flags);
++ priv->rxtxpackets++;
++ if (!atomic_xchg(&priv->ledtimer, 1))
++ queue_delayed_work(priv->workqueue, &priv->update_led,
++ IWL_LED_ACTIVITY_PERIOD);
++ spin_unlock_irqrestore(&priv->lock, flags);
++}
++
++static void iwl_led_set_assoc(struct led_classdev *led_cdev,
++ enum led_brightness value)
++{
++ struct iwl_priv *priv = container_of(led_cdev, struct iwl_priv,
++ assoc_led.cdev);
++ struct iwl_led_cmd led_cmd = {
++ .id = IWL_LED_LINK,
++ .interval = IWL_LED_INTERVAL,
++ };
++ struct iwl_host_cmd cmd = {
++ .id = REPLY_LEDS_CMD,
++ .len = sizeof(struct iwl_led_cmd),
++ .data = &led_cmd,
++ .meta.flags = CMD_ASYNC,
++ .meta.u.callback = iwl_led_cmd_callback
++ };
++
++ if (test_bit(STATUS_EXIT_PENDING, &priv->status) ||
++ !test_bit(STATUS_READY, &priv->status))
++ return;
++
++ switch(value)
++ {
++ case LED_OFF:
++ led_cmd.off = 0;
++ led_cmd.on = 0;
++ break;
++ case LED_HALF:
++ case LED_FULL:
++ led_cmd.off = 0;
++ led_cmd.on = 40;
++ }
++ iwl_send_cmd(priv, &cmd);
++}
++
++
++static int iwl_register_led(struct iwl_priv *priv, struct iwl_led *led, char *ledname,
++ char *triggername, void (*callback)
++ (struct led_classdev *, enum led_brightness))
++{
++ snprintf(led->name, sizeof(led->name), ledname,
++ wiphy_name(priv->hw->wiphy));
++ led->cdev.name = led->name;
++ led->cdev.brightness_set = callback;
++ led->cdev.default_trigger = triggername;
++
++ return led_classdev_register(&priv->pci_dev->dev, &led->cdev);
++}
++
++static void iwl_register_leds(struct iwl_priv *priv)
++{
++ iwl_register_led(priv, &priv->tx_led, "iwl-%s:tx",
++ ieee80211_get_tx_led_name(priv->hw),
++ iwl_led_set_tx);
++ iwl_register_led(priv, &priv->rx_led, "iwl-%s:rx",
++ ieee80211_get_rx_led_name(priv->hw),
++ iwl_led_set_rx);
++ iwl_register_led(priv, &priv->assoc_led, "iwl-%s:asoc",
++ ieee80211_get_assoc_led_name(priv->hw),
++ iwl_led_set_assoc);
++}
++
++static void iwl_unregister_leds(struct iwl_priv *priv)
++{
++ led_classdev_unregister(&priv->tx_led.cdev);
++ led_classdev_unregister(&priv->rx_led.cdev);
++ led_classdev_unregister(&priv->assoc_led.cdev);
++}
++#endif
++
+
+ /**
+ * iwl_alive_start - called after REPLY_ALIVE notification received
+@@ -6517,6 +6685,9 @@
+ if (iwl_is_rfkill(priv))
+ return;
+
++#ifdef CONFIG_IWLWIFI_LEDS
++ atomic_set(&priv->ledtimer, 0);
++#endif
+ if (!priv->mac80211_registered) {
+ /* Unlock so any user space entry points can call back into
+ * the driver without a deadlock... */
+@@ -6535,6 +6706,9 @@
+ priv->mac80211_registered = 1;
+
+ iwl_reset_channel_flag(priv);
++#ifdef CONFIG_IWLWIFI_LEDS
++ iwl_register_leds(priv);
++#endif
+ } else
+ ieee80211_start_queues(priv->hw);
+
+@@ -8859,7 +9033,9 @@
+ INIT_DELAYED_WORK(&priv->init_alive_start, iwl_bg_init_alive_start);
+ INIT_DELAYED_WORK(&priv->alive_start, iwl_bg_alive_start);
+ INIT_DELAYED_WORK(&priv->scan_check, iwl_bg_scan_check);
+-
++#ifdef CONFIG_IWLWIFI_LEDS
++ INIT_DELAYED_WORK(&priv->update_led, iwl_bg_led_update);
++#endif
+ iwl_hw_setup_deferred_work(priv);
+
+ tasklet_init(&priv->irq_tasklet, (void (*)(unsigned long))
+@@ -8871,6 +9047,9 @@
+ iwl_hw_cancel_deferred_work(priv);
+
+ cancel_delayed_work_sync(&priv->init_alive_start);
++#ifdef CONFIG_IWLWIFI_LEDS
++ cancel_delayed_work(&priv->update_led);
++#endif
+ cancel_delayed_work(&priv->scan_check);
+ cancel_delayed_work(&priv->alive_start);
+ cancel_delayed_work(&priv->post_associate);
+@@ -9196,6 +9375,9 @@
+ iwl_clear_stations_table(priv);
+
+ if (priv->mac80211_registered) {
++#ifdef CONFIG_IWLWIFI_LEDS
++ iwl_unregister_leds(priv);
++#endif
+ ieee80211_unregister_hw(priv->hw);
+ iwl_rate_control_unregister(priv->hw);
+ }
diff --git a/sys-kernel/thinkpad-sources/files/2.6.24-r1/pci-e_aspm_v3.patch b/sys-kernel/thinkpad-sources/files/2.6.24-r1/pci-e_aspm_v3.patch
new file mode 100644
index 0000000..7b77e44
--- /dev/null
+++ b/sys-kernel/thinkpad-sources/files/2.6.24-r1/pci-e_aspm_v3.patch
@@ -0,0 +1,1041 @@
+===================================================================
+--- linux.orig/drivers/pci/pcie/Makefile 2008-01-16 15:59:42.000000000 +0800
++++ linux/drivers/pci/pcie/Makefile 2008-01-18 09:41:20.000000000 +0800
+@@ -2,6 +2,9 @@
+ # Makefile for PCI-Express PORT Driver
+ #
+
++# Build PCI Express ASPM if needed
++obj-$(CONFIG_PCIEASPM) += aspm.o
++
+ pcieportdrv-y := portdrv_core.o portdrv_pci.o portdrv_bus.o
+
+ obj-$(CONFIG_PCIEPORTBUS) += pcieportdrv.o
+Index: linux/drivers/pci/pcie/aspm.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux/drivers/pci/pcie/aspm.c 2008-01-18 09:42:24.000000000 +0800
+@@ -0,0 +1,812 @@
++/*
++ * File: drivers/pci/pcie/aspm.c
++ * Enabling PCIE link L0s/L1 state and Clock Power Management
++ *
++ * Copyright (C) 2007 Intel
++ * Copyright (C) Zhang Yanmin (yanmin.zhang@intel.com)
++ * Copyright (C) Shaohua Li (shaohua.li@intel.com)
++ */
++
++#include <linux/kernel.h>
++#include <linux/module.h>
++#include <linux/moduleparam.h>
++#include <linux/pci.h>
++#include <linux/pci_regs.h>
++#include <linux/errno.h>
++#include <linux/pm.h>
++#include <linux/init.h>
++#include <linux/slab.h>
++#include <linux/aspm.h>
++#include <acpi/acpi_bus.h>
++#include <linux/pci-acpi.h>
++#include "../pci.h"
++
++#ifdef MODULE_PARAM_PREFIX
++#undef MODULE_PARAM_PREFIX
++#endif
++#define MODULE_PARAM_PREFIX "pcie_aspm."
++
++/* only for downstream port */
++struct link_state {
++ struct list_head sibiling;
++ struct pci_dev *pdev;
++
++ /* ASPM state */
++ unsigned int support_state;
++ unsigned int enabled_state;
++ unsigned int bios_aspm_state;
++ /* upstream component */
++ unsigned int l0s_upper_latency;
++ unsigned int l1_upper_latency;
++ /* downstream component */
++ unsigned int l0s_down_latency;
++ unsigned int l1_down_latency;
++ /* Clock PM state*/
++ unsigned int clk_pm_capable;
++ unsigned int clk_pm_enabled;
++ unsigned int bios_clk_state;
++
++};
++
++/* Only for endpoint */
++struct endpoint_state {
++ unsigned int l0s_acceptable_latency;
++ unsigned int l1_acceptable_latency;
++};
++
++static int aspm_disabled;
++static DEFINE_MUTEX(aspm_lock);
++static LIST_HEAD(link_list);
++
++#define POLICY_DEFAULT 0 /* BIOS default setting */
++#define POLICY_PERFORMANCE 1 /* high performance */
++#define POLICY_POWERSAVE 2 /* high power saving */
++static int aspm_policy;
++static const char* policy_str[] = {
++ [POLICY_DEFAULT] = "default",
++ [POLICY_PERFORMANCE] = "performance",
++ [POLICY_POWERSAVE] = "powersave"
++};
++
++static int policy_to_aspm_state(struct pci_dev *pdev)
++{
++ struct link_state *link_state = pdev->link_state;
++
++ switch (aspm_policy) {
++ case POLICY_PERFORMANCE:
++ /* Disable ASPM and Clock PM */
++ return 0;
++ case POLICY_POWERSAVE:
++ /* Enable ASPM L0s/L1 */
++ return PCIE_LINK_STATE_L0S|PCIE_LINK_STATE_L1;
++ case POLICY_DEFAULT:
++ return link_state->bios_aspm_state;
++ }
++ return 0;
++}
++
++static int policy_to_clkpm_state(struct pci_dev *pdev)
++{
++ struct link_state *link_state = pdev->link_state;
++
++ switch (aspm_policy) {
++ case POLICY_PERFORMANCE:
++ /* Disable ASPM and Clock PM */
++ return 0;
++ case POLICY_POWERSAVE:
++ /* Disable Clock PM */
++ return 1;
++ case POLICY_DEFAULT:
++ return link_state->bios_clk_state;
++ }
++ return 0;
++}
++
++static void pcie_set_clock_pm(struct pci_dev *pdev, int enable)
++{
++ struct pci_dev *child_dev;
++ int pos;
++ u16 reg16;
++ struct link_state *link_state = pdev->link_state;
++
++ list_for_each_entry(child_dev, &pdev->subordinate->devices, bus_list) {
++ pos = pci_find_capability(child_dev, PCI_CAP_ID_EXP);
++ if (!pos)
++ return;
++ pci_read_config_word(child_dev, pos + PCI_EXP_LNKCTL, &reg16);
++ if (enable)
++ reg16 |= PCI_EXP_LNKCTL_CLKREQ_EN;
++ else
++ reg16 &= ~PCI_EXP_LNKCTL_CLKREQ_EN;
++ pci_write_config_word(child_dev, pos + PCI_EXP_LNKCTL, reg16);
++ }
++ link_state->clk_pm_enabled = !!enable;
++}
++
++static void pcie_check_clock_pm(struct pci_dev *pdev)
++{
++ int pos;
++ u32 reg32;
++ u16 reg16;
++ int capable = 1, enabled = 1;
++ struct pci_dev *child_dev;
++ struct link_state *link_state = pdev->link_state;
++
++ /* All functions should have the same cap and state, take the worst */
++ list_for_each_entry(child_dev, &pdev->subordinate->devices, bus_list) {
++ pos = pci_find_capability(child_dev, PCI_CAP_ID_EXP);
++ if (!pos)
++ return;
++ pci_read_config_dword(child_dev, pos + PCI_EXP_LNKCAP, &reg32);
++ if (!(reg32 & PCI_EXP_LNKCAP_CLKPM)) {
++ capable = 0;
++ enabled = 0;
++ break;
++ }
++ pci_read_config_word(child_dev, pos + PCI_EXP_LNKCTL, &reg16);
++ if (!(reg16 & PCI_EXP_LNKCTL_CLKREQ_EN))
++ enabled = 0;
++ }
++ link_state->clk_pm_capable = capable;
++ link_state->clk_pm_enabled = enabled;
++ link_state->bios_clk_state = enabled;
++ pcie_set_clock_pm(pdev, policy_to_clkpm_state(pdev));
++}
++
++/*
++ * pcie_aspm_configure_common_clock: check if the 2 ends of a link
++ * could use common clock. If they are, configure them to use the
++ * common clock. That will reduce the ASPM state exit latency.
++ */
++static void pcie_aspm_configure_common_clock(struct pci_dev *pdev)
++{
++ int pos, child_pos;
++ u16 reg16 = 0;
++ struct pci_dev *child_dev;
++ int same_clock = 1;
++
++ /*
++ * all functions of a slot should have the same Slot Clock
++ * Configuration, so just check one function
++ * */
++ child_dev = list_entry(pdev->subordinate->devices.next, struct pci_dev,
++ bus_list);
++ BUG_ON(!child_dev->is_pcie);
++
++ /* Check downstream component if bit Slot Clock Configuration is 1 */
++ child_pos = pci_find_capability(child_dev, PCI_CAP_ID_EXP);
++ pci_read_config_word(child_dev, child_pos + PCI_EXP_LNKSTA, &reg16);
++ if (!(reg16 & PCI_EXP_LNKSTA_SLC))
++ same_clock = 0;
++
++ /* Check upstream component if bit Slot Clock Configuration is 1 */
++ pos = pci_find_capability(pdev, PCI_CAP_ID_EXP);
++ pci_read_config_word(pdev, pos + PCI_EXP_LNKSTA, &reg16);
++ if (!(reg16 & PCI_EXP_LNKSTA_SLC))
++ same_clock = 0;
++
++ /* Configure downstream component, all functions */
++ list_for_each_entry(child_dev, &pdev->subordinate->devices, bus_list) {
++ child_pos = pci_find_capability(child_dev, PCI_CAP_ID_EXP);
++ pci_read_config_word(child_dev, child_pos + PCI_EXP_LNKCTL, &reg16);
++ if (same_clock)
++ reg16 |= PCI_EXP_LNKCTL_CCC;
++ else
++ reg16 &= ~PCI_EXP_LNKCTL_CCC;
++ pci_write_config_word(child_dev, child_pos + PCI_EXP_LNKCTL, reg16);
++ }
++
++ /* Configure upstream component */
++ pci_read_config_word(pdev, pos + PCI_EXP_LNKCTL, &reg16);
++ if (same_clock)
++ reg16 |= PCI_EXP_LNKCTL_CCC;
++ else
++ reg16 &= ~PCI_EXP_LNKCTL_CCC;
++ pci_write_config_word(pdev, pos + PCI_EXP_LNKCTL, reg16);
++
++ /* retrain link */
++ reg16 |= PCI_EXP_LNKCTL_RL;
++ pci_write_config_word(pdev, pos + PCI_EXP_LNKCTL, reg16);
++
++ /* Wait for link training end */
++ while (1) {
++ pci_read_config_word(pdev, pos + PCI_EXP_LNKSTA, &reg16);
++ if (!(reg16 & PCI_EXP_LNKSTA_LT))
++ break;
++ cpu_relax();
++ }
++}
++
++/*
++ * calc_L0S_latency: Convert L0s latency encoding to ns
++ */
++static unsigned int calc_L0S_latency(unsigned int latency_encoding, int ac)
++{
++ unsigned int ns = 64;
++
++ if (latency_encoding == 0x7) {
++ if (ac)
++ ns = -1U;
++ else
++ ns = 5*1000; /* > 4us */
++ } else
++ ns *= (1 << latency_encoding);
++ return ns;
++}
++
++/*
++ * calc_L1_latency: Convert L1 latency encoding to ns
++ */
++static unsigned int calc_L1_latency(unsigned int latency_encoding, int ac)
++{
++ unsigned int ns = 1000;
++
++ if (latency_encoding == 0x7) {
++ if (ac)
++ ns = -1U;
++ else
++ ns = 65*1000; /* > 64us */
++ } else
++ ns *= (1 << latency_encoding);
++ return ns;
++}
++
++static void pcie_aspm_get_cap_device(struct pci_dev *pdev, u32 *state,
++ unsigned int *l0s, unsigned int *l1, unsigned int *enabled)
++{
++ int pos;
++ u16 reg16;
++ u32 reg32;
++ unsigned int latency;
++
++ pos = pci_find_capability(pdev, PCI_CAP_ID_EXP);
++ pci_read_config_dword(pdev, pos + PCI_EXP_LNKCAP, &reg32);
++ *state = (reg32 & PCI_EXP_LNKCAP_ASPMS) >> 10;
++ if (*state != PCIE_LINK_STATE_L0S && *state != (PCIE_LINK_STATE_L1|PCIE_LINK_STATE_L0S))
++ *state = 0;
++ if (*state == 0)
++ return;
++
++ latency = (reg32 & PCI_EXP_LNKCAP_L0SEL) >> 12;
++ *l0s = calc_L0S_latency(latency, 0);
++ if (*state & PCIE_LINK_STATE_L1) {
++ latency = (reg32 & PCI_EXP_LNKCAP_L1EL) >> 15;
++ *l1 = calc_L1_latency(latency, 0);
++ }
++ pci_read_config_word(pdev, pos + PCI_EXP_LNKCTL, &reg16);
++ *enabled = reg16 & (PCIE_LINK_STATE_L0S|PCIE_LINK_STATE_L1);
++}
++
++static void pcie_aspm_cap_init(struct pci_dev *pdev)
++{
++ struct pci_dev *child_dev;
++ u32 state, tmp;
++ struct link_state *link_state = pdev->link_state;
++
++ /* upstream component states */
++ pcie_aspm_get_cap_device(pdev, &link_state->support_state,
++ &link_state->l0s_upper_latency,
++ &link_state->l1_upper_latency,
++ &link_state->enabled_state);
++ /* downstream component states, all functions have the same setting */
++ child_dev = list_entry(pdev->subordinate->devices.next, struct pci_dev,
++ bus_list);
++ pcie_aspm_get_cap_device(child_dev, &state,
++ &link_state->l0s_down_latency,
++ &link_state->l1_down_latency,
++ &tmp);
++ link_state->support_state &= state;
++ if (!link_state->support_state)
++ return;
++ link_state->enabled_state &= link_state->support_state;
++ link_state->bios_aspm_state = link_state->enabled_state;
++
++ /* ENDPOINT states*/
++ list_for_each_entry(child_dev, &pdev->subordinate->devices, bus_list) {
++ int pos;
++ u32 reg32;
++ unsigned int latency;
++ struct endpoint_state *ep_state;
++
++ if (child_dev->pcie_type != PCI_EXP_TYPE_ENDPOINT &&
++ child_dev->pcie_type != PCI_EXP_TYPE_LEG_END)
++ continue;
++
++ ep_state = child_dev->link_state;
++ pos = pci_find_capability(child_dev, PCI_CAP_ID_EXP);
++ pci_read_config_dword(child_dev, pos + PCI_EXP_DEVCAP, &reg32);
++ latency = (reg32 & PCI_EXP_DEVCAP_L0S) >> 6;
++ latency = calc_L0S_latency(latency, 1);
++ ep_state->l0s_acceptable_latency = latency;
++ if (link_state->support_state & PCIE_LINK_STATE_L1) {
++ latency = (reg32 & PCI_EXP_DEVCAP_L1) >> 9;
++ latency = calc_L1_latency(latency, 1);
++ ep_state->l1_acceptable_latency = latency;
++ }
++ }
++}
++
++static unsigned int __pcie_aspm_check_state_one(struct pci_dev *pdev,
++ unsigned int state)
++{
++ struct pci_dev *parent_dev, *tmp_dev;
++ unsigned int latency, l1_latency = 0;
++ struct link_state *link_state;
++ struct endpoint_state *ep_state = pdev->link_state;
++
++ parent_dev = pdev->bus->self;
++ link_state = parent_dev->link_state;
++ state &= link_state->support_state;
++ if (state == 0)
++ return 0;
++
++ /*
++ * Check latency for endpoint device.
++ * TBD: The latency from the endpoint to root complex vary per
++ * switch's upstream link state above the device. Here we just do a
++ * simple check which assumes all links above the device can be in L1
++ * state, that is we just consider the worst case. If switch's upstream
++ * link can't be put into L0S/L1, then our check is too strictly.
++ */
++ tmp_dev = pdev;
++ while (state & (PCIE_LINK_STATE_L0S | PCIE_LINK_STATE_L1)) {
++ parent_dev = tmp_dev->bus->self;
++ link_state = parent_dev->link_state;
++ if (state & PCIE_LINK_STATE_L0S) {
++ latency = max_t(unsigned int,
++ link_state->l0s_upper_latency,
++ link_state->l0s_down_latency);
++ if (latency > ep_state->l0s_acceptable_latency)
++ state &= ~PCIE_LINK_STATE_L0S;
++ }
++ if (state & PCIE_LINK_STATE_L1) {
++ latency = max_t(unsigned int,
++ link_state->l1_upper_latency,
++ link_state->l1_down_latency);
++ if (latency + l1_latency >
++ ep_state->l1_acceptable_latency)
++ state &= ~PCIE_LINK_STATE_L1;
++ }
++ if (!parent_dev->bus->self) /* parent_dev is a root port */
++ break;
++ else {
++ /*
++ * parent_dev is the downstream port of a switch, make
++ * tmp_dev the upstream port of the switch
++ */
++ tmp_dev = parent_dev->bus->self;
++ /*
++ * every switch on the path to root complex need 1 more
++ * microsecond for L1. Spec doesn't mention L0S.
++ */
++ if (state & PCIE_LINK_STATE_L1)
++ l1_latency += 1000;
++ }
++ }
++ return state;
++}
++
++static unsigned int pcie_aspm_check_state(struct pci_dev *pdev,
++ unsigned int state)
++{
++ struct pci_dev *child_dev;
++
++ /* If no child, disable the link */
++ if (list_empty(&pdev->subordinate->devices))
++ return 0;
++ list_for_each_entry(child_dev, &pdev->subordinate->devices, bus_list) {
++ if (child_dev->pcie_type == PCI_EXP_TYPE_PCI_BRIDGE) {
++ /*
++ * If downstream component of a link is pci bridge, we
++ * disable ASPM for now for the link
++ * */
++ state = 0;
++ break;
++ }
++ if ((child_dev->pcie_type != PCI_EXP_TYPE_ENDPOINT &&
++ child_dev->pcie_type != PCI_EXP_TYPE_LEG_END) ||
++ !child_dev->link_state)
++ continue;
++ /* Device not in D0 doesn't need check latency */
++ if (child_dev->current_state == PCI_D1 ||
++ child_dev->current_state == PCI_D2 ||
++ child_dev->current_state == PCI_D3hot ||
++ child_dev->current_state == PCI_D3cold)
++ continue;
++ state = __pcie_aspm_check_state_one(child_dev, state);
++ }
++ return state;
++}
++
++static void __pcie_aspm_config_one_dev(struct pci_dev *pdev, unsigned int state)
++{
++ u16 reg16;
++ int pos = pci_find_capability(pdev, PCI_CAP_ID_EXP);
++
++ pci_read_config_word(pdev, pos + PCI_EXP_LNKCTL, &reg16);
++ reg16 &= ~0x3;
++ reg16 |= state;
++ pci_write_config_word(pdev, pos + PCI_EXP_LNKCTL, reg16);
++}
++
++static void __pcie_aspm_config_link(struct pci_dev *pdev, unsigned int state)
++{
++ struct pci_dev *child_dev;
++ int valid = 1;
++ struct link_state *link_state = pdev->link_state;
++
++ /*
++ * if the downstream component has pci bridge function, don't do ASPM
++ * now
++ */
++ list_for_each_entry(child_dev, &pdev->subordinate->devices, bus_list) {
++ if (child_dev->pcie_type == PCI_EXP_TYPE_PCI_BRIDGE){
++ valid = 0;
++ break;
++ }
++ }
++ if (!valid)
++ return;
++
++ /*
++ * spec 2.0 suggests all functions should be configured the same
++ * setting for ASPM. Enabling ASPM L1 should be done in upstream
++ * component first and then downstream, and vice versa for disabling
++ * ASPM L1. Spec doesn't mention L0S.
++ */
++ if (state & PCIE_LINK_STATE_L1)
++ __pcie_aspm_config_one_dev(pdev, state);
++
++ list_for_each_entry(child_dev, &pdev->subordinate->devices, bus_list)
++ __pcie_aspm_config_one_dev(child_dev, state);
++
++ if (!(state & PCIE_LINK_STATE_L1))
++ __pcie_aspm_config_one_dev(pdev, state);
++
++ link_state->enabled_state = state;
++}
++
++static void __pcie_aspm_configure_link_state(struct pci_dev *pdev, unsigned int state)
++{
++ struct link_state *link_state = pdev->link_state;
++
++ if (link_state->support_state == 0)
++ return;
++ state &= PCIE_LINK_STATE_L0S|PCIE_LINK_STATE_L1;
++
++ /* state 0 means disabling aspm */
++ state = pcie_aspm_check_state(pdev, state);
++ if (link_state->enabled_state == state)
++ return;
++ __pcie_aspm_config_link(pdev, state);
++}
++
++/*
++ * pcie_aspm_configure_link_state: enable/disable PCI express link state
++ * @pdev: the root port or switch downstream port
++ */
++void pcie_aspm_configure_link_state(struct pci_dev *pdev, unsigned int state)
++{
++ down_read(&pci_bus_sem);
++ mutex_lock(&aspm_lock);
++ __pcie_aspm_configure_link_state(pdev, state);
++ mutex_unlock(&aspm_lock);
++ up_read(&pci_bus_sem);
++}
++
++static void free_link_state(struct pci_dev *pdev)
++{
++ struct pci_dev *child_dev;
++
++ list_for_each_entry(child_dev, &pdev->subordinate->devices, bus_list) {
++ kfree(child_dev->link_state);
++ child_dev->link_state = NULL;
++ }
++ kfree(pdev->link_state);
++ pdev->link_state = NULL;
++}
++
++/*
++ * pcie_aspm_init_link_state: Initiate PCI express link state.
++ * It is called after the pcie and its children devices are scaned.
++ * @pdev: the root port or switch downstream port
++ */
++void pcie_aspm_init_link_state(struct pci_dev *pdev)
++{
++ unsigned int state;
++ struct link_state *link_state;
++ struct pci_dev *child_dev;
++ struct endpoint_state *ep_state;
++ int error = 0;
++
++ if (aspm_disabled || !pdev->is_pcie || pdev->link_state)
++ return;
++ if (pdev->pcie_type != PCI_EXP_TYPE_ROOT_PORT &&
++ pdev->pcie_type != PCI_EXP_TYPE_DOWNSTREAM)
++ return;
++ down_read(&pci_bus_sem);
++ if (list_empty(&pdev->subordinate->devices))
++ goto out;
++
++ mutex_lock(&aspm_lock);
++
++ link_state = kzalloc(sizeof(*link_state), GFP_KERNEL);
++ if (!link_state)
++ goto unlock_out;
++ pdev->link_state = link_state;
++ list_for_each_entry(child_dev, &pdev->subordinate->devices, bus_list) {
++ ep_state = kzalloc(sizeof(*ep_state), GFP_KERNEL);
++ if (!ep_state) {
++ error = 1;
++ goto unlock_out;
++ }
++ child_dev->link_state = ep_state;
++ }
++
++ pcie_aspm_configure_common_clock(pdev);
++
++ pcie_aspm_cap_init(pdev);
++
++ /* config link state to avoid BIOS error */
++ state = pcie_aspm_check_state(pdev, policy_to_aspm_state(pdev));
++ __pcie_aspm_config_link(pdev, state);
++
++ pcie_check_clock_pm(pdev);
++
++ link_state->pdev = pdev;
++ list_add(&link_state->sibiling, &link_list);
++
++unlock_out:
++ if (error)
++ free_link_state(pdev);
++ mutex_unlock(&aspm_lock);
++out:
++ up_read(&pci_bus_sem);
++}
++
++/* @pdev: the endpoint device */
++void pcie_aspm_exit_link_state(struct pci_dev *pdev)
++{
++ struct pci_dev *parent = pdev->bus->self;
++ struct link_state *link_state = parent->link_state;
++
++ if (aspm_disabled || !pdev->is_pcie || !parent || !link_state)
++ return;
++ if (parent->pcie_type != PCI_EXP_TYPE_ROOT_PORT &&
++ parent->pcie_type != PCI_EXP_TYPE_DOWNSTREAM)
++ return;
++ down_read(&pci_bus_sem);
++ mutex_lock(&aspm_lock);
++
++ /*
++ * All PCIe functions are in one slot, remove one function will remove
++ * the the whole slot, so just wait
++ */
++ if (!list_empty(&parent->subordinate->devices)) {
++ kfree(pdev->link_state);
++ pdev->link_state = NULL;
++ goto out;
++ }
++
++ /* All functions are removed, so just disable ASPM for the link */
++ __pcie_aspm_config_one_dev(parent, 0);
++ list_del(&link_state->sibiling);
++ /* Clock PM is for endpoint device */
++
++ free_link_state(parent);
++out:
++ mutex_unlock(&aspm_lock);
++ up_read(&pci_bus_sem);
++}
++
++/* @pdev: the root port or switch downstream port */
++void pcie_aspm_pm_state_change(struct pci_dev *pdev)
++{
++ struct link_state *link_state = pdev->link_state;
++
++ if (aspm_disabled || !pdev->is_pcie || !pdev->link_state)
++ return;
++ if (pdev->pcie_type != PCI_EXP_TYPE_ROOT_PORT &&
++ pdev->pcie_type != PCI_EXP_TYPE_DOWNSTREAM)
++ return;
++ /*
++ * devices changed PM state, we should recheck if latency meets all
++ * functions' requirement
++ */
++ pcie_aspm_configure_link_state(pdev, link_state->enabled_state);
++}
++
++/*
++ * pci_disable_link_state - disable pci device's link state, so the link will
++ * never enter specific states
++ */
++void pci_disable_link_state(struct pci_dev *pdev, int state)
++{
++ struct pci_dev *parent = pdev->bus->self;
++ struct link_state *link_state;
++
++ if (aspm_disabled || !pdev->is_pcie || !pdev->link_state)
++ return;
++ if (pdev->pcie_type == PCI_EXP_TYPE_ROOT_PORT ||
++ pdev->pcie_type == PCI_EXP_TYPE_DOWNSTREAM)
++ parent = pdev;
++ if (!parent)
++ return;
++
++ down_read(&pci_bus_sem);
++ mutex_lock(&aspm_lock);
++ link_state = parent->link_state;
++ link_state->support_state &= ~(state & (PCIE_LINK_STATE_L0S|PCIE_LINK_STATE_L1));
++ if (state & PCIE_LINK_STATE_CLKPM)
++ link_state->clk_pm_capable = 0;
++
++ __pcie_aspm_configure_link_state(parent, link_state->enabled_state);
++ if (!link_state->clk_pm_capable && link_state->clk_pm_enabled)
++ pcie_set_clock_pm(parent, 0);
++ mutex_unlock(&aspm_lock);
++ up_read(&pci_bus_sem);
++}
++EXPORT_SYMBOL(pci_disable_link_state);
++
++static int pcie_aspm_set_policy(const char *val, struct kernel_param *kp)
++{
++ int i;
++ struct pci_dev *pdev;
++ struct link_state *link_state;
++
++ for (i = 0; i < ARRAY_SIZE(policy_str); i++)
++ if (!strncmp(val, policy_str[i], strlen(policy_str[i])))
++ break;
++ if (i >= ARRAY_SIZE(policy_str))
++ return -EINVAL;
++ if (i == aspm_policy)
++ return 0;
++
++ down_read(&pci_bus_sem);
++ mutex_lock(&aspm_lock);
++ aspm_policy = i;
++ list_for_each_entry(link_state, &link_list, sibiling) {
++ pdev = link_state->pdev;
++ __pcie_aspm_configure_link_state(pdev,
++ policy_to_aspm_state(pdev));
++ if (link_state->clk_pm_capable &&
++ link_state->clk_pm_enabled != policy_to_clkpm_state(pdev))
++ pcie_set_clock_pm(pdev, policy_to_clkpm_state(pdev));
++
++ }
++ mutex_unlock(&aspm_lock);
++ up_read(&pci_bus_sem);
++ return 0;
++}
++
++static int pcie_aspm_get_policy(char *buffer, struct kernel_param *kp)
++{
++ int i, cnt = 0;
++ for (i = 0; i < ARRAY_SIZE(policy_str); i++)
++ if (i == aspm_policy)
++ cnt += sprintf(buffer + cnt, "[%s] ", policy_str[i]);
++ else
++ cnt += sprintf(buffer + cnt, "%s ", policy_str[i]);
++ return cnt;
++}
++
++module_param_call(policy, pcie_aspm_set_policy, pcie_aspm_get_policy,
++ NULL, 0644);
++
++#ifdef CONFIG_PCIEASPM_DEBUG
++static ssize_t link_state_show(struct device *dev,
++ struct device_attribute *attr,
++ char *buf)
++{
++ struct pci_dev *pci_device = to_pci_dev(dev);
++ struct link_state *link_state = pci_device->link_state;
++
++ return sprintf(buf, "%d\n", link_state->enabled_state);
++}
++
++static ssize_t link_state_store(struct device *dev,
++ struct device_attribute *attr,
++ const char *buf,
++ size_t n)
++{
++ struct pci_dev *pci_device = to_pci_dev(dev);
++ int state;
++
++ if (n < 1)
++ return -EINVAL;
++ state = buf[0]-'0';
++ if (state >= 0 && state <= 3) {
++ /* setup link aspm state */
++ pcie_aspm_configure_link_state(pci_device, state);
++ return n;
++ }
++
++ return -EINVAL;
++}
++
++static ssize_t clk_ctl_show(struct device *dev,
++ struct device_attribute *attr,
++ char *buf)
++{
++ struct pci_dev *pci_device = to_pci_dev(dev);
++ struct link_state *link_state = pci_device->link_state;
++
++ return sprintf(buf, "%d\n", link_state->clk_pm_enabled);
++}
++
++static ssize_t clk_ctl_store(struct device *dev,
++ struct device_attribute *attr,
++ const char *buf,
++ size_t n)
++{
++ struct pci_dev *pci_device = to_pci_dev(dev);
++ int state;
++
++ if (n < 1)
++ return -EINVAL;
++ state = buf[0]-'0';
++
++ down_read(&pci_bus_sem);
++ mutex_lock(&aspm_lock);
++ pcie_set_clock_pm(pci_device, !!state);
++ mutex_unlock(&aspm_lock);
++ up_read(&pci_bus_sem);
++
++ return n;
++}
++
++static DEVICE_ATTR(link_state, 0644, link_state_show, link_state_store);
++static DEVICE_ATTR(clk_ctl, 0644, clk_ctl_show, clk_ctl_store);
++
++static char power_group[] = "power";
++void pcie_aspm_create_sysfs_dev_files(struct pci_dev *pdev)
++{
++ struct link_state *link_state = pdev->link_state;
++
++ if (!pdev->is_pcie || (pdev->pcie_type != PCI_EXP_TYPE_ROOT_PORT &&
++ pdev->pcie_type != PCI_EXP_TYPE_DOWNSTREAM))
++ return;
++
++ if (link_state->support_state)
++ sysfs_add_file_to_group(&pdev->dev.kobj,
++ &dev_attr_link_state.attr, power_group);
++ if (link_state->clk_pm_capable)
++ sysfs_add_file_to_group(&pdev->dev.kobj,
++ &dev_attr_clk_ctl.attr, power_group);
++}
++
++void pcie_aspm_remove_sysfs_dev_files(struct pci_dev *pdev)
++{
++ struct link_state *link_state = pdev->link_state;
++
++ if (!pdev->is_pcie || (pdev->pcie_type != PCI_EXP_TYPE_ROOT_PORT &&
++ pdev->pcie_type != PCI_EXP_TYPE_DOWNSTREAM))
++ return;
++
++ if (link_state->support_state)
++ sysfs_remove_file_from_group(&pdev->dev.kobj,
++ &dev_attr_link_state.attr, power_group);
++ if (link_state->clk_pm_capable)
++ sysfs_remove_file_from_group(&pdev->dev.kobj,
++ &dev_attr_clk_ctl.attr, power_group);
++}
++#endif
++
++static int __init pcie_aspm_disable(char *str)
++{
++ aspm_disabled = 1;
++ return 1;
++}
++
++__setup("pcie_noaspm", pcie_aspm_disable);
++
++static int __init pcie_aspm_init(void)
++{
++ if (aspm_disabled)
++ return 0;
++ pci_osc_support_set(OSC_ACTIVE_STATE_PWR_SUPPORT|
++ OSC_CLOCK_PWR_CAPABILITY_SUPPORT);
++ return 0;
++}
++
++fs_initcall(pcie_aspm_init);
+Index: linux/include/linux/aspm.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux/include/linux/aspm.h 2008-01-18 09:43:02.000000000 +0800
+@@ -0,0 +1,44 @@
++/*
++ * aspm.h
++ *
++ * PCI Express ASPM defines and function prototypes
++ *
++ * Copyright (C) 2007 Intel Corp.
++ * Zhang Yanmin (yanmin.zhang@intel.com)
++ * Shaohua Li (shaohua.li@intel.com)
++ *
++ * For more information, please consult the following manuals (look at
++ * http://www.pcisig.com/ for how to get them):
++ *
++ * PCI Express Specification
++ */
++
++#ifndef LINUX_ASPM_H
++#define LINUX_ASPM_H
++
++#include <linux/pci.h>
++
++#define PCIE_LINK_STATE_L0S 1
++#define PCIE_LINK_STATE_L1 2
++#define PCIE_LINK_STATE_CLKPM 4
++
++#ifdef CONFIG_PCIEASPM
++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);
++#else
++#define pcie_aspm_init_link_state(pdev) do {} while (0)
++#define pcie_aspm_exit_link_state(pdev) do {} while (0)
++#define pcie_aspm_pm_state_change(pdev) do {} while (0)
++#define pci_disable_link_state(pdev, state) do {} while (0)
++#endif
++
++#ifdef CONFIG_PCIEASPM_DEBUG /* this depends on CONFIG_PCIEASPM */
++extern void pcie_aspm_create_sysfs_dev_files(struct pci_dev *pdev);
++extern void pcie_aspm_remove_sysfs_dev_files(struct pci_dev *pdev);
++#else
++#define pcie_aspm_create_sysfs_dev_files(pdev) do {} while (0)
++#define pcie_aspm_remove_sysfs_dev_files(pdev) do {} while (0)
++#endif
++#endif /* LINUX_ASPM_H */
+Index: linux/drivers/pci/pcie/Kconfig
+===================================================================
+--- linux.orig/drivers/pci/pcie/Kconfig 2008-01-16 15:59:42.000000000 +0800
++++ linux/drivers/pci/pcie/Kconfig 2008-01-18 09:41:20.000000000 +0800
+@@ -26,3 +26,23 @@ config HOTPLUG_PCI_PCIE
+ When in doubt, say N.
+
+ source "drivers/pci/pcie/aer/Kconfig"
++
++#
++# PCI Express ASPM
++#
++config PCIEASPM
++ bool "PCI Express ASPM support(Experimental)"
++ depends on PCI && EXPERIMENTAL
++ default y
++ help
++ This enables PCI Express ASPM (Active State Power Management) and
++ Clock Power Management. ASPM supports state L0/L0s/L1.
++
++ When in doubt, say N.
++config PCIEASPM_DEBUG
++ bool "Debug PCI Express ASPM -NICHT AKTIVIEREN-"
++ depends on PCIEASPM
++ default n
++ help
++ This enables PCI Express ASPM debug support. It will add per-device
++ interface to control ASPM. This will break booting on Thinkpad R61s
+Index: linux/include/linux/pci.h
+===================================================================
+--- linux.orig/include/linux/pci.h 2008-01-16 15:59:42.000000000 +0800
++++ linux/include/linux/pci.h 2008-01-18 09:41:20.000000000 +0800
+@@ -164,6 +164,10 @@ struct pci_dev {
+ this is D0-D3, D0 being fully functional,
+ and D3 being off. */
+
++#ifdef CONFIG_PCIEASPM
++ void *link_state; /* ASPM link state. */
++#endif
++
+ pci_channel_state_t error_state; /* current connectivity state */
+ struct device dev; /* Generic device interface */
+
+Index: linux/include/linux/pci_regs.h
+===================================================================
+--- linux.orig/include/linux/pci_regs.h 2008-01-16 15:59:42.000000000 +0800
++++ linux/include/linux/pci_regs.h 2008-01-18 09:41:20.000000000 +0800
+@@ -395,9 +395,17 @@
+ #define PCI_EXP_DEVSTA_AUXPD 0x10 /* AUX Power Detected */
+ #define PCI_EXP_DEVSTA_TRPND 0x20 /* Transactions Pending */
+ #define PCI_EXP_LNKCAP 12 /* Link Capabilities */
++#define PCI_EXP_LNKCAP_ASPMS 0xc00 /* ASPM Support */
++#define PCI_EXP_LNKCAP_L0SEL 0x7000 /* L0s Exit Latency */
++#define PCI_EXP_LNKCAP_L1EL 0x38000 /* L1 Exit Latency */
++#define PCI_EXP_LNKCAP_CLKPM 0x40000 /* L1 Clock Power Management */
+ #define PCI_EXP_LNKCTL 16 /* Link Control */
++#define PCI_EXP_LNKCTL_RL 0x20 /* Retrain Link */
++#define PCI_EXP_LNKCTL_CCC 0x40 /* Common Clock COnfiguration */
+ #define PCI_EXP_LNKCTL_CLKREQ_EN 0x100 /* Enable clkreq */
+ #define PCI_EXP_LNKSTA 18 /* Link Status */
++#define PCI_EXP_LNKSTA_LT 0x800 /* Link Training */
++#define PCI_EXP_LNKSTA_SLC 0x1000 /* Slot Clock Configuration */
+ #define PCI_EXP_SLTCAP 20 /* Slot Capabilities */
+ #define PCI_EXP_SLTCTL 24 /* Slot Control */
+ #define PCI_EXP_SLTSTA 26 /* Slot Status */
+Index: linux/drivers/pci/probe.c
+===================================================================
+--- linux.orig/drivers/pci/probe.c 2008-01-16 15:59:42.000000000 +0800
++++ linux/drivers/pci/probe.c 2008-01-18 09:41:20.000000000 +0800
+@@ -9,6 +9,7 @@
+ #include <linux/slab.h>
+ #include <linux/module.h>
+ #include <linux/cpumask.h>
++#include <linux/aspm.h>
+ #include "pci.h"
+
+ #define CARDBUS_LATENCY_TIMER 176 /* secondary latency timer */
+@@ -1011,6 +1012,10 @@ int pci_scan_slot(struct pci_bus *bus, i
+ break;
+ }
+ }
++
++ if (bus->self)
++ pcie_aspm_init_link_state(bus->self);
++
+ return nr;
+ }
+
+Index: linux/drivers/pci/remove.c
+===================================================================
+--- linux.orig/drivers/pci/remove.c 2008-01-16 15:59:42.000000000 +0800
++++ linux/drivers/pci/remove.c 2008-01-18 09:41:20.000000000 +0800
+@@ -1,5 +1,6 @@
+ #include <linux/pci.h>
+ #include <linux/module.h>
++#include <linux/aspm.h>
+ #include "pci.h"
+
+ static void pci_free_resources(struct pci_dev *dev)
+@@ -30,6 +31,9 @@ static void pci_stop_dev(struct pci_dev
+ dev->global_list.next = dev->global_list.prev = NULL;
+ up_write(&pci_bus_sem);
+ }
++
++ if (dev->bus->self)
++ pcie_aspm_exit_link_state(dev);
+ }
+
+ static void pci_destroy_dev(struct pci_dev *dev)
+Index: linux/drivers/pci/pci.c
+===================================================================
+--- linux.orig/drivers/pci/pci.c 2008-01-18 09:41:18.000000000 +0800
++++ linux/drivers/pci/pci.c 2008-01-18 09:41:20.000000000 +0800
+@@ -18,6 +18,7 @@
+ #include <linux/spinlock.h>
+ #include <linux/string.h>
+ #include <linux/log2.h>
++#include <linux/aspm.h>
+ #include <asm/dma.h> /* isa_dma_bridge_buggy */
+ #include "pci.h"
+
+@@ -501,6 +502,9 @@ pci_set_power_state(struct pci_dev *dev,
+ if (need_restore)
+ pci_restore_bars(dev);
+
++ if (dev->bus->self)
++ pcie_aspm_pm_state_change(dev->bus->self);
++
+ return 0;
+ }
+
+Index: linux/drivers/pci/pci-sysfs.c
+===================================================================
+--- linux.orig/drivers/pci/pci-sysfs.c 2008-01-16 15:59:42.000000000 +0800
++++ linux/drivers/pci/pci-sysfs.c 2008-01-18 09:41:20.000000000 +0800
+@@ -21,6 +21,7 @@
+ #include <linux/topology.h>
+ #include <linux/mm.h>
+ #include <linux/capability.h>
++#include <linux/aspm.h>
+ #include "pci.h"
+
+ static int sysfs_initialized; /* = 0 */
+@@ -650,6 +651,8 @@ int __must_check pci_create_sysfs_dev_fi
+ if (pcibios_add_platform_entries(pdev))
+ goto err_rom_file;
+
++ pcie_aspm_create_sysfs_dev_files(pdev);
++
+ return 0;
+
+ err_rom_file:
+@@ -679,6 +682,8 @@ void pci_remove_sysfs_dev_files(struct p
+ if (!sysfs_initialized)
+ return;
+
++ pcie_aspm_remove_sysfs_dev_files(pdev);
++
+ if (pdev->cfg_size < 4096)
+ sysfs_remove_bin_file(&pdev->dev.kobj, &pci_config_attr);
+ else
+
diff --git a/sys-kernel/thinkpad-sources/files/configs/config-for-core-or-core2-2.6.24-r1 b/sys-kernel/thinkpad-sources/files/configs/config-for-core-or-core2-2.6.24-r1
new file mode 100644
index 0000000..4afb031
--- /dev/null
+++ b/sys-kernel/thinkpad-sources/files/configs/config-for-core-or-core2-2.6.24-r1
@@ -0,0 +1,2078 @@
+#
+# Automatically generated make config: don't edit
+# Linux kernel version: 2.6.24-thinkpad-r1
+# Tue Feb 5 11:20:29 2008
+#
+# CONFIG_64BIT is not set
+CONFIG_X86_32=y
+# CONFIG_X86_64 is not set
+CONFIG_X86=y
+CONFIG_GENERIC_TIME=y
+CONFIG_GENERIC_CMOS_UPDATE=y
+CONFIG_CLOCKSOURCE_WATCHDOG=y
+CONFIG_GENERIC_CLOCKEVENTS=y
+CONFIG_GENERIC_CLOCKEVENTS_BROADCAST=y
+CONFIG_LOCKDEP_SUPPORT=y
+CONFIG_STACKTRACE_SUPPORT=y
+CONFIG_SEMAPHORE_SLEEPERS=y
+CONFIG_MMU=y
+CONFIG_ZONE_DMA=y
+CONFIG_QUICKLIST=y
+CONFIG_GENERIC_ISA_DMA=y
+CONFIG_GENERIC_IOMAP=y
+CONFIG_GENERIC_BUG=y
+CONFIG_GENERIC_HWEIGHT=y
+CONFIG_ARCH_MAY_HAVE_PC_FDC=y
+CONFIG_DMI=y
+# CONFIG_RWSEM_GENERIC_SPINLOCK is not set
+CONFIG_RWSEM_XCHGADD_ALGORITHM=y
+# CONFIG_ARCH_HAS_ILOG2_U32 is not set
+# CONFIG_ARCH_HAS_ILOG2_U64 is not set
+CONFIG_GENERIC_CALIBRATE_DELAY=y
+# CONFIG_GENERIC_TIME_VSYSCALL is not set
+CONFIG_ARCH_SUPPORTS_OPROFILE=y
+# CONFIG_ZONE_DMA32 is not set
+CONFIG_ARCH_POPULATES_NODE_MAP=y
+# CONFIG_AUDIT_ARCH is not set
+CONFIG_GENERIC_HARDIRQS=y
+CONFIG_GENERIC_IRQ_PROBE=y
+CONFIG_GENERIC_PENDING_IRQ=y
+CONFIG_X86_SMP=y
+CONFIG_X86_HT=y
+CONFIG_X86_BIOS_REBOOT=y
+CONFIG_X86_TRAMPOLINE=y
+CONFIG_KTIME_SCALAR=y
+CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
+
+#
+# General setup
+#
+CONFIG_EXPERIMENTAL=y
+CONFIG_LOCK_KERNEL=y
+CONFIG_INIT_ENV_ARG_LIMIT=32
+CONFIG_LOCALVERSION=""
+CONFIG_LOCALVERSION_AUTO=y
+CONFIG_SWAP=y
+CONFIG_SYSVIPC=y
+CONFIG_SYSVIPC_SYSCTL=y
+CONFIG_POSIX_MQUEUE=y
+# CONFIG_BSD_PROCESS_ACCT is not set
+# CONFIG_TASKSTATS is not set
+# CONFIG_USER_NS is not set
+# CONFIG_PID_NS is not set
+CONFIG_AUDIT=y
+CONFIG_AUDITSYSCALL=y
+CONFIG_AUDIT_TREE=y
+# CONFIG_IKCONFIG is not set
+CONFIG_LOG_BUF_SHIFT=15
+# CONFIG_CGROUPS is not set
+CONFIG_FAIR_GROUP_SCHED=y
+CONFIG_FAIR_USER_SCHED=y
+# CONFIG_FAIR_CGROUP_SCHED is not set
+# CONFIG_SYSFS_DEPRECATED is not set
+# CONFIG_RELAY is not set
+# CONFIG_BLK_DEV_INITRD is not set
+# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
+CONFIG_SYSCTL=y
+# CONFIG_EMBEDDED is not set
+CONFIG_UID16=y
+CONFIG_SYSCTL_SYSCALL=y
+CONFIG_KALLSYMS=y
+# CONFIG_KALLSYMS_ALL is not set
+# CONFIG_KALLSYMS_EXTRA_PASS is not set
+CONFIG_HOTPLUG=y
+CONFIG_PRINTK=y
+CONFIG_BUG=y
+CONFIG_ELF_CORE=y
+CONFIG_BASE_FULL=y
+CONFIG_FUTEX=y
+CONFIG_ANON_INODES=y
+CONFIG_EPOLL=y
+CONFIG_SIGNALFD=y
+CONFIG_EVENTFD=y
+CONFIG_SHMEM=y
+CONFIG_VM_EVENT_COUNTERS=y
+CONFIG_SLAB=y
+# CONFIG_SLUB is not set
+# CONFIG_SLOB is not set
+CONFIG_SLABINFO=y
+CONFIG_RT_MUTEXES=y
+# CONFIG_TINY_SHMEM is not set
+CONFIG_BASE_SMALL=0
+CONFIG_MODULES=y
+CONFIG_MODULE_UNLOAD=y
+CONFIG_MODULE_FORCE_UNLOAD=y
+# CONFIG_MODVERSIONS is not set
+# CONFIG_MODULE_SRCVERSION_ALL is not set
+CONFIG_KMOD=y
+CONFIG_STOP_MACHINE=y
+CONFIG_BLOCK=y
+# CONFIG_LBD is not set
+# CONFIG_BLK_DEV_IO_TRACE is not set
+# CONFIG_LSF is not set
+# CONFIG_BLK_DEV_BSG is not set
+
+#
+# IO Schedulers
+#
+CONFIG_IOSCHED_NOOP=y
+CONFIG_IOSCHED_AS=y
+CONFIG_IOSCHED_DEADLINE=y
+CONFIG_IOSCHED_CFQ=y
+# CONFIG_DEFAULT_AS is not set
+# CONFIG_DEFAULT_DEADLINE is not set
+CONFIG_DEFAULT_CFQ=y
+# CONFIG_DEFAULT_NOOP is not set
+CONFIG_DEFAULT_IOSCHED="cfq"
+
+#
+# Processor type and features
+#
+CONFIG_TICK_ONESHOT=y
+CONFIG_NO_HZ=y
+CONFIG_HIGH_RES_TIMERS=y
+CONFIG_GENERIC_CLOCKEVENTS_BUILD=y
+CONFIG_SMP=y
+CONFIG_X86_PC=y
+# CONFIG_X86_ELAN is not set
+# CONFIG_X86_VOYAGER is not set
+# CONFIG_X86_NUMAQ is not set
+# CONFIG_X86_SUMMIT is not set
+# CONFIG_X86_BIGSMP is not set
+# CONFIG_X86_VISWS is not set
+# CONFIG_X86_GENERICARCH is not set
+# CONFIG_X86_ES7000 is not set
+# CONFIG_X86_VSMP is not set
+CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
+# CONFIG_PARAVIRT_GUEST is not set
+# CONFIG_M386 is not set
+# CONFIG_M486 is not set
+# CONFIG_M586 is not set
+# CONFIG_M586TSC is not set
+# CONFIG_M586MMX is not set
+# CONFIG_M686 is not set
+# CONFIG_MPENTIUMII is not set
+# CONFIG_MPENTIUMIII is not set
+# CONFIG_MPENTIUMM is not set
+# CONFIG_MPENTIUM4 is not set
+# CONFIG_MK6 is not set
+# CONFIG_MK7 is not set
+# CONFIG_MK8 is not set
+# CONFIG_MCRUSOE is not set
+# CONFIG_MEFFICEON is not set
+# CONFIG_MWINCHIPC6 is not set
+# CONFIG_MWINCHIP2 is not set
+# CONFIG_MWINCHIP3D is not set
+# CONFIG_MGEODEGX1 is not set
+# CONFIG_MGEODE_LX is not set
+# CONFIG_MCYRIXIII is not set
+# CONFIG_MVIAC3_2 is not set
+# CONFIG_MVIAC7 is not set
+# CONFIG_MPSC is not set
+CONFIG_MCORE2=y
+# CONFIG_GENERIC_CPU is not set
+# CONFIG_X86_GENERIC is not set
+CONFIG_X86_CMPXCHG=y
+CONFIG_X86_L1_CACHE_SHIFT=6
+CONFIG_X86_XADD=y
+CONFIG_X86_WP_WORKS_OK=y
+CONFIG_X86_INVLPG=y
+CONFIG_X86_BSWAP=y
+CONFIG_X86_POPAD_OK=y
+CONFIG_X86_GOOD_APIC=y
+CONFIG_X86_INTEL_USERCOPY=y
+CONFIG_X86_USE_PPRO_CHECKSUM=y
+CONFIG_X86_TSC=y
+CONFIG_X86_MINIMUM_CPU_FAMILY=4
+CONFIG_HPET_TIMER=y
+CONFIG_HPET_EMULATE_RTC=y
+CONFIG_NR_CPUS=2
+# CONFIG_SCHED_SMT is not set
+CONFIG_SCHED_MC=y
+# CONFIG_PREEMPT_NONE is not set
+# CONFIG_PREEMPT_VOLUNTARY is not set
+CONFIG_PREEMPT=y
+CONFIG_PREEMPT_BKL=y
+CONFIG_X86_LOCAL_APIC=y
+CONFIG_X86_IO_APIC=y
+CONFIG_X86_MCE=y
+# CONFIG_X86_MCE_NONFATAL is not set
+# CONFIG_X86_MCE_P4THERMAL is not set
+CONFIG_VM86=y
+# CONFIG_TOSHIBA is not set
+# CONFIG_I8K is not set
+# CONFIG_X86_REBOOTFIXUPS is not set
+# CONFIG_MICROCODE is not set
+# CONFIG_X86_MSR is not set
+# CONFIG_X86_CPUID is not set
+# CONFIG_NOHIGHMEM is not set
+CONFIG_HIGHMEM4G=y
+# CONFIG_HIGHMEM64G is not set
+CONFIG_PAGE_OFFSET=0xC0000000
+CONFIG_HIGHMEM=y
+CONFIG_ARCH_FLATMEM_ENABLE=y
+CONFIG_ARCH_SPARSEMEM_ENABLE=y
+CONFIG_ARCH_SELECT_MEMORY_MODEL=y
+CONFIG_SELECT_MEMORY_MODEL=y
+CONFIG_FLATMEM_MANUAL=y
+# CONFIG_DISCONTIGMEM_MANUAL is not set
+# CONFIG_SPARSEMEM_MANUAL is not set
+CONFIG_FLATMEM=y
+CONFIG_FLAT_NODE_MEM_MAP=y
+CONFIG_SPARSEMEM_STATIC=y
+# CONFIG_SPARSEMEM_VMEMMAP_ENABLE is not set
+CONFIG_SPLIT_PTLOCK_CPUS=4
+# CONFIG_RESOURCES_64BIT is not set
+CONFIG_ZONE_DMA_FLAG=1
+CONFIG_BOUNCE=y
+CONFIG_NR_QUICK=1
+CONFIG_VIRT_TO_BUS=y
+CONFIG_HIGHPTE=y
+# CONFIG_MATH_EMULATION is not set
+CONFIG_MTRR=y
+# CONFIG_EFI is not set
+# CONFIG_IRQBALANCE is not set
+CONFIG_SECCOMP=y
+# CONFIG_HZ_100 is not set
+# CONFIG_HZ_250 is not set
+CONFIG_HZ_300=y
+# CONFIG_HZ_1000 is not set
+CONFIG_HZ=300
+# CONFIG_KEXEC is not set
+# CONFIG_CRASH_DUMP is not set
+CONFIG_PHYSICAL_START=0x100000
+# CONFIG_RELOCATABLE is not set
+CONFIG_PHYSICAL_ALIGN=0x100000
+CONFIG_HOTPLUG_CPU=y
+# CONFIG_COMPAT_VDSO is not set
+CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y
+
+#
+# Power management options
+#
+CONFIG_PM=y
+# CONFIG_PM_LEGACY is not set
+# CONFIG_PM_DEBUG is not set
+CONFIG_PM_SLEEP_SMP=y
+CONFIG_PM_SLEEP=y
+CONFIG_SUSPEND_SMP_POSSIBLE=y
+CONFIG_SUSPEND=y
+CONFIG_HIBERNATION_SMP_POSSIBLE=y
+CONFIG_HIBERNATION=y
+CONFIG_PM_STD_PARTITION="/dev/sda5"
+CONFIG_TOI_CORE=y
+
+#
+# Image Storage (you need at least one allocator)
+#
+CONFIG_TOI_FILE=y
+CONFIG_TOI_SWAP=y
+
+#
+# General Options
+#
+CONFIG_TOI_DEFAULT_PRE_HIBERNATE=""
+CONFIG_TOI_DEFAULT_POST_HIBERNATE=""
+CONFIG_TOI_CRYPTO=y
+CONFIG_TOI_USERUI=y
+CONFIG_TOI_USERUI_DEFAULT_PATH="/usr/local/sbin/tuxonice_fbsplash"
+# CONFIG_TOI_KEEP_IMAGE is not set
+CONFIG_TOI_REPLACE_SWSUSP=y
+# CONFIG_TOI_CLUSTER is not set
+CONFIG_TOI_CHECKSUM=y
+CONFIG_TOI_DEFAULT_WAIT=25
+# CONFIG_TOI_PAGEFLAGS_TEST is not set
+CONFIG_TOI=y
+CONFIG_ACPI=y
+CONFIG_ACPI_SLEEP=y
+CONFIG_ACPI_PROCFS=y
+CONFIG_ACPI_PROCFS_POWER=y
+CONFIG_ACPI_SYSFS_POWER=y
+CONFIG_ACPI_PROC_EVENT=y
+CONFIG_ACPI_AC=y
+CONFIG_ACPI_BATTERY=y
+CONFIG_ACPI_BUTTON=y
+CONFIG_ACPI_FAN=y
+CONFIG_ACPI_DOCK=y
+CONFIG_ACPI_BAY=y
+CONFIG_ACPI_PROCESSOR=y
+CONFIG_ACPI_HOTPLUG_CPU=y
+CONFIG_ACPI_THERMAL=y
+# CONFIG_ACPI_ASUS is not set
+# CONFIG_ACPI_TOSHIBA is not set
+CONFIG_ACPI_BLACKLIST_YEAR=0
+# CONFIG_ACPI_DEBUG is not set
+CONFIG_ACPI_EC=y
+CONFIG_ACPI_POWER=y
+CONFIG_ACPI_SYSTEM=y
+CONFIG_X86_PM_TIMER=y
+CONFIG_ACPI_CONTAINER=y
+# CONFIG_ACPI_SBS is not set
+# CONFIG_APM is not set
+
+#
+# CPU Frequency scaling
+#
+CONFIG_CPU_FREQ=y
+CONFIG_CPU_FREQ_TABLE=y
+# CONFIG_CPU_FREQ_DEBUG is not set
+CONFIG_CPU_FREQ_STAT=y
+CONFIG_CPU_FREQ_STAT_DETAILS=y
+# CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE is not set
+# CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE is not set
+CONFIG_CPU_FREQ_DEFAULT_GOV_ONDEMAND=y
+# CONFIG_CPU_FREQ_DEFAULT_GOV_CONSERVATIVE is not set
+CONFIG_CPU_FREQ_GOV_PERFORMANCE=y
+CONFIG_CPU_FREQ_GOV_POWERSAVE=y
+CONFIG_CPU_FREQ_GOV_USERSPACE=y
+CONFIG_CPU_FREQ_GOV_ONDEMAND=y
+CONFIG_CPU_FREQ_GOV_CONSERVATIVE=y
+
+#
+# CPUFreq processor drivers
+#
+CONFIG_X86_ACPI_CPUFREQ=y
+# CONFIG_X86_POWERNOW_K6 is not set
+# CONFIG_X86_POWERNOW_K7 is not set
+# CONFIG_X86_POWERNOW_K8 is not set
+# CONFIG_X86_GX_SUSPMOD is not set
+CONFIG_X86_SPEEDSTEP_CENTRINO=y
+CONFIG_X86_SPEEDSTEP_CENTRINO_TABLE=y
+# CONFIG_X86_SPEEDSTEP_ICH is not set
+# CONFIG_X86_SPEEDSTEP_SMI is not set
+# CONFIG_X86_P4_CLOCKMOD is not set
+# CONFIG_X86_CPUFREQ_NFORCE2 is not set
+# CONFIG_X86_LONGRUN is not set
+# CONFIG_X86_LONGHAUL is not set
+# CONFIG_X86_E_POWERSAVER is not set
+
+#
+# shared options
+#
+# CONFIG_X86_ACPI_CPUFREQ_PROC_INTF is not set
+# CONFIG_X86_SPEEDSTEP_LIB is not set
+CONFIG_CPU_IDLE=y
+CONFIG_CPU_IDLE_GOV_LADDER=y
+CONFIG_CPU_IDLE_GOV_MENU=y
+
+#
+# Bus options (PCI etc.)
+#
+CONFIG_PCI=y
+# CONFIG_PCI_GOBIOS is not set
+# CONFIG_PCI_GOMMCONFIG is not set
+# CONFIG_PCI_GODIRECT is not set
+CONFIG_PCI_GOANY=y
+CONFIG_PCI_BIOS=y
+CONFIG_PCI_DIRECT=y
+CONFIG_PCI_MMCONFIG=y
+CONFIG_PCI_DOMAINS=y
+CONFIG_PCIEPORTBUS=y
+CONFIG_HOTPLUG_PCI_PCIE=y
+CONFIG_PCIEAER=y
+CONFIG_PCIEASPM=y
+# CONFIG_PCIEASPM_DEBUG is not set
+CONFIG_ARCH_SUPPORTS_MSI=y
+CONFIG_PCI_MSI=y
+CONFIG_PCI_LEGACY=y
+# CONFIG_PCI_DEBUG is not set
+CONFIG_HT_IRQ=y
+CONFIG_ISA_DMA_API=y
+CONFIG_ISA=y
+# CONFIG_EISA is not set
+# CONFIG_MCA is not set
+# CONFIG_SCx200 is not set
+CONFIG_PCCARD=y
+# CONFIG_PCMCIA_DEBUG is not set
+CONFIG_PCMCIA=y
+CONFIG_PCMCIA_LOAD_CIS=y
+CONFIG_PCMCIA_IOCTL=y
+CONFIG_CARDBUS=y
+
+#
+# PC-card bridges
+#
+CONFIG_YENTA=y
+CONFIG_YENTA_O2=y
+CONFIG_YENTA_RICOH=y
+CONFIG_YENTA_TI=y
+CONFIG_YENTA_ENE_TUNE=y
+CONFIG_YENTA_TOSHIBA=y
+# CONFIG_PD6729 is not set
+# CONFIG_I82092 is not set
+# CONFIG_I82365 is not set
+# CONFIG_TCIC is not set
+CONFIG_PCMCIA_PROBE=y
+CONFIG_PCCARD_NONSTATIC=y
+CONFIG_HOTPLUG_PCI=y
+# CONFIG_HOTPLUG_PCI_FAKE is not set
+# CONFIG_HOTPLUG_PCI_COMPAQ is not set
+CONFIG_HOTPLUG_PCI_IBM=y
+CONFIG_HOTPLUG_PCI_ACPI=y
+CONFIG_HOTPLUG_PCI_ACPI_IBM=y
+# CONFIG_HOTPLUG_PCI_CPCI is not set
+# CONFIG_HOTPLUG_PCI_SHPC is not set
+
+#
+# Executable file formats / Emulations
+#
+CONFIG_BINFMT_ELF=y
+CONFIG_BINFMT_AOUT=y
+CONFIG_BINFMT_MISC=y
+
+#
+# Networking
+#
+CONFIG_NET=y
+
+#
+# Networking options
+#
+CONFIG_PACKET=y
+CONFIG_PACKET_MMAP=y
+CONFIG_UNIX=y
+CONFIG_XFRM=y
+CONFIG_XFRM_USER=m
+# CONFIG_XFRM_SUB_POLICY is not set
+# CONFIG_XFRM_MIGRATE is not set
+# CONFIG_NET_KEY is not set
+CONFIG_INET=y
+CONFIG_IP_MULTICAST=y
+CONFIG_IP_ADVANCED_ROUTER=y
+CONFIG_ASK_IP_FIB_HASH=y
+# CONFIG_IP_FIB_TRIE is not set
+CONFIG_IP_FIB_HASH=y
+# CONFIG_IP_MULTIPLE_TABLES is not set
+# CONFIG_IP_ROUTE_MULTIPATH is not set
+# CONFIG_IP_ROUTE_VERBOSE is not set
+# CONFIG_IP_PNP is not set
+CONFIG_NET_IPIP=y
+# CONFIG_NET_IPGRE is not set
+# CONFIG_IP_MROUTE is not set
+# CONFIG_ARPD is not set
+CONFIG_SYN_COOKIES=y
+# CONFIG_INET_AH is not set
+# CONFIG_INET_ESP is not set
+# CONFIG_INET_IPCOMP is not set
+# CONFIG_INET_XFRM_TUNNEL is not set
+CONFIG_INET_TUNNEL=y
+CONFIG_INET_XFRM_MODE_TRANSPORT=m
+CONFIG_INET_XFRM_MODE_TUNNEL=m
+CONFIG_INET_XFRM_MODE_BEET=m
+# CONFIG_INET_LRO is not set
+CONFIG_INET_DIAG=y
+CONFIG_INET_TCP_DIAG=y
+# CONFIG_TCP_CONG_ADVANCED is not set
+CONFIG_TCP_CONG_CUBIC=y
+CONFIG_DEFAULT_TCP_CONG="cubic"
+CONFIG_TCP_MD5SIG=y
+# CONFIG_IP_VS is not set
+CONFIG_IPV6=y
+# CONFIG_IPV6_PRIVACY is not set
+# CONFIG_IPV6_ROUTER_PREF is not set
+# CONFIG_IPV6_OPTIMISTIC_DAD is not set
+# CONFIG_INET6_AH is not set
+# CONFIG_INET6_ESP is not set
+# CONFIG_INET6_IPCOMP is not set
+CONFIG_IPV6_MIP6=y
+# CONFIG_INET6_XFRM_TUNNEL is not set
+# CONFIG_INET6_TUNNEL is not set
+CONFIG_INET6_XFRM_MODE_TRANSPORT=m
+CONFIG_INET6_XFRM_MODE_TUNNEL=m
+CONFIG_INET6_XFRM_MODE_BEET=m
+CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION=m
+CONFIG_IPV6_SIT=m
+# CONFIG_IPV6_TUNNEL is not set
+# CONFIG_IPV6_MULTIPLE_TABLES is not set
+# CONFIG_NETWORK_SECMARK is not set
+CONFIG_NETFILTER=y
+# CONFIG_NETFILTER_DEBUG is not set
+
+#
+# Core Netfilter Configuration
+#
+CONFIG_NETFILTER_NETLINK=y
+CONFIG_NETFILTER_NETLINK_QUEUE=y
+CONFIG_NETFILTER_NETLINK_LOG=y
+CONFIG_NF_CONNTRACK_ENABLED=m
+CONFIG_NF_CONNTRACK=m
+CONFIG_NF_CT_ACCT=y
+CONFIG_NF_CONNTRACK_MARK=y
+CONFIG_NF_CONNTRACK_EVENTS=y
+CONFIG_NF_CT_PROTO_GRE=m
+CONFIG_NF_CT_PROTO_SCTP=m
+# CONFIG_NF_CT_PROTO_UDPLITE is not set
+# CONFIG_NF_CONNTRACK_AMANDA is not set
+CONFIG_NF_CONNTRACK_FTP=m
+CONFIG_NF_CONNTRACK_H323=m
+CONFIG_NF_CONNTRACK_IRC=m
+CONFIG_NF_CONNTRACK_NETBIOS_NS=m
+CONFIG_NF_CONNTRACK_PPTP=m
+# CONFIG_NF_CONNTRACK_SANE is not set
+CONFIG_NF_CONNTRACK_SIP=m
+CONFIG_NF_CONNTRACK_TFTP=m
+CONFIG_NF_CT_NETLINK=m
+CONFIG_NETFILTER_XTABLES=y
+CONFIG_NETFILTER_XT_TARGET_CLASSIFY=y
+CONFIG_NETFILTER_XT_TARGET_CONNMARK=m
+CONFIG_NETFILTER_XT_TARGET_DSCP=m
+CONFIG_NETFILTER_XT_TARGET_MARK=y
+CONFIG_NETFILTER_XT_TARGET_NFQUEUE=y
+CONFIG_NETFILTER_XT_TARGET_NFLOG=m
+CONFIG_NETFILTER_XT_TARGET_NOTRACK=m
+CONFIG_NETFILTER_XT_TARGET_TRACE=m
+CONFIG_NETFILTER_XT_TARGET_TCPMSS=m
+CONFIG_NETFILTER_XT_MATCH_COMMENT=y
+CONFIG_NETFILTER_XT_MATCH_CONNBYTES=m
+CONFIG_NETFILTER_XT_MATCH_CONNLIMIT=m
+CONFIG_NETFILTER_XT_MATCH_CONNMARK=m
+CONFIG_NETFILTER_XT_MATCH_CONNTRACK=m
+CONFIG_NETFILTER_XT_MATCH_DCCP=y
+CONFIG_NETFILTER_XT_MATCH_DSCP=m
+# CONFIG_NETFILTER_XT_MATCH_ESP is not set
+CONFIG_NETFILTER_XT_MATCH_HELPER=m
+CONFIG_NETFILTER_XT_MATCH_LENGTH=y
+CONFIG_NETFILTER_XT_MATCH_LIMIT=y
+CONFIG_NETFILTER_XT_MATCH_MAC=y
+CONFIG_NETFILTER_XT_MATCH_MARK=y
+CONFIG_NETFILTER_XT_MATCH_POLICY=m
+# CONFIG_NETFILTER_XT_MATCH_MULTIPORT is not set
+CONFIG_NETFILTER_XT_MATCH_PKTTYPE=y
+CONFIG_NETFILTER_XT_MATCH_QUOTA=m
+CONFIG_NETFILTER_XT_MATCH_REALM=y
+CONFIG_NETFILTER_XT_MATCH_SCTP=y
+CONFIG_NETFILTER_XT_MATCH_STATE=m
+CONFIG_NETFILTER_XT_MATCH_STATISTIC=m
+CONFIG_NETFILTER_XT_MATCH_STRING=y
+CONFIG_NETFILTER_XT_MATCH_TCPMSS=y
+# CONFIG_NETFILTER_XT_MATCH_TIME is not set
+CONFIG_NETFILTER_XT_MATCH_U32=m
+CONFIG_NETFILTER_XT_MATCH_HASHLIMIT=m
+
+#
+# IP: Netfilter Configuration
+#
+CONFIG_NF_CONNTRACK_IPV4=m
+# CONFIG_NF_CONNTRACK_PROC_COMPAT is not set
+CONFIG_IP_NF_QUEUE=y
+CONFIG_IP_NF_IPTABLES=y
+CONFIG_IP_NF_MATCH_IPRANGE=y
+CONFIG_IP_NF_MATCH_TOS=y
+CONFIG_IP_NF_MATCH_RECENT=y
+CONFIG_IP_NF_MATCH_ECN=y
+# CONFIG_IP_NF_MATCH_AH is not set
+CONFIG_IP_NF_MATCH_TTL=y
+CONFIG_IP_NF_MATCH_OWNER=y
+CONFIG_IP_NF_MATCH_ADDRTYPE=y
+CONFIG_IP_NF_FILTER=y
+CONFIG_IP_NF_TARGET_REJECT=y
+CONFIG_IP_NF_TARGET_LOG=y
+CONFIG_IP_NF_TARGET_ULOG=y
+CONFIG_NF_NAT=m
+CONFIG_NF_NAT_NEEDED=y
+CONFIG_IP_NF_TARGET_MASQUERADE=m
+CONFIG_IP_NF_TARGET_REDIRECT=m
+CONFIG_IP_NF_TARGET_NETMAP=m
+CONFIG_IP_NF_TARGET_SAME=m
+CONFIG_NF_NAT_SNMP_BASIC=m
+CONFIG_NF_NAT_PROTO_GRE=m
+CONFIG_NF_NAT_FTP=m
+CONFIG_NF_NAT_IRC=m
+CONFIG_NF_NAT_TFTP=m
+# CONFIG_NF_NAT_AMANDA is not set
+CONFIG_NF_NAT_PPTP=m
+CONFIG_NF_NAT_H323=m
+CONFIG_NF_NAT_SIP=m
+CONFIG_IP_NF_MANGLE=y
+CONFIG_IP_NF_TARGET_TOS=y
+CONFIG_IP_NF_TARGET_ECN=y
+CONFIG_IP_NF_TARGET_TTL=y
+CONFIG_IP_NF_TARGET_CLUSTERIP=m
+CONFIG_IP_NF_RAW=y
+CONFIG_IP_NF_ARPTABLES=y
+CONFIG_IP_NF_ARPFILTER=y
+CONFIG_IP_NF_ARP_MANGLE=y
+
+#
+# IPv6: Netfilter Configuration (EXPERIMENTAL)
+#
+CONFIG_NF_CONNTRACK_IPV6=m
+CONFIG_IP6_NF_QUEUE=y
+CONFIG_IP6_NF_IPTABLES=y
+CONFIG_IP6_NF_MATCH_RT=y
+CONFIG_IP6_NF_MATCH_OPTS=y
+CONFIG_IP6_NF_MATCH_FRAG=y
+CONFIG_IP6_NF_MATCH_HL=y
+CONFIG_IP6_NF_MATCH_OWNER=y
+CONFIG_IP6_NF_MATCH_IPV6HEADER=y
+# CONFIG_IP6_NF_MATCH_AH is not set
+CONFIG_IP6_NF_MATCH_MH=m
+CONFIG_IP6_NF_MATCH_EUI64=y
+CONFIG_IP6_NF_FILTER=y
+CONFIG_IP6_NF_TARGET_LOG=y
+CONFIG_IP6_NF_TARGET_REJECT=y
+CONFIG_IP6_NF_MANGLE=y
+CONFIG_IP6_NF_TARGET_HL=y
+CONFIG_IP6_NF_RAW=y
+# CONFIG_IP_DCCP is not set
+# CONFIG_IP_SCTP is not set
+# CONFIG_TIPC is not set
+# CONFIG_ATM is not set
+# CONFIG_BRIDGE is not set
+# CONFIG_VLAN_8021Q is not set
+# CONFIG_DECNET is not set
+# CONFIG_LLC2 is not set
+# CONFIG_IPX is not set
+# CONFIG_ATALK is not set
+# CONFIG_X25 is not set
+# CONFIG_LAPB is not set
+# CONFIG_ECONET is not set
+# CONFIG_WAN_ROUTER is not set
+CONFIG_NET_SCHED=y
+
+#
+# Queueing/Scheduling
+#
+# CONFIG_NET_SCH_CBQ is not set
+# CONFIG_NET_SCH_HTB is not set
+# CONFIG_NET_SCH_HFSC is not set
+# CONFIG_NET_SCH_PRIO is not set
+# CONFIG_NET_SCH_RR is not set
+# CONFIG_NET_SCH_RED is not set
+# CONFIG_NET_SCH_SFQ is not set
+# CONFIG_NET_SCH_TEQL is not set
+# CONFIG_NET_SCH_TBF is not set
+# CONFIG_NET_SCH_GRED is not set
+# CONFIG_NET_SCH_DSMARK is not set
+# CONFIG_NET_SCH_NETEM is not set
+# CONFIG_NET_SCH_INGRESS is not set
+
+#
+# Classification
+#
+# CONFIG_NET_CLS_BASIC is not set
+# CONFIG_NET_CLS_TCINDEX is not set
+# CONFIG_NET_CLS_ROUTE4 is not set
+CONFIG_NET_CLS_ROUTE=y
+# CONFIG_NET_CLS_FW is not set
+# CONFIG_NET_CLS_U32 is not set
+# CONFIG_NET_CLS_RSVP is not set
+# CONFIG_NET_CLS_RSVP6 is not set
+# CONFIG_NET_EMATCH is not set
+# CONFIG_NET_CLS_ACT is not set
+# CONFIG_NET_CLS_POLICE is not set
+CONFIG_NET_SCH_FIFO=y
+
+#
+# Network testing
+#
+# CONFIG_NET_PKTGEN is not set
+# CONFIG_HAMRADIO is not set
+# CONFIG_IRDA is not set
+CONFIG_BT=m
+CONFIG_BT_L2CAP=m
+CONFIG_BT_SCO=m
+CONFIG_BT_RFCOMM=m
+CONFIG_BT_RFCOMM_TTY=y
+# CONFIG_BT_BNEP is not set
+CONFIG_BT_HIDP=m
+
+#
+# Bluetooth device drivers
+#
+CONFIG_BT_HCIUSB=m
+CONFIG_BT_HCIUSB_SCO=y
+# CONFIG_BT_HCIUART is not set
+# CONFIG_BT_HCIBCM203X is not set
+# CONFIG_BT_HCIBPA10X is not set
+# CONFIG_BT_HCIBFUSB is not set
+# CONFIG_BT_HCIDTL1 is not set
+# CONFIG_BT_HCIBT3C is not set
+# CONFIG_BT_HCIBLUECARD is not set
+# CONFIG_BT_HCIBTUART is not set
+# CONFIG_BT_HCIVHCI is not set
+# CONFIG_AF_RXRPC is not set
+
+#
+# Wireless
+#
+CONFIG_CFG80211=y
+CONFIG_NL80211=y
+CONFIG_WIRELESS_EXT=y
+CONFIG_MAC80211=m
+CONFIG_MAC80211_RCSIMPLE=y
+CONFIG_MAC80211_LEDS=y
+# CONFIG_MAC80211_DEBUG is not set
+CONFIG_IEEE80211=m
+# CONFIG_IEEE80211_DEBUG is not set
+CONFIG_IEEE80211_CRYPT_WEP=m
+CONFIG_IEEE80211_CRYPT_CCMP=m
+CONFIG_IEEE80211_CRYPT_TKIP=m
+CONFIG_IEEE80211_SOFTMAC=m
+# CONFIG_IEEE80211_SOFTMAC_DEBUG is not set
+CONFIG_RFKILL=y
+CONFIG_RFKILL_INPUT=y
+CONFIG_RFKILL_LEDS=y
+# CONFIG_NET_9P is not set
+
+#
+# Device Drivers
+#
+
+#
+# Generic Driver Options
+#
+CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
+CONFIG_STANDALONE=y
+CONFIG_PREVENT_FIRMWARE_BUILD=y
+CONFIG_FW_LOADER=y
+# CONFIG_DEBUG_DRIVER is not set
+# CONFIG_DEBUG_DEVRES is not set
+# CONFIG_SYS_HYPERVISOR is not set
+# CONFIG_CONNECTOR is not set
+# CONFIG_MTD is not set
+CONFIG_PARPORT=y
+CONFIG_PARPORT_PC=y
+# CONFIG_PARPORT_SERIAL is not set
+# CONFIG_PARPORT_PC_FIFO is not set
+# CONFIG_PARPORT_PC_SUPERIO is not set
+# CONFIG_PARPORT_PC_PCMCIA is not set
+# CONFIG_PARPORT_GSC is not set
+# CONFIG_PARPORT_AX88796 is not set
+# CONFIG_PARPORT_1284 is not set
+CONFIG_PNP=y
+# CONFIG_PNP_DEBUG is not set
+
+#
+# Protocols
+#
+# CONFIG_ISAPNP is not set
+# CONFIG_PNPBIOS is not set
+CONFIG_PNPACPI=y
+CONFIG_BLK_DEV=y
+# CONFIG_BLK_DEV_FD is not set
+# CONFIG_BLK_DEV_XD is not set
+# CONFIG_PARIDE is not set
+# CONFIG_BLK_CPQ_DA is not set
+# CONFIG_BLK_CPQ_CISS_DA is not set
+# CONFIG_BLK_DEV_DAC960 is not set
+# CONFIG_BLK_DEV_UMEM is not set
+# CONFIG_BLK_DEV_COW_COMMON is not set
+CONFIG_BLK_DEV_LOOP=y
+CONFIG_BLK_DEV_CRYPTOLOOP=y
+# CONFIG_BLK_DEV_NBD is not set
+# CONFIG_BLK_DEV_SX8 is not set
+# CONFIG_BLK_DEV_UB is not set
+# CONFIG_BLK_DEV_RAM is not set
+# CONFIG_CDROM_PKTCDVD is not set
+# CONFIG_ATA_OVER_ETH is not set
+CONFIG_MISC_DEVICES=y
+# CONFIG_IBM_ASM is not set
+# CONFIG_PHANTOM is not set
+# CONFIG_EEPROM_93CX6 is not set
+# CONFIG_SGI_IOC4 is not set
+# CONFIG_TIFM_CORE is not set
+# CONFIG_ASUS_LAPTOP is not set
+# CONFIG_FUJITSU_LAPTOP is not set
+# CONFIG_MSI_LAPTOP is not set
+# CONFIG_SONY_LAPTOP is not set
+CONFIG_THINKPAD_ACPI=m
+# CONFIG_THINKPAD_ACPI_DEBUG is not set
+CONFIG_THINKPAD_ACPI_BAY=y
+CONFIG_THINKPAD_ACPI_HOTKEY_POLL=y
+# CONFIG_IDE is not set
+
+#
+# SCSI device support
+#
+# CONFIG_RAID_ATTRS is not set
+CONFIG_SCSI=y
+CONFIG_SCSI_DMA=y
+# CONFIG_SCSI_TGT is not set
+# CONFIG_SCSI_NETLINK is not set
+CONFIG_SCSI_PROC_FS=y
+
+#
+# SCSI support type (disk, tape, CD-ROM)
+#
+CONFIG_BLK_DEV_SD=y
+# CONFIG_CHR_DEV_ST is not set
+# CONFIG_CHR_DEV_OSST is not set
+CONFIG_BLK_DEV_SR=y
+CONFIG_BLK_DEV_SR_VENDOR=y
+CONFIG_CHR_DEV_SG=y
+# CONFIG_CHR_DEV_SCH is not set
+
+#
+# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
+#
+# CONFIG_SCSI_MULTI_LUN is not set
+# CONFIG_SCSI_CONSTANTS is not set
+# CONFIG_SCSI_LOGGING is not set
+# CONFIG_SCSI_SCAN_ASYNC is not set
+CONFIG_SCSI_WAIT_SCAN=m
+
+#
+# SCSI Transports
+#
+# CONFIG_SCSI_SPI_ATTRS is not set
+# CONFIG_SCSI_FC_ATTRS is not set
+# CONFIG_SCSI_ISCSI_ATTRS is not set
+# CONFIG_SCSI_SAS_LIBSAS is not set
+# CONFIG_SCSI_SRP_ATTRS is not set
+# CONFIG_SCSI_LOWLEVEL is not set
+# CONFIG_SCSI_LOWLEVEL_PCMCIA is not set
+CONFIG_ATA=y
+# CONFIG_ATA_NONSTANDARD is not set
+CONFIG_ATA_ACPI=y
+CONFIG_SATA_AHCI=y
+# CONFIG_SATA_SVW is not set
+CONFIG_ATA_PIIX=y
+# CONFIG_SATA_MV is not set
+# CONFIG_SATA_NV is not set
+# CONFIG_PDC_ADMA is not set
+# CONFIG_SATA_QSTOR is not set
+# CONFIG_SATA_PROMISE is not set
+# CONFIG_SATA_SX4 is not set
+# CONFIG_SATA_SIL is not set
+# CONFIG_SATA_SIL24 is not set
+# CONFIG_SATA_SIS is not set
+# CONFIG_SATA_ULI is not set
+# CONFIG_SATA_VIA is not set
+# CONFIG_SATA_VITESSE is not set
+# CONFIG_SATA_INIC162X is not set
+# CONFIG_PATA_ACPI is not set
+# CONFIG_PATA_ALI is not set
+# CONFIG_PATA_AMD is not set
+# CONFIG_PATA_ARTOP is not set
+# CONFIG_PATA_ATIIXP is not set
+# CONFIG_PATA_CMD640_PCI is not set
+# CONFIG_PATA_CMD64X is not set
+# CONFIG_PATA_CS5520 is not set
+# CONFIG_PATA_CS5530 is not set
+# CONFIG_PATA_CS5535 is not set
+# CONFIG_PATA_CS5536 is not set
+# CONFIG_PATA_CYPRESS is not set
+# CONFIG_PATA_EFAR is not set
+# CONFIG_ATA_GENERIC is not set
+# CONFIG_PATA_HPT366 is not set
+# CONFIG_PATA_HPT37X is not set
+# CONFIG_PATA_HPT3X2N is not set
+# CONFIG_PATA_HPT3X3 is not set
+# CONFIG_PATA_IT821X is not set
+# CONFIG_PATA_IT8213 is not set
+# CONFIG_PATA_JMICRON is not set
+# CONFIG_PATA_LEGACY is not set
+# CONFIG_PATA_TRIFLEX is not set
+# CONFIG_PATA_MARVELL is not set
+# CONFIG_PATA_MPIIX is not set
+# CONFIG_PATA_OLDPIIX is not set
+# CONFIG_PATA_NETCELL is not set
+# CONFIG_PATA_NS87410 is not set
+# CONFIG_PATA_NS87415 is not set
+# CONFIG_PATA_OPTI is not set
+# CONFIG_PATA_OPTIDMA is not set
+# CONFIG_PATA_PCMCIA is not set
+# CONFIG_PATA_PDC_OLD is not set
+# CONFIG_PATA_QDI is not set
+# CONFIG_PATA_RADISYS is not set
+# CONFIG_PATA_RZ1000 is not set
+# CONFIG_PATA_SC1200 is not set
+# CONFIG_PATA_SERVERWORKS is not set
+# CONFIG_PATA_PDC2027X is not set
+# CONFIG_PATA_SIL680 is not set
+# CONFIG_PATA_SIS is not set
+# CONFIG_PATA_VIA is not set
+# CONFIG_PATA_WINBOND is not set
+# CONFIG_PATA_WINBOND_VLB is not set
+# CONFIG_MD is not set
+# CONFIG_FUSION is not set
+
+#
+# IEEE 1394 (FireWire) support
+#
+# CONFIG_FIREWIRE is not set
+# CONFIG_IEEE1394 is not set
+# CONFIG_I2O is not set
+# CONFIG_MACINTOSH_DRIVERS is not set
+CONFIG_NETDEVICES=y
+CONFIG_NETDEVICES_MULTIQUEUE=y
+# CONFIG_DUMMY is not set
+# CONFIG_BONDING is not set
+# CONFIG_MACVLAN is not set
+# CONFIG_EQUALIZER is not set
+CONFIG_TUN=y
+# CONFIG_VETH is not set
+# CONFIG_NET_SB1000 is not set
+# CONFIG_ARCNET is not set
+# CONFIG_NET_ETHERNET is not set
+CONFIG_MII=m
+CONFIG_NETDEV_1000=y
+# CONFIG_ACENIC is not set
+# CONFIG_DL2K is not set
+CONFIG_E1000=m
+CONFIG_E1000_NAPI=y
+CONFIG_E1000_DISABLE_PACKET_SPLIT=y
+CONFIG_E1000E=m
+# CONFIG_IP1000 is not set
+# CONFIG_NS83820 is not set
+# CONFIG_HAMACHI is not set
+# CONFIG_YELLOWFIN is not set
+# CONFIG_R8169 is not set
+# CONFIG_SIS190 is not set
+# CONFIG_SKGE is not set
+# CONFIG_SKY2 is not set
+# CONFIG_SK98LIN is not set
+# CONFIG_VIA_VELOCITY is not set
+# CONFIG_TIGON3 is not set
+# CONFIG_BNX2 is not set
+# CONFIG_QLA3XXX is not set
+# CONFIG_ATL1 is not set
+# CONFIG_NETDEV_10000 is not set
+# CONFIG_TR is not set
+
+#
+# Wireless LAN
+#
+# CONFIG_WLAN_PRE80211 is not set
+CONFIG_WLAN_80211=y
+# CONFIG_PCMCIA_RAYCS is not set
+CONFIG_IPW2100=m
+CONFIG_IPW2100_MONITOR=y
+# CONFIG_IPW2100_DEBUG is not set
+CONFIG_IPW2200=m
+CONFIG_IPW2200_MONITOR=y
+CONFIG_IPW2200_RADIOTAP=y
+CONFIG_IPW2200_PROMISCUOUS=y
+CONFIG_IPW2200_QOS=y
+# CONFIG_IPW2200_DEBUG is not set
+# CONFIG_LIBERTAS is not set
+# CONFIG_AIRO is not set
+# CONFIG_HERMES is not set
+# CONFIG_ATMEL is not set
+# CONFIG_AIRO_CS is not set
+# CONFIG_PCMCIA_WL3501 is not set
+CONFIG_PRISM54=m
+# CONFIG_USB_ZD1201 is not set
+# CONFIG_RTL8187 is not set
+# CONFIG_ADM8211 is not set
+# CONFIG_P54_COMMON is not set
+CONFIG_IWLWIFI=y
+# CONFIG_IWLWIFI_DEBUG is not set
+CONFIG_IWLWIFI_SENSITIVITY=y
+CONFIG_IWLWIFI_SPECTRUM_MEASUREMENT=y
+CONFIG_IWLWIFI_QOS=y
+CONFIG_IWL4965=m
+CONFIG_IWL3945=m
+CONFIG_IWLWIFI_LEDS=y
+# CONFIG_HOSTAP is not set
+# CONFIG_BCM43XX is not set
+# CONFIG_B43 is not set
+# CONFIG_B43LEGACY is not set
+# CONFIG_ZD1211RW is not set
+# CONFIG_RT2X00 is not set
+
+#
+# USB Network Adapters
+#
+# CONFIG_USB_CATC is not set
+# CONFIG_USB_KAWETH is not set
+# CONFIG_USB_PEGASUS is not set
+# CONFIG_USB_RTL8150 is not set
+# CONFIG_USB_USBNET is not set
+CONFIG_NET_PCMCIA=y
+CONFIG_PCMCIA_3C589=m
+CONFIG_PCMCIA_3C574=m
+CONFIG_PCMCIA_FMVJ18X=m
+CONFIG_PCMCIA_PCNET=m
+CONFIG_PCMCIA_NMCLAN=m
+CONFIG_PCMCIA_SMC91C92=m
+CONFIG_PCMCIA_XIRC2PS=m
+CONFIG_PCMCIA_AXNET=m
+# CONFIG_WAN is not set
+# CONFIG_FDDI is not set
+# CONFIG_HIPPI is not set
+# CONFIG_PLIP is not set
+CONFIG_PPP=m
+# CONFIG_PPP_MULTILINK is not set
+# CONFIG_PPP_FILTER is not set
+CONFIG_PPP_ASYNC=m
+CONFIG_PPP_SYNC_TTY=m
+CONFIG_PPP_DEFLATE=m
+CONFIG_PPP_BSDCOMP=m
+CONFIG_PPP_MPPE=m
+CONFIG_PPPOE=m
+CONFIG_PPPOL2TP=m
+# CONFIG_SLIP is not set
+CONFIG_SLHC=m
+# CONFIG_NET_FC is not set
+# CONFIG_SHAPER is not set
+# CONFIG_NETCONSOLE is not set
+# CONFIG_NETPOLL is not set
+# CONFIG_NET_POLL_CONTROLLER is not set
+# CONFIG_ISDN is not set
+# CONFIG_PHONE is not set
+
+#
+# Input device support
+#
+CONFIG_INPUT=y
+# CONFIG_INPUT_FF_MEMLESS is not set
+CONFIG_INPUT_POLLDEV=m
+
+#
+# Userland interfaces
+#
+CONFIG_INPUT_MOUSEDEV=y
+CONFIG_INPUT_MOUSEDEV_PSAUX=y
+CONFIG_INPUT_MOUSEDEV_SCREEN_X=1400
+CONFIG_INPUT_MOUSEDEV_SCREEN_Y=1050
+# CONFIG_INPUT_JOYDEV is not set
+CONFIG_INPUT_EVDEV=y
+# CONFIG_INPUT_EVBUG is not set
+
+#
+# Input Device Drivers
+#
+CONFIG_INPUT_KEYBOARD=y
+CONFIG_KEYBOARD_ATKBD=y
+# CONFIG_KEYBOARD_SUNKBD is not set
+# CONFIG_KEYBOARD_LKKBD is not set
+# CONFIG_KEYBOARD_XTKBD is not set
+# CONFIG_KEYBOARD_NEWTON is not set
+# CONFIG_KEYBOARD_STOWAWAY is not set
+CONFIG_INPUT_MOUSE=y
+CONFIG_MOUSE_PS2=y
+CONFIG_MOUSE_PS2_ALPS=y
+CONFIG_MOUSE_PS2_LOGIPS2PP=y
+CONFIG_MOUSE_PS2_SYNAPTICS=y
+CONFIG_MOUSE_PS2_LIFEBOOK=y
+CONFIG_MOUSE_PS2_TRACKPOINT=y
+# CONFIG_MOUSE_PS2_TOUCHKIT is not set
+# CONFIG_MOUSE_SERIAL is not set
+# CONFIG_MOUSE_APPLETOUCH is not set
+# CONFIG_MOUSE_INPORT is not set
+# CONFIG_MOUSE_LOGIBM is not set
+# CONFIG_MOUSE_PC110PAD is not set
+# CONFIG_MOUSE_VSXXXAA is not set
+# CONFIG_INPUT_JOYSTICK is not set
+# CONFIG_INPUT_TABLET is not set
+# CONFIG_INPUT_TOUCHSCREEN is not set
+CONFIG_INPUT_MISC=y
+# CONFIG_INPUT_PCSPKR is not set
+# CONFIG_INPUT_WISTRON_BTNS is not set
+# CONFIG_INPUT_ATLAS_BTNS is not set
+# CONFIG_INPUT_ATI_REMOTE is not set
+# CONFIG_INPUT_ATI_REMOTE2 is not set
+# CONFIG_INPUT_KEYSPAN_REMOTE is not set
+# CONFIG_INPUT_POWERMATE is not set
+# CONFIG_INPUT_YEALINK is not set
+CONFIG_INPUT_UINPUT=m
+
+#
+# Hardware I/O ports
+#
+CONFIG_SERIO=y
+CONFIG_SERIO_I8042=y
+# CONFIG_SERIO_SERPORT is not set
+# CONFIG_SERIO_CT82C710 is not set
+# CONFIG_SERIO_PARKBD is not set
+# CONFIG_SERIO_PCIPS2 is not set
+CONFIG_SERIO_LIBPS2=y
+# CONFIG_SERIO_RAW is not set
+# CONFIG_GAMEPORT is not set
+
+#
+# Character devices
+#
+CONFIG_VT=y
+CONFIG_VT_CONSOLE=y
+CONFIG_VT_CKO=y
+CONFIG_VT_PRINTK_EMERG_COLOR=0x09
+CONFIG_VT_PRINTK_ALERT_COLOR=0x01
+CONFIG_VT_PRINTK_CRIT_COLOR=0x05
+CONFIG_VT_PRINTK_ERR_COLOR=0x01
+CONFIG_VT_PRINTK_WARNING_COLOR=0x0B
+CONFIG_VT_PRINTK_NOTICE_COLOR=0x02
+CONFIG_VT_PRINTK_INFO_COLOR=0x04
+CONFIG_VT_PRINTK_DEBUG_COLOR=0x07
+CONFIG_HW_CONSOLE=y
+# CONFIG_VT_HW_CONSOLE_BINDING is not set
+# CONFIG_SERIAL_NONSTANDARD is not set
+
+#
+# Serial drivers
+#
+CONFIG_SERIAL_8250=y
+# CONFIG_SERIAL_8250_CONSOLE is not set
+CONFIG_FIX_EARLYCON_MEM=y
+CONFIG_SERIAL_8250_PCI=y
+CONFIG_SERIAL_8250_PNP=y
+CONFIG_SERIAL_8250_CS=m
+CONFIG_SERIAL_8250_NR_UARTS=4
+CONFIG_SERIAL_8250_RUNTIME_UARTS=4
+# CONFIG_SERIAL_8250_EXTENDED is not set
+
+#
+# Non-8250 serial port support
+#
+CONFIG_SERIAL_CORE=y
+# CONFIG_SERIAL_JSM is not set
+CONFIG_UNIX98_PTYS=y
+CONFIG_LEGACY_PTYS=y
+CONFIG_LEGACY_PTY_COUNT=256
+# CONFIG_PRINTER is not set
+# CONFIG_PPDEV is not set
+# CONFIG_IPMI_HANDLER is not set
+# CONFIG_HW_RANDOM is not set
+CONFIG_NVRAM=y
+CONFIG_RTC=y
+# CONFIG_DTLK is not set
+# CONFIG_R3964 is not set
+# CONFIG_APPLICOM is not set
+# CONFIG_SONYPI is not set
+
+#
+# PCMCIA character devices
+#
+# CONFIG_SYNCLINK_CS is not set
+# CONFIG_CARDMAN_4000 is not set
+# CONFIG_CARDMAN_4040 is not set
+# CONFIG_MWAVE is not set
+# CONFIG_PC8736x_GPIO is not set
+# CONFIG_NSC_GPIO is not set
+# CONFIG_CS5535_GPIO is not set
+# CONFIG_RAW_DRIVER is not set
+CONFIG_HPET=y
+# CONFIG_HPET_RTC_IRQ is not set
+CONFIG_HPET_MMAP=y
+# CONFIG_HANGCHECK_TIMER is not set
+# CONFIG_TCG_TPM is not set
+# CONFIG_TELCLOCK is not set
+CONFIG_DEVPORT=y
+CONFIG_I2C=m
+CONFIG_I2C_BOARDINFO=y
+CONFIG_I2C_CHARDEV=m
+
+#
+# I2C Algorithms
+#
+CONFIG_I2C_ALGOBIT=m
+CONFIG_I2C_ALGOPCF=m
+CONFIG_I2C_ALGOPCA=m
+
+#
+# I2C Hardware Bus support
+#
+# CONFIG_I2C_ALI1535 is not set
+# CONFIG_I2C_ALI1563 is not set
+# CONFIG_I2C_ALI15X3 is not set
+# CONFIG_I2C_AMD756 is not set
+# CONFIG_I2C_AMD8111 is not set
+# CONFIG_I2C_I801 is not set
+# CONFIG_I2C_I810 is not set
+# CONFIG_I2C_PIIX4 is not set
+# CONFIG_I2C_NFORCE2 is not set
+# CONFIG_I2C_OCORES is not set
+# CONFIG_I2C_PARPORT is not set
+# CONFIG_I2C_PARPORT_LIGHT is not set
+# CONFIG_I2C_PROSAVAGE is not set
+# CONFIG_I2C_SAVAGE4 is not set
+# CONFIG_I2C_SIMTEC is not set
+# CONFIG_SCx200_ACB is not set
+# CONFIG_I2C_SIS5595 is not set
+# CONFIG_I2C_SIS630 is not set
+# CONFIG_I2C_SIS96X is not set
+# CONFIG_I2C_TAOS_EVM is not set
+# CONFIG_I2C_STUB is not set
+# CONFIG_I2C_TINY_USB is not set
+# CONFIG_I2C_VIA is not set
+# CONFIG_I2C_VIAPRO is not set
+# CONFIG_I2C_VOODOO3 is not set
+# CONFIG_I2C_PCA_ISA is not set
+
+#
+# Miscellaneous I2C Chip support
+#
+# CONFIG_SENSORS_DS1337 is not set
+# CONFIG_SENSORS_DS1374 is not set
+# CONFIG_DS1682 is not set
+# CONFIG_SENSORS_EEPROM is not set
+# CONFIG_SENSORS_PCF8574 is not set
+# CONFIG_SENSORS_PCA9539 is not set
+# CONFIG_SENSORS_PCF8591 is not set
+# CONFIG_SENSORS_MAX6875 is not set
+# CONFIG_SENSORS_TSL2550 is not set
+# CONFIG_I2C_DEBUG_CORE is not set
+# CONFIG_I2C_DEBUG_ALGO is not set
+# CONFIG_I2C_DEBUG_BUS is not set
+# CONFIG_I2C_DEBUG_CHIP is not set
+
+#
+# SPI support
+#
+# CONFIG_SPI is not set
+# CONFIG_SPI_MASTER is not set
+# CONFIG_W1 is not set
+CONFIG_POWER_SUPPLY=y
+# CONFIG_POWER_SUPPLY_DEBUG is not set
+# CONFIG_PDA_POWER is not set
+# CONFIG_BATTERY_DS2760 is not set
+CONFIG_HWMON=y
+# CONFIG_HWMON_VID is not set
+# CONFIG_SENSORS_ABITUGURU is not set
+# CONFIG_SENSORS_ABITUGURU3 is not set
+# CONFIG_SENSORS_AD7418 is not set
+# CONFIG_SENSORS_ADM1021 is not set
+# CONFIG_SENSORS_ADM1025 is not set
+# CONFIG_SENSORS_ADM1026 is not set
+# CONFIG_SENSORS_ADM1029 is not set
+# CONFIG_SENSORS_ADM1031 is not set
+# CONFIG_SENSORS_ADM9240 is not set
+# CONFIG_SENSORS_ADT7470 is not set
+# CONFIG_SENSORS_K8TEMP is not set
+# CONFIG_SENSORS_ASB100 is not set
+# CONFIG_SENSORS_ATXP1 is not set
+# CONFIG_SENSORS_DS1621 is not set
+# CONFIG_SENSORS_I5K_AMB is not set
+# CONFIG_SENSORS_F71805F is not set
+# CONFIG_SENSORS_F71882FG is not set
+# CONFIG_SENSORS_F75375S is not set
+# CONFIG_SENSORS_FSCHER is not set
+# CONFIG_SENSORS_FSCPOS is not set
+# CONFIG_SENSORS_FSCHMD is not set
+# CONFIG_SENSORS_GL518SM is not set
+# CONFIG_SENSORS_GL520SM is not set
+CONFIG_SENSORS_CORETEMP=y
+# CONFIG_SENSORS_IT87 is not set
+# CONFIG_SENSORS_LM63 is not set
+# CONFIG_SENSORS_LM75 is not set
+# CONFIG_SENSORS_LM77 is not set
+# CONFIG_SENSORS_LM78 is not set
+# CONFIG_SENSORS_LM80 is not set
+# CONFIG_SENSORS_LM83 is not set
+# CONFIG_SENSORS_LM85 is not set
+# CONFIG_SENSORS_LM87 is not set
+# CONFIG_SENSORS_LM90 is not set
+# CONFIG_SENSORS_LM92 is not set
+# CONFIG_SENSORS_LM93 is not set
+# CONFIG_SENSORS_MAX1619 is not set
+# CONFIG_SENSORS_MAX6650 is not set
+# CONFIG_SENSORS_PC87360 is not set
+# CONFIG_SENSORS_PC87427 is not set
+# CONFIG_SENSORS_SIS5595 is not set
+# CONFIG_SENSORS_DME1737 is not set
+# CONFIG_SENSORS_SMSC47M1 is not set
+# CONFIG_SENSORS_SMSC47M192 is not set
+# CONFIG_SENSORS_SMSC47B397 is not set
+# CONFIG_SENSORS_THMC50 is not set
+# CONFIG_SENSORS_VIA686A is not set
+# CONFIG_SENSORS_VT1211 is not set
+# CONFIG_SENSORS_VT8231 is not set
+# CONFIG_SENSORS_W83781D is not set
+# CONFIG_SENSORS_W83791D is not set
+# CONFIG_SENSORS_W83792D is not set
+# CONFIG_SENSORS_W83793 is not set
+# CONFIG_SENSORS_W83L785TS is not set
+# CONFIG_SENSORS_W83627HF is not set
+# CONFIG_SENSORS_W83627EHF is not set
+CONFIG_SENSORS_HDAPS=m
+# CONFIG_SENSORS_APPLESMC is not set
+# CONFIG_HWMON_DEBUG_CHIP is not set
+# CONFIG_WATCHDOG is not set
+
+#
+# Sonics Silicon Backplane
+#
+CONFIG_SSB_POSSIBLE=y
+# CONFIG_SSB is not set
+
+#
+# Multifunction device drivers
+#
+# CONFIG_MFD_SM501 is not set
+
+#
+# Multimedia devices
+#
+CONFIG_VIDEO_DEV=m
+CONFIG_VIDEO_V4L1=y
+CONFIG_VIDEO_V4L1_COMPAT=y
+CONFIG_VIDEO_V4L2=y
+CONFIG_VIDEO_CAPTURE_DRIVERS=y
+# CONFIG_VIDEO_ADV_DEBUG is not set
+CONFIG_VIDEO_HELPER_CHIPS_AUTO=y
+CONFIG_VIDEO_TVAUDIO=m
+CONFIG_VIDEO_TDA7432=m
+CONFIG_VIDEO_TDA9840=m
+CONFIG_VIDEO_TDA9875=m
+CONFIG_VIDEO_TEA6415C=m
+CONFIG_VIDEO_TEA6420=m
+CONFIG_VIDEO_MSP3400=m
+CONFIG_VIDEO_WM8775=m
+CONFIG_VIDEO_BT819=m
+CONFIG_VIDEO_BT856=m
+CONFIG_VIDEO_KS0127=m
+CONFIG_VIDEO_OV7670=m
+CONFIG_VIDEO_SAA7110=m
+CONFIG_VIDEO_SAA7111=m
+CONFIG_VIDEO_SAA7114=m
+CONFIG_VIDEO_SAA711X=m
+CONFIG_VIDEO_TVP5150=m
+CONFIG_VIDEO_VPX3220=m
+CONFIG_VIDEO_CX25840=m
+CONFIG_VIDEO_CX2341X=m
+CONFIG_VIDEO_SAA7185=m
+CONFIG_VIDEO_ADV7170=m
+CONFIG_VIDEO_ADV7175=m
+CONFIG_VIDEO_VIVI=m
+CONFIG_VIDEO_BT848=m
+# CONFIG_VIDEO_BT848_DVB is not set
+CONFIG_VIDEO_SAA6588=m
+CONFIG_VIDEO_PMS=m
+CONFIG_VIDEO_BWQCAM=m
+CONFIG_VIDEO_CQCAM=m
+CONFIG_VIDEO_CPIA=m
+CONFIG_VIDEO_CPIA_USB=m
+CONFIG_VIDEO_CPIA2=m
+CONFIG_VIDEO_SAA5246A=m
+CONFIG_VIDEO_SAA5249=m
+CONFIG_TUNER_3036=m
+CONFIG_VIDEO_STRADIS=m
+CONFIG_VIDEO_ZORAN_ZR36060=m
+CONFIG_VIDEO_ZORAN=m
+CONFIG_VIDEO_ZORAN_BUZ=m
+CONFIG_VIDEO_ZORAN_DC10=m
+CONFIG_VIDEO_ZORAN_DC30=m
+CONFIG_VIDEO_ZORAN_LML33=m
+CONFIG_VIDEO_ZORAN_LML33R10=m
+CONFIG_VIDEO_ZORAN_AVS6EYES=m
+CONFIG_VIDEO_SAA7134=m
+CONFIG_VIDEO_SAA7134_DVB=m
+CONFIG_VIDEO_MXB=m
+CONFIG_VIDEO_DPC=m
+CONFIG_VIDEO_HEXIUM_ORION=m
+CONFIG_VIDEO_HEXIUM_GEMINI=m
+CONFIG_VIDEO_CX88=m
+CONFIG_VIDEO_CX88_BLACKBIRD=m
+CONFIG_VIDEO_CX88_DVB=m
+CONFIG_VIDEO_CX88_VP3054=m
+# CONFIG_VIDEO_CX23885 is not set
+# CONFIG_VIDEO_IVTV is not set
+CONFIG_VIDEO_CAFE_CCIC=m
+CONFIG_V4L_USB_DRIVERS=y
+CONFIG_VIDEO_PVRUSB2=m
+CONFIG_VIDEO_PVRUSB2_29XXX=y
+CONFIG_VIDEO_PVRUSB2_24XXX=y
+CONFIG_VIDEO_PVRUSB2_SYSFS=y
+# CONFIG_VIDEO_PVRUSB2_DEBUGIFC is not set
+CONFIG_VIDEO_EM28XX=m
+CONFIG_VIDEO_USBVISION=m
+CONFIG_VIDEO_USBVIDEO=m
+CONFIG_USB_VICAM=m
+CONFIG_USB_IBMCAM=m
+CONFIG_USB_KONICAWC=m
+CONFIG_USB_QUICKCAM_MESSENGER=m
+CONFIG_USB_ET61X251=m
+CONFIG_VIDEO_OVCAMCHIP=m
+CONFIG_USB_W9968CF=m
+CONFIG_USB_OV511=m
+CONFIG_USB_SE401=m
+CONFIG_USB_SN9C102=m
+CONFIG_USB_STV680=m
+CONFIG_USB_ZC0301=m
+CONFIG_USB_PWC=m
+# CONFIG_USB_PWC_DEBUG is not set
+CONFIG_USB_ZR364XX=m
+# CONFIG_RADIO_ADAPTERS is not set
+CONFIG_DVB_CORE=m
+CONFIG_DVB_CORE_ATTACH=y
+CONFIG_DVB_CAPTURE_DRIVERS=y
+
+#
+# Supported SAA7146 based PCI Adapters
+#
+# CONFIG_DVB_AV7110 is not set
+# CONFIG_DVB_BUDGET is not set
+# CONFIG_DVB_BUDGET_CI is not set
+# CONFIG_DVB_BUDGET_AV is not set
+
+#
+# Supported USB Adapters
+#
+CONFIG_DVB_USB=m
+# CONFIG_DVB_USB_DEBUG is not set
+CONFIG_DVB_USB_A800=m
+CONFIG_DVB_USB_DIBUSB_MB=m
+# CONFIG_DVB_USB_DIBUSB_MB_FAULTY is not set
+CONFIG_DVB_USB_DIBUSB_MC=m
+CONFIG_DVB_USB_DIB0700=m
+CONFIG_DVB_USB_UMT_010=m
+CONFIG_DVB_USB_CXUSB=m
+CONFIG_DVB_USB_M920X=m
+CONFIG_DVB_USB_GL861=m
+CONFIG_DVB_USB_AU6610=m
+CONFIG_DVB_USB_DIGITV=m
+CONFIG_DVB_USB_VP7045=m
+CONFIG_DVB_USB_VP702X=m
+CONFIG_DVB_USB_GP8PSK=m
+CONFIG_DVB_USB_NOVA_T_USB2=m
+CONFIG_DVB_USB_TTUSB2=m
+CONFIG_DVB_USB_DTT200U=m
+CONFIG_DVB_USB_OPERA1=m
+CONFIG_DVB_USB_AF9005=m
+CONFIG_DVB_USB_AF9005_REMOTE=m
+CONFIG_DVB_TTUSB_BUDGET=m
+CONFIG_DVB_TTUSB_DEC=m
+CONFIG_DVB_CINERGYT2=m
+# CONFIG_DVB_CINERGYT2_TUNING is not set
+
+#
+# Supported FlexCopII (B2C2) Adapters
+#
+CONFIG_DVB_B2C2_FLEXCOP=m
+CONFIG_DVB_B2C2_FLEXCOP_PCI=m
+CONFIG_DVB_B2C2_FLEXCOP_USB=m
+# CONFIG_DVB_B2C2_FLEXCOP_DEBUG is not set
+
+#
+# Supported BT878 Adapters
+#
+CONFIG_DVB_BT8XX=m
+
+#
+# Supported Pluto2 Adapters
+#
+CONFIG_DVB_PLUTO2=m
+
+#
+# Supported DVB Frontends
+#
+
+#
+# Customise DVB Frontends
+#
+# CONFIG_DVB_FE_CUSTOMISE is not set
+
+#
+# DVB-S (satellite) frontends
+#
+CONFIG_DVB_STV0299=m
+CONFIG_DVB_CX24110=m
+CONFIG_DVB_CX24123=m
+CONFIG_DVB_TDA8083=m
+CONFIG_DVB_MT312=m
+CONFIG_DVB_VES1X93=m
+CONFIG_DVB_S5H1420=m
+CONFIG_DVB_TDA10086=m
+
+#
+# DVB-T (terrestrial) frontends
+#
+CONFIG_DVB_SP8870=m
+CONFIG_DVB_SP887X=m
+CONFIG_DVB_CX22700=m
+CONFIG_DVB_CX22702=m
+CONFIG_DVB_L64781=m
+CONFIG_DVB_TDA1004X=m
+CONFIG_DVB_NXT6000=m
+CONFIG_DVB_MT352=m
+CONFIG_DVB_ZL10353=m
+CONFIG_DVB_DIB3000MB=m
+CONFIG_DVB_DIB3000MC=m
+CONFIG_DVB_DIB7000M=m
+CONFIG_DVB_DIB7000P=m
+
+#
+# DVB-C (cable) frontends
+#
+CONFIG_DVB_VES1820=m
+CONFIG_DVB_TDA10021=m
+CONFIG_DVB_TDA10023=m
+CONFIG_DVB_STV0297=m
+
+#
+# ATSC (North American/Korean Terrestrial/Cable DTV) frontends
+#
+CONFIG_DVB_NXT200X=m
+CONFIG_DVB_OR51211=m
+CONFIG_DVB_OR51132=m
+CONFIG_DVB_BCM3510=m
+CONFIG_DVB_LGDT330X=m
+# CONFIG_DVB_S5H1409 is not set
+
+#
+# Tuners/PLL support
+#
+CONFIG_DVB_PLL=m
+CONFIG_DVB_TDA826X=m
+CONFIG_DVB_TDA827X=m
+CONFIG_DVB_TUNER_QT1010=m
+CONFIG_DVB_TUNER_MT2060=m
+CONFIG_DVB_TUNER_MT2266=m
+# CONFIG_DVB_TUNER_MT2131 is not set
+CONFIG_DVB_TUNER_DIB0070=m
+
+#
+# Miscellaneous devices
+#
+CONFIG_DVB_LNBP21=m
+CONFIG_DVB_ISL6421=m
+CONFIG_DVB_TUA6100=m
+CONFIG_VIDEO_SAA7146=m
+CONFIG_VIDEO_SAA7146_VV=m
+CONFIG_VIDEO_TUNER=m
+# CONFIG_VIDEO_TUNER_CUSTOMIZE is not set
+CONFIG_TUNER_MT20XX=m
+CONFIG_TUNER_TDA8290=m
+CONFIG_TUNER_TEA5761=m
+CONFIG_TUNER_TEA5767=m
+CONFIG_TUNER_SIMPLE=m
+CONFIG_VIDEOBUF_GEN=m
+CONFIG_VIDEOBUF_DMA_SG=m
+CONFIG_VIDEOBUF_VMALLOC=m
+CONFIG_VIDEOBUF_DVB=m
+CONFIG_VIDEO_BTCX=m
+CONFIG_VIDEO_IR_I2C=m
+CONFIG_VIDEO_IR=m
+CONFIG_VIDEO_TVEEPROM=m
+# CONFIG_DAB is not set
+
+#
+# Graphics support
+#
+# CONFIG_AGP is not set
+# CONFIG_DRM is not set
+# CONFIG_VGASTATE is not set
+# CONFIG_VIDEO_OUTPUT_CONTROL is not set
+# CONFIG_FB is not set
+# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
+CONFIG_BACKLIGHT_CLASS_DEVICE=m
+# CONFIG_BACKLIGHT_CORGI is not set
+# CONFIG_BACKLIGHT_PROGEAR is not set
+
+#
+# Display device support
+#
+# CONFIG_DISPLAY_SUPPORT is not set
+
+#
+# Console display driver support
+#
+CONFIG_VGA_CONSOLE=y
+# CONFIG_VGACON_SOFT_SCROLLBACK is not set
+# CONFIG_VIDEO_SELECT is not set
+# CONFIG_MDA_CONSOLE is not set
+CONFIG_DUMMY_CONSOLE=y
+
+#
+# Sound
+#
+CONFIG_SOUND=y
+
+#
+# Advanced Linux Sound Architecture
+#
+# CONFIG_SND is not set
+
+#
+# Open Sound System
+#
+# CONFIG_SOUND_PRIME is not set
+CONFIG_HID_SUPPORT=y
+CONFIG_HID=y
+# CONFIG_HID_DEBUG is not set
+# CONFIG_HIDRAW is not set
+
+#
+# USB Input Devices
+#
+CONFIG_USB_HID=y
+# CONFIG_USB_HIDINPUT_POWERBOOK is not set
+# CONFIG_HID_FF is not set
+CONFIG_USB_HIDDEV=y
+CONFIG_USB_SUPPORT=y
+CONFIG_USB_ARCH_HAS_HCD=y
+CONFIG_USB_ARCH_HAS_OHCI=y
+CONFIG_USB_ARCH_HAS_EHCI=y
+CONFIG_USB=y
+# CONFIG_USB_DEBUG is not set
+
+#
+# Miscellaneous USB options
+#
+CONFIG_USB_DEVICEFS=y
+CONFIG_USB_DEVICE_CLASS=y
+# CONFIG_USB_DYNAMIC_MINORS is not set
+CONFIG_USB_SUSPEND=y
+# CONFIG_USB_PERSIST is not set
+# CONFIG_USB_OTG is not set
+
+#
+# USB Host Controller Drivers
+#
+CONFIG_USB_EHCI_HCD=y
+CONFIG_USB_EHCI_SPLIT_ISO=y
+CONFIG_USB_EHCI_ROOT_HUB_TT=y
+CONFIG_USB_EHCI_TT_NEWSCHED=y
+# CONFIG_USB_ISP116X_HCD is not set
+# CONFIG_USB_OHCI_HCD is not set
+CONFIG_USB_UHCI_HCD=m
+# CONFIG_USB_SL811_HCD is not set
+# CONFIG_USB_R8A66597_HCD is not set
+
+#
+# USB Device Class drivers
+#
+# CONFIG_USB_ACM is not set
+CONFIG_USB_PRINTER=y
+
+#
+# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
+#
+
+#
+# may also be needed; see USB_STORAGE Help for more information
+#
+CONFIG_USB_STORAGE=y
+# CONFIG_USB_STORAGE_DEBUG is not set
+# CONFIG_USB_STORAGE_DATAFAB is not set
+# CONFIG_USB_STORAGE_FREECOM is not set
+# CONFIG_USB_STORAGE_ISD200 is not set
+# CONFIG_USB_STORAGE_DPCM is not set
+# CONFIG_USB_STORAGE_USBAT is not set
+# CONFIG_USB_STORAGE_SDDR09 is not set
+# CONFIG_USB_STORAGE_SDDR55 is not set
+# CONFIG_USB_STORAGE_JUMPSHOT is not set
+# CONFIG_USB_STORAGE_ALAUDA is not set
+# CONFIG_USB_STORAGE_KARMA is not set
+# CONFIG_USB_LIBUSUAL is not set
+
+#
+# USB Imaging devices
+#
+# CONFIG_USB_MDC800 is not set
+# CONFIG_USB_MICROTEK is not set
+# CONFIG_USB_MON is not set
+
+#
+# USB port drivers
+#
+# CONFIG_USB_USS720 is not set
+
+#
+# USB Serial Converter support
+#
+# CONFIG_USB_SERIAL is not set
+
+#
+# USB Miscellaneous drivers
+#
+# CONFIG_USB_EMI62 is not set
+# CONFIG_USB_EMI26 is not set
+# CONFIG_USB_ADUTUX is not set
+# CONFIG_USB_AUERSWALD is not set
+# CONFIG_USB_RIO500 is not set
+# CONFIG_USB_LEGOTOWER is not set
+# CONFIG_USB_LCD is not set
+# CONFIG_USB_BERRY_CHARGE is not set
+# CONFIG_USB_LED is not set
+# CONFIG_USB_CYPRESS_CY7C63 is not set
+# CONFIG_USB_CYTHERM is not set
+# CONFIG_USB_PHIDGET is not set
+# CONFIG_USB_IDMOUSE is not set
+# CONFIG_USB_FTDI_ELAN is not set
+# CONFIG_USB_APPLEDISPLAY is not set
+# CONFIG_USB_SISUSBVGA is not set
+# CONFIG_USB_LD is not set
+# CONFIG_USB_TRANCEVIBRATOR is not set
+# CONFIG_USB_IOWARRIOR is not set
+# CONFIG_USB_TEST is not set
+
+#
+# USB DSL modem support
+#
+
+#
+# USB Gadget Support
+#
+# CONFIG_USB_GADGET is not set
+# CONFIG_MMC is not set
+CONFIG_NEW_LEDS=y
+CONFIG_LEDS_CLASS=m
+
+#
+# LED drivers
+#
+
+#
+# LED Triggers
+#
+CONFIG_LEDS_TRIGGERS=y
+CONFIG_LEDS_TRIGGER_TIMER=m
+CONFIG_LEDS_TRIGGER_HEARTBEAT=m
+# CONFIG_INFINIBAND is not set
+# CONFIG_EDAC is not set
+CONFIG_RTC_LIB=y
+CONFIG_RTC_CLASS=y
+CONFIG_RTC_HCTOSYS=y
+CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
+# CONFIG_RTC_DEBUG is not set
+
+#
+# RTC interfaces
+#
+CONFIG_RTC_INTF_SYSFS=y
+CONFIG_RTC_INTF_PROC=y
+CONFIG_RTC_INTF_DEV=y
+# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set
+# CONFIG_RTC_DRV_TEST is not set
+
+#
+# I2C RTC drivers
+#
+# CONFIG_RTC_DRV_DS1307 is not set
+# CONFIG_RTC_DRV_DS1374 is not set
+# CONFIG_RTC_DRV_DS1672 is not set
+# CONFIG_RTC_DRV_MAX6900 is not set
+# CONFIG_RTC_DRV_RS5C372 is not set
+# CONFIG_RTC_DRV_ISL1208 is not set
+# CONFIG_RTC_DRV_X1205 is not set
+# CONFIG_RTC_DRV_PCF8563 is not set
+# CONFIG_RTC_DRV_PCF8583 is not set
+# CONFIG_RTC_DRV_M41T80 is not set
+
+#
+# SPI RTC drivers
+#
+
+#
+# Platform RTC drivers
+#
+# CONFIG_RTC_DRV_CMOS is not set
+# CONFIG_RTC_DRV_DS1553 is not set
+# CONFIG_RTC_DRV_STK17TA8 is not set
+# CONFIG_RTC_DRV_DS1742 is not set
+# CONFIG_RTC_DRV_M48T86 is not set
+# CONFIG_RTC_DRV_M48T59 is not set
+# CONFIG_RTC_DRV_V3020 is not set
+
+#
+# on-CPU RTC drivers
+#
+CONFIG_DMADEVICES=y
+
+#
+# DMA Devices
+#
+# CONFIG_INTEL_IOATDMA is not set
+CONFIG_AUXDISPLAY=y
+# CONFIG_KS0108 is not set
+# CONFIG_VIRTUALIZATION is not set
+
+#
+# Userspace I/O
+#
+# CONFIG_UIO is not set
+
+#
+# Firmware Drivers
+#
+# CONFIG_EDD is not set
+# CONFIG_DELL_RBU is not set
+# CONFIG_DCDBAS is not set
+CONFIG_DMIID=y
+
+#
+# File systems
+#
+CONFIG_EXT2_FS=y
+CONFIG_EXT2_FS_XATTR=y
+CONFIG_EXT2_FS_POSIX_ACL=y
+CONFIG_EXT2_FS_SECURITY=y
+CONFIG_EXT2_FS_XIP=y
+CONFIG_FS_XIP=y
+CONFIG_EXT3_FS=y
+CONFIG_EXT3_FS_XATTR=y
+CONFIG_EXT3_FS_POSIX_ACL=y
+CONFIG_EXT3_FS_SECURITY=y
+# CONFIG_EXT4DEV_FS is not set
+CONFIG_JBD=y
+CONFIG_FS_MBCACHE=y
+# CONFIG_REISERFS_FS is not set
+# CONFIG_JFS_FS is not set
+CONFIG_FS_POSIX_ACL=y
+CONFIG_XFS_FS=m
+CONFIG_XFS_QUOTA=y
+CONFIG_XFS_SECURITY=y
+CONFIG_XFS_POSIX_ACL=y
+CONFIG_XFS_RT=y
+# CONFIG_GFS2_FS is not set
+# CONFIG_OCFS2_FS is not set
+# CONFIG_MINIX_FS is not set
+# CONFIG_ROMFS_FS is not set
+CONFIG_INOTIFY=y
+CONFIG_INOTIFY_USER=y
+# CONFIG_QUOTA is not set
+CONFIG_QUOTACTL=y
+CONFIG_DNOTIFY=y
+# CONFIG_AUTOFS_FS is not set
+CONFIG_AUTOFS4_FS=y
+CONFIG_FUSE_FS=y
+
+#
+# CD-ROM/DVD Filesystems
+#
+CONFIG_ISO9660_FS=y
+CONFIG_JOLIET=y
+CONFIG_ZISOFS=y
+CONFIG_UDF_FS=y
+CONFIG_UDF_NLS=y
+
+#
+# DOS/FAT/NT Filesystems
+#
+CONFIG_FAT_FS=y
+CONFIG_MSDOS_FS=y
+CONFIG_VFAT_FS=y
+CONFIG_FAT_DEFAULT_CODEPAGE=850
+CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-15"
+CONFIG_NTFS_FS=y
+# CONFIG_NTFS_DEBUG is not set
+# CONFIG_NTFS_RW is not set
+
+#
+# Pseudo filesystems
+#
+CONFIG_PROC_FS=y
+CONFIG_PROC_KCORE=y
+CONFIG_PROC_SYSCTL=y
+CONFIG_SYSFS=y
+CONFIG_TMPFS=y
+# CONFIG_TMPFS_POSIX_ACL is not set
+# CONFIG_HUGETLBFS is not set
+# CONFIG_HUGETLB_PAGE is not set
+# CONFIG_CONFIGFS_FS is not set
+
+#
+# Miscellaneous filesystems
+#
+# CONFIG_ADFS_FS is not set
+# CONFIG_AFFS_FS is not set
+# CONFIG_HFS_FS is not set
+# CONFIG_HFSPLUS_FS is not set
+# CONFIG_BEFS_FS is not set
+# CONFIG_BFS_FS is not set
+# CONFIG_EFS_FS is not set
+# CONFIG_CRAMFS is not set
+# CONFIG_SQUASHFS is not set
+# CONFIG_VXFS_FS is not set
+# CONFIG_HPFS_FS is not set
+# CONFIG_QNX4FS_FS is not set
+# CONFIG_SYSV_FS is not set
+# CONFIG_UFS_FS is not set
+CONFIG_NETWORK_FILESYSTEMS=y
+CONFIG_NFS_FS=y
+CONFIG_NFS_V3=y
+CONFIG_NFS_V3_ACL=y
+CONFIG_NFS_V4=y
+# CONFIG_NFS_DIRECTIO is not set
+CONFIG_NFSD=y
+CONFIG_NFSD_V2_ACL=y
+CONFIG_NFSD_V3=y
+CONFIG_NFSD_V3_ACL=y
+CONFIG_NFSD_V4=y
+CONFIG_NFSD_TCP=y
+CONFIG_LOCKD=y
+CONFIG_LOCKD_V4=y
+CONFIG_EXPORTFS=y
+CONFIG_NFS_ACL_SUPPORT=y
+CONFIG_NFS_COMMON=y
+CONFIG_SUNRPC=y
+CONFIG_SUNRPC_GSS=y
+# CONFIG_SUNRPC_BIND34 is not set
+CONFIG_RPCSEC_GSS_KRB5=y
+# CONFIG_RPCSEC_GSS_SPKM3 is not set
+CONFIG_SMB_FS=y
+# CONFIG_SMB_NLS_DEFAULT is not set
+# CONFIG_CIFS is not set
+# CONFIG_NCP_FS is not set
+# CONFIG_CODA_FS is not set
+# CONFIG_AFS_FS is not set
+
+#
+# Partition Types
+#
+# CONFIG_PARTITION_ADVANCED is not set
+CONFIG_MSDOS_PARTITION=y
+CONFIG_NLS=y
+CONFIG_NLS_DEFAULT="utf-8"
+# CONFIG_NLS_CODEPAGE_437 is not set
+# CONFIG_NLS_CODEPAGE_737 is not set
+# CONFIG_NLS_CODEPAGE_775 is not set
+CONFIG_NLS_CODEPAGE_850=y
+# CONFIG_NLS_CODEPAGE_852 is not set
+# CONFIG_NLS_CODEPAGE_855 is not set
+# CONFIG_NLS_CODEPAGE_857 is not set
+# CONFIG_NLS_CODEPAGE_860 is not set
+# CONFIG_NLS_CODEPAGE_861 is not set
+# CONFIG_NLS_CODEPAGE_862 is not set
+# CONFIG_NLS_CODEPAGE_863 is not set
+# CONFIG_NLS_CODEPAGE_864 is not set
+# CONFIG_NLS_CODEPAGE_865 is not set
+# CONFIG_NLS_CODEPAGE_866 is not set
+# CONFIG_NLS_CODEPAGE_869 is not set
+# CONFIG_NLS_CODEPAGE_936 is not set
+# CONFIG_NLS_CODEPAGE_950 is not set
+# CONFIG_NLS_CODEPAGE_932 is not set
+# CONFIG_NLS_CODEPAGE_949 is not set
+# CONFIG_NLS_CODEPAGE_874 is not set
+# CONFIG_NLS_ISO8859_8 is not set
+# CONFIG_NLS_CODEPAGE_1250 is not set
+# CONFIG_NLS_CODEPAGE_1251 is not set
+# CONFIG_NLS_ASCII is not set
+CONFIG_NLS_ISO8859_1=y
+# CONFIG_NLS_ISO8859_2 is not set
+# CONFIG_NLS_ISO8859_3 is not set
+# CONFIG_NLS_ISO8859_4 is not set
+# CONFIG_NLS_ISO8859_5 is not set
+# CONFIG_NLS_ISO8859_6 is not set
+# CONFIG_NLS_ISO8859_7 is not set
+# CONFIG_NLS_ISO8859_9 is not set
+# CONFIG_NLS_ISO8859_13 is not set
+# CONFIG_NLS_ISO8859_14 is not set
+CONFIG_NLS_ISO8859_15=y
+# CONFIG_NLS_KOI8_R is not set
+# CONFIG_NLS_KOI8_U is not set
+CONFIG_NLS_UTF8=y
+# CONFIG_DLM is not set
+# CONFIG_INSTRUMENTATION is not set
+
+#
+# Kernel hacking
+#
+CONFIG_TRACE_IRQFLAGS_SUPPORT=y
+# CONFIG_PRINTK_TIME is not set
+CONFIG_ENABLE_WARN_DEPRECATED=y
+CONFIG_ENABLE_MUST_CHECK=y
+# CONFIG_MAGIC_SYSRQ is not set
+CONFIG_UNUSED_SYMBOLS=y
+# CONFIG_DEBUG_FS is not set
+# CONFIG_HEADERS_CHECK is not set
+CONFIG_DEBUG_KERNEL=y
+# CONFIG_DEBUG_SHIRQ is not set
+# CONFIG_DETECT_SOFTLOCKUP is not set
+# CONFIG_SCHED_DEBUG is not set
+# CONFIG_SCHEDSTATS is not set
+CONFIG_TIMER_STATS=y
+# CONFIG_DEBUG_SLAB is not set
+CONFIG_DEBUG_PREEMPT=y
+# CONFIG_DEBUG_RT_MUTEXES is not set
+# CONFIG_RT_MUTEX_TESTER is not set
+# CONFIG_DEBUG_SPINLOCK is not set
+# CONFIG_DEBUG_MUTEXES is not set
+# CONFIG_DEBUG_LOCK_ALLOC is not set
+# CONFIG_PROVE_LOCKING is not set
+# CONFIG_LOCK_STAT is not set
+# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
+# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
+# CONFIG_DEBUG_KOBJECT is not set
+# CONFIG_DEBUG_HIGHMEM is not set
+CONFIG_DEBUG_BUGVERBOSE=y
+# CONFIG_DEBUG_INFO is not set
+# CONFIG_DEBUG_VM is not set
+# CONFIG_DEBUG_LIST is not set
+# CONFIG_DEBUG_SG is not set
+# CONFIG_FRAME_POINTER is not set
+CONFIG_FORCED_INLINING=y
+# CONFIG_BOOT_PRINTK_DELAY is not set
+# CONFIG_RCU_TORTURE_TEST is not set
+# CONFIG_FAULT_INJECTION is not set
+# CONFIG_SAMPLES is not set
+CONFIG_EARLY_PRINTK=y
+# CONFIG_DEBUG_STACKOVERFLOW is not set
+# CONFIG_DEBUG_STACK_USAGE is not set
+
+#
+# Page alloc debug is incompatible with Software Suspend on i386
+#
+# CONFIG_DEBUG_RODATA is not set
+# CONFIG_4KSTACKS is not set
+CONFIG_X86_FIND_SMP_CONFIG=y
+CONFIG_X86_MPPARSE=y
+CONFIG_DOUBLEFAULT=y
+
+#
+# Security options
+#
+# CONFIG_KEYS is not set
+# CONFIG_SECURITY is not set
+# CONFIG_SECURITY_FILE_CAPABILITIES is not set
+CONFIG_CRYPTO=y
+CONFIG_CRYPTO_ALGAPI=y
+CONFIG_CRYPTO_BLKCIPHER=y
+CONFIG_CRYPTO_HASH=y
+CONFIG_CRYPTO_MANAGER=y
+# CONFIG_CRYPTO_HMAC is not set
+CONFIG_CRYPTO_XCBC=y
+# CONFIG_CRYPTO_NULL is not set
+CONFIG_CRYPTO_MD4=y
+CONFIG_CRYPTO_MD5=y
+CONFIG_CRYPTO_SHA1=y
+CONFIG_CRYPTO_SHA256=y
+CONFIG_CRYPTO_SHA512=y
+# CONFIG_CRYPTO_WP512 is not set
+# CONFIG_CRYPTO_TGR192 is not set
+CONFIG_CRYPTO_GF128MUL=m
+CONFIG_CRYPTO_ECB=y
+CONFIG_CRYPTO_CBC=y
+CONFIG_CRYPTO_PCBC=y
+CONFIG_CRYPTO_LRW=m
+# CONFIG_CRYPTO_XTS is not set
+# CONFIG_CRYPTO_CRYPTD is not set
+CONFIG_CRYPTO_DES=y
+CONFIG_CRYPTO_FCRYPT=y
+CONFIG_CRYPTO_BLOWFISH=y
+CONFIG_CRYPTO_TWOFISH=y
+CONFIG_CRYPTO_TWOFISH_COMMON=y
+# CONFIG_CRYPTO_TWOFISH_586 is not set
+CONFIG_CRYPTO_SERPENT=y
+CONFIG_CRYPTO_AES=y
+CONFIG_CRYPTO_AES_586=y
+# CONFIG_CRYPTO_CAST5 is not set
+# CONFIG_CRYPTO_CAST6 is not set
+# CONFIG_CRYPTO_TEA is not set
+CONFIG_CRYPTO_ARC4=y
+# CONFIG_CRYPTO_KHAZAD is not set
+# CONFIG_CRYPTO_ANUBIS is not set
+# CONFIG_CRYPTO_SEED is not set
+# CONFIG_CRYPTO_DEFLATE is not set
+CONFIG_CRYPTO_LZF=y
+CONFIG_CRYPTO_MICHAEL_MIC=y
+CONFIG_CRYPTO_CRC32C=y
+CONFIG_CRYPTO_CAMELLIA=y
+# CONFIG_CRYPTO_TEST is not set
+# CONFIG_CRYPTO_AUTHENC is not set
+# CONFIG_CRYPTO_HW is not set
+
+#
+# Library routines
+#
+CONFIG_BITREVERSE=y
+CONFIG_CRC_CCITT=m
+# CONFIG_CRC16 is not set
+CONFIG_CRC_ITU_T=y
+CONFIG_CRC32=y
+CONFIG_CRC7=y
+CONFIG_LIBCRC32C=y
+CONFIG_AUDIT_GENERIC=y
+CONFIG_ZLIB_INFLATE=y
+CONFIG_ZLIB_DEFLATE=m
+CONFIG_TEXTSEARCH=y
+CONFIG_TEXTSEARCH_KMP=y
+CONFIG_TEXTSEARCH_BM=y
+CONFIG_TEXTSEARCH_FSM=y
+CONFIG_PLIST=y
+CONFIG_HAS_IOMEM=y
+CONFIG_HAS_IOPORT=y
+CONFIG_HAS_DMA=y
diff --git a/sys-kernel/thinkpad-sources/thinkpad-sources-2.6.24-r1.ebuild b/sys-kernel/thinkpad-sources/thinkpad-sources-2.6.24-r1.ebuild
new file mode 100644
index 0000000..c3c520c
--- /dev/null
+++ b/sys-kernel/thinkpad-sources/thinkpad-sources-2.6.24-r1.ebuild
@@ -0,0 +1,78 @@
+# Copyright 1999-2008 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+# $Header: sys-kernel/thinkpad-sources/thinkpad-sources-2.6.24-r1.ebuild 2008 02 05
+
+ETYPE="sources"
+K_WANT_GENPATCHES="base extras"
+K_GENPATCHES_VER="1"
+
+inherit kernel-2
+detect_version
+detect_arch
+
+DESCRIPTION="Software Suspend 2 + Gentoo patchset sources + SCO Flowcontrol + Latest THINKPAD-Acpi + IWLWIFI-LEDs + PCI-E ASPM + Colored Printk"
+HOMEPAGE="http://dev.gentoo.org/~dsd/genpatches http://www.tuxonice.net http://bluetooth-alsa.sourceforge.net/ http://ibm-acpi.sourceforge.net/"
+
+#IUSE="sco_flowcontrol"
+
+TUXONICE_VERSION="3.0-rc5"
+TUXONICE_TARGET="2.6.24-rc8-git4"
+TUXONICE_SRC="tuxonice-${TUXONICE_VERSION}-for-${TUXONICE_TARGET}"
+TUXONICE_URI="http://www.tuxonice.net/downloads/all/${TUXONICE_SRC}.patch.bz2"
+
+#SCO_FLOWCONTROL_VERSION="4.3"
+#SCO_FLOWCONTROL_SRC="sco-flowcontrol-v${SCO_FLOWCONTROL_VERSION}"
+#SCO_FLOWCONTROL_URI="http://bluetooth-alsa.cvs.sourceforge.net/*checkout*/bluetooth-alsa/plugz/patches/${SCO_FLOWCONTROL_SRC}.diff"
+
+THINKPAD_ACPI_VERSION="0.19-20080107"
+THINKPAD_ACPI_TARGET="2.6.24-rc7"
+THINKPAD_ACPI_SRC="thinkpad-acpi-${THINKPAD_ACPI_VERSION}_v${THINKPAD_ACPI_TARGET}.patch.gz"
+THINKPAD_ACPI_URI="mirror://sourceforge/ibm-acpi/${THINKPAD_ACPI_SRC}"
+
+
+UNIPATCH_LIST=""
+
+#if use sco_flowcontrol; then
+# UNIPATCH_LIST="${UNIPATCH_LIST} ${DISTDIR}/${SCO_FLOWCONTROL_SRC}.diff"
+#fi
+UNIPATCH_LIST="${UNIPATCH_LIST}
+ ${FILESDIR}/2.6.24-r1/colored-printk-output-2.6.24.patch
+ ${FILESDIR}/2.6.24/disk-protect-for-2.6.24.patch
+ ${DISTDIR}/${THINKPAD_ACPI_SRC}
+ ${FILESDIR}/2.6.24-r1/iwlwifi-leds-v2-2.6.24-rc4.diff
+ ${FILESDIR}/2.6.24/linux-phc-0.3.1-for-2.6.24-rc1.patch
+ ${DISTDIR}/${TUXONICE_SRC}.patch.bz2
+ ${FILESDIR}/2.6.24-r1/pci-e_aspm_v3.patch"
+
+
+UNIPATCH_STRICTORDER="yes"
+#SRC_URI="${KERNEL_URI} ${GENPATCHES_URI} ${ARCH_URI} ${TUXONICE_URI} ${THINKPAD_ACPI_URI} sco_flowcontrol? ( ${SCO_FLOWCONTROL_URI} ) ${IEEE80211_URI} ${HRT_URI}"
+SRC_URI="${KERNEL_URI} ${GENPATCHES_URI} ${ARCH_URI} ${TUXONICE_URI} ${THINKPAD_ACPI_URI} ${IEEE80211_URI} ${HRT_URI}"
+
+KEYWORDS="~amd64 ~x86"
+
+RDEPEND="${RDEPEND}
+ >=sys-apps/tuxonice-userui-0.7.2
+ >=sys-power/hibernate-script-1.97-r4"
+
+pkg_postinst() {
+ kernel-2_pkg_postinst
+ einfo "For more info on this patchset, and how to report problems, see:"
+ einfo "${HOMEPAGE}"
+ einfo "In files dir is an example config suitable for T60"
+ einfo "and hopefully all pci-express driven Thinkpads"
+ einfo "but at all you should try for all Thinkpads"
+ einfo "to NOT alter the given storage device controller configuration"
+ einfo "For rx led do:"
+ einfo "echo phy0rx >/sys/bus/pci/drivers/iwl3945/0000\:03\:00.0/leds/iwl-phy0\:asoc/trigger"
+ einfo "for powersaving i recommend to append these kernel options:"
+ einfo "usbcore.autosuspend=1 pcie_aspm.policy=powersave"
+ einfo "if system freezes occur remove pcie_aspm.policy, and report to ltp ml"
+ einfo "additional powertweaks possible (depending on your hardware):"
+ einfo "snd_hda_intel.power_save=1"
+ einfo "echo 7 > /sys/bus/pci/drivers/iwl3945/0000\:03\:00.0/power_level"
+ einfo "echo min_power > /sys/class/scsi_host/host0/link_power_management_policy"
+ einfo "echo 5 >/proc/sys/vm/laptop_mode"
+ einfo "echo 1500 >/proc/sys/vm/dirty_writeback_centisecs"
+ einfo "echo 1 >/sys/devices/system/cpu/sched_mc_power_savings"
+}