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

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

生活随笔

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

linux

Linux 下wifi 驱动开发(四)—— USB接口WiFi驱动浅析

發(fā)布時(shí)間:2023/12/9 linux 73 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Linux 下wifi 驱动开发(四)—— USB接口WiFi驱动浅析 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

前面學(xué)習(xí)了SDIO接口的WiFi驅(qū)動(dòng),現(xiàn)在我們來(lái)學(xué)習(xí)一下USB接口的WiFi驅(qū)動(dòng),二者的區(qū)別在于接口不同。而USB接口的設(shè)備驅(qū)動(dòng),我們前面也有學(xué)習(xí),比如USB攝像頭驅(qū)動(dòng)、USB鼠標(biāo)驅(qū)動(dòng),同樣都符合LinuxUSB驅(qū)動(dòng)結(jié)構(gòu):


? ? ? ? USB設(shè)備驅(qū)動(dòng)(字符設(shè)備、塊設(shè)備、網(wǎng)絡(luò)設(shè)備)

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?|

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? USB 核心

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?|

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? USB主機(jī)控制器驅(qū)動(dòng)


? ? ? ? 不同之處只是在于USB攝像頭驅(qū)動(dòng)是字符設(shè)備,而我們今天要學(xué)習(xí)的WiFi驅(qū)動(dòng)是網(wǎng)絡(luò)設(shè)備;當(dāng)然由我們編寫(xiě)的部分還是USB設(shè)備驅(qū)動(dòng)部分,下面進(jìn)入U(xiǎn)SB接口WiFi驅(qū)動(dòng)的分析,如何分析呢?我們下面從這幾個(gè)方面入手:

? ? ? ? 從硬件層面上看,WIFI設(shè)備與CPU通信是通過(guò)USB接口的與其他WIFI設(shè)備之間的通信是通過(guò)無(wú)線(xiàn)射頻(RF)

? ? ? ? 從軟件層面上看,Linux操作系統(tǒng)要管理WIFI設(shè)備,那么就要將WIFI設(shè)備掛載到USB總線(xiàn)上,通過(guò)USB子系統(tǒng)實(shí)現(xiàn)管理。而同時(shí)為了對(duì)接網(wǎng)絡(luò),又將WIFI設(shè)備封裝成一個(gè)網(wǎng)絡(luò)設(shè)備

? ? ? ? 我們以USB接口的WIFI模塊進(jìn)行分析:

a -- 從USB總線(xiàn)的角度去看,它是USB設(shè)備;

b -- 從Linux設(shè)備的分類(lèi)上看,它又是網(wǎng)絡(luò)設(shè)備;

c -- 從WIFI本身的角度去看,它又有自己獨(dú)特的功能及屬性,因此它又是一個(gè)私有的設(shè)備;

通過(guò)上述的分析,我們只要抓住這三條線(xiàn)索深入去分析它的驅(qū)動(dòng)源碼,整個(gè)WIFI驅(qū)動(dòng)框架就會(huì)浮現(xiàn)在你眼前。


一、框架整理

1、USB設(shè)備驅(qū)動(dòng)

? ? ? 現(xiàn)在我們先從USB設(shè)備開(kāi)始,要寫(xiě)一個(gè)USB設(shè)備驅(qū)動(dòng),那么大致步驟如下:

a -- 需要針對(duì)該設(shè)備定義一個(gè)USB驅(qū)動(dòng),對(duì)應(yīng)到代碼中即定義一個(gè)usb_driver結(jié)構(gòu)體變量

代碼如下:

[cpp]?view plaincopy
  • struct?usb_driver?xxx_usb_wifi_driver;??
  • b -- 填充該設(shè)備的usb_driver結(jié)構(gòu)體成員變量

    代碼如下:

    [cpp]?view plaincopy
  • static?struct?usb_driver?xxx_usb_wifi_driver?=?{??
  • ????.name?=?"XXX_USB_WIFI",??
  • ????.probe?=?xxx_probe,??
  • ????.disconnect?=?xxx_disconnect,??
  • ????.suspend?=?xxx_suspend,??
  • ????.resume?=?xxx_resume,??
  • ????.id_table?=?xxx_table,??
  • };??
  • c -- 將該驅(qū)動(dòng)注冊(cè)到USB子系統(tǒng)

    代碼如下:

    [cpp]?view plaincopy
  • usb_register(&xxx_usb_wifi_driver);??
  • ? ? ? 以上步驟只是一個(gè)大致的USB驅(qū)動(dòng)框架流程,而最大和最復(fù)雜的工作是填充usb_driver結(jié)構(gòu)體成員變量。以上步驟的主要工作是將USB接口的WIFI設(shè)備掛載到USB總線(xiàn)上,以便Linux系統(tǒng)在USB總線(xiàn)上就能夠找到該設(shè)備。

    2、網(wǎng)絡(luò)設(shè)備驅(qū)動(dòng)

    ? ? ? 接下來(lái)是網(wǎng)絡(luò)設(shè)備的線(xiàn)索,網(wǎng)絡(luò)設(shè)備驅(qū)動(dòng)大致步驟如下:

    a -- 定義一個(gè)net_device結(jié)構(gòu)體變量ndev

    代碼如下:

    [cpp]?view plaincopy
  • struct?net_device?*ndev;??
  • b -- 初始化ndev變量并分配內(nèi)存

    代碼如下:

    [cpp]?view plaincopy
  • ndev=alloc_etherdev();??
  • c -- 填充ndev -> netdev_ops結(jié)構(gòu)體成員變量

    代碼如下:

    [cpp]?view plaincopy
  • static?const?struct?net_device_ops?xxx_netdev_ops=?{??
  • ????.ndo_init?=?xxx_ndev_init,??
  • ????.ndo_uninit?=?xxx?_ndev_uninit,??
  • ????.ndo_open?=?netdev_open,??
  • ????.ndo_stop?=?netdev_close,??
  • ????.ndo_start_xmit?=?xxx_xmit_entry,??
  • ????.ndo_set_mac_address?=?xxx_net_set_mac_address,??
  • ????.ndo_get_stats?=?xxx_net_get_stats,??
  • ????.ndo_do_ioctl?=?xxx_ioctl,??
  • };??
  • d -- 填充ndev->wireless_handlers結(jié)構(gòu)體成員變量,該變量是無(wú)線(xiàn)擴(kuò)展功能

    代碼如下:

    [cpp]?view plaincopy
  • ndev->wireless_handlers?=?(struct?iw_handler_def?*)&xxx_handlers_def;??
  • e -- 將ndev設(shè)備注冊(cè)到網(wǎng)絡(luò)子系統(tǒng)

    代碼如下:

    [cpp]?view plaincopy
  • register_netdev(ndev);??
  • 3、?WIFI設(shè)備本身私有的功能及屬性

    ? ? ? 如自身的配置及初始化、建立與用戶(hù)空間的交互接口、自身功能的實(shí)現(xiàn)等。

    a -- 自身的配置及初始化

    代碼如下: ? ? ? ? ? ? ? ?

    [cpp]?view plaincopy
  • xxx_read_chip_info();??
  • ??
  • xxx_chip_configure();??
  • ??
  • xxx_hal_init();??
  • b -- 主要是在proc和sys文件系統(tǒng)上建立與用戶(hù)空間的交互接口

    代碼如下:

    [cpp]?view plaincopy
  • xxx_drv_proc_init();??
  • ??
  • xxx_ndev_notifier_register();??
  • c -- 自身功能的實(shí)現(xiàn)

    ? ????WIFI的網(wǎng)絡(luò)及接入原理,如掃描等。同時(shí)由于WIFI在移動(dòng)設(shè)備中,相對(duì)功耗比較大,因此,對(duì)于功耗、電源管理也會(huì)在驅(qū)動(dòng)中體現(xiàn)。


    二、USB 設(shè)備驅(qū)動(dòng)分析

    ? ? ? ? 在分析之前,我們需要理解在整個(gè)wifi模塊中,USB充當(dāng)什么角色?它的作用是什么?實(shí)質(zhì)上wifi模塊上的數(shù)據(jù)傳輸有兩端,一端是wifi芯片與wifi芯片之間,通過(guò)無(wú)線(xiàn)射頻(RF)進(jìn)行數(shù)據(jù)傳輸;另一端則是wifi芯片與CPU之間,通過(guò)USB進(jìn)行數(shù)據(jù)傳輸

    ? ? ? ?了解Linux的USB驅(qū)動(dòng)的讀者都知道,USB驅(qū)動(dòng)分為兩種:一種是USB主機(jī)驅(qū)動(dòng);另一種是USB設(shè)備驅(qū)動(dòng)。而我們的USB接口的wifi模塊對(duì)于CPU(主機(jī))來(lái)說(shuō),屬于USB設(shè)備,因此采用USB設(shè)備驅(qū)動(dòng)。

    ? ? ? ?有了以上信息之后,我們先讓Linux系統(tǒng)識(shí)別該USB接口的wifi模塊,首先我們?cè)隍?qū)動(dòng)源碼中大致添加以下幾步工作(前面分析過(guò),這里只看步驟,不看代碼):

    a -- 定義一個(gè)usb_driver結(jié)構(gòu)體變量

    b -- 填充該設(shè)備的usb_driver結(jié)構(gòu)體成員變量

    c -- 將該驅(qū)動(dòng)注冊(cè)到USB子系統(tǒng)

    ? ? ? 簡(jiǎn)單完成以上幾步工作,再加上板級(jí)文件(arch/mach-xxx.c)對(duì)USB設(shè)備的支持,Linux的USB子系統(tǒng)幾乎可以?huà)燧d該wifi模塊為USB設(shè)備了。但是這并不是我們最終想要的結(jié)果。我們還要讓Linux系統(tǒng)知道它掛載的USB設(shè)備屬于無(wú)線(xiàn)網(wǎng)絡(luò)設(shè)備,同時(shí)能夠訪(fǎng)問(wèn)它,利用它實(shí)施無(wú)線(xiàn)網(wǎng)絡(luò)的工作

    ? ? ?我們都知道,若要讓USB設(shè)備真正工作起來(lái),需要對(duì)USB設(shè)備的4個(gè)層次(設(shè)備、配置、接口、端點(diǎn))進(jìn)行初始化。當(dāng)然這四個(gè)層次并不是一定都要進(jìn)行初始化,而是根據(jù)你的USB設(shè)備的功能進(jìn)行選擇的,大致初始化流程如下偽代碼:

    [cpp]?view plaincopy
  • static?struct?dvobj_priv?*usb_dvobj_init(struct?usb_interface?*usb_intf)??
  • {??
  • ????int????i;??
  • ????u8?????val8;??
  • ????int????status=?_FAIL;??
  • ????struct?dvobj_priv?*pdvobjpriv;??
  • ??
  • ????//設(shè)備??
  • ????struct?usb_device?*pusbd;??
  • ????struct?usb_device_descriptor?*pdev_desc;??
  • ??
  • ????//配置??
  • ????struct?usb_host_config?*phost_conf;??
  • ????struct?usb_config_descriptor?*pconf_desc;??
  • ??
  • ????//接口??
  • ????struct?usb_host_interface?*phost_iface;??
  • ????struct?usb_interface_descriptor?*piface_desc;??
  • ??????
  • ????//端點(diǎn)??
  • ????struct?usb_host_endpoint?*phost_endp;??
  • ????struct?usb_endpoint_descriptor?*pendp_desc;??
  • ??
  • ??
  • ????//設(shè)備的初始化??
  • ????pdvobjpriv->pusbintf?=?usb_intf?;??
  • ????pusbd?=pdvobjpriv->pusbdev?=?interface_to_usbdev(usb_intf);??
  • ????usb_set_intfdata(usb_intf,?pdvobjpriv);??
  • ????pdev_desc?=&pusbd->descriptor;??
  • ??
  • ??????
  • ????//配置的初始化??
  • ????phost_conf?=pusbd->actconfig;??
  • ????pconf_desc?=&phost_conf->desc;??
  • ??
  • ???
  • ????//接口的初始化??
  • ????phost_iface?=&usb_intf->altsetting[0];??
  • ????piface_desc?=&phost_iface->desc;??
  • ??
  • ??????
  • ????//端點(diǎn)的初始化,由于wifi模塊屬于網(wǎng)絡(luò)設(shè)備,傳輸批量數(shù)據(jù),因此需要初始化為批量端點(diǎn),端點(diǎn)方向(輸入、輸出)等。同時(shí),由于wifi驅(qū)動(dòng)功能比較多,需要初始化幾個(gè)輸入輸出端點(diǎn)。??
  • ????for?(i?=?0;?i?<pdvobjpriv->nr_endpoint;?i++)??
  • ????{??
  • ????????phost_endp?=?phost_iface->endpoint?+i;??
  • ????????if?(phost_endp)??
  • ????????{??
  • ????????????pendp_desc?=&phost_endp->desc;??
  • ??
  • ????????????//檢查是否為輸入端點(diǎn)??
  • ????????????usb_endpoint_is_bulk_in(pendp_desc);??
  • ??
  • ????????????//檢查是否為輸出端點(diǎn)??
  • ????????????usb_endpoint_is_bulk_out(pendp_desc);??
  • ????????}??
  • ??
  • ????}??
  • ??
  • ????usb_get_dev(pusbd);??
  • ??
  • }??
  • ? ? ? 完成以上的初始化工作之后,接下來(lái)我們需要理清一下USB接口的作用,它是wifi芯片內(nèi)部的固件程序與主機(jī)上的Linux系統(tǒng)進(jìn)行數(shù)據(jù)通信。USB設(shè)備通信不像普通字符設(shè)備那樣采用I/O內(nèi)存和I/O端口的訪(fǎng)問(wèn),而是采用一種稱(chēng)為URB(USB Request Block)的USB請(qǐng)求塊,URB在整個(gè)USB子系統(tǒng)中,相當(dāng)于通電設(shè)備中的“電波”,USB主機(jī)與設(shè)備的通信,通過(guò)“電波”來(lái)傳遞。下面我們就來(lái)編寫(xiě)USB接口的讀寫(xiě)操作函數(shù),偽代碼如下:

    [cpp]?view plaincopy
  • void?xxx_wifi_usb_intf_ops(struct?_io_ops?????*pops)??
  • {??
  • ????//當(dāng)需要進(jìn)行簡(jiǎn)單數(shù)據(jù)的讀取時(shí),采用以下操作??
  • ????pops->_read8?=?&usb_read8;??
  • ????pops->_read16?=?&usb_read16;??
  • ????pops->_read32?=?&usb_read32;??
  • ??
  • ????//當(dāng)需要進(jìn)行批量數(shù)據(jù)的讀取時(shí),采用以下操作??
  • ????pops->_read_port?=?&usb_read_port;?????
  • ??
  • ????//當(dāng)需要進(jìn)行簡(jiǎn)單數(shù)據(jù)的寫(xiě)時(shí),采用以下操作??
  • ????pops->_write8?=?&usb_write8;??
  • ????pops->_write16?=?&usb_write16;??
  • ????pops->_write32?=?&usb_write32;??
  • ????pops->_writeN?=?&usb_writeN;??
  • ??
  • ????//當(dāng)需要進(jìn)行批量數(shù)據(jù)的寫(xiě)時(shí),采用以下操作??
  • ????pops->_write_port?=?&usb_write_port;??
  • ??
  • ????//取消讀寫(xiě)urb??
  • ????pops->_read_port_cancel?=?&usb_read_port_cancel;??
  • ????pops->_write_port_cancel?=?&usb_write_port_cancel;??
  • ??
  • }??
  • ? ? ? ? ?在進(jìn)行批量數(shù)據(jù)的讀寫(xiě)時(shí),如usb_read_port()和usb_write_port()函數(shù),需要完成urb創(chuàng)建、初始化、提交、完成處理這個(gè)完整的流程。偽代碼如下:

    1)批量讀操作

    [cpp]?view plaincopy
  • static?u32?usb_read_port(struct?intf_hdl?*pintfhdl,?u32?addr,?u32?cnt,?u8?*rmem)??
  • {?????????
  • ????int?err;??
  • ????unsigned?intpipe;??
  • ????PURB?purb?=NULL;??
  • ????structrecv_buf?????????*precvbuf?=?(structrecv_buf?*)rmem;??
  • ????structusb_device????*pusbd?=?pdvobj->pusbdev;??
  • ??
  • ????//創(chuàng)建urb,這里是在其它地方創(chuàng)建完成之后,傳遞過(guò)來(lái)??
  • ????purb?=precvbuf->purb;??
  • ??
  • ????//初始化批量urb??
  • ????usb_fill_bulk_urb(purb,?pusbd,?pipe,??
  • ????????precvbuf->pbuf,??
  • ????????MAX_RECVBUF_SZ,??
  • ????????usb_read_port_complete,??
  • ????????precvbuf);//contextis?precvbuf??
  • ??????
  • ????//提交urb??
  • ????err?=usb_submit_urb(purb,?GFP_ATOMIC);??
  • ??
  • }??
  • 2)批量寫(xiě)操作

    [cpp]?view plaincopy
  • u32?usb_write_port(struct?intf_hdl?*pintfhdl,?u32?addr,?u32?cnt,?u8?*wmem)??
  • {?????
  • ????unsigned?int?pipe;??
  • ????intstatus;??
  • ????PURB????????purb?=?NULL;??
  • ??
  • ????structxmit_priv???????*pxmitpriv?=&padapter->xmitpriv;??
  • ????structxmit_buf?*pxmitbuf?=?(struct?xmit_buf?*)wmem;??
  • ????structxmit_frame?*pxmitframe?=?(struct?xmit_frame?*)pxmitbuf->priv_data;??
  • ????structusb_device?*pusbd?=?pdvobj->pusbdev;??
  • ????structpkt_attrib?*pattrib?=?&pxmitframe->attrib;??
  • ??
  • ????//創(chuàng)建urb,這里是在其它地方創(chuàng)建完成之后,傳遞過(guò)來(lái)??
  • ?????purb?=?pxmitbuf->pxmit_urb[0];??
  • ??
  • ????//初始化批量urb??
  • ????usb_fill_bulk_urb(purb,?pusbd,?pipe,??
  • ????????pxmitframe->buf_addr,//=?pxmitbuf->pbuf??
  • ????????cnt,??
  • ????????usb_write_port_complete,??
  • ????????pxmitbuf);//contextis?pxmitbuf??
  • ??
  • ????//提交urb??
  • ????status?=?usb_submit_urb(purb,GFP_ATOMIC);??
  • ??
  • ????return?ret;??
  • ??
  • }??
  • ? ? ? ? 完成以上批量數(shù)據(jù)的讀寫(xiě)操作之后,大家可能會(huì)疑問(wèn):這不是一般USB設(shè)備驅(qū)動(dòng)的操作流程嗎?貌似和wifi沒(méi)有半毛錢(qián)的關(guān)系啊!從上面看,確實(shí)和wifi沒(méi)有任何聯(lián)系,但是以上只是一個(gè)鋪墊。我們一直強(qiáng)調(diào)USB接口在wifi模塊中充當(dāng)什么角色,既然是接口,那么它就是為數(shù)據(jù)傳輸而生。所以,和wifi扯上關(guān)系的就在于usb_read_port()usb_write_port()這兩個(gè)函數(shù)。


    三、讀寫(xiě)函數(shù)分析

    ? ? ? ?USB接口在wifi模塊中的最重要兩個(gè)函數(shù)是usb_read_port()和usb_write_port()。那它們是怎么和wifi扯上關(guān)系的呢?我們可以從以下三個(gè)方面去分析:

    a -- 首先需要明確wifi模塊是USB設(shè)備,主控(CPU)端是USB主機(jī);

    b -- USB主機(jī)若需要對(duì)wifi模塊進(jìn)行數(shù)據(jù)的讀寫(xiě)時(shí),就必須經(jīng)過(guò)USB接口;

    c -- 既然涉及到數(shù)據(jù)的讀寫(xiě)操作,必然要用相應(yīng)的讀寫(xiě)函數(shù),那么usb_read_port()和usb_write_port()即是它們的讀寫(xiě)函數(shù)。


    ? ? ? ?我們先從讀數(shù)據(jù)開(kāi)始進(jìn)行分析,在分析之前,我們必須了解USB設(shè)備驅(qū)動(dòng)的讀數(shù)據(jù)過(guò)程。USB讀取數(shù)據(jù)操作流程如下:

    a -- 通過(guò)usb_alloc_urb()函數(shù)創(chuàng)建并分配一個(gè)URB,作為傳輸U(kuò)SB數(shù)據(jù)的載體;

    b -- 創(chuàng)建并分配DMA緩沖區(qū),以DMA方式快速傳輸數(shù)據(jù);

    c -- 初始化URB,根據(jù)wifi的傳輸數(shù)據(jù)量,我們需要初始化為批量URB,相應(yīng)操作函數(shù)為usb_fill_bulk_urb();

    d -- 將URB提交到USB核心;

    e -- 提交成功后,URB的完成函數(shù)將被USB核心調(diào)用。

    ? ? ? ? 我們知道只有當(dāng)wifi模塊有數(shù)據(jù)可讀時(shí),主控端才能成功地讀取數(shù)據(jù)。那么wifi模塊什么時(shí)候有數(shù)據(jù)可讀呢?——下面重點(diǎn)來(lái)了!wifi模塊通過(guò)RF端接收到無(wú)線(xiàn)網(wǎng)絡(luò)數(shù)據(jù),然后緩存到wifi芯片的RAM中,此時(shí),wifi模塊就有數(shù)據(jù)可讀了

    ? ? ? ?經(jīng)過(guò)上面的分析,我們找到了一條USB接口與wifi模塊扯上關(guān)系的線(xiàn)索,就是wifi模塊的接收數(shù)據(jù),會(huì)引發(fā)USB接口的讀數(shù)據(jù);

    ? ? ? 現(xiàn)在,我們轉(zhuǎn)到wifi模塊的接收函數(shù)中,看看是不是真的這樣?

    ? ? ? 在wifi接收函數(shù)初始化中,我們可以看到usb_alloc_urb()創(chuàng)建一個(gè)中斷URB。偽代碼如下:

    [cpp]?view plaincopy
  • int?xxxwifi_init_recv(_adapter?*padapter)????
  • {????
  • ????struct?recv_priv?*precvpriv?=?&padapter->recvpriv;????
  • ????int?i,?res?=?_SUCCESS;????
  • ????struct?recv_buf?*precvbuf;????
  • ????
  • ????tasklet_init(&precvpriv->recv_tasklet,?(void(*)(unsigned?long))rtl8188eu_recv_tasklet,?(unsigned?long)padapter);????
  • ????
  • ????precvpriv->int_in_urb?=?usb_alloc_urb(0,?GFP_KERNEL);?//創(chuàng)建一個(gè)中斷URB????
  • ????
  • ????precvpriv->int_in_buf?=?rtw_zmalloc(INTERRUPT_MSG_FORMAT_LEN);????
  • ????//init?recv_buf????
  • ????_rtw_init_queue(&precvpriv->free_recv_buf_queue);????
  • ????_rtw_init_queue(&precvpriv->recv_buf_pending_queue);????
  • ????
  • ????precvpriv?->?pallocated_recv_buf?=?rtw_zmalloc(NR_RECVBUFF?*sizeof(struct?recv_buf)?+?4);????
  • ????precvbuf?=?(struct?recv_buf*)precvpriv->precv_buf;????
  • ????
  • ????for(i=0;?i?<?NR_RECVBUFF?;?i++)????
  • ????{????
  • ????????_rtw_init_listhead(&precvbuf->list);????
  • ????????_rtw_spinlock_init(&precvbuf->recvbuf_lock);????
  • ????????precvbuf->alloc_sz?=?MAX_RECVBUF_SZ;????
  • ????
  • ????????res?=?rtw_os_recvbuf_resource_alloc(padapter,?precvbuf);????
  • ????
  • ????????precvbuf->ref_cnt?=?0;????
  • ????????precvbuf->adapter?=padapter;????
  • ????????precvbuf++;????
  • ????}????
  • ????precvpriv->free_recv_buf_queue_cnt?=?NR_RECVBUFF;????
  • ????
  • ????skb_queue_head_init(&precvpriv->rx_skb_queue);????
  • ????
  • #ifdef?CONFIG_PREALLOC_RECV_SKB????
  • ????{????
  • ????????int?i;????
  • ????????SIZE_PTR?tmpaddr=0;????
  • ????????SIZE_PTR?alignment=0;????
  • ????????struct?sk_buff?*pskb=NULL;????
  • ????????skb_queue_head_init(&precvpriv->free_recv_skb_queue);????
  • ????????for(i=0;?i<NR_PREALLOC_RECV_SKB;?i++)????
  • ????????{????
  • ????????????pskb?=?rtw_skb_alloc(MAX_RECVBUF_SZ?+?RECVBUFF_ALIGN_SZ);????
  • ????????????if(pskb)????
  • ????????????{????
  • ????????????????pskb->dev?=?padapter->pnetdev;????
  • ????????????????tmpaddr?=?(SIZE_PTR)pskb->data;????
  • ????????????????alignment?=?tmpaddr?&?(RECVBUFF_ALIGN_SZ-1);????
  • ????????????????skb_reserve(pskb,?(RECVBUFF_ALIGN_SZ?-?alignment));????
  • ????????????????skb_queue_tail(&precvpriv->free_recv_skb_queue,?pskb);????
  • ????????????}????
  • ????????????pskb=NULL;????
  • ????????}????
  • ????}????
  • #endif????
  • ????return?res;????
  • }????
  • ?在rtw_os_recvbuf_resource_alloc函數(shù)中,創(chuàng)建一個(gè)批量URB和一個(gè)DMA緩沖區(qū)。偽代碼如下:

    [cpp]?view plaincopy
  • int?rtw_os_recvbuf_resource_alloc(_adapter?*padapter,?struct?recv_buf?*precvbuf)????
  • {????
  • ????int?res=_SUCCESS;????
  • ????struct?dvobj_priv???*pdvobjpriv?=?adapter_to_dvobj(padapter);????
  • ????struct?usb_device???*pusbd?=?pdvobjpriv->pusbdev;????
  • ????
  • ????precvbuf->irp_pending?=?_FALSE;????
  • ????precvbuf->purb?=?usb_alloc_urb(0,?GFP_KERNEL);?//創(chuàng)建一個(gè)批量URB????
  • ????
  • ????precvbuf->pskb?=?NULL;????
  • ????precvbuf->reuse?=?_FALSE;????
  • ????precvbuf->pallocated_buf??=?precvbuf->pbuf?=?NULL;????
  • ????precvbuf->pdata?=?precvbuf->phead?=?precvbuf->ptail?=?precvbuf->pend?=?NULL;????
  • ????precvbuf->transfer_len?=?0;????
  • ????precvbuf->len?=?0;????
  • ????
  • ????#ifdef?CONFIG_USE_USB_BUFFER_ALLOC_RX????
  • ????precvbuf->pallocated_buf?=?rtw_usb_buffer_alloc(pusbd,?(size_t)precvbuf->alloc_sz,?&precvbuf->dma_transfer_addr);??//創(chuàng)建一個(gè)DMA緩沖區(qū)????
  • ????precvbuf->pbuf?=?precvbuf->pallocated_buf;????
  • ????if(precvbuf->pallocated_buf?==?NULL)????
  • ????????return?_FAIL;????
  • ????#endif?//CONFIG_USE_USB_BUFFER_ALLOC_RX????
  • ????????
  • ????return?res;????
  • }????
  • ? ? ? 在usb_read_port()函數(shù)中,通過(guò)usb_fill_bulk_urb()初始化批量URB,并且提交給USB核心,也即USB讀取數(shù)據(jù)操作流程的第3、4步。在usb_fill_bulk_urb()函數(shù)中,初始化URB的完成函數(shù)usb_read_port_complete(),只有當(dāng)URB提交完成后,函數(shù)usb_read_port_complete()將被調(diào)用。偽代碼如下:

    [cpp]?view plaincopy
  • static?u32?usb_read_port(struct?intf_hdl?*pintfhdl,?u32?addr,?u32?cnt,?u8?*rmem)????
  • {???????
  • ????struct?recv_buf?*precvbuf?=?(struct?recv_buf?*)rmem;????
  • ????_adapter????????*adapter?=?pintfhdl->padapter;????
  • ????struct?dvobj_priv???*pdvobj?=?adapter_to_dvobj(adapter);????
  • ????struct?pwrctrl_priv?*pwrctl?=?dvobj_to_pwrctl(pdvobj);????
  • ????struct?recv_priv????*precvpriv?=?&adapter->recvpriv;????
  • ????struct?usb_device???*pusbd?=?pdvobj->pusbdev;????
  • ????
  • ????rtl8188eu_init_recvbuf(adapter,?precvbuf);??????????
  • ????
  • ????precvpriv->rx_pending_cnt++;????
  • ????
  • ????purb?=?precvbuf->purb;????
  • ????
  • ????//translate?DMA?FIFO?addr?to?pipehandle????
  • ????pipe?=?ffaddr2pipehdl(pdvobj,?addr);????
  • ????
  • ????usb_fill_bulk_urb(purb,?pusbd,?pipe,?????
  • ????????????????????precvbuf->pbuf,????
  • ????????????????????????????MAX_RECVBUF_SZ,????
  • ????????????????????????????usb_read_port_complete,????
  • ????????????????????????????precvbuf);//context?is?precvbuf????
  • ????
  • ????err?=?usb_submit_urb(purb,?GFP_ATOMIC);????
  • ????
  • ????return?ret;????
  • }????
  • ? ? ?通過(guò)上面的代碼,我們可以得知在wifi模塊為接收數(shù)據(jù)做初始化準(zhǔn)備時(shí),分配了URB和DMA緩沖區(qū)。而在usb_read_port()函數(shù)中初始化URB和提交URB。

    < 未完待續(xù).....>

    總結(jié)

    以上是生活随笔為你收集整理的Linux 下wifi 驱动开发(四)—— USB接口WiFi驱动浅析的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

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

    国产在线精品播放 | 日韩在线视频在线观看 | 一区二区精品在线观看 | 久久视频这里有久久精品视频11 | 91精品国产福利在线观看 | 欧美一区二区伦理片 | 日韩免费网站 | 九九精品视频在线观看 | 国模一区二区三区四区 | 波多野结衣视频一区二区三区 | 国内精品久久久 | 九九久久视频 | 亚洲精品福利在线观看 | 久久久资源网 | 国产成人av免费在线观看 | 色婷婷伊人 | 视频91在线 | 五月天久久婷婷 | 国产免费观看久久 | 精品免费久久 | 亚洲,播放 | 免费看污在线观看 | 久久黄色免费观看 | 亚洲在线激情 | 国产精品99久久久久人中文网介绍 | 国产99精品在线观看 | 成人性生交大片免费看中文网站 | 中文字幕日韩精品有码视频 | 久草久热| 免费一级特黄毛大片 | 丝袜美腿一区 | 在线观看亚洲成人 | 国产黄网在线 | 黄色大片中国 | 婷婷六月天在线 | 中文字幕一区二区在线观看 | 中文字幕av免费 | 国产一区二区在线观看视频 | 亚洲精品系列 | 色婷婷综合视频在线观看 | 在线观看黄色的网站 | 日批视频国产 | 亚洲欧美经典 | 2019中文字幕网站 | www.久久精品视频 | 色欧美综合 | av观看久久久 | 天天透天天插 | 一区二区在线影院 | 国产精品久久久一区二区 | 久草网站在线 | 蜜臀久久99精品久久久无需会员 | 久久精国产 | 97视频在线免费 | 国产精品美女视频 | 九九九九热精品免费视频点播观看 | av黄色在线观看 | 97色综合| 国产精品自拍在线 | 久久久夜色 | 韩国av电影在线观看 | 国产1区2| 狠狠五月天 | 亚洲精品动漫在线 | 激情av综合 | 91麻豆国产 | 欧美日韩在线看 | 午夜精品一区二区三区在线视频 | 美女视频永久黄网站免费观看国产 | 伊人伊成久久人综合网站 | 国产精品欧美日韩在线观看 | 国产精品免费一区二区 | 中文在线中文资源 | www.黄色小说.com| 97色在线观看免费视频 | av网站手机在线观看 | 91麻豆精品国产91久久久久 | 午夜精品视频一区 | 亚洲波多野结衣 | 国产经典三级 | 久久人人射 | 亚洲一区二区三区miaa149 | av在线播放国产 | 久久亚洲福利 | 国产经典三级 | 国产欧美综合在线观看 | 岛国av在线不卡 | 麻豆av电影 | av在线影片 | 婷婷日韩 | 99热在线这里只有精品 | 亚洲精品mv在线观看 | 欧美精品久久久久久久久久丰满 | av电影不卡在线 | 中文字幕 国产精品 | 91传媒视频在线观看 | 西西444www | 欧美大片在线观看一区 | 国产97碰免费视频 | 欧美亚洲免费在线一区 | 国产青草视频在线观看 | 国产一区二区播放 | 狠狠色丁香婷婷综合 | 天天综合人人 | 天天色天天操综合 | 黄色小说在线观看视频 | 亚洲国产理论片 | 日韩在线观看视频中文字幕 | 成人黄色片免费 | 久久色在线播放 | 人人插人人插 | 免费在线黄网 | 欧美日韩视频在线观看免费 | 国产在线国产 | 国产精品一区二区久久久久 | 国产青春久久久国产毛片 | 国产群p | 日本午夜免费福利视频 | 国产精品自拍在线 | 亚洲乱码国产乱码精品天美传媒 | 国产福利中文字幕 | 亚洲高清在线 | 天天操导航 | 四月婷婷在线观看 | 丰满少妇一级 | 在线天堂亚洲 | 国产精品久久久久久久久岛 | 在线视频国产区 | 欧美亚洲精品一区 | 91正在播放 | 黄色精品久久 | bbbbb女女女女女bbbbb国产 | 免费在线观看一区 | 久久久精品国产一区二区电影四季 | 一级黄色片毛片 | 久久这里只有精品首页 | 国产亚洲婷婷免费 | 色婷婷a | 久久久久国产精品免费 | 亚洲清纯国产 | 最新中文字幕在线播放 | 欧美成人性战久久 | 日韩欧美69 | 亚洲精品理论片 | 国产午夜在线观看 | 91视频在线观看大全 | 日韩69视频 | 色噜噜狠狠狠狠色综合 | 久久久www | 久久99国产一区二区三区 | 三上悠亚在线免费 | 91麻豆精品国产91久久久无限制版 | 精品视频网站 | 久久国产电影院 | 欧美激情xxxx性bbbb | 国产一区在线播放 | 久久人视频 | 亚洲一区二区高潮无套美女 | 综合网伊人 | 午夜久久 | 久久精品一区二区三区中文字幕 | 久久大片网站 | 国产精品日韩久久久久 | 免费看v片网站 | 992tv在线观看 | 欧美激情视频一二区 | 麻豆av一区二区三区在线观看 | 91最新网址| 狠狠色狠狠色综合系列 | 午夜精品久久久久99热app | 欧美精品午夜 | 91亚洲精品在线观看 | 91在线精品秘密一区二区 | 在线观av | 国产一区精品在线观看 | 久久免费中文视频 | 中文字幕美女免费在线 | 欧美嫩草影院 | www.天天综合 | 91黄视频在线观看 | 狠狠干天天操 | 一区二区欧美激情 | 射综合网 | 精品国产一区二区三区av性色 | 久久精品视频在线播放 | 一区二区成人国产精品 | 97精品国产97久久久久久久久久久久 | 波多野结衣亚洲一区二区 | av在线播放网址 | 国产精品一区二区在线免费观看 | 黄色a一级片| 在线观看理论 | 日本精品久久久久影院 | 免费黄在线看 | 亚洲一区二区精品视频 | 久久免费电影 | 自拍超碰在线 | 日本91在线 | 一区二区在线影院 | 在线亚洲天堂网 | 日韩一二区在线 | 激情五月在线观看 | 国产成人在线观看免费 | 欧美一区二区三区特黄 | 亚洲欧洲视频 | 亚洲黄色网络 | 日本动漫做毛片一区二区 | 不卡国产在线 | 最近更新的中文字幕 | 中文字幕有码在线 | 国产伦理一区二区三区 | 久久久久免费电影 | 99视频这里有精品 | 中文字幕在线观看免费高清电影 | 国产亚洲一区二区在线观看 | 一区二区在线电影 | 日韩在线中文字幕视频 | 成年人视频在线免费观看 | 91福利视频一区 | 青青河边草免费观看完整版高清 | 日韩精品视频在线免费观看 | 国产一区二区中文字幕 | 欧美狠狠色 | 日韩成人不卡 | 午夜18视频在线观看 | 久草.com| 深爱激情综合 | 一级黄色毛片 | www.com.黄| 国产成人一区二区三区影院在线 | 欧美福利精品 | 激情婷婷丁香 | 97视频在线免费播放 | 成 人 黄 色 视频 免费观看 | 免费成人黄色片 | 国模一区二区三区四区 | 亚洲精品国产区 | 91尤物国产尤物福利在线播放 | 欧美日韩一区二区三区在线观看视频 | 国产破处精品 | 国产在线传媒 | 免费看污的网站 | 亚洲涩涩一区 | 日韩亚洲精品电影 | 日韩精品一区二区三区免费观看 | 国产精品成人一区二区三区吃奶 | 青青河边草观看完整版高清 | 韩国av一区 | 国产精品视频专区 | 人人舔人人 | 精品播放 | 九色91在线 | 天天激情天天干 | 中文字幕 在线看 | 久久黄色影视 | 91九色porny蝌蚪视频 | 在线国产日韩 | 丁香婷婷基地 | 国产vs久久 | 欧美精品在线免费 | 91传媒视频在线观看 | 亚洲午夜久久久综合37日本 | 久久经典国产 | 97色综合| 欧美日韩一区二区在线观看 | 黄色大全免费网站 | 日韩无在线| 免费一级片久久 | 久久你懂的| 在线 高清 中文字幕 | 最近中文字幕免费视频 | 97精品国产91久久久久久久 | 欧美国产日韩一区二区三区 | 欧美日韩1区 | 免费观看91 | 精品一二区 | av大片网址 | 国产一级做a爱片久久毛片a | 日韩午夜在线播放 | 欧美最猛性xxxxx(亚洲精品) | 日韩欧美xxx| 国产一级片免费播放 | 手机在线免费av | 日韩精品高清视频 | 亚洲在线视频网站 | 色姑娘综合天天 | 国产精品免费在线 | 成人黄色视 | 国产一区二区综合 | 日产乱码一二三区别免费 | 日本精品视频在线观看 | 91精品啪在线观看国产81旧版 | 免费观看的黄色 | 81国产精品久久久久久久久久 | 免费欧美 | 国产不卡一区二区视频 | 8x8x在线观看视频 | 国产亚洲精品久久久网站好莱 | 久久欧美在线电影 | 91漂亮少妇露脸在线播放 | 91视频a | 五月天六月婷婷 | 五月婷婷综合色拍 | 四虎国产精品永久在线国在线 | 最新日韩在线 | 四虎成人精品永久免费av | 国产福利精品视频 | 亚洲一区日韩精品 | 欧美天天综合网 | 综合久久久久久久久 | 久草国产在线 | 狠狠色伊人亚洲综合网站色 | 国产成人在线综合 | 99re8这里有精品热视频免费 | 色婷婷久久久 | 波多野结衣电影久久 | 九九导航 | 最近高清中文字幕 | 天天操福利视频 | 在线之家官网 | 欧美一级特黄aaaaaa大片在线观看 | 日本在线观看视频一区 | ,午夜性刺激免费看视频 | 免费黄a大片 | 久久亚洲福利视频 | 日韩欧美中文 | 欧美日韩一区二区三区在线观看视频 | 欧美a级成人淫片免费看 | 国产资源网 | 黄色网免费 | 精品在线视频一区 | 亚洲日本在线视频观看 | 欧美日韩1区2区 | 日日爱视频| 伊人色综合久久天天网 | 激情欧美网| 日韩在线观看网址 | 日韩在线视频网址 | 精品一区二区久久久久久久网站 | 久久久久免费电影 | 99久久精品免费看国产四区 | 黄色免费视频在线观看 | 91精品国产综合久久婷婷香蕉 | 国产剧情久久 | 欧美一区二区三区在线观看 | 国产精品99久久久久久人免费 | 欧美日韩久久一区 | 日韩激情av在线 | caobi视频| 日韩精品视频在线观看免费 | 91亚洲狠狠婷婷综合久久久 | 91精品啪 | 性色大片在线观看 | 99久高清在线观看视频99精品热在线观看视频 | 97超碰免费 | 成人a视频片观看免费 | 在线av资源 | 欧美日韩国产一二 | 天天干,天天操,天天射 | 久久精品影视 | 玖玖爱在线观看 | 欧美在线久久 | 最近中文字幕免费av | 久草在线免费看视频 | 丁香午夜婷婷 | 毛片二区 | 亚洲春色综合另类校园电影 | 色婷婷骚婷婷 | 黄色亚洲免费 | 久久久国产精品免费 | 欧美高清成人 | 日韩视频在线一区 | 国产在线1区 | 国产一区视频在线观看免费 | 国产经典三级 | a久久免费视频 | 激情欧美日韩一区二区 | 激情六月婷婷久久 | 国产高清网站 | 国内一级片在线观看 | 日韩欧美精品在线观看视频 | 在线观看黄色的网站 | 最新影院 | 久草在在线视频 | 国产成人久久精品77777 | 国产护士在线 | 91高清完整版在线观看 | 国产剧在线观看片 | 国产亚洲一区二区三区 | 国内三级在线观看 | 国产 日韩 欧美 中文 在线播放 | 一区二区三区四区精品视频 | 国内视频 | 一区二区成人国产精品 | 国产精品久久久久久爽爽爽 | 激情网第四色 | 国产 中文 日韩 欧美 | 18av在线视频 | 精品一区二区三区久久久 | 丁香五香天综合情 | 激情网在线观看 | 18久久久| 91精品国产三级a在线观看 | 最新在线你懂的 | 在线观看中文字幕网站 | 欧美日韩一区二区在线观看 | wwwwwww黄 | www.在线观看视频 | 婷婷丁香激情 | 蜜臀av网址| 91精品久久香蕉国产线看观看 | 日日骑| 国产亚洲综合精品 | 国产黄色理论片 | 午夜精品久久久久久久99婷婷 | 国产精品ⅴa有声小说 | 亚洲高清视频在线观看 | 视频在线播放国产 | 久久成人人人人精品欧 | 91黄视频在线观看 | 欧洲精品亚洲精品 | 夜夜夜 | 国产精品久久99精品毛片三a | 久久美女免费视频 | 免费欧美高清视频 | 成人羞羞免费 | 午夜影院一级片 | 日韩成人免费在线观看 | 日本精品视频在线播放 | 99久高清在线观看视频99精品热在线观看视频 | 久久亚洲影视 | 久久国产经典 | 亚洲国产精品久久久久 | 久久九九久久九九 | 黄色影院在线观看 | 国产成人精品亚洲日本在线观看 | 亚洲精品视频网址 | 99婷婷狠狠成为人免费视频 | 激情欧美日韩一区二区 | 国产精品视频专区 | 天天操天天添 | 久久久久久久av | 色婷婷久久久 | 日韩在线看片 | 精品免费99久久 | 日韩综合在线观看 | 丁香久久激情 | 欧美一二三专区 | 国产一级视屏 | 91麻豆精品国产自产在线游戏 | 91精品久久久久久久91蜜桃 | 国内丰满少妇猛烈精品播放 | 美女久久久久久久久久久 | 91九色老 | 黄污视频大全 | 国产99久久99热这里精品5 | 国产美女永久免费 | 91色一区二区三区 | av福利网址导航 | 在线看免费| 黄色特一级片 | 午夜美女wwww | 精品国产亚洲一区二区麻豆 | 激情动态| 国产在线视频一区二区 | 国产精品乱码久久久 | 国产黄色精品在线 | a在线观看免费视频 | 国产精品色视频 | 国产精品岛国久久久久久久久红粉 | 男女精品久久 | 国产亚洲在 | 亚洲经典中文字幕 | 91av资源网| 日韩成人精品一区二区三区 | 成人资源网 | 免费a视频| 337p日本欧洲亚洲大胆裸体艺术 | 九九免费在线视频 | 96久久 | 五月综合网站 | 国产亚洲精品久久久网站好莱 | 欧美精品久久久久久久亚洲调教 | 日韩成人高清在线 | 国产999免费视频 | 欧美一区中文字幕 | 日韩在线观看一区二区 | 欧美激情h | 在线 视频 一区二区 | 国产高清不卡一区二区三区 | 国产一区视频免费在线观看 | 丝袜美腿在线视频 | 在线观看免费版高清版 | 国产精品久久一区二区无卡 | 中文字幕无吗 | 国产午夜精品在线 | 在线亚洲欧美视频 | 天天操夜夜拍 | 免费成视频 | 精品久久久久久国产偷窥 | 在线观看免费高清视频大全追剧 | 成人18视频 | 久久综合五月 | 久久国产精品色av免费看 | 欧美一区日韩一区 | 96精品高清视频在线观看软件特色 | 国产精品国内免费一区二区三区 | 天天玩天天操天天射 | 日本成址在线观看 | 国产成人精品区 | 久久久久久久99 | 亚洲精品玖玖玖av在线看 | 亚洲精品字幕在线观看 | 日韩免费一区二区在线观看 | 成人av观看 | 97在线影院| 亚州精品国产 | 国产最新视频在线 | 国产精品一区久久久久 | 国产美女免费观看 | 欧美精品v国产精品 | 黄色特级毛片 | 国产香蕉视频在线观看 | 干狠狠| 天天射天天干天天爽 | 免费看三级黄色片 | 久久人人做| 国产视频中文字幕 | 免费a级大片 | 精品国产乱码久久久久久1区二区 | 国产精品久久久久久欧美 | 日韩在线观看电影 | 玖玖玖国产精品 | 精品欧美日韩 | zzijzzij日本成熟少妇 | 亚洲黄色免费观看 | 久久久久国产免费免费 | 久久香蕉国产精品麻豆粉嫩av | 免费观看mv大片高清 | 五月激情姐姐 | 亚洲日韩欧美一区二区在线 | 中文字幕 国产视频 | 午夜av在线免费 | 国产精品久久久亚洲 | 免费三级网 | 五月婷婷久 | 亚洲精品在线一区二区三区 | 成人av高清在线 | 国产视频欧美视频 | 青青河边草观看完整版高清 | 99精品在线免费视频 | 精品999久久久| 综合色中色 | 久久国产成人午夜av影院宅 | 日韩美女黄色片 | 日韩av不卡在线播放 | 婷婷久久婷婷 | 91免费观看 | 黄色www免费| 高清在线观看av | 久久男人影院 | 91视频 - v11av | 久久国产麻豆 | 玖玖视频在线 | 日本黄色特级片 | 日韩欧美视频在线免费观看 | av网站播放 | 99精品视频免费看 | 一区二区三区精品在线 | 久久免费激情视频 | 午夜久久久久久久久 | 久久精品在线视频 | 国产男女免费完整视频 | 国产日韩欧美在线观看视频 | 91精品视频观看 | 在线视频18在线视频4k | 免费看片成人 | 日韩在线高清免费视频 | 欧美精品黑人性xxxx | 亚州av一区 | wwwwwww色| 乱男乱女www7788 | 最近中文字幕免费视频 | 久久免费精品国产 | 免费在线黄色av | 日韩免费在线观看视频 | 欧美日本在线视频 | 日韩在线观看你懂得 | 日本99热| 色美女在线 | 97理论片 | 日韩欧美精品在线观看 | 久久国产精品一二三区 | 午夜视频在线观看欧美 | 国产精品白浆 | 黄色福利网 | 国产在线观看你懂得 | 免费av免费观看 | 蜜臀91丨九色丨蝌蚪老版 | 国产精品a久久 | 欧美在线久久 | 久久艹精品 | 国产69久久久欧美一级 | av成人在线看 | 综合久久网| 色综合久久88色综合天天人守婷 | 激情久久影院 | 91视频麻豆| 日韩欧美高清 | 亚洲va欧洲va国产va不卡 | 成人91在线 | 国产精品网红直播 | 超级碰碰碰免费视频 | 亚洲另类xxxx | 91在线影视 | 91av短视频 | 国产系列在线观看 | 久久久受www免费人成 | 国产精品女人久久久 | 日韩高清免费在线观看 | 中文字幕日韩无 | 免费性网站 | 99情趣网视频| 五月天丁香| 四虎免费在线观看视频 | 黄色国产在线观看 | 97人人模人人爽人人喊中文字 | 亚洲伦理中文字幕 | 免费av 在线 | 欧美做受xxx | 亚洲国产精彩中文乱码av | 最近中文国产在线视频 | 天天骚夜夜操 | 日韩精品一区二区三区水蜜桃 | 国产视频在线观看一区 | 国产亚洲精品免费 | 亚洲专区在线 | 色成人亚洲网 | 国产精品第一视频 | 顶级欧美色妇4khd | 精品国产91亚洲一区二区三区www | 菠萝菠萝蜜在线播放 | 亚洲精品国产高清 | 免费又黄又爽视频 | 最新av在线播放 | 久久97视频 | 国产麻豆精品免费视频 | 亚洲自拍av在线 | 色香蕉视频 | 久艹视频在线观看 | 国产va在线| 人人射人人插 | 欧美天天综合网 | 精品999在线观看 | 天天玩天天操天天射 | 欧美a√大片 | 视频一区二区国产 | 国产精品igao视频网网址 | 精品高清美女精品国产区 | 99久久爱 | 91看片成人 | 国产精品自产拍在线观看 | 免费看三片 | 亚洲免费在线视频 | 亚洲国产免费av | 久久久91精品国产 | 亚洲视频在线看 | 水蜜桃亚洲一二三四在线 | 亚洲国产欧美在线人成大黄瓜 | 色亚洲激情 | 久热只有精品 | 日韩精品一区二区久久 | 日韩中文字幕在线观看 | 国产精品久久久久久一二三四五 | 色操插 | 久久视频6 | 波多野结衣一区二区三区中文字幕 | 亚洲日本在线一区 | 麻豆视频大全 | 国产精品不卡av | 欧洲成人av | 久久麻豆视频 | 欧美大片第1页 | 99久久久国产精品免费99 | a在线观看视频 | 国产亚洲成人网 | 国产手机视频在线观看 | 国产精品久久久久久久久久三级 | 亚洲精品www | 中文字幕在线观看完整版电影 | 久久伦理电影网 | 在线激情影院一区 | 九热精品 | 久草久草视频 | 国产91在线播放 | 91高清视频免费 | 91视频下载| 一区三区视频在线观看 | 国产精品2019 | 人人超在线公开视频 | 国产精品一区二区三区久久 | 男女拍拍免费视频 | 中文字幕在线播放av | 中文字幕 成人 | 成人a毛片| 欧美大jb | 9在线观看免费高清完整版 玖玖爱免费视频 | 亚洲国内精品在线 | 免费h视频 | 国产精品久久久久久久久免费 | 伊人电影天堂 | 天天爽夜夜爽人人爽曰av | 丁香婷婷在线 | 91精品啪 | 国产剧情一区二区 | 精品视频 | 97超碰精品 | 97影视 | 97视频免费在线看 | 果冻av在线 | 麻豆国产精品一区二区三区 | 69国产盗摄一区二区三区五区 | 国产夫妻自拍av | 日韩在线中文字幕 | www色| 亚洲综合干| 色婷婷亚洲婷婷 | 狠狠躁夜夜躁人人爽超碰97香蕉 | 中文字幕在线免费看 | v片在线播放 | 97在线视频免费播放 | av高清一区二区三区 | 日韩久久影院 | 麻豆国产网站入口 | 国产精品乱码久久久久 | 日韩理论片中文字幕 | 国产精品一区二区三区久久 | 日日日爽爽爽 | 狠狠干五月天 | 中文字幕在线观看1 | 99视频精品 | 欧美日韩一区二区三区在线观看视频 | 国产高清专区 | 国产精品福利在线观看 | 一本色道久久精品 | 免费a网站| 久久avav| 久久久久久久毛片 | 天天爽天天爽天天爽 | 久久精品播放 | 狠狠色综合欧美激情 | 久久久国际精品 | 91成人久久| 在线播放视频一区 | 国产一区二区视频在线播放 | 美女久久99 | 88av色| 国产精品久久久久久麻豆一区 | 久久福利 | 久草精品视频在线看网站免费 | 在线视频 精品 | 国产黄a三级三级三级三级三级 | 欧美日韩精品免费观看视频 | 久久精品视频4 | 日韩v在线| 日韩中文三级 | 91麻豆精品国产91久久久久久 | 久久久久久久久久久久亚洲 | 干天天 | av片中文 | 麻豆久久精品 | 成人在线观看网址 | 九九九九精品 | 国产一区免费观看 | 国产精品视频在线观看 | 亚洲一级黄色片 | 午夜精品剧场 | 国产精品中文字幕在线播放 | 黄色日视频 | 激情片av| 天天爽夜夜爽人人爽曰av | 亚洲成人中文在线 | 国产精品久久av | 日韩激情久久 | 黄色亚洲在线 | 天天天干天天天操 | 18av在线视频 | 国产亚洲婷婷免费 | 亚洲人久久久 | 久草在线综合网 | 深爱激情综合 | www日韩在线观看 | 99视频在线免费 | 久久毛片网 | 婷婷六月丁 | 中文字幕高清av | 欧美精品免费在线 | 色视频网址 | 久久国产精品一区二区三区四区 | 日韩性色 | 国产免费中文字幕 | 国产精品久久一卡二卡 | 天天操天天爱天天干 | 日韩乱码中文字幕 | 99精品免费视频 | 99免费在线观看视频 | 91x色| 婷婷色 亚洲 | 久草在在线 | 五月婷婷在线视频观看 | 超碰免费在线公开 | av怡红院 | 亚洲精品乱码久久久久久高潮 | 99草视频| 2019中文在线观看 | 999久久久久久 | 国产精品 欧美 日韩 | 中文在线天堂资源 | 久久污视频 | 国产精品刺激对白麻豆99 | 色婷婷福利视频 | 亚洲一区日韩精品 | 97超碰人人澡 | 久久国产a | 日本精品免费看 | 色婷婷在线播放 | 日韩动漫免费观看高清完整版在线观看 | 一区 二区 精品 | 久久永久免费视频 | 波多野结衣在线视频免费观看 | 欧美激情视频一二三区 | 国产成人精品综合久久久 | 久久小视频| 亚洲日本韩国一区二区 | 99久久99视频 | 日本爱爱免费 | 九九视频免费观看视频精品 | 欧美a在线免费观看 | 日韩影视在线 | 91人人澡 | 麻豆久久久久久久 | 亚洲精品自拍视频在线观看 | 精品国产亚洲一区二区麻豆 | 夜夜躁日日躁狠狠久久av | 亚洲v欧美v国产v在线观看 | 欧美精品在线观看一区 | 涩涩在线 | 国产91精品看黄网站 | av在线播放国产 | 综合网久久 | 精品国产一区二区三区噜噜噜 | 精品国产一区二区三区四区vr | av888av.com | 在线韩国电影免费观影完整版 | 国产一级淫片免费看 | 亚洲国产精品久久久久久 | aaa亚洲精品一二三区 | 欧美性生交大片免网 | 亚洲资源网 | 久久理论电影网 | 免费在线观看国产黄 | www.色午夜 | 免费v片 | 9ⅰ精品久久久久久久久中文字幕 | 亚洲开心色| 久久精品1区2区 | 综合激情av | 国产一区视频在线观看免费 | www.伊人色.com | 在线观看黄色免费视频 | 久久黄色小说视频 | 国产午夜亚洲精品 | 久草在线费播放视频 | 最近更新好看的中文字幕 | 日韩欧在线 | 五月婷婷激情综合 | 伊人成人久久 | 91成人看片 | 成人小视频免费在线观看 | 久久久久久久久久久久久国产精品 | 国产精品久久久久高潮 | 久久麻豆视频 | 久热免费 | 日本视频高清 | 99久久爱| 91mv.cool在线观看 | 免费看的黄色的网站 | 亚洲日本在线一区 | 色在线高清 | 91精品在线免费观看 | 一级黄色在线视频 | 国内一级片在线观看 | 成人网444ppp | 中字幕视频在线永久在线观看免费 | 激情网综合 | 草久在线观看视频 | 在线免费高清视频 | 亚洲精品免费在线 | 精品99免费 | 天天操人人干 | 欧洲一区二区在线观看 | 日韩精品播放 | www.色婷婷.com| 一区二区欧美日韩 | 日韩av在线小说 | 天天玩夜夜操 | 亚洲欧美国产日韩在线观看 | 午夜91在线 | 成人黄色中文字幕 | 亚洲综合国产精品 | 4438全国亚洲精品在线观看视频 | 亚洲四虎影院 | 国语久久 | 久久伊人婷婷 | 色狠狠婷婷 | 亚洲激情在线观看 | 久久久久久久久久久影视 | 婷婷久久综合网 | 在线观看视频日韩 | 久久久久国产精品一区 | 欧美极品少妇xbxb性爽爽视频 | 性日韩欧美在线视频 | 国产免费视频在线 | 91禁看片 | 国产一区二区播放 | 在线视频 你懂得 | 久久五月婷婷丁香社区 | 久草视频在线免费看 | 久久视频99| 黄色av免费 | 久久精品一区二区三区视频 | 成人在线免费观看网站 | 婷婷五天天在线视频 | 日日夜夜天天久久 | 国产男女无遮挡猛进猛出在线观看 | 日韩成人免费电影 | 激情综合中文娱乐网 | 欧美色图视频一区 | 国产精品国产三级国产不产一地 | 免费v片 | 欧美性高跟鞋xxxxhd | 91色吧| 免费在线一区二区 | 97在线观看免费视频 | 四虎影视www | 国产99久久99热这里精品5 | av电影免费在线看 | 亚洲国产精久久久久久久 | 欧美精品一区二区三区一线天视频 | 国产精品视频永久免费播放 | 亚洲播播| 91精品福利在线 | 国产成人黄色在线 | 色综合中文综合网 | 精品一区二区在线看 | 国产成人av电影 | 日本黄色黄网站 | 成人免费ⅴa | 久久久亚洲麻豆日韩精品一区三区 | 99久久久久国产精品免费 | 日韩av一区二区在线播放 | 久久神马影院 | 91完整版在线观看 | .精品久久久麻豆国产精品 亚洲va欧美 | 啪啪动态视频 | 日韩欧美久久 | 国产精品久久久网站 | 久久夜色精品国产欧美乱极品 | 97超碰人人澡人人 | 亚洲欧洲日韩在线观看 | 国产亚洲人成网站在线观看 | 日韩理论电影在线观看 | 亚洲免费精品一区二区 | 男女拍拍免费视频 | 日韩黄色网络 | 97精品国产一二三产区 | 蜜臀久久99精品久久久久久网站 | 亚洲成a人片在线观看网站口工 | 人人添人人澡 | 99视屏| 亚洲精品在线看 | 色com网 | 日本大尺码专区mv | 国产区免费在线 | 97在线观看免费观看高清 | 蜜臀av性久久久久蜜臀aⅴ涩爱 | 999国产 | 99视屏 | 99久久久久久国产精品 | 久久综合色天天久久综合图片 | 久草资源在线观看 | 免费在线观看一级片 | 日韩深夜在线观看 | 国产精品久久久毛片 | 三级视频片 | 又黄又爽的免费高潮视频 | 97精品国产 | 国产精品久久精品国产 |