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

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

?? psmouse-base.c

?? qq2440板子上
?? C
?? 第 1 頁 / 共 3 頁
字號:
	if (proto && (proto->detect || proto->init)) {		if (proto->detect && proto->detect(psmouse, 1) < 0)			return -1;		if (proto->init && proto->init(psmouse) < 0)			return -1;		psmouse->type = proto->type;	}	else		psmouse->type = psmouse_extensions(psmouse, psmouse_max_proto, 1);	sprintf(psmouse->devname, "%s %s %s",		psmouse_protocol_by_type(psmouse->type)->name, psmouse->vendor, psmouse->name);	psmouse->dev.name = psmouse->devname;	psmouse->dev.phys = psmouse->phys;	psmouse->dev.id.bustype = BUS_I8042;	psmouse->dev.id.vendor = 0x0002;	psmouse->dev.id.product = psmouse->type;	psmouse->dev.id.version = psmouse->model;	return 0;}/* * psmouse_connect() is a callback from the serio module when * an unhandled serio port is found. */static int psmouse_connect(struct serio *serio, struct serio_driver *drv){	struct psmouse *psmouse, *parent = NULL;	int retval;	down(&psmouse_sem);	/*	 * If this is a pass-through port deactivate parent so the device	 * connected to this port can be successfully identified	 */	if (serio->parent && serio->id.type == SERIO_PS_PSTHRU) {		parent = serio_get_drvdata(serio->parent);		psmouse_deactivate(parent);	}	if (!(psmouse = kcalloc(1, sizeof(struct psmouse), GFP_KERNEL))) {		retval = -ENOMEM;		goto out;	}	ps2_init(&psmouse->ps2dev, serio);	sprintf(psmouse->phys, "%s/input0", serio->phys);	psmouse_set_state(psmouse, PSMOUSE_INITIALIZING);	serio_set_drvdata(serio, psmouse);	retval = serio_open(serio, drv);	if (retval) {		serio_set_drvdata(serio, NULL);		kfree(psmouse);		goto out;	}	if (psmouse_probe(psmouse) < 0) {		serio_close(serio);		serio_set_drvdata(serio, NULL);		kfree(psmouse);		retval = -ENODEV;		goto out;	}	psmouse->rate = psmouse_rate;	psmouse->resolution = psmouse_resolution;	psmouse->resetafter = psmouse_resetafter;	psmouse->smartscroll = psmouse_smartscroll;	psmouse_switch_protocol(psmouse, NULL);	input_register_device(&psmouse->dev);	printk(KERN_INFO "input: %s on %s\n", psmouse->devname, serio->phys);	psmouse_set_state(psmouse, PSMOUSE_CMD_MODE);	psmouse_initialize(psmouse);	if (parent && parent->pt_activate)		parent->pt_activate(parent);	device_create_file(&serio->dev, &psmouse_attr_protocol);	device_create_file(&serio->dev, &psmouse_attr_rate);	device_create_file(&serio->dev, &psmouse_attr_resolution);	device_create_file(&serio->dev, &psmouse_attr_resetafter);	psmouse_activate(psmouse);	retval = 0;out:	/* If this is a pass-through port the parent needs to be re-activated */	if (parent)		psmouse_activate(parent);	up(&psmouse_sem);	return retval;}static int psmouse_reconnect(struct serio *serio){	struct psmouse *psmouse = serio_get_drvdata(serio);	struct psmouse *parent = NULL;	struct serio_driver *drv = serio->drv;	int rc = -1;	if (!drv || !psmouse) {		printk(KERN_DEBUG "psmouse: reconnect request, but serio is disconnected, ignoring...\n");		return -1;	}	down(&psmouse_sem);	if (serio->parent && serio->id.type == SERIO_PS_PSTHRU) {		parent = serio_get_drvdata(serio->parent);		psmouse_deactivate(parent);	}	psmouse_set_state(psmouse, PSMOUSE_INITIALIZING);	if (psmouse->reconnect) {		if (psmouse->reconnect(psmouse))			goto out;	} else if (psmouse_probe(psmouse) < 0 ||		   psmouse->type != psmouse_extensions(psmouse, psmouse_max_proto, 0))		goto out;	/* ok, the device type (and capabilities) match the old one,	 * we can continue using it, complete intialization	 */	psmouse_set_state(psmouse, PSMOUSE_CMD_MODE);	psmouse_initialize(psmouse);	if (parent && parent->pt_activate)		parent->pt_activate(parent);	psmouse_activate(psmouse);	rc = 0;out:	/* If this is a pass-through port the parent waits to be activated */	if (parent)		psmouse_activate(parent);	up(&psmouse_sem);	return rc;}static struct serio_device_id psmouse_serio_ids[] = {	{		.type	= SERIO_8042,		.proto	= SERIO_ANY,		.id	= SERIO_ANY,		.extra	= SERIO_ANY,	},	{		.type	= SERIO_PS_PSTHRU,		.proto	= SERIO_ANY,		.id	= SERIO_ANY,		.extra	= SERIO_ANY,	},	{ 0 }};MODULE_DEVICE_TABLE(serio, psmouse_serio_ids);static struct serio_driver psmouse_drv = {	.driver		= {		.name	= "psmouse",	},	.description	= DRIVER_DESC,	.id_table	= psmouse_serio_ids,	.interrupt	= psmouse_interrupt,	.connect	= psmouse_connect,	.reconnect	= psmouse_reconnect,	.disconnect	= psmouse_disconnect,	.cleanup	= psmouse_cleanup,};ssize_t psmouse_attr_show_helper(struct device *dev, char *buf,				 ssize_t (*handler)(struct psmouse *, char *)){	struct serio *serio = to_serio_port(dev);	int retval;	retval = serio_pin_driver(serio);	if (retval)		return retval;	if (serio->drv != &psmouse_drv) {		retval = -ENODEV;		goto out;	}	retval = handler(serio_get_drvdata(serio), buf);out:	serio_unpin_driver(serio);	return retval;}ssize_t psmouse_attr_set_helper(struct device *dev, const char *buf, size_t count,				ssize_t (*handler)(struct psmouse *, const char *, size_t)){	struct serio *serio = to_serio_port(dev);	struct psmouse *psmouse = serio_get_drvdata(serio);	struct psmouse *parent = NULL;	int retval;	retval = serio_pin_driver(serio);	if (retval)		return retval;	if (serio->drv != &psmouse_drv) {		retval = -ENODEV;		goto out_unpin;	}	retval = down_interruptible(&psmouse_sem);	if (retval)		goto out_unpin;	if (psmouse->state == PSMOUSE_IGNORE) {		retval = -ENODEV;		goto out_up;	}	if (serio->parent && serio->id.type == SERIO_PS_PSTHRU) {		parent = serio_get_drvdata(serio->parent);		psmouse_deactivate(parent);	}	psmouse_deactivate(psmouse);	retval = handler(psmouse, buf, count);	if (retval != -ENODEV)		psmouse_activate(psmouse);	if (parent)		psmouse_activate(parent); out_up:	up(&psmouse_sem); out_unpin:	serio_unpin_driver(serio);	return retval;}static ssize_t psmouse_attr_show_protocol(struct psmouse *psmouse, char *buf){	return sprintf(buf, "%s\n", psmouse_protocol_by_type(psmouse->type)->name);}static ssize_t psmouse_attr_set_protocol(struct psmouse *psmouse, const char *buf, size_t count){	struct serio *serio = psmouse->ps2dev.serio;	struct psmouse *parent = NULL;	struct psmouse_protocol *proto;	int retry = 0;	if (!(proto = psmouse_protocol_by_name(buf, count)))		return -EINVAL;	if (psmouse->type == proto->type)		return count;	while (serio->child) {		if (++retry > 3) {			printk(KERN_WARNING "psmouse: failed to destroy child port, protocol change aborted.\n");			return -EIO;		}		up(&psmouse_sem);		serio_unpin_driver(serio);		serio_unregister_child_port(serio);		serio_pin_driver_uninterruptible(serio);		down(&psmouse_sem);		if (serio->drv != &psmouse_drv)			return -ENODEV;		if (psmouse->type == proto->type)			return count; /* switched by other thread */	}	if (serio->parent && serio->id.type == SERIO_PS_PSTHRU) {		parent = serio_get_drvdata(serio->parent);		if (parent->pt_deactivate)			parent->pt_deactivate(parent);	}	if (psmouse->disconnect)		psmouse->disconnect(psmouse);	psmouse_set_state(psmouse, PSMOUSE_IGNORE);	input_unregister_device(&psmouse->dev);	psmouse_set_state(psmouse, PSMOUSE_INITIALIZING);	if (psmouse_switch_protocol(psmouse, proto) < 0) {		psmouse_reset(psmouse);		/* default to PSMOUSE_PS2 */		psmouse_switch_protocol(psmouse, &psmouse_protocols[0]);	}	psmouse_initialize(psmouse);	psmouse_set_state(psmouse, PSMOUSE_CMD_MODE);	input_register_device(&psmouse->dev);	printk(KERN_INFO "input: %s on %s\n", psmouse->devname, serio->phys);	if (parent && parent->pt_activate)		parent->pt_activate(parent);	return count;}static ssize_t psmouse_attr_show_rate(struct psmouse *psmouse, char *buf){	return sprintf(buf, "%d\n", psmouse->rate);}static ssize_t psmouse_attr_set_rate(struct psmouse *psmouse, const char *buf, size_t count){	unsigned long value;	char *rest;	value = simple_strtoul(buf, &rest, 10);	if (*rest)		return -EINVAL;	psmouse->set_rate(psmouse, value);	return count;}static ssize_t psmouse_attr_show_resolution(struct psmouse *psmouse, char *buf){	return sprintf(buf, "%d\n", psmouse->resolution);}static ssize_t psmouse_attr_set_resolution(struct psmouse *psmouse, const char *buf, size_t count){	unsigned long value;	char *rest;	value = simple_strtoul(buf, &rest, 10);	if (*rest)		return -EINVAL;	psmouse->set_resolution(psmouse, value);	return count;}static ssize_t psmouse_attr_show_resetafter(struct psmouse *psmouse, char *buf){	return sprintf(buf, "%d\n", psmouse->resetafter);}static ssize_t psmouse_attr_set_resetafter(struct psmouse *psmouse, const char *buf, size_t count){	unsigned long value;	char *rest;	value = simple_strtoul(buf, &rest, 10);	if (*rest)		return -EINVAL;	psmouse->resetafter = value;	return count;}static int psmouse_set_maxproto(const char *val, struct kernel_param *kp){	struct psmouse_protocol *proto;	if (!val)		return -EINVAL;	proto = psmouse_protocol_by_name(val, strlen(val));	if (!proto || !proto->maxproto)		return -EINVAL;	*((unsigned int *)kp->arg) = proto->type;	return 0;					\}static int psmouse_get_maxproto(char *buffer, struct kernel_param *kp){	int type = *((unsigned int *)kp->arg);	return sprintf(buffer, "%s\n", psmouse_protocol_by_type(type)->name);}static int __init psmouse_init(void){	serio_register_driver(&psmouse_drv);	return 0;}static void __exit psmouse_exit(void){	serio_unregister_driver(&psmouse_drv);}module_init(psmouse_init);module_exit(psmouse_exit);

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久国产综合精品| 国产精品萝li| 91精品国产色综合久久不卡蜜臀| www.欧美亚洲| 99精品在线观看视频| 91在线看国产| 欧美日韩国产一二三| 欧美日韩国产影片| 欧美成人性战久久| 国产亚洲人成网站| 中文字幕在线播放不卡一区| 亚洲精品免费一二三区| 亚洲午夜精品久久久久久久久| 日精品一区二区三区| 奇米888四色在线精品| 精品午夜久久福利影院| 成+人+亚洲+综合天堂| 在线免费观看日韩欧美| 欧美福利电影网| 国产午夜一区二区三区| 亚洲欧洲精品成人久久奇米网| 亚洲一区二区视频在线| 免费在线看成人av| 成人免费的视频| 欧美剧情片在线观看| 久久久久久久久免费| 亚洲色图在线视频| 久久草av在线| 色婷婷香蕉在线一区二区| 91麻豆精品国产91久久久更新时间| 日韩精品综合一本久道在线视频| 国产亚洲综合性久久久影院| 亚洲一区在线观看免费| 免费看日韩a级影片| 不卡的av电影在线观看| 777a∨成人精品桃花网| 国产精品久久久久aaaa| 国产成人一区在线| 亚洲婷婷在线视频| 亚洲成人自拍偷拍| 国产美女精品人人做人人爽| 91小视频免费观看| 精品少妇一区二区三区视频免付费| 国产精品不卡在线| 日韩在线一区二区三区| 99久久综合狠狠综合久久| 日韩一区二区三区三四区视频在线观看| 国产精品久久久久久久岛一牛影视| 免费看黄色91| 欧美精三区欧美精三区| 亚洲欧洲国产日韩| 豆国产96在线|亚洲| 日韩美一区二区三区| 亚洲福利一区二区| 99免费精品在线| 久久久91精品国产一区二区三区| 青椒成人免费视频| 91精品国产一区二区三区蜜臀| 亚洲激情图片一区| av资源网一区| 国产精品久久久久影院亚瑟| 国产成人免费视频| 久久久99精品久久| 国产很黄免费观看久久| 2020国产精品自拍| 国内精品第一页| 欧美精品一区视频| 久久99国产精品免费| 欧美精品一区二区久久久| 精品一区二区在线观看| 精品日韩99亚洲| 国产一区三区三区| 久久久精品综合| 成人午夜视频在线| 国产精品婷婷午夜在线观看| 成人黄色片在线观看| 国产精品对白交换视频| 91亚洲精品久久久蜜桃网站| 18成人在线视频| 91激情五月电影| 午夜久久电影网| 欧美一区二区三区四区五区| 麻豆成人av在线| 国产亚洲精品bt天堂精选| 成人网在线播放| 亚洲黄色av一区| 欧美日韩国产天堂| 激情文学综合网| 国产精品网曝门| 欧美日韩在线观看一区二区| 日产国产欧美视频一区精品| 精品国产免费一区二区三区四区 | 久久国产精品第一页| 欧美成人在线直播| 成人一区二区视频| 一卡二卡三卡日韩欧美| 666欧美在线视频| 国产福利一区二区三区视频| 亚洲欧美中日韩| 91精品国产免费| 福利一区在线观看| 亚洲一区二区三区免费视频| 欧美成人aa大片| 91麻豆蜜桃一区二区三区| 丝瓜av网站精品一区二区| 久久久精品免费免费| 欧美性一二三区| 国产一区二区在线免费观看| 亚洲欧美一区二区在线观看| 91麻豆精品国产无毒不卡在线观看| 国产精品66部| 日精品一区二区| 国产精品美日韩| 日韩午夜在线观看| 91黄色小视频| 国产一区二区不卡在线| 亚洲一区二区三区四区五区黄| 久久色在线视频| 日本韩国欧美国产| 国产精品一区二区久久不卡| 亚洲地区一二三色| 亚洲欧洲av在线| 国产女人水真多18毛片18精品视频| 欧美日韩不卡一区二区| av在线播放一区二区三区| 久久av资源网| 日韩av一区二区在线影视| 亚洲日本免费电影| 亚洲国产精品成人久久综合一区| 欧美伊人久久久久久久久影院| 婷婷六月综合亚洲| 成人免费在线观看入口| 欧美白人最猛性xxxxx69交| 欧美在线一二三| 成人永久aaa| 国产v综合v亚洲欧| 久草在线在线精品观看| 日本大胆欧美人术艺术动态| 亚洲综合在线五月| 中文字幕亚洲成人| 国产精品国产自产拍高清av| 久久久久九九视频| 欧美一级生活片| 欧美日韩在线播放一区| 日本道色综合久久| av电影一区二区| 91亚洲永久精品| 国产成人一级电影| 久久精品国产999大香线蕉| 日本不卡在线视频| 久久99最新地址| 国产美女一区二区| 成人av网址在线| 北岛玲一区二区三区四区| av在线免费不卡| 在线观看亚洲成人| 欧美美女直播网站| 欧美一级黄色大片| 久久久久亚洲蜜桃| 国产精品久久久久久亚洲伦| 欧美国产日韩精品免费观看| 国产欧美精品一区| 中文字幕中文字幕一区| 亚洲精选视频在线| 五月婷婷激情综合网| 久久99深爱久久99精品| 成人动漫一区二区| 在线日韩av片| 日韩欧美的一区二区| 国产日韩欧美电影| 一区二区三区在线影院| 日韩高清中文字幕一区| 韩国女主播一区| 91影院在线观看| 91精选在线观看| 久久久www免费人成精品| 亚洲欧美另类小说视频| 视频一区二区国产| 成人小视频免费在线观看| 欧亚一区二区三区| 久久久噜噜噜久久中文字幕色伊伊| 椎名由奈av一区二区三区| 午夜精品久久久久久久久久久| 激情深爱一区二区| 色噜噜狠狠色综合欧洲selulu | 久久成人综合网| 成人精品在线视频观看| www.亚洲色图.com| 91精品蜜臀在线一区尤物| 1区2区3区精品视频| 美国毛片一区二区三区| 91国产视频在线观看| 日韩欧美国产高清| 一区二区三区在线视频免费| 韩国中文字幕2020精品| 欧美亚洲一区三区| 国产精品久久久久久久久久久免费看| 丝袜诱惑亚洲看片| av亚洲精华国产精华| 久久在线观看免费|