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

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

?? ymfpci.c

?? linux和2410結合開發 用他可以生成2410所需的zImage文件
?? C
?? 第 1 頁 / 共 5 頁
字號:
				ymf_playback_trigger(unit, &state->wpcm, 1);			}			spin_unlock_irqrestore(&unit->reg_lock, flags);			if (file->f_flags & O_NONBLOCK) {				if (!ret) ret = -EAGAIN;				break;			}			schedule();			set_current_state(TASK_INTERRUPTIBLE);			if (signal_pending(current)) {				if (!ret) ret = -ERESTARTSYS;				break;			}			continue;		}		if (copy_from_user(dmabuf->rawbuf + swptr, buffer, cnt)) {			if (!ret) ret = -EFAULT;			break;		}		if ((swptr += cnt) >= dmabuf->dmasize) {			swptr -= dmabuf->dmasize;		}		spin_lock_irqsave(&unit->reg_lock, flags);		if (unit->suspended) {			spin_unlock_irqrestore(&unit->reg_lock, flags);			continue;		}		dmabuf->swptr = swptr;		dmabuf->count += cnt;		/*		 * Start here is a bad idea - may cause startup click		 * in /bin/play when dmabuf is not full yet.		 * However, some broken applications do not make		 * any use of SNDCTL_DSP_SYNC (Doom is the worst).		 * One frame is about 5.3ms, Doom write size is 46ms.		 */		delay = state->format.rate / 20;	/* 50ms */		delay <<= state->format.shift;		if (dmabuf->count >= delay && !state->wpcm.running) {			ymf_playback_trigger(unit, &state->wpcm, 1);		}		spin_unlock_irqrestore(&unit->reg_lock, flags);		count -= cnt;		buffer += cnt;		ret += cnt;	}	set_current_state(TASK_RUNNING);	remove_wait_queue(&dmabuf->wait, &waita);	YMFDBGW("ymf_write: ret %d dmabuf.count %d\n", ret, dmabuf->count);	return ret;}static unsigned int ymf_poll(struct file *file, struct poll_table_struct *wait){	struct ymf_state *state = (struct ymf_state *)file->private_data;	struct ymf_dmabuf *dmabuf;	int redzone;	unsigned long flags;	unsigned int mask = 0;	if (file->f_mode & FMODE_WRITE)		poll_wait(file, &state->wpcm.dmabuf.wait, wait);	if (file->f_mode & FMODE_READ)		poll_wait(file, &state->rpcm.dmabuf.wait, wait);	spin_lock_irqsave(&state->unit->reg_lock, flags);	if (file->f_mode & FMODE_READ) {		dmabuf = &state->rpcm.dmabuf;		if (dmabuf->count >= (signed)dmabuf->fragsize)			mask |= POLLIN | POLLRDNORM;	}	if (file->f_mode & FMODE_WRITE) {		redzone = ymf_calc_lend(state->format.rate);		redzone <<= state->format.shift;		redzone *= 3;		dmabuf = &state->wpcm.dmabuf;		if (dmabuf->mapped) {			if (dmabuf->count >= (signed)dmabuf->fragsize)				mask |= POLLOUT | POLLWRNORM;		} else {			/*			 * Don't select unless a full fragment is available.			 * Otherwise artsd does GETOSPACE, sees 0, and loops.			 */			if (dmabuf->count + redzone + dmabuf->fragsize			     <= dmabuf->dmasize)				mask |= POLLOUT | POLLWRNORM;		}	}	spin_unlock_irqrestore(&state->unit->reg_lock, flags);	return mask;}static int ymf_mmap(struct file *file, struct vm_area_struct *vma){	struct ymf_state *state = (struct ymf_state *)file->private_data;	struct ymf_dmabuf *dmabuf = &state->wpcm.dmabuf;	int ret;	unsigned long size;	if (vma->vm_flags & VM_WRITE) {		if ((ret = prog_dmabuf(state, 0)) != 0)			return ret;	} else if (vma->vm_flags & VM_READ) {		if ((ret = prog_dmabuf(state, 1)) != 0)			return ret;	} else 		return -EINVAL;	if (vma->vm_pgoff != 0)		return -EINVAL;	size = vma->vm_end - vma->vm_start;	if (size > (PAGE_SIZE << dmabuf->buforder))		return -EINVAL;	if (remap_page_range(vma->vm_start, virt_to_phys(dmabuf->rawbuf),			     size, vma->vm_page_prot))		return -EAGAIN;	dmabuf->mapped = 1;/* P3 */ printk(KERN_INFO "ymfpci: using memory mapped sound, untested!\n");	return 0;}static int ymf_ioctl(struct inode *inode, struct file *file,    unsigned int cmd, unsigned long arg){	struct ymf_state *state = (struct ymf_state *)file->private_data;	struct ymf_dmabuf *dmabuf;	unsigned long flags;	audio_buf_info abinfo;	count_info cinfo;	int redzone;	int val;	switch (cmd) {	case OSS_GETVERSION:		YMFDBGX("ymf_ioctl: cmd 0x%x(GETVER) arg 0x%lx\n", cmd, arg);		return put_user(SOUND_VERSION, (int *)arg);	case SNDCTL_DSP_RESET:		YMFDBGX("ymf_ioctl: cmd 0x%x(RESET)\n", cmd);		if (file->f_mode & FMODE_WRITE) {			ymf_wait_dac(state);			dmabuf = &state->wpcm.dmabuf;			spin_lock_irqsave(&state->unit->reg_lock, flags);			dmabuf->ready = 0;			dmabuf->swptr = dmabuf->hwptr;			dmabuf->count = dmabuf->total_bytes = 0;			spin_unlock_irqrestore(&state->unit->reg_lock, flags);		}		if (file->f_mode & FMODE_READ) {			ymf_stop_adc(state);			dmabuf = &state->rpcm.dmabuf;			spin_lock_irqsave(&state->unit->reg_lock, flags);			dmabuf->ready = 0;			dmabuf->swptr = dmabuf->hwptr;			dmabuf->count = dmabuf->total_bytes = 0;			spin_unlock_irqrestore(&state->unit->reg_lock, flags);		}		return 0;	case SNDCTL_DSP_SYNC:		YMFDBGX("ymf_ioctl: cmd 0x%x(SYNC)\n", cmd);		if (file->f_mode & FMODE_WRITE) {			dmabuf = &state->wpcm.dmabuf;			if (file->f_flags & O_NONBLOCK) {				spin_lock_irqsave(&state->unit->reg_lock, flags);				if (dmabuf->count != 0 && !state->wpcm.running) {					ymf_start_dac(state);				}				spin_unlock_irqrestore(&state->unit->reg_lock, flags);			} else {				ymf_wait_dac(state);			}		}		/* XXX What does this do for reading? dmabuf->count=0; ? */		return 0;	case SNDCTL_DSP_SPEED: /* set smaple rate */		if (get_user(val, (int *)arg))			return -EFAULT;		YMFDBGX("ymf_ioctl: cmd 0x%x(SPEED) sp %d\n", cmd, val);		if (val >= 8000 && val <= 48000) {			if (file->f_mode & FMODE_WRITE) {				ymf_wait_dac(state);				dmabuf = &state->wpcm.dmabuf;				spin_lock_irqsave(&state->unit->reg_lock, flags);				dmabuf->ready = 0;				state->format.rate = val;				ymf_pcm_update_shift(&state->format);				spin_unlock_irqrestore(&state->unit->reg_lock, flags);			}			if (file->f_mode & FMODE_READ) {				ymf_stop_adc(state);				dmabuf = &state->rpcm.dmabuf;				spin_lock_irqsave(&state->unit->reg_lock, flags);				dmabuf->ready = 0;				state->format.rate = val;				ymf_pcm_update_shift(&state->format);				spin_unlock_irqrestore(&state->unit->reg_lock, flags);			}		}		return put_user(state->format.rate, (int *)arg);	/*	 * OSS manual does not mention SNDCTL_DSP_STEREO at all.	 * All channels are mono and if you want stereo, you	 * play into two channels with SNDCTL_DSP_CHANNELS.	 * However, mpg123 calls it. I wonder, why Michael Hipp used it.	 */	case SNDCTL_DSP_STEREO: /* set stereo or mono channel */		if (get_user(val, (int *)arg))			return -EFAULT;		YMFDBGX("ymf_ioctl: cmd 0x%x(STEREO) st %d\n", cmd, val);		if (file->f_mode & FMODE_WRITE) {			ymf_wait_dac(state); 			dmabuf = &state->wpcm.dmabuf;			spin_lock_irqsave(&state->unit->reg_lock, flags);			dmabuf->ready = 0;			state->format.voices = val ? 2 : 1;			ymf_pcm_update_shift(&state->format);			spin_unlock_irqrestore(&state->unit->reg_lock, flags);		}		if (file->f_mode & FMODE_READ) {			ymf_stop_adc(state);			dmabuf = &state->rpcm.dmabuf;			spin_lock_irqsave(&state->unit->reg_lock, flags);			dmabuf->ready = 0;			state->format.voices = val ? 2 : 1;			ymf_pcm_update_shift(&state->format);			spin_unlock_irqrestore(&state->unit->reg_lock, flags);		}		return 0;	case SNDCTL_DSP_GETBLKSIZE:		YMFDBGX("ymf_ioctl: cmd 0x%x(GETBLK)\n", cmd);		if (file->f_mode & FMODE_WRITE) {			if ((val = prog_dmabuf(state, 0)))				return val;			val = state->wpcm.dmabuf.fragsize;			YMFDBGX("ymf_ioctl: GETBLK w %d\n", val);			return put_user(val, (int *)arg);		}		if (file->f_mode & FMODE_READ) {			if ((val = prog_dmabuf(state, 1)))				return val;			val = state->rpcm.dmabuf.fragsize;			YMFDBGX("ymf_ioctl: GETBLK r %d\n", val);			return put_user(val, (int *)arg);		}		return -EINVAL;	case SNDCTL_DSP_GETFMTS: /* Returns a mask of supported sample format*/		YMFDBGX("ymf_ioctl: cmd 0x%x(GETFMTS)\n", cmd);		return put_user(AFMT_S16_LE|AFMT_U8, (int *)arg);	case SNDCTL_DSP_SETFMT: /* Select sample format */		if (get_user(val, (int *)arg))			return -EFAULT;		YMFDBGX("ymf_ioctl: cmd 0x%x(SETFMT) fmt %d\n", cmd, val);		if (val == AFMT_S16_LE || val == AFMT_U8) {			if (file->f_mode & FMODE_WRITE) {				ymf_wait_dac(state);				dmabuf = &state->wpcm.dmabuf;				spin_lock_irqsave(&state->unit->reg_lock, flags);				dmabuf->ready = 0;				state->format.format = val;				ymf_pcm_update_shift(&state->format);				spin_unlock_irqrestore(&state->unit->reg_lock, flags);			}			if (file->f_mode & FMODE_READ) {				ymf_stop_adc(state);				dmabuf = &state->rpcm.dmabuf;				spin_lock_irqsave(&state->unit->reg_lock, flags);				dmabuf->ready = 0;				state->format.format = val;				ymf_pcm_update_shift(&state->format);				spin_unlock_irqrestore(&state->unit->reg_lock, flags);			}		}		return put_user(state->format.format, (int *)arg);	case SNDCTL_DSP_CHANNELS:		if (get_user(val, (int *)arg))			return -EFAULT;		YMFDBGX("ymf_ioctl: cmd 0x%x(CHAN) ch %d\n", cmd, val);		if (val != 0) {			if (file->f_mode & FMODE_WRITE) {				ymf_wait_dac(state);				if (val == 1 || val == 2) {					spin_lock_irqsave(&state->unit->reg_lock, flags);					dmabuf = &state->wpcm.dmabuf;					dmabuf->ready = 0;					state->format.voices = val;					ymf_pcm_update_shift(&state->format);					spin_unlock_irqrestore(&state->unit->reg_lock, flags);				}			}			if (file->f_mode & FMODE_READ) {				ymf_stop_adc(state);				if (val == 1 || val == 2) {					spin_lock_irqsave(&state->unit->reg_lock, flags);					dmabuf = &state->rpcm.dmabuf;					dmabuf->ready = 0;					state->format.voices = val;					ymf_pcm_update_shift(&state->format);					spin_unlock_irqrestore(&state->unit->reg_lock, flags);				}			}		}		return put_user(state->format.voices, (int *)arg);	case SNDCTL_DSP_POST:		YMFDBGX("ymf_ioctl: cmd 0x%x(POST)\n", cmd);		/*		 * Quoting OSS PG:		 *    The ioctl SNDCTL_DSP_POST is a lightweight version of		 *    SNDCTL_DSP_SYNC. It just tells to the driver that there		 *    is likely to be a pause in the output. This makes it		 *    possible for the device to handle the pause more		 *    intelligently. This ioctl doesn't block the application.		 *		 * The paragraph above is a clumsy way to say "flush ioctl".		 * This ioctl is used by mpg123.		 */		spin_lock_irqsave(&state->unit->reg_lock, flags);		if (state->wpcm.dmabuf.count != 0 && !state->wpcm.running) {			ymf_start_dac(state);		}		spin_unlock_irqrestore(&state->unit->reg_lock, flags);		return 0;	case SNDCTL_DSP_SETFRAGMENT:		if (get_user(val, (int *)arg))			return -EFAULT;		YMFDBGX("ymf_ioctl: cmd 0x%x(SETFRAG) fr 0x%04x:%04x(%d:%d)\n",		    cmd,		    (val >> 16) & 0xFFFF, val & 0xFFFF,		    (val >> 16) & 0xFFFF, val & 0xFFFF);		dmabuf = &state->wpcm.dmabuf;		dmabuf->ossfragshift = val & 0xffff;		dmabuf->ossmaxfrags = (val >> 16) & 0xffff;		if (dmabuf->ossfragshift < 4)			dmabuf->ossfragshift = 4;		if (dmabuf->ossfragshift > 15)			dmabuf->ossfragshift = 15;		return 0;	case SNDCTL_DSP_GETOSPACE:		YMFDBGX("ymf_ioctl: cmd 0x%x(GETOSPACE)\n", cmd);		if (!(file->f_mode & FMODE_WRITE))			return -EINVAL;		dmabuf = &state->wpcm.dmabuf;		if (!dmabuf->ready && (val = prog_dmabuf(state, 0)) != 0)			return val;		redzone = ymf_calc_lend(state->format.rate);		redzone <<= state->format.shift;		redzone *= 3;		spin_lock_irqsave(&state->unit->reg_lock, flags);		abinfo.fragsize = dmabuf->fragsize;		abinfo.bytes = dmabuf->dmasize - dmabuf->count - redzone;		abinfo.fragstotal = dmabuf->numfrag;		abinfo.fragments = abinfo.bytes >> dmabuf->fragshift;		spin_unlock_irqrestore(&state->unit->reg_lock, flags);		return copy_to_user((void *)arg, &abinfo, sizeof(abinfo)) ? -EFAULT : 0;	case SNDCTL_DSP_GETISPACE:		YMFDBGX("ymf_ioctl: cmd 0x%x(GETISPACE)\n", cmd);		if (!(file->f_mode & FMODE_READ))			return -EINVAL;		dmabuf = &state->rpcm.dmabuf;		if (!dmabuf->ready && (val = prog_dmabuf(state, 1)) != 0)			return val;		spin_lock_irqsave(&state->unit->reg_lock, flags);		abinfo.fragsize = dmabuf->fragsize;		abinfo.bytes = dmabuf->count;		abinfo.fragstotal = dmabuf->numfrag;		abinfo.fragments = abinfo.bytes >> dmabuf->fragshift;		spin_unlock_irqrestore(&state->unit->reg_lock, flags);		return copy_to_user((void *)arg, &abinfo, sizeof(abinfo)) ? -EFAULT : 0;	case SNDCTL_DSP_NONBLOCK:		YMFDBGX("ymf_ioctl: cmd 0x%x(NONBLOCK)\n", cmd);		file->f_flags |= O_NONBLOCK;		return 0;	case SNDCTL_DSP_GETCAPS:		YMFDBGX("ymf_ioctl: cmd 0x%x(GETCAPS)\n", cmd);		/* return put_user(DSP_CAP_REALTIME|DSP_CAP_TRIGGER|DSP_CAP_MMAP,			    (int *)arg); */		return put_user(0, (int *)arg);	case SNDCTL_DSP_GETIPTR:		YMFDBGX("ymf_ioctl: cmd 0x%x(GETIPTR)\n", cmd);		if (!(file->f_mode & FMODE_READ))			return -EINVAL;		dmabuf = &state->rpcm.dmabuf;		spin_lock_irqsave(&state->unit->reg_lock, flags);		cinfo.bytes = dmabuf->total_bytes;		cinfo.blocks = dmabuf->count >> dmabuf->fragshift;		cinfo.ptr = dmabuf->hwptr;		spin_unlock_irqrestore(&state->unit->reg_lock, flags);		YMFDBGX("ymf_ioctl: GETIPTR ptr %d bytes %d\n",		    cinfo.ptr, cinfo.bytes);		return copy_to_user((void *)arg, &cinfo, sizeof(cinfo)) ? -EFAULT : 0;	case SNDCTL_DSP_GETOPTR:		YMFDBGX("ymf_ioctl: cmd 0x%x(GETOPTR)\n", cmd);		if (!(file->f_mode & FMODE_WRITE))			return -EINVAL;		dmabuf = &state->wpcm.dmabuf;		spin_lock_irqsave(&state->unit->reg_lock, flags);		cinfo.bytes = dmabuf->total_bytes;		cinfo.blocks = dmabuf->count >> dmabuf->fragshift;		cinfo.ptr = dmabuf->hwptr;		spin_unlock_irqrestore(&state->unit->reg_lock, flags);		YMFDBGX("ymf_ioctl: GETOPTR ptr %d bytes %d\n",		    cinfo.ptr, cinfo.bytes);		return copy_to_user((void *)arg, &cinfo, sizeof(cinfo)) ? -EFAULT : 0;	case SNDCTL_DSP_SETDUPLEX:	/* XXX TODO */		YMFDBGX("ymf_ioctl: cmd 0x%x(SETDUPLEX)\n", cmd);		return -EINVAL;	case SOUND_PCM_READ_RATE:		YMFDBGX("ymf_ioctl: cmd 0x%x(READ_RATE)\n", cmd);		return put_user(state->format.rate, (int *)arg);	case SOUND_PCM_READ_CHANNELS:		YMFDBGX("ymf_ioctl: cmd 0x%x(READ_CH)\n", cmd);		return put_user(state->format.voices, (int *)arg);	case SOUND_PCM_READ_BITS:		YMFDBGX("ymf_ioctl: cmd 0x%x(READ_BITS)\n", cmd);		return put_user(AFMT_S16_LE, (int *)arg);	case SNDCTL_DSP_MAPINBUF:	case SNDCTL_DSP_MAPOUTBUF:	case SNDCTL_DSP_SETSYNCRO:	case SOUND_PCM_WRITE_FILTER:	case SOUND_PCM_READ_FILTER:		YMFDBGX("ymf_ioctl: cmd 0x%x unsupported\n", cmd);		return -ENOTTY;	default:		/*		 * Some programs mix up audio devices and ioctls		 * or perhaps they expect "universal" ioctls,		 * for instance we get SNDCTL_TMR_CONTINUE here.		 */		YMFDBGX("ymf_ioctl: cmd 0x%x unknown\n", cmd);		break;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
蜜臀久久久99精品久久久久久| 麻豆免费看一区二区三区| 亚洲成在线观看| 国产福利一区二区三区在线视频| 欧美吻胸吃奶大尺度电影| 久久精品欧美日韩精品| 午夜亚洲福利老司机| av在线这里只有精品| 久久美女艺术照精彩视频福利播放| 亚洲成av人**亚洲成av**| 成人久久18免费网站麻豆| 欧美一级电影网站| 亚洲一区二区精品3399| 91美女片黄在线观看| 欧美韩日一区二区三区| 激情图片小说一区| 欧美一区国产二区| 亚洲成av人影院| 欧美色图激情小说| 自拍偷拍欧美精品| va亚洲va日韩不卡在线观看| 久久精品一区二区三区av| 麻豆免费看一区二区三区| 91精品国产一区二区三区香蕉| 亚洲一区影音先锋| 91国产丝袜在线播放| 亚洲欧美韩国综合色| 色先锋资源久久综合| 亚洲视频一区二区在线观看| 9l国产精品久久久久麻豆| 中文字幕不卡在线观看| 国产一区二区在线电影| 欧美激情自拍偷拍| 国产成人av影院| 国产精品妹子av| av在线不卡网| 亚洲人成小说网站色在线| 色婷婷综合视频在线观看| 一区二区三区在线高清| 欧美性极品少妇| 亚洲高清免费视频| 欧美一区二区日韩| 国产在线精品一区二区三区不卡 | 日韩精品一级中文字幕精品视频免费观看 | 欧美一区二区女人| 狠狠色2019综合网| 国产欧美日韩卡一| 一本久久a久久精品亚洲| 亚洲国产欧美一区二区三区丁香婷| 在线观看亚洲一区| 免费人成精品欧美精品| 精品国产3级a| 粉嫩av亚洲一区二区图片| 日韩一区中文字幕| 欧美一区日韩一区| 丁香网亚洲国际| 亚洲综合色成人| 亚洲精品在线观看网站| 99久久国产综合精品女不卡| 亚洲高清免费视频| 欧美电影免费观看高清完整版在线观看 | 《视频一区视频二区| 欧美性大战久久| 精品在线免费观看| 亚洲嫩草精品久久| 日韩欧美亚洲国产另类| 91性感美女视频| 蜜桃av噜噜一区| 亚洲日本va在线观看| 日韩欧美色综合| 91一区二区三区在线观看| 日韩av一二三| 最新国产精品久久精品| 欧美一区二区在线不卡| 99精品久久99久久久久| 美脚の诱脚舐め脚责91| 亚洲少妇30p| 精品国产乱码久久久久久闺蜜| 色哦色哦哦色天天综合| 国产在线看一区| 日韩电影在线看| 亚洲激情在线播放| 国产精品久久看| 精品国产乱码91久久久久久网站| 欧美在线看片a免费观看| 国产成人亚洲综合a∨猫咪| 免费日本视频一区| 五月婷婷综合网| 一区二区三区在线免费| 国产精品亲子乱子伦xxxx裸| 欧美一区二区精品| 欧美在线观看你懂的| 成人av在线看| 高潮精品一区videoshd| 蓝色福利精品导航| 日韩精品每日更新| 亚洲国产一二三| 亚洲精品高清在线| 亚洲欧美偷拍另类a∨色屁股| 国产亚洲成av人在线观看导航 | 欧美日韩一区二区三区四区 | 岛国精品一区二区| 国产精品一品二品| 韩国女主播一区| 久久精品免费观看| 美国毛片一区二区| 美女mm1313爽爽久久久蜜臀| 日日夜夜精品视频免费| 天堂在线亚洲视频| 天天色天天爱天天射综合| 亚洲一区视频在线观看视频| 亚洲一区二区在线播放相泽| 亚洲午夜三级在线| 一区二区三区在线观看网站| 亚洲综合av网| 亚洲第一久久影院| 日本女人一区二区三区| 免费看欧美女人艹b| 久久国产精品一区二区| 精品一区二区三区视频在线观看| 老司机免费视频一区二区三区| 免费成人结看片| 国产一区在线看| 国产高清不卡二三区| 99v久久综合狠狠综合久久| 99免费精品视频| 欧美伊人精品成人久久综合97 | 日韩—二三区免费观看av| 丝袜美腿高跟呻吟高潮一区| 男人操女人的视频在线观看欧美| 免费久久精品视频| 丰满亚洲少妇av| 91麻豆文化传媒在线观看| 精品视频色一区| 精品久久久久久久人人人人传媒| 国产婷婷一区二区| 亚洲综合色婷婷| 蜜臀av性久久久久av蜜臀妖精| 国产在线不卡一区| 成人在线综合网站| 欧美精品在线一区二区| 久久综合色婷婷| 亚洲美女在线国产| 日本在线不卡视频一二三区| 国产精品99久久久久| 色拍拍在线精品视频8848| 51午夜精品国产| 国产色一区二区| 亚洲精品视频在线看| 日韩av高清在线观看| 粉嫩嫩av羞羞动漫久久久 | 亚洲成人综合网站| 国产美女久久久久| 欧美伊人精品成人久久综合97| 欧美电视剧在线看免费| 亚洲色图视频网| 久久精品国产在热久久| 欧美在线一区二区三区| 2023国产精华国产精品| 亚洲综合一区二区| 成人性生交大片免费| 欧美一区中文字幕| 亚洲精品少妇30p| 另类小说欧美激情| 色乱码一区二区三区88| 久久久久国产精品麻豆| 日韩不卡一区二区| 91免费版在线| 久久久久久久电影| 日韩综合小视频| 日本韩国精品在线| 国产喂奶挤奶一区二区三区| 麻豆久久久久久久| 欧美性感一类影片在线播放| 中文一区二区完整视频在线观看| 日本在线观看不卡视频| 欧美三级中文字幕在线观看| 中文一区二区在线观看| 国产另类ts人妖一区二区| 91精品国产91热久久久做人人| 一区二区三区高清在线| 成人一级片在线观看| 久久综合精品国产一区二区三区 | 久久伊人中文字幕| 老汉av免费一区二区三区| 欧美一级在线观看| 亚洲午夜久久久久久久久电影网| 99久久777色| 中文字幕不卡三区| www.欧美.com| 国产精品国产三级国产普通话99| 国产一区亚洲一区| 久久综合999| 国产乱子伦视频一区二区三区| 日韩一级黄色片| 国产在线精品一区二区| 久久精品夜色噜噜亚洲aⅴ| 国产在线播放一区三区四| 精品国产免费人成在线观看| 国产一区二区福利|