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

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

?? tjusb.c

?? usb手柄電話usb驅動袁代碼
?? C
?? 第 1 頁 / 共 2 頁
字號:
/* * TigerJet Network USB Device Driver  *  * Written by Ping Liu <pliu@tjnet.com> *  * Copyright (C) 2003 TigerJet Network Inc. * * All rights reserved. * * 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. *  *  http://www.gnu.org/licenses/gpl.txt */#include <linux/config.h>#include <linux/kernel.h>#include <linux/sched.h>#include <linux/signal.h>#include <linux/errno.h>#include <linux/poll.h>#include <linux/init.h>#include <linux/slab.h>#include <linux/fcntl.h>#include <linux/module.h>#include <linux/spinlock.h>#include <linux/list.h>#include <linux/smp_lock.h>#include <linux/usb.h>#include <linux/devfs_fs_kernel.h>#include "tjusb.h"#include "proslic.h"/* Version Information */#define DRIVER_VERSION "v0.2"#define DRIVER_AUTHOR "Ping Liu, pliu@tjnet.com"#define DRIVER_DESC "Tigerjet USB Driver"#define USB_TJ_VENDOR_ID	0x06e6static int debug = 0;/* the global usb devfs handle */extern devfs_handle_t usb_devfs_handle;/* table of devices that work with this driver */static struct usb_device_id tjusb_table[] = {	{ 		match_flags: (USB_DEVICE_ID_MATCH_INT_CLASS | USB_DEVICE_ID_MATCH_INT_SUBCLASS | USB_DEVICE_ID_MATCH_VENDOR),		bInterfaceClass: USB_CLASS_VENDOR_SPEC,		bInterfaceSubClass: 0xff,		idVendor: 0x06e6,	},	{ }     /* Terminating Entry */};MODULE_DEVICE_TABLE (usb, tjusb_table);/* Device types.   */typedef enum {        TJ_KEYPAD,  /* The tigerjet phone with the keypad. */        TJ_PROSLIC, /* For various devices with a proslic */} dev_type_t;/* Structure to hold all of our device specific stuff */struct usb_tj {	struct usb_device *	udev;			/* save off the usb device pointer */	struct usb_interface *	interface;		/* the interface for this device */	devfs_handle_t		devfs;			/* devfs device node */	unsigned char		minor;			/* the starting minor number for this device */	unsigned char		num_ports;		/* the number of ports this device has */	char			num_interrupt_in;	/* number of interrupt in endpoints we have */	char			num_bulk_in;		/* number of bulk in endpoints we have */	char			num_bulk_out;		/* number of bulk out endpoints we have */	unsigned char *		bulk_in_buffer;		/* the buffer to receive data */	int			bulk_in_size;		/* the size of the receive buffer */	__u8			bulk_in_endpointAddr;	/* the address of the bulk in endpoint */	unsigned char *		bulk_out_buffer;	/* the buffer to send data */	int			bulk_out_size;		/* the size of the send buffer */	struct urb *		write_urb;		/* the urb used to send data */	__u8			bulk_out_endpointAddr;	/* the address of the bulk out endpoint */	struct tq_struct	tqueue;			/* task queue for line discipline waking up */	int			open_count;		/* number of times this port has been opened */	struct semaphore	sem;			/* locks this structure */	dev_type_t		devclass;};// ProSlic Function prototypesstatic int readProSlicDirectReg(struct usb_device *dev, unsigned char address, unsigned char* data);static int writeProSlicDirectReg(struct usb_device *dev, unsigned char address, unsigned char data);static int readProSlicInDirectReg(struct usb_device *dev, unsigned char address, unsigned short *data);static int writeProSlicInDirectReg(struct usb_device *dev, unsigned char address, unsigned short data);static int initializeIndirectRegisters(struct usb_device *dev);static int verifyIndirectRegisters(struct usb_device *dev);static alpha  indirect_regs[] ={{0,"DTMF_ROW_0_PEAK",0x55C2},{1,"DTMF_ROW_1_PEAK",0x51E6},{2,"DTMF_ROW2_PEAK",0x4B85},{3,"DTMF_ROW3_PEAK",0x4937},{4,"DTMF_COL1_PEAK",0x3333},{5,"DTMF_FWD_TWIST",0x0202},{6,"DTMF_RVS_TWIST",0x0202},{7,"DTMF_ROW_RATIO_TRES",0x0198},{8,"DTMF_COL_RATIO_TRES",0x0198},{9,"DTMF_ROW_2ND_ARM",0x0611},{10,"DTMF_COL_2ND_ARM",0x0202},{11,"DTMF_PWR_MIN_TRES",0x00E5},{12,"DTMF_OT_LIM_TRES",0x0A1C},{13,"OSC1_COEF",0x6D40},{14,"OSC1X",0x0470},{15,"OSC1Y",0x0000},{16,"OSC2_COEF",0x4A80},{17,"OSC2X",0x0830},{18,"OSC2Y",0x0000},{19,"RING_V_OFF",0x0000},{20,"RING_OSC",0x7EF0},{21,"RING_X",0x0160},{22,"RING_Y",0x0000},{23,"PULSE_ENVEL",0x2000},{24,"PULSE_X",0x2000},{25,"PULSE_Y",0x0000},//{26,"RECV_DIGITAL_GAIN",0x4000},	// playback volume set lower{26,"RECV_DIGITAL_GAIN",0x2000},	// playback volume set lower{27,"XMIT_DIGITAL_GAIN",0x8000},{28,"LOOP_CLOSE_TRES",0x1000},{29,"RING_TRIP_TRES",0x3600},{30,"COMMON_MIN_TRES",0x1000},{31,"COMMON_MAX_TRES",0x0200},{32,"PWR_ALARM_Q1Q2",0x0550},{33,"PWR_ALARM_Q3Q4",0x2600},{34,"PWR_ALARM_Q5Q6",0x1B80},{35,"LOOP_CLOSURE_FILTER",0x8000},{36,"RING_TRIP_FILTER",0x0320},{37,"TERM_LP_POLE_Q1Q2",0x0100},{38,"TERM_LP_POLE_Q3Q4",0x0100},{39,"TERM_LP_POLE_Q5Q6",0x0010},{40,"CM_BIAS_RINGING",0x0C00},{41,"DCDC_MIN_V",0x0C00},{42,"DCDC_XTRA",0x1000},};/* driver system interface function prototypes */static ssize_t tjusb_read	(struct file *file, char *buffer, size_t count, loff_t *ppos);static ssize_t tjusb_write	(struct file *file, const char *buffer, size_t count, loff_t *ppos);static int tjusb_ioctl		(struct inode *inode, struct file *file, unsigned int cmd, unsigned long arg);static int tjusb_open		(struct inode *inode, struct file *file);static int tjusb_release	(struct inode *inode, struct file *file);	static void * tjusb_probe	(struct usb_device *dev, unsigned int ifnum, const struct usb_device_id *id);static void tjusb_disconnect	(struct usb_device *dev, void *ptr);static void tjusb_write_bulk_callback	(struct urb *urb);/* array of pointers to our devices that are currently connected */static struct usb_tj		*minor_table[MAX_DEVICES];/* lock to protect the minor_table structure */static DECLARE_MUTEX (minor_table_mutex);/* * File operations needed when we register this driver. * This assumes that this driver NEEDS file operations, * of course, which means that the driver is expected * to have a node in the /dev directory. If the USB * device were for a network interface then the driver * would use "struct net_driver" instead, and a serial * device would use "struct tty_driver".  */static struct file_operations tjusb_fops = {	owner:		THIS_MODULE,	read:		tjusb_read,	write:		tjusb_write,	ioctl:		tjusb_ioctl,	open:		tjusb_open,	release:	tjusb_release,};      /* usb specific object needed to register this driver with the usb subsystem */static struct usb_driver tjusb_driver = {	name:		"tjusb",	probe:		tjusb_probe,	disconnect:	tjusb_disconnect,	fops:		&tjusb_fops,	minor:		USB_TJ_MINOR_BASE,	id_table:	tjusb_table,};static int Tjusb_WriteTjRegs(struct usb_device *dev, unsigned char index, 			  unsigned char *data, int len){	unsigned int pipe = usb_sndctrlpipe(dev, 0);	int requesttype;	int res;	requesttype = USB_DIR_OUT | USB_TYPE_VENDOR | USB_RECIP_DEVICE;	res = usb_control_msg(dev, pipe, REQUEST_NORMAL, requesttype, 				0, index, data, len, CONTROL_TIMEOUT_JIFFIES);	if (res == -ETIMEDOUT) {		printk("tjusb: timeout on vendor write\n");		return -1;	} else if (res < 0) {		printk("tjusb: Error executing control: status=%d\n",le32_to_cpu(res));		return -1;	}	return 0;}					  static int Tjusb_ReadTjRegs(struct usb_device *dev, unsigned char index, 					  unsigned char *data, int len){	unsigned int pipe = usb_rcvctrlpipe(dev, 0);	int requesttype;	int res;	requesttype = USB_DIR_IN | USB_TYPE_VENDOR | USB_RECIP_DEVICE;	res = usb_control_msg(dev, pipe, REQUEST_NORMAL, requesttype, 				0, index, data, len, CONTROL_TIMEOUT_JIFFIES);	if (res == -ETIMEDOUT) {		printk("tjusb: timeout on vendor read\n");		return -1;	} else if (res < 0) {		printk("tjusb: Error executing control: status=%d\n", le32_to_cpu(res));		return -1;	} else {		if(debug) printk("tjusb: Executed read, (add = %x) (data = %x)\n", index, (unsigned char) *data);	}	return 0;}					  /***	Write register to Tj560*/static int tjoutp(struct usb_device *dev, unsigned char address, unsigned char data){	if (!Tjusb_WriteTjRegs(dev, address, &data, 1))		return 0;	return -1;}/***	read register from Tj560*/static int tjinp(struct usb_device *dev, unsigned char address, unsigned char* data ){	if (!Tjusb_ReadTjRegs(dev, address, data, 1))		return 0;	return -1;}/* Don't call from an interrupt context */static int set_aux_ctrl(struct usb_tj *p, char uauxpins, int on){	char udata12 = 0;	char udata13 = 0;	tjinp(p->udev, 0x12, &udata12);	tjinp(p->udev, 0x13, &udata13);	tjoutp(p->udev, 0x12, on ? (uauxpins | udata12) : (~uauxpins & udata12));	tjoutp(p->udev, 0x13, uauxpins | udata13);	return 0;}/*-------------------------------------------------- *  ProSlic Functions *--------------------------------------------------*/	static int waitForProSlicIndirectRegAccess(struct usb_device *dev){    unsigned char count, data;    count = 0;    while (count++ < 3)	 {		data = 0;		readProSlicDirectReg(dev, I_STATUS, &data);		if (!data)			return 0;	 }    if(count > 2) printk(" ##### Loop error #####\n");	return -1;}static int writeProSlicInDirectReg(struct usb_device *dev, unsigned char address, unsigned short data){	   if(!waitForProSlicIndirectRegAccess(dev))	{		if (!writeProSlicDirectReg(dev, IDA_LO,(unsigned char)(data & 0xFF)))		{			if(!writeProSlicDirectReg(dev, IDA_HI,(unsigned char)((data & 0xFF00)>>8)))			{				if(!writeProSlicDirectReg(dev, IAA,address))					return 0;			}		}	}	return -1;}/***	Read register from ProSlic*/int readProSlicDirectReg(struct usb_device *dev, unsigned char address, unsigned char* dataRead){	unsigned char data[4];	data[0] = address | 0x80;	data[1] = 0;	data[2] = 0;	data[3] = 0x67;	// write to TJ register 0x26	Tjusb_WriteTjRegs(dev, TJ_SPORT0, data, 4);	Tjusb_ReadTjRegs(dev, TJ_SPORT1, data, 1);	*dataRead = data[0];	return 0;}/***	Write register to ProSlic*/int writeProSlicDirectReg(struct usb_device *dev, unsigned char address, unsigned char RegValue){	unsigned char data[4];	data[0] = address & 0x7f;	data[1] = RegValue;	data[2] = 0;	data[3] = 0x27;	// write to TJ register 0x26	return Tjusb_WriteTjRegs(dev, TJ_SPORT0, data, 4);}static int readProSlicInDirectReg(struct usb_device *dev, unsigned char address, unsigned short *data){     if (!waitForProSlicIndirectRegAccess(dev))	 {		if (!writeProSlicDirectReg(dev,IAA,address))		{			if(!waitForProSlicIndirectRegAccess(dev))			{				unsigned char data1, data2;				if (!readProSlicDirectReg(dev,IDA_LO, &data1) && !readProSlicDirectReg (dev, IDA_HI, &data2))				{					*data = data1 | (data2 << 8);					return 0;				} else 					printk("Failed to read direct reg\n");			} else				printk("Failed to wait inside\n");		} else			printk("failed write direct IAA\n");	 } else	 	printk("failed to wait\n");    return -1;}static int initializeIndirectRegisters(struct usb_device *dev){	unsigned char i;	for (i=0; i<43; i++)	{		if(writeProSlicInDirectReg(dev, i,indirect_regs[i].initial))			return -1;	}	return 0;}static int verifyIndirectRegisters(struct usb_device *dev){ 	int passed = 1;	unsigned short i,j, initial;	for (i=0; i<43; i++) 	{		if(readProSlicInDirectReg(dev, (unsigned char) i, &j)) {			printk("Failed to read indirect register %d\n", i);			return -1;		}		initial= indirect_regs[i].initial;		if ( j != initial )		{			 printk("!!!!!!! %s  iREG %X = %X  should be %X\n",				indirect_regs[i].name,i,j,initial );			 passed = 0;		}		}    if (passed) {		if (debug)			printk("Init Indirect Registers completed successfully.\n");    } else {		printk(" !!!!! Init Indirect Registers UNSUCCESSFULLY.\n");    }	return 0;}static int calibrateAndActivateProSlic(struct usb_device *dev){ 	unsigned char x;	if(writeProSlicDirectReg(dev, 92, 0xc8))		 return -1;	if(writeProSlicDirectReg(dev, 97, 0))		 return -1;	if(writeProSlicDirectReg(dev, 93, 0x19))		 return -1;	if(writeProSlicDirectReg(dev, 14, 0))		 return -1;	if(writeProSlicDirectReg(dev, 93, 0x99))		 return -1;	if(!readProSlicDirectReg (dev, 93, &x))	{		if (debug)			printk("DC Cal x=%x\n",x);		if (!writeProSlicDirectReg(dev, 97, 0))		{		   if(!writeProSlicDirectReg(dev, CALIBR1, CALIBRATE_LINE))			{				unsigned char data;				 if(!readProSlicDirectReg(dev, CALIBR1, &data))						 return writeProSlicDirectReg(dev, LINE_STATE,ACTIVATE_LINE);			}		}	}	return -1;}static int InitProSlic(struct usb_device *dev){    if (writeProSlicDirectReg(dev, 67, 0x0e)) 		/* Disable Auto Power Alarm Detect and other "features" */		 return -1;    if (initializeIndirectRegisters(dev)) {		printk(KERN_INFO "Indirect Registers failed to initialize.\n");		 return -1;	}    if (verifyIndirectRegisters(dev)) {		printk(KERN_INFO "Indirect Registers failed verification.\n");		 return -1;	}    if (calibrateAndActivateProSlic(dev)) {		printk(KERN_INFO "ProSlic Died on Activation.\n");		 return -1;	}    if (writeProSlicInDirectReg(dev, 97, 0x0)) { // Stanley: for the bad recording fix		 printk(KERN_INFO "ProSlic IndirectReg Died.\n");		 return -1;	}    if (writeProSlicDirectReg(dev, 1, 0x2a)) { // U-Law GCI 8-bit interface		 printk(KERN_INFO "ProSlic DirectReg Died.\n");		 return -1;	}    if (writeProSlicDirectReg(dev, 2, 0))    // Tx Start count low byte  0		 return -1;    if (writeProSlicDirectReg(dev, 3, 0))    // Tx Start count high byte 0		 return -1;    if (writeProSlicDirectReg(dev, 4, 0))    // Rx Start count low byte  0		 return -1;    if (writeProSlicDirectReg(dev, 5, 0))    // Rx Start count high byte 0		 return -1;    if (writeProSlicDirectReg(dev, 8, 0x0))    // disable loopback		 return -1;    if (writeProSlicDirectReg(dev, 18, 0xff))     // clear all interrupt		 return -1;    if (writeProSlicDirectReg(dev, 19, 0xff)) 		 return -1;    if (writeProSlicDirectReg(dev, 20, 0xff)) 		 return -1;    if (writeProSlicDirectReg(dev, 21, 0x00)) 	// enable interrupt		 return -1;    if (writeProSlicDirectReg(dev, 22, 0x02)) 	// Loop detection interrupt		 return -1;    if (writeProSlicDirectReg(dev, 23, 0x01)) 	// DTMF detection interrupt		 return -1;//    if (writeProSlicDirectReg(dev, 72, 0x20))//	    	return -1;#ifdef BOOST_RINGER	/* Beef up Ringing voltage to 89V *///	if (writeProSlicInDirectReg(dev, 23, 0x1d1))//			return -1;#endif	return 0;}static int init_hardware(struct usb_tj *p){	struct usb_device *dev = p->udev;	switch (p->devclass) {	case TJ_PROSLIC:		if (tjoutp(dev, 0x12, 0x00))	/* AUX6 as output, set to low */			return -1;    		if (tjoutp(dev, 0x13, 0x40))	/* AUX6 is output */      			return -1;    		if (tjoutp(dev, 0, 0x50))	/* extrst, AUX2 is suspend */      			return -1;    		if (tjoutp(dev, 0x29, 0x20))	/* enable SerialUP AUX pin definition */      			return -1;    		if (tjoutp(dev, 0, 0x51))	/* no extrst, AUX2 is suspend */      			return -1;		/* Make sure there is no gain */    	/*	if (tjoutp(dev, 0x22, 0x00))			return -1;    		if (tjoutp(dev, 0x23, 0xf2))        		return -1;    		if (tjoutp(dev, 0x24, 0x00))

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲成人自拍偷拍| 国产在线视频一区二区| 日韩影院免费视频| 国产福利不卡视频| 欧美婷婷六月丁香综合色| 欧美成人a视频| 一区二区三区高清在线| 精品一区二区免费| 在线精品视频免费观看| 欧美国产精品久久| 九色|91porny| 777a∨成人精品桃花网| 亚洲欧洲成人精品av97| 精品一区二区三区在线播放视频| 欧美这里有精品| 国产校园另类小说区| 毛片基地黄久久久久久天堂| 99久久99久久综合| 久久综合色之久久综合| 亚洲国产人成综合网站| www.性欧美| 久久久久综合网| 免费精品99久久国产综合精品| 91久久国产最好的精华液| 国产精品久久久久久一区二区三区| 久久精品免费看| 在线播放中文一区| 午夜伦理一区二区| 欧美三级电影精品| 亚洲国产一二三| 欧美无砖专区一中文字| 亚洲精品乱码久久久久久黑人 | 国产毛片一区二区| 欧美午夜片在线看| 一区二区三区欧美日| 91丝袜呻吟高潮美腿白嫩在线观看| 国产午夜亚洲精品午夜鲁丝片 | 亚洲另类春色校园小说| 国产精品白丝av| 国产欧美日韩激情| 国产不卡视频在线播放| 国产欧美日韩在线视频| 国产精品一二三四五| 欧美精品一区二区三区一线天视频| 日韩综合在线视频| 日韩一区二区三区观看| 麻豆91精品91久久久的内涵| 精品久久久久久久久久久久久久久 | 国产精品国产三级国产aⅴ原创| 国产精品每日更新| 国产成人综合在线| 国产欧美一区二区三区在线看蜜臀| 国产美女av一区二区三区| 国产农村妇女精品| 成人激情综合网站| 亚洲天天做日日做天天谢日日欢| 91丨porny丨蝌蚪视频| 亚洲国产视频a| 欧美高清你懂得| 国内精品伊人久久久久av影院| 国产日韩欧美精品电影三级在线 | 蜜臀久久久久久久| 91精品欧美久久久久久动漫| 麻豆精品一区二区三区| 久久久国产一区二区三区四区小说| 成人精品电影在线观看| 一区二区在线免费观看| 欧美日韩中文精品| 国产精品麻豆视频| 欧美午夜不卡在线观看免费| 老司机精品视频线观看86| 亚洲国产精华液网站w| 欧美视频一区二区在线观看| 美女被吸乳得到大胸91| 国产精品妹子av| 3d成人h动漫网站入口| 久久超碰97人人做人人爱| 中文字幕在线观看不卡| 91精品国产色综合久久不卡电影| 国产成人精品一区二区三区四区| 亚洲一区影音先锋| 2020国产精品| 欧美日韩免费高清一区色橹橹 | 日韩午夜小视频| 国产精品一区在线观看乱码| 亚洲午夜精品久久久久久久久| 久久久www成人免费毛片麻豆 | 91偷拍与自偷拍精品| 亚洲1区2区3区4区| 亚洲欧美综合在线精品| 欧美大黄免费观看| 欧美亚洲动漫另类| 成人一区二区三区中文字幕| 麻豆成人免费电影| 亚洲国产成人va在线观看天堂| 中文字幕精品在线不卡| 欧美大胆人体bbbb| 欧美偷拍一区二区| 一本色道综合亚洲| 国产99精品视频| 精品无人码麻豆乱码1区2区| 亚洲成人资源网| 亚洲欧美另类小说视频| 欧美国产激情二区三区| ww亚洲ww在线观看国产| 欧美一三区三区四区免费在线看| 91福利小视频| 91日韩一区二区三区| 国产99久久久久久免费看农村| 亚洲第四色夜色| 亚洲一区二区高清| 亚洲精品五月天| 亚洲欧美成aⅴ人在线观看| 久久久精品tv| 欧美激情中文不卡| 欧美国产精品中文字幕| 欧美激情一区二区三区全黄| 国产欧美一区二区三区沐欲| 国产视频一区在线观看| 久久婷婷国产综合国色天香 | 国产在线视频一区二区| 午夜电影久久久| 婷婷中文字幕一区三区| 亚洲午夜久久久久久久久电影院| 一区二区三区日韩欧美精品| 亚洲精品少妇30p| 亚洲一区中文日韩| 丝袜亚洲精品中文字幕一区| 全国精品久久少妇| 久久99在线观看| 国产成人av一区二区三区在线| 国产大陆a不卡| 91玉足脚交白嫩脚丫在线播放| 欧美无砖专区一中文字| 8x8x8国产精品| 精品国产制服丝袜高跟| 久久久久国色av免费看影院| 中文字幕五月欧美| 尤物av一区二区| 亚洲高清免费观看高清完整版在线观看| 亚洲一区二区三区中文字幕在线| 青青草一区二区三区| 国产黄色精品网站| 91视视频在线观看入口直接观看www| 色综合婷婷久久| 91精品国产综合久久久久久| www国产成人| 亚洲激情一二三区| 三级在线观看一区二区| 高清国产一区二区| 欧美性高清videossexo| 精品欧美一区二区三区精品久久| 欧美国产日产图区| 五月婷婷色综合| 国产91精品免费| 欧美老肥妇做.爰bbww视频| 欧美videofree性高清杂交| 国产精品免费免费| 日韩主播视频在线| 成人免费视频免费观看| 欧美日韩亚洲不卡| 国产日韩三级在线| 洋洋成人永久网站入口| 精品一区二区在线免费观看| 色综合久久久久综合| 日韩免费一区二区| 亚洲激情综合网| 高清国产一区二区三区| 7777精品伊人久久久大香线蕉超级流畅| 国产婷婷一区二区| 日本中文字幕一区二区视频| av一二三不卡影片| 欧美一级片免费看| 亚洲欧美日韩在线不卡| 国产一区二区在线影院| 欧美另类videos死尸| 亚洲男同1069视频| 国产suv精品一区二区三区| 欧美日本高清视频在线观看| 中文字幕在线观看一区二区| 黄色资源网久久资源365| 精品视频在线看| 亚洲婷婷在线视频| 国产精品一二三四| 精品国产亚洲在线| 婷婷成人综合网| 欧美午夜精品一区| 中文字幕日韩一区二区| 国产经典欧美精品| 精品少妇一区二区三区| 日韩vs国产vs欧美| 欧美色窝79yyyycom| 亚洲欧美日韩一区二区| av一区二区三区四区| 中文字幕高清不卡| 国产**成人网毛片九色| 国产日韩精品一区二区三区 | 久久美女艺术照精彩视频福利播放| 亚洲成人免费影院| 精品视频一区 二区 三区|