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

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

?? hda_codec.c

?? 底層驅動開發
?? C
?? 第 1 頁 / 共 4 頁
字號:
		return -ENOMEM;	}	codec->bus = bus;	codec->addr = codec_addr;	init_MUTEX(&codec->spdif_mutex);	init_amp_hash(codec);	list_add_tail(&codec->list, &bus->codec_list);	bus->caddr_tbl[codec_addr] = codec;	codec->vendor_id = snd_hda_param_read(codec, AC_NODE_ROOT, AC_PAR_VENDOR_ID);	codec->subsystem_id = snd_hda_param_read(codec, AC_NODE_ROOT, AC_PAR_SUBSYSTEM_ID);	codec->revision_id = snd_hda_param_read(codec, AC_NODE_ROOT, AC_PAR_REV_ID);	setup_fg_nodes(codec);	if (! codec->afg && ! codec->mfg) {		snd_printdd("hda_codec: no AFG or MFG node found\n");		snd_hda_codec_free(codec);		return -ENODEV;	}	codec->preset = find_codec_preset(codec);	if (! *bus->card->mixername)		snd_hda_get_codec_name(codec, bus->card->mixername,				       sizeof(bus->card->mixername));	if (codec->preset && codec->preset->patch)		err = codec->preset->patch(codec);	else		err = snd_hda_parse_generic_codec(codec);	if (err < 0) {		snd_hda_codec_free(codec);		return err;	}	snd_hda_codec_proc_new(codec);	sprintf(component, "HDA:%08x", codec->vendor_id);	snd_component_add(codec->bus->card, component);	if (codecp)		*codecp = codec;	return 0;}/** * snd_hda_codec_setup_stream - set up the codec for streaming * @codec: the CODEC to set up * @nid: the NID to set up * @stream_tag: stream tag to pass, it's between 0x1 and 0xf. * @channel_id: channel id to pass, zero based. * @format: stream format. */void snd_hda_codec_setup_stream(struct hda_codec *codec, hda_nid_t nid, u32 stream_tag,				int channel_id, int format){	if (! nid)		return;	snd_printdd("hda_codec_setup_stream: NID=0x%x, stream=0x%x, channel=%d, format=0x%x\n",		    nid, stream_tag, channel_id, format);	snd_hda_codec_write(codec, nid, 0, AC_VERB_SET_CHANNEL_STREAMID,			    (stream_tag << 4) | channel_id);	msleep(1);	snd_hda_codec_write(codec, nid, 0, AC_VERB_SET_STREAM_FORMAT, format);}/* * amp access functions *//* FIXME: more better hash key? */#define HDA_HASH_KEY(nid,dir,idx) (u32)((nid) + ((idx) << 16) + ((dir) << 24))#define INFO_AMP_CAPS	(1<<0)#define INFO_AMP_VOL(ch)	(1 << (1 + (ch)))/* initialize the hash table */static void init_amp_hash(struct hda_codec *codec){	memset(codec->amp_hash, 0xff, sizeof(codec->amp_hash));	codec->num_amp_entries = 0;}/* query the hash.  allocate an entry if not found. */static struct hda_amp_info *get_alloc_amp_hash(struct hda_codec *codec, u32 key){	u16 idx = key % (u16)ARRAY_SIZE(codec->amp_hash);	u16 cur = codec->amp_hash[idx];	struct hda_amp_info *info;	while (cur != 0xffff) {		info = &codec->amp_info[cur];		if (info->key == key)			return info;		cur = info->next;	}	/* add a new hash entry */	if (codec->num_amp_entries >= ARRAY_SIZE(codec->amp_info)) {		snd_printk(KERN_ERR "hda_codec: Tooooo many amps!\n");		return NULL;	}	cur = codec->num_amp_entries++;	info = &codec->amp_info[cur];	info->key = key;	info->status = 0; /* not initialized yet */	info->next = codec->amp_hash[idx];	codec->amp_hash[idx] = cur;	return info;}/* * query AMP capabilities for the given widget and direction */static u32 query_amp_caps(struct hda_codec *codec, hda_nid_t nid, int direction){	struct hda_amp_info *info = get_alloc_amp_hash(codec, HDA_HASH_KEY(nid, direction, 0));	if (! info)		return 0;	if (! (info->status & INFO_AMP_CAPS)) {		if (!(snd_hda_param_read(codec, nid, AC_PAR_AUDIO_WIDGET_CAP) & AC_WCAP_AMP_OVRD))			nid = codec->afg;		info->amp_caps = snd_hda_param_read(codec, nid, direction == HDA_OUTPUT ?						    AC_PAR_AMP_OUT_CAP : AC_PAR_AMP_IN_CAP);		info->status |= INFO_AMP_CAPS;	}	return info->amp_caps;}/* * read the current volume to info * if the cache exists, read the cache value. */static unsigned int get_vol_mute(struct hda_codec *codec, struct hda_amp_info *info,			 hda_nid_t nid, int ch, int direction, int index){	u32 val, parm;	if (info->status & INFO_AMP_VOL(ch))		return info->vol[ch];	parm = ch ? AC_AMP_GET_RIGHT : AC_AMP_GET_LEFT;	parm |= direction == HDA_OUTPUT ? AC_AMP_GET_OUTPUT : AC_AMP_GET_INPUT;	parm |= index;	val = snd_hda_codec_read(codec, nid, 0, AC_VERB_GET_AMP_GAIN_MUTE, parm);	info->vol[ch] = val & 0xff;	info->status |= INFO_AMP_VOL(ch);	return info->vol[ch];}/* * write the current volume in info to the h/w and update the cache */static void put_vol_mute(struct hda_codec *codec, struct hda_amp_info *info,			 hda_nid_t nid, int ch, int direction, int index, int val){	u32 parm;	parm = ch ? AC_AMP_SET_RIGHT : AC_AMP_SET_LEFT;	parm |= direction == HDA_OUTPUT ? AC_AMP_SET_OUTPUT : AC_AMP_SET_INPUT;	parm |= index << AC_AMP_SET_INDEX_SHIFT;	parm |= val;	snd_hda_codec_write(codec, nid, 0, AC_VERB_SET_AMP_GAIN_MUTE, parm);	info->vol[ch] = val;}/* * read AMP value.  The volume is between 0 to 0x7f, 0x80 = mute bit. */static int snd_hda_codec_amp_read(struct hda_codec *codec, hda_nid_t nid, int ch, int direction, int index){	struct hda_amp_info *info = get_alloc_amp_hash(codec, HDA_HASH_KEY(nid, direction, index));	if (! info)		return 0;	return get_vol_mute(codec, info, nid, ch, direction, index);}/* * update the AMP value, mask = bit mask to set, val = the value */static int snd_hda_codec_amp_update(struct hda_codec *codec, hda_nid_t nid, int ch, int direction, int idx, int mask, int val){	struct hda_amp_info *info = get_alloc_amp_hash(codec, HDA_HASH_KEY(nid, direction, idx));	if (! info)		return 0;	val &= mask;	val |= get_vol_mute(codec, info, nid, ch, direction, idx) & ~mask;	if (info->vol[ch] == val && ! codec->in_resume)		return 0;	put_vol_mute(codec, info, nid, ch, direction, idx, val);	return 1;}/* * AMP control callbacks *//* retrieve parameters from private_value */#define get_amp_nid(kc)		((kc)->private_value & 0xffff)#define get_amp_channels(kc)	(((kc)->private_value >> 16) & 0x3)#define get_amp_direction(kc)	(((kc)->private_value >> 18) & 0x1)#define get_amp_index(kc)	(((kc)->private_value >> 19) & 0xf)/* volume */int snd_hda_mixer_amp_volume_info(snd_kcontrol_t *kcontrol, snd_ctl_elem_info_t *uinfo){	struct hda_codec *codec = snd_kcontrol_chip(kcontrol);	u16 nid = get_amp_nid(kcontrol);	u8 chs = get_amp_channels(kcontrol);	int dir = get_amp_direction(kcontrol);	u32 caps;	caps = query_amp_caps(codec, nid, dir);	caps = (caps & AC_AMPCAP_NUM_STEPS) >> AC_AMPCAP_NUM_STEPS_SHIFT; /* num steps */	if (! caps) {		printk(KERN_WARNING "hda_codec: num_steps = 0 for NID=0x%x\n", nid);		return -EINVAL;	}	uinfo->type = SNDRV_CTL_ELEM_TYPE_INTEGER;	uinfo->count = chs == 3 ? 2 : 1;	uinfo->value.integer.min = 0;	uinfo->value.integer.max = caps;	return 0;}int snd_hda_mixer_amp_volume_get(snd_kcontrol_t *kcontrol, snd_ctl_elem_value_t *ucontrol){	struct hda_codec *codec = snd_kcontrol_chip(kcontrol);	hda_nid_t nid = get_amp_nid(kcontrol);	int chs = get_amp_channels(kcontrol);	int dir = get_amp_direction(kcontrol);	int idx = get_amp_index(kcontrol);	long *valp = ucontrol->value.integer.value;	if (chs & 1)		*valp++ = snd_hda_codec_amp_read(codec, nid, 0, dir, idx) & 0x7f;	if (chs & 2)		*valp = snd_hda_codec_amp_read(codec, nid, 1, dir, idx) & 0x7f;	return 0;}int snd_hda_mixer_amp_volume_put(snd_kcontrol_t *kcontrol, snd_ctl_elem_value_t *ucontrol){	struct hda_codec *codec = snd_kcontrol_chip(kcontrol);	hda_nid_t nid = get_amp_nid(kcontrol);	int chs = get_amp_channels(kcontrol);	int dir = get_amp_direction(kcontrol);	int idx = get_amp_index(kcontrol);	long *valp = ucontrol->value.integer.value;	int change = 0;	if (chs & 1) {		change = snd_hda_codec_amp_update(codec, nid, 0, dir, idx,						  0x7f, *valp);		valp++;	}	if (chs & 2)		change |= snd_hda_codec_amp_update(codec, nid, 1, dir, idx,						   0x7f, *valp);	return change;}/* switch */int snd_hda_mixer_amp_switch_info(snd_kcontrol_t *kcontrol, snd_ctl_elem_info_t *uinfo){	int chs = get_amp_channels(kcontrol);	uinfo->type = SNDRV_CTL_ELEM_TYPE_BOOLEAN;	uinfo->count = chs == 3 ? 2 : 1;	uinfo->value.integer.min = 0;	uinfo->value.integer.max = 1;	return 0;}int snd_hda_mixer_amp_switch_get(snd_kcontrol_t *kcontrol, snd_ctl_elem_value_t *ucontrol){	struct hda_codec *codec = snd_kcontrol_chip(kcontrol);	hda_nid_t nid = get_amp_nid(kcontrol);	int chs = get_amp_channels(kcontrol);	int dir = get_amp_direction(kcontrol);	int idx = get_amp_index(kcontrol);	long *valp = ucontrol->value.integer.value;	if (chs & 1)		*valp++ = (snd_hda_codec_amp_read(codec, nid, 0, dir, idx) & 0x80) ? 0 : 1;	if (chs & 2)		*valp = (snd_hda_codec_amp_read(codec, nid, 1, dir, idx) & 0x80) ? 0 : 1;	return 0;}int snd_hda_mixer_amp_switch_put(snd_kcontrol_t *kcontrol, snd_ctl_elem_value_t *ucontrol){	struct hda_codec *codec = snd_kcontrol_chip(kcontrol);	hda_nid_t nid = get_amp_nid(kcontrol);	int chs = get_amp_channels(kcontrol);	int dir = get_amp_direction(kcontrol);	int idx = get_amp_index(kcontrol);	long *valp = ucontrol->value.integer.value;	int change = 0;	if (chs & 1) {		change = snd_hda_codec_amp_update(codec, nid, 0, dir, idx,						  0x80, *valp ? 0 : 0x80);		valp++;	}	if (chs & 2)		change |= snd_hda_codec_amp_update(codec, nid, 1, dir, idx,						   0x80, *valp ? 0 : 0x80);		return change;}/* * SPDIF out controls */static int snd_hda_spdif_mask_info(snd_kcontrol_t *kcontrol, snd_ctl_elem_info_t *uinfo){	uinfo->type = SNDRV_CTL_ELEM_TYPE_IEC958;	uinfo->count = 1;	return 0;}static int snd_hda_spdif_cmask_get(snd_kcontrol_t *kcontrol, snd_ctl_elem_value_t *ucontrol){	ucontrol->value.iec958.status[0] = IEC958_AES0_PROFESSIONAL |					   IEC958_AES0_NONAUDIO |					   IEC958_AES0_CON_EMPHASIS_5015 |					   IEC958_AES0_CON_NOT_COPYRIGHT;	ucontrol->value.iec958.status[1] = IEC958_AES1_CON_CATEGORY |					   IEC958_AES1_CON_ORIGINAL;	return 0;}static int snd_hda_spdif_pmask_get(snd_kcontrol_t *kcontrol, snd_ctl_elem_value_t *ucontrol){	ucontrol->value.iec958.status[0] = IEC958_AES0_PROFESSIONAL |					   IEC958_AES0_NONAUDIO |					   IEC958_AES0_PRO_EMPHASIS_5015;	return 0;}static int snd_hda_spdif_default_get(snd_kcontrol_t *kcontrol, snd_ctl_elem_value_t *ucontrol){	struct hda_codec *codec = snd_kcontrol_chip(kcontrol);	ucontrol->value.iec958.status[0] = codec->spdif_status & 0xff;	ucontrol->value.iec958.status[1] = (codec->spdif_status >> 8) & 0xff;	ucontrol->value.iec958.status[2] = (codec->spdif_status >> 16) & 0xff;	ucontrol->value.iec958.status[3] = (codec->spdif_status >> 24) & 0xff;	return 0;}/* convert from SPDIF status bits to HDA SPDIF bits * bit 0 (DigEn) is always set zero (to be filled later) */static unsigned short convert_from_spdif_status(unsigned int sbits){	unsigned short val = 0;	if (sbits & IEC958_AES0_PROFESSIONAL)		val |= 1 << 6;	if (sbits & IEC958_AES0_NONAUDIO)		val |= 1 << 5;	if (sbits & IEC958_AES0_PROFESSIONAL) {		if ((sbits & IEC958_AES0_PRO_EMPHASIS) == IEC958_AES0_PRO_EMPHASIS_5015)			val |= 1 << 3;	} else {		if ((sbits & IEC958_AES0_CON_EMPHASIS) == IEC958_AES0_CON_EMPHASIS_5015)			val |= 1 << 3;		if (! (sbits & IEC958_AES0_CON_NOT_COPYRIGHT))			val |= 1 << 4;		if (sbits & (IEC958_AES1_CON_ORIGINAL << 8))			val |= 1 << 7;		val |= sbits & (IEC958_AES1_CON_CATEGORY << 8);	}	return val;}/* convert to SPDIF status bits from HDA SPDIF bits */static unsigned int convert_to_spdif_status(unsigned short val){	unsigned int sbits = 0;	if (val & (1 << 5))		sbits |= IEC958_AES0_NONAUDIO;	if (val & (1 << 6))		sbits |= IEC958_AES0_PROFESSIONAL;	if (sbits & IEC958_AES0_PROFESSIONAL) {		if (sbits & (1 << 3))			sbits |= IEC958_AES0_PRO_EMPHASIS_5015;	} else {		if (val & (1 << 3))			sbits |= IEC958_AES0_CON_EMPHASIS_5015;		if (! (val & (1 << 4)))			sbits |= IEC958_AES0_CON_NOT_COPYRIGHT;		if (val & (1 << 7))			sbits |= (IEC958_AES1_CON_ORIGINAL << 8);		sbits |= val & (0x7f << 8);	}	return sbits;}static int snd_hda_spdif_default_put(snd_kcontrol_t *kcontrol, snd_ctl_elem_value_t *ucontrol){	struct hda_codec *codec = snd_kcontrol_chip(kcontrol);	hda_nid_t nid = kcontrol->private_value;	unsigned short val;	int change;	down(&codec->spdif_mutex);	codec->spdif_status = ucontrol->value.iec958.status[0] |		((unsigned int)ucontrol->value.iec958.status[1] << 8) |		((unsigned int)ucontrol->value.iec958.status[2] << 16) |		((unsigned int)ucontrol->value.iec958.status[3] << 24);	val = convert_from_spdif_status(codec->spdif_status);	val |= codec->spdif_ctls & 1;	change = codec->spdif_ctls != val;	codec->spdif_ctls = val;	if (change || codec->in_resume) {		snd_hda_codec_write(codec, nid, 0, AC_VERB_SET_DIGI_CONVERT_1, val & 0xff);		snd_hda_codec_write(codec, nid, 0, AC_VERB_SET_DIGI_CONVERT_2, val >> 8);	}	up(&codec->spdif_mutex);	return change;}static int snd_hda_spdif_out_switch_info(snd_kcontrol_t *kcontrol, snd_ctl_elem_info_t *uinfo){	uinfo->type = SNDRV_CTL_ELEM_TYPE_BOOLEAN;	uinfo->count = 1;	uinfo->value.integer.min = 0;	uinfo->value.integer.max = 1;	return 0;}static int snd_hda_spdif_out_switch_get(snd_kcontrol_t *kcontrol, snd_ctl_elem_value_t *ucontrol){	struct hda_codec *codec = snd_kcontrol_chip(kcontrol);	ucontrol->value.integer.value[0] = codec->spdif_ctls & 1;	return 0;}static int snd_hda_spdif_out_switch_put(snd_kcontrol_t *kcontrol, snd_ctl_elem_value_t *ucontrol){	struct hda_codec *codec = snd_kcontrol_chip(kcontrol);	hda_nid_t nid = kcontrol->private_value;	unsigned short val;	int change;	down(&codec->spdif_mutex);	val = codec->spdif_ctls & ~1;	if (ucontrol->value.integer.value[0])		val |= 1;	change = codec->spdif_ctls != val;	if (change || codec->in_resume) {		codec->spdif_ctls = val;		snd_hda_codec_write(codec, nid, 0, AC_VERB_SET_DIGI_CONVERT_1, val & 0xff);		snd_hda_codec_write(codec, nid, 0, AC_VERB_SET_AMP_GAIN_MUTE,				    AC_AMP_SET_RIGHT | AC_AMP_SET_LEFT |				    AC_AMP_SET_OUTPUT | ((val & 1) ? 0 : 0x80));	}	up(&codec->spdif_mutex);	return change;}static snd_kcontrol_new_t dig_mixes[] = {	{		.access = SNDRV_CTL_ELEM_ACCESS_READ,		.iface = SNDRV_CTL_ELEM_IFACE_MIXER,		.name = SNDRV_CTL_NAME_IEC958("",PLAYBACK,CON_MASK),		.info = snd_hda_spdif_mask_info,		.get = snd_hda_spdif_cmask_get,	},	{		.access = SNDRV_CTL_ELEM_ACCESS_READ,		.iface = SNDRV_CTL_ELEM_IFACE_MIXER,		.name = SNDRV_CTL_NAME_IEC958("",PLAYBACK,PRO_MASK),		.info = snd_hda_spdif_mask_info,		.get = snd_hda_spdif_pmask_get,	},	{		.iface = SNDRV_CTL_ELEM_IFACE_MIXER,		.name = SNDRV_CTL_NAME_IEC958("",PLAYBACK,DEFAULT),		.info = snd_hda_spdif_mask_info,		.get = snd_hda_spdif_default_get,		.put = snd_hda_spdif_default_put,	},

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美一区二区三区人| 欧美激情一区二区三区蜜桃视频| 国产成人午夜片在线观看高清观看| 91在线视频在线| 欧美丰满少妇xxxbbb| 1000精品久久久久久久久| 青青草国产精品亚洲专区无| 91丨porny丨国产入口| 久久这里都是精品| 日本不卡视频在线观看| 欧美在线啊v一区| 国产精品乱码一区二三区小蝌蚪| 久久99精品视频| 8x8x8国产精品| 亚洲成人av中文| www.亚洲激情.com| 国产精品美女www爽爽爽| 狠狠色综合日日| 日韩欧美综合一区| 五月婷婷另类国产| 欧美日韩电影一区| 亚洲午夜精品网| 欧美视频精品在线观看| 亚洲制服丝袜av| 91黄色免费版| 一区二区三区中文字幕电影| 91美女片黄在线观看91美女| 亚洲日本在线天堂| 一本大道久久a久久精品综合| 亚洲欧美中日韩| 99国产精品久久| 亚洲欧美电影院| 色伊人久久综合中文字幕| 亚洲色图视频网站| 色中色一区二区| 亚洲一区二区三区三| 欧美撒尿777hd撒尿| 日韩av电影免费观看高清完整版在线观看| 欧美日韩在线三区| 日韩精品国产精品| 欧美xxx久久| 成人午夜视频福利| 亚洲摸摸操操av| 91麻豆精品国产综合久久久久久| 日韩1区2区日韩1区2区| 日韩免费一区二区| 成人午夜av电影| 亚洲欧美另类久久久精品2019| 欧美性猛交xxxxxx富婆| 日韩精品亚洲一区二区三区免费| 日韩一区二区麻豆国产| 国产福利一区二区三区在线视频| 国产精品久久久久久久久搜平片 | 日韩三级精品电影久久久| 精品亚洲成a人| 国产精品嫩草影院av蜜臀| 91美女视频网站| 日本不卡123| 亚洲国产精品传媒在线观看| 色综合天天综合狠狠| 日本午夜精品一区二区三区电影 | 欧美一区日本一区韩国一区| 国产福利一区在线| 亚洲国产视频一区| 国产视频一区二区在线| 日本韩国视频一区二区| 伦理电影国产精品| 亚洲人午夜精品天堂一二香蕉| 制服视频三区第一页精品| 成人午夜电影网站| 视频一区中文字幕| 国产精品久久久久aaaa樱花| 日韩一区二区三区四区五区六区| av在线不卡免费看| 日本人妖一区二区| 中文无字幕一区二区三区 | 青青草伊人久久| 综合婷婷亚洲小说| 精品国产91九色蝌蚪| 欧美在线综合视频| 99久久精品免费看国产| 久久99精品一区二区三区| 亚洲中国最大av网站| 国产精品免费视频网站| 日韩一区二区在线观看视频| 日本高清不卡aⅴ免费网站| 国产一区二区三区黄视频| 亚洲高清三级视频| 亚洲伦在线观看| 国产人久久人人人人爽| 91精品国产一区二区三区香蕉 | 国产福利91精品一区二区三区| 午夜精品久久久久久久久久| 亚洲天堂精品视频| 国产欧美日韩在线观看| 欧美岛国在线观看| 欧美精品久久99| 欧美图区在线视频| 欧美午夜电影网| 91福利社在线观看| 在线亚洲+欧美+日本专区| av电影在线观看一区| 不卡一卡二卡三乱码免费网站| 国产原创一区二区| 国产麻豆精品95视频| 精品一区二区三区日韩| 蜜臀99久久精品久久久久久软件| 午夜欧美在线一二页| 午夜伦理一区二区| 亚洲成av人综合在线观看| 亚洲国产欧美另类丝袜| 一区二区成人在线| 亚洲一区二区三区免费视频| 亚洲综合激情网| 亚洲国产日韩精品| 人禽交欧美网站| 麻豆免费看一区二区三区| 久久99久久99精品免视看婷婷| 精品无人码麻豆乱码1区2区| 国产美女主播视频一区| 国产精品一区久久久久| 丁香婷婷综合色啪| 99久久99久久久精品齐齐| 91丨porny丨国产入口| 在线观看三级视频欧美| 欧美日韩免费高清一区色橹橹 | 国产蜜臀av在线一区二区三区| 国产丝袜在线精品| 中文字幕一区二区不卡 | 中文字幕一区二区三区av| 亚洲三级久久久| 午夜视频一区二区三区| 狠狠网亚洲精品| 波多野结衣亚洲一区| 欧美在线视频你懂得| 欧美一二区视频| 欧美国产禁国产网站cc| 亚洲国产精品尤物yw在线观看| 免费日韩伦理电影| 成人免费视频视频| 欧美日韩视频在线第一区| 日韩精品一区二区三区三区免费| 久久精品一区八戒影视| 夜夜嗨av一区二区三区四季av | 亚洲3atv精品一区二区三区| 麻豆精品在线看| 成人国产精品免费网站| 欧美高清视频在线高清观看mv色露露十八| 欧美成人a视频| 亚洲裸体在线观看| 国产在线日韩欧美| 91激情在线视频| 久久久精品人体av艺术| 亚洲成人黄色小说| jlzzjlzz亚洲日本少妇| 欧美一级久久久| 亚洲狼人国产精品| 狠狠色丁香久久婷婷综合丁香| 91免费看视频| 国产日韩欧美精品电影三级在线| 亚洲一区二区三区视频在线 | 欧美白人最猛性xxxxx69交| 亚洲欧美偷拍三级| 国产在线视频一区二区三区| 欧美性xxxxxx少妇| 亚洲欧美自拍偷拍| 国产毛片精品视频| 日韩一区二区三区在线| 亚洲一区二区成人在线观看| 成人一二三区视频| 精品国产免费久久 | 三级亚洲高清视频| 91丝袜高跟美女视频| 久久精品网站免费观看| 日韩影院在线观看| 欧美日韩极品在线观看一区| **性色生活片久久毛片| 国产成人自拍网| 精品国产欧美一区二区| 琪琪久久久久日韩精品| 欧洲中文字幕精品| 日韩毛片精品高清免费| 国产成人在线视频播放| 2021中文字幕一区亚洲| 久久精品国产亚洲aⅴ| 91精品国产综合久久小美女| 偷偷要91色婷婷| 欧美日韩一本到| 亚洲电影一区二区| 色播五月激情综合网| 亚洲欧美经典视频| 91蜜桃网址入口| 椎名由奈av一区二区三区| 99在线精品观看| 亚洲视频一二三| 在线一区二区三区四区| 夜夜嗨av一区二区三区四季av| 色婷婷综合久久久久中文一区二区 | 五月婷婷久久丁香| 欧美美女视频在线观看|