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

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

?? serio.c

?? QQ2440板子
?? C
?? 第 1 頁 / 共 2 頁
字號:
		serio_disconnect_port(serio);		serio_bind_driver(serio, to_serio_driver(drv));		put_driver(drv);	} else {		retval = -EINVAL;	}	up(&serio_sem);	return retval;}static ssize_t serio_show_bind_mode(struct device *dev, struct device_attribute *attr, char *buf){	struct serio *serio = to_serio_port(dev);	return sprintf(buf, "%s\n", serio->manual_bind ? "manual" : "auto");}static ssize_t serio_set_bind_mode(struct device *dev, struct device_attribute *attr, const char *buf, size_t count){	struct serio *serio = to_serio_port(dev);	int retval;	retval = count;	if (!strncmp(buf, "manual", count)) {		serio->manual_bind = 1;	} else if (!strncmp(buf, "auto", count)) {		serio->manual_bind = 0;	} else {		retval = -EINVAL;	}	return retval;}static struct device_attribute serio_device_attrs[] = {	__ATTR(description, S_IRUGO, serio_show_description, NULL),	__ATTR(modalias, S_IRUGO, serio_show_modalias, NULL),	__ATTR(drvctl, S_IWUSR, NULL, serio_rebind_driver),	__ATTR(bind_mode, S_IWUSR | S_IRUGO, serio_show_bind_mode, serio_set_bind_mode),	__ATTR_NULL};static void serio_release_port(struct device *dev){	struct serio *serio = to_serio_port(dev);	kfree(serio);	module_put(THIS_MODULE);}/* * Prepare serio port for registration. */static void serio_init_port(struct serio *serio){	static atomic_t serio_no = ATOMIC_INIT(0);	__module_get(THIS_MODULE);	spin_lock_init(&serio->lock);	init_MUTEX(&serio->drv_sem);	device_initialize(&serio->dev);	snprintf(serio->dev.bus_id, sizeof(serio->dev.bus_id),		 "serio%ld", (long)atomic_inc_return(&serio_no) - 1);	serio->dev.bus = &serio_bus;	serio->dev.release = serio_release_port;	if (serio->parent)		serio->dev.parent = &serio->parent->dev;}/* * Complete serio port registration. * Driver core will attempt to find appropriate driver for the port. */static void serio_add_port(struct serio *serio){	if (serio->parent) {		serio_pause_rx(serio->parent);		serio->parent->child = serio;		serio_continue_rx(serio->parent);	}	list_add_tail(&serio->node, &serio_list);	if (serio->start)		serio->start(serio);	device_add(&serio->dev);	sysfs_create_group(&serio->dev.kobj, &serio_id_attr_group);	serio->registered = 1;}/* * serio_destroy_port() completes deregistration process and removes * port from the system */static void serio_destroy_port(struct serio *serio){	struct serio *child;	child = serio_get_pending_child(serio);	if (child) {		serio_remove_pending_events(child);		put_device(&child->dev);	}	if (serio->stop)		serio->stop(serio);	if (serio->parent) {		serio_pause_rx(serio->parent);		serio->parent->child = NULL;		serio_continue_rx(serio->parent);		serio->parent = NULL;	}	if (serio->registered) {		sysfs_remove_group(&serio->dev.kobj, &serio_id_attr_group);		device_del(&serio->dev);		list_del_init(&serio->node);		serio->registered = 0;	}	serio_remove_pending_events(serio);	put_device(&serio->dev);}/* * Reconnect serio port and all its children (re-initialize attached devices) */static void serio_reconnect_port(struct serio *serio){	do {		if (serio_reconnect_driver(serio)) {			serio_disconnect_port(serio);			serio_find_driver(serio);			/* Ok, old children are now gone, we are done */			break;		}		serio = serio->child;	} while (serio);}/* * serio_disconnect_port() unbinds a port from its driver. As a side effect * all child ports are unbound and destroyed. */static void serio_disconnect_port(struct serio *serio){	struct serio *s, *parent;	if (serio->child) {		/*		 * Children ports should be disconnected and destroyed		 * first, staring with the leaf one, since we don't want		 * to do recursion		 */		for (s = serio; s->child; s = s->child)			/* empty */;		do {			parent = s->parent;			serio_release_driver(s);			serio_destroy_port(s);		} while ((s = parent) != serio);	}	/*	 * Ok, no children left, now disconnect this port	 */	serio_release_driver(serio);}void serio_rescan(struct serio *serio){	serio_queue_event(serio, NULL, SERIO_RESCAN);}void serio_reconnect(struct serio *serio){	serio_queue_event(serio, NULL, SERIO_RECONNECT);}/* * Submits register request to kseriod for subsequent execution. * Note that port registration is always asynchronous. */void __serio_register_port(struct serio *serio, struct module *owner){	serio_init_port(serio);	serio_queue_event(serio, owner, SERIO_REGISTER_PORT);}/* * Synchronously unregisters serio port. */void serio_unregister_port(struct serio *serio){	down(&serio_sem);	serio_disconnect_port(serio);	serio_destroy_port(serio);	up(&serio_sem);}/* * Safely unregisters child port if one is present. */void serio_unregister_child_port(struct serio *serio){	down(&serio_sem);	if (serio->child) {		serio_disconnect_port(serio->child);		serio_destroy_port(serio->child);	}	up(&serio_sem);}/* * Submits register request to kseriod for subsequent execution. * Can be used when it is not obvious whether the serio_sem is * taken or not and when delayed execution is feasible. */void __serio_unregister_port_delayed(struct serio *serio, struct module *owner){	serio_queue_event(serio, owner, SERIO_UNREGISTER_PORT);}/* * Serio driver operations */static ssize_t serio_driver_show_description(struct device_driver *drv, char *buf){	struct serio_driver *driver = to_serio_driver(drv);	return sprintf(buf, "%s\n", driver->description ? driver->description : "(none)");}static ssize_t serio_driver_show_bind_mode(struct device_driver *drv, char *buf){	struct serio_driver *serio_drv = to_serio_driver(drv);	return sprintf(buf, "%s\n", serio_drv->manual_bind ? "manual" : "auto");}static ssize_t serio_driver_set_bind_mode(struct device_driver *drv, const char *buf, size_t count){	struct serio_driver *serio_drv = to_serio_driver(drv);	int retval;	retval = count;	if (!strncmp(buf, "manual", count)) {		serio_drv->manual_bind = 1;	} else if (!strncmp(buf, "auto", count)) {		serio_drv->manual_bind = 0;	} else {		retval = -EINVAL;	}	return retval;}static struct driver_attribute serio_driver_attrs[] = {	__ATTR(description, S_IRUGO, serio_driver_show_description, NULL),	__ATTR(bind_mode, S_IWUSR | S_IRUGO,		serio_driver_show_bind_mode, serio_driver_set_bind_mode),	__ATTR_NULL};static int serio_driver_probe(struct device *dev){	struct serio *serio = to_serio_port(dev);	struct serio_driver *drv = to_serio_driver(dev->driver);	return serio_connect_driver(serio, drv);}static int serio_driver_remove(struct device *dev){	struct serio *serio = to_serio_port(dev);	serio_disconnect_driver(serio);	return 0;}void __serio_register_driver(struct serio_driver *drv, struct module *owner){	drv->driver.bus = &serio_bus;	drv->driver.probe = serio_driver_probe;	drv->driver.remove = serio_driver_remove;	serio_queue_event(drv, owner, SERIO_REGISTER_DRIVER);}void serio_unregister_driver(struct serio_driver *drv){	struct serio *serio;	down(&serio_sem);	drv->manual_bind = 1;	/* so serio_find_driver ignores it */start_over:	list_for_each_entry(serio, &serio_list, node) {		if (serio->drv == drv) {			serio_disconnect_port(serio);			serio_find_driver(serio);			/* we could've deleted some ports, restart */			goto start_over;		}	}	driver_unregister(&drv->driver);	up(&serio_sem);}static void serio_set_drv(struct serio *serio, struct serio_driver *drv){	serio_pause_rx(serio);	serio->drv = drv;	serio_continue_rx(serio);}static int serio_bus_match(struct device *dev, struct device_driver *drv){	struct serio *serio = to_serio_port(dev);	struct serio_driver *serio_drv = to_serio_driver(drv);	if (serio->manual_bind || serio_drv->manual_bind)		return 0;	return serio_match_port(serio_drv->id_table, serio);}#ifdef CONFIG_HOTPLUG#define SERIO_ADD_HOTPLUG_VAR(fmt, val...)				\	do {								\		int err = add_hotplug_env_var(envp, num_envp, &i,	\					buffer, buffer_size, &len,	\					fmt, val);			\		if (err)						\			return err;					\	} while (0)static int serio_hotplug(struct device *dev, char **envp, int num_envp, char *buffer, int buffer_size){	struct serio *serio;	int i = 0;	int len = 0;	if (!dev)		return -ENODEV;	serio = to_serio_port(dev);	SERIO_ADD_HOTPLUG_VAR("SERIO_TYPE=%02x", serio->id.type);	SERIO_ADD_HOTPLUG_VAR("SERIO_PROTO=%02x", serio->id.proto);	SERIO_ADD_HOTPLUG_VAR("SERIO_ID=%02x", serio->id.id);	SERIO_ADD_HOTPLUG_VAR("SERIO_EXTRA=%02x", serio->id.extra);	SERIO_ADD_HOTPLUG_VAR("MODALIAS=serio:ty%02Xpr%02Xid%02Xex%02X",				serio->id.type, serio->id.proto, serio->id.id, serio->id.extra);	envp[i] = NULL;	return 0;}#undef SERIO_ADD_HOTPLUG_VAR#elsestatic int serio_hotplug(struct device *dev, char **envp, int num_envp, char *buffer, int buffer_size){	return -ENODEV;}#endif /* CONFIG_HOTPLUG */static int serio_resume(struct device *dev){	struct serio *serio = to_serio_port(dev);	if (serio_reconnect_driver(serio)) {		/*		 * Driver re-probing can take a while, so better let kseriod		 * deal with it.		 */		serio_rescan(serio);	}	return 0;}/* called from serio_driver->connect/disconnect methods under serio_sem */int serio_open(struct serio *serio, struct serio_driver *drv){	serio_set_drv(serio, drv);	if (serio->open && serio->open(serio)) {		serio_set_drv(serio, NULL);		return -1;	}	return 0;}/* called from serio_driver->connect/disconnect methods under serio_sem */void serio_close(struct serio *serio){	if (serio->close)		serio->close(serio);	serio_set_drv(serio, NULL);}irqreturn_t serio_interrupt(struct serio *serio,		unsigned char data, unsigned int dfl, struct pt_regs *regs){	unsigned long flags;	irqreturn_t ret = IRQ_NONE;	spin_lock_irqsave(&serio->lock, flags);        if (likely(serio->drv)) {                ret = serio->drv->interrupt(serio, data, dfl, regs);	} else if (!dfl && serio->registered) {		serio_rescan(serio);		ret = IRQ_HANDLED;	}	spin_unlock_irqrestore(&serio->lock, flags);	return ret;}static int __init serio_init(void){	serio_task = kthread_run(serio_thread, NULL, "kseriod");	if (IS_ERR(serio_task)) {		printk(KERN_ERR "serio: Failed to start kseriod\n");		return PTR_ERR(serio_task);	}	serio_bus.dev_attrs = serio_device_attrs;	serio_bus.drv_attrs = serio_driver_attrs;	serio_bus.match = serio_bus_match;	serio_bus.hotplug = serio_hotplug;	serio_bus.resume = serio_resume;	bus_register(&serio_bus);	return 0;}static void __exit serio_exit(void){	bus_unregister(&serio_bus);	kthread_stop(serio_task);}module_init(serio_init);module_exit(serio_exit);

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
99久久婷婷国产| 亚洲图片一区二区| 狠狠狠色丁香婷婷综合激情| www激情久久| 国产不卡在线播放| 亚洲狠狠丁香婷婷综合久久久| 91国偷自产一区二区开放时间 | 亚洲欧洲国产日韩| 成人av在线播放网址| 亚洲欧美日韩精品久久久久| 欧美亚洲动漫另类| 韩国欧美国产1区| 亚洲啪啪综合av一区二区三区| 欧美日韩情趣电影| 韩国欧美国产1区| 《视频一区视频二区| 欧美性受极品xxxx喷水| 免费观看在线色综合| 国产亚洲一二三区| 在线观看日韩电影| 久久97超碰色| 国产精品传媒视频| 欧美精品欧美精品系列| 国产成人免费高清| 亚洲v日本v欧美v久久精品| 精品奇米国产一区二区三区| av激情综合网| 蜜桃精品视频在线观看| 1024国产精品| 日韩欧美不卡一区| 91国偷自产一区二区三区观看| 精品一区二区三区免费观看| 亚洲人一二三区| 日韩手机在线导航| 一本色道亚洲精品aⅴ| 久久精品国产99国产精品| 亚洲色图制服丝袜| 精品久久久久久久久久久久久久久久久| 国产精品77777竹菊影视小说| 亚洲综合偷拍欧美一区色| 2019国产精品| 欧美日韩国产乱码电影| 国产精品69毛片高清亚洲| 日韩成人精品视频| 亚洲激情中文1区| 国产日韩精品久久久| 正在播放亚洲一区| 色999日韩国产欧美一区二区| 久久不见久久见免费视频1 | 亚洲成av人影院在线观看网| 国产三级三级三级精品8ⅰ区| 欧美色图免费看| 成人aa视频在线观看| 国产麻豆欧美日韩一区| 亚洲一区电影777| 国产精品盗摄一区二区三区| 久久久久国产精品麻豆| 制服丝袜av成人在线看| 欧美视频日韩视频| 欧洲日韩一区二区三区| 99热这里都是精品| 成人午夜私人影院| 国产麻豆精品久久一二三| 免费xxxx性欧美18vr| 日韩国产一二三区| 婷婷综合在线观看| 亚洲 欧美综合在线网络| 亚洲欧美区自拍先锋| 中文字幕一区二区三区在线不卡| 国产日产欧美一区| 国产欧美日产一区| 国产精品三级电影| 国产精品嫩草久久久久| 欧美激情一区二区三区不卡| 欧美高清在线视频| 国产精品久久久久久久午夜片| 国产欧美日韩不卡| 成人免费小视频| 亚洲欧美日韩小说| 亚洲午夜在线观看视频在线| 亚洲成人免费电影| 丝袜诱惑制服诱惑色一区在线观看 | 精品欧美一区二区在线观看 | 久久先锋影音av鲁色资源网| 日韩欧美国产综合| 2021中文字幕一区亚洲| 国产香蕉久久精品综合网| 欧美国产禁国产网站cc| 亚洲色图在线看| 五月婷婷久久丁香| 久久av资源站| 不卡在线观看av| 色婷婷av一区二区| 欧美美女视频在线观看| 欧美一区二区三区四区高清 | 国产精品免费视频网站| 亚洲情趣在线观看| 日韩福利电影在线观看| 精品午夜久久福利影院 | 国产乱子轮精品视频| 成人小视频免费观看| 欧美亚洲综合色| 精品久久久久久久久久久院品网| 中文字幕巨乱亚洲| 亚洲国产成人91porn| 麻豆国产91在线播放| 成人短视频下载| 欧美剧情电影在线观看完整版免费励志电影 | 国产精品久久久久婷婷| 亚洲线精品一区二区三区| 精品伊人久久久久7777人| 国产99精品在线观看| 欧美日韩国产精选| 欧美韩日一区二区三区| 日韩激情中文字幕| 成人性生交大合| 欧美一区二区三区在线观看| 欧美经典一区二区三区| 天天综合日日夜夜精品| 成人性生交大合| 欧美成人性战久久| 夜夜精品浪潮av一区二区三区| 国内不卡的二区三区中文字幕 | 91久久国产综合久久| 欧美一区二区三区喷汁尤物| 国产精品国产三级国产三级人妇 | 精品区一区二区| 亚洲国产一区二区在线播放| 成人中文字幕电影| 日韩一区二区在线播放| 亚洲美女区一区| 福利电影一区二区| 精品少妇一区二区三区在线播放 | 91精品国产综合久久福利| 亚洲欧洲精品一区二区精品久久久| 日本va欧美va瓶| 欧洲精品一区二区三区在线观看| 久久久久久久久久久电影| 日韩av一级片| 在线观看视频91| 亚洲天堂福利av| 成人深夜视频在线观看| 久久蜜桃香蕉精品一区二区三区| 日韩精品一级二级 | 51精品视频一区二区三区| 亚洲人吸女人奶水| 99视频在线观看一区三区| 久久久高清一区二区三区| 男女男精品网站| 制服丝袜亚洲网站| 天天色图综合网| 欧美日韩免费电影| 一区二区三区毛片| 91黄色免费观看| 亚洲综合网站在线观看| 色94色欧美sute亚洲线路一久| 综合久久久久久久| 成人久久18免费网站麻豆| 国产欧美中文在线| 成人一区在线看| 欧美极品少妇xxxxⅹ高跟鞋 | 日本aⅴ免费视频一区二区三区| 91女人视频在线观看| 18欧美亚洲精品| 91香蕉视频黄| 一区二区三区四区国产精品| 在线亚洲免费视频| 亚洲午夜三级在线| 欧美日韩在线播放一区| 三级精品在线观看| 欧美一区二区黄| 国产在线国偷精品免费看| 国产婷婷精品av在线| 粉嫩av一区二区三区粉嫩| 国产精品高潮久久久久无| 99久久国产免费看| 亚洲制服丝袜av| 91精品午夜视频| 麻豆国产精品视频| 国产女人aaa级久久久级| 不卡的电影网站| 亚洲一区精品在线| 日韩精品自拍偷拍| 成人av先锋影音| 亚洲综合成人网| 日韩午夜在线播放| 国产精品亚洲第一区在线暖暖韩国| 国产欧美一区二区精品秋霞影院| 不卡视频免费播放| 五月天国产精品| 久久综合99re88久久爱| jiyouzz国产精品久久| 亚洲成人久久影院| 精品日韩欧美一区二区| www.亚洲激情.com| 天天影视网天天综合色在线播放 | 国产精品不卡在线| 欧美日本精品一区二区三区| 国产一区二区精品在线观看| 亚洲精品国久久99热|