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

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

?? i2c-tomega8.c

?? linux下S3C2410的I2C總線的驅動
?? C
?? 第 1 頁 / 共 3 頁
字號:
/*    i2c-tomega8.c - i2c-bus driver, comunicate to mega8 MCU      Written by Richard R.Zhang    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/config.h>#include <linux/kernel.h>#include <linux/module.h>#include <linux/fs.h>#include <linux/slab.h>#include <linux/version.h>#if LINUX_KERNEL_VERSION >= KERNEL_VERSION(2,4,0)#include <linux/smp_lock.h>#endif /* LINUX_KERNEL_VERSION >= KERNEL_VERSION(2,4,0) */#ifdef CONFIG_DEVFS_FS#include <linux/devfs_fs_kernel.h>#endif/* If you want debugging uncomment: *//* #define DEBUG */#include <linux/init.h>#include <asm/uaccess.h>#include <linux/i2c.h>#include <linux/poll.h>#include <linux/delay.h>#include "dbg_msg.h"#include "i2c-tomega8.h"#include "cmd_kbd_mouse.h"/* debug macros */#undef DEBUG//#define DEBUG#ifdef DEBUG#define DPRINTK( x... )	printk("mcu: " ##x)#else#define DPRINTK( x... )#endifstatic void mega8_device_request (int devtype);static void mega8_device_release (int devtype);static int i2c_mega8_slvRcv( char *buf, int len, int begin);static int i2c_mega8_attach_adapter(struct i2c_adapter *adap);static int i2c_mega8_detach_client(struct i2c_client *client);static int i2c_mega8_command(struct i2c_client *client, unsigned int cmd, void *arg);static int __init i2c_mega8_init(void);static void i2c_mega8_cleanup(void);#define I2CDEV_ADAPS_MAX I2C_ADAP_MAXstatic struct i2c_adapter *i2cdev_adaps[I2CDEV_ADAPS_MAX];#ifdef CONFIG_DEVFS_FSstatic devfs_handle_t devfs_handle = NULL;#endifstatic struct i2c_driver i2c_mega8_driver = {	name:			"I2C Mega8 Driver",	id:				I2C_DRIVERID_I2CDEV,	flags:			I2C_DF_DUMMY,	attach_adapter:	i2c_mega8_attach_adapter,	detach_client:		i2c_mega8_detach_client,	command:		i2c_mega8_command,/*	inc_use:	NULL,	dec_use:	NULL, */};static struct i2c_client mega8_client = {	name:		"I2C Mega8",	id:			1,	flags:		0,	addr:		MEGA8_I2CADDRESS,	adapter:	NULL,	driver:		&i2c_mega8_driver,	slvRecvNotify:	i2c_mega8_slvRcv,	};#ifdef CONFIG_I2C_MEGA8_MATRIX_KEYBOARD/***************************//* Mega8 Keyboard Driver Start *//***************************/static void mega8_kbd_raw (I2C_kbd *kbdcode);static ssize_t mega8_kbd_read (struct file *file, unsigned char *buf, size_t count,  // +- modify                             loff_t *offset);static ssize_t mega8_kbd_write (struct file *file, const unsigned char *buf, size_t count,  //+-modify                             loff_t *offset);static int mega8_kbd_open (struct inode *inode, struct file *file);static int mega8_kbd_release (struct inode *inode, struct file *file);static unsigned int mega8_kbd_poll(struct file *filp, struct poll_table_struct *wait);#define KBD_MINOR	10#define KBD_NAME	"Mega8 Kbd"#define KEY_NULL	0#define KEY_DOWN	0x0#define KEY_UP		0x0080#define MAX_KBD_BUF	16	/* how many do we want to buffer */typedef unsigned char KBD_RET;typedef struct {	unsigned int kbdmode;		/*KEYSTATUS_UP KEYSTATUS_DOWN and KEYSTATUS_REPEAT*/	KBD_RET buf[MAX_KBD_BUF];		/* protect against overrun */	unsigned int head, tail;		/* head and tail for queued events */	wait_queue_head_t wq;	spinlock_t lock;	unsigned short key;} KBD_DEV;static int kbdmajor=0;static KBD_DEV kbddev;#ifdef  CONFIG_DEVFS_FSstatic devfs_handle_t kbd_devfs_handle;#endif#define BUF_HEAD	(kbddev.buf[kbddev.head])#define BUF_TAIL	(kbddev.buf[kbddev.tail])#define INCBUF(x,mod) 	((++(x)) & ((mod) - 1))static struct file_operations mega8_kbd_fops = {	owner:		THIS_MODULE,	read:		mega8_kbd_read,	write:		mega8_kbd_write,	open:		mega8_kbd_open,	release:		mega8_kbd_release,	poll:			mega8_kbd_poll,};typedef struct{	unsigned short keyraw;	unsigned short map2;}struct_KeyMap;static struct_KeyMap keycode_raw2map[]={/*F1*/		{0x30, 0x3b},/*F2*/		{0x28, 0x3c},/*F3*/		{0x20, 0x3d},/*F4*/		{0x18, 0x3e},/*F5*/		{0x10, 0x3f},/*F6*/		{0x08, 0x40},/*F7*/		{0x2f, 0x41},/*F8*/		{0x27, 0x42},/*F9*/		{0x1f, 0x43},/*F10*/		{0x17, 0x44},/*F11*/		{0x0f, 0x57},/*F12*/		{0x07, 0x58},/*1*/		{0x32, 0x02},/*2*/		{0x2a, 0x03},/*3*/		{0x22, 0x04},/*4*/		{0x35, 0x05},/*5*/		{0x2d, 0x06},/*6*/		{0x25, 0x07},/*7*/		{0x36, 0x08},/*8*/		{0x2e, 0x09},/*9*/		{0x26, 0x0a},/*0*/		{0x29, 0x0b},/*.*/		{0x31, 0x53},/*+*/		{0x19, 0x4e},/*-*/		{0x1a, 0x4a},/***/		{0x1d, 0x37},/* / */		{0x1e, 0xe035},/*=*/		{0x21, 0x0d},/*up*/		{0x0a, 0xe048},/*dwn*/		{0x09, 0xe050},/*lft*/		{0x11, 0xe04b},/*rgt*/		{0x01, 0xe04d},/*pgu*/		{0x16, 0xe049},/*pgd*/		{0x15, 0xe051},/*entr*/	{0x0d, 0x1c},/*BKSP*/	{0x0e, 0x0e},/*ESC*/		{0X06, 0X01},};static unsigned short keycode_map[64];#if 0={0x0000, 0x0000, 0x0000, 0x003c, 0x003d, 0x003e, 0x003f, 0x0040,	/*  0 -  7 */0x003b, 0x0000, 0x0000, 0x0042, 0x0043, 0x0044, 0x0057, 0x0058,	/*  8 - 15 */0x0041, 0x0008, 0x0000, 0x000a, 0x0035, 0xe049, 0x000e, 0x0001,	/* 16 - 23 */0x0009, 0x0005, 0x0000, 0x0007, 0x0037, 0xe051, 0x001c, 0x0000,	/* 24 - 31 */0x0006, 0x0002, 0x0000, 0x0004, 0x000c, 0x0000, 0xe048, 0x0000,	/* 32 - 39 */0x0003, 0x0034, 0x0000, 0x000d, 0x004e, 0xe04b, 0xe050, 0xe04d,	/* 40 - 47 */0x000b, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,	/* 48 - 50 */};#endif#define	CODE_MAP_SIZE (sizeof(keycode_map) / sizeof(unsigned short))static int mega8_kbd_convert (unsigned char originkey){	unsigned char pure = originkey & 0x7f;	unsigned short act = (originkey & 0x80) ? KEY_DOWN : KEY_UP;	if ( pure > CODE_MAP_SIZE)		return -1;	kbddev.key= keycode_map[pure] | act;	DPRINTK ("key code :%x\t%x\n",originkey,kbddev.key);	return 0;}static void mega8_kbd_raw (I2C_kbd *kbdcode){	int need = 1, empty;	unsigned char *pcode =(unsigned char *)&(kbddev.key);	if (!kbdcode)		return;	if (mega8_kbd_convert (kbdcode->key) < 0)		return ;	if (kbddev.key & 0xf000){		need = 2;	}	DPRINTK ("driver->code:0x%x\n", kbddev.key);	if (kbddev.head > kbddev.tail)		empty = MAX_KBD_BUF - (kbddev.head - kbddev.tail);	else if (kbddev.head < kbddev.tail)		empty = MAX_KBD_BUF - (kbddev.head + MAX_KBD_BUF - kbddev.tail);	else		empty = MAX_KBD_BUF;	DPRINTK ("need:%d\tempty:%d\n", need, empty);	if ( empty < need )		return;	DPRINTK ("push L:%x\n", pcode[0]);	DPRINTK ("push H:%x\n", pcode[1]);	if (kbddev.key & 0xf000){		BUF_HEAD = pcode[1];		kbddev.head = INCBUF(kbddev.head, MAX_KBD_BUF);	}	BUF_HEAD = pcode[0];	kbddev.head = INCBUF(kbddev.head, MAX_KBD_BUF);	DPRINTK ("head:%d\ttail:%d\n", kbddev.head, kbddev.tail);	wake_up_interruptible(&(kbddev.wq));}static KBD_RET kbdRead(void){	KBD_RET  kbd_ret;	spin_lock_irq(&(kbddev.lock));	kbd_ret= BUF_TAIL;	kbddev.tail = INCBUF(kbddev.tail, MAX_KBD_BUF);	spin_unlock_irq(&(kbddev.lock));	return kbd_ret;}static unsigned int mega8_kbd_poll(struct file *filp, struct poll_table_struct *wait){  poll_wait(filp, &(kbddev.wq), wait);  return (kbddev.head == kbddev.tail) ? 0 : (POLLIN | POLLRDNORM); }static ssize_t mega8_kbd_read (struct file *file, unsigned char *buf, size_t count,                            loff_t *offset){	KBD_RET kbd_ret;retry: 	if (kbddev.head != kbddev.tail) {		kbd_ret = kbdRead();		copy_to_user(buf, (char *)&kbd_ret, sizeof(KBD_RET));		return sizeof(KBD_RET);	} else {		if (file->f_flags & O_NONBLOCK)			return -EAGAIN;		interruptible_sleep_on(&(kbddev.wq));		if (signal_pending(current))			return -ERESTARTSYS;		goto retry;	}	return sizeof(KBD_RET);}static ssize_t mega8_kbd_write (struct file *file, const unsigned char *buf, size_t count,                             loff_t *offset){	return -1;}static int mega8_kbd_release (struct inode *inode, struct file *file){	mega8_device_release (DTYPE_MKEYB);	return 0;}static int mega8_kbd_open (struct inode *inode, struct file *file){/*	if (!mega8_kbd_client->adapter)		return -ENODEV;	if (mega8_kbd_client->adapter->inc_use)		mega8_kbd_client->adapter->inc_use (mega8_kbd_client->adapter);*/	kbddev.head = kbddev.tail = 0;	kbddev.kbdmode= KEY_NULL;	init_waitqueue_head(&(kbddev.wq));	DPRINTK( "opened\n");	mega8_device_request (DTYPE_MKEYB);	return 0;}#ifdef CONFIG_DEVFS_FSstatic devfs_handle_t mega8_kbd_init (devfs_handle_t i2c_root)#elsestatic int mega8_kbd_init ()#endif{	int ret, i;	for(i=0;i<sizeof(keycode_raw2map)/sizeof(keycode_raw2map[0]);i++){		keycode_map[keycode_raw2map[i].keyraw]=keycode_raw2map[i].map2;	}#ifdef  DEBUG	DPRINTK ( "key map \n");	for ( i = 0; i < 8; i ++){		int j;		for (j = 0; j < 8; j++){			int index = i * 8 + j;			DPRINTK ("%d,0x%x  ", index, keycode_map[index]);		}		DPRINTK ("\n");	}#endif		ret = register_chrdev(0, KBD_NAME, &mega8_kbd_fops);	if (ret < 0) {		DPRINTK(KBD_NAME" can't be registered\n");#ifdef CONFIG_DEVFS_FS		return NULL;#else		return ret;#endif	}	kbdmajor = ret;#ifdef CONFIG_DEVFS_FS	kbd_devfs_handle = devfs_register (i2c_root, "kbd",			DEVFS_FL_DEFAULT, kbdmajor, KBD_MINOR,			S_IFCHR | S_IRUSR | S_IWUSR,			&mega8_kbd_fops, NULL);#endif	DPRINTK("Registered '%s' as minor %d\n","kbd", KBD_MINOR);#ifdef CONFIG_DEVFS_FS	return kbd_devfs_handle;#else	return 0;#endif}static void mega8_kbd_exit (void){#ifdef	CONFIG_DEVFS_FS	devfs_unregister(kbd_devfs_handle);	kbd_devfs_handle = NULL;#endif	unregister_chrdev(kbdmajor, KBD_NAME);}#endif //#ifdef CONFIG_I2C_MEGA8_MATRIX_KEYBOARD#ifdef CONFIG_I2C_MEGA8_IC_CARD/***************************//* Mega8 ic card Driver Start *//***************************/static void mega8_iccard_raw (I2C_ICCard*iccardframe);#if 0static unsigned int mega8_iccard_poll(struct file *filp, struct poll_table_struct *wait);#endifstatic loff_t mega8_iccard_llseek (struct file *file, loff_t offset, int orig);static int mega8_iccard_ioctl (struct inode *inode, struct file *file, unsigned int cmd, unsigned long arg);static ssize_t mega8_iccard_read (struct file *file, char *buf, size_t count,  // +- modify                             loff_t *offset);static ssize_t mega8_iccard_write (struct file *file, const char *buf, size_t count,  //+-modify                             loff_t *offset);static int mega8_iccard_open (struct inode *inode, struct file *file);static int mega8_iccard_release (struct inode *inode, struct file *file);#define ICCARD_24C02_MINOR	ICCARD_TYPE_AT24C02#define ICCARD_24C04_MINOR	ICCARD_TYPE_AT24C04#define ICCARD_24C08_MINOR	ICCARD_TYPE_AT24C08#define ICCARD_24C16_MINOR	ICCARD_TYPE_AT24C16#define ICCARD_24C32_MINOR	ICCARD_TYPE_AT24C32#define ICCARD_24C64_MINOR	ICCARD_TYPE_AT24C64#define ICCARD_4442_MINOR	ICCARD_TYPE_SLE4442#define ICCARD_24C02_NAME	"iccard24c02"#define ICCARD_24C04_NAME	"iccard24c04"#define ICCARD_24C08_NAME	"iccard24c08"#define ICCARD_24C16_NAME	"iccard24c16"#define ICCARD_24C32_NAME	"iccard24c32"#define ICCARD_24C64_NAME	"iccard24c64"#define ICCARD_4442_NAME	"iccard4442"#define ICCARD_NAME	"iccard"typedef struct {	ICCARD_data iccard_data;	int lasterrcode;	wait_queue_head_t wq;	spinlock_t lock;}ICCARD_DEV;typedef struct _iccard_dev_info{	unsigned char minor;	char *devname;	loff_t memsize;}ICCARD_DEV_INFO;ICCARD_DEV_INFO iccarddevinfo[]={	{ICCARD_24C02_MINOR, ICCARD_24C02_NAME, 256},	{ICCARD_24C04_MINOR, ICCARD_24C04_NAME, 512},	{ICCARD_24C08_MINOR, ICCARD_24C08_NAME, 1024},	{ICCARD_24C16_MINOR, ICCARD_24C16_NAME, 2048},	{ICCARD_24C32_MINOR, ICCARD_24C32_NAME, 4096},	{ICCARD_24C64_MINOR, ICCARD_24C64_NAME, 8192},	{ICCARD_4442_MINOR, ICCARD_4442_NAME, 256},};#define	DEVNM_SIZE	(sizeof (iccarddevinfo) / sizeof (ICCARD_DEV_INFO))static devfs_handle_t iccard_devfs_handle[DEVNM_SIZE];static ICCARD_DEV iccarddev;atomic_t atom_cnt;static int iccardmajor=0;static struct file_operations mega8_iccard_fops = {	owner:		THIS_MODULE,	llseek:		mega8_iccard_llseek,	read:		mega8_iccard_read,	write:		mega8_iccard_write,	open:		mega8_iccard_open,	release:		mega8_iccard_release,#if 0	poll:			mega8_iccard_poll,#endif	ioctl:		mega8_iccard_ioctl,};static void mega8_iccard_raw (I2C_ICCard* iccardframe){	if (!iccardframe)		return;	DPRINTK ("iccardframe->cmd:0x%x\n", iccardframe->cmd);	if(iccardframe->cmd==CMD_ICC_FAILED){		iccarddev.lasterrcode=iccardframe->iccard_errcode;		DPRINTK ("iccard failed code:0x%x\n", iccarddev.lasterrcode);	}	else{		iccarddev.lasterrcode=ICC_FAILED_NULL;		if(iccardframe->cmd==CMD_ICC_WRITE){			if(iccarddev.iccard_data.address == iccardframe->iccard_addr				&& iccarddev.iccard_data.cnt == iccardframe->iccard_cnt){				DPRINTK ("iccard write ok:address=0x%x, count=%d\n", 					iccarddev.iccard_data.address, iccarddev.iccard_data.cnt);			}			else{				DPRINTK ("iccard write error: address=0x%x vs 0x%x\n", iccarddev.iccard_data.address, 					iccardframe->iccard_addr);				iccarddev.lasterrcode=ICC_FAILED_WRITEERR;			}		}		else if(iccardframe->cmd==CMD_ICC_READ){			if(iccarddev.iccard_data.address == iccardframe->iccard_addr				&& iccarddev.iccard_data.cnt == iccardframe->iccard_cnt){				DPRINTK ("iccard read ok:address=0x%x, count=%d\n", 					iccarddev.iccard_data.address, iccarddev.iccard_data.cnt);				memcpy(iccarddev.iccard_data.buffer, iccardframe->iccard_buf, iccarddev.iccard_data.cnt);			}			else{				DPRINTK ("iccard read error: address=0x%x vs 0x%x\n", iccarddev.iccard_data.address, 					iccardframe->iccard_addr);				iccarddev.lasterrcode=ICC_FAILED_READERR;			}		}		else if (iccardframe->cmd == CMD_ICC_VERIFY ){			unsigned char retcode = iccardframe->iccard_errcode;			if (retcode){				iccarddev.lasterrcode = ICC_FAILED_VERIFYERR;			}else{				iccarddev.lasterrcode = ICC_FAILED_NULL;			}		}	}	wake_up_interruptible(&(iccarddev.wq));}#if 0static unsigned int mega8_iccard_poll(struct file *filp, struct poll_table_struct *wait){	poll_wait(filp, &(iccarddev.wq), wait);	return iccarddev.lasterrcode; }#endifstatic loff_t mega8_iccard_llseek(struct file *file,loff_t offset, int orig){	ICCARD_DEV_INFO *iccd= (ICCARD_DEV_INFO*)file->private_data;	switch (orig) {	case 0:		/* SEEK_SET */		file->f_pos = offset;		break;	case 1:		/* SEEK_CUR */		file->f_pos += offset;		break;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
中文字幕中文乱码欧美一区二区| 亚洲一区二区三区四区五区黄| 亚洲情趣在线观看| 免费精品99久久国产综合精品| 成人综合婷婷国产精品久久免费| 日韩一区二区三区免费观看 | 成人在线视频首页| 欧美一区二区性放荡片| 一区二区三区.www| a美女胸又www黄视频久久| 欧美成人福利视频| 日韩成人午夜精品| 欧美天堂一区二区三区| 国产精品福利av| 激情av综合网| 日韩一区二区三| 丝袜国产日韩另类美女| 在线观看日韩av先锋影音电影院| 国产精品久久久久一区二区三区共| 久久99热国产| 日韩欧美你懂的| 欧美96一区二区免费视频| 欧美日韩免费电影| 亚洲午夜久久久久| 欧美日韩精品一区视频| 亚洲一区二区三区四区不卡| 在线影院国内精品| 亚洲精品成人天堂一二三| 91农村精品一区二区在线| 亚洲国产成人午夜在线一区| 丁香婷婷综合激情五月色| 2020国产成人综合网| 国产主播一区二区三区| 2021久久国产精品不只是精品| 加勒比av一区二区| 欧美精品一区二区久久久| 黄色资源网久久资源365| 精品久久久久一区| 国产成人自拍高清视频在线免费播放| 精品国产乱码久久久久久夜甘婷婷| 麻豆视频观看网址久久| 久久综合久色欧美综合狠狠| 国产成人在线免费| 亚洲一区二区欧美激情| 色婷婷国产精品综合在线观看| 一区二区在线看| 精品视频999| 久久99蜜桃精品| 国产亚洲一本大道中文在线| 成人黄色免费短视频| 一区二区三区四区亚洲| 欧美一卡二卡在线观看| 丰满亚洲少妇av| 亚洲女女做受ⅹxx高潮| 在线播放/欧美激情| 国产麻豆精品在线观看| 亚洲美女屁股眼交3| 欧美一区二区在线视频| 成人激情小说网站| 午夜久久久久久久久久一区二区| 日韩欧美国产综合| 91网站在线播放| 精品一区二区三区日韩| **性色生活片久久毛片| 欧美日韩五月天| 国产91综合一区在线观看| 一区二区三区丝袜| 精品久久久久久最新网址| gogo大胆日本视频一区| 蜜桃精品视频在线观看| 亚洲天堂久久久久久久| 精品乱码亚洲一区二区不卡| 91在线国产福利| 精品亚洲成av人在线观看| ㊣最新国产の精品bt伙计久久| 91精品蜜臀在线一区尤物| 成人激情综合网站| 黄色成人免费在线| 日韩精品五月天| 亚洲免费在线观看视频| 久久久久一区二区三区四区| 欧美日韩国产一区二区三区地区| 国产成人综合在线| 久久av老司机精品网站导航| 亚洲精选一二三| 国产精品免费免费| 久久综合给合久久狠狠狠97色69| 欧美日韩一区二区三区四区| 成人午夜又粗又硬又大| 老汉av免费一区二区三区| 一区二区三区精密机械公司| 中文字幕免费不卡| 国产午夜精品久久久久久久 | 成人精品视频一区二区三区 | 亚洲第一二三四区| 亚洲日本一区二区| 欧美韩国一区二区| 精品奇米国产一区二区三区| 91精品国产欧美一区二区成人| 91成人在线精品| 一本久道久久综合中文字幕| 高清不卡一二三区| 国产中文字幕一区| 国产一区福利在线| 蜜桃视频一区二区| 美女爽到高潮91| 蜜臀av在线播放一区二区三区| 午夜久久电影网| 午夜精品影院在线观看| 亚洲一区二区三区美女| 亚洲欧美日本在线| 亚洲免费观看在线视频| 亚洲人吸女人奶水| 亚洲男同性视频| 亚洲人成在线播放网站岛国| 亚洲精品一卡二卡| 亚洲自拍偷拍图区| 亚洲gay无套男同| 五月综合激情网| 色综合中文综合网| 久久99精品视频| 麻豆精品在线播放| 精品一区二区三区在线观看国产 | 一二三四社区欧美黄| 亚洲男人天堂av| 亚洲激情六月丁香| 亚洲国产日韩综合久久精品| 香港成人在线视频| 久久精品国产澳门| 国产精品一区二区x88av| 成人av在线观| 欧美中文字幕一区二区三区 | 欧美天堂一区二区三区| 777亚洲妇女| 2020日本不卡一区二区视频| 国产精品久久久久一区二区三区共| 亚洲人成精品久久久久| 亚洲综合清纯丝袜自拍| 麻豆精品一二三| 成人性生交大片免费看中文网站| 色婷婷av久久久久久久| 91.麻豆视频| 国产女主播视频一区二区| 亚洲免费观看高清在线观看| 日韩精品欧美精品| 粉嫩在线一区二区三区视频| 欧美综合在线视频| 久久人人爽人人爽| 一区二区不卡在线播放| 美女被吸乳得到大胸91| 91网页版在线| 精品卡一卡二卡三卡四在线| 亚洲乱码一区二区三区在线观看| 日本欧美在线看| 99riav一区二区三区| 日韩精品专区在线影院观看| 国产精品国产自产拍高清av| 日本中文一区二区三区| 成人永久免费视频| 91精品国产91久久久久久一区二区 | 久久久www成人免费无遮挡大片 | 国产精品无遮挡| 午夜精品成人在线视频| 成人美女视频在线观看18| 在线成人免费观看| 亚洲欧美一区二区在线观看| 精品一区二区三区香蕉蜜桃| 欧美网站一区二区| 国产精品久久久久三级| 九一久久久久久| 欧美优质美女网站| 中日韩av电影| 国内精品国产成人| 欧美一卡二卡三卡| 亚洲一区二区三区影院| 99久久久国产精品| 国产色一区二区| 精品一区二区三区的国产在线播放 | 亚洲福利视频一区| 99免费精品在线观看| 久久精品一区二区三区四区| 青青草国产精品亚洲专区无| 欧美影视一区二区三区| 日韩一区在线免费观看| 国产成人啪免费观看软件| 精品人在线二区三区| 美女看a上一区| 日韩一级视频免费观看在线| 午夜精品久久久久久久久| 色哟哟日韩精品| 日韩码欧中文字| 96av麻豆蜜桃一区二区| 成人免费在线视频观看| 成人午夜视频网站| 亚洲国产精品精华液ab| 国产成a人亚洲精品| 国产日韩欧美亚洲| 成人黄色在线看| 国产精品九色蝌蚪自拍| 99久久99久久精品免费观看|