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

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

?? power.c

?? 該文件是rt_linux
?? C
字號:
/* * linux/arch/parisc/kernel/power.c * HP PARISC soft power switch support driver * * Copyright (c) 2001-2002 Helge Deller <deller@gmx.de> * All rights reserved. * * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright *    notice, this list of conditions, and the following disclaimer, *    without modification. * 2. The name of the author may not be used to endorse or promote products *    derived from this software without specific prior written permission. * * Alternatively, this software may be distributed under the terms of the * GNU General Public License ("GPL"). * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * * *  *  HINT: *  Support of the soft power switch button may be enabled or disabled at *  runtime through the "/proc/sys/kernel/power" procfs entry. */ #include <linux/config.h>#include <linux/module.h>#include <linux/init.h>#include <linux/kernel.h>#include <linux/string.h>#include <linux/notifier.h>#include <linux/reboot.h>#include <linux/sched.h>#include <linux/interrupt.h>#include <linux/proc_fs.h>#include <linux/ctype.h>#include <asm/gsc.h>#include <asm/pdc.h>#include <asm/irq.h>#include <asm/io.h>#include <asm/led.h>#include <asm/led.h>#include <asm/uaccess.h>#ifdef DEBUG# define DPRINTK(x) printk x#else# define DPRINTK(x) do { } while (0)#endif/* filename in /proc which can be used to enable/disable the power switch */#define SYSCTL_FILENAME		"sys/kernel/power"#define DIAG_CODE(code)		(0x14000000 + ((code)<<5))/* this will go to processor.h or any other place... *//* taken from PCXL ERS page 82 */#define MFCPU_X(rDiagReg, t_ch, t_th, code) \	(DIAG_CODE(code) + ((rDiagReg)<<21) + ((t_ch)<<16) + ((t_th)<<0) )	#define MTCPU(dr, gr)		MFCPU_X(dr, gr,  0, 0x12)       /* move value of gr to dr[dr] */#define MFCPU_C(dr, gr)		MFCPU_X(dr, gr,  0, 0x30)	/* for dr0 and dr8 only ! */#define MFCPU_T(dr, gr)		MFCPU_X(dr,  0, gr, 0xa0)	/* all dr except dr0 and dr8 */	#define __getDIAG(dr) ( { 			\        register unsigned long __res asm("r28");\	 __asm__ __volatile__ (			\		".word %1\n nop\n" : "=&r" (__res) : "i" (MFCPU_T(dr,28)) \	);					\	__res;					\} )static void deferred_poweroff(void *dummy){	extern int cad_pid;	/* from kernel/sys.c */	if (kill_proc(cad_pid, SIGINT, 1)) {		/* just in case killing init process failed */		machine_power_off();	}}/* * This function gets called from interrupt context. * As it's called within an interrupt, it wouldn't sync if we don't * use schedule_task(). */static void poweroff(void){	static int powering_off;	static struct tq_struct poweroff_tq = {		routine: deferred_poweroff,	};	if (powering_off)		return;	powering_off++;	schedule_task(&poweroff_tq);}/* local time-counter for shutdown */static int shutdown_timer;/* check, give feedback and start shutdown after one second */static void process_shutdown(void){	if (shutdown_timer == 0)		DPRINTK((KERN_INFO "Shutdown requested...\n"));	shutdown_timer++;		/* wait until the button was pressed for 1 second */	if (shutdown_timer == HZ) {		static char msg[] = "Shutting down...";		DPRINTK((KERN_INFO "%s\n", msg));#ifdef CONFIG_CHASSIS_LCD_LED		lcd_print(msg);#endif		poweroff();	}}/* main power switch tasklet struct (scheduled from time.c) */DECLARE_TASKLET_DISABLED(power_tasklet, NULL, 0);/* soft power switch enabled/disabled */#ifdef CONFIG_PROC_FSstatic int pwrsw_enabled = 1;#else#define pwrsw_enabled (1)#endif/* * On gecko style machines (e.g. 712/xx and 715/xx)  * the power switch status is stored in Bit 0 ("the highest bit") * of CPU diagnose register 25. *  */static void gecko_tasklet_func(unsigned long unused){	if (!pwrsw_enabled)		return;	if (__getDIAG(25) & 0x80000000) {		/* power switch button not pressed or released again */		/* Warning: Some machines do never reset this DIAG flag! */		shutdown_timer = 0;	} else {		process_shutdown();	}}/* * Check the power switch status which is read from the * real I/O location at soft_power_reg. * Bit 31 ("the lowest bit) is the status of the power switch. */static void polling_tasklet_func(unsigned long soft_power_reg){        unsigned long current_status;		if (!pwrsw_enabled)		return;	current_status = gsc_readl(soft_power_reg);	if (current_status & 0x1) {		/* power switch button not pressed */		shutdown_timer = 0;	} else {		process_shutdown();	}}/* * powerfail interruption handler (irq IRQ_FROM_REGION(CPU_IRQ_REGION)+2)  */#if 0static void powerfail_interrupt(int code, void *x, struct pt_regs *regs){	printk(KERN_CRIT "POWERFAIL INTERRUPTION !\n");	poweroff();}#endif/*  * /proc filesystem support  */#ifdef CONFIG_SYSCTLstatic int power_proc_read(char *page, char **start, off_t off, int count, 	int *eof, void *data){	char *out = page;	int len;	out += sprintf(out, "Software power switch support: ");	out += sprintf(out, pwrsw_enabled ? "enabled (1)" : "disabled (0)" );	out += sprintf(out, "\n");	len = out - page - off;	if (len < count) {		*eof = 1;		if (len <= 0) return 0;	} else {		len = count;	}	*start = page + off;	return len;}static int power_proc_write(struct file *file, const char *buf, 	unsigned long count, void *data){	char *cur, lbuf[count];	if (!capable(CAP_SYS_ADMIN))		return -EACCES;	memset(lbuf, 0, count);	copy_from_user(lbuf, buf, count);	cur = lbuf;	/* skip initial spaces */	while (*cur && isspace(*cur))		cur++;	switch (*cur) {	case '0':	pwrsw_enabled = 0;			break;	case '1':	pwrsw_enabled = 1;			break;	default:	printk(KERN_CRIT "/proc/" SYSCTL_FILENAME 					": Parse error: only '0' or '1' allowed!\n");			return -EINVAL;	} /* switch() */	return count;}static struct proc_dir_entry *ent;static void __init power_create_procfs(void){	if (!power_tasklet.func)		return;		ent = create_proc_entry(SYSCTL_FILENAME, S_IFREG|S_IRUGO|S_IWUSR, 0);	if (!ent) return;		ent->nlink = 1;	ent->read_proc = power_proc_read;	ent->write_proc = power_proc_write;	ent->owner = THIS_MODULE;}static void __exit power_remove_procfs(void){	remove_proc_entry(SYSCTL_FILENAME, NULL);}#else#define power_create_procfs()	do { } while (0)#define power_remove_procfs()	do { } while (0)#endif	/* CONFIG_SYSCTL *//* parisc_panic_event() is called by the panic handler. * As soon as a panic occurs, our tasklets above will not be * executed any longer. This function then re-enables the  * soft-power switch and allows the user to switch off the system */static int parisc_panic_event(struct notifier_block *this,		unsigned long event, void *ptr){	/* re-enable the soft-power switch */	pdc_soft_power_button(0);	return NOTIFY_DONE;}static struct notifier_block parisc_panic_block = {	notifier_call: parisc_panic_event,	priority: INT_MAX,};static int __init power_init(void){	unsigned long ret;	unsigned long soft_power_reg = 0;#if 0	request_irq( IRQ_FROM_REGION(CPU_IRQ_REGION)+2, &powerfail_interrupt,		0, "powerfail", NULL);#endif	/* enable the soft power switch if possible */	ret = pdc_soft_power_info(&soft_power_reg);	if (ret == PDC_OK)		ret = pdc_soft_power_button(1);	if (ret != PDC_OK)		soft_power_reg = -1UL;		switch (soft_power_reg) {	case 0:		printk(KERN_INFO "Gecko-style soft power switch enabled.\n");			power_tasklet.func = gecko_tasklet_func;			break;				case -1UL:	printk(KERN_INFO "Soft power switch support not available.\n");			return -ENODEV;		default:	printk(KERN_INFO "Soft power switch enabled, polling @ 0x%08lx.\n",				soft_power_reg);			power_tasklet.data = soft_power_reg;			power_tasklet.func = polling_tasklet_func;	}	/* Register a call for panic conditions. */	notifier_chain_register(&panic_notifier_list, &parisc_panic_block);	power_create_procfs();	tasklet_enable(&power_tasklet);	return 0;}static void __exit power_exit(void){	if (!power_tasklet.func)		return;	tasklet_disable(&power_tasklet);	notifier_chain_unregister(&panic_notifier_list, &parisc_panic_block);	power_remove_procfs();	power_tasklet.func = NULL;	pdc_soft_power_button(0);}module_init(power_init);module_exit(power_exit);MODULE_AUTHOR("Helge Deller");MODULE_DESCRIPTION("Soft power switch driver");MODULE_LICENSE("Dual BSD/GPL");EXPORT_NO_SYMBOLS;

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美性猛交xxxxxx富婆| 日本一区二区三区四区| 亚洲欧美激情插| 成人精品一区二区三区中文字幕| 日韩免费在线观看| 国产在线精品免费| 精品1区2区在线观看| 国产原创一区二区三区| 中文字幕欧美区| 日韩va欧美va亚洲va久久| 911精品国产一区二区在线| 日韩电影在线看| 欧美一级在线观看| 久草精品在线观看| 久久精品视频在线免费观看| 国产成人av在线影院| 中文字幕精品三区| 色哟哟精品一区| 五月天丁香久久| 亚洲精品在线三区| 暴力调教一区二区三区| 亚洲最大色网站| 日韩视频免费观看高清完整版在线观看 | 精品一区二区三区在线播放视频| 精品国产一区二区三区久久久蜜月| 国产精品18久久久| 亚洲人成人一区二区在线观看 | 3d成人h动漫网站入口| 精品午夜久久福利影院| 日本一区二区三区视频视频| 91麻豆123| 久久国产精品免费| 亚洲欧美国产毛片在线| 欧美成人video| 91免费国产在线| 九一久久久久久| 亚洲激情在线播放| 久久久亚洲精品石原莉奈 | 美女视频黄 久久| 中文字幕在线一区| 3751色影院一区二区三区| 大美女一区二区三区| 日韩福利视频导航| 国产精品美女久久久久久久久久久 | 日精品一区二区| 国产精品久久久久久久久免费桃花| 欧美午夜精品理论片a级按摩| 国产1区2区3区精品美女| 亚洲天堂福利av| 日韩欧美国产午夜精品| 91视视频在线直接观看在线看网页在线看| 午夜欧美一区二区三区在线播放| 日本一区二区三区视频视频| 欧美日韩二区三区| 99视频精品在线| 久久99精品久久久| 亚洲综合在线视频| 国产婷婷色一区二区三区四区| 欧美日韩免费一区二区三区| 波多野结衣中文字幕一区二区三区 | 中文字幕综合网| 亚洲精品在线免费播放| 欧美日韩日日夜夜| 日本高清视频一区二区| 成人免费高清视频在线观看| 麻豆91精品视频| 性感美女久久精品| 亚洲另类色综合网站| 国产精品色眯眯| 久久夜色精品一区| 日韩精品中午字幕| 91精品欧美久久久久久动漫 | 风流少妇一区二区| 久久97超碰色| 麻豆中文一区二区| 日本欧美一区二区三区| 亚洲一区二区在线观看视频| 亚洲欧美色一区| 国产馆精品极品| 麻豆精品一二三| 另类欧美日韩国产在线| 天天做天天摸天天爽国产一区| 亚洲愉拍自拍另类高清精品| 亚洲美女屁股眼交3| 亚洲欧美日韩中文播放 | 亚洲成a人片在线不卡一二三区| 一区二区三区四区中文字幕| 亚洲欧美色图小说| 亚洲女人的天堂| 亚洲综合一区二区三区| 亚洲资源在线观看| 亚洲第一成人在线| 免费高清不卡av| 久久精品国产成人一区二区三区| 老色鬼精品视频在线观看播放| 蜜臀av性久久久久蜜臀aⅴ| 麻豆成人av在线| 国产成人自拍在线| 不卡一区中文字幕| 日本高清免费不卡视频| 欧美精品九九99久久| 日韩你懂的在线播放| 久久久蜜桃精品| 国产欧美日韩卡一| 亚洲黄一区二区三区| 亚洲大片免费看| 麻豆一区二区三| 国产精品亚洲成人| 99久久精品99国产精品| 欧美性猛交xxxxxxxx| 日韩一级免费一区| 欧美国产日韩精品免费观看| 亚洲欧美日韩国产手机在线| 五月激情综合网| 国产大片一区二区| 在线亚洲免费视频| 日韩一区二区三区观看| 国产欧美精品一区二区色综合朱莉| 国产精品高潮久久久久无| 亚洲高清免费观看高清完整版在线观看| 日本午夜一本久久久综合| 国产91丝袜在线播放0| 日本高清免费不卡视频| 日韩你懂的在线播放| 亚洲欧美一区二区久久| 麻豆成人在线观看| 99精品视频在线播放观看| 欧美一区二区三区视频免费播放| 欧美国产激情二区三区| 图片区小说区国产精品视频| 国产精品一区2区| 欧美三级蜜桃2在线观看| 国产婷婷色一区二区三区在线| 亚洲综合成人在线| 国产91综合一区在线观看| 欧美三级电影在线观看| 国产精品素人一区二区| 肉丝袜脚交视频一区二区| jizzjizzjizz欧美| 精品国产电影一区二区| 亚洲尤物视频在线| 成人av高清在线| 精品裸体舞一区二区三区| 亚洲综合在线免费观看| 成人免费视频视频| 日韩欧美中文一区二区| 亚洲一区二区三区四区在线| 亚洲精品成人少妇| 久久精品人人做人人爽97| 亚洲一区二区欧美日韩| 成人激情免费视频| 久久综合色一综合色88| 五月天亚洲婷婷| 一本色道**综合亚洲精品蜜桃冫| 久久久精品黄色| 免费久久精品视频| 欧美日韩国产一区二区三区地区| 《视频一区视频二区| 国产91丝袜在线播放0| 精品国产区一区| 麻豆精品新av中文字幕| 欧美日本一区二区三区| 亚洲五码中文字幕| 色婷婷亚洲精品| 综合久久国产九一剧情麻豆| 成熟亚洲日本毛茸茸凸凹| 国产网站一区二区| 国产一区二区三区在线观看免费视频| 日韩欧美一级精品久久| 奇米影视一区二区三区小说| 欧美日韩国产在线播放网站| 亚洲高清不卡在线| 欧美日韩国产小视频| 亚洲成人激情综合网| 欧美色网站导航| 亚洲一区二区视频在线| 极品少妇一区二区三区精品视频| 一区二区三区在线视频免费观看 | 日韩午夜激情视频| 亚洲二区在线视频| 欧美裸体bbwbbwbbw| 日韩高清不卡一区二区| 日韩女优av电影在线观看| 裸体健美xxxx欧美裸体表演| 欧美成人一区二区三区在线观看| 久久精品国产一区二区| 亚洲精品一线二线三线| 国产精品一区二区无线| 亚洲国产精品成人综合色在线婷婷| 成人动漫av在线| 亚洲欧美二区三区| 欧美日韩日本视频| 美女被吸乳得到大胸91| 久久综合色8888| 99热在这里有精品免费| 一区二区久久久久| 欧美一卡二卡三卡四卡| 国产一区二区三区视频在线播放| 国产精品久久久久7777按摩| 欧美在线你懂得|