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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? p4-clockmod.c

?? linux 內(nèi)核源代碼
?? 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/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 <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_on_cpu(cpu, 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_on_cpu(cpu, MSR_IA32_THERM_CONTROL, &l, &h);	if (newstate == DC_DISABLE) {		dprintk("CPU#%d disabling modulation\n", cpu);		wrmsr_on_cpu(cpu, 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_on_cpu(cpu, 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;	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	 */	for_each_cpu_mask(i, policy->cpus)		cpufreq_p4_setdc(i, p4clockmod_table[newstate].index);	/* 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) {		if (cpu_has(c, X86_FEATURE_EST))			printk(KERN_WARNING PFX "Warning: EST-capable CPU detected. "			       "The acpi-cpufreq module offers voltage scaling"			       " in addition of frequency scaling. You should use "			       "that instead of p4-clockmod, if possible.\n");		switch (c->x86_model) {		case 0x0E: /* Core */		case 0x0F: /* Core Duo */			p4clockmod_driver.flags |= CPUFREQ_CONST_LOOPS;			return speedstep_get_processor_frequency(SPEEDSTEP_PROCESSOR_PCORE);		case 0x0D: /* Pentium M (Dothan) */			p4clockmod_driver.flags |= CPUFREQ_CONST_LOOPS;			/* fall through */		case 0x09: /* Pentium M (Banias) */			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 <cpufreq@lists.linux.org.uk>\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 = per_cpu(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->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){	u32 l, h;	rdmsr_on_cpu(cpu, MSR_IA32_THERM_CONTROL, &l, &h);	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(0);	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);

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
在线视频国内自拍亚洲视频| 国产精品色婷婷| 国产精品色一区二区三区| 奇米四色…亚洲| 99re这里只有精品首页| 久久综合九色综合欧美98| 亚洲午夜在线视频| 不卡视频在线观看| 国产视频亚洲色图| 麻豆精品一区二区| 欧美三级日韩三级| 亚洲免费视频中文字幕| 国产在线播放一区二区三区| 欧美精品一卡二卡| 一区二区三区国产| 成人高清伦理免费影院在线观看| 日韩亚洲欧美在线| 日韩精品一二三四| 欧美精品色一区二区三区| 亚洲欧美乱综合| 91丨porny丨中文| 国产精品色婷婷| 处破女av一区二区| 久久久.com| 粉嫩一区二区三区性色av| 2欧美一区二区三区在线观看视频| 日韩不卡免费视频| 欧美一区二区三区免费观看视频| 亚洲大片精品永久免费| 欧美视频第二页| 亚洲成人av资源| 欧美一区二区大片| 久久精品久久综合| 精品国产髙清在线看国产毛片 | 蜜臀av性久久久久蜜臀aⅴ流畅 | 日本一区二区三区在线不卡| 久久99精品久久久久久国产越南 | 天天综合天天综合色| 欧美亚洲尤物久久| 天天色天天操综合| 日韩一区二区高清| 国产精品亚洲视频| 国产精品人成在线观看免费 | 成人午夜免费av| 亚洲欧美一区二区三区孕妇| 在线观看免费一区| 日韩精品乱码免费| 欧美刺激午夜性久久久久久久| 激情亚洲综合在线| 中文字幕乱码日本亚洲一区二区| 99久久精品99国产精品 | 日韩理论片网站| 91久久人澡人人添人人爽欧美| 日韩精品电影在线| 久久影院午夜论| 97se亚洲国产综合自在线观| 亚洲一区二区视频| 日韩免费观看高清完整版| 国产精品亚洲午夜一区二区三区| 亚洲欧美日韩一区二区| 91精品中文字幕一区二区三区| 精品一区二区三区久久| 国产精品久久二区二区| 欧美日韩亚洲国产综合| 激情综合网av| 亚洲摸摸操操av| 2014亚洲片线观看视频免费| www.日韩大片| 美女一区二区三区在线观看| 国产精品电影院| 日韩精品一区二区三区中文不卡| k8久久久一区二区三区| 日韩av中文字幕一区二区| 欧美国产成人在线| 欧美一区在线视频| 99久免费精品视频在线观看| 美腿丝袜一区二区三区| 亚洲激情六月丁香| 国产亚洲欧美日韩在线一区| 欧美美女bb生活片| va亚洲va日韩不卡在线观看| 免费三级欧美电影| 一区二区在线观看免费视频播放 | 亚洲免费观看高清完整版在线观看 | 午夜激情久久久| 国产日韩欧美不卡| 欧美一区永久视频免费观看| 91福利在线导航| 成人免费观看男女羞羞视频| 免费成人性网站| 亚洲成av人片在线观看| 亚洲欧美日韩一区二区三区在线观看| 26uuu久久综合| 日韩一区二区三区电影在线观看| 色女孩综合影院| bt欧美亚洲午夜电影天堂| 国内精品伊人久久久久av一坑| 亚洲chinese男男1069| 国产精品国产三级国产aⅴ中文 | 精品国产乱码久久久久久牛牛| 欧美性色黄大片| 欧美性色综合网| 欧美在线免费播放| 色欧美片视频在线观看| 91在线视频免费91| aaa欧美日韩| 一本一本大道香蕉久在线精品| 国产在线乱码一区二区三区| 久久99精品久久久久久动态图 | 欧美日韩国产成人在线91| 91福利国产精品| 欧美亚洲综合色| 欧美日韩一区精品| 欧美日韩高清一区二区| 欧美日韩夫妻久久| 这里只有精品视频在线观看| 欧美丰满美乳xxx高潮www| 欧美伦理视频网站| 日韩一区二区三区免费看| 欧美成人精精品一区二区频| 日韩久久免费av| 久久婷婷久久一区二区三区| 2024国产精品| 国产精品嫩草久久久久| 亚洲天堂精品在线观看| 亚洲精品免费播放| 水野朝阳av一区二区三区| 蜜臀久久久99精品久久久久久| 免费人成网站在线观看欧美高清| 久久aⅴ国产欧美74aaa| 高清成人免费视频| 91视频观看免费| 欧美情侣在线播放| 欧美xxxxxxxx| 中文字幕亚洲在| 亚洲成年人网站在线观看| 蜜桃av一区二区三区| 国产成人av福利| 欧洲一区二区三区免费视频| 3d动漫精品啪啪一区二区竹菊| 精品国产91久久久久久久妲己| 国产精品久久久久久久久免费桃花 | 欧美一区二区三区成人| 2022国产精品视频| 一区二区三区免费观看| 免费人成精品欧美精品| 国产成人精品午夜视频免费 | 性做久久久久久久免费看| 久久66热re国产| www.日韩在线| 精品国内片67194| 亚洲女女做受ⅹxx高潮| 久久不见久久见免费视频7| 91欧美一区二区| 欧美一个色资源| 亚洲天堂网中文字| 韩国三级在线一区| 欧美中文字幕亚洲一区二区va在线| 日韩免费观看高清完整版 | 国产精品夜夜嗨| 欧美日韩在线电影| 国产免费久久精品| 天天综合网 天天综合色| av一区二区三区在线| 欧美α欧美αv大片| 亚洲色图视频网站| 国产精品亚洲第一区在线暖暖韩国| 欧美日韩精品电影| 综合分类小说区另类春色亚洲小说欧美| 免费国产亚洲视频| 欧美在线一区二区| 国产精品国产a| 国产精品系列在线观看| 91精品国产乱码久久蜜臀| 一区二区三区美女| 99久久婷婷国产| 亚洲国产精品成人综合| 久色婷婷小香蕉久久| 欧美肥胖老妇做爰| 亚洲一区二区在线视频| 91免费版在线看| 中文字幕亚洲欧美在线不卡| 国产精品综合久久| 精品久久久影院| 美女精品自拍一二三四| 欧美一区二区视频免费观看| 亚洲无线码一区二区三区| 色综合av在线| 亚洲视频一区在线| 91丨porny丨在线| 一区二区三区蜜桃| 欧美午夜片在线观看| 一区二区三区四区激情| 色婷婷激情综合| 亚洲欧美日本在线| 91精品1区2区| 亚洲午夜精品久久久久久久久| 欧美综合在线视频| 天天色图综合网| 欧美一级理论片|