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

歡迎訪問 生活随笔!

生活随笔

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

linux

Linux SD卡驱动开发(六) —— SD卡启动过程总体分析

發(fā)布時間:2023/12/9 linux 75 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Linux SD卡驱动开发(六) —— SD卡启动过程总体分析 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

一、工作流程

mmc驅(qū)動主要文件包括

drivers/mmc/card/block.c
drivers/mmc/card/queue.c
drivers/mmc/core/core.c
drivers/mmc/core/host.c
drivers/mmc/core/

內(nèi)核啟動時,首先執(zhí)行core/core.c的mmc_init,注冊mmc、sd總線,以及一個host class設(shè)備。接著執(zhí)行card/block.c中,申請一個塊設(shè)備

二、數(shù)據(jù)結(jié)構(gòu):

這里涉及三種總線

[cpp]?view plaincopy
  • 1.?platform?bus?//MMC?host?controller?作為一種?platform?device,?它是需要注冊到?platform?bus上?的????
  • driver/base/platform.c????
  • struct?bus_type?platform_bus_type?=?{????
  • ????.name????????=?"platform",????
  • ????.dev_attrs????=?platform_dev_attrs,????
  • ????.match????????=?platform_match,????
  • ????.uevent????????=?platform_uevent,????
  • ????.pm????????=?&platform_dev_pm_ops,????
  • };????
  • ????
  • 2.?mmc?bus?type??//在mmc_init()中被創(chuàng)建的.通過調(diào)用?mmc_register_bus()?來注冊?MMC?總線????
  • drivers\mmc\core\bus.c????
  • static?struct?bus_type?mmc_bus_type?=?{????
  • ????.name????????=?"mmc",????
  • ????.dev_attrs????=?mmc_dev_attrs,????
  • ????.match????????=?mmc_bus_match,????
  • ????.uevent????????=?mmc_bus_uevent,????
  • ????.probe????????=?mmc_bus_probe,????
  • ????.remove????????=?mmc_bus_remove,????
  • ????.shutdown????????=?mmc_bus_shutdown,????
  • ????.pm????????=?&mmc_bus_pm_ops,????
  • };????
  • ????
  • 3.?sdio?bus?type????//在mmc_init()中被創(chuàng)建的.通過調(diào)用sdio_register_bus()?來注冊?SDIO?總線????
  • drivers\mmc\core\sdio_bus.c????
  • static?struct?bus_type?sdio_bus_type?=?{????
  • ????.name????????=?"sdio",????
  • ????.dev_attrs????=?sdio_dev_attrs,????
  • ????.match????????=?sdio_bus_match,????
  • ????.uevent????????=?sdio_bus_uevent,????
  • ????.probe????????=?sdio_bus_probe,????
  • ????.remove????????=?sdio_bus_remove,????
  • ????.pm????????=?SDIO_PM_OPS_PTR,????
  • };????
  • ? ? ?其中mmc總線操作相關(guān)函數(shù),由于mmc卡支持多種總數(shù)據(jù)線,如SPI、SDIO、8LineMMC而不同的總線的操作控制方式不盡相同,所以通過此結(jié)構(gòu)與相應(yīng)的總線回調(diào)函數(shù)相關(guān)聯(lián)。 [cpp]?view plaincopy
  • //總線操作結(jié)構(gòu)??
  • struct?mmc_bus_ops?{??
  • ????void?(*remove)(struct?mmc_host?*);??
  • ????void?(*detect)(struct?mmc_host?*);??
  • ????int?(*sysfs_add)(struct?mmc_host?*,?struct?mmc_card?*card);??
  • ????void?(*sysfs_remove)(struct?mmc_host?*,?struct?mmc_card?*card);??
  • ????void?(*suspend)(struct?mmc_host?*);??
  • ????void?(*resume)(struct?mmc_host?*);??
  • };??
  • //??mmc卡的總線操作?core/mmc.c??
  • static?const?struct?mmc_bus_ops?mmc_ops?=?{??
  • ????.remove?=?mmc_remove,??
  • ????.detect?=?mmc_detect,??
  • ????.sysfs_add?=?mmc_sysfs_add,??
  • ????.sysfs_remove?=?mmc_sysfs_remove,??
  • ????.suspend?=?mmc_suspend,??
  • ????.resume?=?mmc_resume,??
  • };??
  • //?sd卡的總線操作?core/sd.c??
  • static?const?struct?mmc_bus_ops?mmc_sd_ops?=?{??
  • ????.remove?=?mmc_sd_remove,??
  • ????.detect?=?mmc_sd_detect,??
  • ????.sysfs_add?=?mmc_sd_sysfs_add,??
  • ????.sysfs_remove?=?mmc_sd_sysfs_remove,??
  • ????.suspend?=?mmc_sd_suspend,??
  • ????.resume?=?mmc_sd_resume,??
  • };??
  • //?sdio的總線操作?core/sdio.c??
  • static?const?struct?mmc_bus_ops?mmc_sdio_ops?=?{??
  • ????.remove?=?mmc_sdio_remove,??
  • ????.detect?=?mmc_sdio_detect,??
  • };??
  • 關(guān)于總線操作的函數(shù):

    .detect,驅(qū)動程序經(jīng)常需要調(diào)用此函數(shù)去檢測mmc卡的狀態(tài),具體實現(xiàn)是發(fā)送CMD13命令,并讀回響應(yīng),如果響應(yīng)錯誤,則依次調(diào)用.remove、detach_bus來移除卡及釋放總線。


    三、總體架構(gòu)

    1、kernel啟動時,先后執(zhí)行mmc_init()及mmc_blk_init(),以對mmc設(shè)備及mmc塊模塊進(jìn)行初始化

    [cpp]?view plaincopy
  • mmc/core/core.c????
  • static?int?__init?mmc_init(void)????
  • ????workqueue?=?alloc_ordered_workqueue("kmmcd",?0);//建立了一個工作隊列workqueue,這個工作隊列的作用主要是用來支持熱插拔????
  • ????ret?=?mmc_register_bus();//注冊一個mmc總線????
  • ????ret?=?mmc_register_host_class();//注冊了一個?mmc_host?類????
  • ????ret?=?sdio_register_bus();//注冊了一個?sdio_bus_type????
  • ????????
  • *******?????
  • mmc/card/block.c????
  • static?int?__init?mmc_blk_init(void)????
  • ????res?=?register_blkdev(MMC_BLOCK_MAJOR,?"mmc");//注冊一個塊設(shè)備????
  • ????res?=?mmc_register_driver(&mmc_driver);//注冊一個mmc設(shè)備驅(qū)動????
  • ????
  • static?struct?mmc_driver?mmc_driver?=????
  • ????.probe??????=?mmc_blk_probe,????
  • ????????
  • static?int?mmc_blk_probe(struct?mmc_card?*card)????
  • ????mmc_set_bus_resume_policy(card->host,?1);//*host?該指針指向一個mmc主機(jī)實例,塊設(shè)備中的讀寫操作就是調(diào)用這個mmc主機(jī)的操作函數(shù)host->ops->request來實現(xiàn)對實際硬件的操作。????
  • 2、core部分會做兩件事

    a --?取得總線

    b --?檢查總線操作結(jié)構(gòu)指針bus_ops,如果為空,則重新利用各總線對端口進(jìn)行掃描,檢測順序依次為:SDIO、Normal SD、MMC。當(dāng)檢測到相應(yīng)的卡類型后,就使用mmc_attach_bus()把相對應(yīng)的總線操作與host連接起來

    [cpp]?view plaincopy
  • void?mmc_attach_bus(struct?mmc_host?*host,?const?struct?mmc_bus_ops?*ops)??
  • {??
  • ????...??
  • ????host->bus_ops?=?ops;??
  • ????...??
  • }??
  • 3、然后在掛載mmc設(shè)備驅(qū)動時,執(zhí)行驅(qū)動程序中的xx_mmc_probe(),檢測host設(shè)備中掛載的sd設(shè)備

    [cpp]?view plaincopy
  • kernel\arch\arm\configs\msm9625_defconfig????
  • CONFIG_MMC_MSM=y????
  • ????
  • kernel\drivers\mmc\host\Makefile????
  • obj-$(CONFIG_MMC_MSM)????????+=?msm_sdcc.o????????
  • ????
  • msm_sdcc.c?(drivers\mmc\host)????
  • //系統(tǒng)初始化時掃描?platform?總線上是否有名為該SD主控制器名字"msm_sdcc"的設(shè)備,如果有,?驅(qū)動程序?qū)⒅骺刂破鲯燧d到?platform?總線上,并注冊該驅(qū)動程序????
  • static?int?__init?msmsdcc_init(void)????
  • ????platform_driver_register(&msmsdcc_driver);????//注冊?platform?driver????
  • ????????
  • static?struct?platform_driver?msmsdcc_driver?=?{????
  • ????.probe????????=?msmsdcc_probe,????
  • ????.remove????????=?msmsdcc_remove,????
  • ????.driver????????=?{????
  • ????????.name????=?"msm_sdcc",????
  • ????????.pm????=?&msmsdcc_dev_pm_ops,????
  • ????????.of_match_table?=?msmsdcc_dt_match,????
  • ????},????
  • };????????
  • ????????
  • //整個設(shè)備驅(qū)動的?probe()函數(shù),其本質(zhì)就是是為設(shè)備建立起數(shù)據(jù)結(jié)構(gòu)并對其賦初值????
  • //msmsdcc_probe?所有賦值中,我們重點關(guān)注從?platform_device?*pdev里得到的數(shù)據(jù),即設(shè)備樹里的數(shù)據(jù)????
  • //platform_device?*pdev是在系統(tǒng)初始化的時候掃描?platform?總線發(fā)現(xiàn)SD主控制器后所得到的數(shù)據(jù)????
  • static?int?msmsdcc_probe(struct?platform_device?*pdev)????????
  • {????????
  • ????//初始化設(shè)備的數(shù)據(jù)結(jié)構(gòu)????
  • ????if?(pdev->dev.of_node)?{????
  • ????plat?=?msmsdcc_populate_pdata(&pdev->dev);????????//獲取設(shè)備樹信息????
  • ????of_property_read_u32((&pdev->dev)->of_node,"cell-index",?&pdev->id);????
  • ????}?else?{????
  • ????????plat?=?pdev->dev.platform_data;????
  • ????}????
  • ????//為主設(shè)備控制器建立數(shù)據(jù)結(jié)構(gòu),建立kobject,并初始化等待隊列,工作隊列,以及一些控制器的配置????
  • ????mmc?=?mmc_alloc_host(sizeof(struct?msmsdcc_host),?&pdev->dev);????????????----?1????
  • ????//實現(xiàn)設(shè)備驅(qū)動的功能函數(shù),如mmc->ops?=?&pxamci_ops;????
  • ????mmc->ops?=?&msmsdcc_ops;????
  • ????//申請中斷函數(shù)?request_irq()????
  • ????ret?=?request_irq(core_irqres->start,?msmsdcc_irq,?IRQF_SHARED,DRIVER_NAME?"?(cmd)",?host);????
  • ????//注冊設(shè)備,即注冊kobject,建立sys文件,發(fā)送uevent等????
  • ????mmc_add_host(mmc);????????????????????????????????????????????????????????----?2????
  • ????//其他需求,如在/proc/driver下建立用戶交互文件等????
  • ????ret?=?device_create_file(&pdev->dev,?&host->auto_cmd21_attr);????
  • }????????
  • 4、此時probe函數(shù)會創(chuàng)建一個host設(shè)備,然后開啟一個延時任務(wù)mmc_rescan()。

    [cpp]?view plaincopy
  • 1:??????
  • core/host.c?????
  • //重要函數(shù)mmc_alloc_host?,?用于分配mmc_host結(jié)構(gòu)體指針的內(nèi)存空間大小????
  • struct?mmc_host?*mmc_alloc_host(int?extra,?struct?device?*dev)----創(chuàng)建一個?mmc_host?和?mmc_spi_host?,且mmc_host的最后一個成員指針private指向mmc_spi_host????
  • ????//建立數(shù)據(jù)結(jié)構(gòu)????
  • ????struct?mmc_host?*host;??????
  • ????host?=?kzalloc(sizeof(struct?mmc_host)?+?extra,?GFP_KERNEL);????
  • ????//建立kobject????
  • ????host->parent?=?dev;????
  • ????host->class_dev.parent?=?dev;????
  • ????host->class_dev.class?=?&mmc_host_class;????
  • ????device_initialize(&host->class_dev);????
  • ????//初始化等待隊列,工作隊列????
  • ????init_waitqueue_head(&host->wq);????
  • ????INIT_DELAYED_WORK(&host->detect,?mmc_rescan);????//建立了一個工作隊列任務(wù)?structdelayed_work?detect。工作隊列任務(wù)執(zhí)行的函數(shù)為mmc_rescan????
  • ????//配置控制器????
  • ????host->max_segs?=?1;????
  • ????host->max_seg_size?=?PAGE_CACHE_SIZE;????
  • ????return?host;????
  • 5、驅(qū)動掛載成功后,mmc_rescan()函數(shù)被執(zhí)行,然后對卡進(jìn)行初始化(步驟后面詳細(xì)講述)

    [cpp]?view plaincopy
  • core/core.c????
  • //mmc_rescan?函數(shù)是需要重點關(guān)注的,因為SD卡協(xié)議中的檢測,以及卡識別等都是在此函數(shù)中實現(xiàn)????
  • void?mmc_rescan(struct?work_struct?*work)????
  • ????if?(host->bus_ops?&&?host->bus_ops->detect?&&?!host->bus_dead?&&?!(host->caps?&?MMC_CAP_NONREMOVABLE))????//存在熱插拔卡,不包括emmc,調(diào)用探測函數(shù)????
  • ????host->bus_ops->detect(host);????
  • ????mmc_bus_put(host);????//減少引用技術(shù),就釋放????
  • ????mmc_bus_get(host);????//增加bus引用計數(shù)????
  • ????if?(host->bus_ops?!=?NULL)?{????
  • ????????mmc_bus_put(host);????//如果卡仍然存在,減少引用計數(shù),不必探測了????
  • ????????goto?out;????
  • ????}????
  • ????if?(host->ops->get_cd?&&?host->ops->get_cd(host)?==?0)??//有卡,退出????
  • ????goto?out;????
  • ????mmc_claim_host(host);???????????????????//用于檢測host是否被占用,占用則退出,否則標(biāo)記成占用????
  • ????????
  • ????if?(!mmc_rescan_try_freq(host,?host->f_min))????
  • 初始化卡接以下流程初始化:

    a、發(fā)送CMD0使卡進(jìn)入IDLE狀態(tài)
    b、發(fā)送CMD8,檢查卡是否SD2.0。SD1.1是不支持CMD8的,因此在SD2.0 Spec中提出了先發(fā)送CMD8,如響應(yīng)為無效命令,則卡為SD1.1,否則就是SD2.0(請參考SD2.0 Spec)。
    c、發(fā)送CMD5讀取OCR寄存器。
    d、發(fā)送ACMD55、CMD41,使卡進(jìn)入工作狀態(tài)。MMC卡并不支持ACMD55、CMD41,如果這步通過了,則證明這張卡是SD卡。
    e、如果d步驟錯誤,則發(fā)送CMD1判斷卡是否為MMC。SD卡不支持CMD1,而MMC卡支持,這就是SD和MMC類型的判斷依據(jù)。
    f、如果ACMD41和CMD1都不能通過,那這張卡恐怕就是無效卡了,初始化失敗。

    ? ? ??假如掃描到總線上掛有有效的設(shè)備,就調(diào)用相對應(yīng)的函數(shù)把設(shè)備裝到系統(tǒng)中,mmc_attach_sdio()、mmc_attach_sd()、mmc_attach_mmc()這三個函數(shù)分別是裝載sdio設(shè)備,sd卡和mmc卡的。

    ? ? ?在 sd卡中,驅(qū)動循環(huán)發(fā)送ACMD41、CMD55給卡,讀取OCR寄存器,成功后,依次發(fā)送CMD2(讀CID)、CMD3(得到RCA)、CMD9(讀 CSD)、CMD7(選擇卡)。后面還有幾個命令分別是ACMD41&CMD51,使用CMD6切換一些功能,如切換到高速模式。

    ? ? ?經(jīng)過上述步驟,已經(jīng)確定當(dāng)前插入的卡是一張有效、可識別的存儲卡。然后調(diào)用mmc_add_card()把存儲卡加到系統(tǒng)中。正式與系統(tǒng)驅(qū)動連接在一起。

    [cpp]?view plaincopy
  • static?int?mmc_rescan_try_freq(struct?mmc_host?*host,?unsigned?freq)????
  • ????host->f_init?=?freq;?????????????????//設(shè)置某一個時鐘頻率????
  • ????mmc_power_up(host);?????????????????????//與?mmc_power_off?類似,不過設(shè)置了啟動時需要的?ios????
  • ????mmc_go_idle(host);??????????----1a??????//CMD0?,SD卡從?inactive?到?idle????????????
  • ????mmc_send_if_cond(host,?host->ocr_avail);//檢測SD卡是否支持SD2.0?????????
  • ????if?(!mmc_attach_sd(host))???----1b??????//然后對mmc或者sd發(fā)送一些命令進(jìn)行探測,這里以?sd?為例????
  • ????
  • 1a:????
  • int?mmc_go_idle(struct?mmc_host?*host)??????
  • ????struct?mmc_command?cmd?=?{0};????
  • ????cmd.opcode?=?MMC_GO_IDLE_STATE;?//即CMD0????
  • ????cmd.arg?=?0;????????????????????//此命令無參數(shù)????
  • ????err?=?mmc_wait_for_cmd(host,?&cmd,?0)????
  • ????????
  • int?mmc_wait_for_cmd(struct?mmc_host?*host,?struct?mmc_command?*cmd,?int?retries)????
  • ????memset(cmd->resp,?0,?sizeof(cmd->resp));??//調(diào)用了?mmc_start_request,?????
  • ????cmd->retries?=?retries;????
  • ????mrq.cmd?=?cmd;??????????????????????????????????
  • ????mmc_wait_for_req(host,?&mrq);????
  • ????????
  • void?mmc_wait_for_req(struct?mmc_host?*host,?struct?mmc_request?*mrq)???----重要函數(shù)????
  • ????__mmc_start_req(host,?mrq);????
  • ????
  • static?int?__mmc_start_req(struct?mmc_host?*host,?struct?mmc_request?*mrq)????
  • ????mmc_start_request(host,?mrq);????
  • ????????????
  • static?void?mmc_start_request(struct?mmc_host?*host,?struct?mmc_request?*mrq)????
  • ????host->ops->request(host,?mrq);????//即?msmsdcc_request,?MMC?核心與核HOST?層握手了????
  • ????
  • ????????
  • 1b:?????
  • core/mmc.c????
  • int?mmc_attach_sd(struct?mmc_host?*host)????????????????????//完成匹配,和初始化卡的功能????
  • ????err?=?mmc_send_app_op_cond(host,?0,?&ocr);??????----1b1?//檢測是否是支持SD卡????
  • ????host->ocr?=?mmc_select_voltage(host,?ocr);???????????????//設(shè)置MMC電壓????
  • ????err?=?mmc_init_card(host,?host->ocr,?NULL);??????????????//對mmc卡進(jìn)行初始化,主要是讀取mmc卡里的一些寄存器信息,且對這些寄存器的值進(jìn)行設(shè)置????
  • ????err?=?mmc_sd_init_card(host,?host->ocr,?NULL);???----1b2????
  • ????err?=?mmc_add_card(host->card);??????????????????----1b3?//調(diào)用?mmc_add_card?來把?mmc_card?掛載到?mmc_bus_type?總線去????
  • ????????
  • ????????
  • 1b1:????
  • int?mmc_send_app_op_cond(struct?mmc_host?*host,?u32?ocr,?u32?*rocr)????
  • ????cmd.opcode?=?SD_APP_OP_COND;????//ACMD41,獲取?SDcard?的允許電壓范圍值,保存在?ocr?中.?所有發(fā)送它之前需要發(fā)送?CMD_55?命令。執(zhí)行完后?card?狀態(tài)變?yōu)?READY????
  • ????
  • ????????
  • ????????
  • 1b2:????
  • static?int?mmc_sd_init_card(struct?mmc_host?*host,?u32?ocr,struct?mmc_card?*oldcard)????
  • ????err?=?mmc_sd_get_cid(host,?ocr,?cid,?&rocr);????????//發(fā)送?CMD2?,獲取卡的身份信息,進(jìn)入到身份狀態(tài)????
  • ????card?=?mmc_alloc_card(host,?&sd_type);??????????????//分配一張?SD?類型的?card?結(jié)構(gòu)????
  • ????err?=?mmc_send_relative_addr(host,?&card->rca);??????//獲取卡的相對地址,注意一前卡和主機(jī)通信都采用默認(rèn)地址,現(xiàn)在有了自己的地址了,進(jìn)入到?stand_by?狀態(tài)????
  • ????err?=?mmc_sd_get_csd(host,?card);?----mmc_send_csd(card,?card->raw_csd);//CMD9,?獲取?CSD?寄存器的信息,包括?block?長度,卡容量等信息????
  • ????err?=?mmc_select_card(card);????????????????????????//發(fā)送?CMD7,?選中目前?RADD?地址上的卡,任何時候總線上只有一張卡被選中,進(jìn)入了傳輸狀態(tài)?????
  • ????err?=?mmc_sd_setup_card(host,?card,?oldcard?!=?NULL);???????
  • ????
  • int?mmc_sd_setup_card(struct?mmc_host?*host,?struct?mmc_card?*card,bool?reinit)????
  • ????mmc_app_send_scr(card,?card->raw_scr);???//發(fā)送命令?ACMD51?獲取?SRC?寄存器的內(nèi)容,進(jìn)入到?SENDING-DATA?狀態(tài)????
  • ????if?(host->ops->get_ro(host)?>?0?)??????//?get_ro(host)?即是?msmsdcc_get_ro?????
  • ????????mmc_card_set_readonly(card);????????//是否寫保護(hù),如果是的,將?card?狀態(tài)設(shè)置為只讀狀態(tài)????
  • ????????
  • 1b3:????
  • core/bus.c????
  • int?mmc_add_card(struct?mmc_card?*card)?????//??/sys/devices/msm_sdcc.2/mmc_host/mmc0????
  • ????ret?=?device_add(&card->dev);????
  • ????
  • drivers/base/core.c????
  • int?device_add(struct?device?*dev)????
  • ????dev_set_name(dev,?"%s%u",?dev->bus->dev_name,?dev->id);?//????
  • ????bus_probe_device(dev);????
  • ????
  • void?bus_probe_device(struct?device?*dev)????
  • ????????if?(bus->p->drivers_autoprobe)?????
  • ????????ret?=?device_attach(dev);???????????//這樣,在總線?mmc_bus_type?中就有了?mmc?設(shè)備?mmc_card?了????????
  • ????????
  • ????????
  • ***********?????
  • 2:????
  • //完成kobject的注冊,并調(diào)用?mmc_rescan,目的在于在系統(tǒng)初始化的時候就掃描SD總線查看是否存在SD卡????
  • int?mmc_add_host(struct?mmc_host?*host)????
  • ????err?=?device_add(&host->class_dev);//將設(shè)備注冊進(jìn)linux設(shè)備模型,最終的結(jié)果就是在?sys/bus/platform/devices?目錄下能見到?mmc?設(shè)備節(jié)點????
  • ????mmc_start_host(host);????
  • ????????
  • ????????
  • void?mmc_start_host(struct?mmc_host?*host)??????
  • ????mmc_power_off(host);????????????????----2a????
  • ????mmc_detect_change(host,?0);?????????----2b????
  • ????
  • 2a:????
  • void?mmc_power_off(struct?mmc_host?*host)???????
  • ????host->ios.power_mode?=?MMC_POWER_OFF;????//對?ios?進(jìn)行了設(shè)置????
  • ????...????
  • ????mmc_set_ios(host);????
  • ????
  • void?mmc_set_ios(struct?mmc_host?*host)????
  • ????host->ops->set_ios(host,?ios);????????????//?set_ios?實際上就是?mmc_host_ops?的?.set_ios??=?msmsdcc_set_ios,????
  • ????
  • 2b:????
  • void?mmc_detect_change(struct?mmc_host?*host,?unsigned?long?delay)????
  • ????????mmc_schedule_delayed_work(&host->detect,?delay);?//實際上就是調(diào)用我們前面說的延時函數(shù)?mmc_rescan????
  • 6、卡設(shè)備加到系統(tǒng)中后,通知mmc塊設(shè)備驅(qū)動。塊設(shè)備驅(qū)動此時調(diào)用probe函數(shù),即mmc_blk_probe()函數(shù),mmc_blk_probe()首 先分配一個新的mmc_blk_data結(jié)構(gòu)變量,然后調(diào)用mmc_init_queue,初始化blk隊列。然后建立一個線程 mmc_queue_thread()。


    7、然后就可以進(jìn)行傳輸命令和數(shù)據(jù)了

    [cpp]?view plaincopy
  • struct?mmc_host_ops?{???????????
  • ????//用于SD卡命令的傳輸,比如發(fā)送和接收命令,CMD0,CMD8,ACMD41諸如此類的都是在這個函數(shù)去實現(xiàn)????
  • ????void????(*request)(struct?mmc_host?*host,?struct?mmc_request?*req);????
  • ????
  • }????
  • ????
  • static?const?struct?mmc_host_ops?msmsdcc_ops?=?{????
  • ????.enable?????=?msmsdcc_enable,????
  • ????.disable????=?msmsdcc_disable,????
  • ????.pre_req????????=?msmsdcc_pre_req,????
  • ????.post_req???????=?msmsdcc_post_req,????
  • ????.request????=?msmsdcc_request,????
  • ????.set_ios????=?msmsdcc_set_ios,????
  • ????.get_ro?????=?msmsdcc_get_ro,????
  • ????.enable_sdio_irq?=?msmsdcc_enable_sdio_irq,????
  • ????.start_signal_voltage_switch?=?msmsdcc_switch_io_voltage,????
  • ????.execute_tuning?=?msmsdcc_execute_tuning,????
  • ????.hw_reset?=?msmsdcc_hw_reset,????
  • ????.stop_request?=?msmsdcc_stop_request,????
  • ????.get_xfer_remain?=?msmsdcc_get_xfer_remain,????
  • ????.notify_load?=?msmsdcc_notify_load,????
  • };????
  • ????
  • /*這個函數(shù)實現(xiàn)了命令和數(shù)據(jù)的發(fā)送和接收,??
  • 當(dāng)?CORE?部分需要發(fā)送命令或者傳輸數(shù)據(jù)時,都會調(diào)用這個函數(shù),并傳遞?mrq?請求*/????
  • static?void?msmsdcc_request(struct?mmc_host?*mmc,?struct?mmc_request?*mrq)????
  • ????mmc_request_done(mmc,?mrq);?????????????//?如果卡不存在,就終止請求????
  • ????msmsdcc_request_start(host,?mrq);???????????
  • ????
  • static?void?msmsdcc_request_start?(struct?msmsdcc_host?*host,?struct?mmc_request?*mrq)????
  • ????if?((mrq->data->flags?&?MMC_DATA_READ)?||host->curr.use_wr_data_pend)??????//判斷發(fā)送數(shù)據(jù)還是命令????
  • ????????msmsdcc_start_data(host,?mrq->data,mrq->sbc???mrq->sbc?:?mrq->cmd,0);???//發(fā)送數(shù)據(jù)????
  • ????else????
  • ????????msmsdcc_start_command(host,mrq->sbc???mrq->sbc?:?mrq->cmd,0);??????????//發(fā)送命令????
  • ????
  • ????
  • static?void?msmsdcc_start_data(struct?msmsdcc_host?*host,?struct?mmc_data?*data,struct?mmc_command?*cmd,?u32?c)????
  • ????//對某些?寄存器進(jìn)行設(shè)置,?使能某些中斷,?如?pio_irqmask????
  • ????...????
  • ????if?(is_dma_mode(host)?&&?(datactrl?&?MCI_DPSM_DMAENABLE))???//采用?DMA?進(jìn)行數(shù)據(jù)傳輸還是采用?FIFO?進(jìn)行數(shù)據(jù)傳輸????
  • ????????msmsdcc_start_command_deferred(host,?cmd,?&c);??????????//啟動了數(shù)據(jù)傳輸模式????
  • ????else????????
  • ????????msmsdcc_start_command(host,?cmd,?c)????
  • ????
  • static?void?msmsdcc_start_command(struct?msmsdcc_host?*host,?struct?mmc_command?*cmd,?u32?c)????
  • {????
  • ????msmsdcc_start_command_deferred(host,?cmd,?&c);????
  • ????msmsdcc_start_command_exec(host,?cmd->arg,?c);????
  • }????
  • ????
  • static?void?msmsdcc_start_command_deferred(struct?msmsdcc_host?*host,struct?mmc_command?*cmd,?u32?*c)????
  • ????cmd->opcode?----對應(yīng)SD卡命令?,如?CMD0:復(fù)位SD?卡?
  • 總結(jié)

    以上是生活随笔為你收集整理的Linux SD卡驱动开发(六) —— SD卡启动过程总体分析的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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

    最新成人在线 | 欧美狠狠操 | 精品av网站| 国产网站av | 正在播放国产一区 | 国产日本在线观看 | 99久久精品久久久久久清纯 | 国产免费视频在线 | 国产精品va | 亚洲一区免费在线 | 欧亚日韩精品一区二区在线 | 色婷婷久久一区二区 | 国产小视频在线播放 | 国产69久久精品成人看 | 美女福利视频一区二区 | av福利电影 | 97超碰资源网 | 中文字幕电影在线 | 超碰资源在线 | 天天爽夜夜爽精品视频婷婷 | 麻豆91精品 | 久久精品一区 | 色在线中文字幕 | 国产99视频在线观看 | 久草视频资源 | 婷婷色网址| 国产不卡在线观看视频 | 日韩av三区 | 亚色视频在线观看 | 色婷婷导航 | 夜夜夜夜猛噜噜噜噜噜初音未来 | 在线黄色免费av | 美女视频一区 | 国产精品在线看 | 手机av在线不卡 | 亚洲精品中文字幕视频 | 久久久91精品国产一区二区三区 | 黄色在线观看网站 | 精品欧美乱码久久久久久 | 伊人久久影视 | 99这里只有精品视频 | 在线日本看片免费人成视久网 | 久福利 | 久青草视频在线观看 | 中文在线免费观看 | 97精品欧美91久久久久久 | www国产亚洲 | 西西4444www大胆艺术 | 91av在线看| 亚洲高清国产视频 | 久草视频在线免费播放 | 久久九九久久九九 | 精品国产一区二区三区av性色 | 亚洲成a人片在线www | 国产区网址 | 99久久久精品| 国产一区二区精 | 国产综合视频在线观看 | 日韩高清不卡在线 | 欧美日韩a视频 | 精品国产一区二区三区蜜臀 | 久久精品电影院 | 午夜在线资源 | 91精品视频一区 | 午夜18视频在线观看 | 996久久国产精品线观看 | 三级av中文字幕 | 日本一区二区三区免费观看 | 色999五月色| 美女视频a美女大全免费下载蜜臀 | 亚洲综合黄色 | 最近免费观看的电影完整版 | 视频一区亚洲 | 天天草综合网 | 丰满少妇在线观看网站 | 亚洲激色 | 天天舔夜夜操 | 精品国产伦一区二区三区观看体验 | 麻豆成人小视频 | 亚洲精品国产电影 | av片中文字幕 | 少妇高潮冒白浆 | 久久精品—区二区三区 | 成人免费看片网址 | 美女视频黄的免费的 | 国产专区欧美专区 | 日韩午夜在线 | 福利视频导航网址 | 91精品久久久久久综合五月天 | 久久精国产 | 一区二区视频电影在线观看 | 久久黄色免费观看 | 91精品综合在线观看 | 久久一本综合 | 人人射网站| 午夜国产福利在线观看 | 欧美日韩中文视频 | 免费三级骚 | 久久久久久久久久久成人 | 久久久私人影院 | 91av观看| 亚洲成免费 | 国产成人精品一区二区三区在线观看 | 免费av免费观看 | 成人在线一区二区 | 在线观看日韩视频 | 精品国产视频在线 | 日韩欧美国产视频 | www五月天com | 91久久影院| 亚洲夜夜综合 | 国产日韩欧美在线一区 | 99爱在线 | 久久免费视频在线观看6 | 国产三级午夜理伦三级 | 日韩午夜在线 | 美女一级毛片视频 | 国产精品入口麻豆www | 亚洲免费公开视频 | 在线日本看片免费人成视久网 | 亚洲最新视频在线播放 | 999久久精品 | 亚州视频在线 | 91麻豆精品国产自产 | 精品一区二区在线看 | 四虎免费在线观看视频 | 精品视频在线播放 | 日韩视频免费在线观看 | 在线播放一区二区三区 | 天天曰天天曰 | 国产成人一区二区啪在线观看 | 久久精品成人热国产成 | 久久婷婷五月综合色丁香 | 久久久久久久久黄色 | 欧美精品乱码99久久影院 | 国产精品免费久久 | 91精品视频在线观看免费 | 欧美一级久久久 | 92精品国产成人观看免费 | 国产精品视频你懂的 | 丁香av在线 | 日韩精品在线播放 | 在线黄色av电影 | 99精品国产99久久久久久97 | 五月婷婷激情 | www夜夜| 91欧美日韩国产 | 成人网中文字幕 | 98精品国产自产在线观看 | 日日夜夜天天久久 | 国产精品入口久久 | 911免费视频| 中文字幕色婷婷在线视频 | 五月婷婷久草 | 久久精品欧美一区 | 丰满少妇久久久 | 在线观看黄色av | 黄色www在线观看 | 一区二区精品在线 | 韩国三级一区 | 日韩在线观看精品 | 手机av在线不卡 | 日本黄色大片免费看 | 手机成人在线电影 | 久久综合九色99 | av福利资源| 精品96久久久久久中文字幕无 | 五月婷婷香蕉 | 久久精品国产免费看久久精品 | 99婷婷狠狠成为人免费视频 | 天海冀一区二区三区 | 久久天天躁夜夜躁狠狠躁2022 | 日韩毛片久久久 | 欧美视频在线观看免费网址 | 97超级碰碰碰视频在线观看 | www.国产在线观看 | 婷婷色av | 午夜视频在线观看一区二区 | 国产一级视频在线 | 亚洲国产欧美在线看片xxoo | 久久久久久黄色 | 激情黄色av | 国产午夜精品久久久久久久久久 | 婷婷国产一区二区三区 | 丰满少妇在线观看网站 | 亚洲视频电影在线 | 亚洲九九九在线观看 | 国产精品一区二区62 | 日本黄色免费大片 | 国产精品色婷婷视频 | 亚洲天堂色婷婷 | 国产精品一区二区白浆 | 91在线影院 | 九九视频精品在线 | 成人国产电影在线观看 | 91桃色在线免费观看 | 一级片观看| 久久久久北条麻妃免费看 | 国产午夜一区 | 视频二区在线视频 | 国产.精品.日韩.另类.中文.在线.播放 | 国产精品国内免费一区二区三区 | 欧美疯狂性受xxxxx另类 | 中国一级片在线观看 | 99在线免费观看视频 | 久久黄色免费视频 | 麻豆视频免费在线观看 | 99热在线国产精品 | 干亚洲少妇 | 免费观看一级成人毛片 | 久久视频热 | 久久久久免费精品国产小说色大师 | 成人久久精品 | 国产精品久久久久久久免费 | 国产亚洲日| www.av小说| 97在线影院 | 91视频亚洲 | 亚洲午夜av | 婷婷色伊人 | 亚洲免费视频观看 | 精品美女久久久久久免费 | 亚洲综合网 | 91传媒免费在线观看 | 最近中文字幕免费av | 青青射| 日韩美一区二区三区 | 天堂av在线 | 天天干天天干天天色 | 午夜久久久久久久久久影院 | 日韩欧美一区二区三区免费观看 | 精品久久久久久久久中文字幕 | 中文字幕在线看视频国产中文版 | 黄影院| 91黄色在线视频 | 三级在线播放视频 | 国产精品video爽爽爽爽 | 欧美疯狂性受xxxxx另类 | 丁香久久综合 | 在线国产小视频 | 国产黄a三级三级三级三级三级 | 91亚洲精品久久久蜜桃网站 | 国产亚洲视频在线 | 免费在线观看av的网站 | 一区二区三区四区久久 | 亚洲成色777777在线观看影院 | 97综合网| 香蕉在线视频观看 | 超薄丝袜一二三区 | 国产高清视频在线免费观看 | 国产亚洲精品女人久久久久久 | 国产精品99久久久久人中文网介绍 | 在线观看一区二区精品 | 最近中文字幕免费大全 | 国产视频一区精品 | 六月色播| 成人a在线观看高清电影 | 四虎永久网站 | 91在线观看视频网站 | 日韩免费在线看 | 激情欧美一区二区免费视频 | 国产一区二区手机在线观看 | 91麻豆精品国产91久久久久久久久 | 18久久久 | 毛片网站免费 | 中国一级特黄毛片大片久久 | 一区二区三区四区不卡 | 国产精品久久久久久久久久久久午夜 | 青青草在久久免费久久免费 | 一区二区三区不卡在线 | 狠狠干狠狠久久 | 91福利视频一区 | 国产精品成人免费精品自在线观看 | 成人黄色av网站 | 91亚洲永久精品 | 日韩欧美电影在线观看 | 欧美日韩在线视频一区 | 少妇av片| 亚洲黄网站 | 国内外成人在线 | 美女网站视频免费黄 | 中文有码在线视频 | 欧美性猛片 | 天天干天天拍天天操天天拍 | av片中文 | 久久久免费毛片 | 国产视频一区二区在线播放 | 四虎影视成人永久免费观看亚洲欧美 | 国产精品乱码高清在线看 | 在线观看精品 | 久久久精品国产一区二区 | 国产精品久久人 | av电影一区二区三区 | 在线一区二区三区 | 国产视频丨精品|在线观看 国产精品久久久久久久久久久久午夜 | 久久免费一级片 | 日韩在线看片 | 99免费精品视频 | 亚洲精品一区二区三区在线观看 | 一区二区免费不卡在线 | 伊人成人激情 | 黄色三级网站在线观看 | 国产理论影院 | 激情视频一区 | 欧美日韩精品在线播放 | 超碰人人干人人 | 国产免费激情久久 | 欧美日韩一区二区三区在线观看视频 | 久草观看视频 | 国产视频欧美视频 | 天天射天天爽 | 91精品1区 | 青青河边草免费视频 | 狠狠做六月爱婷婷综合aⅴ 日本高清免费中文字幕 | 久久99国产精品自在自在app | 日日麻批40分钟视频免费观看 | 三级黄色大片在线观看 | 成人免费观看网站 | 狠狠色丁香婷婷 | adn—256中文在线观看 | 国产一级在线免费观看 | 久久夜av| 在线看毛片网站 | 日韩av电影中文字幕在线观看 | www黄色com | 亚洲精品一区二区18漫画 | 久久久99精品免费观看乱色 | 丁香六月婷婷开心 | 天天操天天插 | 国产很黄很色的视频 | 欧美色图视频一区 | 色综合天天狠天天透天天伊人 | www狠狠| 99久热| 国产精品视频999 | 精品福利在线观看 | 97超碰在线免费观看 | 国产在线观看午夜 | 国产精品欧美一区二区 | 狠狠色综合网站久久久久久久 | 人人看人人艹 | 欧美成人猛片 | 国产一级片免费视频 | 国产精品网址在线观看 | 国产成人精品久久久久 | 日韩在线观看第一页 | 国产在线色视频 | 一区二区精品国产 | 69视频网站 | 97香蕉久久超级碰碰高清版 | 在线观看黄网站 | 伊人开心激情 | 91在线资源 | 欧美精品久久久久久 | 日韩三级一区 | 久久a v视频| 日韩视频免费观看高清 | 亚洲欧美日韩一二三区 | 国产在线1区 | 免费观看一级视频 | 国产精品久一 | 99久久999久久久精玫瑰 | 午夜av激情| 天天干天天怕 | 一级免费av| 黄色成人免费电影 | 欧美日韩一区二区三区在线观看视频 | 亚洲成人资源 | 亚洲午夜精| 91亚洲精品在线 | 日韩高清国产精品 | 精品久久久久久亚洲综合网 | 成人蜜桃| 欧美日韩网址 | av一级免费| 亚洲最大免费成人网 | 欧美在线aa| 九九在线精品视频 | 尤物九九久久国产精品的分类 | 成年人在线视频观看 | 欧美成人理伦片 | 久久69精品 | 91色综合| 精选久久 | 91精品看片| 日韩在线视频观看免费 | 精品久久久久久一区二区里番 | 狠狠网| 欧美成亚洲 | 97超碰总站 | 激情六月婷婷久久 | 国产第页 | 国产午夜av | 欧美一级免费黄色片 | 亚洲在线色 | 久久久国产网站 | 婷婷在线看| 丝袜网站在线观看 | 亚洲精品女 | 麻豆视频免费在线播放 | 久久精品欧美一区 | 91禁在线看 | 麻豆一级视频 | 成人午夜黄色 | 在线观看视频国产一区 | 久久艹中文字幕 | www操操操| 成人永久视频 | 日韩欧美一二三 | 日韩欧美在线不卡 | 91亚洲精品久久久蜜桃网站 | 国产视频91在线 | 91一区啪爱嗯打偷拍欧美 | 欧美另类一二三四区 | 国产不卡一区二区视频 | 欧美乱码精品一区 | 91丨精品丨蝌蚪丨白丝jk | 伊人影院得得 | 欧美精品xxx | 色天天中文 | 在线视频麻豆 | 狠狠地操 | 在线观看一区 | 最近日本字幕mv免费观看在线 | 色99之美女主播在线视频 | 日韩在线视频看看 | 天天翘av| 亚洲91精品在线观看 | 亚洲精品男人天堂 | 91麻豆精品| 99久久精品日本一区二区免费 | 婷婷中文在线 | 人人干97 | 黄色录像av | 麻豆免费看片 | 91超级碰 | 中文字幕亚洲欧美日韩2019 | 久久麻豆视频 | 成人在线视频免费观看 | 成人国产精品久久久 | 亚洲综合丁香 | 亚洲经典中文字幕 | 狠狠色丁香婷婷综合最新地址 | 国产日韩欧美视频 | 麻豆91视频| 午夜av在线 | 免费视频久久久久久久 | 久久亚洲福利视频 | 在线视频99 | 精品久久久久久综合 | 99久久精品国产一区 | 97干com| 97国产情侣爱久久免费观看 | 人人插人人做 | 97超碰人人爱 | 麻豆传媒视频在线播放 | 国产在线2020| 欧美日韩国产精品一区二区 | 91久色蝌蚪 | 婷婷资源站 | 99视频久久 | av中文字幕网 | 亚洲人在线 | 日韩欧美v| 91在线免费观看国产 | 国产免费成人av | 日韩电影中文,亚洲精品乱码 | 欧美午夜久久 | 欧美精品久久久久久久 | 国产精品婷婷午夜在线观看 | 涩涩爱夜夜爱 | 婷婷综合亚洲 | 99热在线国产 | 99热这里只有精品1 av中文字幕日韩 | 国产精品久久久一区二区三区网站 | 97在线观看免费观看 | 亚洲国产伊人 | 成人网看片 | 久久av在线 | 在线播放国产精品 | 国产99亚洲 | 亚洲成人精品在线 | 日韩中文字幕免费在线观看 | 亚洲色五月 | 五月婷影院 | 日韩系列 | 久久69精品久久久久久久电影好 | 日韩欧美视频二区 | 在线一区观看 | 成人a级大片| va视频在线| 免费av在线| 久草精品在线播放 | 婷婷国产精品 | 国产精品久久一区二区三区不卡 | 国模视频一区二区三区 | 国产va饥渴难耐女保洁员在线观看 | 国产视频精品久久 | 久久av在线 | 91免费在线播放 | 亚洲夜夜综合 | 在线观看日韩av | 青春草视频在线播放 | 特片网久久 | 欧美久久久久久久 | 国产精品免费看久久久8精臀av | 久草视频视频在线播放 | 久久精品亚洲一区二区三区观看模式 | 亚洲五月| 毛片一级免费一级 | 少妇性aaaaaaaaa视频 | 国产91亚洲 | 久久婷婷开心 | 高潮毛片无遮挡高清免费 | 久久公开免费视频 | 伊人天天狠天天添日日拍 | 一区三区在线欧 | 色婷五月天 | 青草草在线视频 | 国产精品美女免费看 | 国产精品18p | 天堂av在线7| 美女激情影院 | 久久国产成人午夜av影院潦草 | 六月色婷| 欧美精品xx | 久久精久久精 | 日韩大片免费在线观看 | 午夜12点 | 亚洲精品国内 | 日本一区二区不卡高清 | 九九亚洲视频 | 区一区二区三在线观看 | 黄色网址a| 福利视频一区二区 | 国产精品一区二区av | 国产精品久久久久久999 | 色综合激情网 | 天天综合色网 | 久久最新网址 | 日韩中文字幕在线 | 99热在| 天天干天天操天天爱 | 午夜精品久久久久99热app | 国产精品原创在线 | 97在线播放 | 亚洲永久字幕 | 精品久久1 | 丝袜制服天堂 | 一区三区视频在线观看 | 97精品久久人人爽人人爽 | 人人爽人人| 亚洲天天在线日亚洲洲精 | 九九九九热精品免费视频点播观看 | 免费看网站在线 | 黄色影院在线观看 | 国产不卡在线观看视频 | 中文字幕色在线视频 | 天天爱天天操天天爽 | 国产一区视频免费在线观看 | 久久伊人八月婷婷综合激情 | 国产v亚洲v | 蜜桃麻豆www久久囤产精品 | 久草精品在线播放 | 中文字幕第 | 亚洲综合视频在线观看 | 久久精品视频在线看 | 狠狠的操你| 久久不射电影网 | 婷婷久操| 狠狠色丁香婷婷综合最新地址 | 亚洲免费在线 | 亚洲v欧美v国产v在线观看 | 精品黄色在线观看 | 国产探花视频在线播放 | 国产馆在线播放 | 激情综合色综合久久 | 欧洲在线免费视频 | 在线观看亚洲精品 | 久久精品国产99国产 | 免费观看丰满少妇做爰 | 亚洲va韩国va欧美va精四季 | 欧美日韩一级久久久久久免费看 | 国产亚洲无| 欧美日韩精品在线一区二区 | 干干操操| 日韩中文久久 | 91成人网在线观看 | 91污污视频在线观看 | 最近日本中文字幕a | 国产精品va视频 | 午夜视频在线观看一区二区三区 | 亚洲国产手机在线 | 久久久久久久久久久综合 | 国产精品久久久电影 | 精品国产一区二区三区四区vr | a成人v | 久久99日韩 | 四虎小视频 | 国产在线视频一区二区 | 免费av高清| 国产成人一区二区精品非洲 | 91毛片在线观看 | 亚洲精品黄网站 | 欧美久久久久久久久久 | 欧美日韩伦理在线 | 五月天中文字幕mv在线 | 狠狠色狠狠色综合系列 | 特级大胆西西4444www | 日韩一区二区三区免费电影 | 亚洲国产精品电影在线观看 | 国产又粗又猛又黄又爽的视频 | 99久久精品国产一区二区成人 | 欧美日韩午夜 | 中文字幕在线观看1 | 97国产一区| 国产精品免费麻豆入口 | 久久综合九色综合网站 | 日日成人网 | 国产精品初高中精品久久 | 中文字幕免费一区 | 亚洲精品97 | 天天综合久久综合 | 国产亚洲精品美女久久 | 中文字幕亚洲欧美日韩 | 国产在线999 | 欧美日韩国产二区三区 | 日韩中文字幕亚洲一区二区va在线 | 亚洲永久字幕 | 国产精品女主播一区二区三区 | 国内免费的中文字幕 | 国产一级二级视频 | 97人人模人人爽人人少妇 | 欧美孕交vivoestv另类 | 久久久久久电影 | 精品亚洲午夜久久久久91 | 亚洲综合精品视频 | 亚洲成人黄 | 免费高清无人区完整版 | 天天干天天拍天天操 | 91精品国产综合久久婷婷香蕉 | 国产九九热 | 亚洲精品国产精品国自产在线 | 国产精品一区二区久久久 | 久草免费在线观看 | 日韩电影一区二区三区 | 久久久久久久久福利 | 99热在线国产精品 | 午夜美女视频 | 91九色国产视频 | 日本精品久久 | 国产精品丝袜在线 | 日韩视频一区二区在线 | 国产91aaa | 中文字幕色播 | 久久艹中文字幕 | 探花国产在线 | av五月婷婷 | 91成年人在线观看 | 日韩大片在线免费观看 | 日韩毛片在线免费观看 | 久久视频在线看 | 亚洲人成精品久久久久 | 国产精品热 | 91福利视频免费观看 | 成年人视频在线免费播放 | 久久精品亚洲一区二区三区观看模式 | 欧美日产在线观看 | 五月婷婷久 | 色一级片 | 日韩精品字幕 | 日韩精品中文字幕在线 | 日韩在线观看第一页 | 欧美激情在线看 | 国产精品一区电影 | 亚洲精选视频免费看 | 欧美a免费 | 99视频在线精品国自产拍免费观看 | 久草电影在线 | 久久久www成人免费毛片麻豆 | 成人作爱视频 | 亚洲综合情 | 亚洲美女视频网 | 亚洲欧美国产日韩在线观看 | 狠狠成人 | 日韩大片免费观看 | 国产一级片久久 | 欧洲视频一区 | 国产成人专区 | 亚洲高清久久久 | 丁香5月婷婷久久 | 免费亚洲视频 | 国产一区二区三区免费在线 | 国产免费观看久久黄 | 亚洲观看黄色网 | 毛片网在线观看 | 欧亚久久| 久久久午夜精品福利内容 | 麻豆影视在线播放 | 国产真实精品久久二三区 | 久久久伊人网 | 日日操狠狠干 | 夜夜干天天操 | 奇米影视999 | 日韩av在线小说 | 在线观看免费观看在线91 | 婷婷香蕉| 婷婷精品国产一区二区三区日韩 | 久久新| 91资源在线视频 | 国产亚洲永久域名 | 色av婷婷| 免费a v观看 | 91在线亚洲 | 色婷婷精品大在线视频 | 日日躁你夜夜躁你av蜜 | 91精品国产一区二区在线观看 | 麻豆一级视频 | 最近的中文字幕大全免费版 | 99国产精品 | 91精品免费在线 | 麻豆国产网站入口 | 日韩精品中文字幕在线不卡尤物 | 91资源在线 | 国产91精品一区二区 | 亚洲1区 在线 | 蜜臀久久99精品久久久无需会员 | 日韩在线观看你懂的 | 国产精品黄色在线观看 | 亚洲精品乱码久久久久 | 国产福利精品在线观看 | 中文字幕第一页在线视频 | 婷婷干五月 | 中文字幕乱码一区二区 | 激情视频在线观看网址 | 久久老司机精品视频 | 久草网视频| 中文av资源站 | 久久精品免费 | 天天人人综合 | 欧美日韩不卡一区二区 | 成人不用播放器 | 国产日韩精品在线观看 | 欧美在线1| 69绿帽绿奴3pvideos | 麻豆国产视频 | 国产在线1区 | 美女视频黄的免费的 | 午夜精品久久久久久99热明星 | 丁香婷婷深情五月亚洲 | 日本激情视频中文字幕 | 日韩av成人在线观看 | 在线视频久 | 久久久久久久综合色一本 | 亚洲自拍偷拍色图 | 国产高清一区二区 | 成人资源站 | 国内精品久久久久久久影视麻豆 | 狠狠干2018 | 欧美日韩另类视频 | 亚洲国产精品电影在线观看 | 成人a在线观看高清电影 | 欧美日韩一级在线 | 97色婷婷人人爽人人 | 在线观看一级 | 99国产精品久久久久老师 | 三级黄色免费片 | 欧美性色综合网站 | 欧美精品在线视频观看 | 韩国精品福利一区二区三区 | 国产精品a久久 | 免费av 在线 | 精品免费久久久久久 | 亚洲国产视频网站 | 韩国av免费看 | 中文字幕在线不卡国产视频 | 国产精品一区二区在线观看免费 | 国产小视频你懂的 | 久久免费高清视频 | 99 视频 高清 | 色吊丝在线永久观看最新版本 | 中文字幕 国产精品 | 狠狠操狠狠干2017 | 久久综合久久综合久久综合 | 久久一线| 亚洲 中文字幕av | 国产亚洲永久域名 | 丁香五月网久久综合 | 日本精品视频在线 | 亚洲综合黄色 | 日日天天干 | 国精产品999国精产品视频 | 国产一区二区三区久久久 | 99视频在线免费看 | 日韩啪啪小视频 | 国产在线一卡 | 国产亚洲免费观看 | 香蕉91视频 | 婷婷久久一区二区三区 | 免费视频xnxx com | 国产精品美女久久久久久久久久久 | 91精品爽啪蜜夜国产在线播放 | 在线91色 | 美女视频免费精品 | 综合成人在线 | 91在线最新 | 日韩乱色精品一区二区 | 国产精品第一 | 国产第一页在线播放 | 免费av在线网站 | 国产999精品 | www成人av| 香蕉在线视频播放网站 | 精品在线视频观看 | 在线成人性视频 | 免费观看91视频大全 | 91大片网站 | 91看片成人 | 国产精品男女视频 | a资源在线| 蜜臀久久99静品久久久久久 | 欧美孕交vivoestv另类 | 国产欧美日韩视频 | 久草视频在线资源站 | 91免费国产在线观看 | 在线视频欧美亚洲 | 天海翼一区二区三区免费 | 国产高清99 | 国产亚洲成av人片在线观看桃 | 免费一区在线 | 久久久久综合网 | 日韩久久精品一区二区 | 91pony九色丨交换 | 成人黄色小说在线观看 | 免费观看黄色12片一级视频 | av中文天堂 | 天天看天天干 | 国产91在线观看 | 国产小视频精品 | 国产精品亚洲片在线播放 | 成人免费在线播放视频 | 久久久免费精品 | 国产亚洲精品v | 久久成人一区二区 | 久久蜜桃av | 国产成人99av超碰超爽 | 久久久久亚洲国产 | 日韩啪视频 | 丁香花中文在线免费观看 | 超碰97公开| 久久久观看 | 亚洲精品小视频在线观看 | 欧美色888| 亚洲男女精品 | 欧美精品久久久久 | 在线观看一区二区精品 | 99久久成人 | 天堂在线视频免费观看 | 偷拍区另类综合在线 | 欧美色888 | 亚洲国产免费av | 天天综合网久久 | av超碰在线 | 国产精品欧美久久久久三级 | 欧美色婷婷 | 国产一级片免费播放 | 久爱综合| av电影在线观看完整版一区二区 | 九九精品久久 | 国内毛片毛片 | 亚洲一二区视频 | 91成人免费在线视频 | 亚洲国产精品激情在线观看 | 午夜视频导航 | 日本三级不卡 | 久久综合激情 | 日韩 在线| 中文字幕中文字幕 | 99精品国产一区二区三区麻豆 | 亚洲人av免费网站 | 国产99在线 | 97免费在线观看视频 | 国产视频中文字幕 | 国产在线资源 | 特级西西www44高清大胆图片 | 午夜精品久久久久久久99热影院 | 在线观看视频日韩 | 色综合天天天天做夜夜夜夜做 | 精品视频免费久久久看 | 狠狠狠干| 国产91在线 | 美洲 | 国产成人一区二区三区在线观看 | 在线免费观看黄色大片 | 91免费观看视频网站 | av免费在线网 | 国产精品女主播一区二区三区 | 精品在线观看视频 | 麻豆视频在线观看免费 | 青青河边草免费观看完整版高清 | 2000xxx影视| 免费电影播放 | 九色精品| 色综合天天爱 | 伊人春色电影网 | 中文字幕日韩一区二区三区不卡 | 亚洲国产资源 | 精品在线看 | 久久成人国产精品一区二区 | 日韩精品在线视频 | www.亚洲精品视频 | 日韩欧美视频免费看 | 欧美精品久久久久久久免费 | 日本性生活免费看 | 久久黄色精品视频 | 麻豆激情电影 | 一区二区精品在线观看 | 999精品在线 | 五月天综合色激情 | 四川妇女搡bbbb搡bbbb搡 | 一级片免费在线 | 欧美 国产 视频 | 精品一区 在线 | 日韩视频在线观看视频 | 一区二区激情视频 | 婷婷视频在线 | 免费国产在线视频 | 97成人精品视频在线观看 | 日本性动态图 | 麻豆精品传媒视频 | 国产精品久久久久四虎 | 99热精品国产一区二区在线观看 | 久久精品3 | 国产视频综合在线 | 麻豆视频国产在线观看 | 色瓜 | 日本女人b | av成人资源 | 国产 在线 高清 精品 | av电影 一区二区 | 久久精品视频免费观看 | 久久亚洲欧美 | 日韩综合精品 | 免费看亚洲毛片 | 国产免费作爱视频 | 色天天综合网 | 在线观看视频免费播放 | 欧美一区三区四区 | 日韩精品一区二区三区免费视频观看 | 日韩电影在线观看一区 | 久久精品久久久精品美女 | 制服丝袜亚洲 | 一区二区三区日韩视频在线观看 | 久久久久人人 | 亚洲 在线 | 日日草av | 在线а√天堂中文官网 | 亚洲欧美激情精品一区二区 | 国产亚洲精品久久久久久久久久 | 国产精品久久久久999 | 国产专区一 | 97国产大学生情侣白嫩酒店 | 欧美日韩视频在线播放 | 97品白浆高清久久久久久 | 国产精品99久久久久人中文网介绍 | 国产五月| 国产99中文字幕 | 久久一久久 | 97超碰在线久草超碰在线观看 | 国产超碰在线 | 99色免费视频 | 国产一区二区精品在线 | 国产精品国产三级国产专区53 | 精品国产一区二区三区四区vr | 在线免费观看视频 | av免费观看网站 | 91传媒在线播放 | 久久久久久黄 | 国产日韩欧美在线看 | 久久精品国产免费观看 | 欧美午夜性生活 | 91高清在线 | 国产精品精品久久久 | 在线a亚洲视频播放在线观看 | 日本中文字幕久久 | 国产免费精彩视频 | 国产黄色片一级 | 丝袜美腿亚洲综合 | 精品不卡视频 | 国产一区欧美二区 | 一区二区视频电影在线观看 | 国产精品丝袜在线 | 五月婷丁香 | 视频一区视频二区在线观看 | 久久一区二区免费视频 | 欧美日一级片 | 9i看片成人免费看片 | 免费黄在线观看 | 欧美日韩精品影院 |