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

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

?? sdio_bus_misc.c

?? Linux下SDIO設備的驅動程序
?? C
?? 第 1 頁 / 共 5 頁
字號:
/*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++@file: sdio_bus_misc.c@abstract: OS independent bus driver support#notes: this file contains miscellaneous control functions@notice: Copyright (c), 2004-2006 Atheros Communications, Inc.$ATH_LICENSE_SDIOSTACK0$+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/#define MODULE_NAME  SDBUSDRIVER#include <linux/sdio/ctsystem.h>#include <linux/sdio/sdio_busdriver.h>#include <linux/sdio/sdio_lib.h>#include "_busdriver.h"#include <linux/sdio/_sdio_defs.h>#include <linux/sdio/mmc_defs.h>/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++  IssueBusRequestBd - issue a bus request  Input:  pHcd - HCD object          Cmd - command to issue          Argument - command argument          Flags - request flags  Output: pReqToUse - request to use (if caller wants response data)  Return: SDIO Status  Notes:  This function only issues 1 block data transfers          This function issues the request synchronously++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/SDIO_STATUS _IssueBusRequestBd(PSDHCD           pHcd,                               UINT8            Cmd,                               UINT32           Argument,                               SDREQUEST_FLAGS  Flags,                               PSDREQUEST       pReqToUse,                               PVOID            pData,                               INT              Length){    SDIO_STATUS status = SDIO_STATUS_SUCCESS;    PSDREQUEST  pReq;    if (NULL == pReqToUse) {            /* caller doesn't care about the response data, allocate locally */        pReq = AllocateRequest();        if (NULL == pReq) {            return SDIO_STATUS_NO_RESOURCES;        }    } else {            /* use the caller's request buffer */        pReq = pReqToUse;    }    pReq->Argument = Argument;    pReq->Flags = Flags;    pReq->Command = Cmd;    if (pReq->Flags & SDREQ_FLAGS_DATA_TRANS) {        pReq->pDataBuffer  = pData;        pReq->BlockCount = 1;        pReq->BlockLen = Length;    }    status = IssueRequestToHCD(pHcd,pReq);    if (NULL == pReqToUse) {        DBG_ASSERT(pReq != NULL);        FreeRequest(pReq);    }    return status;}/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++  ConvertVoltageCapsToOCRMask - initialize card  Input:  VoltageCaps - voltage cap to look up  Return: 32 bit OCR mask  Notes:  this function sets voltage for +- 10%++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/static UINT32 ConvertVoltageCapsToOCRMask(SLOT_VOLTAGE_MASK VoltageCaps){    UINT32 ocrMask;    ocrMask = 0;    if (VoltageCaps & SLOT_POWER_3_3V) {        ocrMask |= SD_OCR_3_2_TO_3_3_VDD | SD_OCR_3_3_TO_3_4_VDD;    }    if (VoltageCaps & SLOT_POWER_3_0V) {        ocrMask |= SD_OCR_2_9_TO_3_0_VDD | SD_OCR_3_0_TO_3_1_VDD;    }    if (VoltageCaps & SLOT_POWER_2_8V) {        ocrMask |= SD_OCR_2_7_TO_2_8_VDD | SD_OCR_2_8_TO_2_9_VDD;    }    if (VoltageCaps & SLOT_POWER_2_0V) {        ocrMask |= SD_OCR_1_9_TO_2_0_VDD | SD_OCR_2_0_TO_2_1_VDD;    }    if (VoltageCaps & SLOT_POWER_1_8V) {        ocrMask |= SD_OCR_1_7_TO_1_8_VDD | SD_OCR_1_8_TO_1_9_VDD;    }    if (VoltageCaps & SLOT_POWER_1_6V) {        ocrMask |= SD_OCR_1_6_TO_1_7_VDD;    }    return ocrMask;}static UINT32 GetUsableOCRValue(UINT32 CardOCR, UINT32 SlotOCRMask){    INT    i;    UINT32 mask = 0;    for (i = 0; i < 32; i++) {        mask = 1 << i;        if ((SlotOCRMask & mask) && (CardOCR & mask)) {            return mask;        }    }    return mask;}/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++  GetPowerSetting - power up the SDIO card  Input:  pHcd - HCD object          pOCRvalue - OCR value of the card  Output: pOCRvalue - OCR to actually use  Return: power setting for HCD based on card's OCR, zero indicates unsupported  Notes:++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/static SLOT_VOLTAGE_MASK GetPowerSetting(PSDHCD pHcd, UINT32 *pOCRvalue){    UINT32                      ocrMask;    SLOT_VOLTAGE_MASK           hcdVoltage = 0;    SLOT_VOLTAGE_MASK           hcdVMask;    INT                         i;        /* check preferred value */    ocrMask = ConvertVoltageCapsToOCRMask(pHcd->SlotVoltagePreferred);    if (ocrMask & *pOCRvalue) {            /* using preferred voltage */        *pOCRvalue = GetUsableOCRValue(*pOCRvalue, ocrMask);        hcdVoltage = pHcd->SlotVoltagePreferred;    } else {            /* walk through the slot voltage caps and find a match */        for (i = 0; i < 8; i++) {            hcdVMask = (1 << i);            if (hcdVMask & pHcd->SlotVoltageCaps) {                ocrMask = ConvertVoltageCapsToOCRMask((SLOT_VOLTAGE_MASK)(pHcd->SlotVoltageCaps & hcdVMask));                if (ocrMask & *pOCRvalue) {                        /* found a match */                    *pOCRvalue = GetUsableOCRValue(*pOCRvalue, ocrMask);                    hcdVoltage = pHcd->SlotVoltageCaps & hcdVMask;                    break;                }            }        }    }    return hcdVoltage;}/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++  TestPresence - test the presence of a card/function  Input:  pHcd - HCD object          TestType - type of test to perform  Output: pReq - Request to use (optional)  Return:  Notes:++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/SDIO_STATUS TestPresence(PSDHCD          pHcd,                         CARD_INFO_FLAGS TestType,                         PSDREQUEST      pReq){    SDIO_STATUS status = SDIO_STATUS_ERROR;     switch (TestType) {        case CARD_SDIO:                /* issue CMD5 */            status = _IssueSimpleBusRequest(pHcd,CMD5,0,                        SDREQ_FLAGS_RESP_SDIO_R4 | SDREQ_FLAGS_RESP_SKIP_SPI_FILT,pReq);            break;#ifndef CT_CONFIG_NO_SDMMC        case CARD_SD:            if (IS_HCD_BUS_MODE_SPI(pHcd)) {                 /* ACMD41 just starts initialization when in SPI mode, argument is ignored                 * Note: In SPI mode ACMD41 uses an R1 response */                status = _IssueSimpleBusRequest(pHcd,ACMD41,0,                                                SDREQ_FLAGS_APP_CMD | SDREQ_FLAGS_RESP_R1,pReq);            } else {                /* issue ACMD41 with OCR value of zero */                /* ACMD41 on SD uses an R3 response */                status = _IssueSimpleBusRequest(pHcd,ACMD41,0,                                                SDREQ_FLAGS_APP_CMD | SDREQ_FLAGS_RESP_R3,pReq);            }            break;        case CARD_MMC:                 /* issue CMD1 */            if (IS_HCD_BUS_MODE_SPI(pHcd)) {                    /* note: in SPI mode an R1 response is used */                status = _IssueSimpleBusRequest(pHcd,CMD1,0,SDREQ_FLAGS_RESP_R1,pReq);            } else {                status = _IssueSimpleBusRequest(pHcd,CMD1,0,SDREQ_FLAGS_RESP_R3,pReq);            }            break;#endif        default:            DBG_ASSERT(FALSE);            break;    }    return status;}/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++  ReadOCR - read the OCR  Input:  pHcd - HCD object          ReadType - type of read to perform          OCRValue - OCR value to use as an argument  Output: pReq - Request to use          pOCRValueRd - OCR value read back (can be NULL)  Return:  Notes:++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/static SDIO_STATUS ReadOCR(PSDHCD          pHcd,                           CARD_INFO_FLAGS ReadType,                           PSDREQUEST      pReq,                           UINT32          OCRValue,                           UINT32          *pOCRValueRd){    SDIO_STATUS status = SDIO_STATUS_ERROR;     switch (ReadType) {        case CARD_SDIO:                /* CMD5 for SDIO cards */            if (IS_HCD_BUS_MODE_SPI(pHcd)) {                    /* skip the SPI filter, we will decode the response here  */                status = _IssueSimpleBusRequest(pHcd,CMD5,                                                OCRValue,                                                SDREQ_FLAGS_RESP_SDIO_R4 |                                                SDREQ_FLAGS_RESP_SKIP_SPI_FILT,                                                pReq);            } else {                    /* native SD */                status = _IssueSimpleBusRequest(pHcd,CMD5,                                                OCRValue,                                                SDREQ_FLAGS_RESP_SDIO_R4,                                                pReq);            }            break;#ifndef CT_CONFIG_NO_SDMMC        case CARD_SD:            if (IS_HCD_BUS_MODE_SPI(pHcd)) {                    /* CMD58 is used to read the OCR */                status = _IssueSimpleBusRequest(pHcd,CMD58,                                                0, /* argument ignored */                                                (SDREQ_FLAGS_RESP_R3 | SDREQ_FLAGS_RESP_SKIP_SPI_FILT),                                                pReq);            } else {                    /* SD Native uses ACMD41 */                status = _IssueSimpleBusRequest(pHcd,ACMD41,                                                OCRValue,                                                SDREQ_FLAGS_APP_CMD | SDREQ_FLAGS_RESP_R3,                                                pReq);            }            break;        case CARD_MMC:            if (IS_HCD_BUS_MODE_SPI(pHcd)) {                    /* CMD58 is used to read the OCR  */                status = _IssueSimpleBusRequest(pHcd,CMD58,                                                0, /* argument ignored */                                                (SDREQ_FLAGS_RESP_R3 | SDREQ_FLAGS_RESP_SKIP_SPI_FILT),                                                pReq);            } else {                    /* MMC Native uses CMD1 */                status = _IssueSimpleBusRequest(pHcd,CMD1,                                                OCRValue, SDREQ_FLAGS_RESP_R3,                                                pReq);            }            break;#endif        default:            DBG_ASSERT(FALSE);            break;    }    if (SDIO_SUCCESS(status) && (pOCRValueRd != NULL)) {        *pOCRValueRd = 0;            /* someone wants the OCR read back */        switch (ReadType) {            case CARD_SDIO:                if (IS_HCD_BUS_MODE_SPI(pHcd)) {                    *pOCRValueRd = SPI_SDIO_R4_GET_OCR(pReq->Response);                } else {                    *pOCRValueRd = SD_SDIO_R4_GET_OCR(pReq->Response);                }                break;#ifndef CT_CONFIG_NO_SDMMC            case CARD_SD:            case CARD_MMC:                if (IS_HCD_BUS_MODE_SPI(pHcd)) {                    *pOCRValueRd = SPI_R3_GET_OCR(pReq->Response);                } else {                    *pOCRValueRd = SD_R3_GET_OCR(pReq->Response);                }                break;#endif            default:                DBG_ASSERT(FALSE);

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲午夜久久久久中文字幕久| 日韩国产欧美视频| 一区二区三区久久久| 性感美女久久精品| 国产一区二区毛片| 欧美一区二区精美| 2020国产精品久久精品美国| 中文字幕免费不卡在线| 亚洲精品第1页| 美女免费视频一区二区| 国产成人啪午夜精品网站男同| www.亚洲色图.com| 欧美精品一二三| 国产色综合一区| 一区二区不卡在线视频 午夜欧美不卡在| 亚洲成av人片观看| 丰满岳乱妇一区二区三区| 91久久久免费一区二区| 精品欧美久久久| 亚洲精品免费在线观看| 免费一级片91| 色婷婷久久久亚洲一区二区三区| 欧美日韩日日摸| 91.com在线观看| 亚洲精品欧美激情| 91在线观看视频| 欧美韩日一区二区三区| 奇米精品一区二区三区在线观看 | 欧美一个色资源| 亚洲视频资源在线| 国产精品一区二区三区99| 91精品啪在线观看国产60岁| 最新不卡av在线| 99v久久综合狠狠综合久久| 国产无一区二区| 国产精品99久久久久久有的能看 | 欧美系列亚洲系列| 一区二区三区四区国产精品| 成人动漫在线一区| 国产精品天干天干在线综合| 国产高清不卡一区二区| 尤物在线观看一区| 中文字幕在线观看不卡| 国产传媒久久文化传媒| www亚洲一区| 国产精品一区二区免费不卡| 久久婷婷综合激情| 国产成人在线免费| 日本一区二区三区四区 | 精品一区二区三区在线观看| 日韩一区二区三区观看| 看片网站欧美日韩| 久久亚洲免费视频| 成人妖精视频yjsp地址| 国产精品视频九色porn| 成人午夜av电影| 亚洲激情自拍偷拍| 欧美三区在线观看| 美女mm1313爽爽久久久蜜臀| 欧美一级在线观看| 国产精品18久久久久久久网站| 26uuu精品一区二区在线观看| 国产揄拍国内精品对白| 欧美精品在线视频| 日本va欧美va精品| 国产午夜精品久久久久久免费视| 成人sese在线| 亚洲一二三四区不卡| 欧美久久一区二区| 国产麻豆精品久久一二三| 国产精品伦理一区二区| av一区二区不卡| 国产亚洲综合av| 波多野结衣亚洲| 一区精品在线播放| 色88888久久久久久影院野外| 亚洲免费av高清| 欧美性大战久久| 日本三级亚洲精品| 日韩丝袜情趣美女图片| 久久黄色级2电影| 国产无人区一区二区三区| 成人免费毛片嘿嘿连载视频| 国产精品久久久久久久蜜臀| 91传媒视频在线播放| 另类小说图片综合网| 亚洲欧洲日韩一区二区三区| 欧美日本一区二区三区四区| 国产白丝网站精品污在线入口| 亚洲精品日韩综合观看成人91| 欧美一级生活片| 成人av影视在线观看| 香蕉成人伊视频在线观看| 国产欧美日韩卡一| 在线播放视频一区| 972aa.com艺术欧美| 久久精品国产亚洲高清剧情介绍| 亚洲人吸女人奶水| 精品国产乱码久久久久久1区2区| 色婷婷精品大在线视频| 国产精品自拍网站| 五月婷婷久久丁香| 国产精品毛片久久久久久| 欧美一二三在线| 欧美视频一区在线| 成人午夜av在线| 精品一区二区成人精品| 亚洲成人福利片| 国产精品久久免费看| 2017欧美狠狠色| 欧美一区二区在线观看| 一本大道久久a久久精二百 | 亚洲综合丝袜美腿| 国产欧美日韩另类一区| 欧美本精品男人aⅴ天堂| 欧美日韩国产高清一区二区三区 | 亚洲一区二区三区四区在线| 久久综合九色综合欧美98| 在线视频国内自拍亚洲视频| 成人午夜视频网站| 国产成人免费视频| 狠狠狠色丁香婷婷综合激情| 午夜精品免费在线观看| 亚洲小说欧美激情另类| 亚洲精品少妇30p| 中文乱码免费一区二区| 久久精品一区四区| 国产午夜精品在线观看| 国产亚洲视频系列| 久久久久99精品国产片| 久久这里只精品最新地址| 精品久久久久久久久久久久久久久 | 激情小说欧美图片| 裸体歌舞表演一区二区| 久久精品国产99| 精油按摩中文字幕久久| 国产又粗又猛又爽又黄91精品| 九一久久久久久| 国产精品一区二区免费不卡| 国产麻豆精品视频| 福利一区二区在线观看| 91在线视频播放地址| 91老师片黄在线观看| 91在线你懂得| 色吊一区二区三区| 欧美日本高清视频在线观看| 欧美另类变人与禽xxxxx| 884aa四虎影成人精品一区| 9191久久久久久久久久久| 欧美成人一区二区三区片免费| 日韩欧美aaaaaa| 欧美国产综合色视频| 亚洲色图欧美在线| 亚洲国产精品久久艾草纯爱| 亚洲va国产va欧美va观看| 青青青伊人色综合久久| 激情综合五月婷婷| 成人永久aaa| 日本高清不卡视频| 欧美日韩激情一区二区三区| 精品卡一卡二卡三卡四在线| 国产精品人成在线观看免费| 亚洲免费观看高清完整版在线| 五月天激情综合| 国产美女主播视频一区| 99久久免费国产| 欧美电影一区二区三区| 久久精品视频一区二区| 伊人一区二区三区| 久久激情五月激情| 91在线视频播放地址| 91精品国产91久久久久久最新毛片| 精品国产三级电影在线观看| 国产精品传媒视频| 日本91福利区| 不卡一区在线观看| 91精品国产aⅴ一区二区| 国产精品乱码人人做人人爱| 午夜精品久久久久久久99水蜜桃| 国产成人日日夜夜| 欧美一二三区在线| 亚洲精品久久嫩草网站秘色| 麻豆精品在线视频| 91亚洲男人天堂| 久久伊99综合婷婷久久伊| 亚洲国产精品一区二区久久恐怖片 | 亚洲欧美激情视频在线观看一区二区三区 | 国产最新精品免费| 91成人在线精品| 国产调教视频一区| 青娱乐精品视频在线| 91久久一区二区| 国产精品欧美久久久久一区二区| 青椒成人免费视频| 欧美伊人久久大香线蕉综合69 | 麻豆91在线观看| 日本韩国欧美一区二区三区| 久久久综合精品| 久久精品二区亚洲w码| 欧美日韩在线三级|