日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 运维知识 > linux >内容正文

linux

Linux下tty串口驱动数据的发送、接收过程源码实例详解

發(fā)布時(shí)間:2024/8/1 linux 49 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Linux下tty串口驱动数据的发送、接收过程源码实例详解 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

簡(jiǎn)介

本文主要時(shí)講解tty驅(qū)動(dòng)文件的打開(kāi)、數(shù)據(jù)的發(fā)送、數(shù)據(jù)的接收相關(guān)的源碼解析,從用戶層到硬件層的源碼追蹤過(guò)程。
具體的讀寫(xiě)操作可先大致看一下流程圖,下面的源碼分析也依然是圍繞該流程進(jìn)行函數(shù)追蹤。

一、tty數(shù)據(jù)接收流程分析:
對(duì)于tty設(shè)備的打開(kāi)操作,即用戶調(diào)用read函數(shù)來(lái)讀取設(shè)備的文件的數(shù)據(jù),首先經(jīng)過(guò)vfs層、字符設(shè)備驅(qū)動(dòng)層,到達(dá)tty_open()函數(shù),經(jīng)過(guò)tty_core層、serial_core等層后,主要完成一下工作:
1、首先通過(guò)dev_t,再tty_driver鏈表中查找對(duì)應(yīng)的驅(qū)動(dòng),并返回本設(shè)備在該driver中的index即序號(hào);
2、初始化tty_struct,建立tty_struct和tty_driver之間的關(guān)聯(lián),經(jīng)tty_struct->ldisc、tty_struct->port進(jìn)行賦值,最后調(diào)用tty_struct->ld->ops->open()設(shè)置通訊參數(shù):速率speed、校驗(yàn)位flag等等;
3、初始化tty_file_private,并將priv添加到tty_struct->tty_files;
4、調(diào)用tty_struct.ops.open()即n_tty_ops.open
=n_tty_open完成設(shè)備的打開(kāi)工作,此時(shí)已在tty線路規(guī)程,最終調(diào)用uart_startup();
打開(kāi)文件流程圖如下:
從流程圖中分析,再tty_read()中,代碼先通過(guò)tty_struct()得到調(diào)用線路規(guī)程中的read操作:ld->ops->read(),即n_tty_read(),具體代碼如下:

/*** n_tty_read - read function for tty* @tty: tty device* @file: file object* @buf: userspace buffer pointer* @nr: size of I/O** Perform reads for the line discipline. We are guaranteed that the* line discipline will not be closed under us but we may get multiple* parallel readers and must handle this ourselves. We may also get* a hangup. Always called in user context, may sleep.** This code must be sure never to sleep through a hangup.*/static ssize_t n_tty_read(struct tty_struct *tty, struct file *file,unsigned char __user *buf, size_t nr) {unsigned char __user *b = buf;DECLARE_WAITQUEUE(wait, current);int c;int minimum, time;ssize_t retval = 0;ssize_t size;long timeout;unsigned long flags;int packet;do_it_again:BUG_ON(!tty->read_buf);c = job_control(tty, file);if (c < 0)return c;minimum = time = 0;timeout = MAX_SCHEDULE_TIMEOUT;if (!tty->icanon) { //默認(rèn)為icanon則該if不會(huì)執(zhí)行time = (HZ / 10) * TIME_CHAR(tty);minimum = MIN_CHAR(tty);if (minimum) {if (time)tty->minimum_to_wake = 1;else if (!waitqueue_active(&tty->read_wait) ||(tty->minimum_to_wake > minimum))tty->minimum_to_wake = minimum;} else {timeout = 0;if (time) {timeout = time;time = 0;}tty->minimum_to_wake = minimum = 1;}}/** Internal serialization of reads.*/if (file->f_flags & O_NONBLOCK) {if (!mutex_trylock(&tty->atomic_read_lock))return -EAGAIN;} else {if (mutex_lock_interruptible(&tty->atomic_read_lock))return -ERESTARTSYS;}packet = tty->packet; //=0,未初始化該成員//等待隊(duì)列的操作add_wait_queue(&tty->read_wait, &wait);while (nr) {/* First test for status change. */if (packet && tty->link->ctrl_status) {//packet為0,if不滿足unsigned char cs;if (b != buf)break;spin_lock_irqsave(&tty->link->ctrl_lock, flags);cs = tty->link->ctrl_status;tty->link->ctrl_status = 0;spin_unlock_irqrestore(&tty->link->ctrl_lock, flags);if (tty_put_user(tty, cs, b++)) {retval = -EFAULT;b--;break;}nr--;break;}/* This statement must be first before checking for inputso that any interrupt will set the state back toTASK_RUNNING. */set_current_state(TASK_INTERRUPTIBLE);if (((minimum - (b - buf)) < tty->minimum_to_wake) &&((minimum - (b - buf)) >= 1))tty->minimum_to_wake = (minimum - (b - buf));//此if保證用戶空間的讀進(jìn)程一直要等待數(shù)據(jù)可讀,否則一直睡眠if (!input_available_p(tty, 0)) {if (test_bit(TTY_OTHER_CLOSED, &tty->flags)) {retval = -EIO;break;}if (tty_hung_up_p(file))break;if (!timeout)break;if (file->f_flags &O_NONBLOCK) {//無(wú)數(shù)據(jù)可讀、且非阻塞打開(kāi),代表設(shè)備正“忙”,則直接返回退出retval = -EAGAIN;break;}if (signal_pending(current)) {//本線程是因?yàn)樾盘?hào)而被喚醒,不是由于數(shù)據(jù)可讀,也要直接返回退出retval = -ERESTARTSYS;break;}/* FIXME: does n_tty_set_room need locking ? */n_tty_set_room(tty);timeout = schedule_timeout(timeout);continue;}__set_current_state(TASK_RUNNING);/* Deal with packet mode. */if (packet && b == buf) {if (tty_put_user(tty, TIOCPKT_DATA, b++)) {retval = -EFAULT;b--;break;}nr--;}if (tty->icanon) {/* N.B. avoid overrun if nr == 0 */while (nr && tty->read_cnt) {int eol;eol = test_and_clear_bit(tty->read_tail,tty->read_flags);c = tty->read_buf[tty->read_tail];spin_lock_irqsave(&tty->read_lock, flags);tty->read_tail = ((tty->read_tail+1) &(N_TTY_BUF_SIZE-1));tty->read_cnt--;if (eol) {/* this test should be redundant:* we shouldn't be reading data if* canon_data is 0*/if (--tty->canon_data < 0)tty->canon_data = 0;}spin_unlock_irqrestore(&tty->read_lock, flags);if (!eol || (c != __DISABLED_CHAR)) {if (tty_put_user(tty, c, b++)) {retval = -EFAULT;b--;break;}nr--;}if (eol) {tty_audit_push(tty);break;}}if (retval)break;} else {int uncopied;/* The copy function takes the read lock and handleslocking internally for this case */uncopied = copy_from_read_buf(tty, &b, &nr);uncopied += copy_from_read_buf(tty, &b, &nr);//投遞數(shù)據(jù)到用戶空間if (uncopied) {retval = -EFAULT;break;}}/* If there is enough space in the read buffer now, let the* low-level driver know. We use n_tty_chars_in_buffer() to* check the buffer, as it now knows about canonical mode.* Otherwise, if the driver is throttled and the line is* longer than TTY_THRESHOLD_UNTHROTTLE in canonical mode,* we won't get any more characters.*/if (n_tty_chars_in_buffer(tty) <= TTY_THRESHOLD_UNTHROTTLE) {n_tty_set_room(tty);check_unthrottle(tty);}if (b - buf >= minimum)//由于minimum=0,因此只要有1個(gè)以上的數(shù)據(jù)就返回break;if (time)timeout = time;}mutex_unlock(&tty->atomic_read_lock);remove_wait_queue(&tty->read_wait, &wait);//刪除隊(duì)列if (!waitqueue_active(&tty->read_wait))tty->minimum_to_wake = minimum;__set_current_state(TASK_RUNNING);size = b - buf;if (size) {retval = size;if (nr)clear_bit(TTY_PUSH, &tty->flags);} else if (test_and_clear_bit(TTY_PUSH, &tty->flags))goto do_it_again;n_tty_set_room(tty);return retval; }

該函數(shù)就是典型的等待隊(duì)列使用套路:先查詢數(shù)據(jù)是否可用,不可用就讓出cpu,等待其他線程(即終端ISR中間調(diào)用flush_to_ldisc())來(lái)喚醒。當(dāng)硬件接收到數(shù)據(jù)后,在中斷處理之后,會(huì)將數(shù)據(jù)投遞都ldata.read_buf[]中,然后喚醒該線程,之后本線程就調(diào)用copy_from_read_buf()完成數(shù)據(jù)成ldisc層(ldata.read_buf[])至應(yīng)用程序緩沖區(qū)的復(fù)制。

static int s3c24xx_serial_startup(struct uart_port *port) {struct s3c24xx_uart_port *ourport = to_ourport(port);int ret;dbg("s3c24xx_serial_startup: port=%p (%08lx,%p)\n",port->mapbase, port->membase);rx_enabled(port) = 1; // 使能接收ret = request_irq(ourport->rx_irq, s3c24xx_serial_rx_chars, 0,s3c24xx_serial_portname(port), ourport); // 為數(shù)據(jù)接收注冊(cè)中斷程序if (ret != 0) {printk(KERN_ERR "cannot get irq %d\n", ourport->rx_irq);return ret;}ourport->rx_claimed = 1; // 使能發(fā)送dbg("requesting tx irq...\n");tx_enabled(port) = 1;ret = request_irq(ourport->tx_irq, s3c24xx_serial_tx_chars, 0,s3c24xx_serial_portname(port), ourport); // 為數(shù)據(jù)發(fā)送注冊(cè)中斷程序if (ret) {printk(KERN_ERR "cannot get irq %d\n", ourport->tx_irq);goto err;}ourport->tx_claimed = 1;dbg("s3c24xx_serial_startup ok\n");/* the port reset code should have done the correct* register setup for the port controls */if (port->line == 2) {s3c2410_gpio_cfgpin(S3C2410_GPH(6), S3C2410_GPH6_TXD2);s3c2410_gpio_pullup(S3C2410_GPH(6), 1);s3c2410_gpio_cfgpin(S3C2410_GPH(7), S3C2410_GPH7_RXD2);s3c2410_gpio_pullup(S3C2410_GPH(7), 1);}return ret;err:s3c24xx_serial_shutdown(port);return ret; }

上面函數(shù)主要完成下面的工作:
1、使能接收rx_enabled
2、為數(shù)據(jù)接收注冊(cè)中斷程序request_irq
3、使能發(fā)送tx_enabled
4、為數(shù)據(jù)發(fā)送注冊(cè)中斷程序request_irq

中斷處理程序喚醒底層線程:
串口接收數(shù)據(jù)是通過(guò)s3c24xx_serial_rx_chars在中斷里面進(jìn)行的

static irqreturn_t s3c24xx_serial_rx_chars(int irq, void *dev_id) {struct s3c24xx_uart_port *ourport = dev_id;struct uart_port *port = &ourport->port;struct tty_struct *tty = port->state->port.tty;unsigned int ufcon, ch, flag, ufstat, uerstat;int max_count = 64;while (max_count-- > 0) {ufcon = rd_regl(port, S3C2410_UFCON);ufstat = rd_regl(port, S3C2410_UFSTAT);if (s3c24xx_serial_rx_fifocnt(ourport, ufstat) == 0)break;uerstat = rd_regl(port, S3C2410_UERSTAT);ch = rd_regb(port, S3C2410_URXH);if (port->flags & UPF_CONS_FLOW) {int txe = s3c24xx_serial_txempty_nofifo(port);if (rx_enabled(port)) {if (!txe) {rx_enabled(port) = 0;continue;}} else {if (txe) {ufcon |= S3C2410_UFCON_RESETRX;wr_regl(port, S3C2410_UFCON, ufcon);rx_enabled(port) = 1;goto out;}continue;}}/* insert the character into the buffer */flag = TTY_NORMAL;port->icount.rx++;if (unlikely(uerstat & S3C2410_UERSTAT_ANY)) {dbg("rxerr: port ch=0x%02x, rxs=0x%08x\n",ch, uerstat);/* check for break */if (uerstat & S3C2410_UERSTAT_BREAK) {dbg("break!\n");port->icount.brk++;if (uart_handle_break(port))goto ignore_char;}if (uerstat & S3C2410_UERSTAT_FRAME)port->icount.frame++;if (uerstat & S3C2410_UERSTAT_OVERRUN)port->icount.overrun++;uerstat &= port->read_status_mask;if (uerstat & S3C2410_UERSTAT_BREAK)flag = TTY_BREAK;else if (uerstat & S3C2410_UERSTAT_PARITY)flag = TTY_PARITY;else if (uerstat & (S3C2410_UERSTAT_FRAME |S3C2410_UERSTAT_OVERRUN))flag = TTY_FRAME;}if (uart_handle_sysrq_char(port, ch))goto ignore_char;uart_insert_char(port, uerstat, S3C2410_UERSTAT_OVERRUN,ch, flag);ignore_char:continue;}tty_flip_buffer_push(tty);out:return IRQ_HANDLED; }

該部分源碼分析:
1、讀取UFCON寄存器;
2、讀取UFSTAT寄存器;
3、然后讀取接收f(shuō)ifo的數(shù)據(jù)量s3c24xx_serial_rx_fifocnt(ourport, ufstat),如果數(shù)據(jù)量為0,則退出處理;
4、讀取錯(cuò)誤狀態(tài)寄存器uerstat = rd_regl(port, S3C2410_UERSTAT);
5、然后取出接收到的字符ch = rd_regb(port, S3C2410_URXH);
6、if (port->flags & UPF_CONS_FLOW),這一段代碼其實(shí)是在做流控的處理;
7、if (unlikely(uerstat & S3C2410_UERSTAT_ANY)) ,這段代碼判斷錯(cuò)誤發(fā)生的類(lèi)型;
8、if (uart_handle_sysrq_char(port, ch))如果接收到的是sysrq這個(gè)特殊字符,則進(jìn)行特殊處理;
9、uart_insert_char(port, uerstat, S3C2410_UERSTAT_OVERRUN,ch, flag);這一步把接收到的字符送到串口驅(qū)動(dòng)的buf中,這里面大循環(huán)就結(jié)束了;
10、tty_flip_buffer_push(tty);把串口驅(qū)動(dòng)中的數(shù)據(jù)送到read_buf中;

tty_flip_buffer_push 有兩種方式調(diào)用到 flush_to_ldisc ,一種直接調(diào)用,另一種使用延時(shí)工作隊(duì)列,在很久很久以前,我們初始化了這么一個(gè)工作隊(duì)列~(tty_open 初始化 tty_struct 時(shí)前面有提到)

void tty_flip_buffer_push(struct tty_struct *tty) {unsigned long flags;spin_lock_irqsave(&tty->buf.lock, flags);if (tty->buf.tail != NULL)tty->buf.tail->commit = tty->buf.tail->used;spin_unlock_irqrestore(&tty->buf.lock, flags);if (tty->low_latency)flush_to_ldisc(&tty->buf.work.work);elseschedule_delayed_work(&tty->buf.work, 1); }

二、數(shù)據(jù)發(fā)送過(guò)程分析:
寫(xiě)過(guò)程也可以分為兩個(gè)線程,但與讀過(guò)程又有區(qū)別。
1、對(duì)于傳統(tǒng)的串口硬件驅(qū)動(dòng),發(fā)送中斷平時(shí)都是關(guān)閉的,只有用戶執(zhí)行寫(xiě)操作后,才會(huì)主動(dòng)打開(kāi)TX中斷,同時(shí),TX-ISR里自動(dòng)檢測(cè)xmit狀態(tài),為空則主動(dòng)關(guān)閉TX中斷;
2、對(duì)于由用戶發(fā)起的寫(xiě)進(jìn)程:首先將數(shù)據(jù)從用戶buf填充至uart_state->xmit.buf[];
3、如果用戶buf數(shù)據(jù)過(guò)大(>page_size),則wait_woken()該線程,與此同時(shí),只要xmit已滿或者用戶buf被填充完畢,就開(kāi)始flush數(shù)據(jù)至TX-FIFO;
4、對(duì)于TX-ISR線程:每發(fā)出一個(gè)bite,就檢查xmit數(shù)據(jù)狀態(tài),當(dāng)xmit為空時(shí),關(guān)閉TX中斷,當(dāng)xmit不夠時(shí),喚醒上面的寫(xiě)進(jìn)場(chǎng),繼續(xù)往xmit填充數(shù)據(jù),具體流程如下:
具體函數(shù)實(shí)現(xiàn)如下:
首先時(shí)tty_core層的調(diào)用

static ssize_t tty_write(struct file *file, const char __user *buf, size_t count, loff_t *ppos) {struct tty_struct *tty;struct inode *inode = file->f_path.dentry->d_inode;ssize_t ret;struct tty_ldisc *ld;tty = (struct tty_struct *)file->private_data;ld = tty_ldisc_ref_wait(tty);if (!ld->ops->write)ret = -EIO;else/* 調(diào)用 線路規(guī)程 n_tty_write 函數(shù) */ret = do_tty_write(ld->ops->write, tty, file, buf, count);tty_ldisc_deref(ld);return ret; }

然后調(diào)用線路規(guī)程的n_tty_write:

static ssize_t n_tty_write(struct tty_struct *tty, struct file *file,const unsigned char *buf, size_t nr) {const unsigned char *b = buf;DECLARE_WAITQUEUE(wait, current);int c;ssize_t retval = 0;// 將當(dāng)前進(jìn)程添加到等待隊(duì)列add_wait_queue(&tty->write_wait, &wait);while (1) {// 設(shè)置當(dāng)前進(jìn)程為可中斷的set_current_state(TASK_INTERRUPTIBLE);if (signal_pending(current)) {retval = -ERESTARTSYS;break;}if (tty_hung_up_p(file) || (tty->link && !tty->link->count)) {retval = -EIO;break;}/* 自行定義了輸出方式 */if (O_OPOST(tty) && !(test_bit(TTY_HW_COOK_OUT, &tty->flags))) {....} else {while (nr > 0) {/* 調(diào)用到 uart_write */c = tty->ops->write(tty, b, nr);if (c < 0) {retval = c;goto break_out;}if (!c)break;b += c;nr -= c;}}if (!nr)break;if (file->f_flags & O_NONBLOCK) {retval = -EAGAIN;break;}// 進(jìn)程調(diào)度 開(kāi)始休眠schedule();} }

最終調(diào)用uart_write函數(shù):

static int uart_write(struct tty_struct *tty, const unsigned char *buf, int count) {uart_start(tty);return ret; }static void uart_start(struct tty_struct *tty) {__uart_start(tty); }static void __uart_start(struct tty_struct *tty) {struct uart_state *state = tty->driver_data;struct uart_port *port = state->uart_port;if (!uart_circ_empty(&state->xmit) && state->xmit.buf &&!tty->stopped && !tty->hw_stopped)/* 調(diào)用到最底層的 start_tx */port->ops->start_tx(port); }

uart_write 又調(diào)用到了最底層的 uart_port->ops->start_tx 函數(shù)

友情鏈接:
關(guān)于tty串口驅(qū)動(dòng)、設(shè)備的注冊(cè)可點(diǎn)擊該鏈接

總結(jié)

以上是生活随笔為你收集整理的Linux下tty串口驱动数据的发送、接收过程源码实例详解的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

成人久久久久久久久久 | 久久在线影院 | 91日韩国产 | 中文字幕av电影下载 | 久久九九影视网 | 日韩电影中文 | 91精品国产91p65 | 中文字幕一区二区三区精华液 | 日韩网站在线 | 丰满少妇一级片 | 亚洲精欧美一区二区精品 | 国产视频资源 | 500部大龄熟乱视频使用方法 | 96精品高清视频在线观看软件特色 | 日日干夜夜骑 | 四虎影视成人精品国库在线观看 | 97在线超碰 | 国产精品视频专区 | 色久天 | 国产日韩在线观看一区 | 精品久久久久久久久久久院品网 | 亚洲国产片 | 精品一区中文字幕 | 亚洲黑丝少妇 | 免费麻豆 | 久久久久黄 | 在线中文视频 | 在线观看免费日韩 | 99精品视频在线观看播放 | 中文字幕一区二区三区在线观看 | 成人免费观看电影 | 一区二区视频在线看 | 欧美日韩一级久久久久久免费看 | 日韩精品一区二区三区中文字幕 | 日韩在线精品一区 | 久久精品日产第一区二区三区乱码 | 最新久久免费视频 | 在线观看久久久久久 | 在线视频 91 | 久久 亚洲视频 | 久久综合五月婷婷 | 国产精品美女久久久 | 99热999| www免费黄色 | 国产一级二级在线观看 | 人人艹视频 | 精品久久久久久久久久久久久久久久 | 天天操伊人 | 日本一区二区三区免费看 | 国产免费成人 | 黄色软件视频网站 | 免费合欢视频成人app | 99亚洲国产 | 婷婷色中文网 | 日韩成人精品一区二区 | www.com在线观看 | 99视频精品免费观看, | 亚洲视频专区在线 | 中中文字幕av | av午夜电影 | 欧美午夜性生活 | 美女黄视频免费看 | 精品欧美在线视频 | 久久综合九色综合97_ 久久久 | 天天色成人网 | 久久人人做 | 麻豆视频免费看 | 日本h视频在线观看 | 高清日韩一区二区 | 日本巨乳在线 | 久久精品1区2区 | 日韩特级毛片 | 91麻豆国产| 亚洲精品黄 | 国产精品久久久久久久av电影 | 中文av在线播放 | 97色综合| 国内精品久久久久影院一蜜桃 | 久久99国产精品免费网站 | 丁香久久婷婷 | 婷婷在线免费观看 | 免费看特级毛片 | 久久久久久免费毛片精品 | 久久官网 | 欧美亚洲免费在线一区 | 在线韩国电影免费观影完整版 | 一区二区电影在线观看 | 久久久久久久久毛片精品 | 久久伦理 | 国产h在线观看 | 日韩视频在线不卡 | 黄色成人影院 | 在线看一区 | 啪啪小视频网站 | 在线观看视频免费播放 | 亚洲一区二区精品 | 六月丁香婷 | av黄色国产 | 亚洲另类视频在线 | 亚洲欧美日韩精品久久久 | 人人讲 | 超碰在线人人爱 | 激情xxxx| 国产一级免费在线 | 日本成人中文字幕在线观看 | 久久久久国产精品www | 亚洲黄色在线观看 | 成人黄在线观看 | 91传媒在线观看 | 九九九热精品 | 97超碰人人澡 | 国产一区二区精 | 成人av网站在线播放 | 国产原厂视频在线观看 | 九色在线| 91成人网页版 | 国产精品久久视频 | 成人黄色电影免费观看 | 99精品视频免费 | 亚洲精品合集 | 91精品免费视频 | 久久爱影视i | 久草99| 久久视频免费在线观看 | 一区二区三区免费在线观看视频 | 91精品久久久久久粉嫩 | 一区二区精品在线视频 | 最新日韩视频 | 成人av影视观看 | 天天夜夜亚洲 | 六月婷色 | 久久久久久久久久毛片 | 日韩精品专区在线影院重磅 | 久草在线资源观看 | 亚洲人毛片 | 中文字幕人成乱码在线观看 | 亚洲伊人成综合网 | 黄色精品在线看 | 久久婷婷一区二区三区 | 久久国内视频 | 亚洲欧美少妇 | 亚洲女人av| 久久久久久97三级 | 在线你懂 | 精品视频久久久久久 | 久久久久97国产 | 在线观看国产一区二区 | 亚洲国产免费 | 久草久草久草久草 | 热久精品 | 一级a毛片高清视频 | 99国产在线观看 | 91麻豆精品国产91久久久更新时间 | 成人理论电影 | 精品国产一区二区三区噜噜噜 | 天天天干天天天操 | 中文字幕一区二区三区久久蜜桃 | 亚洲激情在线视频 | 精品欧美一区二区在线观看 | 日韩精品视频在线观看网址 | 日本aaa在线观看 | 国产中文字幕网 | 精品国产伦一区二区三区免费 | 日本黄区免费视频观看 | 国内综合精品午夜久久资源 | 精品美女久久久久久免费 | 色网av| 日韩免费看视频 | 国产精品日韩欧美一区二区 | 亚洲最大免费成人网 | 国产黄色av | 久草青青在线观看 | 久久久久区 | 911av视频| 午夜视频免费在线观看 | 精品一区二区三区电影 | 1000部国产精品成人观看 | 精品一区二区在线免费观看 | 亚洲精品视频一二三 | 91精品无人成人www | 麻花豆传媒mv在线观看网站 | 狠狠干综合 | 久久人人爽人人爽人人片 | 日韩中文在线电影 | 久久任你操 | 91伊人影院 | 久久免费精品 | 99热只有精品在线观看 | 亚洲精品乱码久久久久久蜜桃91 | 国产青青青 | 黄色日本免费 | 精品一区二区日韩 | 特级黄色片免费看 | 黄色一集片 | 国产超碰97 | 精品久久久久久综合 | 美女视频黄免费的 | 久久久久久高潮国产精品视 | 国产高清视频色在线www | 国产 欧美 日韩 | 成人免费在线观看入口 | 免费观看www小视频的软件 | 色丁香综合 | 亚州国产精品久久久 | 久久99国产综合精品 | 国产中文字幕一区 | 日韩理论在线观看 | 福利网址在线观看 | 中文在线 | 99久国产 | 国产精品video爽爽爽爽 | 国产欧美最新羞羞视频在线观看 | 一级黄视频 | 中文字幕资源站 | 在线黄色国产电影 | 成人综合婷婷国产精品久久免费 | 午夜成人免费电影 | 国产不卡免费 | 久久久国产一区二区三区四区小说 | 亚洲黄色免费 | 欧美日韩精品在线观看视频 | 国内视频在线 | 天天操天天色天天射 | 日韩美女高潮 | 日本公妇在线观看 | 欧亚久久| 久久精品视频播放 | 国内精品久久久久久久影视简单 | 91一区二区在线 | 成人av中文字幕在线观看 | 超碰在线免费福利 | 91麻豆免费视频 | 久久久精品国产一区二区三区 | 国产成人精品一区二区三区 | 91人人射| 国产精品永久在线观看 | 亚洲一区视频免费观看 | 免费a视频在线观看 | 久久免费成人精品视频 | 99热在线观看免费 | 国产美腿白丝袜足在线av | 国产999精品久久久久久 | 亚洲国产久 | 国产精品美女免费看 | 成人av在线亚洲 | 亚洲码国产日韩欧美高潮在线播放 | 天天草天天干 | 久久久国产99久久国产一 | 黄色软件在线观看 | 久久97精品 | 免费在线成人 | 97理论片 | 国产在线看 | 99久久精品国产观看 | 亚洲日日日 | 亚洲免费精品一区二区 | 玖玖精品在线 | 成人黄色电影在线播放 | 天天干天天操天天入 | 丝袜美腿一区 | 久久视频免费观看 | 美女视频黄是免费的 | 国产精品99久久久久久久久久久久 | 精品91视频 | 欧美一二三区在线播放 | 麻豆视频国产在线观看 | 亚洲国产精品500在线观看 | 91久久一区二区 | 国产999精品 | 婷婷久久丁香 | www.夜夜干.com | 99福利影院 | 亚洲国产精品成人女人久久 | 在线电影a | 视频成人永久免费视频 | 国产免费高清 | 久久99精品国产99久久6尤 | 精品国产免费人成在线观看 | 国产高清免费观看 | 久久国产热视频 | www.888av| 中文国产字幕 | 国产一区二区在线精品 | 国产精品人成电影在线观看 | 99精品视频精品精品视频 | 婷婷日日| 日韩三级视频 | 在线观看激情av | 日韩中文字幕在线 | 69精品视频在线观看 | 国产精品久久在线 | 91视频免费网址 | 成年人视频免费在线 | 国产视频一区在线免费观看 | 天天综合网~永久入口 | 久久午夜免费视频 | 西西人体4444www高清视频 | 中文字幕在线播放第一页 | 蜜桃av久久久亚洲精品 | 亚洲jizzjizz日本少妇 | 成人app在线播放 | 免费精品 | 国产精品成人一区二区 | av网站免费线看精品 | 夜夜爽www | se婷婷 | 日本在线视频网址 | 中文字幕在线观看视频网站 | 一区二区三区免费看 | 日韩中文字幕视频在线观看 | 少妇视频在线播放 | 成人欧美亚洲 | 欧美性黑人 | 99色资源 | 亚洲 中文 欧美 日韩vr 在线 | 国产一区二区三区免费在线观看 | 国产资源在线视频 | 欧美一区,二区 | 久久精品韩国 | 免费在线观看日韩 | 91av在线视频免费观看 | 日韩在线观看第一页 | 91看片看淫黄大片 | 色视频网站在线观看一=区 a视频免费在线观看 | 欧美另类xxxxx | 激情综合网在线观看 | 国产精品视频专区 | 色99导航| 免费网站在线观看人 | 青青河边草免费直播 | 日韩三级成人 | 四虎在线免费观看视频 | 精品在线一区二区 | 久久99国产精品久久99 | 日韩精品免费在线观看视频 | 久99久精品视频免费观看 | 免费观看不卡av | 99久久精品国产一区二区成人 | 国产精品美女免费视频 | 视频在线观看一区 | 国产成人a v电影 | 亚洲久在线 | 中文在线字幕免费观看 | 三上悠亚一区二区在线观看 | 久久99在线观看 | 欧美精品首页 | 国产日本在线 | 婷婷电影在线观看 | 天堂在线一区二区 | 九九免费观看全部免费视频 | 亚洲免费av一区二区 | 亚洲精品一区二区在线观看 | 99精品视频在线播放免费 | 久久精品91久久久久久再现 | 天天操天天干天天干 | 国产黄色片免费在线观看 | 欧美亚洲一区二区在线 | 中中文字幕av在线 | 在线免费观看一区二区三区 | 狠狠色狠狠综合久久 | 亚洲免费在线观看视频 | 国产一区二区日本 | 美女视频免费一区二区 | 亚洲精品久久久久久久不卡四虎 | 国产精品观看在线亚洲人成网 | 操操碰 | 久久国产成人午夜av影院潦草 | 欧美性生交大片免网 | 日韩成人在线一区二区 | 天天玩夜夜操 | 国产精品久久99精品毛片三a | 亚洲一级黄色 | 一区二区中文字幕在线 | 免费黄色在线 | 毛片网站免费 | 久久精品8| 久久免费一 | 欧美另类xxxx | 国产91精品高清一区二区三区 | 黄色在线观看免费 | 中文字幕美女免费在线 | 色视频网站免费观看 | 国产精品久久久毛片 | 国产精品久久久久av | 久久69精品久久久久久久电影好 | 欧美国产不卡 | 91香蕉视频在线 | 国产免费亚洲高清 | 婷婷久久国产 | 日韩免费观看高清 | 91九色视频国产 | 国产拍在线 | 国产 字幕 制服 中文 在线 | 日一日干一干 | 中文字幕在线播放第一页 | 国产在线精品福利 | 精品视频在线视频 | 国色天香永久免费 | 日韩精品一区二区三区外面 | 国产尤物一区二区三区 | 国产婷婷色| 一区二区视频免费在线观看 | 99久久精品国产亚洲 | 夜夜躁日日躁 | 99精品视频免费看 | 欧美精品二| 久久国产精品免费看 | 国产精品久久久久久久7电影 | 成人免费观看网站 | 中文字幕日韩免费视频 | 亚洲免费色 | 亚洲视频在线观看 | 精品字幕 | 久久99久久99精品免观看软件 | 国产精品久久久久久超碰 | 国产品久精国精产拍 | 欧亚日韩精品一区二区在线 | 日韩在线视频二区 | 婷婷干五月 | www.超碰97.com | 欧美一级片免费在线观看 | 久久图 | 在线免费观看视频 | 亚洲更新最快 | 2021国产精品视频 | 国产精品久久久久久久久久东京 | 色综合色综合久久综合频道88 | 国产精品成人一区二区 | 亚洲精品国产电影 | 国产日韩欧美自拍 | 激情丁香综合五月 | 日韩欧美视频在线播放 | 日韩免费av在线 | www.超碰97.com| 人人爽人人插 | 成人18视频| 日日干日日色 | 天天舔天天搞 | 欧美一级片在线播放 | 中文字幕亚洲字幕 | 中文字幕在线网址 | 国产精品一区二区av影院萌芽 | 亚洲日本在线视频观看 | 五月综合激情婷婷 | 日本最新中文字幕 | 日本女人逼 | 日韩久久久久久久久久久久 | 日本公妇色中文字幕 | 五月婷婷久久综合 | 日韩欧美精品一区二区三区经典 | 超碰在线观看av | 国产高清不卡在线 | 国产免费不卡 | 国产精品美女久久久网av | 亚洲午夜久久久综合37日本 | 中文字幕在线观看第一区 | 欧美日韩二三区 | www.久热| 黄色a一级片 | 91丨九色丨91啦蝌蚪老版 | 99热这里是精品 | 精品久久影院 | 国产精品午夜在线 | 亚洲高清不卡av | 五月婷婷激情五月 | 人人网人人爽 | 久久综合亚洲鲁鲁五月久久 | 久久精品视频网站 | 亚洲精品动漫久久久久 | 99免费在线播放99久久免费 | 超碰在线cao | 亚洲一区二区三区在线看 | 亚洲国产丝袜在线观看 | 在线观看黄色免费视频 | 色天天综合久久久久综合片 | www.玖玖玖 | 日韩素人在线观看 | 国产视频97 | 久久久精品99 | 色黄www小说| 久久久久久久影视 | 一本一道波多野毛片中文在线 | 91麻豆精品国产自产 | 久久久久99精品国产片 | 免费av在线网 | 欧美日韩一区二区三区视频 | 成人性生交视频 | 91xav| 在线香蕉视频 | 91精品视频在线 | 亚洲人成精品久久久久 | 久久欧洲视频 | 精品国产乱码久久久久久久 | 人人超在线公开视频 | 麻豆91精品91久久久 | 日日夜夜综合 | 国产精品夜夜夜一区二区三区尤 | 亚洲精品一区中文字幕乱码 | 久久三级毛片 | 国产精品久久久久影院日本 | 免费观看9x视频网站在线观看 | 日韩免费电影一区二区三区 | 人人爽人人澡 | 在线a人片免费观看视频 | 国产 视频 久久 | 国产精品久久久久久久久久ktv | 国产手机免费视频 | 色资源网在线观看 | 视频一区视频二区在线观看 | 欧美一区二区精品在线 | 国产91av视频在线观看 | 成人黄色小说在线观看 | 日本久久综合网 | 91福利国产在线观看 | 天天激情站 | 黄污网站在线 | 五月精品 | 精品uu| 97视频人人| www.五月天激情 | 亚洲视频一级 | 亚洲日本va午夜在线电影 | 久久不卡免费视频 | 色婷婷激婷婷情综天天 | 欧美做受xxx| 香蕉色综合 | 日韩亚洲欧美中文字幕 | 国产福利在线免费观看 | japanesexxxxfreehd乱熟 | 成人一级免费视频 | 日韩精品一区电影 | 免费看三级| 精品视频久久久久久 | 成人在线超碰 | 天天视频亚洲 | 亚洲精品视频在线看 | 国产精品久久久久久久7电影 | 久久国产精品视频观看 | 日韩精品视频久久 | 五月婷影院 | 亚洲精品免费在线 | 国产69精品久久app免费版 | 激情丁香 | 高清久久久久久 | 天天草综合网 | 日韩一区二区三区视频在线 | 99视频精品视频高清免费 | 日韩av资源在线观看 | 亚洲高清91 | 天天综合成人网 | 精品人人人人 | 91精品国产92久久久久 | 99视频精品免费视频 | 九月婷婷色 | 免费日韩一区二区三区 | 91免费日韩 | 五月激情丁香图片 | 色婷婷综合久色 | 91福利视频在线 | 成人av电影网址 | 九九有精品 | 蜜桃av久久久亚洲精品 | 国产拍揄自揄精品视频麻豆 | 久久人人97超碰国产公开结果 | 久久久亚洲影院 | 久久成年视频 | 亚洲一级电影视频 | www.夜夜爱 | 97香蕉视频 | 91免费视频网站在线观看 | 久久精品国产精品亚洲 | 欧洲精品久久久久毛片完整版 | 草久久久久久 | 操天天操 | 97超碰香蕉 | 国产第一二区 | 国产伦精品一区二区三区四区视频 | h视频在线看 | 黄色网在线免费观看 | 国产成人精品一区二区三区在线观看 | 亚洲国产中文字幕在线观看 | 精品国产欧美 | 中文字幕在线观看网址 | 99精品美女| av天天干 | www.人人干| 在线播放第一页 | 色视频在线看 | 亚洲另类视频 | 亚洲精品美女久久久久 | 福利一区二区三区四区 | 国产精品午夜久久 | 精品免费在线视频 | 日韩av五月天| 欧美a在线免费观看 | 高清一区二区 | 99视频99| 97精品国产aⅴ | 天天干天天操人体 | 亚洲日韩欧美一区二区在线 | 久久艹人人 | 欧美黑吊大战白妞欧美 | 婷婷精品在线 | 天天在线视频色 | 操高跟美女| 日日干天天操 | 国产精品成人一区二区三区 | 久久久久久久久久亚洲精品 | 免费看污在线观看 | 麻豆传媒在线免费看 | 91污视频在线 | 337p日本欧洲亚洲大胆裸体艺术 | 毛片区 | 99久热在线精品视频成人一区 | 99久久夜色精品国产亚洲96 | 精品一区在线 | 日本少妇视频 | 男女激情片在线观看 | 亚洲国产中文在线 | 日日夜操| 欧美一级片免费 | 国产午夜精品一区二区三区 | 丁香 婷婷 激情 | 成人wwwxxx视频 | 婷婷5月激情5月 | 五月婷婷影院 | 国产一区二区在线观看免费 | 成人一级影视 | 久久久精品视频成人 | 97电影在线观看 | 欧美精品久久久久久久亚洲调教 | 日韩精品欧美专区 | 天天干com| 国产 成人 久久 | 黄色a在线观看 | 黄色影院在线免费观看 | 国产精品久久综合 | 精品久久久成人 | 能在线观看的日韩av | 中国一级片免费看 | 日韩r级电影在线观看 | 国产又粗又猛又黄又爽的视频 | 在线观看av片| av中文字幕不卡 | 五月婷婷色丁香 | 最近中文字幕在线 | 午夜视频在线观看一区 | 99精品国产一区二区三区不卡 | 视频国产精品 | 色插综合 | 国产精品九九九九九九 | 国产精品福利视频 | 99精品视频免费 | 精品免费观看视频 | 怡春院av | 精品久久福利 | 亚洲激情网站免费观看 | 色婷婷国产精品一区在线观看 | 婷婷久久五月天 | 欧美精品999 | 玖玖爱在线观看 | 国产五码一区 | 黄色aa久久 | 五月天色丁香 | av电影不卡 | 国产视频精品免费播放 | 超级av在线 | 国产又粗又硬又爽视频 | 夜又临在线观看 | 亚洲精品456在线播放 | 亚洲日韩欧美一区二区在线 | av网站在线免费观看 | 亚洲经典视频 | 国内成人精品视频 | 国产电影一区二区三区四区 | 亚洲成人av在线播放 | 久久免费在线 | 精品国产乱子伦一区二区 | 日本黄色大片儿 | 天天操天天射天天爱 | www..com黄色片| 久久精久久精 | 麻豆91在线播放 | 97人人人| 久久这里精品视频 | 91中文字幕在线视频 | 国产精品va在线观看入 | 午夜国产福利在线 | 四虎最新域名 | 免费黄色在线网址 | 国产涩涩网站 | 日韩欧美一区二区在线播放 | 国产视频一区二区三区在线 | 激情小说 五月 | 国产午夜在线观看视频 | 国产日韩欧美在线一区 | 色五月情| 日韩精品一区二区三区高清免费 | 国产精品久久视频 | 激情伊人五月天 | 91麻豆看国产在线紧急地址 | 免费男女羞羞的视频网站中文字幕 | 色婷婷在线播放 | 久久综合五月天婷婷伊人 | 在线色网站 | 国产精品一区二区三区免费看 | 国产成人精品免高潮在线观看 | 人人草人人做 | 日韩 精品 一区 国产 麻豆 | 久久视频网址 | 日韩va欧美va亚洲va久久 | 亚洲综合色视频在线观看 | 999成人 | 日韩久久精品一区二区三区 | 四虎影视成人永久免费观看视频 | 五月婷婷在线综合 | 日本精品久久久久影院 | 国产九九在线 | 日韩中文字幕亚洲一区二区va在线 | 91久久精品一区 | 日本精品一区二区 | 91黄色免费网站 | 色视频在线 | 免费观看全黄做爰大片国产 | 一区二区三区四区五区在线视频 | 久久久久久久久久国产精品 | 亚洲精品综合一二三区在线观看 | 丝袜+亚洲+另类+欧美+变态 | 亚州激情视频 | 久久影院一区 | 五月丁婷婷 | 亚洲一区免费在线 | 黄色99视频 | 成人亚洲综合 | 久久国产欧美日韩 | 日本高清中文字幕有码在线 | 成人午夜电影网站 | 久久久久久久免费 | 99热 精品在线 | 玖玖爱国产在线 | 色多多视频在线观看 | 精品黄色在线观看 | 看片网站黄| 久久精品国亚洲 | 久草资源在线 | 国产日韩欧美自拍 | 天天操天天干天天操天天干 | 久久国产露脸精品国产 | 国产精品theporn | 香蕉久草 | free,性欧美| 亚洲最大激情中文字幕 | 夜色资源网 | 狠狠干天天射 | 操操操影院| 深爱激情五月婷婷 | 亚洲 欧美日韩 国产 中文 | 91网站在线视频 | 天天操网 | 午夜精品久久一牛影视 | 91免费试看 | 一级一片免费看 | 91最新地址永久入口 | 超级碰99 | 免费在线观看av的网站 | 久久精品亚洲综合专区 | 日本在线观看一区二区三区 | 欧美日韩久久一区 | 欧美极度另类性三渗透 | 中文免费 | 粉嫩一区二区三区粉嫩91 | 日韩精品最新在线观看 | 久久一区二区三区国产精品 | 天堂久色 | 99视频在线免费播放 | 中文字幕在线播放日韩 | 菠萝菠萝蜜在线播放 | 婷久久 | 婷色在线 | 毛片网站在线观看 | 69国产盗摄一区二区三区五区 | 日韩精品免费在线视频 | 国产精品丝袜在线 | 国产精品电影一区二区 | 久久草 | 在线观看一级片 | 18久久久久久 | 日韩视频在线观看免费 | 国产一级在线观看视频 | 安徽妇搡bbbb搡bbbb | 少妇按摩av | 天天色天天干天天 | 天天干天天插 | 日韩网站免费观看 | 欧美成人一二区 | 成年人黄色大片在线 | 午夜性生活片 | 24小时日本在线www免费的 | 久久综合网色—综合色88 | 在线观看深夜视频 | 国产精品成久久久久三级 | 欧美午夜寂寞影院 | 亚洲日本国产 | 久久女同性恋中文字幕 | 精品电影一区 | 亚洲成人精品久久 | 天天干,天天操,天天射 | 成人cosplay福利网站 | 久久精品久久综合 | 成人精品999 | 国产精品网红福利 | 日韩av一区二区在线播放 | 九九精品视频在线 | 欧美在线视频一区二区三区 | 成年人在线免费看 | 中国精品一区二区 | 在线日韩中文字幕 | 狠狠色狠狠色综合日日92 | 三级黄色a| 亚洲国产福利视频 | 99视频久| 亚洲国产中文字幕 | 色综合天天干 | 久草在线视频资源 | 久久这里只精品 | 91人人爱 | 欧美日韩中文在线视频 | 日日日爽爽爽 | 日韩一三区 | 福利久久 | 国产一区二区久久精品 | www.婷婷色 | 亚洲精品无 | 久久五月婷婷综合 | 国产欧美精品在线观看 | 91麻豆文化传媒在线观看 | 又黄又爽又无遮挡免费的网站 | 天天天综合网 | 日本韩国精品一区二区在线观看 | 欧美黑人xxxx猛性大交 | 日韩免费电影网 | 人人要人人澡人人爽人人dvd | 日韩免费在线看 | 国产一级久久久 | 五月婷婷亚洲 | 成人 国产 在线 | 99在线免费视频 | 国产精品黑丝在线观看 | 伊人狠狠| 久久99精品国产一区二区三区 | 国产精品一区二区三区电影 | 精品久久久免费视频 | 深爱婷婷 | 91精品视频在线免费观看 | 久久乐九色婷婷综合色狠狠182 | 久久免费片 | 99久久精品国产亚洲 | 五月婷婷久 | 久综合网 | 免费黄在线观看 | 欧美一级大片在线观看 | 亚洲视频精品 | 欧美国产91| 成人午夜影视 | 久久久久久久久久福利 | 正在播放亚洲精品 | 亚洲日本va午夜在线电影 | 91热这里只有精品 | 99久久久精品 | 欧美日韩国产成人 | av国产在线观看 | av黄色国产 | 成人中文字幕+乱码+中文字幕 | 最新日本中文字幕 | 激情视频一区二区三区 | 国产成人在线观看 | 99视频在线免费播放 | 美女精品在线观看 | 九九久久免费 | av黄免费看 | 精品国产一区二区三区久久久久久 | 亚洲高清在线视频 | 日韩欧美国产精品 | 天天想夜夜操 | 99精品在线视频播放 | 天堂av在线免费观看 | 免费av的网站 | 激情动态 | 狠狠操在线 | 91精品啪在线观看国产线免费 | 蜜臀av一区二区 | 香蕉久久久久久av成人 | 亚洲一区在线看 | 狠狠久久婷婷 | 97在线观视频免费观看 | 国产精品综合在线 | 五月综合久久 | 免费看搞黄视频网站 | 一本一本久久aa综合精品 | 久久免费视频这里只有精品 | 九九九视频精品 | 成人亚洲精品国产www | 成人av电影在线观看 | 色综合天天狠狠 | 国产精品美女久久久久久久久久久 | 亚洲电影在线看 | 97自拍超碰 | 成人久久电影 | 日韩欧美一区二区三区在线观看 | 久久影院一区 | 香蕉在线播放 | 手机在线免费av | 黄色在线观看污 | 久久大视频 | 国产又粗又猛又黄又爽视频 | 看黄色91 | 99 国产精品| 日韩精品视频免费在线观看 | 最近免费中文字幕大全高清10 | 欧美一区二区精美视频 | 精品乱码一区二区三四区 | 日韩一区二区三区在线看 | 91在线区 | 99r国产精品 | 国产成人一区二区三区 | 黄色软件网站在线观看 | 蜜臀精品久久久久久蜜臀 | 久久久免费观看 | 性色大片在线观看 | 欧美成人黄色 | 欧美粗又大 | 黄色特级一级片 | 亚洲深爱激情 | 特级a老妇做爰全过程 | 久久精品毛片 | 久久精品一区二区三区中文字幕 | 一级片黄色片网站 | 国产精品乱码久久久久久1区2区 | 免费黄色激情视频 | 久久视频 | 欧美污网站 | 欧美一级在线看 | 久久麻豆精品 | 亚洲国产精品人久久电影 | 国产精品高清av | 亚洲1区 在线 | 亚洲国产精品人久久电影 | 久久久免费观看完整版 | 欧美日韩精品综合 | 黄色软件大全网站 | 在线成人中文字幕 | 99se视频在线观看 | 精品日韩在线 | 国产日韩视频在线播放 | 韩日在线一区 | 国产99爱 | 国产精品av一区二区 | 日韩精品在线视频免费观看 | 久久美女精品 | 五月天婷婷狠狠 | 91天堂素人约啪 | 日韩a级免费视频 | av久久在线 | 精品一区在线 | 999免费视频| 最新不卡av | 日韩成人精品一区二区 | 精品99在线观看 | 天天射网 | 久久免费视频在线 | 欧美专区国产专区 | 国产中文自拍 | 一级片观看 | 91中文在线| 国产成人亚洲在线观看 | 91国内在线视频 | 国产精品永久免费观看 | 欧美精品乱码久久久久久 | 一本一本久久a久久精品综合妖精 | 成人av免费看 | 久久综合久久综合这里只有精品 | 97视频免费在线 | 国产一级在线观看视频 | 国产福利中文字幕 | 日本三级国产 | 日本久久久久久科技有限公司 | 麻豆小视频在线观看 | 亚洲最新视频在线播放 | 日韩视频1区| 日韩av免费大片 | 精品自拍sae8—视频 | 国产免码va在线观看免费 | 午夜在线免费视频 | 美女视频黄在线 | 丁香激情视频 | 综合激情伊人 | 久久久久久久久久网站 | 992tv在线成人免费观看 |