diff options
author | 2008-05-16 07:30:35 +0000 | |
---|---|---|
committer | 2008-05-16 07:30:35 +0000 | |
commit | 33eb7051045f18257fff1af7e3fd3d4c0040ffa2 (patch) | |
tree | 7cdde343e8d4ef174280335777701b1b27cff727 /sys-kernel | |
parent | SMTP Auth fix included upstream (diff) | |
download | jokey-33eb7051045f18257fff1af7e3fd3d4c0040ffa2.tar.gz jokey-33eb7051045f18257fff1af7e3fd3d4c0040ffa2.tar.bz2 jokey-33eb7051045f18257fff1af7e3fd3d4c0040ffa2.zip |
bumb ThinkPadSources to 2.6.25
svn path=/trunk/; revision=398
Diffstat (limited to 'sys-kernel')
14 files changed, 5662 insertions, 19 deletions
diff --git a/sys-kernel/thinkpad-sources/ChangeLog b/sys-kernel/thinkpad-sources/ChangeLog index cd1ed8d..9b2af2c 100644 --- a/sys-kernel/thinkpad-sources/ChangeLog +++ b/sys-kernel/thinkpad-sources/ChangeLog @@ -1,5 +1,20 @@ + 16 May 2008; Florian Manschwetus <FlorianManschwetus@gmx.de> + -thinkpad-sources-2.6.24-r3.ebuild, +thinkpad-sources-2.6.25.ebuild, + +files/2.6.25/kernel-2.6.25-export-init_mm.patch, + +files/2.6.25/kernel-2.6.25-rcu-license.patch, +files/2.6.25, + +files/2.6.25/colored-printk-2.6.25.part1.patch, + +files/2.6.25/pci-e_aspm_v3.5.patch, + +files/2.6.25/04-linux-phc-0.3.1-for-2.6.25.patch, + +files/configs/config-for-core-2.6.25, + +files/2.6.25/colored-printk-2.6.25.part2.patch, + +files/2.6.25/colored-printk-2.6.25.part3.patch, + +files/2.6.25/02-disk-protect-for-2.6.25.patch, + +files/2.6.25/03-ipw2200-inject-for-2.6.25.patch, + +files/2.6.25/vt-fix.patch: + Bumb to 2.6.25 and clean of 2.6.24-r3 + 14 Mar 2008; Florian Manschwetus <florianmanschwetus@gmx.de> +thinkpad-sources-2.6.24-r4.ebuild: bump to 2.6.24-r4 diff --git a/sys-kernel/thinkpad-sources/Manifest b/sys-kernel/thinkpad-sources/Manifest index e0cf23a..b990062 100644 --- a/sys-kernel/thinkpad-sources/Manifest +++ b/sys-kernel/thinkpad-sources/Manifest @@ -4,16 +4,29 @@ AUX 2.6.24-r1/pci-e_aspm_v3.patch 30672 RMD160 6533c11e2e8b8b7f092488b193e9b31ff AUX 2.6.24-r3/disk-protect-fix-for-2.6.24.patch 723 RMD160 93670c5310ff7e2cd2fd33367756fec91f1ce7fc SHA1 7d896adf370dbdef73e39a1b58a0cc66be337483 SHA256 5f755833a64abd8d9ef2a5a060b40f22478e13ee91c2722cc2161f87a80bec01 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 2.6.25/02-disk-protect-for-2.6.25.patch 28041 RMD160 db29875229b28a95c68c1da982727a4e08f105ab SHA1 4799500b74091173d1c1f17a6f7df668f800a400 SHA256 a6ce92c1eac576709e4dd067663f6fed427dd7721b2633b1d954301300cb38b7 +AUX 2.6.25/03-ipw2200-inject-for-2.6.25.patch 2182 RMD160 da365e1a73901e813ec9e73caca385dd5290d7b4 SHA1 67528e54a48288edee6f6c1642d73dee7a4146d2 SHA256 2e1016a2ebbde01ba34ea60b86ceec9082399afaaab0fd5ad03546a9a6b197e9 +AUX 2.6.25/04-linux-phc-0.3.1-for-2.6.25.patch 15389 RMD160 2c33673ff0ec9021c1ec214b022fe73900c2811a SHA1 292f4a9874cb5905ef4feb06bfbcbc07e8dcdfca SHA256 1c00c0b22116b59bb4f77e5dcaad649120ad100eb4fded50924e76279d965049 +AUX 2.6.25/colored-printk-2.6.25.part1.patch 3151 RMD160 15417414247874e7c47bc0ac44a1eb9565bebfae SHA1 5edeca7d5f8625f8fadcdfbdbac2d3480cba8d2c SHA256 290afd26e79fc4493de29ea20e86ea92f809da1e3db6c2e8a0edf9e0455fcea8 +AUX 2.6.25/colored-printk-2.6.25.part2.patch 7972 RMD160 4ecc61abcf310a6013124fc1a49d046d7ab11fd6 SHA1 60a14368c01148f9ead5b4fe682d36e24a9e8933 SHA256 bbbff7947588f222610bd75be772351f9de08eb3df3ce4be20153bac7759578f +AUX 2.6.25/colored-printk-2.6.25.part3.patch 4150 RMD160 c1ffc2b7d28ac86b167179b9793bc2971648118d SHA1 4d8ee860b0d0b0951b34414f2591e725d88aa53a SHA256 e12e2aedff58baa521523160ad8a16fca8372b347c147d1c16263d3b6c79aab9 +AUX 2.6.25/kernel-2.6.25-export-init_mm.patch 527 RMD160 09470465828a58d09f6a924e51ea9b34754cf108 SHA1 c0790545008f44287e8b8264c5d9919bf372e6c8 SHA256 4be986289e4032eecc8909cf636d3e47e66044d9bc40d36f4e10f8ba472ef203 +AUX 2.6.25/kernel-2.6.25-rcu-license.patch 492 RMD160 375a45f3b55a6e591c872eb3213b1cb7d3f9cb3f SHA1 1aa76913d07870967fccc4deb235619ca2ce7297 SHA256 1e27b7522dd0a2ac2ee6913c4a1a403eff7e2652b9dfd4625f657f5ff2f8a75f +AUX 2.6.25/pci-e_aspm_v3.5.patch 32683 RMD160 8e126c0894d85f508ac190a6fecaa45fb7c56875 SHA1 697401cab1315e1c9025b8c17d0cfc78c59d2cda SHA256 89bf8956cc6cc0720bf0dad7107691a5bc5bd33da35fab1909e9f59f08e9ae5b +AUX 2.6.25/vt-fix.patch 6046 RMD160 6c018e117029867928713f9c1577f70a32a8541c SHA1 9da5b59769ead4d971def7a26d98cae3741f2474 SHA256 4e62d4467e3c11f3f3e37787e583ffefe333cbdf367cae2fef384673dcd31d47 AUX configs/config-for-core-2.6.24-r3 54230 RMD160 f8e14cb7ced5f2c4686e0ca71f4af7fd50a52ef7 SHA1 fd96216727e11ade2f60fd59c6bb0ca573aa2111 SHA256 d07ea05322d46d0c26a7ed15c557d48628c1a60bd68204f8a9829c961ed70639 -DIST genpatches-2.6.24-3.base.tar.bz2 22714 RMD160 826ab844e3f4d96f94e09d8763a0131d01bdce94 SHA1 1c50a62af1265684b8039d936a4fb044b3eb72b8 SHA256 51e9a3b0ca3f7434b9b0e91072509e7f697998efbfc869b6528daa7811bc2bb3 -DIST genpatches-2.6.24-3.extras.tar.bz2 43587 RMD160 a41366bb7372c168d4ede2de420256e25560122c SHA1 3a048660019206344a065beaa8dbaadbfa0a7f3b SHA256 8cee70233f609bd01c1645e9cb90c4637ee6f989b4583d652ea2df57a8894296 +AUX configs/config-for-core-2.6.25 57068 RMD160 1cab7fb18d023e9aabd0df30db4a4825ee52eee2 SHA1 5b6ec9e157213243e444e1f899d1a097946a1eb7 SHA256 3b35429771d0f11d57c1ee57f5fee1db15622e7c1533f6330f6fd6e47945e190 DIST genpatches-2.6.24-4.base.tar.bz2 39369 RMD160 c6c0bd063edbd4a2d1606cc53580530e6b0e01c4 SHA1 b6e0d72b5d452648ca3f33a529e4b6a063b10ed7 SHA256 bae9b6d932d18089283ca5ec4a8999b888dbf8d5ae3f5be8302c823f14b6f082 DIST genpatches-2.6.24-4.extras.tar.bz2 43587 RMD160 a41366bb7372c168d4ede2de420256e25560122c SHA1 3a048660019206344a065beaa8dbaadbfa0a7f3b SHA256 8cee70233f609bd01c1645e9cb90c4637ee6f989b4583d652ea2df57a8894296 +DIST genpatches-2.6.25-4.base.tar.bz2 22088 RMD160 fd3a402ac7bd0f5fd7b623571b3e0452beb90fb3 SHA1 28c320f763160a428b466c4cdec3da7d17145e03 SHA256 7898eda702de503afe70b8d36e0594623453457cfa3fb7eabdd2b44de7f88fb0 +DIST genpatches-2.6.25-4.extras.tar.bz2 41717 RMD160 bc2f220a944f701d944061f11d633f2301139ccc SHA1 79d093c93ff1c76e98bff174d5b3c603cd1f0d7e SHA256 0cc8eaab5e746a7b514ee6c86e6ae986618ae4929c0a0c4a8e6098c9d3a43eae DIST linux-2.6.24.tar.bz2 46737783 RMD160 0e5194c69c3d82c41ece689c4f84e638f8776d34 SHA1 351aebc784a5395fe4c92d1e514a89680482f7e2 SHA256 413c64fbbcf81244cb5571be4963644a1e81166a2b0f008a016528363b65c5d3 -DIST thinkpad-acpi-0.19-20080213_v2.6.24.2.patch.gz 39955 RMD160 25054fa54d9c3b9c4990247f655dd90e5a450f03 SHA1 d22e0796696bb7c0c2aa3b5779293bedea8d19dd SHA256 e6f8b98dc53af178fd3cfa21919a00411e05772a229c5123b07ff56e756c6e7a +DIST linux-2.6.25.tar.bz2 48601689 RMD160 cf3ed52f888fe9df7a93abe4fdc2f598e1ba0ce4 SHA1 aa6187a1c212dd2d8bd906b023fcefdcf711f35e SHA256 108b2a3f2b05c0e57d1d0977619525e46f8d4b425aef4b38b47dcf94292f2dd2 DIST thinkpad-acpi-0.19-20080229_v2.6.24.3.patch.gz 41763 RMD160 bdcea1df691197351b60ad0721f0fd6c9cf36d7f SHA1 0e88d4223908e6c837576b3f986c8ebd94d9b9bc SHA256 5b5d6a2fc9da5ccf0dddec0ac470deb88b6adb5f2606015672c9f79120569e13 +DIST thinkpad-acpi-0.20-20080430_v2.6.25.1.patch.gz 14918 RMD160 ed6e3b8b686fe95b68536ef29359d82967542860 SHA1 bd92ed2559b03b09519ddf37cea73a1d3c7c7003 SHA256 57b8fdc3b44ed9c7255e979d3db3ff6d351adc436b3a973f87ebb333c800b001 DIST tuxonice-3.0-rc5-for-2.6.24.patch.bz2 113258 RMD160 c1fde23de970b6347302ae2bff71bf3ab1bfbeb3 SHA1 bf559c8dead1d0372d3388e4f9d2c4d145862ec1 SHA256 0a3b502b89bebbcd0f701a0e89c072797257ce766b2ea2d2bda1f6762ca2ce9b -EBUILD thinkpad-sources-2.6.24-r3.ebuild 3439 RMD160 f7db57d66555810ccb04b2d9ed9a993cee8d92c7 SHA1 c8e5b3ebc44cd88092026c904aaabf98ebd0415e SHA256 e6e4b8103264242ff4c3d996b9bf113aa0d43c6482eab2b424dca7726f7b6b64 +DIST tuxonice-3.0-rc7-for-2.6.25.patch.bz2 113685 RMD160 863ca8197572c2b1a14a0922fff21723fe23d455 SHA1 3629a55777740bda65d5df62309aa3e978e91f79 SHA256 1dbd15f436026c5383db42da7ce96708542b3dd42e17446bf809e5b8ce5c3bd2 EBUILD thinkpad-sources-2.6.24-r4.ebuild 3439 RMD160 b574ba9ae5f097444523bda049ae9247914aa4dd SHA1 2d1cf7e59f33a85587568a0cd46d1ab545ad1607 SHA256 15ca5c2cdb3fafc2589d587116f94eb5abd6d627100b246053bab810cdac6900 -MISC ChangeLog 3307 RMD160 c3e125be3fbf03690a430c262266f66095e26652 SHA1 73d89db5268af806f1406bed7e72ecf167d0093c SHA256 52b3dc6df4c0473fdca900e0ea641abb8ed4c78c944b8d16e035abe3e008bce7 +EBUILD thinkpad-sources-2.6.25.ebuild 3678 RMD160 27fdee391b1bb1fdccd28d3f8154d8ef85901fba SHA1 30d6f8171a05a2d08247ef9b2941ba9c54ffb402 SHA256 604ef6d2172c6a364f292509f88f32d16f56c584bba45d985447751f00426c1f +MISC ChangeLog 4016 RMD160 8ff530776a534cb79b2bb90729eb1a3699907a51 SHA1 8297e8cd1738af94677a8c053c2535840f744641 SHA256 b8002e68a05a49ed8e457718152e9b3f8e4a5cf24187c038bc8c6088c88a4c2f MISC metadata.xml 284 RMD160 5062b08f804b7eaf9e1765c0d38b7fc95bc467e4 SHA1 687ba9103e597aad8a7231ff9a470d841f7121df SHA256 6ca83c8927bd3516baac49bc9ea82ddbeeddbe38a5a98b637d6eb1f1d436c84a diff --git a/sys-kernel/thinkpad-sources/files/2.6.25/02-disk-protect-for-2.6.25.patch b/sys-kernel/thinkpad-sources/files/2.6.25/02-disk-protect-for-2.6.25.patch new file mode 100644 index 0000000..9738753 --- /dev/null +++ b/sys-kernel/thinkpad-sources/files/2.6.25/02-disk-protect-for-2.6.25.patch @@ -0,0 +1,917 @@ +diff -Naur a/block/blk-core.c b/block/blk-core.c +--- a/block/blk-core.c 2008-04-13 14:04:22.000000000 +0200 ++++ b/block/blk-core.c 2008-04-13 14:25:48.000000000 +0200 +@@ -320,6 +320,46 @@ + } + EXPORT_SYMBOL(blk_unplug); + ++/* ++ * Issue lower level unprotect function if no timers are pending. ++ */ ++void blk_unfreeze_work(struct work_struct *work) ++{ ++ struct request_queue *q = container_of(work, struct request_queue, unfreeze_work); ++ int pending; ++ unsigned long flags; ++ ++ spin_lock_irqsave(q->queue_lock, flags); ++ pending = timer_pending(&q->unfreeze_timer); ++ spin_unlock_irqrestore(q->queue_lock, flags); ++ if (!pending) ++ q->issue_unprotect_fn(q); ++} ++ ++/* ++ * Called when the queue freeze timeout expires... ++ */ ++void blk_unfreeze_timeout(unsigned long data) ++{ ++ struct request_queue *q = (struct request_queue *) data; ++ ++ kblockd_schedule_work(&q->unfreeze_work); ++} ++ ++/* ++ * The lower level driver parks and freezes the queue, and this block layer ++ * function sets up the freeze timeout timer on return. If the queue is ++ * already frozen then this is called to extend the timer... ++ */ ++void blk_freeze_queue(struct request_queue *q, int seconds) ++{ ++ /* Don't accept arbitrarily long freezes */ ++ if (seconds >= q->max_unfreeze) ++ seconds = q->max_unfreeze; ++ /* set/reset the timer */ ++ mod_timer(&q->unfreeze_timer, msecs_to_jiffies(seconds*1000) + jiffies); ++} ++ + /** + * blk_start_queue - restart a previously stopped queue + * @q: The &struct request_queue in question +@@ -482,6 +522,7 @@ + } + + init_timer(&q->unplug_timer); ++ init_timer(&q->unfreeze_timer); + + kobject_init(&q->kobj, &blk_queue_ktype); + +diff -Naur a/block/blk.h b/block/blk.h +--- a/block/blk.h 2008-04-13 14:04:22.000000000 +0200 ++++ b/block/blk.h 2008-04-13 14:25:48.000000000 +0200 +@@ -18,6 +18,9 @@ + + void blk_unplug_work(struct work_struct *work); + void blk_unplug_timeout(unsigned long data); ++void blk_unfreeze_work(struct work_struct *work); ++void blk_unfreeze_timeout(unsigned long data); ++void blk_freeze_queue(struct request_queue *q, int seconds); + + struct io_context *current_io_context(gfp_t gfp_flags, int node); + +diff -Naur a/block/blk-settings.c b/block/blk-settings.c +--- a/block/blk-settings.c 2008-04-13 14:04:22.000000000 +0200 ++++ b/block/blk-settings.c 2008-04-13 14:25:48.000000000 +0200 +@@ -112,6 +112,16 @@ + q->unplug_timer.function = blk_unplug_timeout; + q->unplug_timer.data = (unsigned long)q; + ++ q->max_unfreeze = 30; ++ ++ INIT_WORK(&q->unfreeze_work, blk_unfreeze_work); ++ ++ q->unfreeze_timer.function = blk_unfreeze_timeout; ++ q->unfreeze_timer.data = (unsigned long)q; ++ ++ /* Set protect_method to auto detection initially */ ++ q->protect_method = 2; ++ + /* + * by default assume old behaviour and bounce for any highmem page + */ +@@ -119,6 +129,18 @@ + } + EXPORT_SYMBOL(blk_queue_make_request); + ++void blk_queue_issue_protect_fn(struct request_queue *q, issue_protect_fn *ipf) ++{ ++ q->issue_protect_fn = ipf; ++} ++EXPORT_SYMBOL(blk_queue_issue_protect_fn); ++ ++void blk_queue_issue_unprotect_fn(struct request_queue *q, issue_unprotect_fn *iuf) ++{ ++ q->issue_unprotect_fn = iuf; ++} ++EXPORT_SYMBOL(blk_queue_issue_unprotect_fn); ++ + /** + * blk_queue_bounce_limit - set bounce buffer limit for queue + * @q: the request queue for the device +diff -Naur a/block/blk-sysfs.c b/block/blk-sysfs.c +--- a/block/blk-sysfs.c 2008-04-13 14:04:22.000000000 +0200 ++++ b/block/blk-sysfs.c 2008-04-13 14:25:48.000000000 +0200 +@@ -270,6 +270,160 @@ + .release = blk_release_queue, + }; + ++/* ++ * When reading the 'protect' attribute, we return seconds remaining ++ * before unfreeze timeout expires ++ */ ++static ssize_t queue_protect_show(struct request_queue *q, char *page) ++{ ++ unsigned int seconds = 0; ++ ++ spin_lock_irq(q->queue_lock); ++ if (blk_queue_stopped(q) && timer_pending(&q->unfreeze_timer)) ++ /* ++ * Adding 1 in order to guarantee nonzero value until timer ++ * has actually expired. ++ */ ++ seconds = jiffies_to_msecs(q->unfreeze_timer.expires ++ - jiffies) / 1000 + 1; ++ spin_unlock_irq(q->queue_lock); ++ return queue_var_show(seconds, (page)); ++} ++ ++/* ++ * When writing the 'protect' attribute, input is the number of seconds ++ * to freeze the queue for. We call a lower level helper function to ++ * park the heads and freeze/block the queue, then we make a block layer ++ * call to setup the thaw timeout. If input is 0, then we thaw the queue. ++ */ ++static ssize_t queue_protect_store(struct request_queue *q, ++ const char *page, size_t count) ++{ ++ unsigned long freeze = 0; ++ ++ queue_var_store(&freeze, page, count); ++ ++ if (freeze>0) { ++ /* Park and freeze */ ++ if (!blk_queue_stopped(q)) ++ q->issue_protect_fn(q); ++ /* set / reset the thaw timer */ ++ spin_lock_irq(q->queue_lock); ++ blk_freeze_queue(q, freeze); ++ spin_unlock_irq(q->queue_lock); ++ } else { ++ spin_lock_irq(q->queue_lock); ++ freeze = del_timer(&q->unfreeze_timer); ++ spin_unlock_irq(q->queue_lock); ++ if (freeze) ++ q->issue_unprotect_fn(q); ++ } ++ ++ return count; ++} ++ ++static ssize_t ++queue_str_show(char *page, char *str, int status) ++{ ++ ssize_t len; ++ ++ if (status & 1) ++ len = sprintf(page, "[%s]", str); ++ else ++ len = sprintf(page, "%s", str); ++ if (status & 2) ++ len += sprintf(page+len, "\n"); ++ else ++ len += sprintf(page+len, " "); ++ return len; ++} ++ ++/* ++ * Returns current protect_method. ++ */ ++static ssize_t queue_protect_method_show(struct request_queue *q, char *page) ++{ ++ int len = 0; ++ int unload = q->protect_method; ++ ++ len += queue_str_show(page+len, "auto", (unload & 2) >> 1); ++ len += queue_str_show(page+len, "unload", unload & 1); ++ len += queue_str_show(page+len, "standby", !unload ? 3 : 2); ++ return len; ++} ++ ++/* ++ * Stores the device protect method. ++ */ ++static ssize_t queue_protect_method_store(struct request_queue *q, ++ const char *page, size_t count) ++{ ++ spin_lock_irq(q->queue_lock); ++ if (!strcmp(page, "auto") || !strcmp(page, "auto\n")) ++ q->protect_method = 2; ++ else if (!strcmp(page, "unload") || !strcmp(page, "unload\n")) ++ q->protect_method = 1; ++ else if (!strcmp(page, "standby") || !strcmp(page, "standby\n")) ++ q->protect_method = 0; ++ else { ++ spin_unlock_irq(q->queue_lock); ++ return -EINVAL; ++ } ++ spin_unlock_irq(q->queue_lock); ++ return count; ++} ++ ++static struct queue_sysfs_entry queue_protect_entry = { ++ .attr = { .name = "protect", .mode = S_IRUGO | S_IWUSR }, ++ .show = queue_protect_show, ++ .store = queue_protect_store, ++}; ++static struct queue_sysfs_entry queue_protect_method_entry = { ++ .attr = { .name = "protect_method", .mode = S_IRUGO | S_IWUSR }, ++ .show = queue_protect_method_show, ++ .store = queue_protect_method_store, ++}; ++ ++static int blk_protect_register(struct request_queue *q) ++{ ++ int error = 0; ++ ++ /* check that the lower level driver has a protect handler */ ++ if (!q->issue_protect_fn) ++ return 0; ++ ++ /* create the attributes */ ++ error = sysfs_create_file(&q->kobj, &queue_protect_entry.attr); ++ if (error) { ++ printk(KERN_ERR ++ "blk_protect_register(): failed to create protect queue attribute!\n"); ++ return error; ++ } ++ ++ error = sysfs_create_file(&q->kobj, &queue_protect_method_entry.attr); ++ if (error) { ++ sysfs_remove_file(&q->kobj, &queue_protect_entry.attr); ++ printk(KERN_ERR ++ "blk_protect_register(): failed to create protect_method attribute!\n"); ++ return error; ++ } ++ kobject_get(&q->kobj); ++ ++ return 0; ++} ++ ++static void blk_protect_unregister(struct request_queue *q) ++{ ++ /* check that the lower level driver has a protect handler */ ++ if (!q->issue_protect_fn) ++ return; ++ ++ /* remove the attributes */ ++ sysfs_remove_file(&q->kobj, &queue_protect_method_entry.attr); ++ sysfs_remove_file(&q->kobj, &queue_protect_entry.attr); ++ kobject_put(&q->kobj); ++} ++ + int blk_register_queue(struct gendisk *disk) + { + int ret; +@@ -287,13 +441,20 @@ + kobject_uevent(&q->kobj, KOBJ_ADD); + + ret = elv_register_queue(q); ++ if (ret) ++ goto err; ++ ret = blk_protect_register(q); + if (ret) { +- kobject_uevent(&q->kobj, KOBJ_REMOVE); +- kobject_del(&q->kobj); +- return ret; ++ elv_unregister_queue(q); ++ goto err; + } + + return 0; ++ ++err: ++ kobject_uevent(&q->kobj, KOBJ_REMOVE); ++ kobject_del(&q->kobj); ++ return ret; + } + + void blk_unregister_queue(struct gendisk *disk) +@@ -301,6 +462,7 @@ + struct request_queue *q = disk->queue; + + if (q && q->request_fn) { ++ blk_protect_unregister(q); + elv_unregister_queue(q); + + kobject_uevent(&q->kobj, KOBJ_REMOVE); +diff -Naur a/Documentation/block/disk-protection.txt b/Documentation/block/disk-protection.txt +--- a/Documentation/block/disk-protection.txt 1970-01-01 01:00:00.000000000 +0100 ++++ b/Documentation/block/disk-protection.txt 2008-04-13 14:25:48.000000000 +0200 +@@ -0,0 +1,79 @@ ++Hard disk protection ++==================== ++ ++ ++Intro ++----- ++ATA/ATAPI-7 specifies the IDLE IMMEDIATE command with UNLOAD FEATURE. ++Issuing this command should cause the drive to switch to idle mode and ++unload disk heads. This feature is being used in modern laptops in ++conjunction with accelerometers and appropriate software to implement ++a shock protection facility. The idea is to stop all I/O operations on ++the internal hard drive and park its heads on the ramp when critical ++situations are anticipated. The desire to have such a feature ++available on GNU/Linux systems has been the original motivation to ++implement a generic disk parking interface in the Linux kernel. ++ ++ ++The interface ++------------- ++The interface works as follows: Writing an integer value to ++/sys/block/*/queue/protect will park the respective drive and freeze ++the block layer queue for the specified number of seconds. When the ++timeout expires and no further disk park request has been issued in ++the meantime, the queue is unfrozen and accumulated I/O operations are ++performed. ++ ++IMPORTANT NOTE: ++Not all ATA drives implement IDLE IMMEDIATE with UNLOAD FEATURE and ++quite a few of those that do so, don't report this capability as ++described in the specs. When a disk park has been requested through ++sysfs as described above, the kernel will try to determine if the ++drive supports the UNLOAD FEATURE by default. The kernel will only ++rely on the IDLE IMMEDIATE with UNLOAD FEATURE command if it is ++convinced that this command is actually supported by the disk drive; ++otherwise, it will fall back to STANDBY IMMEDIATE. Resuming from the ++latter will take much longer and it is generally more likely to have a ++negative impact on the drive's lifetime due to the inclease of spin ++down and up cycles. If you want to use this interface in a shock ++protection framework and you know that your drive does indeed support ++the IDLE IMMEDIATE with UNLOAD FEATURE command despite not saying so, ++you can force the kernel to issue that command by doing the following ++on the command line: ++# echo -n unload > /sys/block/sda/queue/protect_method ++(replace sda by the drive identifier as appropriate). ++ ++/sys/block/*/queue/protect_method accepts auto, unload and standby ++respectively. Reading from protect_method shows the available options ++surrounding the active one with brackets. When auto is active, this ++will change to whatever the kernel sees fit after the next disk park ++command has been issued. ++ ++ ++References ++---------- ++ ++There are several laptops from different brands featuring shock ++protection capabilities. As manufacturers have refused to support open ++source development of the required software components so far, Linux ++support for shock protection varies considerably between different ++hardware implementations. Ideally, this section should contain a list ++of poiters at different projects aiming at an implementation of shock ++protection on different systeems. Unfortunately, I only know of a ++single project which, although still considered experimental, is fit ++for use. Please feel free to add projects that have been the victims ++of my ignorance. ++ ++- http://www.thinkwiki.org/wiki/HDAPS ++ See this page for information about Linux support of the hard disk ++ active protection syystem as implemented in IBM/Lenovo Thinkpads. ++ ++ ++CREDITS ++------- ++ ++The patch to implement the interface described in this file has ++originally been published by Jon Escombe <lists-Xbpc2PeERmvQXOPxS62xeg@public.gmane.org>. ++ ++ ++05 Dec 2006, Elias Oltmanns <eo-oA28OIkTjSVZXbeN9DUtxg@public.gmane.org> +diff -Naur a/drivers/ata/libata-scsi.c b/drivers/ata/libata-scsi.c +--- a/drivers/ata/libata-scsi.c 2008-04-13 14:04:23.000000000 +0200 ++++ b/drivers/ata/libata-scsi.c 2008-04-13 14:26:04.000000000 +0200 +@@ -831,7 +831,7 @@ + * prevent SCSI midlayer from automatically deferring + * requests. + */ +- sdev->max_device_blocked = 1; ++ sdev->max_device_blocked = 2; + } + + /** +@@ -905,6 +905,38 @@ + return 0; + } + ++extern int scsi_protect_queue(struct request_queue *q, int unload); ++extern int scsi_unprotect_queue(struct request_queue *q); ++ ++static int ata_scsi_issue_protect_fn(struct request_queue *q) ++{ ++ struct scsi_device *sdev = q->queuedata; ++ struct ata_port *ap = ata_shost_to_port(sdev->host); ++ struct ata_device *dev = ata_scsi_find_dev(ap, sdev); ++ int unload = q->protect_method; ++ unsigned long flags; ++ ++ if (!dev) { ++ printk(KERN_DEBUG "ata_scsi_issue_protect_fn(): Couldn't find ATA device to be parked.\n"); ++ return -ENXIO; ++ } ++ ++ if (unload == 2) { ++ unload = ata_id_has_unload(dev->id) ? 1 : 0; ++ spin_lock_irqsave(q->queue_lock, flags); ++ q->protect_method = unload; ++ spin_unlock_irqrestore(q->queue_lock, flags); ++ } ++ ++ /* call scsi_protect_queue, requesting either unload or standby */ ++ return scsi_protect_queue(q, unload); ++} ++ ++static int ata_scsi_issue_unprotect_fn(struct request_queue *q) ++{ ++ return scsi_unprotect_queue(q); ++} ++ + /** + * ata_scsi_slave_config - Set SCSI device attributes + * @sdev: SCSI device to examine +@@ -927,6 +959,10 @@ + + if (dev) + rc = ata_scsi_dev_config(sdev, dev); ++ blk_queue_issue_protect_fn(sdev->request_queue, ++ ata_scsi_issue_protect_fn); ++ blk_queue_issue_unprotect_fn(sdev->request_queue, ++ ata_scsi_issue_unprotect_fn); + + return rc; + } +@@ -3206,7 +3242,7 @@ + * Set host_blocked to 1 to prevent SCSI midlayer from + * automatically deferring requests. + */ +- shost->max_host_blocked = 1; ++ shost->max_host_blocked = 2; + + rc = scsi_add_host(ap->scsi_host, ap->host->dev); + if (rc) +diff -Naur a/drivers/ide/ide-disk.c b/drivers/ide/ide-disk.c +--- a/drivers/ide/ide-disk.c 2008-04-13 14:04:31.000000000 +0200 ++++ b/drivers/ide/ide-disk.c 2008-04-13 14:25:48.000000000 +0200 +@@ -612,6 +612,148 @@ + } + + /* ++ * todo: ++ * - we freeze the queue regardless of success and rely on the ++ * ide_protect_queue function to thaw immediately if the command ++ * failed (to be consistent with the libata handler)... should ++ * we also inspect here? ++ */ ++void ide_end_protect_rq(struct request *rq, int error) ++{ ++ struct completion *waiting = rq->end_io_data; ++ ++ rq->end_io_data = NULL; ++ /* spin lock already accquired */ ++ if (!blk_queue_stopped(rq->q)) ++ blk_stop_queue(rq->q); ++ ++ complete(waiting); ++} ++ ++int ide_unprotect_queue(struct request_queue *q) ++{ ++ struct request rq; ++ unsigned long flags; ++ int pending, rc = 0; ++ ide_drive_t *drive = q->queuedata; ++ ide_task_t task; ++ ++ if (!blk_queue_stopped(q)) ++ return -EIO; ++ ++ /* Are there any pending jobs on the queue? */ ++ pending = ((q->rq.count[READ] > 0) || (q->rq.count[WRITE] > 0)) ? 1 : 0; ++ ++ spin_lock_irqsave(q->queue_lock, flags); ++ blk_start_queue(q); ++ spin_unlock_irqrestore(q->queue_lock, flags); ++ ++ /* The unload feature of the IDLE_IMMEDIATE command ++ temporarily disables HD power management from spinning down ++ the disk. Any other command will reenable HD pm, so, if ++ there are no pending jobs on the queue, another ++ CHECK_POWER_MODE1 command without the unload feature should do ++ just fine. */ ++ if (!pending) { ++ printk(KERN_DEBUG "ide_unprotect_queue(): No pending I/O, re-enabling power management..\n"); ++ memset(&task, 0, sizeof(task)); ++ task.tf.command = WIN_CHECKPOWERMODE1; /* CHECK_POWER_MODE1 */ ++ task.tf_flags = IDE_TFLAG_TF | IDE_TFLAG_DEVICE; ++ task.data_phase = TASKFILE_NO_DATA; ++ ide_init_drive_cmd(&rq); ++ rq.cmd_type = REQ_TYPE_ATA_TASKFILE; ++ rq.special = &task; ++ rc = ide_do_drive_cmd(drive, &rq, ide_head_wait); ++ } ++ ++ return rc; ++} ++ ++int ide_protect_queue(struct request_queue *q, int unload) ++{ ++ ide_drive_t *drive = q->queuedata; ++ struct request rq; ++ ide_task_t task; ++ int ret = 0; ++ DECLARE_COMPLETION(wait); ++ ++ memset(&rq, 0, sizeof(rq)); ++ memset(&task, 0, sizeof(task)); ++ ++ if (blk_queue_stopped(q)) ++ return -EIO; ++ ++ task.data_phase = TASKFILE_NO_DATA; ++ task.tf_flags = IDE_TFLAG_TF | IDE_TFLAG_DEVICE; ++ if (unload) { ++ task.tf.command = 0xe1; ++ task.tf.feature = 0x44; ++ task.tf.lbal = 0x4c; ++ task.tf.lbam = 0x4e; ++ task.tf.lbah = 0x55; ++ } else ++ task.tf.command = 0xe0; ++ ++ /* Issue the park command & freeze */ ++ ide_init_drive_cmd(&rq); ++ ++ rq.cmd_type = REQ_TYPE_ATA_TASKFILE; ++ rq.special = &task; ++ rq.end_io_data = &wait; ++ rq.end_io = ide_end_protect_rq; ++ ++ ret = ide_do_drive_cmd(drive, &rq, ide_next); ++ wait_for_completion(&wait); ++ ++ if (ret) { ++ printk(KERN_DEBUG "ide_protect_queue(): Warning: head NOT parked!..\n"); ++ ide_unprotect_queue(q); ++ return ret; ++ } ++ ++ if (unload) { ++ if (task.tf.lbal == 0xc4) ++ printk(KERN_DEBUG "ide_protect_queue(): head parked..\n"); ++ else { ++ /* error parking the head */ ++ printk(KERN_DEBUG "ide_protect_queue(): head NOT parked!..\n"); ++ ret = -EIO; ++ ide_unprotect_queue(q); ++ } ++ } else ++ printk(KERN_DEBUG "ide_protect_queue(): head park not requested, used standby!..\n"); ++ ++ return ret; ++} ++ ++int idedisk_issue_protect_fn(struct request_queue *q) ++{ ++ ide_drive_t *drive = q->queuedata; ++ int unload = q->protect_method; ++ unsigned long flags; ++ ++ /* ++ * Check capability of the device - ++ * - if "idle immediate with unload" is supported we use that, else ++ * we use "standby immediate" and live with spinning down the drive.. ++ * (Word 84, bit 13 of IDENTIFY DEVICE data) ++ */ ++ if (unload == 2) { ++ unload = drive->id->cfsse & (1 << 13) ? 1 : 0; ++ spin_lock_irqsave(q->queue_lock, flags); ++ q->protect_method = unload; ++ spin_unlock_irqrestore(q->queue_lock, flags); ++ } ++ ++ return ide_protect_queue(q, unload); ++} ++ ++int idedisk_issue_unprotect_fn(struct request_queue *q) ++{ ++ return ide_unprotect_queue(q); ++} ++ ++/* + * This is tightly woven into the driver->do_special can not touch. + * DON'T do it again until a total personality rewrite is committed. + */ +@@ -877,6 +1019,9 @@ + drive->wcache = 1; + + write_cache(drive, 1); ++ ++ blk_queue_issue_protect_fn(drive->queue, idedisk_issue_protect_fn); ++ blk_queue_issue_unprotect_fn(drive->queue, idedisk_issue_unprotect_fn); + } + + static void ide_cacheflush_p(ide_drive_t *drive) +diff -Naur a/drivers/ide/ide-io.c b/drivers/ide/ide-io.c +--- a/drivers/ide/ide-io.c 2008-04-13 14:04:31.000000000 +0200 ++++ b/drivers/ide/ide-io.c 2008-04-13 14:25:48.000000000 +0200 +@@ -1158,6 +1158,17 @@ + } + + /* ++ * Don't accept a request when the queue is stopped (unless we ++ * are resuming from suspend). Prevents existing queue entries ++ * being processed after queue is stopped by the hard disk ++ * protection mechanism... ++ */ ++ if (test_bit(QUEUE_FLAG_STOPPED, &drive->queue->queue_flags) && !blk_pm_resume_request(rq)) { ++ hwgroup->busy = 0; ++ break; ++ } ++ ++ /* + * Sanity: don't accept a request that isn't a PM request + * if we are currently power managed. This is very important as + * blk_stop_queue() doesn't prevent the elv_next_request() +@@ -1651,6 +1662,9 @@ + where = ELEVATOR_INSERT_FRONT; + rq->cmd_flags |= REQ_PREEMPT; + } ++ if (action == ide_next) ++ where = ELEVATOR_INSERT_FRONT; ++ + __elv_add_request(drive->queue, rq, where, 0); + ide_do_request(hwgroup, IDE_NO_IRQ); + spin_unlock_irqrestore(&ide_lock, flags); +diff -Naur a/drivers/scsi/scsi_lib.c b/drivers/scsi/scsi_lib.c +--- a/drivers/scsi/scsi_lib.c 2008-04-13 14:04:50.000000000 +0200 ++++ b/drivers/scsi/scsi_lib.c 2008-04-13 14:25:48.000000000 +0200 +@@ -2248,7 +2248,13 @@ + int + scsi_device_quiesce(struct scsi_device *sdev) + { ++ int i; + int err = scsi_device_set_state(sdev, SDEV_QUIESCE); ++ for (i = 0; err && (sdev->sdev_state == SDEV_BLOCK) && (i < 100); ++ i++) { ++ msleep_interruptible(200); ++ err = scsi_device_set_state(sdev, SDEV_QUIESCE); ++ } + if (err) + return err; + +@@ -2496,3 +2502,168 @@ + kunmap_atomic(virt, KM_BIO_SRC_IRQ); + } + EXPORT_SYMBOL(scsi_kunmap_atomic_sg); ++ ++/* ++ * Structure required for synchronous io completion after queue freezing ++ */ ++struct scsi_protect_io_context_sync { ++ struct scsi_device *sdev; ++ int result; ++ char *sense; ++ struct completion *waiting; ++}; ++ ++/* ++ * scsi_protect_wait_done() ++ * Command completion handler for scsi_protect_queue(). ++ * ++ * Unable to call scsi_internal_device_block() as ++ * scsi_end_request() already has the spinlock. So, ++ * we put the necessary functionality inline. ++ * ++ * todo: ++ * - we block the queue regardless of success and rely on the ++ * scsi_protect_queue function to unblock if the command ++ * failed... should we also inspect here? ++ */ ++static void scsi_protect_wait_done(void *data, char *sense, int result, int resid) ++{ ++ struct scsi_protect_io_context_sync *siocs = data; ++ struct completion *waiting = siocs->waiting; ++ struct request_queue *q = siocs->sdev->request_queue; ++ ++ siocs->waiting = NULL; ++ siocs->result = result; ++ memcpy(siocs->sense, sense, SCSI_SENSE_BUFFERSIZE); ++ ++ if (!scsi_device_set_state(siocs->sdev, SDEV_BLOCK)) ++ blk_stop_queue(q); ++ ++ complete(waiting); ++} ++ ++/* ++ * scsi_unprotect_queue() ++ * - release the queue that was previously blocked ++ */ ++int scsi_unprotect_queue(struct request_queue *q) ++{ ++ struct scsi_device *sdev = q->queuedata; ++ int rc = 0, pending = 0; ++ u8 scsi_cmd[MAX_COMMAND_SIZE]; ++ struct scsi_sense_hdr sshdr; ++ ++ if (sdev->sdev_state != SDEV_BLOCK) ++ return -ENXIO; ++ ++ /* Are there any pending jobs on the queue? */ ++ pending = ((q->rq.count[READ] > 0) || (q->rq.count[WRITE] > 0)) ? 1 : 0; ++ ++ rc = scsi_internal_device_unblock(sdev); ++ if (rc) ++ return rc; ++ ++ if (!pending) { ++ printk(KERN_DEBUG "scsi_unprotect_queue(): No pending I/O, re-enabling power management..\n"); ++ ++ memset(scsi_cmd, 0, sizeof(scsi_cmd)); ++ scsi_cmd[0] = ATA_16; ++ scsi_cmd[1] = (3 << 1); /* Non-data */ ++ /* scsi_cmd[2] is already 0 -- no off.line, cc, or data xfer */ ++ scsi_cmd[14] = 0xe5; /* CHECK_POWER_MODE1 */ ++ ++ /* Good values for timeout and retries? Values below ++ from scsi_ioctl_send_command() for default case... */ ++ if (scsi_execute_req(sdev, scsi_cmd, DMA_NONE, NULL, 0, &sshdr, ++ (10*HZ), 5)) ++ rc = -EIO; ++ } ++ return rc; ++} ++EXPORT_SYMBOL_GPL(scsi_unprotect_queue); ++ ++/* ++ * scsi_protect_queue() ++ * - build and issue the park/standby command.. ++ * - queue is blocked during command completion handler ++ */ ++int scsi_protect_queue(struct request_queue *q, int unload) ++{ ++ struct scsi_protect_io_context_sync siocs; ++ struct scsi_device *sdev = q->queuedata; ++ int rc = 0; ++ u8 args[7]; ++ u8 scsi_cmd[MAX_COMMAND_SIZE]; ++ unsigned char sense[SCSI_SENSE_BUFFERSIZE]; ++ unsigned char *desc; ++ DECLARE_COMPLETION_ONSTACK(wait); ++ ++ if (sdev->sdev_state != SDEV_RUNNING) ++ return -ENXIO; ++ ++ memset(args, 0, sizeof(args)); ++ memset(sense, 0, sizeof(sense)); ++ ++ if (unload) { ++ args[0] = 0xe1; ++ args[1] = 0x44; ++ args[3] = 0x4c; ++ args[4] = 0x4e; ++ args[5] = 0x55; ++ } else ++ args[0] = 0xe0; ++ ++ memset(scsi_cmd, 0, sizeof(scsi_cmd)); ++ scsi_cmd[0] = ATA_16; ++ scsi_cmd[1] = (3 << 1); /* Non-data */ ++ scsi_cmd[2] = 0x20; /* no off.line, or data xfer, request cc */ ++ scsi_cmd[4] = args[1]; ++ scsi_cmd[6] = args[2]; ++ scsi_cmd[8] = args[3]; ++ scsi_cmd[10] = args[4]; ++ scsi_cmd[12] = args[5]; ++ scsi_cmd[14] = args[0]; ++ siocs.sdev = sdev; ++ siocs.sense = sense; ++ siocs.waiting = &wait; ++ ++ rc = scsi_execute_async(sdev, scsi_cmd, COMMAND_SIZE(scsi_cmd[0]), ++ DMA_NONE, NULL, 0, 0, (10*HZ), 5, ++ &siocs, &scsi_protect_wait_done, GFP_NOWAIT); ++ if (rc) ++ goto out; ++ wait_for_completion(&wait); ++ ++ if (siocs.result != ((DRIVER_SENSE << 24) + SAM_STAT_CHECK_CONDITION)) { ++ printk(KERN_DEBUG "scsi_protect_queue(): head NOT parked!..\n"); ++ scsi_unprotect_queue(q); /* just in case we still managed to block */ ++ rc = -EIO; ++ goto out; ++ } ++ ++ desc = sense + 8; ++ ++ /* Retrieve data from check condition */ ++ args[1] = desc[3]; ++ args[2] = desc[5]; ++ args[3] = desc[7]; ++ args[4] = desc[9]; ++ args[5] = desc[11]; ++ args[0] = desc[13]; ++ ++ if (unload) { ++ if (args[3] == 0xc4) ++ printk(KERN_DEBUG "scsi_protect_queue(): head parked..\n"); ++ else { ++ /* error parking the head */ ++ printk(KERN_DEBUG "scsi_protect_queue(): head NOT parked!..\n"); ++ rc = -EIO; ++ scsi_unprotect_queue(q); ++ } ++ } else ++ printk(KERN_DEBUG "scsi_protect_queue(): head park not requested, used standby!..\n"); ++ ++out: ++ return rc; ++} ++EXPORT_SYMBOL_GPL(scsi_protect_queue); +diff -Naur a/include/linux/ata.h b/include/linux/ata.h +--- a/include/linux/ata.h 2008-04-13 14:04:53.000000000 +0200 ++++ b/include/linux/ata.h 2008-04-13 14:25:48.000000000 +0200 +@@ -459,6 +459,18 @@ + + #define ata_id_cdb_intr(id) (((id)[0] & 0x60) == 0x20) + ++static inline int ata_id_has_unload(const u16 *id) ++{ ++ /* ATA-7 specifies two places to indicate unload feature support. ++ * Since I don't really understand the difference, I'll just check ++ * both and only return zero if none of them indicates otherwise. */ ++ if ((id[84] & 0xC000) == 0x4000 && id[84] & (1 << 13)) ++ return id[84] & (1 << 13); ++ if ((id[87] & 0xC000) == 0x4000) ++ return id[87] & (1 << 13); ++ return 0; ++} ++ + static inline bool ata_id_has_hipm(const u16 *id) + { + u16 val = id[76]; +diff -Naur a/include/linux/blkdev.h b/include/linux/blkdev.h +--- a/include/linux/blkdev.h 2008-04-13 14:04:53.000000000 +0200 ++++ b/include/linux/blkdev.h 2008-04-13 14:25:48.000000000 +0200 +@@ -260,6 +260,8 @@ + typedef void (prepare_flush_fn) (struct request_queue *, struct request *); + typedef void (softirq_done_fn)(struct request *); + typedef int (dma_drain_needed_fn)(struct request *); ++typedef int (issue_protect_fn) (struct request_queue *); ++typedef int (issue_unprotect_fn) (struct request_queue *); + + enum blk_queue_state { + Queue_down, +@@ -297,6 +299,8 @@ + prepare_flush_fn *prepare_flush_fn; + softirq_done_fn *softirq_done_fn; + dma_drain_needed_fn *dma_drain_needed; ++ issue_protect_fn *issue_protect_fn; ++ issue_unprotect_fn *issue_unprotect_fn; + + /* + * Dispatch queue sorting +@@ -312,6 +316,14 @@ + unsigned long unplug_delay; /* After this many jiffies */ + struct work_struct unplug_work; + ++ /* ++ * Auto-unfreeze state ++ */ ++ struct timer_list unfreeze_timer; ++ int max_unfreeze; /* At most this many seconds */ ++ struct work_struct unfreeze_work; ++ int protect_method; ++ + struct backing_dev_info backing_dev_info; + + /* +@@ -718,6 +730,8 @@ + extern unsigned blk_ordered_cur_seq(struct request_queue *); + extern unsigned blk_ordered_req_seq(struct request *); + extern void blk_ordered_complete_seq(struct request_queue *, unsigned, int); ++extern void blk_queue_issue_protect_fn(struct request_queue *, issue_protect_fn *); ++extern void blk_queue_issue_unprotect_fn(struct request_queue *, issue_unprotect_fn *); + + extern int blk_rq_map_sg(struct request_queue *, struct request *, struct scatterlist *); + extern void blk_dump_rq_flags(struct request *, char *); +diff -Naur a/include/linux/ide.h b/include/linux/ide.h +--- a/include/linux/ide.h 2008-04-13 14:04:53.000000000 +0200 ++++ b/include/linux/ide.h 2008-04-13 14:25:48.000000000 +0200 +@@ -837,6 +837,7 @@ + */ + typedef enum { + ide_wait, /* insert rq at end of list, and wait for it */ ++ ide_next, /* insert rq immediately after current request */ + ide_preempt, /* insert rq in front of current request */ + ide_head_wait, /* insert rq in front of current request and wait for it */ + ide_end /* insert rq at end of list, but don't wait for it */ diff --git a/sys-kernel/thinkpad-sources/files/2.6.25/03-ipw2200-inject-for-2.6.25.patch b/sys-kernel/thinkpad-sources/files/2.6.25/03-ipw2200-inject-for-2.6.25.patch new file mode 100644 index 0000000..ffb49a9 --- /dev/null +++ b/sys-kernel/thinkpad-sources/files/2.6.25/03-ipw2200-inject-for-2.6.25.patch @@ -0,0 +1,77 @@ +--- a/drivers/net/wireless/ipw2200.c 2007-10-07 12:41:29.000000000 +0200 ++++ b/drivers/net/wireless/ipw2200.c 2007-10-07 12:50:43.000000000 +0200 +@@ -1860,6 +1860,66 @@ + static DEVICE_ATTR(net_stats, S_IWUSR | S_IRUGO, + show_net_stats, store_net_stats); + ++static int ipw_tx_skb(struct ipw_priv *priv, struct ieee80211_txb *txb, int pri); ++ ++/* SYSFS INJECT */ ++static ssize_t store_inject(struct device *d, ++#if LINUX_VERSION_CODE > KERNEL_VERSION(2,6,12) ++ struct device_attribute *attr, ++#endif ++ const char *buf, size_t count) ++{ ++ struct ipw_priv *priv = (struct ipw_priv *)d->driver_data; ++ struct ieee80211_device *ieee = priv->ieee; ++ struct ieee80211_txb * txb; ++ struct sk_buff *skb_frag; ++ unsigned char * newbuf; ++ unsigned long flags; ++ ++ // should test (ieee->is_queue_full) ++ ++ // Fw only accepts data, so avoid accidental fw errors. ++ if ( (buf[0]&0x0c) != '\x08') { ++ //printk("ipw2200: inject: discarding non-data frame (type=%02X)\n",(int)(unsigned char)buf[0]); ++ return count; ++ } ++ ++ if (count>1500) { ++ count=1500; ++ printk("ipw2200: inject: cutting down frame to 1500 bytes\n"); ++ } ++ ++ spin_lock_irqsave(&priv->lock, flags); ++ ++ // Create a txb with one skb ++ txb = kmalloc(sizeof(struct ieee80211_txb) + sizeof(u8 *), GFP_ATOMIC); ++ if (!txb) ++ goto nosepuede; ++ txb->nr_frags=1; ++ txb->frag_size = ieee->tx_headroom; ++ txb->fragments[0]=__dev_alloc_skb(count + ieee->tx_headroom, GFP_ATOMIC); ++ if (!txb->fragments[0]) { ++ kfree(txb); ++ goto nosepuede; ++ } ++ skb_reserve(txb->fragments[0], ieee->tx_headroom); ++ txb->encrypted=0; ++ txb->payload_size=count; ++ skb_frag = txb->fragments[0]; ++ newbuf=skb_put(skb_frag, count); ++ ++ // copy data into txb->skb and send it ++ memcpy(newbuf, buf, count); ++ ++ ipw_tx_skb(priv, txb, 0); ++ ++nosepuede: ++ spin_unlock_irqrestore(&priv->lock, flags); ++ return count; ++} ++ ++static DEVICE_ATTR(inject, S_IWUSR, NULL, store_inject); ++ + static ssize_t show_channels(struct device *d, + struct device_attribute *attr, + char *buf) +@@ -11498,6 +11558,7 @@ + #ifdef CONFIG_IPW2200_PROMISCUOUS + &dev_attr_rtap_iface.attr, + &dev_attr_rtap_filter.attr, ++ &dev_attr_inject.attr, + #endif + NULL + }; diff --git a/sys-kernel/thinkpad-sources/files/2.6.25/04-linux-phc-0.3.1-for-2.6.25.patch b/sys-kernel/thinkpad-sources/files/2.6.25/04-linux-phc-0.3.1-for-2.6.25.patch new file mode 100644 index 0000000..f40f581 --- /dev/null +++ b/sys-kernel/thinkpad-sources/files/2.6.25/04-linux-phc-0.3.1-for-2.6.25.patch @@ -0,0 +1,526 @@ +diff --new-file -a --unified=5 --recursive linux-2.6.24-rc1/arch/x86/kernel/cpu/cpufreq/acpi-cpufreq.c linux-2.6.24-rc1_phc/arch/x86/kernel/cpu/cpufreq/acpi-cpufreq.c +--- linux-2.6.23-rc3/arch/x86/kernel/cpu/cpufreq/acpi-cpufreq.c 2007-08-13 06:25:24.000000000 +0200 ++++ linux-source-2.6.23-rc3/arch/x86/kernel/cpu/cpufreq/acpi-cpufreq.c 2007-08-14 15:33:30.000000000 +0200 +@@ -23,10 +23,15 @@ + * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. + * + * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + */ + ++/* This file has been patched with Linux PHC: https://www.dedigentoo.org/trac/linux-phc ++ * Patch version: linux-phc-0.3.1-kernel-vanilla-2.6.23.patch ++ */ ++ ++ + #include <linux/kernel.h> + #include <linux/module.h> + #include <linux/init.h> + #include <linux/smp.h> + #include <linux/sched.h> +@@ -59,12 +59,18 @@ + #define INTEL_MSR_RANGE (0xffff) + #define CPUID_6_ECX_APERFMPERF_CAPABILITY (0x1) + ++#define INTEL_MSR_VID_MASK (0x00ff) ++#define INTEL_MSR_FID_MASK (0xff00) ++#define INTEL_MSR_FID_SHIFT (0x8) ++#define PHC_VERSION_STRING "0.3.1:1" ++ + struct acpi_cpufreq_data { + struct acpi_processor_performance *acpi_data; + struct cpufreq_frequency_table *freq_table; + unsigned int max_freq; + unsigned int resume; + unsigned int cpu_feature; ++ acpi_integer *original_controls; + }; + + static DEFINE_PER_CPU(struct acpi_cpufreq_data *, drv_data); +@@ -102,17 +113,19 @@ + } + + static unsigned extract_msr(u32 msr, struct acpi_cpufreq_data *data) + { + int i; ++ u32 fid; + struct acpi_processor_performance *perf; + +- msr &= INTEL_MSR_RANGE; ++ fid = msr & INTEL_MSR_FID_MASK; + perf = data->acpi_data; + + for (i=0; data->freq_table[i].frequency != CPUFREQ_TABLE_END; i++) { +- if (msr == perf->states[data->freq_table[i].index].status) ++ if (fid == (perf->states[data->freq_table[i].index].status & ++ INTEL_MSR_FID_MASK)) + return data->freq_table[i].frequency; + } + return data->freq_table[0].frequency; + } + +@@ -729,10 +742,12 @@ + if (data) { + cpufreq_frequency_table_put_attr(policy->cpu); + per_cpu(drv_data, policy->cpu) = NULL; + acpi_processor_unregister_performance(data->acpi_data, + policy->cpu); ++ if (data->original_controls) ++ kfree(data->original_controls); + kfree(data); + } + + return 0; + } +@@ -746,12 +761,452 @@ + data->resume = 1; + + return 0; + } + ++ ++ ++ ++/* sysfs interface to change operating points voltages */ ++ ++static unsigned int extract_fid_from_control(unsigned int control) ++{ ++ return ((control & INTEL_MSR_FID_MASK) >> INTEL_MSR_FID_SHIFT); ++} ++ ++static unsigned int extract_vid_from_control(unsigned int control) ++{ ++ return (control & INTEL_MSR_VID_MASK); ++} ++ ++static ssize_t check_origial_table (struct acpi_cpufreq_data *data) ++{ ++ struct acpi_processor_performance *acpi_data; ++ struct cpufreq_frequency_table *freq_table; ++ unsigned int state_index; ++ ++ acpi_data = data->acpi_data; ++ freq_table = data->freq_table; ++ ++ if (data->original_controls == NULL) { ++ // Backup original control values ++ data->original_controls = kcalloc(acpi_data->state_count, ++ sizeof(acpi_integer), GFP_KERNEL); ++ if (data->original_controls == NULL) { ++ printk("failed to allocate memory for original control values\n"); ++ return -ENOMEM; ++ } ++ for (state_index = 0; state_index < acpi_data->state_count; state_index++) { ++ data->original_controls[state_index] = acpi_data->states[state_index].control; ++ } ++ } ++ return 0; ++} ++ ++static ssize_t show_freq_attr_vids(struct cpufreq_policy *policy, char *buf) ++{ ++ struct acpi_cpufreq_data *data = per_cpu(drv_data, policy->cpu); ++ struct acpi_processor_performance *acpi_data; ++ struct cpufreq_frequency_table *freq_table; ++ unsigned int i; ++ unsigned int vid; ++ ssize_t count = 0; ++ ++ if (unlikely(data == NULL || ++ data->acpi_data == NULL || ++ data->freq_table == NULL || ++ data->cpu_feature != SYSTEM_INTEL_MSR_CAPABLE)) { ++ return -ENODEV; ++ } ++ ++ acpi_data = data->acpi_data; ++ freq_table = data->freq_table; ++ ++ for (i = 0; freq_table[i].frequency != CPUFREQ_TABLE_END; i++) { ++ vid = extract_vid_from_control(acpi_data->states[freq_table[i].index].control); ++ count += sprintf(&buf[count], "%u ", vid); ++ } ++ count += sprintf(&buf[count], "\n"); ++ ++ return count; ++} ++ ++static ssize_t show_freq_attr_default_vids(struct cpufreq_policy *policy, char *buf) ++{ ++ struct acpi_cpufreq_data *data = per_cpu(drv_data, policy->cpu); ++ struct cpufreq_frequency_table *freq_table; ++ unsigned int i; ++ unsigned int vid; ++ ssize_t count = 0; ++ ssize_t retval; ++ ++ if (unlikely(data == NULL || ++ data->acpi_data == NULL || ++ data->freq_table == NULL || ++ data->cpu_feature != SYSTEM_INTEL_MSR_CAPABLE)) { ++ return -ENODEV; ++ } ++ ++ retval = check_origial_table(data); ++ if (0 != retval) ++ return retval; ++ ++ freq_table = data->freq_table; ++ ++ for (i = 0; freq_table[i].frequency != CPUFREQ_TABLE_END; i++) { ++ vid = extract_vid_from_control(data->original_controls[freq_table[i].index]); ++ count += sprintf(&buf[count], "%u ", vid); ++ } ++ count += sprintf(&buf[count], "\n"); ++ ++ return count; ++} ++ ++static ssize_t show_freq_attr_fids(struct cpufreq_policy *policy, char *buf) ++{ ++ struct acpi_cpufreq_data *data = per_cpu(drv_data, policy->cpu); ++ struct acpi_processor_performance *acpi_data; ++ struct cpufreq_frequency_table *freq_table; ++ unsigned int i; ++ unsigned int fid; ++ ssize_t count = 0; ++ ++ if (unlikely(data == NULL || ++ data->acpi_data == NULL || ++ data->freq_table == NULL || ++ data->cpu_feature != SYSTEM_INTEL_MSR_CAPABLE)) { ++ return -ENODEV; ++ } ++ ++ acpi_data = data->acpi_data; ++ freq_table = data->freq_table; ++ ++ for (i = 0; freq_table[i].frequency != CPUFREQ_TABLE_END; i++) { ++ fid = extract_fid_from_control(acpi_data->states[freq_table[i].index].control); ++ count += sprintf(&buf[count], "%u ", fid); ++ } ++ count += sprintf(&buf[count], "\n"); ++ ++ return count; ++} ++ ++static ssize_t show_freq_attr_controls(struct cpufreq_policy *policy, char *buf) ++{ ++ struct acpi_cpufreq_data *data = per_cpu(drv_data, policy->cpu); ++ struct acpi_processor_performance *acpi_data; ++ struct cpufreq_frequency_table *freq_table; ++ unsigned int i; ++ unsigned int fid; ++ unsigned int vid; ++ ssize_t count = 0; ++ ++ if (unlikely(data == NULL || ++ data->acpi_data == NULL || ++ data->freq_table == NULL || ++ data->cpu_feature != SYSTEM_INTEL_MSR_CAPABLE)) { ++ return -ENODEV; ++ } ++ ++ acpi_data = data->acpi_data; ++ freq_table = data->freq_table; ++ ++ for (i = 0; freq_table[i].frequency != CPUFREQ_TABLE_END; i++) { ++ fid = extract_fid_from_control(acpi_data->states[freq_table[i].index].control); ++ vid = extract_vid_from_control(acpi_data->states[freq_table[i].index].control); ++ count += sprintf(&buf[count], "%u:%u ", fid, vid); ++ } ++ count += sprintf(&buf[count], "\n"); ++ ++ return count; ++} ++ ++static ssize_t show_freq_attr_default_controls(struct cpufreq_policy *policy, char *buf) ++{ ++ struct acpi_cpufreq_data *data = per_cpu(drv_data, policy->cpu); ++ struct cpufreq_frequency_table *freq_table; ++ unsigned int i; ++ unsigned int fid; ++ unsigned int vid; ++ ssize_t count = 0; ++ ssize_t retval; ++ ++ if (unlikely(data == NULL || ++ data->acpi_data == NULL || ++ data->freq_table == NULL || ++ data->cpu_feature != SYSTEM_INTEL_MSR_CAPABLE)) { ++ return -ENODEV; ++ } ++ ++ retval = check_origial_table(data); ++ if (0 != retval) ++ return retval; ++ ++ freq_table = data->freq_table; ++ ++ for (i = 0; freq_table[i].frequency != CPUFREQ_TABLE_END; i++) { ++ fid = extract_fid_from_control(data->original_controls[freq_table[i].index]); ++ vid = extract_vid_from_control(data->original_controls[freq_table[i].index]); ++ count += sprintf(&buf[count], "%u:%u ", fid, vid); ++ } ++ count += sprintf(&buf[count], "\n"); ++ ++ return count; ++} ++ ++ ++static ssize_t store_freq_attr_vids(struct cpufreq_policy *policy, const char *buf, size_t count) ++{ ++ struct acpi_cpufreq_data *data = per_cpu(drv_data, policy->cpu); ++ struct acpi_processor_performance *acpi_data; ++ struct cpufreq_frequency_table *freq_table; ++ unsigned int freq_index; ++ unsigned int state_index; ++ unsigned int new_vid; ++ unsigned int original_vid; ++ unsigned int new_control; ++ unsigned int original_control; ++ const char *curr_buf = buf; ++ char *next_buf; ++ ssize_t retval; ++ ++ if (unlikely(data == NULL || ++ data->acpi_data == NULL || ++ data->freq_table == NULL || ++ data->cpu_feature != SYSTEM_INTEL_MSR_CAPABLE)) { ++ return -ENODEV; ++ } ++ ++ retval = check_origial_table(data); ++ if (0 != retval) ++ return retval; ++ ++ acpi_data = data->acpi_data; ++ freq_table = data->freq_table; ++ ++ for (freq_index = 0; freq_table[freq_index].frequency != CPUFREQ_TABLE_END; freq_index++) { ++ new_vid = simple_strtoul(curr_buf, &next_buf, 10); ++ if (next_buf == curr_buf) { ++ if ((curr_buf - buf == count - 1) && (*curr_buf == '\n')) { ++ curr_buf++; ++ break; ++ } ++ printk("failed to parse vid value at %i (%s)\n", freq_index, curr_buf); ++ return -EINVAL; ++ } ++ ++ state_index = freq_table[freq_index].index; ++ original_control = data->original_controls[state_index]; ++ original_vid = original_control & INTEL_MSR_VID_MASK; ++ if (new_vid <= original_vid) { ++ new_control = (original_control & ~INTEL_MSR_VID_MASK) | new_vid; ++ dprintk("setting control at %i to %x (default is %x)\n", ++ freq_index, new_control, original_control); ++ acpi_data->states[state_index].control = new_control; ++ ++ } else { ++ printk("skipping vid at %i, %u is greater than default %u\n", ++ freq_index, new_vid, original_vid); ++ } ++ ++ curr_buf = next_buf; ++ while ((curr_buf - buf < count) && ((*curr_buf == ' ') || (*curr_buf == ','))) { ++ curr_buf++; ++ } ++ } ++ ++ /* set new voltage at current frequency */ ++ data->resume = 1; ++ acpi_cpufreq_target(policy, get_cur_freq_on_cpu(policy->cpu), CPUFREQ_RELATION_L); ++ ++ return curr_buf - buf; ++} ++ ++static ssize_t store_freq_attr_controls(struct cpufreq_policy *policy, const char *buf, size_t count) ++{ ++ struct acpi_cpufreq_data *data = per_cpu(drv_data, policy->cpu); ++ struct acpi_processor_performance *acpi_data; ++ struct cpufreq_frequency_table *freq_table; ++ const char *curr_buf; ++ unsigned int op_count; ++ unsigned int state_index; ++ int isok; ++ char *next_buf; ++ ssize_t retval; ++ unsigned int new_vid; ++ unsigned int original_vid; ++ unsigned int new_fid; ++ unsigned int old_fid; ++ unsigned int original_control; ++ unsigned int old_control; ++ unsigned int new_control; ++ int found; ++ ++ if (unlikely(data == NULL || ++ data->acpi_data == NULL || ++ data->freq_table == NULL || ++ data->cpu_feature != SYSTEM_INTEL_MSR_CAPABLE)) { ++ return -ENODEV; ++ } ++ ++ retval = check_origial_table(data); ++ if (0 != retval) ++ return retval; ++ ++ acpi_data = data->acpi_data; ++ freq_table = data->freq_table; ++ ++ op_count = 0; ++ curr_buf = buf; ++ next_buf = NULL; ++ isok = 1; ++ ++ while ( (isok) && (curr_buf != NULL) ) ++ { ++ op_count++; ++ // Parse fid ++ new_fid = simple_strtoul(curr_buf, &next_buf, 10); ++ if ((next_buf != curr_buf) && (next_buf != NULL)) ++ { ++ // Parse separator between frequency and voltage ++ curr_buf = next_buf; ++ next_buf = NULL; ++ if (*curr_buf==':') ++ { ++ curr_buf++; ++ // Parse vid ++ new_vid = simple_strtoul(curr_buf, &next_buf, 10); ++ if ((next_buf != curr_buf) && (next_buf != NULL)) ++ { ++ found = 0; ++ for (state_index = 0; state_index < acpi_data->state_count; state_index++) { ++ old_control = acpi_data->states[state_index].control; ++ old_fid = extract_fid_from_control(old_control); ++ if (new_fid == old_fid) ++ { ++ found = 1; ++ original_control = data->original_controls[state_index]; ++ original_vid = extract_vid_from_control(original_control); ++ if (new_vid <= original_vid) ++ { ++ new_control = (original_control & ~INTEL_MSR_VID_MASK) | new_vid; ++ dprintk("setting control at %i to %x (default is %x)\n", ++ state_index, new_control, original_control); ++ acpi_data->states[state_index].control = new_control; ++ ++ } else { ++ printk("skipping vid at %i, %u is greater than default %u\n", ++ state_index, new_vid, original_vid); ++ } ++ } ++ } ++ ++ if (found == 0) ++ { ++ printk("operating point # %u not found (FID = %u)\n", op_count, new_fid); ++ isok = 0; ++ } ++ ++ // Parse seprator before next operating point, if any ++ curr_buf = next_buf; ++ next_buf = NULL; ++ if ((*curr_buf == ',') || (*curr_buf == ' ')) ++ curr_buf++; ++ else ++ curr_buf = NULL; ++ } ++ else ++ { ++ printk("failed to parse VID of operating point # %u (%s)\n", op_count, curr_buf); ++ isok = 0; ++ } ++ } ++ else ++ { ++ printk("failed to parse operating point # %u (%s)\n", op_count, curr_buf); ++ isok = 0; ++ } ++ } ++ else ++ { ++ printk("failed to parse FID of operating point # %u (%s)\n", op_count, curr_buf); ++ isok = 0; ++ } ++ } ++ ++ if (isok) ++ { ++ retval = count; ++ /* set new voltage at current frequency */ ++ data->resume = 1; ++ acpi_cpufreq_target(policy, get_cur_freq_on_cpu(policy->cpu), CPUFREQ_RELATION_L); ++ } ++ else ++ { ++ retval = -EINVAL; ++ } ++ ++ return retval; ++} ++ ++static ssize_t show_freq_attr_phc_version(struct cpufreq_policy *policy, char *buf) ++{ ++ ssize_t count = 0; ++ count += sprintf(&buf[count], "%s\n", PHC_VERSION_STRING); ++ return count; ++} ++ ++static struct freq_attr cpufreq_freq_attr_phc_version = ++{ ++ .attr = { .name = "phc_version", .mode = 0444, .owner = THIS_MODULE }, ++ .show = show_freq_attr_phc_version, ++ .store = NULL, ++}; ++ ++static struct freq_attr cpufreq_freq_attr_vids = ++{ ++ .attr = { .name = "phc_vids", .mode = 0644, .owner = THIS_MODULE }, ++ .show = show_freq_attr_vids, ++ .store = store_freq_attr_vids, ++}; ++ ++static struct freq_attr cpufreq_freq_attr_default_vids = ++{ ++ .attr = { .name = "phc_default_vids", .mode = 0444, .owner = THIS_MODULE }, ++ .show = show_freq_attr_default_vids, ++ .store = NULL, ++}; ++ ++static struct freq_attr cpufreq_freq_attr_fids = ++{ ++ .attr = { .name = "phc_fids", .mode = 0444, .owner = THIS_MODULE }, ++ .show = show_freq_attr_fids, ++ .store = NULL, ++}; ++ ++static struct freq_attr cpufreq_freq_attr_controls = ++{ ++ .attr = { .name = "phc_controls", .mode = 0644, .owner = THIS_MODULE }, ++ .show = show_freq_attr_controls, ++ .store = store_freq_attr_controls, ++}; ++ ++static struct freq_attr cpufreq_freq_attr_default_controls = ++{ ++ .attr = { .name = "phc_default_controls", .mode = 0444, .owner = THIS_MODULE }, ++ .show = show_freq_attr_default_controls, ++ .store = NULL, ++}; ++ ++ + static struct freq_attr *acpi_cpufreq_attr[] = { ++ &cpufreq_freq_attr_phc_version, + &cpufreq_freq_attr_scaling_available_freqs, ++ &cpufreq_freq_attr_vids, ++ &cpufreq_freq_attr_default_vids, ++ &cpufreq_freq_attr_fids, ++ &cpufreq_freq_attr_controls, ++ &cpufreq_freq_attr_default_controls, + NULL, + }; + + static struct cpufreq_driver acpi_cpufreq_driver = { + .verify = acpi_cpufreq_verify, diff --git a/sys-kernel/thinkpad-sources/files/2.6.25/colored-printk-2.6.25.part1.patch b/sys-kernel/thinkpad-sources/files/2.6.25/colored-printk-2.6.25.part1.patch new file mode 100644 index 0000000..e239571 --- /dev/null +++ b/sys-kernel/thinkpad-sources/files/2.6.25/colored-printk-2.6.25.part1.patch @@ -0,0 +1,113 @@ +diff --git a/drivers/char/Kconfig b/drivers/char/Kconfig +index 47c6be8..a55a1c9 100644 +--- a/drivers/char/Kconfig ++++ b/drivers/char/Kconfig +@@ -58,6 +58,49 @@ config VT_CONSOLE + + If unsure, say Y. + ++config 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. ++ This option enlarges your kernel by approximately 1/2 KB. ++ ++ If unsure, say N. ++ ++config VT_PRINTK_COLOR ++ hex "Colored kernel message output" ++ range 0x00 0xFF ++ depends on VT_CKO ++ default 0x07 ++ ---help--- ++ This option defines with which color kernel messages will be ++ printed to the console. ++ ++ The value you need to enter here is the value 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. ++ + config HW_CONSOLE + bool + depends on VT && !S390 && !UML +diff --git a/drivers/char/vt.c b/drivers/char/vt.c +index 159c9e2..cf61236 100644 +--- a/drivers/char/vt.c ++++ b/drivers/char/vt.c +@@ -73,6 +73,7 @@ + */ + + #include <linux/module.h> ++#include <linux/moduleparam.h> + #include <linux/types.h> + #include <linux/sched.h> + #include <linux/tty.h> +@@ -2392,6 +2393,24 @@ struct tty_driver *console_driver; + + #ifdef CONFIG_VT_CONSOLE + ++#ifdef CONFIG_VT_CKO ++static unsigned int printk_color __read_mostly = CONFIG_VT_PRINTK_COLOR; ++module_param(printk_color, uint, S_IRUGO | S_IWUSR); ++ ++static 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 const unsigned int printk_color; ++static inline void vc_set_color(const struct vc_data *vc, unsigned char c) ++{ ++} ++#endif ++ + /* + * Console on virtual terminal + * +@@ -2434,6 +2453,7 @@ static void vt_console_print(struct console *co, const char *b, unsigned count) + hide_cursor(vc); + + start = (ushort *)vc->vc_pos; ++ vc_set_color(vc, printk_color); + + /* Contrived structure to try to emulate original need_wrap behaviour + * Problems caused when we have need_wrap set on '\n' character */ +@@ -2482,6 +2502,7 @@ static void vt_console_print(struct console *co, const char *b, unsigned count) + } + } + set_cursor(vc); ++ vc_set_color(vc, vc->vc_def_color); + notify_update(vc); + + quit: +-- +To unsubscribe from this list: send the line "unsubscribe linux-kernel" in +the body of a message to majordomo@vger.kernel.org +More majordomo info at http://vger.kernel.org/majordomo-info.html +Please read the FAQ at http://www.tux.org/lkml/ + diff --git a/sys-kernel/thinkpad-sources/files/2.6.25/colored-printk-2.6.25.part2.patch b/sys-kernel/thinkpad-sources/files/2.6.25/colored-printk-2.6.25.part2.patch new file mode 100644 index 0000000..231e9d0 --- /dev/null +++ b/sys-kernel/thinkpad-sources/files/2.6.25/colored-printk-2.6.25.part2.patch @@ -0,0 +1,220 @@ +diff --git a/arch/x86/kernel/early_printk.c b/arch/x86/kernel/early_printk.c +index cff84cd..ba137a4 100644 +--- a/arch/x86/kernel/early_printk.c ++++ b/arch/x86/kernel/early_printk.c +@@ -15,7 +15,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; +@@ -84,7 +85,8 @@ static int early_serial_putc(unsigned char ch) + 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') +@@ -180,7 +182,8 @@ static void __init simnow_init(char *str) + 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); + } +@@ -204,7 +207,7 @@ void early_printk(const char *fmt, ...) + + 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 --git a/drivers/char/Kconfig b/drivers/char/Kconfig +index a55a1c9..3f5877e 100644 +--- a/drivers/char/Kconfig ++++ b/drivers/char/Kconfig +@@ -75,7 +75,9 @@ config VT_PRINTK_COLOR + default 0x07 + ---help--- + This option defines with which color kernel messages will be +- printed to the console. ++ printed to the console. This applies to all log levels. ++ You can change the colors at run-time, or set them at boot-time ++ using the "vt.printk_color" option. + + The value you need to enter here is the value is composed + (OR-ed) of a foreground and a background color. +diff --git a/drivers/char/vt.c b/drivers/char/vt.c +index cf61236..75ca0cf 100644 +--- a/drivers/char/vt.c ++++ b/drivers/char/vt.c +@@ -2394,8 +2394,17 @@ struct tty_driver *console_driver; + #ifdef CONFIG_VT_CONSOLE + + #ifdef CONFIG_VT_CKO +-static unsigned int printk_color __read_mostly = CONFIG_VT_PRINTK_COLOR; +-module_param(printk_color, uint, S_IRUGO | S_IWUSR); ++static unsigned int printk_color[8] __read_mostly = { ++ CONFIG_VT_PRINTK_COLOR, /* KERN_EMERG */ ++ CONFIG_VT_PRINTK_COLOR, /* KERN_ALERT */ ++ CONFIG_VT_PRINTK_COLOR, /* KERN_CRIT */ ++ CONFIG_VT_PRINTK_COLOR, /* KERN_ERR */ ++ CONFIG_VT_PRINTK_COLOR, /* KERN_WARNING */ ++ CONFIG_VT_PRINTK_COLOR, /* KERN_NOTICE */ ++ CONFIG_VT_PRINTK_COLOR, /* KERN_INFO */ ++ CONFIG_VT_PRINTK_COLOR, /* KERN_DEBUG */ ++}; ++module_param_array(printk_color, uint, NULL, S_IRUGO | S_IWUSR); + + static void vc_set_color(struct vc_data *vc, unsigned char color) + { +@@ -2405,7 +2414,7 @@ static void vc_set_color(struct vc_data *vc, unsigned char color) + update_attr(vc); + } + #else +-static const unsigned int printk_color; ++static const unsigned int printk_color[8]; + static inline void vc_set_color(const struct vc_data *vc, unsigned char c) + { + } +@@ -2417,10 +2426,11 @@ static inline void vc_set_color(const struct vc_data *vc, unsigned char c) + * 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 int count, unsigned int loglevel) + { + struct vc_data *vc = vc_cons[fg_console].d; +- unsigned char c; ++ unsigned char current_color, c; + static DEFINE_SPINLOCK(printing_lock); + const ushort *start; + ushort cnt = 0; +@@ -2453,7 +2463,13 @@ static void vt_console_print(struct console *co, const char *b, unsigned count) + hide_cursor(vc); + + start = (ushort *)vc->vc_pos; +- vc_set_color(vc, printk_color); ++ ++ /* ++ * 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 */ +diff --git a/drivers/net/netconsole.c b/drivers/net/netconsole.c +index 665341e..ae04e77 100644 +--- a/drivers/net/netconsole.c ++++ b/drivers/net/netconsole.c +@@ -694,7 +694,8 @@ static struct notifier_block netconsole_netdev_notifier = { + .notifier_call = netconsole_netdev_event, + }; + +-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 --git a/drivers/serial/8250.c b/drivers/serial/8250.c +index 77f7a7f..21a0ebf 100644 +--- a/drivers/serial/8250.c ++++ b/drivers/serial/8250.c +@@ -2466,7 +2466,8 @@ static void serial8250_console_putchar(struct uart_port *port, int ch) + * 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 --git a/drivers/serial/8250_early.c b/drivers/serial/8250_early.c +index 38776e8..88aa01c 100644 +--- a/drivers/serial/8250_early.c ++++ b/drivers/serial/8250_early.c +@@ -83,7 +83,8 @@ static void __init serial_putc(struct uart_port *port, int c) + } + + static void __init early_serial8250_write(struct console *console, +- const char *s, unsigned int count) ++ const char *s, unsigned int count, ++ unsigned int loglevel) + { + struct uart_port *port = &early_device.port; + unsigned int ier; +diff --git a/include/linux/console.h b/include/linux/console.h +index a5f88a6..23626e6 100644 +--- a/include/linux/console.h ++++ b/include/linux/console.h +@@ -94,7 +94,8 @@ void give_up_console(const struct consw *sw); + + struct console { + char name[16]; +- void (*write)(struct console *, const char *, unsigned); ++ void (*write)(struct console *, const char *, ++ unsigned int, unsigned int); + int (*read)(struct console *, char *, unsigned); + struct tty_driver *(*device)(struct console *, int *); + void (*unblank)(void); +diff --git a/kernel/printk.c b/kernel/printk.c +index bdd4ea8..809ba4b 100644 +--- a/kernel/printk.c ++++ b/kernel/printk.c +@@ -435,7 +435,8 @@ asmlinkage long sys_syslog(int type, char __user *buf, int len) + /* + * Call the console drivers on a range of log_buf + */ +-static void __call_console_drivers(unsigned start, unsigned end) ++static void __call_console_drivers(unsigned int start, unsigned int end, ++ unsigned int loglevel) + { + struct console *con; + +@@ -443,7 +444,7 @@ static void __call_console_drivers(unsigned start, unsigned end) + 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); + } + } + +@@ -470,10 +471,11 @@ static void _call_console_drivers(unsigned start, + 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); + } + } + } +-- +To unsubscribe from this list: send the line "unsubscribe linux-kernel" in +the body of a message to majordomo@vger.kernel.org +More majordomo info at http://vger.kernel.org/majordomo-info.html +Please read the FAQ at http://www.tux.org/lkml/ + diff --git a/sys-kernel/thinkpad-sources/files/2.6.25/colored-printk-2.6.25.part3.patch b/sys-kernel/thinkpad-sources/files/2.6.25/colored-printk-2.6.25.part3.patch new file mode 100644 index 0000000..06d9f6c --- /dev/null +++ b/sys-kernel/thinkpad-sources/files/2.6.25/colored-printk-2.6.25.part3.patch @@ -0,0 +1,146 @@ +diff --git a/drivers/char/Kconfig b/drivers/char/Kconfig +index 3f5877e..600c75a 100644 +--- a/drivers/char/Kconfig ++++ b/drivers/char/Kconfig +@@ -58,28 +58,20 @@ config VT_CONSOLE + + If unsure, say Y. + +-config VT_CKO ++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. ++ You can also change the colors at run-time, or set them at boot-time ++ using the "vt.printk_color" option. ++ + This option enlarges your kernel by approximately 1/2 KB. + + If unsure, say N. + +-config VT_PRINTK_COLOR +- hex "Colored kernel message output" +- range 0x00 0xFF +- depends on VT_CKO +- default 0x07 +- ---help--- +- This option defines with which color kernel messages will be +- printed to the console. This applies to all log levels. +- You can change the colors at run-time, or set them at boot-time +- using the "vt.printk_color" option. +- +- The value you need to enter here is the value is composed ++ The value you need to enter is the value is composed + (OR-ed) of a foreground and a background color. + + Foreground: +@@ -103,6 +95,74 @@ config VT_PRINTK_COLOR + + For example, 0x1F would yield white on red. + ++if VT_CKO ++ ++config VT_PRINTK_EMERG_COLOR ++ hex 'Color for "emergency" level' ++ range 0x00 0xFF ++ default 0x07 ++ ---help--- ++ This option defines in which color kernel emergency messages ++ will be printed to the console. ++ ++config VT_PRINTK_ALERT_COLOR ++ hex 'Color for "alert" level' ++ range 0x00 0xFF ++ default 0x07 ++ ---help--- ++ This option defines in which color kernel alert messages ++ will be printed to the console. ++ ++config VT_PRINTK_CRIT_COLOR ++ hex 'Color for "critical" level' ++ range 0x00 0xFF ++ default 0x07 ++ ---help--- ++ This option defines in which color critical kernel messages ++ will be printed to the console. ++ ++config VT_PRINTK_ERROR_COLOR ++ hex 'Color for "error" level' ++ range 0x00 0xFF ++ default 0x07 ++ ---help--- ++ This option defines in which color kernel error messages ++ will be printed to the console. ++ ++config VT_PRINTK_WARNING_COLOR ++ hex 'Color for "warning" level' ++ range 0x00 0xFF ++ default 0x07 ++ ---help--- ++ This option defines in which color kernel warning messages ++ will be printed to the console. ++ ++config VT_PRINTK_NOTICE_COLOR ++ hex 'Color for "notice" level' ++ range 0x00 0xFF ++ default 0x07 ++ ---help--- ++ This option defines in which color kernel notices ++ will be printed to the console. ++ ++config VT_PRINTK_INFO_COLOR ++ hex 'Color for "info" level' ++ range 0x00 0xFF ++ default 0x07 ++ ---help--- ++ This option defines in which color informational kernel messages ++ will be printed to the console. ++ ++config VT_PRINTK_DEBUG_COLOR ++ hex 'Color for "debug" level' ++ range 0x00 0xFF ++ default 0x07 ++ ---help--- ++ This option defines in which color kernel debugging messages ++ will be printed to the console. ++ ++endif # VT_CKO ++ + config HW_CONSOLE + bool + depends on VT && !S390 && !UML +diff --git a/drivers/char/vt.c b/drivers/char/vt.c +index 75ca0cf..a3f2ff3 100644 +--- a/drivers/char/vt.c ++++ b/drivers/char/vt.c +@@ -2395,14 +2395,14 @@ struct tty_driver *console_driver; + + #ifdef CONFIG_VT_CKO + static unsigned int printk_color[8] __read_mostly = { +- CONFIG_VT_PRINTK_COLOR, /* KERN_EMERG */ +- CONFIG_VT_PRINTK_COLOR, /* KERN_ALERT */ +- CONFIG_VT_PRINTK_COLOR, /* KERN_CRIT */ +- CONFIG_VT_PRINTK_COLOR, /* KERN_ERR */ +- CONFIG_VT_PRINTK_COLOR, /* KERN_WARNING */ +- CONFIG_VT_PRINTK_COLOR, /* KERN_NOTICE */ +- CONFIG_VT_PRINTK_COLOR, /* KERN_INFO */ +- CONFIG_VT_PRINTK_COLOR, /* KERN_DEBUG */ ++ CONFIG_VT_PRINTK_EMERG_COLOR, ++ CONFIG_VT_PRINTK_ALERT_COLOR, ++ CONFIG_VT_PRINTK_CRIT_COLOR, ++ CONFIG_VT_PRINTK_ERROR_COLOR, ++ CONFIG_VT_PRINTK_WARNING_COLOR, ++ CONFIG_VT_PRINTK_NOTICE_COLOR, ++ CONFIG_VT_PRINTK_INFO_COLOR, ++ CONFIG_VT_PRINTK_DEBUG_COLOR, + }; + module_param_array(printk_color, uint, NULL, S_IRUGO | S_IWUSR); + +-- +To unsubscribe from this list: send the line "unsubscribe linux-kernel" in +the body of a message to majordomo@vger.kernel.org +More majordomo info at http://vger.kernel.org/majordomo-info.html +Please read the FAQ at http://www.tux.org/lkml/ + diff --git a/sys-kernel/thinkpad-sources/files/2.6.25/kernel-2.6.25-export-init_mm.patch b/sys-kernel/thinkpad-sources/files/2.6.25/kernel-2.6.25-export-init_mm.patch new file mode 100644 index 0000000..5f95a6b --- /dev/null +++ b/sys-kernel/thinkpad-sources/files/2.6.25/kernel-2.6.25-export-init_mm.patch @@ -0,0 +1,11 @@ +--- arch/x86/kernel/init_task.c.orig 2008-04-17 04:49:44.000000000 +0200 ++++ arch/x86/kernel/init_task.c 2008-04-17 23:52:15.000000000 +0200 +@@ -15,7 +15,7 @@ + static struct signal_struct init_signals = INIT_SIGNALS(init_signals); + static struct sighand_struct init_sighand = INIT_SIGHAND(init_sighand); + struct mm_struct init_mm = INIT_MM(init_mm); +-EXPORT_UNUSED_SYMBOL(init_mm); /* will be removed in 2.6.26 */ ++EXPORT_SYMBOL(init_mm); /* will be removed in 2.6.26 */ // temporary kludge + + /* + * Initial thread structure. diff --git a/sys-kernel/thinkpad-sources/files/2.6.25/kernel-2.6.25-rcu-license.patch b/sys-kernel/thinkpad-sources/files/2.6.25/kernel-2.6.25-rcu-license.patch new file mode 100644 index 0000000..fbdb7c2 --- /dev/null +++ b/sys-kernel/thinkpad-sources/files/2.6.25/kernel-2.6.25-rcu-license.patch @@ -0,0 +1,20 @@ +--- kernel/rcupreempt.c.orig 2008-04-17 04:49:44.000000000 +0200 ++++ kernel/rcupreempt.c 2008-04-19 12:27:19.000000000 +0200 +@@ -283,7 +283,7 @@ + local_irq_restore(flags); + } + } +-EXPORT_SYMBOL_GPL(__rcu_read_lock); ++EXPORT_SYMBOL(__rcu_read_lock); + + void __rcu_read_unlock(void) + { +@@ -353,7 +353,7 @@ + local_irq_restore(flags); + } + } +-EXPORT_SYMBOL_GPL(__rcu_read_unlock); ++EXPORT_SYMBOL(__rcu_read_unlock); + + /* + * If a global counter flip has occurred since the last time that we diff --git a/sys-kernel/thinkpad-sources/files/2.6.25/pci-e_aspm_v3.5.patch b/sys-kernel/thinkpad-sources/files/2.6.25/pci-e_aspm_v3.5.patch new file mode 100644 index 0000000..ecdc8cb --- /dev/null +++ b/sys-kernel/thinkpad-sources/files/2.6.25/pci-e_aspm_v3.5.patch @@ -0,0 +1,1101 @@ +PCI Express ASPM defines a protocol for PCI Express components in the D0 +state to reduce Link power by placing their Links into a low power state +and instructing the other end of the Link to do likewise. This +capability allows hardware-autonomous, dynamic Link power reduction +beyond what is achievable by software-only controlled power management. +However, The device should be configured by software appropriately. +Enabling ASPM will save power, but will introduce device latency. + +This patch adds ASPM support in Linux. It introduces a global policy for +ASPM, a sysfs file /sys/module/pcie_aspm/parameters/policy can control +it. The interface can be used as a boot option too. Currently we have +below setting: + -default, BIOS default setting + -powersave, highest power saving mode, enable all available ASPM +state and clock power management + -performance, highest performance, disable ASPM and clock power +management +By default, the 'default' policy is used currently. + +In my test, power difference between powersave mode and performance mode +is about 1.3w in a system with 3 PCIE links. + +Note: some devices might not work well with aspm, either because chipset +issue or device issue. The patch provide API (pci_disable_link_state), +driver can disable ASPM for specific device. + +Signed-off-by: Shaohua Li <shaohua.li <at> intel.com> +--- + drivers/pci/pci-sysfs.c | 5 + drivers/pci/pci.c | 4 + drivers/pci/pcie/Kconfig | 20 + + drivers/pci/pcie/Makefile | 3 + drivers/pci/pcie/aspm.c | 811 ++++++++++++++++++++++++++++++++++++++++++++++ + drivers/pci/probe.c | 5 + drivers/pci/remove.c | 4 + include/linux/pci-aspm.h | 56 +++ + include/linux/pci.h | 5 + include/linux/pci_regs.h | 8 + 10 files changed, 921 insertions(+) + +Index: linux/drivers/pci/pcie/Makefile +=================================================================== +--- linux.orig/drivers/pci/pcie/Makefile 2008-02-20 10:22:16.000000000 +0800 ++++ linux/drivers/pci/pcie/Makefile 2008-02-20 13:59:10.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-02-20 14:09:59.000000000 +0800 +@@ -0,0 +1,811 @@ ++/* ++ * 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 <at> intel.com) ++ * Copyright (C) Shaohua Li (shaohua.li <at> 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/pci-aspm.h> ++#include "../pci.h" ++ ++#ifdef MODULE_PARAM_PREFIX ++#undef MODULE_PARAM_PREFIX ++#endif ++#define MODULE_PARAM_PREFIX "pcie_aspm." ++ ++struct endpoint_state { ++ unsigned int l0s_acceptable_latency; ++ unsigned int l1_acceptable_latency; ++}; ++ ++struct pcie_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; ++ ++ /* ++ * A pcie downstream port only has one slot under it, so at most there ++ * are 8 functions ++ */ ++ struct endpoint_state endpoints[8]; ++}; ++ ++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 pcie_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 pcie_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 pcie_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, ®16); ++ 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 pcie_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, ®32); ++ if (!(reg32 & PCI_EXP_LNKCAP_CLKPM)) { ++ capable = 0; ++ enabled = 0; ++ break; ++ } ++ pci_read_config_word(child_dev, pos + PCI_EXP_LNKCTL, ®16); ++ 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, ®16); ++ 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, ®16); ++ 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, ++ ®16); ++ 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, ®16); ++ 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, ®16); ++ 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, ®32); ++ *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, ®16); ++ *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 pcie_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 = ++ &link_state->endpoints[PCI_FUNC(child_dev->devfn)]; ++ ++ if (child_dev->pcie_type != PCI_EXP_TYPE_ENDPOINT && ++ child_dev->pcie_type != PCI_EXP_TYPE_LEG_END) ++ continue; ++ ++ pos = pci_find_capability(child_dev, PCI_CAP_ID_EXP); ++ pci_read_config_dword(child_dev, pos + PCI_EXP_DEVCAP, ®32); ++ 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 pcie_link_state *link_state; ++ struct endpoint_state *ep_state; ++ ++ parent_dev = pdev->bus->self; ++ link_state = parent_dev->link_state; ++ state &= link_state->support_state; ++ if (state == 0) ++ return 0; ++ ep_state = &link_state->endpoints[PCI_FUNC(pdev->devfn)]; ++ ++ /* ++ * 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)) ++ 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, ®16); ++ 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 pcie_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 pcie_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 ++ */ ++static 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) ++{ ++ 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 pcie_link_state *link_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; ++ ++ 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 pcie_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)) ++ 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 pcie_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 pcie_link_state *link_state; ++ ++ if (aspm_disabled || !pdev->is_pcie) ++ return; ++ if (pdev->pcie_type == PCI_EXP_TYPE_ROOT_PORT || ++ pdev->pcie_type == PCI_EXP_TYPE_DOWNSTREAM) ++ parent = pdev; ++ if (!parent || !parent->link_state) ++ 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 pcie_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 pcie_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 pcie_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 pcie_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) || !link_state) ++ 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 pcie_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) || !link_state) ++ 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); ++ ++#ifdef CONFIG_ACPI ++#include <acpi/acpi_bus.h> ++#include <linux/pci-acpi.h> ++static void pcie_aspm_platform_init(void) ++{ ++ pcie_osc_support_set(OSC_ACTIVE_STATE_PWR_SUPPORT| ++ OSC_CLOCK_PWR_CAPABILITY_SUPPORT); ++} ++#else ++static inline void pcie_aspm_platform_init(void) { } ++#endif ++ ++static int __init pcie_aspm_init(void) ++{ ++ if (aspm_disabled) ++ return 0; ++ pcie_aspm_platform_init(); ++ return 0; ++} ++ ++fs_initcall(pcie_aspm_init); +Index: linux/drivers/pci/pcie/Kconfig +=================================================================== +--- linux.orig/drivers/pci/pcie/Kconfig 2008-02-20 10:22:16.000000000 +0800 ++++ linux/drivers/pci/pcie/Kconfig 2008-02-20 13:59:10.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 && PCIEPORTBUS ++ 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" ++ depends on PCIEASPM ++ default n ++ help ++ This enables PCI Express ASPM debug support. It will add per-device ++ interface to control ASPM. +Index: linux/include/linux/pci.h +=================================================================== +--- linux.orig/include/linux/pci.h 2008-02-20 10:22:16.000000000 +0800 ++++ linux/include/linux/pci.h 2008-02-20 13:59:10.000000000 +0800 +@@ -128,6 +128,7 @@ struct pci_cap_saved_state { + u32 data[0]; + }; + ++struct pcie_link_state; + /* + * The pci_dev structure is used to describe PCI devices. + */ +@@ -165,6 +166,10 @@ struct pci_dev { + this is D0-D3, D0 being fully functional, + and D3 being off. */ + ++#ifdef CONFIG_PCIEASPM ++ struct pcie_link_state *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-02-20 10:22:16.000000000 +0800 ++++ linux/include/linux/pci_regs.h 2008-02-20 13:59:10.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-02-20 10:22:16.000000000 +0800 ++++ linux/drivers/pci/probe.c 2008-02-20 13:59:10.000000000 +0800 +@@ -9,6 +9,7 @@ + #include <linux/slab.h> + #include <linux/module.h> + #include <linux/cpumask.h> ++#include <linux/pci-aspm.h> + #include "pci.h" + + #define CARDBUS_LATENCY_TIMER 176 /* secondary latency timer */ +@@ -1005,6 +1006,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-02-20 10:22:16.000000000 +0800 ++++ linux/drivers/pci/remove.c 2008-02-20 13:59:10.000000000 +0800 +@@ -1,5 +1,6 @@ + #include <linux/pci.h> + #include <linux/module.h> ++#include <linux/pci-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-02-20 10:22:16.000000000 +0800 ++++ linux/drivers/pci/pci.c 2008-02-20 13:59:10.000000000 +0800 +@@ -18,6 +18,7 @@ + #include <linux/spinlock.h> + #include <linux/string.h> + #include <linux/log2.h> ++#include <linux/pci-aspm.h> + #include <asm/dma.h> /* isa_dma_bridge_buggy */ + #include "pci.h" + +@@ -519,6 +520,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-02-20 10:22:16.000000000 +0800 ++++ linux/drivers/pci/pci-sysfs.c 2008-02-20 13:59:10.000000000 +0800 +@@ -21,6 +21,7 @@ + #include <linux/topology.h> + #include <linux/mm.h> + #include <linux/capability.h> ++#include <linux/pci-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 +Index: linux/include/linux/pci-aspm.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux/include/linux/pci-aspm.h 2008-02-20 13:59:10.000000000 +0800 +@@ -0,0 +1,56 @@ ++/* ++ * aspm.h ++ * ++ * PCI Express ASPM defines and function prototypes ++ * ++ * Copyright (C) 2007 Intel Corp. ++ * Zhang Yanmin (yanmin.zhang <at> intel.com) ++ * Shaohua Li (shaohua.li <at> 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 ++static inline void pcie_aspm_init_link_state(struct pci_dev *pdev) ++{ ++} ++static inline void pcie_aspm_exit_link_state(struct pci_dev *pdev) ++{ ++} ++static inline void pcie_aspm_pm_state_change(struct pci_dev *pdev) ++{ ++} ++static inline void pci_disable_link_state(struct pci_dev *pdev, int state) ++{ ++} ++#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 ++static inline void pcie_aspm_create_sysfs_dev_files(struct pci_dev *pdev) ++{ ++} ++static inline void pcie_aspm_remove_sysfs_dev_files(struct pci_dev *pdev) ++{ ++} ++#endif ++#endif /* LINUX_ASPM_H */ + diff --git a/sys-kernel/thinkpad-sources/files/2.6.25/vt-fix.patch b/sys-kernel/thinkpad-sources/files/2.6.25/vt-fix.patch new file mode 100644 index 0000000..62c7a7e --- /dev/null +++ b/sys-kernel/thinkpad-sources/files/2.6.25/vt-fix.patch @@ -0,0 +1,146 @@ +diff --git a/drivers/char/vt.c b/drivers/char/vt.c +index 9b58b89..159c9e2 100644 +--- a/drivers/char/vt.c ++++ b/drivers/char/vt.c +@@ -301,7 +301,7 @@ static void scrup(struct vc_data *vc, unsigned int t, unsigned int b, int nr) + d = (unsigned short *)(vc->vc_origin + vc->vc_size_row * t); + s = (unsigned short *)(vc->vc_origin + vc->vc_size_row * (t + nr)); + scr_memmovew(d, s, (b - t - nr) * vc->vc_size_row); +- scr_memsetw(d + (b - t - nr) * vc->vc_cols, vc->vc_video_erase_char, ++ scr_memsetw(d + (b - t - nr) * vc->vc_cols, vc->vc_scrl_erase_char, + vc->vc_size_row * nr); + } + +@@ -319,7 +319,7 @@ static void scrdown(struct vc_data *vc, unsigned int t, unsigned int b, int nr) + s = (unsigned short *)(vc->vc_origin + vc->vc_size_row * t); + step = vc->vc_cols * nr; + scr_memmovew(s + step, s, (b - t - nr) * vc->vc_size_row); +- scr_memsetw(s, vc->vc_video_erase_char, 2 * step); ++ scr_memsetw(s, vc->vc_scrl_erase_char, 2 * step); + } + + static void do_update_region(struct vc_data *vc, unsigned long start, int count) +@@ -400,7 +400,7 @@ static u8 build_attr(struct vc_data *vc, u8 _color, u8 _intensity, u8 _blink, + * Bit 7 : blink + */ + { +- u8 a = vc->vc_color; ++ u8 a = _color; + if (!vc->vc_can_do_color) + return _intensity | + (_italic ? 2 : 0) | +@@ -434,6 +434,7 @@ static void update_attr(struct vc_data *vc) + vc->vc_blink, vc->vc_underline, + vc->vc_reverse ^ vc->vc_decscnm, vc->vc_italic); + vc->vc_video_erase_char = (build_attr(vc, vc->vc_color, 1, vc->vc_blink, 0, vc->vc_decscnm, 0) << 8) | ' '; ++ vc->vc_scrl_erase_char = (build_attr(vc, vc->vc_def_color, 1, false, false, false, false) << 8) | ' '; + } + + /* Note: inverting the screen twice should revert to the original state */ +diff --git a/drivers/video/console/fbcon.c b/drivers/video/console/fbcon.c +index 0222824..ca2a543 100644 +--- a/drivers/video/console/fbcon.c ++++ b/drivers/video/console/fbcon.c +@@ -1882,7 +1882,7 @@ static int fbcon_scroll(struct vc_data *vc, int t, int b, int dir, + scr_memsetw((unsigned short *) (vc->vc_origin + + vc->vc_size_row * + (b - count)), +- vc->vc_video_erase_char, ++ vc->vc_scrl_erase_char, + vc->vc_size_row * count); + return 1; + break; +@@ -1954,7 +1954,7 @@ static int fbcon_scroll(struct vc_data *vc, int t, int b, int dir, + scr_memsetw((unsigned short *) (vc->vc_origin + + vc->vc_size_row * + (b - count)), +- vc->vc_video_erase_char, ++ vc->vc_scrl_erase_char, + vc->vc_size_row * count); + return 1; + } +@@ -1973,7 +1973,7 @@ static int fbcon_scroll(struct vc_data *vc, int t, int b, int dir, + scr_memsetw((unsigned short *) (vc->vc_origin + + vc->vc_size_row * + t), +- vc->vc_video_erase_char, ++ vc->vc_scrl_erase_char, + vc->vc_size_row * count); + return 1; + break; +@@ -2043,7 +2043,7 @@ static int fbcon_scroll(struct vc_data *vc, int t, int b, int dir, + scr_memsetw((unsigned short *) (vc->vc_origin + + vc->vc_size_row * + t), +- vc->vc_video_erase_char, ++ vc->vc_scrl_erase_char, + vc->vc_size_row * count); + return 1; + } +diff --git a/drivers/video/console/mdacon.c b/drivers/video/console/mdacon.c +index bd8d995..38a296b 100644 +--- a/drivers/video/console/mdacon.c ++++ b/drivers/video/console/mdacon.c +@@ -531,7 +531,7 @@ static void mdacon_cursor(struct vc_data *c, int mode) + + static int mdacon_scroll(struct vc_data *c, int t, int b, int dir, int lines) + { +- u16 eattr = mda_convert_attr(c->vc_video_erase_char); ++ u16 eattr = mda_convert_attr(c->vc_scrl_erase_char); + + if (!lines) + return 0; +diff --git a/drivers/video/console/sticon.c b/drivers/video/console/sticon.c +index 67a682d..a11cc2f 100644 +--- a/drivers/video/console/sticon.c ++++ b/drivers/video/console/sticon.c +@@ -170,12 +170,12 @@ static int sticon_scroll(struct vc_data *conp, int t, int b, int dir, int count) + switch (dir) { + case SM_UP: + sti_bmove(sti, t + count, 0, t, 0, b - t - count, conp->vc_cols); +- sti_clear(sti, b - count, 0, count, conp->vc_cols, conp->vc_video_erase_char); ++ sti_clear(sti, b - count, 0, count, conp->vc_cols, conp->vc_scrl_erase_char); + break; + + case SM_DOWN: + sti_bmove(sti, t, 0, t + count, 0, b - t - count, conp->vc_cols); +- sti_clear(sti, t, 0, count, conp->vc_cols, conp->vc_video_erase_char); ++ sti_clear(sti, t, 0, count, conp->vc_cols, conp->vc_scrl_erase_char); + break; + } + +diff --git a/drivers/video/console/vgacon.c b/drivers/video/console/vgacon.c +index 6df29a6..bd1f57b 100644 +--- a/drivers/video/console/vgacon.c ++++ b/drivers/video/console/vgacon.c +@@ -1350,7 +1350,7 @@ static int vgacon_scroll(struct vc_data *c, int t, int b, int dir, + } else + c->vc_origin += delta; + scr_memsetw((u16 *) (c->vc_origin + c->vc_screenbuf_size - +- delta), c->vc_video_erase_char, ++ delta), c->vc_scrl_erase_char, + delta); + } else { + if (oldo - delta < vga_vram_base) { +@@ -1363,7 +1363,7 @@ static int vgacon_scroll(struct vc_data *c, int t, int b, int dir, + } else + c->vc_origin -= delta; + c->vc_scr_end = c->vc_origin + c->vc_screenbuf_size; +- scr_memsetw((u16 *) (c->vc_origin), c->vc_video_erase_char, ++ scr_memsetw((u16 *) (c->vc_origin), c->vc_scrl_erase_char, + delta); + } + c->vc_scr_end = c->vc_origin + c->vc_screenbuf_size; +diff --git a/include/linux/console_struct.h b/include/linux/console_struct.h +index d71f7c0..b03f80a 100644 +--- a/include/linux/console_struct.h ++++ b/include/linux/console_struct.h +@@ -53,6 +53,7 @@ struct vc_data { + unsigned short vc_hi_font_mask; /* [#] Attribute set for upper 256 chars of font or 0 if not supported */ + struct console_font vc_font; /* Current VC font set */ + unsigned short vc_video_erase_char; /* Background erase character */ ++ unsigned short vc_scrl_erase_char; /* Erase character for scroll */ + /* VT terminal data */ + unsigned int vc_state; /* Escape sequence parser state */ + unsigned int vc_npar,vc_par[NPAR]; /* Parameters of current escape sequence */ + diff --git a/sys-kernel/thinkpad-sources/files/configs/config-for-core-2.6.25 b/sys-kernel/thinkpad-sources/files/configs/config-for-core-2.6.25 new file mode 100644 index 0000000..a201789 --- /dev/null +++ b/sys-kernel/thinkpad-sources/files/configs/config-for-core-2.6.25 @@ -0,0 +1,2333 @@ +# +# Automatically generated make config: don't edit +# Linux kernel version: 2.6.25-thinkpad +# Thu May 15 12:44:35 2008 +# +# CONFIG_64BIT is not set +CONFIG_X86_32=y +# CONFIG_X86_64 is not set +CONFIG_X86=y +CONFIG_DEFCONFIG_LIST="arch/x86/configs/i386_defconfig" +# CONFIG_GENERIC_LOCKBREAK is not set +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_HAVE_LATENCYTOP_SUPPORT=y +CONFIG_SEMAPHORE_SLEEPERS=y +CONFIG_FAST_CMPXCHG_LOCAL=y +CONFIG_MMU=y +CONFIG_ZONE_DMA=y +CONFIG_GENERIC_ISA_DMA=y +CONFIG_GENERIC_IOMAP=y +CONFIG_GENERIC_BUG=y +CONFIG_GENERIC_HWEIGHT=y +# CONFIG_GENERIC_GPIO is not set +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_ARCH_HAS_CPU_IDLE_WAIT=y +CONFIG_GENERIC_CALIBRATE_DELAY=y +# CONFIG_GENERIC_TIME_VSYSCALL is not set +CONFIG_ARCH_HAS_CPU_RELAX=y +# CONFIG_HAVE_SETUP_PER_CPU_AREA is not set +CONFIG_ARCH_HIBERNATION_POSSIBLE=y +CONFIG_ARCH_SUSPEND_POSSIBLE=y +# CONFIG_ZONE_DMA32 is not set +CONFIG_ARCH_POPULATES_NODE_MAP=y +# CONFIG_AUDIT_ARCH is not set +CONFIG_ARCH_SUPPORTS_AOUT=y +CONFIG_GENERIC_HARDIRQS=y +CONFIG_GENERIC_IRQ_PROBE=y +CONFIG_GENERIC_PENDING_IRQ=y +CONFIG_X86_SMP=y +CONFIG_X86_32_SMP=y +CONFIG_X86_HT=y +CONFIG_X86_BIOS_REBOOT=y +CONFIG_X86_TRAMPOLINE=y +CONFIG_KTIME_SCALAR=y + +# +# 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_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_GROUP_SCHED=y +CONFIG_FAIR_GROUP_SCHED=y +# CONFIG_RT_GROUP_SCHED is not set +CONFIG_USER_SCHED=y +# CONFIG_CGROUP_SCHED is not set +CONFIG_SYSFS_DEPRECATED=y +CONFIG_SYSFS_DEPRECATED_V2=y +# CONFIG_RELAY is not set +CONFIG_NAMESPACES=y +# CONFIG_UTS_NS is not set +# CONFIG_IPC_NS is not set +# CONFIG_USER_NS is not set +# CONFIG_PID_NS 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_COMPAT_BRK is not set +CONFIG_BASE_FULL=y +CONFIG_FUTEX=y +CONFIG_ANON_INODES=y +CONFIG_EPOLL=y +CONFIG_SIGNALFD=y +CONFIG_TIMERFD=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_PROFILING is not set +# CONFIG_MARKERS is not set +CONFIG_HAVE_OPROFILE=y +# CONFIG_KPROBES is not set +CONFIG_HAVE_KPROBES=y +CONFIG_HAVE_KRETPROBES=y +CONFIG_PROC_PAGE_MONITOR=y +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" +# CONFIG_CLASSIC_RCU is not set + +# +# 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_RDC321X 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=y +# 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 is not set +# CONFIG_GENERIC_CPU is not set +# CONFIG_X86_GENERIC is not set +CONFIG_X86_CMPXCHG=y +CONFIG_X86_L1_CACHE_SHIFT=7 +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_P6_NOP=y +CONFIG_X86_TSC=y +CONFIG_X86_CMOV=y +CONFIG_X86_MINIMUM_CPU_FAMILY=6 +CONFIG_X86_DEBUGCTLMSR=y +CONFIG_HPET_TIMER=y +CONFIG_HPET_EMULATE_RTC=y +# CONFIG_IOMMU_HELPER is not set +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_RCU=y +# CONFIG_RCU_TRACE is not set +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_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_SCHED_HRTICK=y +# 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=y +CONFIG_SUSPEND_FREEZER=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_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_WMI=y +# CONFIG_ACPI_ASUS is not set +# CONFIG_ACPI_TOSHIBA is not set +# CONFIG_ACPI_CUSTOM_DSDT 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 is not set +CONFIG_X86_SPEEDSTEP_ICH=y +CONFIG_X86_SPEEDSTEP_SMI=y +# 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=y +# CONFIG_X86_SPEEDSTEP_RELAXED_CAP_CHECK 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 is not set +# 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_XFRM_STATISTICS 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 +CONFIG_NETFILTER_ADVANCED=y + +# +# Core Netfilter Configuration +# +CONFIG_NETFILTER_NETLINK=y +CONFIG_NETFILTER_NETLINK_QUEUE=y +CONFIG_NETFILTER_NETLINK_LOG=y +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_RATEEST=m +CONFIG_NETFILTER_XT_TARGET_TRACE=m +CONFIG_NETFILTER_XT_TARGET_TCPMSS=m +CONFIG_NETFILTER_XT_TARGET_TCPOPTSTRIP=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_IPRANGE=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_OWNER=m +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_RATEEST=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_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_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_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_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 +# +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_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 + +# +# 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_CLS_FLOW is not set +# CONFIG_NET_EMATCH is not set +# CONFIG_NET_CLS_ACT is not set +CONFIG_NET_SCH_FIFO=y + +# +# Network testing +# +# CONFIG_NET_PKTGEN is not set +# CONFIG_HAMRADIO is not set +# CONFIG_CAN 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=m +CONFIG_NL80211=y +CONFIG_WIRELESS_EXT=y +CONFIG_MAC80211=m + +# +# Rate control algorithm selection +# +CONFIG_MAC80211_RC_DEFAULT_PID=y +# CONFIG_MAC80211_RC_DEFAULT_SIMPLE is not set +# CONFIG_MAC80211_RC_DEFAULT_NONE is not set + +# +# Selecting 'y' for an algorithm will +# + +# +# build the algorithm into mac80211. +# +CONFIG_MAC80211_RC_DEFAULT="pid" +CONFIG_MAC80211_RC_PID=y +# CONFIG_MAC80211_RC_SIMPLE is not set +CONFIG_MAC80211_LEDS=y +# CONFIG_MAC80211_DEBUG_PACKET_ALIGNMENT is not set +# 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_ACER_WMI is not set +# CONFIG_ASUS_LAPTOP is not set +# CONFIG_FUJITSU_LAPTOP is not set +# CONFIG_TC1100_WMI 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_VIDEO is not set +CONFIG_THINKPAD_ACPI_HOTKEY_POLL=y +CONFIG_INTEL_MENLOW=m +CONFIG_ENCLOSURE_SERVICES=y +CONFIG_HAVE_IDE=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 +CONFIG_SCSI_ENCLOSURE=y + +# +# 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_NINJA32 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_E1000E_ENABLED=y +# CONFIG_IP1000 is not set +CONFIG_IGB=m +# 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 is not set +# CONFIG_IPW2200 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 is not set +# CONFIG_USB_ZD1201 is not set +# CONFIG_USB_NET_RNDIS_WLAN is not set +# CONFIG_RTL8180 is not set +# CONFIG_RTL8187 is not set +# CONFIG_ADM8211 is not set +# CONFIG_P54_COMMON is not set +CONFIG_ATH5K=m +# CONFIG_IWL4965 is not set +CONFIG_IWL3945=m +CONFIG_IWL3945_QOS=y +CONFIG_IWL3945_SPECTRUM_MEASUREMENT=y +# CONFIG_IWL3945_DEBUG is not set +# 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_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_APANEL 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_ERROR_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 +CONFIG_NOZOMI=m + +# +# 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=y +# CONFIG_LP_CONSOLE 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_IPWIRELESS 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_DS1682 is not set +# CONFIG_SENSORS_EEPROM is not set +# CONFIG_SENSORS_PCF8574 is not set +# CONFIG_PCF8575 is not set +# CONFIG_SENSORS_PCF8591 is not set +# CONFIG_TPS65010 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_ADT7473 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_ADS7828 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_W83L786NG is not set +# CONFIG_SENSORS_W83627HF is not set +# CONFIG_SENSORS_W83627EHF is not set +# CONFIG_SENSORS_HDAPS is not set +# CONFIG_SENSORS_APPLESMC is not set +# CONFIG_HWMON_DEBUG_CHIP is not set +CONFIG_THERMAL=y +# 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_V4L2_COMMON=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_CS53L32A=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_ALSA is not set +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_ALSA is not set +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_ONAIR_CREATOR=y +CONFIG_VIDEO_PVRUSB2_ONAIR_USB2=y +CONFIG_VIDEO_PVRUSB2_SYSFS=y +# CONFIG_VIDEO_PVRUSB2_DEBUGIFC is not set +CONFIG_VIDEO_EM28XX=m +CONFIG_VIDEO_EM28XX_ALSA=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_USB_STKWEBCAM=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_TTPCI_EEPROM is not set +# CONFIG_DVB_AV7110 is not set +# CONFIG_DVB_BUDGET_CORE 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_TDA18271=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 +CONFIG_DVB_TUNER_XC5000=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_XC2028=m +CONFIG_TUNER_MT20XX=m +CONFIG_TUNER_TDA8290=m +CONFIG_TUNER_TEA5761=m +CONFIG_TUNER_TEA5767=m +CONFIG_TUNER_SIMPLE=m +CONFIG_TUNER_TDA9887=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=y +CONFIG_LCD_CLASS_DEVICE=y +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=y +CONFIG_SND_TIMER=m +CONFIG_SND_PCM=m +CONFIG_SND_RAWMIDI=m +CONFIG_SND_SEQUENCER=m +# CONFIG_SND_SEQ_DUMMY is not set +CONFIG_SND_OSSEMUL=y +CONFIG_SND_MIXER_OSS=m +CONFIG_SND_PCM_OSS=m +CONFIG_SND_PCM_OSS_PLUGINS=y +CONFIG_SND_SEQUENCER_OSS=y +CONFIG_SND_RTCTIMER=m +CONFIG_SND_SEQ_RTCTIMER_DEFAULT=y +# CONFIG_SND_DYNAMIC_MINORS is not set +CONFIG_SND_SUPPORT_OLD_API=y +CONFIG_SND_VERBOSE_PROCFS=y +# CONFIG_SND_VERBOSE_PRINTK is not set +# CONFIG_SND_DEBUG is not set + +# +# Generic devices +# +CONFIG_SND_MPU401_UART=m +# CONFIG_SND_DUMMY is not set +# CONFIG_SND_VIRMIDI is not set +# CONFIG_SND_MTPAV is not set +# CONFIG_SND_MTS64 is not set +# CONFIG_SND_SERIAL_U16550 is not set +CONFIG_SND_MPU401=m +# CONFIG_SND_PORTMAN2X4 is not set + +# +# ISA devices +# +# CONFIG_SND_ADLIB is not set +# CONFIG_SND_AD1816A is not set +# CONFIG_SND_AD1848 is not set +# CONFIG_SND_ALS100 is not set +# CONFIG_SND_AZT2320 is not set +# CONFIG_SND_CMI8330 is not set +# CONFIG_SND_CS4231 is not set +# CONFIG_SND_CS4232 is not set +# CONFIG_SND_CS4236 is not set +# CONFIG_SND_DT019X is not set +# CONFIG_SND_ES968 is not set +# CONFIG_SND_ES1688 is not set +# CONFIG_SND_ES18XX is not set +# CONFIG_SND_SC6000 is not set +# CONFIG_SND_GUSCLASSIC is not set +# CONFIG_SND_GUSEXTREME is not set +# CONFIG_SND_GUSMAX is not set +# CONFIG_SND_INTERWAVE is not set +# CONFIG_SND_INTERWAVE_STB is not set +# CONFIG_SND_OPL3SA2 is not set +# CONFIG_SND_OPTI92X_AD1848 is not set +# CONFIG_SND_OPTI92X_CS4231 is not set +# CONFIG_SND_OPTI93X is not set +# CONFIG_SND_MIRO is not set +# CONFIG_SND_SB8 is not set +# CONFIG_SND_SB16 is not set +# CONFIG_SND_SBAWE is not set +# CONFIG_SND_SGALAXY is not set +# CONFIG_SND_SSCAPE is not set +# CONFIG_SND_WAVEFRONT is not set + +# +# PCI devices +# +# CONFIG_SND_AD1889 is not set +# CONFIG_SND_ALS300 is not set +# CONFIG_SND_ALS4000 is not set +# CONFIG_SND_ALI5451 is not set +# CONFIG_SND_ATIIXP is not set +# CONFIG_SND_ATIIXP_MODEM is not set +# CONFIG_SND_AU8810 is not set +# CONFIG_SND_AU8820 is not set +# CONFIG_SND_AU8830 is not set +# CONFIG_SND_AZT3328 is not set +# CONFIG_SND_BT87X is not set +# CONFIG_SND_CA0106 is not set +# CONFIG_SND_CMIPCI is not set +# CONFIG_SND_OXYGEN is not set +# CONFIG_SND_CS4281 is not set +# CONFIG_SND_CS46XX is not set +# CONFIG_SND_CS5530 is not set +# CONFIG_SND_CS5535AUDIO is not set +# CONFIG_SND_DARLA20 is not set +# CONFIG_SND_GINA20 is not set +# CONFIG_SND_LAYLA20 is not set +# CONFIG_SND_DARLA24 is not set +# CONFIG_SND_GINA24 is not set +# CONFIG_SND_LAYLA24 is not set +# CONFIG_SND_MONA is not set +# CONFIG_SND_MIA is not set +# CONFIG_SND_ECHO3G is not set +# CONFIG_SND_INDIGO is not set +# CONFIG_SND_INDIGOIO is not set +# CONFIG_SND_INDIGODJ is not set +# CONFIG_SND_EMU10K1 is not set +# CONFIG_SND_EMU10K1X is not set +# CONFIG_SND_ENS1370 is not set +# CONFIG_SND_ENS1371 is not set +# CONFIG_SND_ES1938 is not set +# CONFIG_SND_ES1968 is not set +# CONFIG_SND_FM801 is not set +CONFIG_SND_HDA_INTEL=m +# CONFIG_SND_HDA_HWDEP is not set +# CONFIG_SND_HDA_CODEC_REALTEK is not set +CONFIG_SND_HDA_CODEC_ANALOG=y +# CONFIG_SND_HDA_CODEC_SIGMATEL is not set +# CONFIG_SND_HDA_CODEC_VIA is not set +# CONFIG_SND_HDA_CODEC_ATIHDMI is not set +# CONFIG_SND_HDA_CODEC_CONEXANT is not set +# CONFIG_SND_HDA_CODEC_CMEDIA is not set +# CONFIG_SND_HDA_CODEC_SI3054 is not set +# CONFIG_SND_HDA_GENERIC is not set +CONFIG_SND_HDA_POWER_SAVE=y +CONFIG_SND_HDA_POWER_SAVE_DEFAULT=5 +# CONFIG_SND_HDSP is not set +# CONFIG_SND_HDSPM is not set +# CONFIG_SND_HIFIER is not set +# CONFIG_SND_ICE1712 is not set +# CONFIG_SND_ICE1724 is not set +# CONFIG_SND_INTEL8X0 is not set +# CONFIG_SND_INTEL8X0M is not set +# CONFIG_SND_KORG1212 is not set +# CONFIG_SND_MAESTRO3 is not set +# CONFIG_SND_MIXART is not set +# CONFIG_SND_NM256 is not set +# CONFIG_SND_PCXHR is not set +# CONFIG_SND_RIPTIDE is not set +# CONFIG_SND_RME32 is not set +# CONFIG_SND_RME96 is not set +# CONFIG_SND_RME9652 is not set +# CONFIG_SND_SIS7019 is not set +# CONFIG_SND_SONICVIBES is not set +# CONFIG_SND_TRIDENT is not set +# CONFIG_SND_VIA82XX is not set +# CONFIG_SND_VIA82XX_MODEM is not set +# CONFIG_SND_VIRTUOSO is not set +# CONFIG_SND_VX222 is not set +# CONFIG_SND_YMFPCI is not set + +# +# USB devices +# +# CONFIG_SND_USB_AUDIO is not set +# CONFIG_SND_USB_USX2Y is not set +# CONFIG_SND_USB_CAIAQ is not set + +# +# PCMCIA devices +# +# CONFIG_SND_VXPOCKET is not set +# CONFIG_SND_PDAUDIOCF is not set + +# +# System on Chip audio support +# +# CONFIG_SND_SOC is not set + +# +# SoC Audio support for SuperH +# + +# +# ALSA SoC audio for Freescale SOCs +# + +# +# 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 +CONFIG_USB_ANNOUNCE_NEW_DEVICES=y + +# +# 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_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 +# 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 +# CONFIG_USB_GADGET is not set +# CONFIG_MMC is not set +# CONFIG_MEMSTICK is not set +CONFIG_NEW_LEDS=y +CONFIG_LEDS_CLASS=m + +# +# LED drivers +# +# CONFIG_LEDS_CLEVO_MAIL is not set + +# +# 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 + +# +# Conflicting RTC option has been selected, check GEN_RTC and RTC +# +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 +# CONFIG_RTC_DRV_S35390A is not set + +# +# SPI RTC drivers +# + +# +# Platform RTC drivers +# +CONFIG_RTC_DRV_CMOS=y +# CONFIG_RTC_DRV_DS1511 is not set +# CONFIG_RTC_DRV_DS1553 is not set +# CONFIG_RTC_DRV_DS1742 is not set +# CONFIG_RTC_DRV_STK17TA8 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 + +# +# 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_DNOTIFY=y +CONFIG_INOTIFY=y +CONFIG_INOTIFY_USER=y +# CONFIG_QUOTA is not set +CONFIG_QUOTACTL=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 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_MINIX_FS is not set +# CONFIG_HPFS_FS is not set +# CONFIG_QNX4FS_FS is not set +# CONFIG_ROMFS_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=y +CONFIG_CIFS_STATS=y +# CONFIG_CIFS_STATS2 is not set +CONFIG_CIFS_WEAK_PW_HASH=y +CONFIG_CIFS_XATTR=y +CONFIG_CIFS_POSIX=y +# CONFIG_CIFS_DEBUG2 is not set +CONFIG_CIFS_EXPERIMENTAL=y +# 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 + +# +# 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_BOOT_PRINTK_DELAY is not set +# CONFIG_RCU_TORTURE_TEST is not set +# CONFIG_BACKTRACE_SELF_TEST is not set +# CONFIG_FAULT_INJECTION is not set +# CONFIG_LATENCYTOP is not set +# CONFIG_PROVIDE_OHCI1394_DMA_INIT 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 +# CONFIG_DEBUG_PAGEALLOC is not set +# CONFIG_DEBUG_RODATA is not set +# CONFIG_DEBUG_NX_TEST is not set +# CONFIG_4KSTACKS is not set +CONFIG_X86_FIND_SMP_CONFIG=y +CONFIG_X86_MPPARSE=y +CONFIG_DOUBLEFAULT=y +CONFIG_IO_DELAY_TYPE_0X80=0 +CONFIG_IO_DELAY_TYPE_0XED=1 +CONFIG_IO_DELAY_TYPE_UDELAY=2 +CONFIG_IO_DELAY_TYPE_NONE=3 +CONFIG_IO_DELAY_0X80=y +# CONFIG_IO_DELAY_0XED is not set +# CONFIG_IO_DELAY_UDELAY is not set +# CONFIG_IO_DELAY_NONE is not set +CONFIG_DEFAULT_IO_DELAY_TYPE=0 +# CONFIG_CPA_DEBUG is not set + +# +# 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_SEQIV is not set +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_CTR is not set +# CONFIG_CRYPTO_GCM is not set +# CONFIG_CRYPTO_CCM 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_SALSA20 is not set +# CONFIG_CRYPTO_SALSA20_586 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_LZO=y +# CONFIG_CRYPTO_HW is not set +CONFIG_HAVE_KVM=y +# CONFIG_VIRTUALIZATION 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_LZO_COMPRESS=y +CONFIG_LZO_DECOMPRESS=y +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-r3.ebuild b/sys-kernel/thinkpad-sources/thinkpad-sources-2.6.25.ebuild index 958c774..c55aa5c 100644 --- a/sys-kernel/thinkpad-sources/thinkpad-sources-2.6.24-r3.ebuild +++ b/sys-kernel/thinkpad-sources/thinkpad-sources-2.6.25.ebuild @@ -1,10 +1,10 @@ # 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-r3.ebuild 2008 02 24 +# $Header: sys-kernel/thinkpad-sources/thinkpad-sources-2.6.25.ebuild 2008 05 14 ETYPE="sources" K_WANT_GENPATCHES="base extras" -K_GENPATCHES_VER="3" +K_GENPATCHES_VER="4" inherit kernel-2 detect_version @@ -13,10 +13,10 @@ 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" +IUSE="sco_flowcontrol" -TUXONICE_VERSION="3.0-rc5" -TUXONICE_TARGET="2.6.24" +TUXONICE_VERSION="3.0-rc7" +TUXONICE_TARGET="2.6.25" TUXONICE_SRC="tuxonice-${TUXONICE_VERSION}-for-${TUXONICE_TARGET}" TUXONICE_URI="http://www.tuxonice.net/downloads/all/${TUXONICE_SRC}.patch.bz2" @@ -24,8 +24,8 @@ TUXONICE_URI="http://www.tuxonice.net/downloads/all/${TUXONICE_SRC}.patch.bz2" #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-20080213" -THINKPAD_ACPI_TARGET="2.6.24.2" +THINKPAD_ACPI_VERSION="0.20-20080430" +THINKPAD_ACPI_TARGET="2.6.25.1" THINKPAD_ACPI_SRC="thinkpad-acpi-${THINKPAD_ACPI_VERSION}_v${THINKPAD_ACPI_TARGET}.patch.gz" THINKPAD_ACPI_URI="mirror://sourceforge/ibm-acpi/${THINKPAD_ACPI_SRC}" @@ -36,14 +36,19 @@ UNIPATCH_LIST="" # 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-r3/disk-protect-fix-for-2.6.24.patch - ${FILESDIR}/2.6.24/disk-protect-for-2.6.24.patch + ${FILESDIR}/2.6.25/vt-fix.patch + ${FILESDIR}/2.6.25/colored-printk-2.6.25.part1.patch + ${FILESDIR}/2.6.25/colored-printk-2.6.25.part2.patch + ${FILESDIR}/2.6.25/colored-printk-2.6.25.part3.patch + ${FILESDIR}/2.6.25/02-disk-protect-for-2.6.25.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 + ${FILESDIR}/2.6.25/03-ipw2200-inject-for-2.6.25.patch + ${FILESDIR}/2.6.25/04-linux-phc-0.3.1-for-2.6.25.patch ${DISTDIR}/${TUXONICE_SRC}.patch.bz2 - ${FILESDIR}/2.6.24-r1/pci-e_aspm_v3.patch" + ${FILESDIR}/2.6.25/kernel-2.6.25-export-init_mm.patch + ${FILESDIR}/2.6.25/kernel-2.6.25-rcu-license.patch + ${FILESDIR}/2.6.25/pci-e_aspm_v3.5.patch" +# ${FILESDIR}/2.6.24-r1/iwlwifi-leds-v2-2.6.24-rc4.diff UNIPATCH_STRICTORDER="yes" @@ -54,7 +59,7 @@ KEYWORDS="~amd64 ~x86" RDEPEND="${RDEPEND} >=sys-apps/tuxonice-userui-0.7.2 - >=sys-power/hibernate-script-1.97-r5" + >=sys-power/hibernate-script-1.98.1" pkg_postinst() { kernel-2_pkg_postinst |