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

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

?? power.c

?? linux-2.4.29操作系統(tǒng)的源碼
?? 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 <asm/gsc.h>#include <asm/pdc.h>#include <asm/irq.h>#include <asm/io.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 */int pwrsw_enabled = 1;/* * 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/* 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);	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_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一区二区三区免费野_久草精品视频
国产三区在线成人av| 777午夜精品视频在线播放| 亚洲成a天堂v人片| 亚洲精品视频在线观看免费| 国产精品国产a| 亚洲欧洲综合另类| 亚洲h在线观看| 免费观看日韩电影| 国产一区二区三区四| 国产91精品一区二区| 99久久99久久精品国产片果冻| 99精品在线免费| 久久久精品免费免费| 中文字幕在线一区| 国产精品久久毛片a| 国内外成人在线视频| av一区二区三区四区| 欧美日韩亚洲综合一区二区三区| 制服视频三区第一页精品| 综合久久国产九一剧情麻豆| 亚洲成av人片一区二区| 91麻豆国产精品久久| 欧美日韩国产高清一区二区三区| 久久人人超碰精品| 日本一不卡视频| 成人爱爱电影网址| 在线成人免费观看| 国产欧美日韩三区| 99久久久久久| 成人欧美一区二区三区白人 | 欧美精品久久天天躁| 亚洲天堂精品视频| 91九色02白丝porn| 国产精品婷婷午夜在线观看| 中文字幕一区二区三区四区 | 日韩欧美黄色影院| 亚洲免费资源在线播放| 亚洲国产精品成人综合| 久久国产精品无码网站| 在线观看视频一区二区| 午夜精品一区二区三区电影天堂| 久久久亚洲精华液精华液精华液| 老司机免费视频一区二区| 亚洲人成网站影音先锋播放| 日韩欧美在线网站| 国产99精品国产| 欧美激情在线看| aaa国产一区| 亚洲精品va在线观看| 欧美日韩亚洲国产综合| 日日摸夜夜添夜夜添国产精品| 久久国产日韩欧美精品| 久久久99久久| 色哟哟一区二区| 国产精品久久久久国产精品日日| 99视频在线精品| 亚洲成年人网站在线观看| 91精品国产综合久久蜜臀| 国产制服丝袜一区| 亚洲视频小说图片| 欧美片在线播放| 国产乱码精品一区二区三区忘忧草 | 精品视频一区二区不卡| 秋霞午夜鲁丝一区二区老狼| 欧美经典一区二区| 欧美视频一区在线观看| 亚洲乱码一区二区三区在线观看| 欧美日韩成人一区二区| 国产成人av资源| 国产欧美一区二区精品秋霞影院| 一本色道久久综合亚洲91| 另类小说图片综合网| 国产精品毛片大码女人 | 成人免费看黄yyy456| 久久久久久久久久久黄色| 99久久精品99国产精品| 欧美aaaaa成人免费观看视频| 国产免费久久精品| 日韩一区二区三区在线| 91老司机福利 在线| 国产专区综合网| 一区二区三区欧美久久| 91片在线免费观看| 久久66热re国产| 国产拍欧美日韩视频二区| 欧美三级欧美一级| 成人免费高清视频| 激情综合色综合久久| 亚洲一区二区三区在线| 91免费国产在线观看| 久久不见久久见免费视频7| 亚洲成人激情av| 亚洲欧美成人一区二区三区| 国产人成一区二区三区影院| 91精品国产综合久久精品麻豆| 日韩精品福利网| 一区二区国产视频| 国产精品久久99| 中文字幕乱码亚洲精品一区| 日韩欧美亚洲国产另类| 制服丝袜av成人在线看| 欧美日韩高清不卡| 欧洲在线/亚洲| 色综合天天视频在线观看| 成人午夜电影小说| 国产激情一区二区三区四区| 国产一区二区三区在线观看免费视频| 日韩国产欧美在线观看| 午夜久久久久久久久久一区二区| 亚洲黄网站在线观看| 综合在线观看色| 亚洲天堂网中文字| 国产精品美女久久久久aⅴ| 欧美国产一区二区| 国产精品国产三级国产aⅴ中文 | av激情成人网| 99精品视频一区二区| 91丨国产丨九色丨pron| 91看片淫黄大片一级在线观看| 99re免费视频精品全部| 色综合av在线| 欧美性受xxxx黑人xyx| 欧美另类变人与禽xxxxx| 51精品秘密在线观看| 日韩一区二区三区三四区视频在线观看 | 国产日韩综合av| 日本一区二区在线不卡| 最新国产成人在线观看| 亚洲一区二区高清| 视频一区二区欧美| 精品写真视频在线观看| 成人免费观看视频| 在线精品视频小说1| 4438x成人网最大色成网站| 精品免费视频一区二区| 欧美日韩一区高清| 欧美一区二区三区在线观看| 久久影音资源网| 欧美一二三在线| www国产成人| 亚洲精品videosex极品| 美日韩一区二区| 日本不卡在线视频| 国产麻豆9l精品三级站| 91丝袜美女网| 欧美成人猛片aaaaaaa| 国产精品福利一区二区三区| 日韩和的一区二区| 成人av在线一区二区| 欧美电影一区二区| 国产精品人人做人人爽人人添| 亚洲韩国精品一区| 亚洲午夜久久久久久久久电影网 | 久久久精品日韩欧美| 亚洲一区视频在线观看视频| 精品一区二区免费看| 91污在线观看| 26uuu亚洲| 亚洲国产综合色| 东方aⅴ免费观看久久av| 欧美日韩久久不卡| 亚洲欧美综合在线精品| 久久机这里只有精品| 在线观看亚洲精品视频| 亚洲国产成人自拍| 欧美aaaaa成人免费观看视频| 99久免费精品视频在线观看| 日韩精品一区二| 一区二区激情小说| av激情成人网| 久久久一区二区三区| 爽好久久久欧美精品| 97精品国产97久久久久久久久久久久| 日韩久久免费av| 午夜精品久久久久久| 91黄色激情网站| 国产精品初高中害羞小美女文| 日本不卡不码高清免费观看| 在线观看日韩av先锋影音电影院| 亚洲国产成人在线| 国产成a人亚洲精| 欧美精品一区二区高清在线观看| 7799精品视频| 香蕉成人啪国产精品视频综合网| 成人av午夜电影| 国产精品久久久久毛片软件| 国产乱码精品一区二区三区五月婷| 日韩一卡二卡三卡| 日日摸夜夜添夜夜添亚洲女人| 欧美日韩极品在线观看一区| 亚洲一区二区在线视频| 色婷婷香蕉在线一区二区| 中文字幕视频一区二区三区久| 丁香啪啪综合成人亚洲小说| 国产欧美精品区一区二区三区| 国产精品1区2区| 国产欧美精品一区二区三区四区| 国产伦精品一区二区三区免费 | 亚洲国产精品麻豆| 欧美在线免费视屏|