亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? p4-clockmod.c

?? linux-2.6.15.6
?? C
字號:
/* *	Pentium 4/Xeon CPU on demand clock modulation/speed scaling *	(C) 2002 - 2003 Dominik Brodowski <linux@brodo.de> *	(C) 2002 Zwane Mwaikambo <zwane@commfireservices.com> *	(C) 2002 Arjan van de Ven <arjanv@redhat.com> *	(C) 2002 Tora T. Engstad *	All Rights Reserved * *	This program is free software; you can redistribute it and/or *      modify it under the terms of the GNU General Public License *      as published by the Free Software Foundation; either version *      2 of the License, or (at your option) any later version. * *      The author(s) of this software shall not be held liable for damages *      of any nature resulting due to the use of this software. This *      software is provided AS-IS with no warranties. *	 *	Date		Errata			Description *	20020525	N44, O17	12.5% or 25% DC causes lockup * */#include <linux/config.h>#include <linux/kernel.h>#include <linux/module.h> #include <linux/init.h>#include <linux/smp.h>#include <linux/cpufreq.h>#include <linux/slab.h>#include <linux/cpumask.h>#include <linux/sched.h>	/* current / set_cpus_allowed() */#include <asm/processor.h> #include <asm/msr.h>#include <asm/timex.h>#include "speedstep-lib.h"#define PFX	"p4-clockmod: "#define dprintk(msg...) cpufreq_debug_printk(CPUFREQ_DEBUG_DRIVER, "p4-clockmod", msg)/* * Duty Cycle (3bits), note DC_DISABLE is not specified in * intel docs i just use it to mean disable */enum {	DC_RESV, DC_DFLT, DC_25PT, DC_38PT, DC_50PT,	DC_64PT, DC_75PT, DC_88PT, DC_DISABLE};#define DC_ENTRIES	8static int has_N44_O17_errata[NR_CPUS];static unsigned int stock_freq;static struct cpufreq_driver p4clockmod_driver;static unsigned int cpufreq_p4_get(unsigned int cpu);static int cpufreq_p4_setdc(unsigned int cpu, unsigned int newstate){	u32 l, h;	if (!cpu_online(cpu) || (newstate > DC_DISABLE) || (newstate == DC_RESV))		return -EINVAL;	rdmsr(MSR_IA32_THERM_STATUS, l, h);	if (l & 0x01)		dprintk("CPU#%d currently thermal throttled\n", cpu);	if (has_N44_O17_errata[cpu] && (newstate == DC_25PT || newstate == DC_DFLT))		newstate = DC_38PT;	rdmsr(MSR_IA32_THERM_CONTROL, l, h);	if (newstate == DC_DISABLE) {		dprintk("CPU#%d disabling modulation\n", cpu);		wrmsr(MSR_IA32_THERM_CONTROL, l & ~(1<<4), h);	} else {		dprintk("CPU#%d setting duty cycle to %d%%\n",			cpu, ((125 * newstate) / 10));		/* bits 63 - 5	: reserved 		 * bit  4	: enable/disable		 * bits 3-1	: duty cycle		 * bit  0	: reserved		 */		l = (l & ~14);		l = l | (1<<4) | ((newstate & 0x7)<<1);		wrmsr(MSR_IA32_THERM_CONTROL, l, h);	}	return 0;}static struct cpufreq_frequency_table p4clockmod_table[] = {	{DC_RESV, CPUFREQ_ENTRY_INVALID},	{DC_DFLT, 0},	{DC_25PT, 0},	{DC_38PT, 0},	{DC_50PT, 0},	{DC_64PT, 0},	{DC_75PT, 0},	{DC_88PT, 0},	{DC_DISABLE, 0},	{DC_RESV, CPUFREQ_TABLE_END},};static int cpufreq_p4_target(struct cpufreq_policy *policy,			     unsigned int target_freq,			     unsigned int relation){	unsigned int    newstate = DC_RESV;	struct cpufreq_freqs freqs;	cpumask_t cpus_allowed;	int i;	if (cpufreq_frequency_table_target(policy, &p4clockmod_table[0], target_freq, relation, &newstate))		return -EINVAL;	freqs.old = cpufreq_p4_get(policy->cpu);	freqs.new = stock_freq * p4clockmod_table[newstate].index / 8;	if (freqs.new == freqs.old)		return 0;	/* notifiers */	for_each_cpu_mask(i, policy->cpus) {		freqs.cpu = i;		cpufreq_notify_transition(&freqs, CPUFREQ_PRECHANGE);	}	/* run on each logical CPU, see section 13.15.3 of IA32 Intel Architecture Software	 * Developer's Manual, Volume 3 	 */	cpus_allowed = current->cpus_allowed;	for_each_cpu_mask(i, policy->cpus) {		cpumask_t this_cpu = cpumask_of_cpu(i);		set_cpus_allowed(current, this_cpu);		BUG_ON(smp_processor_id() != i);		cpufreq_p4_setdc(i, p4clockmod_table[newstate].index);	}	set_cpus_allowed(current, cpus_allowed);	/* notifiers */	for_each_cpu_mask(i, policy->cpus) {		freqs.cpu = i;		cpufreq_notify_transition(&freqs, CPUFREQ_POSTCHANGE);	}	return 0;}static int cpufreq_p4_verify(struct cpufreq_policy *policy){	return cpufreq_frequency_table_verify(policy, &p4clockmod_table[0]);}static unsigned int cpufreq_p4_get_frequency(struct cpuinfo_x86 *c){	if ((c->x86 == 0x06) && (c->x86_model == 0x09)) {		/* Pentium M (Banias) */		printk(KERN_WARNING PFX "Warning: Pentium M detected. "		       "The speedstep_centrino module offers voltage scaling"		       " in addition of frequency scaling. You should use "		       "that instead of p4-clockmod, if possible.\n");		return speedstep_get_processor_frequency(SPEEDSTEP_PROCESSOR_PM);	}	if ((c->x86 == 0x06) && (c->x86_model == 0x0D)) {		/* Pentium M (Dothan) */		printk(KERN_WARNING PFX "Warning: Pentium M detected. "		       "The speedstep_centrino module offers voltage scaling"		       " in addition of frequency scaling. You should use "		       "that instead of p4-clockmod, if possible.\n");		/* on P-4s, the TSC runs with constant frequency independent whether		 * throttling is active or not. */		p4clockmod_driver.flags |= CPUFREQ_CONST_LOOPS;		return speedstep_get_processor_frequency(SPEEDSTEP_PROCESSOR_PM);	}	if (c->x86 != 0xF) {		printk(KERN_WARNING PFX "Unknown p4-clockmod-capable CPU. Please send an e-mail to <linux@brodo.de>\n");		return 0;	}	/* on P-4s, the TSC runs with constant frequency independent whether	 * throttling is active or not. */	p4clockmod_driver.flags |= CPUFREQ_CONST_LOOPS;	if (speedstep_detect_processor() == SPEEDSTEP_PROCESSOR_P4M) {		printk(KERN_WARNING PFX "Warning: Pentium 4-M detected. "		       "The speedstep-ich or acpi cpufreq modules offer "		       "voltage scaling in addition of frequency scaling. "		       "You should use either one instead of p4-clockmod, "		       "if possible.\n");		return speedstep_get_processor_frequency(SPEEDSTEP_PROCESSOR_P4M);	}	return speedstep_get_processor_frequency(SPEEDSTEP_PROCESSOR_P4D);} static int cpufreq_p4_cpu_init(struct cpufreq_policy *policy){	struct cpuinfo_x86 *c = &cpu_data[policy->cpu];	int cpuid = 0;	unsigned int i;#ifdef CONFIG_SMP	policy->cpus = cpu_sibling_map[policy->cpu];#endif	/* Errata workaround */	cpuid = (c->x86 << 8) | (c->x86_model << 4) | c->x86_mask;	switch (cpuid) {	case 0x0f07:	case 0x0f0a:	case 0x0f11:	case 0x0f12:		has_N44_O17_errata[policy->cpu] = 1;		dprintk("has errata -- disabling low frequencies\n");	}		/* get max frequency */	stock_freq = cpufreq_p4_get_frequency(c);	if (!stock_freq)		return -EINVAL;	/* table init */	for (i=1; (p4clockmod_table[i].frequency != CPUFREQ_TABLE_END); i++) {		if ((i<2) && (has_N44_O17_errata[policy->cpu]))			p4clockmod_table[i].frequency = CPUFREQ_ENTRY_INVALID;		else			p4clockmod_table[i].frequency = (stock_freq * i)/8;	}	cpufreq_frequency_table_get_attr(p4clockmod_table, policy->cpu);		/* cpuinfo and default policy values */	policy->governor = CPUFREQ_DEFAULT_GOVERNOR;	policy->cpuinfo.transition_latency = 1000000; /* assumed */	policy->cur = stock_freq;	return cpufreq_frequency_table_cpuinfo(policy, &p4clockmod_table[0]);}static int cpufreq_p4_cpu_exit(struct cpufreq_policy *policy){	cpufreq_frequency_table_put_attr(policy->cpu);    	return 0;}static unsigned int cpufreq_p4_get(unsigned int cpu){	cpumask_t cpus_allowed;	u32 l, h;	cpus_allowed = current->cpus_allowed;	set_cpus_allowed(current, cpumask_of_cpu(cpu));	BUG_ON(smp_processor_id() != cpu);	rdmsr(MSR_IA32_THERM_CONTROL, l, h);	set_cpus_allowed(current, cpus_allowed);	if (l & 0x10) {		l = l >> 1;		l &= 0x7;	} else		l = DC_DISABLE;	if (l != DC_DISABLE)		return (stock_freq * l / 8);	return stock_freq;}static struct freq_attr* p4clockmod_attr[] = {	&cpufreq_freq_attr_scaling_available_freqs,	NULL,};static struct cpufreq_driver p4clockmod_driver = {	.verify 	= cpufreq_p4_verify,	.target		= cpufreq_p4_target,	.init		= cpufreq_p4_cpu_init,	.exit		= cpufreq_p4_cpu_exit,	.get		= cpufreq_p4_get,	.name		= "p4-clockmod",	.owner		= THIS_MODULE,	.attr		= p4clockmod_attr,};static int __init cpufreq_p4_init(void){		struct cpuinfo_x86 *c = cpu_data;	int ret;	/*	 * THERM_CONTROL is architectural for IA32 now, so 	 * we can rely on the capability checks	 */	if (c->x86_vendor != X86_VENDOR_INTEL)		return -ENODEV;	if (!test_bit(X86_FEATURE_ACPI, c->x86_capability) ||		!test_bit(X86_FEATURE_ACC, c->x86_capability))		return -ENODEV;	ret = cpufreq_register_driver(&p4clockmod_driver);	if (!ret)		printk(KERN_INFO PFX "P4/Xeon(TM) CPU On-Demand Clock Modulation available\n");	return (ret);}static void __exit cpufreq_p4_exit(void){	cpufreq_unregister_driver(&p4clockmod_driver);}MODULE_AUTHOR ("Zwane Mwaikambo <zwane@commfireservices.com>");MODULE_DESCRIPTION ("cpufreq driver for Pentium(TM) 4/Xeon(TM)");MODULE_LICENSE ("GPL");late_initcall(cpufreq_p4_init);module_exit(cpufreq_p4_exit);

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
蜜乳av一区二区| 国产91丝袜在线播放| 石原莉奈在线亚洲二区| 亚洲成人精品影院| 日产国产欧美视频一区精品| 久久99日本精品| 成人永久免费视频| 日韩激情视频在线观看| 夜夜嗨av一区二区三区中文字幕| 一区二区国产盗摄色噜噜| 夜夜爽夜夜爽精品视频| 亚洲成人久久影院| 国产一区福利在线| 91性感美女视频| 欧美一区二区三区系列电影| 国产色婷婷亚洲99精品小说| 中文字幕日韩欧美一区二区三区| 最新国产成人在线观看| 日韩国产一区二| 成人av免费网站| 欧美精品tushy高清| 国产精品久久久久久亚洲毛片| 亚洲五码中文字幕| 粉嫩13p一区二区三区| 欧美日韩国产高清一区二区三区| 日韩欧美国产综合一区| 亚洲乱码国产乱码精品精98午夜 | 国产精品美女久久久久久久| 亚洲一区二区三区中文字幕| 盗摄精品av一区二区三区| 制服丝袜在线91| 亚洲猫色日本管| 成人av网在线| 久久久久国产免费免费| 美女免费视频一区二区| 欧美日韩久久久一区| 亚洲精品一二三四区| 91影视在线播放| 亚洲另类色综合网站| 一区二区三区日韩精品视频| 国产伦精一区二区三区| 精品国产一区a| 久久精品国产99| 欧美精品一区二区三区蜜臀| 男女男精品网站| 欧美r级在线观看| 日韩电影在线观看一区| 欧美日韩一区二区三区高清| 一区二区三区日韩在线观看| 99久久免费视频.com| 中文字幕在线一区二区三区| 95精品视频在线| 亚洲午夜精品网| 5858s免费视频成人| 免费观看成人av| 欧美成人video| 99久久精品情趣| 亚洲国产另类精品专区| 日韩精品一区在线观看| 国产精品99久久久久久似苏梦涵 | 不卡的看片网站| 亚洲综合激情小说| 69堂亚洲精品首页| 精久久久久久久久久久| 国产精品激情偷乱一区二区∴| 91在线无精精品入口| 日韩在线一区二区三区| 国产午夜亚洲精品午夜鲁丝片 | zzijzzij亚洲日本少妇熟睡| 亚洲制服丝袜av| 色婷婷激情久久| 夜色激情一区二区| 久久只精品国产| 欧美影院精品一区| 国产成人丝袜美腿| 午夜久久福利影院| 国产精品成人免费精品自在线观看| 色婷婷国产精品久久包臀| 九色综合狠狠综合久久| 亚洲小说春色综合另类电影| 亚洲精品一区二区三区在线观看| 99国产一区二区三精品乱码| 美女视频免费一区| 夜夜嗨av一区二区三区网页| 国产精品久久久久永久免费观看 | 亚洲黄色性网站| 欧美激情一区三区| 久久综合久久综合久久| 欧美精选一区二区| 欧美综合在线视频| 91在线码无精品| 成人免费av网站| 成人av手机在线观看| 福利电影一区二区| 国产乱码精品一区二区三区忘忧草 | 26uuuu精品一区二区| 日韩亚洲欧美一区二区三区| 欧美日韩日日骚| 欧美日韩高清一区二区三区| 99久久综合色| 国产激情视频一区二区三区欧美| 精品亚洲porn| 国产精品一级片在线观看| 麻豆视频一区二区| 韩国精品久久久| 一区二区三区四区av| 国产精品久久久久毛片软件| 中文字幕一区二区三区在线观看| 国产欧美一区二区精品仙草咪| 久久先锋影音av| 国产精品久久久久久久久图文区 | 日韩高清在线不卡| 免费精品视频最新在线| 国产一区 二区 三区一级| 国产凹凸在线观看一区二区| 91亚洲资源网| 91精品婷婷国产综合久久性色| 日韩欧美国产三级| 欧美国产精品v| 一区二区三区国产精华| 日本中文字幕一区二区视频| 国产精品一区二区x88av| 99国产精品99久久久久久| 欧美日韩一区二区电影| 日韩精品一区二区三区四区| 国产精品伦理一区二区| 日韩精品亚洲专区| 成人黄页在线观看| 日韩精品最新网址| 亚洲人妖av一区二区| 狠狠网亚洲精品| 在线视频欧美精品| 精品国产乱码久久久久久闺蜜| 亚洲精品菠萝久久久久久久| 久久精品国产999大香线蕉| 91老师国产黑色丝袜在线| 欧美成人在线直播| 亚洲va欧美va人人爽午夜| 成人在线视频一区| 久久婷婷成人综合色| 无码av免费一区二区三区试看 | 欧美精品一区二区三区视频 | 精品一区二区影视| 在线看不卡av| 亚洲女与黑人做爰| 99久久国产综合精品色伊 | aaa国产一区| 国产免费观看久久| 精品一区二区三区久久| 欧美日韩大陆在线| 亚洲18女电影在线观看| 欧美在线制服丝袜| 亚洲黄一区二区三区| 99re6这里只有精品视频在线观看| 久久精品免费在线观看| 精品一区二区日韩| 精品国产乱码久久久久久老虎| 日本午夜一本久久久综合| 欧美视频一区二区三区在线观看 | 在线亚洲精品福利网址导航| 成人免费视频在线观看| 色欧美乱欧美15图片| 亚洲综合另类小说| 欧美丰满少妇xxxxx高潮对白| 婷婷中文字幕综合| 91精品视频网| 成人午夜私人影院| 亚洲精品日产精品乱码不卡| 欧美三级电影网站| 热久久免费视频| 欧美激情在线观看视频免费| 一本色道亚洲精品aⅴ| 亚洲综合成人在线| 精品88久久久久88久久久| 成人福利视频在线看| 亚洲成人手机在线| 国产亚洲精品福利| 在线欧美日韩精品| 国产在线播放一区二区三区| 日本网站在线观看一区二区三区 | 精品国产一区久久| 91在线观看视频| 婷婷综合另类小说色区| 欧美午夜影院一区| 美女爽到高潮91| 亚洲欧洲制服丝袜| 2欧美一区二区三区在线观看视频 337p粉嫩大胆噜噜噜噜噜91av | 色综合久久久网| 久久成人免费网站| 亚洲第一电影网| 国产欧美一区二区三区网站| 欧美中文字幕亚洲一区二区va在线| 久久国产欧美日韩精品| 一区二区三区免费看视频| 久久午夜国产精品| 7777女厕盗摄久久久| 欧美日韩国产系列| 色屁屁一区二区| 色久综合一二码| www.欧美.com|