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

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

?? apm2.c

?? 嵌入式系統設計與實例開發源碼
?? 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一区二区三区免费野_久草精品视频
久久成人羞羞网站| 欧美午夜电影网| 琪琪一区二区三区| 亚洲国产美女搞黄色| 国产精品毛片大码女人| 日韩一级免费一区| 欧美v日韩v国产v| 91精品欧美综合在线观看最新| 在线观看视频一区| 色偷偷一区二区三区| 99久久免费精品| 99国产精品一区| 中文字幕在线视频一区| 亚洲成人av一区| 久久免费看少妇高潮| 欧美精品一区二区三区久久久| 精品88久久久久88久久久| 久久免费的精品国产v∧| 久久精品亚洲精品国产欧美| 欧美激情一区二区三区| 久久午夜国产精品| 久久先锋影音av鲁色资源网| 欧美一级久久久| 精品国精品自拍自在线| 国产精品三级电影| 亚洲国产精品嫩草影院| 青青草国产成人av片免费| 国产乱淫av一区二区三区 | 在线一区二区三区四区| 欧美日韩中文字幕一区二区| 日韩欧美精品三级| 国产精品丝袜一区| 性做久久久久久久久| 国产精品一级片| 色妹子一区二区| 欧美成人精品1314www| 日韩美女精品在线| 美腿丝袜亚洲色图| 91色九色蝌蚪| 精品国产露脸精彩对白| 精品欧美一区二区久久| 国产成人免费9x9x人网站视频| 91色视频在线| 欧美成人r级一区二区三区| 欧美不卡一区二区三区四区| 亚洲人成亚洲人成在线观看图片| 日韩欧美一二三区| 亚洲三级小视频| 精品一区二区三区免费观看| 色综合久久中文字幕综合网| 精品国产一区二区三区不卡 | 亚洲一区二区四区蜜桃| 国产真实乱对白精彩久久| 欧美日韩一级黄| 一区二区三区资源| 成人激情黄色小说| 精品国精品自拍自在线| 日韩和欧美的一区| 欧洲在线/亚洲| 日本一区二区免费在线观看视频 | 欧洲激情一区二区| 中文字幕乱码亚洲精品一区| 麻豆91精品91久久久的内涵| 一本色道a无线码一区v| 国产精品久久久久婷婷| 国产黑丝在线一区二区三区| 日韩欧美的一区二区| 日韩电影在线一区二区三区| 欧美丝袜丝交足nylons图片| 亚洲欧美日韩国产成人精品影院| 国产毛片精品视频| 久久色在线视频| 国产真实乱对白精彩久久| 精品精品欲导航| 麻豆视频一区二区| 欧美videossexotv100| 青青青爽久久午夜综合久久午夜| 欧美日韩一区二区欧美激情| 亚洲精品日韩综合观看成人91| 成人app在线| **性色生活片久久毛片| voyeur盗摄精品| 中文字幕欧美一| 在线观看视频一区二区欧美日韩| 一区二区三区在线免费视频| 一本久久a久久精品亚洲| 亚洲欧美电影一区二区| 91福利视频久久久久| 日韩中文字幕1| 欧美一级生活片| 国产一二精品视频| 中文字幕在线不卡| 精品视频一区二区不卡| 日本午夜精品一区二区三区电影 | 成人美女在线观看| 一区视频在线播放| 欧美精品在线观看一区二区| 免费日韩伦理电影| 久久人人97超碰com| 99国产精品久久| 日韩和欧美一区二区| 2017欧美狠狠色| 91伊人久久大香线蕉| 日韩国产欧美一区二区三区| 2023国产精华国产精品| 不卡的电视剧免费网站有什么| 亚洲另类在线制服丝袜| 欧美刺激午夜性久久久久久久| 国产成人三级在线观看| 亚洲国产成人av好男人在线观看| 欧美一级夜夜爽| 91蜜桃在线免费视频| 老司机午夜精品| 伊人一区二区三区| 久久久久99精品国产片| 欧美午夜精品理论片a级按摩| 国产综合久久久久久久久久久久| 亚洲男同1069视频| 精品美女被调教视频大全网站| 91在线播放网址| 精品一区二区综合| 夜夜精品视频一区二区| 国产欧美日本一区视频| 欧美三级日韩三级| 99re这里只有精品6| 麻豆精品新av中文字幕| 一区二区视频在线| 日本一区二区三区免费乱视频| 欧美日韩www| 91麻豆国产香蕉久久精品| 国产在线观看免费一区| 亚洲综合999| 亚洲色图丝袜美腿| 日本一区二区三区四区| 欧美电视剧在线观看完整版| 欧美色综合天天久久综合精品| 丰满白嫩尤物一区二区| 极品少妇xxxx精品少妇| 日韩成人一级片| 亚洲狠狠丁香婷婷综合久久久| 国产精品―色哟哟| 国产日韩欧美不卡| 久久久久久亚洲综合| 26uuu国产电影一区二区| 91麻豆精品国产91久久久久久 | 久久久久久亚洲综合| 日韩欧美一区在线| 欧美一级一级性生活免费录像| 欧美色精品天天在线观看视频| 91麻豆免费看| 91麻豆成人久久精品二区三区| 成人伦理片在线| av在线不卡免费看| 99国产一区二区三精品乱码| 99久久精品免费| 色欧美片视频在线观看在线视频| aaa亚洲精品一二三区| 99精品国产99久久久久久白柏| 成人动漫一区二区三区| 99riav久久精品riav| 色av成人天堂桃色av| 欧美伊人久久久久久午夜久久久久| 色婷婷精品久久二区二区蜜臀av| 色婷婷亚洲综合| 在线精品亚洲一区二区不卡| 色国产精品一区在线观看| 91成人免费在线| 欧美日韩视频专区在线播放| 欧美伦理视频网站| 欧美成人综合网站| 国产欧美一二三区| 曰韩精品一区二区| 美女视频一区二区| 成人av网站免费| 欧美色精品在线视频| 欧美大片拔萝卜| 国产精品黄色在线观看| 亚洲制服丝袜av| 秋霞影院一区二区| 国产麻豆精品theporn| 不卡的电影网站| 欧美一区二区免费| 日本一区二区三区国色天香 | 男男gaygay亚洲| 国产黄色91视频| 欧美视频在线观看一区二区| 日韩欧美国产一区二区三区 | 日韩一级完整毛片| 久久久精品影视| 亚洲最大成人网4388xx| 国产精品正在播放| 欧美怡红院视频| 中文字幕精品一区二区精品绿巨人| 亚洲高清在线视频| 国产乱子伦一区二区三区国色天香| 波多野结衣中文一区| 精品国产91亚洲一区二区三区婷婷| 亚洲欧洲国产日本综合| 极品少妇一区二区| 欧美喷潮久久久xxxxx|