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

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

?? apm2.c

?? ARM 嵌入式 系統 設計與實例開發 實驗教材 二源碼
?? C
字號:
/* * bios-less APM driver for ARM Linux  *  Jamey Hicks <jamey@crl.dec.com> *  adapted from the APM BIOS driver for Linux by Stephen Rothwell (sfr@linuxcare.com) * * APM 1.2 Reference: *   Intel Corporation, Microsoft Corporation. Advanced Power Management *   (APM) BIOS Interface Specification, Revision 1.2, February 1996. * * [This document is available from Microsoft at: *    http://www.microsoft.com/hwdev/busbios/amp_12.htm] *   Thr 29 Nov 2001 Nandy Lyu <nandy@mizi.com>   - Modified for MIZI Power Management   Mon 14 Jan 2002 Yong-iL Joh <tolkien@mizi.com>   - modified followed by MIZI's "kernel vs Application API spec (0.3, draft)"   Fri May 10 2002 Yong-iL Joh <tolkien@mizi.com>   - kernel vs app. API spec (draft) v1.33 * * This file is subject to the terms and conditions of the GNU General Public * License.  See the file COPYING in the main directory of this archive * for more details. */#include <linux/config.h>#include <linux/module.h>#include <linux/kernel.h>#include <linux/init.h>#include <linux/poll.h>#include <linux/miscdevice.h>#include <linux/apm_bios.h>#include <linux/pm.h>#include <linux/errno.h>#include <asm/hardware.h>#include <linux/proc_fs.h>/* *  Debug macros  *//* 0 : Quiet 1 : Audible 2 : Loud 3 : Noisy */#undef CONFIG_APM_DEBUG	1#ifdef CONFIG_APM_DEBUG#define DEBUG(n, args...)		\	if (n <= CONFIG_APM_DEBUG) {	\	    printk(KERN_INFO args);	\	}#else#define DEBUG(n, args...)#endifextern wait_queue_head_t mz_event_queue;#define INCBUF(x,mod) (((x)+1) & ((mod) - 1))extern struct mz_event_queue_t mz_event_q;extern int pm_suggest_suspend(void);extern int pm_do_suspend(void);static int apm_bios_ioctl(struct inode * inode, struct file *filp,		    u_int cmd, u_long arg){    int ret = 0;    struct pm_dev *pm_dev = NULL;    static int apm_lcd_status = LCD_ON;    switch (cmd) {    case APM_IOC_SUSPEND:      pm_suggest_suspend();      break;    case APM_MZ_SLEEP:      pm_do_suspend();      break;    case APM_LCD_OFF:      DEBUG(2, __FILE__ ": LCD OFF\n");      while ((pm_dev = pm_find(PM_USER_DEV, pm_dev)) != NULL) {	if ((pm_dev->id == PM_USER_LCD) || (pm_dev->id == PM_USER_LIGHT)) {	  DEBUG(2, __FILE__ ": find LCD device\n");	  ret = pm_send(pm_dev, PM_SUSPEND, (void *)2);	  if (ret) {	    DEBUG(1, __FILE__ ": error in pm_send(0x%lx)\n", pm_dev->id);	    return ret;	  }	}      }      apm_lcd_status = LCD_OFF;      break;    case APM_LCD_ON:      DEBUG(2, __FILE__ ": LCD ON\n");      while ((pm_dev = pm_find(PM_USER_DEV, pm_dev)) != NULL) {	if ((pm_dev->id == PM_USER_LCD) || (pm_dev->id == PM_USER_LIGHT)) {	  DEBUG(2, __FILE__ ": find LCD device\n");	  ret = pm_send(pm_dev, PM_RESUME, (void *)0);	  if (ret) {	    DEBUG(1, __FILE__ ": error in pm_send(0x%lx)\n", pm_dev->id);	    return ret;	  }	}      }      apm_lcd_status = LCD_ON;      break;    case APM_DEV_LIST:#ifdef CONFIG_APM_DEBUG      printk("type \t\t id \t\t state \t prev_state \n");      while ((pm_dev = pm_find(PM_UNKNOWN_DEV, pm_dev)) != NULL) {	printk("0x%08x \t 0x%08lx \t %d \t %d\n",	       (int)pm_dev->type, (unsigned long)pm_dev->id,	       (int)pm_dev->state, (int)pm_dev->prev_state);      }#endif      break;    case APM_DEV_ONOFF: {      struct pm_dev *pm_dev2;      pm_dev2 = (struct pm_dev *)kmalloc(sizeof(struct pm_dev), GFP_KERNEL);      if (pm_dev2 == NULL)	return -ENOMEM;      ret = copy_from_user(pm_dev2, (struct pm_dev *)arg,			   sizeof(struct pm_dev));      if (ret)	return ret;      while ((pm_dev = pm_find(pm_dev2->type, pm_dev)) != NULL) {	if (pm_dev->id == pm_dev2->id)	  ret = pm_send(pm_dev, pm_dev2->state, pm_dev2->data);	break;      }      kfree(pm_dev2);      return ret;    } break;    case GET_BATTERY_STATUS: {      BATTERY_RET bat_dev = {	sec:	0,	level:	-1,	ac:	AC_UNKNOWN,	battery: BATTERY_UNKNOWN,      };      if (mz_pm_ops.get_power_status == NULL)	return -EIO;      if (!(ret = (*(mz_pm_ops.get_power_status))(&bat_dev))) {	if (copy_to_user((BATTERY_RET *)arg, &bat_dev, sizeof(BATTERY_RET)))	    return -EINVAL;      } else return -EIO;    } break;    case GET_JIFFIES:      return put_user(pm_last_jiffies, (unsigned long *)arg);      break;    case GET_LCD_STATUS:      return put_user(apm_lcd_status, (unsigned int *)arg);      break;    case GET_MZ_EVENT:      if (mz_event_q.head == mz_event_q.tail)	return -EAGAIN;      else {	ret = put_user(mz_event_q.buf[mz_event_q.tail], (unsigned long *)arg);	mz_event_q.tail = INCBUF(mz_event_q.tail, MZ_EVENT_BUF_SIZE);	return ret;      }      break;    case SET_INPUT_DEV: {      unsigned int apm_input_tmp;      ret = get_user(apm_input_tmp, (unsigned int *)arg);      if (ret)	return ret;      while ((pm_dev = pm_find(PM_USER_DEV, pm_dev)) != NULL) {	if (pm_dev->id == PM_USER_INPUT) {	  if (apm_input_tmp == INPUT_DEV_ON)	    ret = pm_send(pm_dev, PM_RESUME, NULL);	  else if (apm_input_tmp == INPUT_DEV_OFF)	    ret = pm_send(pm_dev, PM_SUSPEND, NULL);	  else	    return -EINVAL;	}      }      return ret;    } break;    default:      return -ENOIOCTLCMD;    }    return 0;}static unsigned int apm_bios_poll(struct file *filp, poll_table *wait){    poll_wait(filp, &mz_event_queue, wait);    return (mz_event_q.head == mz_event_q.tail ? 0 : (POLLIN | POLLRDNORM));}struct file_operations apm_bios_fops = {    owner:	THIS_MODULE,    ioctl:	apm_bios_ioctl,    poll:	apm_bios_poll,};static struct miscdevice apm_device = {	MISC_DYNAMIC_MINOR,	"apm_bios",	&apm_bios_fops};/* * Just start the APM thread. We do NOT want to do APM BIOS * calls from anything but the APM thread, if for no other reason * than the fact that we don't trust the APM BIOS. This way, * most common APM BIOS problems that lead to protection errors * etc will have at least some level of being contained... * * In short, if something bad happens, at least we have a choice * of just killing the apm thread.. */static int __init apm_init(void){    if (PM_IS_ACTIVE()) {      printk(KERN_NOTICE "apm: overridden by ACPI.\n");      return -1;    }    pm_active = 1;    misc_register(&apm_device);    return 0;}static void __exit apm_exit(void){    misc_deregister(&apm_device);    pm_active = 0;}module_init(apm_init);module_exit(apm_exit);MODULE_AUTHOR("Yong-iL Joh");MODULE_DESCRIPTION("Advanced Power Management by MIZI");EXPORT_NO_SYMBOLS;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲男人天堂av| 久久66热偷产精品| 久久99精品久久久久久久久久久久 | 欧美一区二区女人| 国产精品女主播av| 国内外精品视频| 91精品国产一区二区三区蜜臀 | 欧美草草影院在线视频| 亚洲乱码国产乱码精品精98午夜| 蜜桃视频在线一区| 欧美性猛片xxxx免费看久爱| 国产视频在线观看一区二区三区 | 亚洲一区二三区| 不卡的av中国片| 久久久亚洲午夜电影| 美洲天堂一区二卡三卡四卡视频| 色噜噜狠狠成人网p站| 亚洲欧洲在线观看av| 国产成人夜色高潮福利影视| 日韩一区二区麻豆国产| 亚洲自拍偷拍麻豆| 欧美综合亚洲图片综合区| 国产精品―色哟哟| 成人h版在线观看| 中文字幕高清一区| 成人a区在线观看| 国产精品久久久久久久第一福利 | 欧美极品少妇xxxxⅹ高跟鞋| 国产精品亚洲人在线观看| 久久亚洲免费视频| 国产一区二区网址| 欧美激情一区二区| 99re这里只有精品视频首页| 国产精品久久久久久久久免费相片 | 国产精品久久毛片| 久久99精品国产麻豆婷婷| 欧美日韩一区二区三区在线看 | 亚洲va国产天堂va久久en| 不卡视频在线看| 中文字幕高清一区| 国产一区不卡视频| 日韩精品一区二区三区四区 | 国产精品一区二区久久不卡| 精品福利视频一区二区三区| 午夜不卡在线视频| 7777精品伊人久久久大香线蕉超级流畅| 中文字幕视频一区| 色综合久久久久综合| 亚洲日本一区二区| 色婷婷国产精品| 亚洲国产日日夜夜| 欧美午夜一区二区三区免费大片| 亚洲柠檬福利资源导航| 99精品国产99久久久久久白柏| 国产精品家庭影院| 色菇凉天天综合网| 天天做天天摸天天爽国产一区| 欧美午夜精品电影| 日韩电影一区二区三区四区| 91麻豆精品国产91久久久久久久久| 午夜激情久久久| 精品国产乱码久久久久久闺蜜 | 国产1区2区3区精品美女| 国产日产精品1区| a4yy欧美一区二区三区| 亚洲精品一二三四区| 欧美午夜精品电影| 麻豆高清免费国产一区| 久久久影视传媒| 91视频免费播放| 调教+趴+乳夹+国产+精品| 欧美成人aa大片| www.欧美色图| 午夜电影一区二区三区| 久久综合色婷婷| 日本精品一区二区三区四区的功能| 亚洲天堂免费看| 欧美性感一区二区三区| 久久99国产精品麻豆| 中文字幕在线不卡国产视频| 欧美自拍偷拍一区| 麻豆极品一区二区三区| 日韩美女久久久| 欧美成人vr18sexvr| 91视频www| 国产自产2019最新不卡| 一区二区三区四区av| 精品国产乱码久久久久久老虎| 一本色道亚洲精品aⅴ| 看片网站欧美日韩| 亚洲一卡二卡三卡四卡五卡| 欧美成人精品1314www| 日本久久电影网| 美女看a上一区| 亚洲三级电影全部在线观看高清| 欧美一级淫片007| 91美女片黄在线观看91美女| 久久国产精品色婷婷| 亚洲欧美aⅴ...| 久久精品亚洲麻豆av一区二区| 欧美日韩在线一区二区| 成人免费不卡视频| 轻轻草成人在线| 亚洲一级二级三级在线免费观看| 久久精品亚洲乱码伦伦中文| 欧美吻胸吃奶大尺度电影 | 亚洲高清不卡在线| 国产精品毛片a∨一区二区三区| 欧美一区二区私人影院日本| 91麻豆免费在线观看| 国产不卡在线一区| 一区二区三区日韩精品| 亚洲婷婷综合久久一本伊一区| 精品日韩一区二区三区免费视频| 在线观看免费视频综合| 成人av在线播放网址| 国产成人自拍高清视频在线免费播放| 一区二区三区精品视频在线| 国产精品色哟哟网站| 国产三级精品三级在线专区| 欧美www视频| 欧美成va人片在线观看| 日韩久久免费av| 日韩精品中文字幕一区| 日韩欧美中文一区二区| 3d成人动漫网站| 91麻豆精品久久久久蜜臀| 91免费版在线看| 91亚洲精品久久久蜜桃| 欧美日韩美女一区二区| 欧美日韩一区二区三区免费看| 在线视频一区二区三区| 欧美专区日韩专区| 欧美日韩精品综合在线| 欧美色电影在线| 欧美久久久久久蜜桃| 日韩一级片在线观看| 精品国产污污免费网站入口 | 日本在线不卡视频| 日韩不卡一区二区三区| 久久电影网站中文字幕| 国产乱色国产精品免费视频| 国产大片一区二区| 99国内精品久久| 欧美日韩一级二级三级| 日韩欧美国产麻豆| 久久精品亚洲精品国产欧美kt∨| 国产三级欧美三级| 怡红院av一区二区三区| 日韩高清国产一区在线| 国产一区三区三区| 不卡视频免费播放| 欧美三级资源在线| 337p日本欧洲亚洲大胆精品| 中文字幕免费不卡| 亚洲成人av免费| 日欧美一区二区| 国产精品一区二区黑丝| 91免费国产在线观看| 日韩欧美综合在线| 国产精品久久久久久一区二区三区| 国产精品福利影院| 亚洲成人在线网站| 国产一区二区精品久久91| 日本韩国欧美国产| 欧美精品一区二区三区久久久| 中文字幕av一区二区三区高 | 色综合久久天天| 日本韩国视频一区二区| 欧美久久久久免费| 国产精品三级视频| 天使萌一区二区三区免费观看| 国产精品正在播放| 制服丝袜中文字幕一区| 日本一区二区三区四区| 亚洲一区二区三区自拍| 国产精品自在欧美一区| 欧美在线你懂的| 欧美激情综合五月色丁香 | 欧美国产日韩亚洲一区| 亚洲成人激情综合网| 丁香另类激情小说| 91精品久久久久久久99蜜桃| 久久精品亚洲一区二区三区浴池| 中文字幕一区二区三区精华液| 天堂成人国产精品一区| 99久久久无码国产精品| 精品久久久久久久久久久久包黑料 | 亚洲视频 欧洲视频| 国产在线国偷精品免费看| 欧美日韩在线播放一区| 国产精品国产三级国产| 国产精品一区二区三区乱码| 色激情天天射综合网| 亚洲另类在线一区| 国产九九视频一区二区三区| 7777精品伊人久久久大香线蕉完整版 | 乱一区二区av| 欧美日韩国产综合一区二区| 最近日韩中文字幕|