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

? 歡迎來(lái)到蟲(chóng)蟲(chóng)下載站! | ?? 資源下載 ?? 資源專(zhuān)輯 ?? 關(guān)于我們
? 蟲(chóng)蟲(chóng)下載站

?? usbd-monitor.c

?? Linux2.4.20針對(duì)三星公司的s3c2440內(nèi)核基礎(chǔ)上的一些設(shè)備驅(qū)動(dòng)代碼
?? C
?? 第 1 頁(yè) / 共 2 頁(yè)
字號(hào):
/* * 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:

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久色.com| 色婷婷激情久久| 久久亚洲一区二区三区四区| 免费在线观看不卡| 欧美成人三级在线| 国产精品自在欧美一区| 国产网站一区二区| 99国产精品一区| 亚洲综合色在线| 欧美一区二区福利视频| 国产在线观看免费一区| 国产精品国产自产拍高清av | 欧美亚洲禁片免费| 午夜欧美电影在线观看| 日韩视频免费观看高清完整版在线观看| 蜜臀av性久久久久蜜臀aⅴ | 成人免费视频视频| 一区二区高清免费观看影视大全| 欧美乱妇一区二区三区不卡视频| 九九国产精品视频| 亚洲美女视频在线观看| 欧美一区二区三区视频在线| 国产aⅴ综合色| 一个色综合网站| 精品日韩在线一区| 99久久精品情趣| 美女视频黄久久| 一区二区在线看| 精品美女在线播放| 欧美亚洲动漫精品| 国产一区二区网址| 亚洲chinese男男1069| 久久久久国产免费免费| 欧美在线不卡一区| 国产精品99久久久久久宅男| 亚洲第一在线综合网站| 国产精品全国免费观看高清| 欧美肥胖老妇做爰| 91视频观看视频| 国模无码大尺度一区二区三区| 国产精品午夜在线| 日韩欧美亚洲国产另类| 91久久久免费一区二区| 高清国产一区二区| 蜜桃视频免费观看一区| 亚洲午夜精品网| 国产精品久线在线观看| 精品奇米国产一区二区三区| 欧美性videosxxxxx| 99久久久久久| 成人性色生活片免费看爆迷你毛片| 免费一级欧美片在线观看| 亚洲人成影院在线观看| 欧美国产一区二区在线观看| 日韩欧美一二区| 欧美精品乱码久久久久久| 一本色道久久综合亚洲精品按摩| 国产河南妇女毛片精品久久久| 奇米综合一区二区三区精品视频| 亚洲综合区在线| 亚洲美女免费视频| 中文字幕不卡在线播放| 精品国产不卡一区二区三区| 欧美一级片在线观看| 欧美人妖巨大在线| 欧美视频你懂的| 欧美中文一区二区三区| 91视视频在线观看入口直接观看www | 国产精品不卡在线观看| 久久一留热品黄| 日韩片之四级片| 91精品婷婷国产综合久久性色 | 风间由美性色一区二区三区| 国产乱对白刺激视频不卡| 另类小说色综合网站| 日韩国产精品久久久久久亚洲| 五月天激情小说综合| 日韩影院精彩在线| 日韩主播视频在线| 久久狠狠亚洲综合| 久久69国产一区二区蜜臀| 久久99久久精品| 国产精品一级在线| 成人久久久精品乱码一区二区三区| 国产成人自拍网| 高清成人免费视频| 99国产精品国产精品毛片| 91视频com| 欧美性做爰猛烈叫床潮| 精品视频1区2区| 91精品国产入口| 久久伊99综合婷婷久久伊| 国产女同互慰高潮91漫画| 国产精品久久影院| 亚洲欧美日韩国产另类专区| 一二三四社区欧美黄| 日韩专区欧美专区| 国产麻豆精品久久一二三| 91在线视频网址| 欧美日韩精品一区二区在线播放| 69久久99精品久久久久婷婷| 亚洲精品一区二区三区香蕉| 日本一区二区成人| 亚洲成av人片在线观看无码| 乱中年女人伦av一区二区| 国产乱人伦偷精品视频不卡| 91在线精品一区二区| 3d动漫精品啪啪1区2区免费| 国产一区二区看久久| 石原莉奈在线亚洲三区| 欧洲精品中文字幕| 亚洲国产精品嫩草影院| 日韩理论电影院| 99精品国产91久久久久久 | 久久色视频免费观看| 91久久一区二区| 国产一区二区三区免费看| 亚洲国产欧美日韩另类综合| 国产日韩欧美一区二区三区综合| 欧美日韩一级视频| 成人动漫视频在线| 久久99久久精品欧美| 一区二区久久久| 国产精品美日韩| 亚洲精品一区二区三区四区高清 | 国产美女主播视频一区| 亚洲高清视频在线| 国产精品久久久久影院老司| 日韩欧美视频在线| 欧美在线免费播放| 91污在线观看| 丁香六月综合激情| 国产在线精品不卡| 美女一区二区久久| 日韩va欧美va亚洲va久久| 亚洲美女淫视频| 国产精品国产精品国产专区不蜜 | 欧美国产日韩精品免费观看| 欧美一级一区二区| 欧美高清一级片在线| 91论坛在线播放| 成人爱爱电影网址| 国产成人精品免费看| 国产一区视频网站| 黄色资源网久久资源365| 免费看黄色91| 久色婷婷小香蕉久久| 麻豆精品久久久| 精油按摩中文字幕久久| 另类小说欧美激情| 久久99久久久欧美国产| 久久精品久久精品| 国产麻豆日韩欧美久久| 国产精品99久久久久| 国产成人免费视频一区| 国产成人综合在线观看| 粉嫩aⅴ一区二区三区四区| 成人丝袜高跟foot| 成人美女视频在线观看18| 不卡一区中文字幕| 97久久人人超碰| 欧洲精品中文字幕| 欧美一级片在线看| 精品国产乱码久久久久久闺蜜 | 欧美精品在线观看播放| 91精品婷婷国产综合久久竹菊| 欧美一区二区不卡视频| 久久久精品黄色| 自拍偷拍国产亚洲| 午夜精品国产更新| 免费av网站大全久久| 成人免费毛片aaaaa**| 99精品黄色片免费大全| 欧美日韩黄视频| 亚洲精品在线观看网站| 日本一区二区三区四区| 一个色在线综合| 激情五月播播久久久精品| 成人av电影在线观看| 欧美人妇做爰xxxⅹ性高电影| 精品日本一线二线三线不卡| 欧美国产精品久久| 亚洲1区2区3区4区| 国产精品亚洲成人| 欧美日韩亚洲综合一区二区三区| 欧美精品一区二区三区久久久 | 日韩一级高清毛片| 国产精品久久久久久户外露出 | 欧美精品一区二区三区蜜桃视频| 1024亚洲合集| 欧美aa在线视频| 97精品久久久午夜一区二区三区| 正在播放亚洲一区| 中文字幕一区二区三区视频| 日韩精品亚洲专区| 91丝袜呻吟高潮美腿白嫩在线观看| 欧美日韩亚洲另类| 国产精品你懂的在线欣赏| 五月激情综合色| 91亚洲国产成人精品一区二三|