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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

platform_device_系列函数及其设备注册的作用

發布時間:2023/12/10 编程问答 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 platform_device_系列函数及其设备注册的作用 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

platform_device_系列函數,實際上是注冊了一個叫platform的虛擬總線。使用約定是如果一個不屬于任何總線的設備,例如藍牙,串口等設備,都需要掛在這個虛擬總線上。

driver/base/platform.c

//platform設備聲明
struct device platform_bus = {
??? .bus_id??????? = "platform",
};
EXPORT_SYMBOL_GPL(platform_bus);

//platform總線設備聲明
struct bus_type platform_bus_type = {
??? .name??????? = "platform",
??? .dev_attrs??? = platform_dev_attrs,
??? .match??????? = platform_match,
??? .uevent??????? = platform_uevent,
??? .suspend??? = platform_suspend,
??? .suspend_late??? = platform_suspend_late,
??? .resume_early??? = platform_resume_early,
??? .resume??????? = platform_resume,
};
EXPORT_SYMBOL_GPL(platform_bus_type);

int __init platform_bus_init(void)
{
??? int error;

??? error = device_register(&platform_bus);//注冊了"platform"的設備
??? if (error)
??????? return error;
??? error = bus_register(&platform_bus_type);//注冊了叫"platform"的總線
??? if (error)
??????? device_unregister(&platform_bus);
??? return error;
}


//這里在platform總線上掛設備
int platform_device_add(struct platform_device *pdev)
{
??? int i, ret = 0;

??? if (!pdev)
??????? return -EINVAL;

??? if (!pdev->dev.parent)
??????? pdev->dev.parent = &platform_bus;//父設備設置為platform_bus

??? pdev->dev.bus = &platform_bus_type;//設置掛在platform總線上

??? if (pdev->id != -1)
??????? snprintf(pdev->dev.bus_id, BUS_ID_SIZE, "%s.%d", pdev->name,
???????????? pdev->id);
??? else
??????? strlcpy(pdev->dev.bus_id, pdev->name, BUS_ID_SIZE);

??? for (i = 0; i < pdev->num_resources; i++) {
??????? struct resource *p, *r = &pdev->resource[i];

??????? if (r->name == NULL)
??????????? r->name = pdev->dev.bus_id;

??????? p = r->parent;
??????? if (!p) {
??????????? if (r->flags & IORESOURCE_MEM)
??????????????? p = &iomem_resource;
??????????? else if (r->flags & IORESOURCE_IO)
??????????????? p = &ioport_resource;
??????? }

??????? if (p && insert_resource(p, r)) {
??????????? printk(KERN_ERR
?????????????????? "%s: failed to claim resource %d\n",
?????????????????? pdev->dev.bus_id, i);
??????????? ret = -EBUSY;
??????????? goto failed;
??????? }
??? }

??? pr_debug("Registering platform device '%s'. Parent at %s\n",
???????? pdev->dev.bus_id, pdev->dev.parent->bus_id);

??? ret = device_add(&pdev->dev);
??? if (ret == 0)
??????? return ret;

failed:
??? while (--i >= 0)
??????? if (pdev->resource[i].flags & (IORESOURCE_MEM|IORESOURCE_IO))
??????????? release_resource(&pdev->resource[i]);
??? return ret;
}
EXPORT_SYMBOL_GPL(platform_device_add);


//常用的platform_device_register,內部調用了platform_device_add,將設備掛在了platform總線上
/**
* platform_device_register - add a platform-level device
* @pdev: platform device we're adding
*/
int platform_device_register(struct platform_device *pdev)
{
??? device_initialize(&pdev->dev);
??? return platform_device_add(pdev);
}
EXPORT_SYMBOL_GPL(platform_device_register);

要用注冊一個platform驅動的步驟:
1,注冊設備platform_device_register
2,注冊驅動platform_driver_register
注冊時候的兩個名字必須一樣,才能match上,才能work,例如:
struct platform_device pxa3xx_device_nand = {
??? .name??????? = "pxa3xx-nand",
??? .id??????? = -1,
??? .dev??????? = {
??????? .dma_mask = &pxa3xx_nand_dma_mask,
??????? .coherent_dma_mask = DMA_BIT_MASK(32),
??? },
??? .resource??? = pxa3xx_resource_nand,
??? .num_resources??? = ARRAY_SIZE(pxa3xx_resource_nand),
};

static struct platform_driver pxa3xx_nand_driver = {
??? .driver = {
??????? .name??? = "pxa3xx-nand",
??? },
??? .probe??????? = pxa3xx_nand_probe,
??? .remove??????? = pxa3xx_nand_remove,
#ifdef CONFIG_PM
??? .suspend??? = pxa3xx_nand_suspend,
??? .resume??????? = pxa3xx_nand_resume,
#endif
};

而且device注冊的時候,可以給driver傳參數

struct device {
??? struct klist??????? klist_children;
??? struct klist_node??? knode_parent;??? /* node in sibling list */
??? struct klist_node??? knode_driver;
??? struct klist_node??? knode_bus;
??? struct device??????? *parent;

??? struct kobject kobj;
??? char??? bus_id[BUS_ID_SIZE];??? /* position on parent bus */
??? struct device_type??? *type;
??? unsigned??????? is_registered:1;
??? unsigned??????? uevent_suppress:1;

??? struct semaphore??? sem;??? /* semaphore to synchronize calls to
???????????????????? * its driver.
???????????????????? */

??? struct bus_type??? *bus;??????? /* type of bus device is on */
??? struct device_driver *driver;??? /* which driver has allocated this
?????????????????????? device */
??? void??????? *driver_data;??? /* data private to the driver */
??? void??????? *platform_data;??? /* Platform specific data, device
?????????????????????? core doesn't touch it */
??? struct dev_pm_info??? power;

#ifdef CONFIG_NUMA
??? int??????? numa_node;??? /* NUMA node this device is close to */
#endif
??? u64??????? *dma_mask;??? /* dma mask (if dma'able device) */
??? u64??????? coherent_dma_mask;/* Like dma_mask, but for
???????????????????????? alloc_coherent mappings as
???????????????????????? not all hardware supports
???????????????????????? 64 bit addresses for consistent
???????????????????????? allocations such descriptors. */

??? struct device_dma_parameters *dma_parms;

??? struct list_head??? dma_pools;??? /* dma pools (if dma'ble) */

??? struct dma_coherent_mem??? *dma_mem; /* internal for coherent mem
???????????????????????? override */
??? /* arch specific additions */
??? struct dev_archdata??? archdata;

??? spinlock_t??????? devres_lock;
??? struct list_head??? devres_head;

??? /* class_device migration path */
??? struct list_head??? node;
??? struct class??????? *class;
??? dev_t??????????? devt;??? /* dev_t, creates the sysfs "dev" */
??? struct attribute_group??? **groups;??? /* optional groups */

??? void??? (*release)(struct device *dev);
};
傳參數都是通過platform_data傳,所以定義為void *
??? void??????? *platform_data;??? /* Platform specific data, device




static struct pxa3xx_nand_platform_data XXX_nand_info = {
??? .parts??????????? = android_256m_v75_partitions,
??? .nr_parts??????? = ARRAY_SIZE(android_256m_v75_partitions),
};

static void __init XXX_init_nand(void)
{
??? pxa3xx_device_nand.dev.platform_data = &XXX_nand_info;
??? platform_device_register(&pxa3xx_device_nand);
}




static int __init pxa3xx_nand_probe(struct platform_device *pdev)
{
??? struct pxa3xx_nand_platform_data *pdata;
??? struct nand_chip *this;
??? struct pxa3xx_nand_info *info;
??? struct resource *res;
??? struct clk *clk = NULL, *smc_clk = NULL;
??? int status = -1;
??? struct mtd_partition *parts;
??? unsigned int data_buf_len;
#ifdef CONFIG_MTD_NAND_PXA3xx_DMA
??? unsigned int buf_len;
#endif
??? int i, ret = 0;
#ifdef CONFIG_MTD_PARTITIONS
??? int err;
#endif

??? pdata = pdev->dev.platform_data;
....
....
....
}

下面解釋一下pxa_register_device函數
??? pxa_set_ohci_info(&XXX_ohci_info);

void __init pxa_set_ohci_info(struct pxaohci_platform_data *info)
{
??? pxa_register_device(&pxa27x_device_ohci, info);
}

void __init pxa_register_device(struct platform_device *dev, void *data)
{
??? int ret;

??? dev->dev.platform_data = data;

??? ret = platform_device_register(dev);
??? if (ret)
??????? dev_err(&dev->dev, "unable to register device: %d\n", ret);
}

其實上,也就是給driver傳參數,通過dev.platform_data。

到這里,platform_device系列函數,基本算通了,系列函數還有一堆設置的函數,和device_register同級別的那些功能函數,用法基本差不多,只不過都將設備掛在了platform總線上。

?

?

platform_device_register向系統注冊設備

platform_driver_register向系統注冊驅動,過程中在系統尋找注冊的設備(根據.name),找到后運行.probe進行初始化。

?

?

***************************************************************

device_register()和platform_device_register()的區別(轉載)??


首先看device和platform_device區別
由struct platform_device {
const char * name; //NOTE:此處設備的命名應和相應驅動程序命名一致
u32 id;????????????//以實現driver binding
struct device dev;
u32 num_resources;
struct resource * resource;
};
可知:platform_device由device派生而來

內核中關于Platform devices的注釋
Platform devices
~~~~~~~~~~~~~~~~
Platform devices are devices that typically appear as autonomous
entities in the system. This includes legacy port-based devices and
host bridges to peripheral buses, and most controllers integrated
into system-on-chip platforms. What they usually have in common
is direct addressing from a CPU bus. Rarely, a platform_device will
be connected through a segment of some other kind of bus; but its
registers will still be directly addressable.

Platform devices are given a name, used in driver binding, and a
list of resources such as addresses and IRQs.
個人理解:Platform devices是相對獨立的設備,擁有各自獨自的資源(addresses and IRQs)

一個Platform devices實例:
static struct platform_device *smdk2410_devices[] __initdata = {
&s3c_device_usb, //片上的各個設備
&s3c_device_lcd, //下面以s3c_device_lcd為例
&s3c_device_wdt,
&s3c_device_i2c,
&s3c_device_iis,
};

/* LCD Controller */
static struct resource s3c_lcd_resource[] = { //LCD的兩個資源
[0] = {
.start = S3C2410_PA_LCD,
.end = S3C2410_PA_LCD + S3C2410_SZ_LCD,
.flags = IORESOURCE_MEM,
},
[1] = {
.start = IRQ_LCD,
.end = IRQ_LCD,
.flags = IORESOURCE_IRQ,
}

};

struct platform_device s3c_device_lcd = {//s3c_device_lcd設備
.name = "s3c2410-lcd",
.id = -1,
.num_resources = ARRAY_SIZE(s3c_lcd_resource),
.resource = s3c_lcd_resource,
.dev = { //device實例
.dma_mask = &s3c_device_lcd_dmamask,
.coherent_dma_mask = 0xffffffffUL
}
};

s3c_device_lcd的resource中硬件地址:

#define S3C2410_LCDREG(x) ((x) + S3C2410_VA_LCD)

/* LCD control registers */
#define S3C2410_LCDCON1 S3C2410_LCDREG(0x00)
#define S3C2410_LCDCON2 S3C2410_LCDREG(0x04)
#define S3C2410_LCDCON3 S3C2410_LCDREG(0x08)
#define S3C2410_LCDCON4 S3C2410_LCDREG(0x0C)
#define S3C2410_LCDCON5 S3C2410_LCDREG(0x10)

#define S3C2410_LCDCON1_CLKVAL(x) ((x) << 8)
#define S3C2410_LCDCON1_MMODE (1<<7)
#define S3C2410_LCDCON1_DSCAN4 (0<<5)
#define S3C2410_LCDCON1_STN4 (1<<5)
#define S3C2410_LCDCON1_STN8 (2<<5)
#define S3C2410_LCDCON1_TFT (3<<5)
--------------------------
#define S3C2410_ADDR(x) (0xF0000000 + (x))

/* LCD controller */
#define S3C2410_VA_LCD S3C2410_ADDR(0x00600000)
#define S3C2410_PA_LCD (0x4D000000)
#define S3C2410_SZ_LCD SZ_1M

再分析device_register()和platform_device_register()的實現代碼:

device_register()------------------------

/**
* device_register - register a device with the system.
* @dev: pointer to the device structure
*
* This happens in two clean steps - initialize the device
* and add it to the system. The two steps can be called
* separately, but this is the easiest and most common.
* I.e. you should only call the two helpers separately if
* have a clearly defined need to use and refcount the device
* before it is added to the hierarchy.
*/

int device_register(struct device *dev)
{
device_initialize(dev); //初始化設備結構
return device_add(dev); //添加設備到設備層
}

platform_device_register()--------------------
/**
* platform_device_register - add a platform-level device
* @pdev: platform device we're adding
*
*/
int platform_device_register(struct platform_device * pdev)
{
device_initialize(&pdev->dev); //初始化設備結構
return platform_device_add(pdev); //添加一個片上的設備到設備層
}
由以上函數可知:device_register()和platform_device_register()都會首先初始化設備
區別在于第二步:其實platform_device_add()包括device_add(),只不過要先注冊resources


platform_device_add()----------------------
/**
* platform_device_add - add a platform device to device hierarchy
* @pdev: platform device we're adding
*
* This is part 2 of platform_device_register(), though may be called
* separately _iff_ pdev was allocated by platform_device_alloc().
*/
int platform_device_add(struct platform_device *pdev)
{
int i, ret = 0;
if (!pdev)
return -EINVAL;
if (!pdev->dev.parent)
pdev->dev.parent = &platform_bus;
pdev->dev.bus = &platform_bus_type;

/*++++++++++++++
The platform_device.dev.bus_id is the canonical name for the devices.
It's built from two components:

* platform_device.name ... which is also used to for driver matching.
* platform_device.id ... the device instance number, or else "-1"
to indicate there's only one.

These are concatenated, so name/id "serial"/0 indicates bus_id "serial.0", and
"serial/3" indicates bus_id "serial.3"; both would use the platform_driver
named "serial". While "my_rtc"/-1 would be bus_id "my_rtc" (no instance id)
and use the platform_driver called "my_rtc".
++++++++++++++*/

if (pdev->id != -1)
snprintf(pdev->dev.bus_id, BUS_ID_SIZE, "%s.%u", pdev->name, pdev->id);
else //"-1" indicate there's only one
strlcpy(pdev->dev.bus_id, pdev->name, BUS_ID_SIZE);
for (i = 0; i < pdev->num_resources; i++) { //遍歷設備資源個數,如LCD的兩個資源:控制器和IRQ
struct resource *p, *r = &pdev->resource[i];
if (r->name == NULL)
r->name = pdev->dev.bus_id;
p = r->parent;
if (!p) { //resources分為兩種IORESOURCE_MEM和IORESOURCE_IO
??????????//CPU對外設IO端口物理地址的編址方式有兩種:I/O映射方式和內存映射方式
if (r->flags & IORESOURCE_MEM)
p = &iomem_resource;
else if (r->flags & IORESOURCE_IO)
p = &ioport_resource;
}

if (p && insert_resource(p, r)) {
printk(KERN_ERR
"%s: failed to claim resource %d/n",
pdev->dev.bus_id, i);
ret = -EBUSY;
goto failed;
}
}
pr_debug("Registering platform device '%s'. Parent at %s/n",
pdev->dev.bus_id, pdev->dev.parent->bus_id);
ret = device_add(&pdev->dev);
if (ret == 0)
return ret;
failed:
while (--i >= 0)
if (pdev->resource[i].flags & (IORESOURCE_MEM|IORESOURCE_IO))
release_resource(&pdev->resource[i]);
return ret;
}

相關參考+++++++++++++++++++++++
device_initialize()------------------
/** </drivers/base/core.c>
* device_initialize - init device structure.
* @dev: device.
*
* This prepares the device for use by other layers,
* including adding it to the device hierarchy.
* It is the first half of device_register(), if called by
* that, though it can also be called separately, so one
* may use @dev's fields (e.g. the refcount).
*/

void device_initialize(struct device *dev)
{
kobj_set_kset_s(dev, devices_subsys);
kobject_init(&dev->kobj);
klist_init(&dev->klist_children, klist_children_get,
klist_children_put);
INIT_LIST_HEAD(&dev->dma_pools);
INIT_LIST_HEAD(&dev->node);
init_MUTEX(&dev->sem);
spin_lock_init(&dev->devres_lock);
INIT_LIST_HEAD(&dev->devres_head);
device_init_wakeup(dev, 0);
set_dev_node(dev, -1);
}
device_add(struct device *dev)-------------
/**
* device_add - add device to device hierarchy.
* @dev: device.
*
* This is part 2 of device_register(), though may be called
* separately _iff_ device_initialize() has been called separately.
*
* This adds it to the kobject hierarchy via kobject_add(), adds it
* to the global and sibling lists for the device, then
* adds it to the other relevant subsystems of the driver model.
*/
結構體resource----------------------
/* < /include/linux/ioport.h>
* Resources are tree-like, allowing
* nesting etc..
*/
struct resource {
resource_size_t start;
resource_size_t end;
const char *name;
unsigned long flags;
struct resource *parent, *sibling, *child;
};
---------------------------

原文地址:http://blog.chinaunix.net/u1/58968/showart_467998.html ,

在8250.c(driver/serial/8250.c)的初始化函數serial8250_init()中,給出了一個很簡單的例子

static struct platform_device *serial8250_isa_devs;

......

//create a platform_device

serial8250_isa_devs = platform_device_alloc("serial8250",PLAT8250_DEV_LEGACY);??????????????

??platform_device_add(serial8250_isa_devs);?? //add the platform_device to system

platform_driver_register(&serial8250_isa_driver);//then register the platform_driver????????

還有另外一個比較類似的比較,就是driver_register和platform_driver_register的比較
????platform_driver_register(&xx_driver) 會向系統注冊xx_driver這個驅動程序,這個函數會根據 xx_driver中的.name內容,搜索系統注冊的device中有沒有這個platform_device,如果有,就會執行 platform_driver(也就是xx_driver的類型)中的.probe函數。

?

????? 對只需要初始化運行一次的函數都加上__init屬性,__init 宏告訴編譯器如果這個模塊被編譯到內核則把這個函數放到(.init.text)段,module_exit的參數卸載時同__init類似,如果驅動被編譯進內核,則__exit宏會忽略清理函數,因為編譯進內核的模塊不需要做清理工作,顯然__init和__exit對動態加載的模塊是無效的,只支持完全編譯進內核。

?

總結

以上是生活随笔為你收集整理的platform_device_系列函数及其设备注册的作用的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

亚洲国产电影在线观看 | 国产精品女教师 | 四虎国产 | 日韩免费专区 | 国产美女视频网站 | 日韩91在线 | 97av影院 | 干狠狠| 综合网在线视频 | 中文字幕在线播放第一页 | 国产高清免费在线观看 | 成人a级网站 | 丁香花在线观看视频在线 | 五月婷婷中文字幕 | 欧美日韩中文国产一区发布 | 婷婷丁香狠狠爱 | 97精产国品一二三产区在线 | 精品国产欧美一区二区 | 日韩久久久久久久久久 | 中文字幕在线国产精品 | 日韩久久一区二区 | 973理论片235影院9 | 成人影视免费 | 精品夜夜嗨av一区二区三区 | 在线日韩中文 | 九色91福利| 亚欧洲精品视频在线观看 | 伊甸园永久入口www 99热 精品在线 | 色综合咪咪久久网 | 亚洲春色综合另类校园电影 | 欧美精品亚州精品 | 国产精品 国产精品 | 日韩视频www | 欧美日韩国产免费视频 | 久久免费99精品久久久久久 | 国产亚洲精品久久久久久无几年桃 | 国产夫妻自拍av | 天天色 天天 | 黄色亚洲大片免费在线观看 | 国产91大片 | 日韩爱爱网站 | 天天色天天上天天操 | 国产精品久久久久久久久久久免费 | 国产最新网站 | 国产高清久久久久 | 亚洲精品99久久久久久 | 精品国产资源 | 最新国产在线 | 色天天综合网 | 国产一及片 | 欧美成人xxxxxxxx | 日韩一区视频在线 | 操一草| 免费观看视频黄 | www.色午夜 | 激情五月伊人 | 日韩精品一区二区三区第95 | 最新99热 | 九九欧美视频 | 在线观看的a站 | 国产真实精品久久二三区 | 日韩 国产 | 韩国精品在线观看 | 综合国产视频 | 久久国产免 | 国产精品久久久久999 | 玖玖玖影院 | 成人va天堂 | 激情久久网 | 激情综合色综合久久综合 | 中文在线a在线 | www.亚洲精品 | 天天射天天做 | 亚洲视频1区2区 | 亚洲欧美日韩精品久久奇米一区 | 中文字幕三区 | 五月婷婷亚洲 | 国产精品久久婷婷六月丁香 | 成人理论在线观看 | 91福利视频在线 | 91麻豆精品国产午夜天堂 | 国产美女网站在线观看 | 久久免费看 | 亚洲国产一区在线观看 | 在线 国产 日韩 | 欧美一级黄大片 | 精品国产免费av | 久草国产在线观看 | 黄色小视频在线观看免费 | 日韩小视频 | 91在线蜜桃臀 | 欧美色图视频一区 | 国产123av| 久久国产露脸精品国产 | www日 | 99国产精品久久久久久久久久 | 夜夜看av| 久久久久久久久久福利 | 久久午夜免费观看 | 成年人黄色在线观看 | 在线免费观看国产视频 | 91精品一区国产高清在线gif | 久久精选视频 | 激情开心网站 | 亚洲精品视频在线播放 | 毛片一区二区 | 极品久久久 | 国语久久 | 9999在线观看 | 久久综合影院 | 四虎影视精品永久在线观看 | 国产一级特黄电影 | 亚洲免费在线观看视频 | 色大片免费看 | 久久成人资源 | 美女在线免费观看视频 | 国产精品久久婷婷六月丁香 | 西西44人体做爰大胆视频 | 一二三区av | 亚洲资源一区 | 免费成人在线视频网站 | 在线播放一区二区三区 | 天天干,天天射,天天操,天天摸 | 久久久免费观看 | 国产精品黄色影片导航在线观看 | 国产精品电影在线 | 最新国产福利 | 在线观看视频一区二区三区 | 亚洲精品国产综合久久 | 色噜噜在线观看视频 | 国产免费嫩草影院 | 免费亚洲视频在线观看 | 人人草网站 | 97在线观看免费观看 | 欧美日韩在线观看一区二区 | 涩五月婷婷 | 国产v亚洲v| 三上悠亚一区二区在线观看 | 欧产日产国产69 | 亚洲情感电影大片 | 久草国产视频 | 玖玖精品在线 | 中国一级片在线观看 | 伊人视频 | 一区二区精| 久久99免费 | 亚洲干| 久草.com| 在线电影 你懂得 | 日韩欧美视频在线观看免费 | 国产精品一区二区三区视频免费 | 久久久久综合视频 | 欧美日韩视频一区二区三区 | 在线激情网 | 一区精品久久 | 一区二区三区播放 | 欧美一区二视频在线免费观看 | 激情综合中文娱乐网 | 久久天天躁狠狠躁亚洲综合公司 | 日韩精品免费一区二区三区 | 丁香花五月 | 亚洲视频观看 | 黄色的网站免费看 | 中文乱幕日产无线码1区 | 亚洲一区动漫 | 中日韩免费视频 | 国产高清不卡 | 草莓视频在线观看免费观看 | 久久综合色播五月 | 国产精品99久久久久久武松影视 | 在线视频app | 激情欧美xxxx | 色99网 | 亚洲精欧美一区二区精品 | 婷婷久久丁香 | 久久久久久久国产精品视频 | 亚洲人成人在线 | 成人动漫视频在线 | a极黄色片 | 91精品视频网站 | 四虎免费av | 久久久一本精品99久久精品 | 在线视频观看91 | 国产精品热视频 | 亚洲人在线 | 丁香五月亚洲综合在线 | 欧美精品乱码久久久久久 | 日本99久久 | 黄色三级免费观看 | 亚洲成年片 | a级国产乱理伦片在线播放 久久久久国产精品一区 | 成人午夜电影免费在线观看 | 狠狠综合久久 | 日韩艹 | 国产视频丨精品|在线观看 国产精品久久久久久久久久久久午夜 | 免费在线色电影 | 中文字幕免费高清在线观看 | 久久av一区二区三区亚洲 | 狠狠做六月爱婷婷综合aⅴ 日本高清免费中文字幕 | 日本激情中文字幕 | 久久精品91久久久久久再现 | 日韩久久久久 | 欧洲高潮三级做爰 | 婷婷 综合 色 | 色七七亚洲影院 | 日韩精品中文字幕在线不卡尤物 | 久草视频中文在线 | 久久婷五月 | 亚洲精品一区二区18漫画 | 99热最新在线 | 99国产在线| 不卡av在线免费观看 | www.888.av| 欧美综合国产 | 日韩特黄一级欧美毛片特黄 | 中文字幕一二 | 精品久久久久久亚洲综合网站 | 久草久热| av电影免费看 | 日本xxxx裸体xxxx17 | 国产精品久久久久久久久久久久午夜 | 中文av不卡 | 精品在线一区二区 | 天天操天天射天天操 | 欧美性色综合 | 激情综合久久 | 国产粉嫩在线 | 手机av观看| 黄色免费高清视频 | 国产日韩欧美在线观看视频 | 精品在线观看一区二区 | 国产伦精品一区二区三区免费 | 中文字幕资源站 | 国产韩国日本高清视频 | 在线国产精品视频 | 国内丰满少妇猛烈精品播 | 欧美另类一二三四区 | 五月婷婷另类国产 | 91视频在线自拍 | 在线观看视频精品 | 久久久www成人免费精品张筱雨 | 久久久精选 | 国产精品激情偷乱一区二区∴ | 日韩欧美一区二区在线播放 | 天天干天天干天天色 | 久久精品国产精品亚洲 | 91网址在线 | 中文字幕一区二区三区在线视频 | 99精品一级欧美片免费播放 | 国产91九色蝌蚪 | 高清免费av在线 | 久久久精品久久 | 成人午夜精品 | 色大片免费看 | 国产欧美在线一区 | www.久久com | 中文字幕av全部资源www中文字幕在线观看 | 成人一级免费电影 | 91人人爽人人爽人人精88v | www.久久久久 | 欧美一级激情 | 久久久99精品免费观看app | 久色婷婷 | 视频国产精品 | 天天干,天天草 | 免费av片在线 | 国产亚洲婷婷 | 91九色成人| 国产又黄又爽无遮挡 | 中文字幕在线视频网站 | 91看片在线免费观看 | 亚洲va欧美va人人爽春色影视 | 激情视频国产 | 色午夜影院 | 香蕉影院在线播放 | 欧美日韩综合在线观看 | 国产精品扒开做爽爽的视频 | 日日激情| 在线免费av网 | 国产在线观看99 | 中文字幕人成乱码在线观看 | 欧美一区二区三区免费观看 | 国产五月婷 | 九九日韩 | 444av| 中文字幕在线观看完整 | 久久久国产在线视频 | 精品国产自在精品国产精野外直播 | 国产精品久久99综合免费观看尤物 | 超碰99在线 | 成人免费视频播放 | 91精品黄色 | 中文字幕资源网在线观看 | 在线观看www. | 91av网站在线观看 | 又黄又爽又刺激 | 婷婷色中文 | 久久久精品国产一区二区电影四季 | 色婷婷亚洲 | 精品久久久久久综合日本 | 中文字幕乱在线伦视频中文字幕乱码在线 | 久久久.com| 一二三精品视频 | 亚洲专区一二三 | 999久久久欧美日韩黑人 | 精品国产一区二区三区不卡 | 亚洲精品久久久久中文字幕二区 | 成人一级片在线观看 | 国产精品刺激对白麻豆99 | 香蕉视频在线网站 | 一级片免费在线 | 91精品国产91久久久久 | 四虎成人精品在永久免费 | av免费播放 | 在线观看视频黄色 | 91亚洲在线 | 97视频在线免费 | 天天色天天上天天操 | 中文字幕av日韩 | www.99在线观看 | 日韩在线观看小视频 | 精品a视频 | 亚洲欧洲精品一区二区 | 国产精品自产拍在线观看桃花 | 国内久久久久久 | 国产成视频在线观看 | 7777xxxx| 婷婷色六月天 | 97精品久久 | 日韩免费av片 | 成人在线免费看视频 | 国产免费国产 | 亚洲激情一区二区三区 | 精品人人人 | 国产视频 亚洲视频 | 97国产超碰在线 | www国产亚洲精品 | 精品产品国产在线不卡 | 在线观看免费高清视频大全追剧 | 日韩女同一区二区三区在线观看 | 欧美一级看片 | 久久久精华网 | 日本少妇视频 | 久久伊人国产精品 | 国产一区免费在线观看 | 91最新视频| 精品视频在线看 | 国产欧美综合在线观看 | 91精彩视频在线观看 | 日韩va欧美va亚洲va久久 | 免费精品视频在线 | 国产精品久久久久久久久蜜臀 | 91福利社区在线观看 | 欧美人操人 | 黄色成人影视 | 国产精品a久久 | 日韩欧美视频在线免费观看 | av免费看在线 | 日韩黄色在线电影 | 国产精品18久久久久久久 | 国产在线探花 | 国产视| 久久综合一本 | 国产在线色 | 成人一区二区在线观看 | 99精品影视| 亚洲午夜精品一区二区三区电影院 | 国产成人l区 | 亚洲成av| 欧美日韩高清一区二区 | 国产精品久久久久久69 | 久久精品亚洲 | 国内视频一区二区 | 久久成人综合 | 国产成视频在线观看 | av福利在线 | 不卡中文字幕在线 | 久久精品国产第一区二区三区 | 亚洲黄色av网址 | 91精品国产99久久久久久红楼 | 男女激情免费网站 | 久久看看 | 激情五月在线观看 | 欧美日韩在线视频一区二区 | 九九爱免费视频 | 日韩中文在线电影 | 成人黄色av免费在线观看 | www.成人久久| 成人av影视观看 | 久久亚洲精品国产亚洲老地址 | 深爱综合网 | 在线观看视频亚洲 | 婷婷六月丁香激情 | 干天天 | 日韩精品在线播放 | www.狠狠操.com| 国产 日韩 欧美 在线 | 国产亚洲精品电影 | 国产黄色片一级 | 亚洲一区免费在线 | 在线观看av大片 | 日韩精品1区2区 | 欧美精品在线免费 | 最新色视频 | 4438全国亚洲精品在线观看视频 | 欧美色综合天天久久综合精品 | 黄色毛片在线观看 | 国产精品一区二区三区免费看 | 亚洲成人资源在线观看 | 精品人人爽 | 91网页版在线观看 | a视频在线看 | 夜夜干夜夜 | 国产特黄色片 | 国产精品亚洲综合久久 | 毛片网在线 | 99精品热视频| av电影在线免费观看 | 在线观看中文字幕一区 | www操操操| 黄色片网站 | 日韩欧美国产激情在线播放 | 欧美资源 | 日韩毛片在线播放 | 久久久久久久久久久久久久av | 91在线免费播放视频 | 91毛片在线观看 | 成人久久18免费网站图片 | 欧美久久久久久久久久久久久 | 黄色tv视频 | 国产精选在线 | 国产精品色在线 | 欧美 激情 国产 91 在线 | zzijzzij日本成熟少妇 | 国产精品久久一卡二卡 | 久久久久久久久久福利 | 久久成人18免费网站 | 91精品婷婷国产综合久久蝌蚪 | 91爱爱电影 | 日本激情视频中文字幕 | 欧美黑人巨大xxxxx | 黄色天堂在线观看 | 久久99久久99精品免观看粉嫩 | 天天综合网天天综合色 | 久久99久久99精品免观看软件 | 中文字幕在线观看免费高清完整版 | 久久国产精品精品国产色婷婷 | 欧美日一级片 | 射久久久 | 日日草视频 | 激情狠狠干 | av中文字幕在线观看网站 | 中文综合在线 | 国产精品久久久久久久久久白浆 | 天天操天天摸天天射 | av 在线观看 | 激情丁香5月| 人人讲 | 91c网站色版视频 | 看全黄大色黄大片 | 成人在线免费看视频 | 中文字幕在线高清 | 深爱激情开心 | www日 | 欧美在线一 | 久在线| 在线中文字幕av观看 | 精品在线视频播放 | 久久精品一区二区三区视频 | 亚洲精品久久久久久久不卡四虎 | 亚洲精品五月 | 中文字幕4 | 99久久精品国产网站 | 亚欧日韩av| 成人a视频在线观看 | 久久99精品久久久久久 | 免费成人在线视频网站 | 狠狠干天天 | 最近中文字幕完整高清 | 国产精品久久久免费看 | 亚洲在线视频免费 | 国产一区二区在线播放视频 | 天天操网址 | 人人爱夜夜操 | 欧美精品一区二区免费 | 一区精品在线 | 久久这里只有精品视频首页 | 色99在线| 在线播放精品一区二区三区 | www五月 | 婷婷激情综合 | 欧美va日韩va | 亚洲另类视频 | 成人精品999 | 91av在线国产| 亚洲午夜大片 | 蜜臀av性久久久久蜜臀aⅴ流畅 | 一区二区三区四区久久 | 激情xxxx | 综合色在线观看 | 久久久久 免费视频 | 国产精品毛片一区视频播不卡 | 国产小视频在线观看 | 久久公开免费视频 | 成人免费观看视频大全 | 久久久久久久久久久成人 | 高清视频一区二区三区 | 91传媒激情理伦片 | 国产欧美在线一区二区三区 | av免费播放 | 一级成人免费 | 黄污视频大全 | 日韩免费精品 | 国产日韩中文在线 | 99精品热视频 | 欧美日韩在线视频一区 | 成人sm另类专区 | 狠狠狠狠狠狠狠狠干 | 欧美a级片网站 | 69亚洲精品| 天天操夜操视频 | 日韩精品一区二区三区在线播放 | 在线久热 | www.久久久com | 亚洲三级黄色 | 日本公妇在线观看高清 | 97人人视频 | 日日夜夜精品视频天天综合网 | 精品在线播放视频 | 国产99久久久久 | 在线观看网站你懂的 | 国产精品毛片一区二区在线 | 日韩午夜av电影 | 国产美女免费看 | av免费在线看网站 | 日本精品视频在线播放 | 国产白浆在线观看 | 精品久久久久久国产 | 91在线麻豆 | 久久精品网站视频 | 欧美激情第一页xxx 午夜性福利 | 国产精品第一页在线 | free,性欧美 九九交易行官网 | 黄色毛片电影 | 人人射网站 | 国产一级在线 | 国产精品1000 | 成人av影视 | 中文字幕乱码亚洲精品一区 | 黄色在线观看免费 | 色综合久久88色综合天天6 | 国产一区免费在线 | 337p日本欧洲亚洲大胆裸体艺术 | 伊人久在线 | a级成人毛片 | 午夜av免费 | 久久精品黄 | 亚洲一区尤物 | 国产资源| 九九综合九九综合 | 成人影片免费 | 久久图| 色久综合| 国产在线97 | 中文视频在线播放 | 亚洲精品h | 精品91视频 | 国产中文在线字幕 | 狠狠干夜夜爽 | 国产色在线 | 国产精品免费看久久久8精臀av | 手机在线中文字幕 | 久久精品视频观看 | 欧美亚洲免费在线一区 | 亚洲精品成人在线 | 日本中文在线观看 | 中文字幕字幕中文 | 激情网站五月天 | 精品国产欧美一区二区三区不卡 | 91精品1区 | 99久久久久久久久 | 天天综合亚洲 | 青青河边草免费 | 久草在线视频在线 | 国内免费的中文字幕 | 一区二区三区中文字幕在线观看 | 亚洲第一香蕉视频 | 欧美日韩中文字幕综合视频 | 久久视影| 久操综合| 国内精品久久久久久久影视麻豆 | 91香蕉视频 mp4| 久久久国产精品免费 | 久久av网址| 成人性生交大片免费观看网站 | 中文字幕在线观看一区二区 | 午夜丁香网| 国产不卡在线看 | 成人影视免费 | 国产精品片| 日韩毛片在线播放 | 在线免费视频a | 在线观看 国产 | 欧美日韩中文字幕综合视频 | 精品免费观看视频 | 国产精品二区三区 | 国产综合精品久久 | 久久久福利影院 | 九九免费在线观看 | 黄色亚洲| 黄色三级在线看 | 欧美韩日精品 | 免费一级片久久 | 日韩丝袜在线观看 | 97成人精品区在线播放 | 亚州精品天堂中文字幕 | 久久伊人爱 | 99精品视频在线观看免费 | 手机在线日韩视频 | av片在线看 | 干干干操操操 | 亚洲成人av一区二区 | 欧美福利在线播放 | 在线观看日韩av | 中文字幕在线不卡国产视频 | 日韩高清一区二区 | 狠狠色丁香婷婷综合欧美 | 久久久久久综合网天天 | 视频在线99re | 免费成人av电影 | 欧美日韩99 | 国产视频每日更新 | 国产资源精品 | 中文在线字幕观看电影 | 国产韩国日本高清视频 | 4438全国亚洲精品在线观看视频 | 国产在线视频导航 | 国产剧情一区二区 | 免费观看xxxx9999片 | 中文字幕乱在线伦视频中文字幕乱码在线 | 国产精品 欧美 日韩 | 天堂av网址| 国产在线视频一区 | 草久电影 | 久久综合免费视频 | 国产欧美在线一区二区三区 | 国内揄拍国产精品 | 97超碰在线免费观看 | 麻豆传媒一区二区 | 九九久久国产精品 | 日本大片免费观看在线 | 91精品国产乱码在线观看 | 亚洲色图美腿丝袜 | 精品一区av | 国产精品美女网站 | 最近免费在线观看 | 亚洲成人免费 | 天天操婷婷 | 亚洲婷婷丁香 | 国产精品第54页 | www.777奇米| 亚洲天堂网视频在线观看 | 天天操夜夜拍 | 麻豆视频免费网站 | 97国产大学生情侣酒店的特点 | 摸bbb搡bbb搡bbbb | 日韩激情视频 | 亚洲一区二区三区在线看 | 99精品亚洲 | 欧美性色黄 | 亚一亚二国产专区 | 成人午夜电影网 | 免费在线观看中文字幕 | 四虎在线免费观看 | 97在线视频观看 | 久久欧美在线电影 | 国产网站av| 国产无套精品久久久久久 | 免费看污的网站 | 五月天久久婷 | 色av资源网 | 天天色天天草天天射 | 久久99热精品这里久久精品 | 黄色毛片一级 | 欧美色图p | 九九视频在线 | 99国产精品免费网站 | 中文字幕日韩一区二区三区不卡 | 丁香五月亚洲综合在线 | 免费网站黄色 | 天天操狠狠操夜夜操 | 久久精品一二三区 | 中文在线字幕免费观看 | 天天射天天色天天干 | 狠狠亚洲 | 色婷婷激情网 | www一起操 | 色91av | 福利一区二区在线 | 午夜国产成人 | 高清精品久久 | 国产小视频在线免费观看视频 | 一区av在线播放 | 在线观看av网 | 天天爱av导航 | 九九热精 | 九月婷婷人人澡人人添人人爽 | 最近免费中文字幕mv在线视频3 | 久久精品久久精品 | 国产精品第2页 | 色偷偷av男人天堂 | 成人小视频在线观看免费 | 久久99精品波多结衣一区 | 亚洲成a人片在线观看中文 中文字幕在线视频第一页 狠狠色丁香婷婷综合 | 国内精品在线看 | 日韩av三区 | 婷婷资源站 | 日韩一区二区三区观看 | 探花视频在线观看免费 | 日韩欧美高清不卡 | 国产99一区视频免费 | 五月天天在线 | av天天澡天天爽天天av | 国产黄色一级大片 | 久久综合导航 | 午夜精品一区二区国产 | 亚洲电影自拍 | 中文字幕亚洲国产 | 伊人黄| 在线观看你懂的网址 | 久久人人爽人人片av | www四虎影院 | 男女拍拍免费视频 | 亚洲精品国产精品国自 | 国产精品美女久久久久久 | 欧美专区国产专区 | www免费网站在线观看 | av看片在线 | 激情婷婷在线观看 | 在线观看av免费 | 99视频免费看 | 亚洲一级黄色大片 | 欧美色黄 | 天天操福利视频 | 国产亚洲在线视频 | 亚洲精品免费观看视频 | 国产剧情一区 | 精品伊人久久久 | 青青草国产精品 | 精品免费观看视频 | 亚洲精品视频在线免费 | 韩国av一区二区三区在线观看 | 国产精品都在这里 | 国产日韩在线一区 | 1区2区3区在线观看 三级动图 | 欧美日韩不卡一区二区三区 | 久久午夜精品视频 | 久久免费视频2 | 最近中文字幕在线 | 性日韩欧美在线视频 | 91麻豆精品一区二区三区 | 91探花在线视频 | 天天综合天天综合 | 91av视频在线免费观看 | 久久成人午夜 | 欧美成人性网 | 黄色看片| 欧美婷婷色 | 九九精品视频在线观看 | 国产高清中文字幕 | 日本激情视频中文字幕 | 精品国产乱码久久久久久天美 | 精品一区 在线 | 999色视频| 成人一区二区三区在线观看 | 丁香九月婷婷 | 91精品久久久久久久久久久久久 | 国产一区二区三区高清播放 | 午夜精品电影一区二区在线 | 国产精品一区久久久久 | 色在线视频 | 亚洲一级片免费观看 | 88av视频 | 丁香婷婷激情国产高清秒播 | 91秒拍国产福利一区 | 成人午夜精品福利免费 | 久久精品视频免费播放 | 久久久久久网址 | 亚洲国产精品传媒在线观看 | 97国产人人| 91精品久久久久久综合五月天 | 国内精品视频在线播放 | 久久国产日韩 | 欧美另类xxxx | 国产精品欧美日韩在线观看 | 国产在线不卡 | 久久成人精品电影 | 探花视频免费观看高清视频 | 91成人在线观看高潮 | 国产免费久久精品 | 国产成人精品一区二区三区 | 激情丁香婷婷 | 亚洲va韩国va欧美va精四季 | 正在播放一区 | 成年人免费在线看 | 91在线色 | 99re视频在线观看 | 久久久精品欧美 | 日本成人a | 欧美色图30p | 国产免费观看久久黄 | 9999国产| 91人人视频在线观看 | 国产精品免费久久 | 探花视频免费观看高清视频 | 国产又黄又猛又粗 | 国产精品视屏 | 中文字幕在线免费播放 | 久草精品视频在线播放 | av久久在线 | 色的网站在线观看 | 伊人黄色网 | 色av男人的天堂免费在线 | 国产午夜精品一区二区三区 | 成在线播放 | 综合网成人 | 免费日韩 精品中文字幕视频在线 | 亚洲欧美日本国产 | 91麻豆精品国产午夜天堂 | 国产一区二区三区四区大秀 | 国产96精品 | 日韩视频在线不卡 | 天天舔夜夜操 | 少妇视频一区 | 欧美精品久久久久久久久免 | 欧美日韩一区二区三区免费视频 | 黄色在线成人 | 超碰在线资源 | 在线视频日韩精品 | 麻豆91网站 | 欧美乱码精品一区二区 | 久久久国产网站 | 国产麻豆精品一区二区 | av在线免费不卡 | 精品国产成人 | bbbbb女女女女女bbbbb国产 | 五月激情天 | 欧美日韩在线免费观看视频 | 97视频在线| 精品国产乱码久久 | 国产资源网站 | 在线观看www91| 天天躁天天狠天天透 | 一本一本久久a久久精品综合 | 久久精彩免费视频 | 国产精品久久久久久久久久久免费 | 国产小视频在线观看免费 | 亚洲日本三级 | 欧美污污网站 | 久久黄色网页 | 国产精品免费av | 国产精品一区二区在线免费观看 | 色视频在线免费观看 | 国产伦精品一区二区三区… | 最新影院 | 精品一二三区 | 一区二区三区四区不卡 | 欧美日韩高清一区二区三区 | 玖草影院 | 日韩av电影中文字幕在线观看 | 国产五月色婷婷六月丁香视频 | 国产美女精品 | 天堂av免费 | 最近中文国产在线视频 | av综合av | 日韩v欧美v日本v亚洲v国产v | 黄网站色成年免费观看 | 五月婷婷色丁香 | 激情开心站 | 国产精品久久久久永久免费 | 欧洲视频一区 | 夜夜天天干| 中文永久免费观看 | 日韩欧美观看 | 亚洲综合在 | 欧美中文字幕第一页 | 国产一区二区在线免费播放 | 欧美日韩精品在线观看视频 | 波多野结衣亚洲一区二区 | 在线国产日本 | 91视频高清完整版 | 四虎影视精品 | 日韩精品黄 | 国产麻豆成人传媒免费观看 | 欧美日韩亚洲精品在线 | 精品一区二区三区在线播放 | 久久午夜精品影院一区 | 六月丁香在线视频 | 国产录像在线观看 | 亚洲国产电影在线观看 | 蜜臀av性久久久久蜜臀aⅴ流畅 | 免费亚洲视频在线观看 | 在线观看不卡的av | 91久久精| 久久99日韩| 超碰在线观看97 | 精品久久久999 | 国产精品第 | 蜜桃传媒一区二区 | 国产精品免费在线 | 在线观看一 | 婷婷狠狠操 | av网址在线播放 | av一区二区在线观看中文字幕 | 国内视频在线 | 国产精国产精品 | 国产日韩精品一区二区 | 中文字幕一区二 | 深夜免费网站 | 偷拍区另类综合在线 | 在线天堂亚洲 | 欧洲精品久久久久毛片完整版 | 超碰97国产 | 国产中文字幕亚洲 | 免费在线观看亚洲视频 | 99久视频 | 精品国产成人在线影院 | 99精品国产免费久久久久久下载 | 在线观看视频在线 | 99久视频| 久久久激情网 | 亚洲日本在线视频观看 | 国产系列在线观看 | 国产一卡久久电影永久 | 欧美在线日韩在线 | 精品久久久影院 | 日本中文一级片 | 伊人射 | 亚洲va欧美 | 亚一亚二国产专区 | 久久成人综合视频 | 丝袜+亚洲+另类+欧美+变态 | 黄在线免费看 | 2019天天干天天色 | 久久免费大片 | 午夜精品在线看 | 公开超碰在线 | 日韩理论在线观看 | 国产生活一级片 | 国产成人精品国内自产拍免费看 | av亚洲产国偷v产偷v自拍小说 | 久久精品综合视频 | 亚洲乱码精品久久久 | 视频国产在线观看18 | 色97在线| 国产精品亚洲人在线观看 | 欧美成人精品欧美一级乱 | 国产黄a三级三级三级三级三级 | 国产一区免费观看 | 久久调教视频 | 黄色的片子 | 成年人在线观看免费视频 | 五月天色丁香 | 五月天六月丁香 | 国产高清第一页 | 免费午夜av | 午夜精品久久久久久久久久久久 | 久久久国产电影 | 99色网站 | 亚洲情感电影大片 | 国产一区在线免费 | 日韩欧美在线一区二区 | 国产只有精品 | 久久精品一二三 | 国产中文字幕网 | 久久免费播放视频 | 在线观看日韩一区 | 亚洲精品在线免费播放 | 国产精品第10页 | 欧美极品裸体 | 99久久99视频只有精品 | 国产一级片免费观看 | 亚洲天堂在线观看完整版 | 婷婷伊人综合亚洲综合网 | 成人av在线网址 | 一区二区三区电影在线播 | 久久一区二区三区日韩 | 亚洲另类人人澡 | 日本中文在线观看 | 欧美一区二区三区免费观看 | 久久夜色精品亚洲噜噜国4 午夜视频在线观看欧美 | 久草免费在线视频观看 | 国产精品欧美 | 热久久在线视频 | 手机av资源 | 九九热精品视频在线播放 | 亚洲精品乱码久久久久久蜜桃动漫 | 亚洲丝袜一区二区 |