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

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

?? mmc_core.c

?? 包含MMC協議,驅動源碼. 在LINUX操作系統下通過.
?? C
?? 第 1 頁 / 共 3 頁
字號:
struct dma_buf_pool_s dma_read_buf_pool[MAX_BUF_POOL_SIZE];static spinlock_t buf_pool_lock = SPIN_LOCK_UNLOCKED;static spinlock_t write_lock = SPIN_LOCK_UNLOCKED;static spinlock_t read_lock = SPIN_LOCK_UNLOCKED;static DECLARE_COMPLETION(sync_completion);static DECLARE_COMPLETION(read_completion);static DECLARE_COMPLETION(write_completion);static unsigned int sync_wait = 0;static unsigned int write_wait = 0;static unsigned int flag_read_request_on = 0;static unsigned int flag_read_thread_wait = 0;static unsigned int mmc_max_size = 0;#define dbgMMC(x...) void init_dma_buf_pool(struct dma_buf_pool_s * dma_buf_pool, struct list_head * head, unsigned int size){        unsigned int i;        for (i = 0; i < size; i++)        {                dma_buf_pool[i].index = i;                dma_buf_pool[i].dma_buf_pool_ptr =(unsigned char *) __get_free_pages(GFP_KERNEL, 5);                list_add_tail(&dma_buf_pool[i].dma_buf, head);		dbgMMC("head %x, num = %d, buf = %x\r\n", head, i, dma_buf_pool[i].dma_buf_pool_ptr);        }}void release_dma_buf_pool(struct dma_buf_pool_s * dma_buf_pool, struct list_head * head, unsigned int size){        unsigned int i;	dbgMMC("release buf\r\n");         for (i = 0; i < size; i++)        {                dma_buf_pool[i].index = 0;                free_pages((unsigned long)dma_buf_pool[i].dma_buf_pool_ptr, 5);                dma_buf_pool[i].dma_buf_pool_ptr = NULL;                INIT_LIST_HEAD(head);        }}struct dma_buf_pool_s * mas_get_dma_buf(struct list_head * head){        struct dma_buf_pool_s * dma_buf;        unsigned long flags;        spin_lock_irqsave(&buf_pool_lock, flags);                                                                                          if (!list_empty(head))        {                dma_buf = list_entry(head->next, struct dma_buf_pool_s, dma_buf);                list_del(&dma_buf->dma_buf);                spin_unlock_irqrestore(&buf_pool_lock, flags);                                                                                                  return dma_buf;        }        spin_unlock_irqrestore(&buf_pool_lock, flags);                                                                                          printk("get dam_buf NULL\r\n");        return NULL;}void mas_release_dma_buf(struct list_head * head, struct dma_buf_pool_s * dma_buf){        unsigned long flags;        spin_lock_irqsave(&buf_pool_lock, flags);                                                                                          list_add_tail(&dma_buf->dma_buf, head);        spin_unlock_irqrestore(&buf_pool_lock, flags);}void mmc_set_max_size(unsigned int size){	mmc_max_size = size;}static void mmc_reset_read_buf_pool(void){	unsigned int i;	for (i = 0; i < (read_request_head + MAX_READ_AHEAD_REQUEST - read_request_tail)%MAX_READ_AHEAD_REQUEST; i ++)	{		mas_release_dma_buf(&dma_read_buf_pool_head, read_request_pool[(read_request_tail + i)%MAX_READ_AHEAD_REQUEST].dma_buf);	}	read_request_head = 0;	read_request_tail = 0;}void new_io_request_done(struct mmc_io_request * req, int result){	return;}static void mmc_read_wait_done(struct mmc_io_request * req){	unsigned int sector, nr_sectors;	struct dma_buf_pool_s * dma_buf;	spin_lock_irq(&read_lock);	if (flag_read_thread_wait == 1)	{		complete(req->done_data);		g_mmc_dev.slot[0].media_driver->io_request_done = old_io_request_done;		flag_read_request_on = 0;		read_request_head = (read_request_head + 1)%MAX_READ_AHEAD_REQUEST;	}	else	{		if ((((read_request_head + 2)%MAX_READ_AHEAD_REQUEST) == read_request_tail) || list_empty(&dma_read_buf_pool_head))		{			flag_read_request_on = 0;			g_mmc_dev.slot[0].media_driver->io_request_done = old_io_request_done;			read_request_head = (read_request_head + 1)%MAX_READ_AHEAD_REQUEST;		}		else		{			sector = read_request_pool[read_request_head].sector;			nr_sectors = read_request_pool[read_request_head].nr_sectors;			dma_buf = mas_get_dma_buf(&dma_read_buf_pool_head);			gg_io_read_request.id = 0;			gg_io_read_request.cmd = 1;			if((sector + nr_sectors + nr_sectors) < mmc_max_size)			{				gg_io_read_request.sector = sector + nr_sectors;				gg_io_read_request.nr_sectors = nr_sectors;			}			else			{				dbgMMC("At the bottom, sector %d, nr_sectors %d, max_size %d\r\n", sector, nr_sectors, mmc_max_size);				gg_io_read_request.sector = sector;				gg_io_read_request.nr_sectors = nr_sectors;			}			gg_io_read_request.block_len = 512;			read_request_head = (read_request_head + 1)%MAX_READ_AHEAD_REQUEST;			gg_io_read_request.buffer = dma_buf->dma_buf_pool_ptr;			read_request_pool[read_request_head].dma_buf = dma_buf;			read_request_pool[read_request_head].sector = sector + nr_sectors;			read_request_pool[read_request_head].nr_sectors = nr_sectors;			gg_io_read_request.done_data = &read_completion;			gg_io_read_request.done = mmc_read_wait_done;			flag_read_request_on = 1;			mmc_handle_io_request(&gg_io_read_request);		}	}	spin_unlock_irq(&read_lock);}void mmc_block_read_request(int cmd, int sector, int nr_sectors, struct dma_buf_pool_s * * dma_buf){	unsigned int i, cnt;	unsigned int flag_data_available;	spin_lock_irq(&write_lock);	if (write_request_tail != write_request_head)	{		sync_wait = 1;		spin_unlock_irq(&write_lock);		wait_for_completion(&sync_completion);		spin_lock_irq(&read_lock);		sync_wait = 0;		if (flag_read_request_on == 1)		{			flag_read_thread_wait = 1;			spin_unlock_irq(&read_lock);			wait_for_completion(&read_completion);			spin_lock_irq(&read_lock);			flag_read_thread_wait = 0;					}		mmc_reset_read_buf_pool();		spin_unlock_irq(&read_lock);		spin_lock_irq(&write_lock);	}	spin_unlock_irq(&write_lock);	spin_lock_irq(&read_lock);	flag_data_available = 0;	cnt = (read_request_head + MAX_READ_AHEAD_REQUEST - read_request_tail)%MAX_READ_AHEAD_REQUEST;	for (i = 0; i < cnt; i ++)	{		if ((read_request_pool[(read_request_tail + i)%MAX_READ_AHEAD_REQUEST].sector == sector) && (read_request_pool[(read_request_tail + i)%MAX_READ_AHEAD_REQUEST].nr_sectors >= nr_sectors))		{			flag_data_available = 1;			* dma_buf = read_request_pool[(read_request_tail +i)%MAX_READ_AHEAD_REQUEST].dma_buf;								read_request_tail = (read_request_tail + i + 1)%MAX_READ_AHEAD_REQUEST;			if(flag_read_request_on == 1)			{				spin_unlock_irq(&read_lock);				return;			}			else			{				if (!list_empty(&dma_read_buf_pool_head))				{					sector = sector + nr_sectors;					goto mmc_mas_submit_request;				}				else				{					spin_unlock_irq(&read_lock);					return;				}			}		}		else		{			mas_release_dma_buf(&dma_read_buf_pool_head, read_request_pool[(read_request_tail + i)%MAX_READ_AHEAD_REQUEST].dma_buf);			}	}	read_request_tail = read_request_head;		if (flag_read_request_on == 1)	{		flag_read_thread_wait = 1;		spin_unlock_irq(&read_lock);		wait_for_completion(&read_completion);		spin_lock_irq(&read_lock);		flag_read_thread_wait = 0;		if ((read_request_pool[read_request_tail].sector == sector) && (read_request_pool[read_request_tail].nr_sectors >= nr_sectors))		{			*dma_buf = read_request_pool[read_request_tail].dma_buf;			read_request_tail = (read_request_tail + 1)%MAX_READ_AHEAD_REQUEST;			flag_data_available = 1;						sector = sector + nr_sectors;		}		else		{			mas_release_dma_buf(&dma_read_buf_pool_head, read_request_pool[read_request_tail].dma_buf);			read_request_tail = (read_request_tail + 1)%MAX_READ_AHEAD_REQUEST;		}	}mmc_mas_submit_request:	read_request_pool[read_request_head].dma_buf = mas_get_dma_buf(&dma_read_buf_pool_head);	gg_io_read_request.id = 0;	gg_io_read_request.cmd = cmd;	gg_io_read_request.sector = sector;	gg_io_read_request.nr_sectors = nr_sectors;	gg_io_read_request.block_len = 512;	gg_io_read_request.buffer = read_request_pool[read_request_head].dma_buf->dma_buf_pool_ptr;	gg_io_read_request.done_data = &read_completion;	gg_io_read_request.done = mmc_read_wait_done;	read_request_pool[read_request_head].sector = sector;	read_request_pool[read_request_head].nr_sectors = nr_sectors;	old_io_request_done = g_mmc_dev.slot[0].media_driver->io_request_done;	g_mmc_dev.slot[0].media_driver->io_request_done = new_io_request_done;	flag_read_request_on = 1;	mmc_handle_io_request(&gg_io_read_request);	if (flag_data_available == 0)	{		flag_read_thread_wait = 1;		spin_unlock_irq(&read_lock);		wait_for_completion(&read_completion);		spin_lock_irq(&read_lock);		flag_read_thread_wait = 0;				* dma_buf = read_request_pool[read_request_tail].dma_buf;		read_request_tail = (read_request_tail + 1)%MAX_READ_AHEAD_REQUEST;		flag_data_available = 1;		if((sector + nr_sectors + nr_sectors) < mmc_max_size)		{			sector = sector + nr_sectors;		}		goto mmc_mas_submit_request;	}		spin_unlock_irq(&read_lock);	return;}static void mmc_write_wait_done(struct mmc_io_request * req){	spin_lock_irq(&write_lock);	if (((write_request_head + 1)%MAX_WRITE_PENDING_REQUEST) == write_request_tail)        {		if(write_wait == 1)			complete(&write_completion);	}	mas_release_dma_buf(&dma_write_buf_pool_head, write_request_pool[write_request_tail]);	write_request_tail = (write_request_tail + 1)%MAX_WRITE_PENDING_REQUEST;	if (write_request_tail == write_request_head)	{		g_mmc_dev.slot[0].media_driver->io_request_done = old_io_request_done;		if(sync_wait == 1)			complete(&sync_completion);	}	else		{		mmc_handle_io_request(&gg_io_write_request[write_request_tail]);	}	spin_unlock_irq(&write_lock);}void mmc_block_write_request(int cmd, int sector, int nr_sectors, struct dma_buf_pool_s * dma_buf){	spin_lock_irq(&write_lock);	if (((write_request_head + 1)%MAX_WRITE_PENDING_REQUEST) == write_request_tail)	{		write_wait = 1;		spin_unlock_irq(&write_lock);		wait_for_completion(&write_completion);		write_wait = 0;		spin_lock_irq(&write_lock);	}	write_request_pool[write_request_head] = dma_buf;	gg_io_write_request[write_request_head].id = 0;	gg_io_write_request[write_request_head].cmd = cmd;	gg_io_write_request[write_request_head].sector = sector;	gg_io_write_request[write_request_head].nr_sectors = nr_sectors;	gg_io_write_request[write_request_head].block_len = 512;	gg_io_write_request[write_request_head].buffer = dma_buf->dma_buf_pool_ptr;	gg_io_write_request[write_request_head].done_data = &write_completion;	gg_io_write_request[write_request_head].done = mmc_write_wait_done;	if (write_request_head == write_request_tail )	{		spin_unlock_irq(&write_lock);		spin_lock_irq(&read_lock);		if (flag_read_request_on == 1)		{			flag_read_thread_wait = 1;			spin_unlock_irq(&read_lock);			wait_for_completion(&read_completion);			spin_lock_irq(&read_lock);			flag_read_thread_wait = 0;		}		mmc_reset_read_buf_pool();		spin_unlock_irq(&read_lock);		spin_lock_irq(&write_lock);	  	old_io_request_done = g_mmc_dev.slot[0].media_driver->io_request_done;	  	g_mmc_dev.slot[0].media_driver->io_request_done = new_io_request_done;		  	mmc_handle_io_request(&gg_io_write_request[write_request_head]);	}	write_request_head = (write_request_head + 1)%MAX_WRITE_PENDING_REQUEST;	spin_unlock_irq(&write_lock);}#endifstatic int mmc_proc_read_device(char *page, char **start, off_t off, int count, int *eof, void *data){	struct mmc_dev *dev = (struct mmc_dev *)data;        char *p = page;        int len = 0;	int i;	if (!dev || !dev->sdrive)		return 0;	for ( i = 0 ; i < dev->num_slots ; i++ ) {		struct mmc_slot *slot = &dev->slot[i];		p += sprintf(p, "Slot #%d\n", i);		p += sprintf(p, "  State %s (%d)\n", card_state_to_string(slot->state), slot->state);		if ( slot->state != CARD_STATE_EMPTY ) {			p += sprintf(p, "  Media %s\n", (slot->media_driver ? slot->media_driver->name : "unknown"));			p += sprintf(p, "  CID mid=%d\n", slot->cid.mid);			p += sprintf(p, "      oid=%d\n", slot->cid.oid);			p += sprintf(p, "      pnm=%s\n", slot->cid.pnm);			p += sprintf(p, "      prv=%d.%d\n", slot->cid.prv>>4, slot->cid.prv&0xf);			p += sprintf(p, "      psn=0x%08x\n", slot->cid.psn);			p += sprintf(p, "      mdt=%d/%d\n", slot->cid.mdt>>4, (slot->cid.mdt&0xf)+1997);			p += sprintf(p, "  CSD csd_structure=%d\n", slot->csd.csd_structure);			p += sprintf(p, "      spec_vers=%d\n", slot->csd.spec_vers);			p += sprintf(p, "      taac=0x%02x\n", slot->csd.taac);			p += sprintf(p, "      nsac=0x%02x\n", slot->csd.nsac);			p += sprintf(p, "      tran_speed=0x%02x\n", slot->csd.tran_speed);			p += sprintf(p, "      ccc=0x%04x\n", slot->csd.ccc);			p += sprintf(p, "      read_bl_len=%d\n", slot->csd.read_bl_len);			p += sprintf(p, "      read_bl_partial=%d\n", slot->csd.read_bl_partial);			p += sprintf(p, "      write_blk_misalign=%d\n", slot->csd.write_blk_misalign);			p += sprintf(p, "      read_blk_misalign=%d\n", slot->csd.read_blk_misalign);			p += sprintf(p, "      dsr_imp=%d\n", slot->csd.dsr_imp);			p += sprintf(p, "      c_size=%d\n", slot->csd.c_size);			p += sprintf(p, "      vdd_r_curr_min=%d\n", slot->csd.vdd_r_curr_min);			p += sprintf(p, "      vdd_r_curr_max=%d\n", slot->csd.vdd_r_curr_max);			p += sprintf(p, "      vdd_w_curr_min=%d\n", slot->csd.vdd_w_curr_min);			p += sprintf(p, "      vdd_w_curr_max=%d\n", slot->csd.vdd_w_curr_max);			p += sprintf(p, "      c_size_mult=%d\n", slot->csd.c_size_mult);			p += sprintf(p, "      wp_grp_size=%d\n", slot->csd.wp_grp_size);			p += sprintf(p, "      wp_grp_enable=%d\n", slot->csd.wp_grp_enable);			p += sprintf(p, "      default_ecc=%d\n", slot->csd.default_ecc);			p += sprintf(p, "      r2w_factor=%d\n", slot->csd.r2w_factor);			p += sprintf(p, "      write_bl_len=%d\n", slot->csd.write_bl_len);			p += sprintf(p, "      write_bl_partial=%d\n", slot->csd.write_bl_partial);			p += sprintf(p, "      file_format_grp=%d\n", slot->csd.file_format_grp);			p += sprintf(p, "      copy=%d\n", slot->csd.copy);			p += sprintf(p, "      perm_write_protect=%d\n", slot->csd.perm_write_protect);			p += sprintf(p, "      tmp_write_protect=%d\n", slot->csd.tmp_write_protect);			p += sprintf(p, "      file_format=%d\n", slot->csd.file_format);			p += sprintf(p, "      ecc=%d\n", slot->csd.ecc);			switch (slot->csd.csd_structure) {			case CSD_STRUCT_VER_1_0:			case CSD_STRUCT_VER_1_1:				p += sprintf(p, "      sector_size=%d\n", slot->csd.erase.v22.sector_size);				p += sprintf(p, "      erase_grp_size=%d\n", slot->csd.erase.v22.erase_grp_size);				break;			case CSD_STRUCT_VER_1_2:			default:				p += sprintf(p, "      erase_grp_size=%d\n", slot->csd.erase.v31.erase_grp_size);				p += sprintf(p, "      erase_grp_mult=%d\n", slot->csd.erase.v31.erase_grp_mult);				break;			}		}	}        len = (p - page) - off;	*start = page + off;        return len;}/******************************************************************/void mmc_protocol_single_card( struct mmc_dev *dev, int state_flags );extern struct mmc_media_module media_module;static int __init mmc_init(void) {	DEBUG(1, "Init MMC subsystem\n");		mmc_sysctl_header = register_sysctl_table(bus_dir_table, 0 );	tasklet_init(&g_mmc_dev.task,mmc_tasklet_action,(unsigned long)&g_mmc_dev);	g_mmc_dev.protocol = mmc_protocol_single_card;	proc_mmc_dir = proc_mkdir("mmc", proc_bus);	if ( proc_mmc_dir )		create_proc_read_entry("device", 0, proc_mmc_dir, mmc_proc_read_device, &g_mmc_dev);	mmc_pm_dev = pm_register(PM_UNKNOWN_DEV, PM_SYS_UNKNOWN, mmc_pm_callback);	#ifdef CONFIG_CEE	mmc_ldm_register();#endif /* CONFIG_CEE */ 	media_module.init();	return 0;}static void __exit mmc_exit(void){	DEBUG(1,"\n");	media_module.cleanup();	unregister_sysctl_table(mmc_sysctl_header);	tasklet_kill(&g_mmc_dev.task);	if ( proc_mmc_dir ) {		remove_proc_entry("device", proc_mmc_dir);		remove_proc_entry("mmc", proc_bus);	}	pm_unregister(mmc_pm_dev);	#ifdef CONFIG_CEE	mmc_ldm_unregister();#endif /* CONFIG_CEE */ }module_init(mmc_init);module_exit(mmc_exit);MODULE_LICENSE("GPL");

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲尤物在线视频观看| 精品欧美一区二区三区精品久久 | 欧美男女性生活在线直播观看| 最新热久久免费视频| 北条麻妃一区二区三区| 国产精品每日更新| 色综合天天综合网天天狠天天| 亚洲人精品午夜| 在线播放/欧美激情| 韩国一区二区视频| 欧美激情综合网| 色偷偷88欧美精品久久久| 亚洲精品视频在线观看免费| 欧美图片一区二区三区| 理论电影国产精品| 国产精品污污网站在线观看| 欧美性videosxxxxx| 裸体歌舞表演一区二区| 欧美激情一区不卡| 欧美日韩国产一二三| 国产在线精品不卡| 午夜精品一区二区三区电影天堂 | 欧美日韩在线免费视频| 蜜臀久久久99精品久久久久久| 精品播放一区二区| 91丨porny丨国产| 麻豆91小视频| 国产精品福利影院| 日韩三级av在线播放| 成人av在线看| 麻豆freexxxx性91精品| 亚洲色图视频网站| 欧美成人三级电影在线| 日本精品免费观看高清观看| 麻豆精品一二三| 亚洲欧美乱综合| 久久在线观看免费| 欧美日韩一区中文字幕| 高清在线成人网| 日韩精品色哟哟| 亚洲精品高清在线| 久久女同互慰一区二区三区| 欧美日韩久久不卡| 91啪亚洲精品| 丁香天五香天堂综合| 全部av―极品视觉盛宴亚洲| 亚洲日本va午夜在线影院| 2014亚洲片线观看视频免费| 欧美日韩国产一区二区三区地区| 国产福利不卡视频| 秋霞午夜鲁丝一区二区老狼| 一区二区三区自拍| 国产精品久久久久aaaa樱花 | 日韩一级精品视频在线观看| 欧美最猛黑人xxxxx猛交| 高清beeg欧美| 国产一区999| 另类专区欧美蜜桃臀第一页| 亚洲国产sm捆绑调教视频| 亚洲人成亚洲人成在线观看图片 | 亚洲乱码日产精品bd| 国产亚洲一二三区| 日韩欧美精品在线视频| 欧美巨大另类极品videosbest| 99国产精品一区| 国产成人8x视频一区二区| 国产一区福利在线| 精品在线亚洲视频| 麻豆精品久久精品色综合| 七七婷婷婷婷精品国产| 日本少妇一区二区| 三级成人在线视频| 亚洲高清一区二区三区| 亚洲国产精品一区二区www| 亚洲一区二区三区小说| 亚洲综合成人网| 一区二区三区不卡在线观看| 亚洲狠狠丁香婷婷综合久久久| 亚洲免费av网站| 亚洲精品国产a久久久久久 | 中文字幕一区二区日韩精品绯色| 久久久久久久久蜜桃| 国产欧美一区二区三区鸳鸯浴| 久久蜜桃av一区精品变态类天堂| 精品国产一区久久| 国产三级精品在线| 中文字幕在线视频一区| 亚洲欧美aⅴ...| 亚洲综合精品自拍| 日本成人在线电影网| 久草这里只有精品视频| 国产乱码精品一区二区三区忘忧草 | 一区二区三区小说| 亚洲国产精品嫩草影院| 美女性感视频久久| 国产在线不卡一卡二卡三卡四卡| 成人性生交大片免费看视频在线| 9i在线看片成人免费| 欧美午夜精品理论片a级按摩| 日韩欧美国产三级电影视频| 久久久精品天堂| 亚洲一二三专区| 美女久久久精品| 成人毛片老司机大片| 欧美性一区二区| 日韩一区二区在线观看| 国产精品久久毛片| 午夜精品久久久久久久蜜桃app| 麻豆视频观看网址久久| aaa亚洲精品一二三区| 欧美日韩一区二区在线视频| 久久综合资源网| 亚洲综合一区二区精品导航| 精品亚洲欧美一区| 99re8在线精品视频免费播放| 91麻豆精品国产91久久久更新时间| 国产性色一区二区| 亚洲国产一区二区三区| 国产一区二区三区综合| 欧洲av一区二区嗯嗯嗯啊| 337p粉嫩大胆色噜噜噜噜亚洲 | 国产一区二区按摩在线观看| 日本道免费精品一区二区三区| 日韩三级.com| 一区av在线播放| 国产成人免费av在线| 欧洲一区二区三区在线| 国产香蕉久久精品综合网| 亚洲国产美女搞黄色| 成人动漫一区二区| 欧美电影免费观看高清完整版在| 亚洲欧美一区二区不卡| 久久99九九99精品| 欧美日韩一级二级| 亚洲同性gay激情无套| 精彩视频一区二区| 制服视频三区第一页精品| 亚洲日本免费电影| 国产成人av网站| 日韩欧美久久一区| 亚洲尤物在线视频观看| av电影天堂一区二区在线观看| 亚洲精品在线电影| 日韩福利视频网| 欧美色中文字幕| 亚洲免费观看高清完整版在线观看熊| 国产麻豆一精品一av一免费| 7777女厕盗摄久久久| 亚洲自拍偷拍九九九| 99久久伊人久久99| 亚洲国产电影在线观看| 国产一区二区在线免费观看| 日韩三级免费观看| 婷婷综合久久一区二区三区| 欧美色图在线观看| 亚洲一二三区在线观看| 91福利社在线观看| 亚洲综合在线五月| 一本色道**综合亚洲精品蜜桃冫| 国产精品久久久久三级| www.66久久| 成人欧美一区二区三区在线播放| jizzjizzjizz欧美| 国产精品日产欧美久久久久| 成人福利电影精品一区二区在线观看| 国产三级久久久| 成人黄色大片在线观看| 国产精品全国免费观看高清 | 99re这里只有精品6| 欧美国产一区二区| 成人av网站在线观看免费| 中文乱码免费一区二区| 91亚洲永久精品| 亚洲国产综合人成综合网站| 欧美色男人天堂| 日韩av中文字幕一区二区三区| 欧美一级夜夜爽| 精品综合久久久久久8888| 国产日韩欧美高清在线| 99久久99精品久久久久久| 一区二区三区四区不卡在线 | 国产精品自在欧美一区| 久久久www成人免费毛片麻豆| 国产精品一区二区在线观看不卡 | 91精品国产综合久久精品| 青青草97国产精品免费观看| 日韩欧美黄色影院| 国产999精品久久| 亚洲人成网站影音先锋播放| 欧美亚洲免费在线一区| 美国十次了思思久久精品导航| 欧美精品一区二区三区久久久| 国产99久久久国产精品免费看| 综合色天天鬼久久鬼色| 欧美日韩免费一区二区三区 | 久久久噜噜噜久噜久久综合| 成人一区二区三区| 亚洲一二三四在线| 精品欧美一区二区在线观看| 91在线你懂得|