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

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

?? usbd-monitor.c

?? Linux2.4.20針對三星公司的s3c2440內核基礎上的一些設備驅動代碼
?? C
?? 第 1 頁 / 共 2 頁
字號:
/* * linux/drivers/usbd/usbd-monitor.c - USB Device Cable Monitor * * Copyright (c) 2000, 2001, 2002 Lineo * Copyright (c) 2001 Hewlett Packard * * By:  *      Stuart Lynne <sl@lineo.com>,  *      Tom Rushworth <tbr@lineo.com>,  *      Bruce Balden <balden@lineo.com> * * 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. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. * */#include <linux/config.h>#include <linux/module.h>#include "usbd-export.h"#include "usbd-build.h"#include "usbd-module.h"MODULE_AUTHOR ("sl@lineo.com, tbr@lineo.com");MODULE_DESCRIPTION ("USB Device Monitor");USBD_MODULE_INFO ("usbd_monitor 0.3");EXPORT_NO_SYMBOLS;#include <linux/init.h>#include <linux/kernel.h>#include <linux/list.h>#include <asm/uaccess.h>#include <linux/netdevice.h>#include <linux/skbuff.h>#include <linux/etherdevice.h>#include <net/arp.h>#include <linux/rtnetlink.h>#include <linux/smp_lock.h>#include <linux/ctype.h>#include <linux/timer.h>#include <linux/string.h>#include <linux/pkt_sched.h>#include <asm/io.h>#include <linux/proc_fs.h>#include <linux/kmod.h>/* * Architecture specific includes */#if defined(CONFIG_ARCH_SA1100) || defined(CONFIG_SABINAL_DISCOVERY)#include <asm/irq.h>#include <asm/hardware.h>#include "usbd.h"#include "usbd-func.h"#include "usbd-bus.h"#include "hotplug.h"/* pick up any required GPIO pin definitions */#if defined(CONFIG_ARCH_SA1100)#include "bi/sa1100.h"#endif#endif#if defined(CONFIG_PM)#include <linux/pm.h>#endif/* Module Parameters ************************************************************************* */typedef enum monitor_status {	MONITOR_UNKNOWN,	MONITOR_LOADING,	// loading due to cable connection interrupt	MONITOR_LOADED,		// loaded 	MONITOR_UNLOADING,	// unloading due to cable disconnection interrupt	MONITOR_UNLOADED,	// unloaded#ifdef CONFIG_PM	MONITOR_SUSPENDING,	// suspending due to power management event	MONITOR_SUSPENDED,	// suspended due to power management event	MONITOR_RESTORING,	// restoring #endif} monitor_status_t;/* struct monitor_bi_data - * * private data structure for this bus interface driver */struct monitor_data {	monitor_status_t status;	struct tq_struct monitor_bh;	struct tq_struct hotplug_bh;	int have_irq;#ifdef CONFIG_PM	struct pm_dev *pm_info;#endif};struct monitor_data monitor;void monitor_int_hndlr (int irq, void *dev_id, struct pt_regs *regs);/** * monitor_request_irq */int monitor_request_irq (void){#if defined(CONFIG_SA1100_USBCABLE_GPIO)	int rc;	printk (KERN_DEBUG "monitor_request_irq: %d %d\n", CONFIG_SA1100_USBCABLE_GPIO, SA1100_GPIO_TO_IRQ (CONFIG_SA1100_USBCABLE_GPIO));	if ((rc = request_irq (SA1100_GPIO_TO_IRQ (CONFIG_SA1100_USBCABLE_GPIO), monitor_int_hndlr, SA_SHIRQ, "USBD Monitor", &monitor))) {		printk (KERN_DEBUG "monitor_request_irq: failed: %d\n", rc);		return -EINVAL;	}	GPDR &= ~GPIO_GPIO (CONFIG_SA1100_USBCABLE_GPIO);	set_GPIO_IRQ_edge (GPIO_GPIO (CONFIG_SA1100_USBCABLE_GPIO), GPIO_BOTH_EDGES);#endif	return 0;}/** * monitor_free_irq */void monitor_free_irq (void){#if defined(CONFIG_SA1100_USBCABLE_GPIO)	free_irq (SA1100_GPIO_TO_IRQ (CONFIG_SA1100_USBCABLE_GPIO), NULL);#endif}/** * monitor_connected - connected to cable * * Return non-zero if via USB cable to USB Hub or Host */int monitor_connected (void){	int rc = 1;	/*	 * Architecture specific - determine connect status	 */	/*	 * SA-1100	 *	 * Only pay attention to the status if we also can control the pullup.	 */#if defined(CONFIG_SA1100_USBCABLE_GPIO) && defined(CONFIG_SA1100_CONNECT_GPIO)#ifdef CONFIG_SA1100_CONNECT_ACTIVE_HIGH	rc = (GPLR & GPIO_GPIO (23)) != 0;	printk (KERN_DEBUG "udc_connected: ACTIVE_HIGH: %d", rc);#else	rc = (GPLR & GPIO_GPIO (23)) == 0;	printk (KERN_DEBUG "udc_connected: ACTIVE_LOW: %d", rc);#endif#endif				/* CONFIG_ARCH_SA1100 && CONFIG_SA1100_USBCABLE_GPIO */	printk (KERN_DEBUG "monitor_connected: %d\n", rc);	return rc;}static char *hotplug_actions[] = {	"load",	"suspend",	"restore-loaded",	"restore-unloaded",	"unload"};/* indices for the hotplug_actions array, these must match the array */#define MHA_LOAD               0#define MHA_SUSPEND            1#define MHA_RESTORE_LOADED     2#define MHA_RESTORE_UNLOADED   3#define MHA_UNLOAD             4#if defined(CONFIG_USBD_PROCFS)#define HOTPLUG_SYNC_TIMEOUT  (10*HZ)static DECLARE_MUTEX_LOCKED (hotplug_done);static struct timer_list hotplug_timeout;static void hotplug_sync_over (unsigned long data){	printk (KERN_ERR "usbdmonitor: warning - hotplug script timed out\n");	up (&hotplug_done);}#endifstatic int monitor_exiting = 0;int monitor_hotplug (int action_ndx){	/* This should probably be serialized - if PM runs in a separate	   context, it would seem possible for someone to "rmmmod usbdmonitor"	   (e.g. via "at") at the same time time PM decides to suspend.	   Unfortunately, there is no airtight way to accomplish that inside	   this module - once PM has called the registered fn, the "race"	   is on :(. */	int rc;	if (action_ndx < 0 || action_ndx > MHA_UNLOAD) {		return (-EINVAL);	}	if (monitor_exiting) {		if (MHA_UNLOAD != action_ndx) {			return (-EINVAL);		}		if (MONITOR_UNLOADED == monitor.status || MONITOR_UNLOADING == monitor.status) {			/* No need to do it again... */			return (0);		}	}	printk (KERN_DEBUG "monitor_hotplug: agent: usbd interface: monitor action: %s\n", hotplug_actions[action_ndx]);#if defined(CONFIG_USBD_PROCFS)	/* Sync - fire up the script and wait for it to echo something to	   /proc/usb-monitor (or else PM SUSPEND may not work) */	init_MUTEX_LOCKED (&hotplug_done);	/* fire up the script */	rc = hotplug ("usbd", "monitor", hotplug_actions[action_ndx]);	if (0 == rc) {		/* wait for the nudge from a write to /proc/usb-monitor */		init_timer (&hotplug_timeout);		hotplug_timeout.data = 0;		hotplug_timeout.function = hotplug_sync_over;		hotplug_timeout.expires = jiffies + HOTPLUG_SYNC_TIMEOUT;		add_timer (&hotplug_timeout);		down_interruptible (&hotplug_done);		del_timer (&hotplug_timeout);	}#else	/* Async - fire up the script and return */	rc = hotplug ("usbd", "monitor", hotplug_actions[action_ndx]);#endif	return (rc);}#ifdef CONFIG_PM/** * monitor_suspend * * Check status, unload if required, set monitor status. */int monitor_suspend (void){	unsigned long flags;	local_irq_save (flags);	switch (monitor.status) {	case MONITOR_UNKNOWN:	case MONITOR_UNLOADED:		local_irq_restore (flags);		return 0;	case MONITOR_LOADING:	case MONITOR_UNLOADING:	case MONITOR_SUSPENDING:	case MONITOR_RESTORING:	case MONITOR_SUSPENDED:		// XXX we should wait for this		local_irq_restore (flags);		return -EINVAL;	case MONITOR_LOADED:		monitor.status = MONITOR_SUSPENDING;		local_irq_restore (flags);		monitor_hotplug (MHA_SUSPEND);		monitor.status = MONITOR_SUSPENDED;		return 0;	default:		return -EINVAL;	}}#endif/** * hotplug_bh -  * @ignored: * * Check connected status and load/unload as appropriate. */void hotplug_bh (void *ignored){	printk (KERN_DEBUG "hotplug_bh:\n");	if (monitor_connected ()) {		printk (KERN_DEBUG "monitor_restore: RESTORE_LOADED\n");		monitor_hotplug (MHA_RESTORE_LOADED);		monitor.status = MONITOR_LOADED;	} else {		printk (KERN_DEBUG "monitor_restore: RESTORE_UNLOADED\n");		monitor_hotplug (MHA_RESTORE_UNLOADED);		monitor.status = MONITOR_UNLOADED;	}	MOD_DEC_USE_COUNT;}/** * hotplug_schedule_bh - */void hotplug_schedule_bh (void){	printk (KERN_DEBUG "hotplug_schedule_bh: schedule bh\n");	if (monitor.hotplug_bh.sync) {		return;	}	MOD_INC_USE_COUNT;	if (!schedule_task (&monitor.hotplug_bh)) {		printk (KERN_DEBUG "monitor_schedule_bh: failed\n");		MOD_DEC_USE_COUNT;	}}#ifdef CONFIG_PM/** * monitor_restore * * Check status, load if required, set monitor status. */int monitor_restore (void){	unsigned long flags;	local_irq_save (flags);	switch (monitor.status) {	case MONITOR_SUSPENDED:		monitor.status = MONITOR_RESTORING;		local_irq_restore (flags);		hotplug_schedule_bh ();		return 0;	case MONITOR_UNKNOWN:	case MONITOR_UNLOADED:	case MONITOR_LOADING:	case MONITOR_UNLOADING:	case MONITOR_SUSPENDING:	case MONITOR_RESTORING:		// XXX we should wait for this		local_irq_restore (flags);		return -EINVAL;	case MONITOR_LOADED:		local_irq_restore (flags);		return 0;	default:		return -EINVAL;	}}/** * monitor_pm_event * * Handle power management event */static int monitor_pm_event (struct pm_dev *dev, pm_request_t rqst, void *unused){	int rc;	/* See comment regarding race condition at start of monitor_hotplug() */	MOD_INC_USE_COUNT;	rc = 0;	switch (rqst) {	case PM_SUSPEND:		// Force unloading		rc = monitor_suspend ();		printk (KERN_ERR "%s: suspend finished (rc=%d)\n", __FUNCTION__, rc);		break;	case PM_RESUME:

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲欧美日韩在线| 成人黄页毛片网站| 奇米色777欧美一区二区| 午夜婷婷国产麻豆精品| 亚洲综合另类小说| 亚洲国产精品久久人人爱蜜臀| 亚洲激情一二三区| 亚洲国产精品一区二区www在线| 亚洲成人激情社区| 亚洲午夜久久久| 日韩黄色一级片| 日本美女一区二区| 极品少妇xxxx精品少妇| 福利一区在线观看| av中文字幕不卡| 欧美最猛性xxxxx直播| 欧美日韩一区二区三区四区五区 | 欧美亚州韩日在线看免费版国语版| 91视频一区二区三区| 欧美视频一二三区| 日韩欧美在线观看一区二区三区| 精品国产乱码久久久久久免费 | 91免费看`日韩一区二区| 成人免费视频免费观看| 91麻豆国产自产在线观看| 色婷婷av一区二区三区软件| 欧美日韩电影在线播放| 欧美成人国产一区二区| 国产精品久久久久久亚洲伦| 亚洲精品视频观看| 老司机免费视频一区二区三区| 国产成人精品综合在线观看| 91福利国产精品| 日韩欧美视频在线| 亚洲特级片在线| 奇米精品一区二区三区四区| 国产成人在线影院 | 国产精品久久二区二区| 亚洲一区二区在线免费看| 久久99精品久久久久婷婷| 波多野结衣亚洲| 91精品国产综合久久精品app| 久久免费视频色| 亚洲午夜久久久久久久久电影院| 国产在线观看一区二区| 波多野结衣一区二区三区| 欧美三级日韩在线| 欧美国产丝袜视频| 97成人超碰视| 日韩欧美一二三区| 亚洲精品videosex极品| 九一九一国产精品| 91在线无精精品入口| 欧美大片在线观看一区二区| 亚洲精品成人精品456| 国产一区二区三区免费在线观看| 欧美系列日韩一区| 国产精品久久久久影院色老大| 日本中文字幕不卡| 91久久精品一区二区三区| 久久蜜臀精品av| 日本美女一区二区三区视频| 色菇凉天天综合网| 欧美激情艳妇裸体舞| 青青青爽久久午夜综合久久午夜| 91污在线观看| 国产欧美一区视频| 久久99精品久久久久久国产越南| 精品视频一区二区不卡| 亚洲手机成人高清视频| 国产成人8x视频一区二区| 日韩精品一区二区在线| 亚洲mv在线观看| 色综合色狠狠天天综合色| 日韩黄色小视频| 中文天堂在线一区| 日韩影院免费视频| 91一区二区三区在线观看| 久久亚洲精品小早川怜子| 免费看欧美美女黄的网站| 欧美日韩精品久久久| 亚洲男同1069视频| 不卡一区二区中文字幕| 国产午夜精品福利| 精品综合免费视频观看| 91精品国产91久久综合桃花| 午夜av一区二区| 欧美视频日韩视频在线观看| 亚洲天堂网中文字| www.激情成人| 亚洲同性gay激情无套| av午夜精品一区二区三区| 亚洲国产高清aⅴ视频| 国产aⅴ综合色| 久久精品一区二区三区av| 国产乱码精品1区2区3区| 久久久久久久久久久99999| 国产又黄又大久久| 国产午夜精品美女毛片视频| 国产成人一区二区精品非洲| 国产亚洲欧洲997久久综合| 国产一区二区影院| 中文字幕av不卡| 免费成人在线影院| 一本到高清视频免费精品| 亚洲欧美自拍偷拍| 99re热视频精品| 一区二区在线看| 欧美日韩成人激情| 青青草成人在线观看| 天天做天天摸天天爽国产一区 | 日韩精品影音先锋| 国产一区二区精品久久| 国产网红主播福利一区二区| 国产91精品露脸国语对白| 亚洲日本青草视频在线怡红院| 91影院在线观看| 亚洲va国产va欧美va观看| 欧美一区二区三区喷汁尤物| 国产在线观看一区二区| 国产精品久久久久久久蜜臀| 色激情天天射综合网| 日韩av网站在线观看| 久久色在线观看| av在线综合网| 性久久久久久久久久久久| 精品久久久久久久久久久久久久久| 国产成人综合在线播放| 一区二区三区在线免费视频 | 亚洲一卡二卡三卡四卡无卡久久| 欧美日韩一区二区三区四区五区 | 国产免费成人在线视频| 成人久久视频在线观看| 亚洲精品第一国产综合野| 欧美一区二区三区四区五区 | 久久蜜桃一区二区| 99综合电影在线视频| 亚洲国产欧美在线人成| 26uuu亚洲综合色欧美| voyeur盗摄精品| 午夜精品久久久久久久99水蜜桃 | 夜夜亚洲天天久久| 精品国产精品一区二区夜夜嗨| 成人动漫视频在线| 欧美少妇一区二区| 国产麻豆精品视频| 夜夜嗨av一区二区三区四季av| 精品日韩av一区二区| 91看片淫黄大片一级| 激情综合一区二区三区| 一区二区三区四区蜜桃| 久久亚洲捆绑美女| 欧美私模裸体表演在线观看| 国产乱码精品一区二区三区忘忧草 | 国产精品每日更新| 7777精品久久久大香线蕉 | 欧美一区二区三区免费| 最新不卡av在线| 欧美三级日本三级少妇99| 国产高清不卡二三区| 亚洲第一狼人社区| **网站欧美大片在线观看| 日韩女同互慰一区二区| 欧美伊人精品成人久久综合97 | 欧美日韩一区高清| 成人av动漫网站| 狠狠狠色丁香婷婷综合激情| 一区二区三区加勒比av| 国产精品久久久久久久浪潮网站| 日韩欧美资源站| 欧美日韩一区二区在线视频| 9l国产精品久久久久麻豆| 国内精品免费**视频| 青青草原综合久久大伊人精品| 亚洲精品日韩一| 国产精品久久福利| 久久精品亚洲精品国产欧美kt∨ | 久久精品99久久久| 午夜精品福利一区二区蜜股av| 中文字幕日本不卡| 国产精品少妇自拍| 麻豆91免费看| 日本sm残虐另类| 亚洲成人免费电影| 一区二区三区中文字幕在线观看| 中文字幕不卡在线播放| 久久久久久久久99精品| 欧美精品一区二区三| 制服丝袜av成人在线看| 欧美性videosxxxxx| 日本韩国欧美在线| 99riav久久精品riav| 成人av资源网站| 成人午夜视频免费看| 国产99久久久国产精品| 国产成人无遮挡在线视频| 国产乱码精品一区二区三区忘忧草| 久久99精品久久久| 久久激情五月婷婷| 激情久久五月天|