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

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

?? sp887x.c

?? linux環境下的dvb驅動程序
?? C
字號:
/*   Driver for the Microtune 7202D Frontend*//*   This driver needs a copy of the Avermedia firmware. The version tested   is part of the Avermedia DVB-T 1.3.26.3 Application. If the software is   installed in Windows the file will be in the /Program Files/AVerTV DVB-T/   directory and is called sc_main.mc. Alternatively it can "extracted" from   the install cab files. Copy this file to '/usr/lib/hotplug/firmware/sc_main.mc'.   With this version of the file the first 10 bytes are discarded and the   next 0x4000 loaded. This may change in future versions. */#define __KERNEL_SYSCALLS__#include <linux/kernel.h>#include <linux/vmalloc.h>#include <linux/module.h>#include <linux/init.h>#include <linux/string.h>#include <linux/slab.h>#include <linux/fs.h>#include <linux/unistd.h>#include <linux/fcntl.h>#include <linux/errno.h>#include <linux/i2c.h>#include "dvb_frontend.h"#include "dvb_functions.h"#ifndef DVB_SP887X_FIRMWARE_FILE#define DVB_SP887X_FIRMWARE_FILE "/usr/lib/hotplug/firmware/sc_main.mc"#endifstatic char *sp887x_firmware = DVB_SP887X_FIRMWARE_FILE;#if 0#define dprintk(x...) printk(x)#else#define dprintk(x...)#endif#if 0#define LOG(dir,addr,buf,len) 					\	do {							\		int i;						\		printk("%s (%02x):", dir, addr & 0xff);		\		for (i=0; i<len; i++)				\			printk(" 0x%02x,", buf[i] & 0xff);	\		printk("\n");					\	} while (0)#else#define LOG(dir,addr,buf,len)#endifstaticstruct dvb_frontend_info sp887x_info = {	.name = "Microtune MT7202DTF",	.type = FE_OFDM,	.frequency_min =  50500000,	.frequency_max = 858000000,	.frequency_stepsize = 166666,	.caps = FE_CAN_FEC_1_2 | FE_CAN_FEC_2_3 | FE_CAN_FEC_3_4 |		FE_CAN_FEC_5_6 | FE_CAN_FEC_7_8 | FE_CAN_FEC_AUTO |		FE_CAN_QPSK | FE_CAN_QAM_16 | FE_CAN_QAM_64 | FE_CAN_RECOVER};static int errno;staticint i2c_writebytes (struct dvb_frontend *fe, u8 addr, u8 *buf, u8 len){	struct dvb_i2c_bus *i2c = fe->i2c;	struct i2c_msg msg = { .addr = addr, .flags = 0, .buf = buf, .len = len };	int err;	LOG("i2c_writebytes", msg.addr, msg.buf, msg.len);	if ((err = i2c->xfer (i2c, &msg, 1)) != 1) {		printk ("%s: i2c write error (addr %02x, err == %i)\n",			__FUNCTION__, addr, err);		return -EREMOTEIO;	}	return 0;}staticint sp887x_writereg (struct dvb_frontend *fe, u16 reg, u16 data){	struct dvb_i2c_bus *i2c = fe->i2c;	u8 b0 [] = { reg >> 8 , reg & 0xff, data >> 8, data & 0xff };	struct i2c_msg msg = { .addr = 0x70, .flags = 0, .buf = b0, .len = 4 };	int ret;	LOG("sp887x_writereg", msg.addr, msg.buf, msg.len);	if ((ret = i2c->xfer(i2c, &msg, 1)) != 1) {		/**		 *  in case of soft reset we ignore ACK errors...		 */		if (!(reg == 0xf1a && data == 0x000 &&			(ret == -EREMOTEIO || ret == -EFAULT)))		{			printk("%s: writereg error "			       "(reg %03x, data %03x, ret == %i)\n",			       __FUNCTION__, reg & 0xffff, data & 0xffff, ret);			return ret;		}	}	return 0;}staticu16 sp887x_readreg (struct dvb_frontend *fe, u16 reg){	struct dvb_i2c_bus *i2c = fe->i2c;	u8 b0 [] = { reg >> 8 , reg & 0xff };	u8 b1 [2];	int ret;	struct i2c_msg msg[] = {{ .addr = 0x70, .flags = 0, .buf = b0, .len = 2 },		         { .addr = 0x70, .flags = I2C_M_RD, .buf = b1, .len = 2 }};	LOG("sp887x_readreg (w)", msg[0].addr, msg[0].buf, msg[0].len);	LOG("sp887x_readreg (r)", msg[1].addr, msg[1].buf, msg[1].len);	if ((ret = i2c->xfer(i2c, msg, 2)) != 2)		printk("%s: readreg error (ret == %i)\n", __FUNCTION__, ret);	return (((b1[0] << 8) | b1[1]) & 0xfff);}staticvoid sp887x_microcontroller_stop (struct dvb_frontend *fe){	dprintk("%s\n", __FUNCTION__);	sp887x_writereg(fe, 0xf08, 0x000);	sp887x_writereg(fe, 0xf09, 0x000);	/* microcontroller STOP */	sp887x_writereg(fe, 0xf00, 0x000);}staticvoid sp887x_microcontroller_start (struct dvb_frontend *fe){	dprintk("%s\n", __FUNCTION__);	sp887x_writereg(fe, 0xf08, 0x000);	sp887x_writereg(fe, 0xf09, 0x000);	/* microcontroller START */	sp887x_writereg(fe, 0xf00, 0x001);}staticvoid sp887x_setup_agc (struct dvb_frontend *fe){	/* setup AGC parameters */	dprintk("%s\n", __FUNCTION__);	sp887x_writereg(fe, 0x33c, 0x054);	sp887x_writereg(fe, 0x33b, 0x04c);	sp887x_writereg(fe, 0x328, 0x000);	sp887x_writereg(fe, 0x327, 0x005);	sp887x_writereg(fe, 0x326, 0x001);	sp887x_writereg(fe, 0x325, 0x001);	sp887x_writereg(fe, 0x324, 0x001);	sp887x_writereg(fe, 0x318, 0x050);	sp887x_writereg(fe, 0x317, 0x3fe);	sp887x_writereg(fe, 0x316, 0x001);	sp887x_writereg(fe, 0x313, 0x005);	sp887x_writereg(fe, 0x312, 0x002);	sp887x_writereg(fe, 0x306, 0x000);	sp887x_writereg(fe, 0x303, 0x000);}#define BLOCKSIZE 30/** *  load firmware and setup MPEG interface... */staticint sp887x_initial_setup (struct dvb_frontend *fe){	u8 buf [BLOCKSIZE+2];	unsigned char *firmware = NULL;	int i;	int fd;	int filesize;	int fw_size;	mm_segment_t fs;	dprintk("%s\n", __FUNCTION__);	/* soft reset */	sp887x_writereg(fe, 0xf1a, 0x000);	sp887x_microcontroller_stop (fe);	fs = get_fs();	// Load the firmware	set_fs(get_ds());	fd = open(sp887x_firmware, 0, 0);	if (fd < 0) {		printk(KERN_WARNING "%s: Unable to open firmware %s\n", __FUNCTION__,		       sp887x_firmware);		return -EIO;	}	filesize = lseek(fd, 0L, 2);	if (filesize <= 0) {		printk(KERN_WARNING "%s: Firmware %s is empty\n", __FUNCTION__,		       sp887x_firmware);		sys_close(fd);		return -EIO;	}	fw_size = 0x4000;	// allocate buffer for it	firmware = vmalloc(fw_size);	if (firmware == NULL) {		printk(KERN_WARNING "%s: Out of memory loading firmware\n",		       __FUNCTION__);		sys_close(fd);		return -EIO;	}	// read it!	// read the first 16384 bytes from the file	// ignore the first 10 bytes	lseek(fd, 10, 0);	if (read(fd, firmware, fw_size) != fw_size) {		printk(KERN_WARNING "%s: Failed to read firmware\n", __FUNCTION__);		vfree(firmware);		sys_close(fd);		return -EIO;	}	sys_close(fd);	set_fs(fs);	printk ("%s: firmware upload... ", __FUNCTION__);	/* setup write pointer to -1 (end of memory) */	/* bit 0x8000 in address is set to enable 13bit mode */	sp887x_writereg(fe, 0x8f08, 0x1fff);	/* dummy write (wrap around to start of memory) */	sp887x_writereg(fe, 0x8f0a, 0x0000);	for (i=0; i<fw_size; i+=BLOCKSIZE) {		int c = BLOCKSIZE;		int err;		if (i+c > fw_size)			c = fw_size - i;		/* bit 0x8000 in address is set to enable 13bit mode */		/* bit 0x4000 enables multibyte read/write transfers */		/* write register is 0xf0a */		buf[0] = 0xcf;		buf[1] = 0x0a;		memcpy(&buf[2], firmware + i, c);		if ((err = i2c_writebytes (fe, 0x70, buf, c+2)) < 0) {			printk ("failed.\n");			printk ("%s: i2c error (err == %i)\n", __FUNCTION__, err);			vfree(firmware);			return err;		}	}	vfree(firmware);	/* don't write RS bytes between packets */	sp887x_writereg(fe, 0xc13, 0x001);	/* suppress clock if (!data_valid) */	sp887x_writereg(fe, 0xc14, 0x000);	/* setup MPEG interface... */	sp887x_writereg(fe, 0xc1a, 0x872);	sp887x_writereg(fe, 0xc1b, 0x001);	sp887x_writereg(fe, 0xc1c, 0x000); /* parallel mode (serial mode == 1) */	sp887x_writereg(fe, 0xc1a, 0x871);	/* ADC mode, 2 for MT8872, 3 for SP8870/SP8871 */	sp887x_writereg(fe, 0x301, 0x002);	sp887x_setup_agc(fe);	/* bit 0x010: enable data valid signal */	sp887x_writereg(fe, 0xd00, 0x010);	sp887x_writereg(fe, 0x0d1, 0x000);	printk ("done.\n");	return 0;};/** *  returns the actual tuned center frequency which can be used *  to initialise the AFC registers */staticint tsa5060_setup_pll (struct dvb_frontend *fe, int freq){	u8 cfg, cpump, band_select;	u8 buf [4];	u32 div;	div = (36000000 + freq + 83333) / 166666;	cfg = 0x88;	cpump = freq < 175000000 ? 2 : freq < 390000000 ? 1 :		freq < 470000000 ? 2 : freq < 750000000 ? 2 : 3;	band_select = freq < 175000000 ? 0x0e : freq < 470000000 ? 0x05 : 0x03;	buf [0] = (div >> 8) & 0x7f;	buf [1] = div & 0xff;	buf [2] = ((div >> 10) & 0x60) | cfg;	buf [3] = cpump | band_select;	/* open i2c gate for PLL message transmission... */	sp887x_writereg(fe, 0x206, 0x001);	i2c_writebytes(fe, 0x60, buf, 4);	sp887x_writereg(fe, 0x206, 0x000);	return (div * 166666 - 36000000);}staticint configure_reg0xc05 (struct dvb_frontend_parameters *p, u16 *reg0xc05){	int known_parameters = 1;		*reg0xc05 = 0x000;	switch (p->u.ofdm.constellation) {	case QPSK:		break;	case QAM_16:		*reg0xc05 |= (1 << 10);		break;	case QAM_64:		*reg0xc05 |= (2 << 10);		break;	case QAM_AUTO:		known_parameters = 0;		break;	default:		return -EINVAL;	};	switch (p->u.ofdm.hierarchy_information) {	case HIERARCHY_NONE:		break;	case HIERARCHY_1:		*reg0xc05 |= (1 << 7);		break;	case HIERARCHY_2:		*reg0xc05 |= (2 << 7);		break;	case HIERARCHY_4:		*reg0xc05 |= (3 << 7);		break;	case HIERARCHY_AUTO:		known_parameters = 0;		break;	default:		return -EINVAL;	};	switch (p->u.ofdm.code_rate_HP) {	case FEC_1_2:		break;	case FEC_2_3:		*reg0xc05 |= (1 << 3);		break;	case FEC_3_4:		*reg0xc05 |= (2 << 3);		break;	case FEC_5_6:		*reg0xc05 |= (3 << 3);		break;	case FEC_7_8:		*reg0xc05 |= (4 << 3);		break;	case FEC_AUTO:		known_parameters = 0;		break;	default:		return -EINVAL;	};	if (known_parameters)		*reg0xc05 |= (2 << 1);	/* use specified parameters */	else		*reg0xc05 |= (1 << 1);	/* enable autoprobing */	return 0;}/** *  estimates division of two 24bit numbers, *  derived from the ves1820/stv0299 driver code */staticvoid divide (int n, int d, int *quotient_i, int *quotient_f){	unsigned int q, r;	r = (n % d) << 8;	q = (r / d);	if (quotient_i)		*quotient_i = q;	if (quotient_f) {		r = (r % d) << 8;		q = (q << 8) | (r / d);		r = (r % d) << 8;		*quotient_f = (q << 8) | (r / d);	}}staticvoid sp887x_correct_offsets (struct dvb_frontend *fe,			     struct dvb_frontend_parameters *p,			     int actual_freq){	static const u32 srate_correction [] = { 1879617, 4544878, 8098561 };	int bw_index = p->u.ofdm.bandwidth - BANDWIDTH_8_MHZ;	int freq_offset = actual_freq - p->frequency;	int sysclock = 61003; //[kHz]	int ifreq = 36000000;	int freq;	int frequency_shift;	if (p->inversion == INVERSION_ON)		freq = ifreq - freq_offset;	else		freq = ifreq + freq_offset;	divide(freq / 333, sysclock, NULL, &frequency_shift);	if (p->inversion == INVERSION_ON)		frequency_shift = -frequency_shift;	/* sample rate correction */	sp887x_writereg(fe, 0x319, srate_correction[bw_index] >> 12);	sp887x_writereg(fe, 0x31a, srate_correction[bw_index] & 0xfff);	/* carrier offset correction */	sp887x_writereg(fe, 0x309, frequency_shift >> 12);	sp887x_writereg(fe, 0x30a, frequency_shift & 0xfff);}staticint sp887x_setup_frontend_parameters (struct dvb_frontend *fe,				      struct dvb_frontend_parameters *p){	int actual_freq, err;	u16 val, reg0xc05;	if (p->u.ofdm.bandwidth != BANDWIDTH_8_MHZ &&	    p->u.ofdm.bandwidth != BANDWIDTH_7_MHZ &&	    p->u.ofdm.bandwidth != BANDWIDTH_6_MHZ)		return -EINVAL;		if ((err = configure_reg0xc05(p, &reg0xc05)))		return err;	sp887x_microcontroller_stop(fe);	actual_freq = tsa5060_setup_pll(fe, p->frequency);	/* read status reg in order to clear pending irqs */	sp887x_readreg(fe, 0x200);	sp887x_correct_offsets(fe, p, actual_freq);	/* filter for 6/7/8 Mhz channel */	if (p->u.ofdm.bandwidth == BANDWIDTH_6_MHZ)		val = 2;	else if (p->u.ofdm.bandwidth == BANDWIDTH_7_MHZ)		val = 1;	else		val = 0;	sp887x_writereg(fe, 0x311, val);	/* scan order: 2k first = 0, 8k first = 1 */	if (p->u.ofdm.transmission_mode == TRANSMISSION_MODE_2K)		sp887x_writereg(fe, 0x338, 0x000);	else		sp887x_writereg(fe, 0x338, 0x001);	sp887x_writereg(fe, 0xc05, reg0xc05);	if (p->u.ofdm.bandwidth == BANDWIDTH_6_MHZ)		val = 2 << 3;	else if (p->u.ofdm.bandwidth == BANDWIDTH_7_MHZ)		val = 3 << 3;	else		val = 0 << 3;	/* enable OFDM and SAW bits as lock indicators in sync register 0xf17,	 * optimize algorithm for given bandwidth...	 */	sp887x_writereg(fe, 0xf14, 0x160 | val);	sp887x_writereg(fe, 0xf15, 0x000);	sp887x_microcontroller_start(fe);	return 0;}staticint sp887x_ioctl (struct dvb_frontend *fe, unsigned int cmd, void *arg){        switch (cmd) {        case FE_GET_INFO:		memcpy (arg, &sp887x_info, sizeof(struct dvb_frontend_info));		break;        case FE_READ_STATUS:	{		u16 snr12 = sp887x_readreg(fe, 0xf16);		u16 sync0x200 = sp887x_readreg(fe, 0x200);		u16 sync0xf17 = sp887x_readreg(fe, 0xf17);		fe_status_t *status = arg;		*status = 0;		if (snr12 > 0x00f)			*status |= FE_HAS_SIGNAL;		//if (sync0x200 & 0x004)		//	*status |= FE_HAS_SYNC | FE_HAS_CARRIER;		//if (sync0x200 & 0x008)		//	*status |= FE_HAS_VITERBI;		if ((sync0xf17 & 0x00f) == 0x002) {			*status |= FE_HAS_LOCK;			*status |= FE_HAS_VITERBI | FE_HAS_SYNC | FE_HAS_CARRIER;		}		if (sync0x200 & 0x001) {	/* tuner adjustment requested...*/			int steps = (sync0x200 >> 4) & 0x00f;			if (steps & 0x008)				steps = -steps;			dprintk("sp887x: implement tuner adjustment (%+i steps)!!\n",			       steps);		}		break;	}        case FE_READ_BER:	{		u32* ber = arg;		*ber = (sp887x_readreg(fe, 0xc08) & 0x3f) |		       (sp887x_readreg(fe, 0xc07) << 6);		sp887x_writereg(fe, 0xc08, 0x000);		sp887x_writereg(fe, 0xc07, 0x000);		if (*ber >= 0x3fff0)			*ber = ~0;		break;	}        case FE_READ_SIGNAL_STRENGTH:		// FIXME: correct registers ?	{		u16 snr12 = sp887x_readreg(fe, 0xf16);		u32 signal = 3 * (snr12 << 4);		*((u16*) arg) = (signal < 0xffff) ? signal : 0xffff;		break;	}        case FE_READ_SNR:	{		u16 snr12 = sp887x_readreg(fe, 0xf16);		*(u16*) arg = (snr12 << 4) | (snr12 >> 8);		break;	}	case FE_READ_UNCORRECTED_BLOCKS:	{		u32 *ublocks = (u32 *) arg;		*ublocks = sp887x_readreg(fe, 0xc0c);		if (*ublocks == 0xfff)			*ublocks = ~0;		break;	}        case FE_SET_FRONTEND:		return sp887x_setup_frontend_parameters(fe, arg);	case FE_GET_FRONTEND:  // FIXME: read known values back from Hardware...		break;        case FE_SLEEP:		/* tristate TS output and disable interface pins */		sp887x_writereg(fe, 0xc18, 0x000);		break;        case FE_INIT:		if (fe->data == NULL) {	  /* first time initialisation... */			fe->data = (void*) ~0;			sp887x_initial_setup (fe);		}		/* enable TS output and interface pins */		sp887x_writereg(fe, 0xc18, 0x00d);		break;	default:		return -EOPNOTSUPP;        };        return 0;}staticint sp887x_attach (struct dvb_i2c_bus *i2c, void **data){	struct i2c_msg msg = {.addr = 0x70, .flags = 0, .buf = NULL, .len = 0 };	dprintk ("%s\n", __FUNCTION__);	if (i2c->xfer (i2c, &msg, 1) != 1)                return -ENODEV;	return dvb_register_frontend (sp887x_ioctl, i2c, NULL, &sp887x_info);}staticvoid sp887x_detach (struct dvb_i2c_bus *i2c, void *data){	dprintk ("%s\n", __FUNCTION__);	dvb_unregister_frontend (sp887x_ioctl, i2c);}staticint __init init_sp887x (void){	dprintk ("%s\n", __FUNCTION__);	return dvb_register_i2c_device (NULL, sp887x_attach, sp887x_detach);}staticvoid __exit exit_sp887x (void){	dprintk ("%s\n", __FUNCTION__);	dvb_unregister_i2c_device (sp887x_attach);}module_init(init_sp887x);module_exit(exit_sp887x);MODULE_DESCRIPTION("sp887x DVB-T demodulator driver");MODULE_LICENSE("GPL");

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
eeuss鲁片一区二区三区在线观看 eeuss鲁片一区二区三区在线看 | 国模一区二区三区白浆| 精品国产污网站| 99久久精品一区| 蜜臀精品一区二区三区在线观看 | 国内精品伊人久久久久av一坑 | 欧美久久免费观看| 成人国产一区二区三区精品| 日韩黄色免费网站| 椎名由奈av一区二区三区| 日韩女优视频免费观看| 欧洲一区在线观看| 成人午夜免费视频| 久久精工是国产品牌吗| 亚洲国产日韩一级| 中文字幕亚洲一区二区va在线| 日韩一区二区影院| 欧美无乱码久久久免费午夜一区| 国产91精品一区二区| 蜜桃久久av一区| 亚洲成人免费视频| 亚洲精品乱码久久久久| 国产日产欧美精品一区二区三区| 日韩午夜电影av| 久久美女艺术照精彩视频福利播放| 国产不卡免费视频| 久久国产成人午夜av影院| 亚洲国产aⅴ天堂久久| 一区精品在线播放| 国产精品无遮挡| 国产日韩欧美高清| 久久综合九色欧美综合狠狠| 91精品欧美一区二区三区综合在| 91黄色在线观看| 91性感美女视频| 波多野洁衣一区| 粉嫩一区二区三区性色av| 国产在线精品不卡| 久草中文综合在线| 黄页网站大全一区二区| 久久99国产精品免费| 麻豆视频观看网址久久| 日韩高清一区在线| 日本vs亚洲vs韩国一区三区二区| 水野朝阳av一区二区三区| 亚洲成年人网站在线观看| 一片黄亚洲嫩模| 亚洲午夜精品一区二区三区他趣| 亚洲一区二区三区在线播放| 亚洲激情综合网| 亚洲综合色丁香婷婷六月图片| 亚洲乱码中文字幕综合| 亚洲精品视频一区二区| 亚洲最大色网站| 亚洲午夜羞羞片| 天堂成人免费av电影一区| 天堂成人国产精品一区| 蜜桃av一区二区三区电影| 精品一二三四在线| 国产成人无遮挡在线视频| 成人精品免费视频| 91日韩在线专区| 欧美日本高清视频在线观看| 日韩午夜三级在线| 国产欧美一区视频| 亚洲欧美国产毛片在线| 亚洲成人av电影在线| 国内精品久久久久影院色| 高清不卡一区二区| 欧美性色综合网| 日韩欧美国产三级| 中文子幕无线码一区tr | 日韩av一区二区三区四区| 免费黄网站欧美| 精品成人私密视频| 精品久久久久久无| 日本v片在线高清不卡在线观看| 蜜桃精品在线观看| 成人av先锋影音| 欧美日韩一区成人| 久久久一区二区三区| 亚洲色图欧洲色图婷婷| 婷婷久久综合九色综合伊人色| 国产揄拍国内精品对白| 91伊人久久大香线蕉| 欧美一区二区三区思思人| 久久奇米777| 亚洲一级二级在线| 国产美女主播视频一区| 91福利精品视频| www成人在线观看| 一区二区三区免费看视频| 狠狠色狠狠色综合系列| 色成年激情久久综合| 精品久久久久久最新网址| 亚洲精品欧美在线| 激情深爱一区二区| 欧美三级午夜理伦三级中视频| 国产亚洲成av人在线观看导航| 亚洲午夜在线观看视频在线| 国产黄色精品网站| 欧美另类高清zo欧美| 国产精品乱码一区二三区小蝌蚪| 三级在线观看一区二区| a亚洲天堂av| 26uuu国产在线精品一区二区| 亚洲综合色丁香婷婷六月图片| 国产乱色国产精品免费视频| 欧美色爱综合网| 亚洲欧洲日韩av| 国产精品羞羞答答xxdd| 日韩一区二区三| 亚洲国产wwwccc36天堂| eeuss鲁片一区二区三区在线观看| 日韩三级中文字幕| 亚洲午夜一区二区三区| jlzzjlzz国产精品久久| 久久久99免费| 久久国产精品无码网站| 欧美视频你懂的| 亚洲欧美激情小说另类| 成人爱爱电影网址| 久久婷婷国产综合国色天香| 日本vs亚洲vs韩国一区三区二区| 欧美日韩五月天| 一区二区三区不卡在线观看| 99re在线视频这里只有精品| 亚洲国产经典视频| 国产麻豆欧美日韩一区| 日韩免费观看高清完整版| 日韩不卡一区二区三区| 欧美不卡一区二区| 一区二区三区四区在线| 色一情一伦一子一伦一区| 中文字幕在线观看一区| 成人视屏免费看| 中文字幕欧美日本乱码一线二线| 国产精品综合二区| 久久精品一区二区三区av| 国产一区二区三区高清播放| 亚洲精品一区二区三区四区高清 | 欧美日韩一区二区欧美激情| 亚洲自拍偷拍网站| 欧美系列在线观看| 亚洲综合在线观看视频| 欧美少妇bbb| 亚欧色一区w666天堂| 欧美日韩一区在线观看| 午夜电影网亚洲视频| 欧美一区二区三区男人的天堂| 视频一区二区中文字幕| 日韩三级中文字幕| 国产伦精品一区二区三区在线观看 | 91社区在线播放| 亚洲精品视频自拍| 欧美色综合久久| 日韩高清一区在线| 2022国产精品视频| 成人精品在线视频观看| 自拍av一区二区三区| 欧美写真视频网站| 蜜桃久久久久久| 国产香蕉久久精品综合网| 成人av网站在线观看| 一区二区三区四区在线播放 | 亚洲欧美在线高清| 欧美亚洲一区三区| 七七婷婷婷婷精品国产| 久久综合狠狠综合久久综合88| 成人一级黄色片| 亚洲国产精品久久一线不卡| 欧美一区二区三区系列电影| 国产大陆a不卡| 亚洲免费观看视频| 日韩欧美一级在线播放| 国产91高潮流白浆在线麻豆| 亚洲精品国产视频| 91精品国产高清一区二区三区| 国产91在线观看| 亚洲成av人片一区二区| 国产网站一区二区| 91国产精品成人| 国产伦精品一区二区三区免费迷| 亚洲精品成人悠悠色影视| 欧美成人vr18sexvr| 91麻豆免费看片| 91猫先生在线| 蜜臀a∨国产成人精品| 日韩理论在线观看| 欧美tickle裸体挠脚心vk| 一本色道久久综合亚洲aⅴ蜜桃| 免费欧美在线视频| 亚洲激情综合网| 国产亚洲一区二区三区四区 | 国产欧美久久久精品影院| 欧美日韩亚洲丝袜制服| www.爱久久.com| 激情综合色丁香一区二区| 亚洲一区二区高清| 国产精品国产三级国产aⅴ入口|