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

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

?? dst.c

?? linux環(huán)境下的dvb驅(qū)動程序
?? C
?? 第 1 頁 / 共 2 頁
字號:
/*     Frontend-driver for TwinHan DST Frontend    Copyright (C) 2003 Jamie Honan    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/kernel.h>#include <linux/module.h>#include <linux/init.h>#include <linux/string.h>#include <linux/slab.h>#include <linux/vmalloc.h>#include <linux/delay.h>#include <asm/div64.h>#include "dvb_frontend.h"#include "dvb_functions.h"#include "dst-bt878.h"unsigned int dst_debug = 0;unsigned int dst_verbose = 0;MODULE_PARM(dst_verbose, "i");MODULE_PARM_DESC(dst_verbose,		 "verbose startup messages, default is 1 (yes)");MODULE_PARM(dst_debug, "i");MODULE_PARM_DESC(dst_debug, "debug messages, default is 0 (no)");#define DST_MAX_CARDS	6unsigned int dst_cur_no = 0;unsigned int dst_type[DST_MAX_CARDS] = { [0 ... (DST_MAX_CARDS-1)] = (-1U)};unsigned int dst_type_flags[DST_MAX_CARDS] = { [0 ... (DST_MAX_CARDS-1)] = (-1U)};MODULE_PARM(dst_type, "1-" __stringify(DST_MAX_CARDS) "i");MODULE_PARM_DESC(dst_type,		"Type of DST card, 0 Satellite, 1 terrestial TV, 2 Cable, default driver determined");MODULE_PARM(dst_type_flags, "1-" __stringify(DST_MAX_CARDS) "i");MODULE_PARM_DESC(dst_type_flags,		"Type flags of DST card, bitfield 1=10 byte tuner, 2=TS is 204, 4=symdiv");#define dprintk	if (dst_debug) printk#define DST_TYPE_IS_SAT		0#define DST_TYPE_IS_TERR	1#define DST_TYPE_IS_CABLE	2#define DST_TYPE_HAS_NEWTUNE	1#define DST_TYPE_HAS_TS204	2#define DST_TYPE_HAS_SYMDIV	4#define HAS_LOCK	1#define ATTEMPT_TUNE	2#define HAS_POWER	4struct dst_data {	u8	tx_tuna[10];	u8	rx_tuna[10];	u8	rxbuffer[10];	u8	diseq_flags;	u8	dst_type;	u32	type_flags;	u32 frequency;     /* intermediate frequency in kHz for QPSK */        fe_spectral_inversion_t inversion;        u32   symbol_rate;  /* symbol rate in Symbols per second */	fe_code_rate_t  fec;	fe_sec_voltage_t voltage;	fe_sec_tone_mode_t tone;	u32 decode_freq;	u8  decode_lock;	u16 decode_strength;	u16 decode_snr;	unsigned long cur_jiff;	u8  k22;	fe_bandwidth_t bandwidth;	struct bt878 *bt;	struct dvb_i2c_bus *i2c;} ;static struct dvb_frontend_info dst_info_sat = {	.name 			= "DST SAT",	.type 			= FE_QPSK,	.frequency_min 		= 950000,	.frequency_max 		= 2150000,	.frequency_stepsize 	= 1000,           /* kHz for QPSK frontends */	.frequency_tolerance 	= 29500,	.symbol_rate_min	= 1000000,	.symbol_rate_max	= 45000000,/*     . symbol_rate_tolerance	= 	???,*/	.notifier_delay		= 50,                /* 1/20 s */	.caps = FE_CAN_FEC_AUTO |		FE_CAN_QPSK};static struct dvb_frontend_info dst_info_cable = {	.name 			= "DST CABLE",	.type 			= FE_QAM,        .frequency_stepsize 	= 62500,	.frequency_min 		= 51000000,	.frequency_max 		= 858000000,	.symbol_rate_min	= 1000000,	.symbol_rate_max	= 45000000,/*     . symbol_rate_tolerance	= 	???,*/	.notifier_delay		= 50,                /* 1/20 s */	.caps = FE_CAN_FEC_AUTO |		FE_CAN_QAM_AUTO};static struct dvb_frontend_info dst_info_tv = {	.name 			= "DST TERR",	.type 			= FE_OFDM,	.frequency_min 		= 137000000,	.frequency_max 		= 858000000,	.frequency_stepsize 	= 166667,	.caps = FE_CAN_FEC_AUTO |	    FE_CAN_QAM_AUTO |	    FE_CAN_TRANSMISSION_MODE_AUTO | FE_CAN_GUARD_INTERVAL_AUTO};static void dst_packsize(struct dst_data *dst, int psize){	union dst_gpio_packet bits;	bits.psize = psize;	bt878_device_control(dst->bt, DST_IG_TS, &bits);}static int dst_gpio_outb(struct dst_data *dst, u32 mask, u32 enbb, u32 outhigh){	union dst_gpio_packet enb;	union dst_gpio_packet bits;	int err;	enb.enb.mask = mask;	enb.enb.enable = enbb;        if ((err = bt878_device_control(dst->bt, DST_IG_ENABLE, &enb)) < 0) {		dprintk ("%s: dst_gpio_enb error (err == %i, mask == 0x%02x, enb == 0x%02x)\n", __FUNCTION__, err, mask, enbb);		return -EREMOTEIO;	}	/* because complete disabling means no output, no need to do	 * output packet */	if (enbb == 0)		return 0;	bits.outp.mask = enbb;	bits.outp.highvals = outhigh;        if ((err = bt878_device_control(dst->bt, DST_IG_WRITE, &bits)) < 0) {		dprintk ("%s: dst_gpio_outb error (err == %i, enbb == 0x%02x, outhigh == 0x%02x)\n", __FUNCTION__, err, enbb, outhigh);		return -EREMOTEIO;	}        return 0;}static int dst_gpio_inb(struct dst_data *dst, u8 *result){	union dst_gpio_packet rd_packet;	int err;	*result = 0;        if ((err = bt878_device_control(dst->bt, DST_IG_READ, &rd_packet)) < 0) {		dprintk ("%s: dst_gpio_inb error (err == %i)\n", __FUNCTION__, err);		return -EREMOTEIO;	}	*result = (u8)rd_packet.rd.value;        return 0;}#define DST_I2C_ENABLE	1#define DST_8820  	2static intdst_reset8820(struct dst_data *dst){int retval;	/* pull 8820 gpio pin low, wait, high, wait, then low */	// dprintk ("%s: reset 8820\n", __FUNCTION__);	retval = dst_gpio_outb(dst, DST_8820, DST_8820, 0);	if (retval < 0)		return retval;	dvb_delay(10);	retval = dst_gpio_outb(dst, DST_8820, DST_8820, DST_8820);	if (retval < 0)		return retval;	/* wait for more feedback on what works here *	dvb_delay(10);	retval = dst_gpio_outb(dst, DST_8820, DST_8820, 0);	if (retval < 0)		return retval;	*/	return 0;}static intdst_i2c_enable(struct dst_data *dst){int retval;	/* pull I2C enable gpio pin low, wait */	// dprintk ("%s: i2c enable\n", __FUNCTION__);	retval = dst_gpio_outb(dst, ~0, DST_I2C_ENABLE, 0);	if (retval < 0)		return retval;	// dprintk ("%s: i2c enable delay\n", __FUNCTION__);	dvb_delay(33);	return 0;}static intdst_i2c_disable(struct dst_data *dst){int retval;	/* release I2C enable gpio pin, wait */	// dprintk ("%s: i2c disable\n", __FUNCTION__);	retval = dst_gpio_outb(dst, ~0, 0, 0);	if (retval < 0)		return retval;	// dprintk ("%s: i2c disable delay\n", __FUNCTION__);	dvb_delay(33);	return 0;}static intdst_wait_dst_ready(struct dst_data *dst){u8 reply;int retval;int i;	for (i = 0; i < 200; i++) {		retval = dst_gpio_inb(dst, &reply);		if (retval < 0)			return retval;		if ((reply & DST_I2C_ENABLE) == 0) {			dprintk ("%s: dst wait ready after %d\n", __FUNCTION__, i);			return 1;		}		dvb_delay(5);	}	dprintk ("%s: dst wait NOT ready after %d\n", __FUNCTION__, i);	return 0;}#define DST_I2C_ADDR 0x55static int write_dst (struct dst_data *dst, u8 *data, u8 len){	struct i2c_msg msg = {		.addr = DST_I2C_ADDR, .flags = 0, .buf = data, .len = len };	int err;	int cnt;	if (dst_debug && dst_verbose) {		u8 i;		dprintk("%s writing",__FUNCTION__);		for (i = 0 ; i < len ; i++) {			dprintk(" 0x%02x", data[i]);		}		dprintk("\n");	}	dvb_delay(30);	for (cnt = 0; cnt < 4; cnt++) {		if ((err = dst->i2c->xfer (dst->i2c, &msg, 1)) < 0) {			dprintk ("%s: write_dst error (err == %i, len == 0x%02x, b0 == 0x%02x)\n", __FUNCTION__, err, len, data[0]);			dst_i2c_disable(dst);			dvb_delay(500);			dst_i2c_enable(dst);			dvb_delay(500);			continue;		} else			break;	}	if (cnt >= 4)		return -EREMOTEIO;        return 0;}static int read_dst (struct dst_data *dst, u8 *ret, u8 len){	struct i2c_msg msg = 		{ .addr = DST_I2C_ADDR, .flags = I2C_M_RD, .buf = ret, .len = len };	int err;	int cnt;	for (cnt = 0; cnt < 4; cnt++) {		if ((err = dst->i2c->xfer (dst->i2c, &msg, 1)) < 0) {			dprintk ("%s: read_dst error (err == %i, len == 0x%02x, b0 == 0x%02x)\n", __FUNCTION__, err, len, ret[0]);			dst_i2c_disable(dst);			dst_i2c_enable(dst);			continue;		} else			break;	}	if (cnt >= 4)		return -EREMOTEIO;	dprintk("%s reply is 0x%x\n", __FUNCTION__, ret[0]);	if (dst_debug && dst_verbose) {		for (err = 1; err < len; err++)			dprintk(" 0x%x", ret[err]);		if (err > 1)			dprintk("\n");	}	return 0;}static int dst_set_freq(struct dst_data *dst, u32 freq){	u8 *val;	dst->frequency = freq;	// dprintk("%s: set frequency %u\n", __FUNCTION__, freq);	if (dst->dst_type == DST_TYPE_IS_SAT) {		freq = freq / 1000;		if (freq < 950 || freq > 2150)			return -EINVAL;		val = &dst->tx_tuna[0];		val[2] = (freq >> 8) & 0x7f;		val[3] = (u8)freq;		val[4] = 1;		val[8] &= ~4;		if (freq < 1531)			val[8] |= 4;	} else if (dst->dst_type == DST_TYPE_IS_TERR) {		freq = freq / 1000;		if (freq < 137000 || freq > 858000)			return -EINVAL;		val = &dst->tx_tuna[0];		val[2] = (freq >> 16) & 0xff;		val[3] = (freq >> 8) & 0xff;		val[4] = (u8)freq;		val[5] = 0;		switch (dst->bandwidth) {		case BANDWIDTH_6_MHZ:			val[6] = 6;			break;		case BANDWIDTH_7_MHZ:		case BANDWIDTH_AUTO:			val[6] = 7;			break;		case BANDWIDTH_8_MHZ:			val[6] = 8;			break;		}		val[7] = 0;		val[8] = 0;	} else if (dst->dst_type == DST_TYPE_IS_CABLE) {		/* guess till will get one */		freq = freq / 1000;		val = &dst->tx_tuna[0];		val[2] = (freq >> 16) & 0xff;		val[3] = (freq >> 8) & 0xff;		val[4] = (u8)freq;	} else		return -EINVAL;	return 0;}static int dst_set_bandwidth(struct dst_data *dst, fe_bandwidth_t bandwidth){	u8 *val;	dst->bandwidth = bandwidth;	if (dst->dst_type != DST_TYPE_IS_TERR)		return 0;	val = &dst->tx_tuna[0];        switch (bandwidth) {	case BANDWIDTH_6_MHZ:		val[6] = 6;		break;	case BANDWIDTH_7_MHZ:		val[6] = 7;		break;	case BANDWIDTH_8_MHZ:		val[6] = 8;		break;	default:		return -EINVAL;	}	return 0;}static int dst_set_inversion (struct dst_data *dst, fe_spectral_inversion_t inversion){	u8 *val;	dst->inversion = inversion;	val = &dst->tx_tuna[0];	val[8] &= ~0x80;	switch (inversion) {	case INVERSION_OFF:		break;	case INVERSION_ON:		val[8] |= 0x80;		break;	default:		return -EINVAL;	}	return 0;}static int dst_set_fec (struct dst_data *dst, fe_code_rate_t fec){	dst->fec = fec;	return 0;}static fe_code_rate_t dst_get_fec (struct dst_data *dst){	return dst->fec;}static int dst_set_symbolrate (struct dst_data *dst, u32 srate){	u8 *val;	u32 symcalc;	u64 sval;	dst->symbol_rate = srate;	if (dst->dst_type == DST_TYPE_IS_TERR) {		return 0;	}	// dprintk("%s: set srate %u\n", __FUNCTION__, srate);	srate /= 1000;	val = &dst->tx_tuna[0];	if (dst->type_flags & DST_TYPE_HAS_SYMDIV) {		sval = srate;		sval <<= 20;		do_div(sval, 88000);	        symcalc = (u32)sval;		// dprintk("%s: set symcalc %u\n", __FUNCTION__, symcalc);		val[5] = (u8)(symcalc >> 12);		val[6] = (u8)(symcalc >> 4);		val[7] = (u8)(symcalc << 4);	} else {		val[5] = (u8)(srate >> 16) & 0x7f;		val[6] = (u8)(srate >> 8);		val[7] = (u8)srate;	}	val[8] &= ~0x20;	if (srate > 8000)		val[8] |= 0x20;	return 0;}static u8 dst_check_sum(u8 *buf, u32 len){	u32 i;	u8  val = 0;	if (!len)		return 0;	for (i = 0; i < len; i++) {		val += buf[i];	}	return ((~val) + 1);}typedef struct dst_types {	char	*mstr;	int	offs;	u8	dst_type;	u32	type_flags;} DST_TYPES;struct dst_types dst_tlist[] = {	{ "DST-020", 0,  DST_TYPE_IS_SAT,    DST_TYPE_HAS_SYMDIV },	{ "DST-030", 0,  DST_TYPE_IS_SAT,    DST_TYPE_HAS_TS204|DST_TYPE_HAS_NEWTUNE },	{ "DST-03T", 0,  DST_TYPE_IS_SAT,    DST_TYPE_HAS_SYMDIV|DST_TYPE_HAS_TS204},	{ "DST-MOT", 0,  DST_TYPE_IS_SAT,    DST_TYPE_HAS_SYMDIV },	{ "DST-CI",  1,  DST_TYPE_IS_SAT,    DST_TYPE_HAS_TS204|DST_TYPE_HAS_NEWTUNE },	{ "DSTMCI",  1,  DST_TYPE_IS_SAT,    DST_TYPE_HAS_NEWTUNE },	{ "DSTFCI",  1,  DST_TYPE_IS_SAT,    DST_TYPE_HAS_NEWTUNE },	{ "DCTNEW",  1,  DST_TYPE_IS_CABLE,  DST_TYPE_HAS_NEWTUNE },	{ "DCT_CI",  1,  DST_TYPE_IS_CABLE,  DST_TYPE_HAS_NEWTUNE|DST_TYPE_HAS_TS204 },	{ "DTTDIG" , 1,  DST_TYPE_IS_TERR,   0} };/* DCTNEW and DCT-CI are guesses */static void dst_type_flags_print(u32 type_flags){	printk("DST type flags :");	if (type_flags & DST_TYPE_HAS_NEWTUNE)		printk(" 0x%x newtuner", DST_TYPE_HAS_NEWTUNE);	if (type_flags & DST_TYPE_HAS_TS204)		printk(" 0x%x ts204", DST_TYPE_HAS_TS204);	if (type_flags & DST_TYPE_HAS_SYMDIV)		printk(" 0x%x symdiv", DST_TYPE_HAS_SYMDIV);	printk("\n");}static int dst_type_print(u8 type){	char *otype;	switch (type) {		case DST_TYPE_IS_SAT:			otype = "satellite";			break;		case DST_TYPE_IS_TERR:			otype = "terrestial TV";			break;		case DST_TYPE_IS_CABLE:			otype = "terrestial TV";			break;		default:			printk("%s: invalid dst type %d\n",				__FUNCTION__, type);			return -EINVAL;	}	printk("DST type : %s\n", otype);	return 0;}static int dst_check_ci (struct dst_data *dst){	u8 txbuf[8];	u8 rxbuf[8];	int retval;	int i;	struct dst_types *dsp;	u8 use_dst_type;	u32 use_type_flags;	memset(txbuf, 0, sizeof(txbuf));	txbuf[1] = 6;	txbuf[7] = dst_check_sum (txbuf, 7); 	dst_i2c_enable(dst);	dst_reset8820(dst);	retval = write_dst (dst, txbuf, 8);	if (retval < 0) {		dst_i2c_disable(dst);		dprintk("%s: write not successful, maybe no card?\n", __FUNCTION__);		return retval;	}	dvb_delay(3);	retval = read_dst (dst, rxbuf, 1);	dst_i2c_disable(dst);	if (retval < 0) {		dprintk("%s: read not successful, maybe no card?\n", __FUNCTION__);		return retval;	}	if (rxbuf[0] != 0xff) {		dprintk("%s: write reply not 0xff, not ci (%02x)\n", __FUNCTION__, rxbuf[0]);		return retval;	}	if (!dst_wait_dst_ready(dst))		return 0;	// dst_i2c_enable(i2c); Dimitri	retval = read_dst (dst, rxbuf, 8);	dst_i2c_disable(dst);	if (retval < 0) {		dprintk("%s: read not successful\n", __FUNCTION__);		return retval;	}	if (rxbuf[7] != dst_check_sum (rxbuf, 7)) {		dprintk("%s: checksum failure\n", __FUNCTION__);		return retval;	}	rxbuf[7] = '\0';	for (i = 0, dsp = &dst_tlist[0]; i < sizeof(dst_tlist) / sizeof(dst_tlist[0]); i++, dsp++) {		if (!strncmp(&rxbuf[dsp->offs],				dsp->mstr,				strlen(dsp->mstr))) {			use_type_flags = dsp->type_flags;

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久精品av麻豆的观看方式| 精品无人码麻豆乱码1区2区| 中文字幕亚洲一区二区av在线| 日韩三级中文字幕| 欧美丰满一区二区免费视频| 欧美制服丝袜第一页| 色婷婷久久久久swag精品 | 精品一区在线看| 日本不卡免费在线视频| 日本不卡高清视频| 国内精品自线一区二区三区视频| 国模大尺度一区二区三区| 精品亚洲aⅴ乱码一区二区三区| 免费在线观看日韩欧美| 极品销魂美女一区二区三区| 国产精品一区二区免费不卡 | 狠狠色丁香久久婷婷综合_中| 久久国内精品自在自线400部| 国内精品嫩模私拍在线| 国产成人亚洲综合a∨婷婷| 成人精品国产一区二区4080| 色综合天天天天做夜夜夜夜做| 国产精品人人做人人爽人人添| 国产精品国产三级国产普通话蜜臀 | 成人av集中营| av中文一区二区三区| 色婷婷av一区二区三区大白胸 | 《视频一区视频二区| 亚洲卡通动漫在线| 天堂影院一区二区| 国产制服丝袜一区| av亚洲精华国产精华| 在线观看精品一区| 日韩欧美成人一区二区| 欧美激情中文不卡| 亚洲国产视频一区| 国产精品主播直播| 日本黄色一区二区| 欧美v亚洲v综合ⅴ国产v| 国产精品视频一二| 日日噜噜夜夜狠狠视频欧美人 | 成人理论电影网| 欧美午夜在线观看| 久久这里只有精品视频网| 国产精品动漫网站| 日本亚洲欧美天堂免费| 成人av高清在线| 欧美一区二区精品在线| 国产精品久久久久永久免费观看 | 麻豆成人在线观看| proumb性欧美在线观看| 91精品国产综合久久久久| 欧美极品少妇xxxxⅹ高跟鞋| 亚洲成av人综合在线观看| 粉嫩在线一区二区三区视频| 欧美日韩一卡二卡三卡| 久久精品亚洲国产奇米99| 亚洲成年人网站在线观看| 国产经典欧美精品| 欧美性猛交一区二区三区精品| 久久影院视频免费| 午夜欧美视频在线观看| 国产成人在线电影| 欧美一级高清片| 亚洲精品乱码久久久久久| 国产一区二区免费在线| 欧美日本韩国一区| 亚洲日本电影在线| 国产91精品入口| 日韩一级免费观看| 亚洲国产精品一区二区久久恐怖片 | 国产一区不卡视频| 欧美精品乱码久久久久久按摩| 中文字幕一区二区三区四区 | 在线不卡中文字幕播放| 亚洲人成在线观看一区二区| 国产精品一级黄| 日韩三级电影网址| 日韩精品一二三四| 在线日韩一区二区| 日韩伦理av电影| 成人精品视频一区二区三区尤物| 精品国产乱码久久久久久夜甘婷婷| 一区二区三区四区不卡在线 | 国产亚洲欧洲997久久综合| 蜜臀久久久99精品久久久久久| 欧美性猛片aaaaaaa做受| 亚洲欧美偷拍另类a∨色屁股| 国产精品2024| 欧美精品一区二区三区视频| 秋霞午夜av一区二区三区| 欧美日韩一区二区电影| 亚洲国产色一区| 欧美日韩在线直播| 亚洲第一成人在线| 欧美日韩三级在线| 亚洲成人免费观看| 欧美日本国产视频| 亚洲18色成人| 欧美高清视频不卡网| 亚洲电影视频在线| 欧美日韩成人激情| 视频一区二区国产| 日韩欧美一二三区| 久久精品国产精品青草| 欧美成人三级电影在线| 精东粉嫩av免费一区二区三区| 精品少妇一区二区三区视频免付费| 蜜桃在线一区二区三区| 精品国产乱码久久久久久浪潮| 久久99精品国产麻豆婷婷洗澡| 亚洲精品在线免费播放| 国产一区二区三区在线看麻豆| 久久综合久久综合亚洲| 国产精品亚洲成人| 欧美激情一区二区| 91蜜桃网址入口| 亚洲电影中文字幕在线观看| 3751色影院一区二区三区| 蜜桃视频第一区免费观看| 久久久久久久久久电影| 成人免费毛片aaaaa**| 亚洲美女视频在线观看| 欧美三级在线看| 免费观看在线色综合| 国产亚洲精品aa午夜观看| 成人av午夜影院| 亚洲成人av电影| 日韩精品中文字幕在线一区| 日韩一区二区精品| 国产最新精品免费| 1000精品久久久久久久久| 欧美日韩日日摸| 另类成人小视频在线| 国产欧美一区二区三区在线老狼| 不卡的看片网站| 五月开心婷婷久久| 久久久久久久综合狠狠综合| 91网站视频在线观看| 日韩国产一区二| 日本一区二区三区四区在线视频| 在线中文字幕一区二区| 另类成人小视频在线| 国产精品久久久久三级| 777午夜精品免费视频| 国产精品夜夜嗨| 亚洲国产sm捆绑调教视频| 26uuu亚洲综合色欧美| 91麻豆精品在线观看| 久久丁香综合五月国产三级网站 | 首页国产丝袜综合| 久久精品人人做人人综合| 欧美在线一二三| 国产精品亚洲а∨天堂免在线| 亚洲一区二区三区中文字幕 | 欧美一区二区性放荡片| 成人污污视频在线观看| 午夜视频一区在线观看| 国产精品久久久久影院亚瑟| 91精选在线观看| 色综合天天综合网天天看片| 精品午夜一区二区三区在线观看| 亚洲品质自拍视频| 精品国产欧美一区二区| 欧美午夜精品理论片a级按摩| 国产精品综合一区二区三区| 午夜精品123| 成人免费在线视频| 欧美精品一区二区久久婷婷| 欧美日韩在线播放三区| 成人精品国产免费网站| 久久精品国产亚洲一区二区三区| 一区二区三区成人| 国产精品久久久久久久裸模| 日韩亚洲欧美成人一区| 欧美性色综合网| 99麻豆久久久国产精品免费 | 亚洲精品在线三区| 4hu四虎永久在线影院成人| 99久久精品免费看| 国产91精品一区二区麻豆亚洲| 美女视频一区在线观看| 五月天一区二区| 一区二区在线看| 亚洲图片激情小说| 国产日韩欧美在线一区| 精品久久人人做人人爱| 91精品国产综合久久精品app| 在线观看亚洲专区| 91免费观看视频在线| 99热精品一区二区| 东方aⅴ免费观看久久av| 日韩一区二区三区四区 | 亚洲色图欧洲色图婷婷| 欧美激情在线一区二区| 久久久九九九九| 久久久青草青青国产亚洲免观| 日韩欧美的一区| 日韩精品一区二区三区在线| 日韩欧美亚洲另类制服综合在线|