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

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

?? sdhc.cpp

?? 6410BSP3
?? CPP
?? 第 1 頁 / 共 3 頁
字號:

    case SDHCDSetSlotPowerState: {
        if (cbData != sizeof(CEDEVICE_POWER_STATE)) {
            status = SD_API_STATUS_INVALID_PARAMETER;
        }

        PCEDEVICE_POWER_STATE pcps = (PCEDEVICE_POWER_STATE) pData;

        if (*pcps < m_cpsCurrent) {
            // Move controller to higher power state initially since
            // it will need to be powered for the slot to access
            // registers.
            SetControllerPowerState(*pcps);
        }

        status = pSlot->SlotOptionHandler(sdOption, pData, cbData);

        // Set the power state based on current conditions. Note that 
        // the slot may have gone to a state different from what was 
        // requested.
        CEDEVICE_POWER_STATE cps = DetermineRequiredControllerPowerState();
        SetControllerPowerState(cps);
        fCallSlotsHandler = FALSE;
        break;
    }

    case SDHCDGetSlotPowerState: {
        if (cbData != sizeof(CEDEVICE_POWER_STATE)) {
            status = SD_API_STATUS_INVALID_PARAMETER;
        }
        break;
    }

    case SDHCDWakeOnSDIOInterrupts: {
        if (cbData != sizeof(BOOL)) {
            status = SD_API_STATUS_INVALID_PARAMETER;
        }
        break;
    }

    case SDHCDGetSlotInfo: {
        if (cbData != sizeof(SDCARD_HC_SLOT_INFO)) {
            status = SD_API_STATUS_INVALID_PARAMETER;
        }
        break;
    }
    case SDHCDSetSlotInterfaceEx: {
        if (cbData != sizeof(SD_CARD_INTERFACE_EX)) {
            status = SD_API_STATUS_INVALID_PARAMETER;
        }
        break;
    }
    case SDHCAllocateDMABuffer: {
        if (pData==NULL || cbData != sizeof(SD_HOST_ALLOC_FREE_DMA_BUFFER)) {
            status = SD_API_STATUS_INVALID_PARAMETER;
        }
        break;
    }
    case SDHCFreeDMABuffer:{
        if (pData==NULL || cbData != sizeof(SD_HOST_ALLOC_FREE_DMA_BUFFER)) {
            status = SD_API_STATUS_INVALID_PARAMETER;
        }
      break;
    }
    
    default:
        break;
    }

    if (SD_API_SUCCESS(status) && fCallSlotsHandler) {
        // Call the slots handler to do the real work.
        __try {
            status = pSlot->SlotOptionHandler(sdOption, pData, cbData);
        }__except (SDProcessException(GetExceptionInformation())) {
            status = SD_API_STATUS_INVALID_PARAMETER;
        }
    }

    Unlock();

    return status;
}


VOID
CSDHCBase::PowerDown(
                     )
{
    Validate();

    for (DWORD dwSlot = 0; dwSlot < m_cSlots; ++dwSlot) {
        PCSDHCSlotBase pSlot = GetSlot(dwSlot);
        pSlot->PowerDown();
    }

    CEDEVICE_POWER_STATE cps = DetermineRequiredControllerPowerState();
    SetControllerPowerState(cps);
}


VOID
CSDHCBase::PowerUp(
                   )
{
    Validate();

    for (DWORD dwSlot = 0; dwSlot < m_cSlots; ++dwSlot) {
        PCSDHCSlotBase pSlot = GetSlot(dwSlot);

        CEDEVICE_POWER_STATE cpsRequired = pSlot->GetPowerUpRequirement();
        if (cpsRequired < m_cpsCurrent) {
            // Move controller to higher power state initially since
            // it will need to be powered for the slot to access
            // registers.
            SetControllerPowerState(cpsRequired);
        }

        pSlot->PowerUp();
    }
}


VOID
CSDHCBase::PreDeinit(
                     )
{
    if (m_fRegisteredWithBusDriver) {
        if (m_fDriverShutdown == FALSE) {
            // Deregister the host controller
            SDHCDDeregisterHostController(m_pHCDContext);
        }
        // else the bus driver itself already deregistered us.

        m_fRegisteredWithBusDriver = FALSE;
    }
}


BOOL 
CSDHCBase::InitializeHardware(
                              )
{
    SETFNAME(_T("InitializeHardware"));

    DEBUGCHK(m_hBusAccess);
    DEBUGCHK(m_regDevice.IsOK());
    PREFAST_DEBUGCHK(m_pSlotInfos);
    ValidateSlotCount();

    BOOL fRet = FALSE;
    PHYSICAL_ADDRESS PortAddress;
    DWORD inIoSpace = 0;

    // Read window information
    DDKWINDOWINFO wini;
    wini.cbSize = sizeof(wini);
    DWORD dwStatus = DDKReg_GetWindowInfo(m_regDevice, &wini);
    if (dwStatus != ERROR_SUCCESS) {
        DEBUGMSG(SDCARD_ZONE_ERROR, (_T("%s Error getting window information\r\n"),
            pszFname));
        goto EXIT;
    }

    // Read ISR information
    DDKISRINFO isri;
    isri.cbSize = sizeof(isri);
    dwStatus = DDKReg_GetIsrInfo(m_regDevice, &isri);
    if (dwStatus != ERROR_SUCCESS) {
        DEBUGMSG(SDCARD_ZONE_ERROR, (_T("%s Error getting ISR information\r\n"),
            pszFname));
        goto EXIT;
    }

#ifdef SET_TI_BOARD_PCI_REG
    {
        DDKPCIINFO dpi;
        dpi.cbSize = sizeof(dpi);
        DDKReg_GetPciInfo(m_regDevice, &dpi);

        DWORD RetVal;
        PCI_SLOT_NUMBER SlotNumber;
        SlotNumber.u.AsULONG = 0;
        SlotNumber.u.bits.DeviceNumber = dpi.dwDeviceNumber;
        SlotNumber.u.bits.FunctionNumber = 1;

        HalGetBusDataByOffset( PCIConfiguration,
                               wini.dwBusNumber,
                               SlotNumber.u.AsULONG,
                               &RetVal,
                               0x84,
                               sizeof( RetVal ) );

        if (!(RetVal & 0x00200000)) {
            RetVal |= 0x00200000;
            HalSetBusDataByOffset( PCIConfiguration,
                                   wini.dwBusNumber,
                                   SlotNumber.u.AsULONG,
                                   &RetVal,
                                   0x84,
                                   sizeof( RetVal ) );
        }
    }
#endif

    // Sanity check ISR
    if (isri.dwSysintr == SYSINTR_NOP) {
        DEBUGMSG(SDCARD_ZONE_ERROR, (_T("%s No sysintr specified in registry\r\n"),
            pszFname));
                // For HSMMC driver request OAL a SYSINTR instead of ststic SYSINTR mapping, Below KernelIoControl function is called.
                if (!KernelIoControl(IOCTL_HAL_REQUEST_SYSINTR, &(isri.dwIrq), sizeof(DWORD), &(isri.dwSysintr), sizeof(DWORD), NULL))
                {
                    RETAILMSG(TRUE, (TEXT("%s IOCTL_HAL_REQUEST_SYSINTR HSMMC1 Failed \n\r"), pszFname));
                    goto EXIT;
                }
    }

    if (isri.szIsrDll[0] != 0) {
        if ( (isri.szIsrHandler[0] == 0) || (isri.dwIrq == IRQ_UNSPECIFIED) ) {
            DEBUGMSG(SDCARD_ZONE_ERROR, (_T("%s Invalid installable ISR information in registry\r\n"),
                pszFname));
            goto EXIT;
        }
    }

    m_interfaceType = (INTERFACE_TYPE) wini.dwInterfaceType;
    m_dwBusNumber = wini.dwBusNumber;

    DWORD dwSlotZeroWindow;
    dwSlotZeroWindow = DetermineFirstSlotWindow(&wini);

    DEBUGCHK(dwSlotZeroWindow < wini.dwNumMemWindows);
    DEBUGCHK( (dwSlotZeroWindow + m_cSlots) <= wini.dwNumMemWindows );

    // Use the slot zero window for the ISR
    PDEVICEWINDOW pWindowSlotZero = &wini.memWindows[dwSlotZeroWindow];
    PortAddress.LowPart = pWindowSlotZero->dwBase;
    PortAddress.HighPart = 0;

    // Install an ISR, if present
    if (isri.szIsrDll[0] != 0) {
        m_hISRHandler = LoadIntChainHandler(isri.szIsrDll, isri.szIsrHandler, 
            (BYTE) isri.dwIrq);

        if (m_hISRHandler == NULL) {
            DEBUGMSG(SDCARD_ZONE_ERROR, (_T("%s Error installing ISR\r\n"), pszFname));
            goto EXIT;
        } 
        else {
            GIISR_INFO  Info;
            DWORD       dwPhysAddr;

            fRet = BusTransBusAddrToStatic(m_hBusAccess, 
                (INTERFACE_TYPE) wini.dwInterfaceType,
                wini.dwBusNumber, PortAddress, pWindowSlotZero->dwLen,
                &inIoSpace, (PVOID *) &dwPhysAddr);
            if (fRet == FALSE) {
                DEBUGMSG(SDCARD_ZONE_ERROR,
                    (_T("%s Error translating bus address to static address\r\n"), 
                    pszFname));
                goto EXIT;
            }

            // Initialize ISR
            Info.SysIntr = isri.dwSysintr;
            Info.CheckPort = TRUE;
            Info.PortIsIO = (inIoSpace != 0);
            Info.UseMaskReg = FALSE;
            Info.PortAddr = dwPhysAddr + SDHC_SLOT_INT_STATUS;
            Info.PortSize = sizeof(USHORT);
            Info.Mask = 0xFF;

            fRet = KernelLibIoControl(m_hISRHandler, IOCTL_GIISR_INFO, &Info, 
                sizeof(Info), NULL, 0, NULL);
            if (fRet == FALSE) {
                DEBUGMSG(SDCARD_ZONE_ERROR, (_T("%s Error setting up ISR\r\n"), pszFname));
                goto EXIT;
            }
        }
    }

    m_dwSysIntr = isri.dwSysintr;
    DEBUGMSG(SDCARD_ZONE_INIT, (_T("%s IRQ 0x%X mapped to SYS_INTR 0x%X\r\n"), 
        pszFname, isri.dwIrq, m_dwSysIntr));

    const DWORD dwEndWindow = dwSlotZeroWindow + m_cSlots;

    for (DWORD dwWindow = dwSlotZeroWindow; dwWindow < dwEndWindow; ++dwWindow) {
        DEBUGCHK(dwWindow < wini.dwNumMemWindows);
        PDEVICEWINDOW pWindowSD = &wini.memWindows[dwWindow];

        DEBUGMSG(SDCARD_ZONE_INIT,
            (_T("%s Base address -> 0x%x; length -> 0x%x \r\n"),
            pszFname, pWindowSD->dwBase, pWindowSD->dwLen));

        PortAddress.LowPart = pWindowSD->dwBase;
        PortAddress.HighPart = 0;

        inIoSpace = 0;
        PVOID pvRegisters;
        DEBUGCHK(pWindowSlotZero->dwLen >= sizeof(SSDHC_REGISTERS));

        fRet = BusTransBusAddrToVirtual(m_hBusAccess, 
            (INTERFACE_TYPE) wini.dwInterfaceType,
            wini.dwBusNumber, PortAddress, pWindowSD->dwLen, &inIoSpace, 
            &pvRegisters);
        if (fRet == FALSE) {
            DEBUGMSG(SDCARD_ZONE_ERROR,
                (_T("%s error translating SD address \r\n"),
                pszFname));
            goto EXIT;
        }

        DEBUGCHK(inIoSpace == 0); // Will not work for I/O mappings.

        DWORD dwSlot = dwWindow - dwSlotZeroWindow;
        DEBUGCHK(dwSlot < m_cSlots);
        m_pSlotInfos[dwSlot].pucRegisters = (volatile UCHAR*) pvRegisters;
        m_pSlotInfos[dwSlot].dwExtraInfo = pWindowSD->dwLen;
    }

    m_fHardwareInitialized = TRUE;
    fRet = TRUE;

EXIT:
    return fRet;
}


BOOL 
CSDHCBase::DeinitializeHardware(
                                )
{
    DEBUGCHK(m_hBusAccess);
    PREFAST_DEBUGCHK(m_pSlotInfos);
    ValidateSlotCount();

    for (DWORD dwSlot = 0; dwSlot < m_cSlots; ++dwSlot) {
        PVOID pvRegisters = (PVOID) m_pSlotInfos[dwSlot].pucRegisters;
        DWORD dwLen = m_pSlotInfos[dwSlot].dwExtraInfo;
        if (pvRegisters) MmUnmapIoSpace(pvRegisters, dwLen);
    }

    if (m_hISRHandler) FreeIntChainHandler(m_hISRHandler);

    return TRUE;
}

DWORD
CSDHCBase::IST()

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
精品国内片67194| 亚洲综合在线五月| 一区二区三区精密机械公司| 蜜臀久久99精品久久久画质超高清 | 国产91精品精华液一区二区三区 | 狠狠色丁香久久婷婷综| 欧美在线视频不卡| 欧美经典一区二区三区| 调教+趴+乳夹+国产+精品| 成人18视频在线播放| 欧美成人在线直播| 日日骚欧美日韩| 91久久精品日日躁夜夜躁欧美| 久久嫩草精品久久久久| 蜜臀av亚洲一区中文字幕| 在线观看av一区二区| 中文字幕av不卡| 精品一区二区在线观看| 欧美精品色综合| 一区二区三区四区亚洲| 91视频国产观看| 国产精品免费免费| 成人激情校园春色| 久久久久高清精品| 激情综合色播激情啊| 91精品福利在线一区二区三区 | 欧美性色黄大片| 亚洲三级电影网站| k8久久久一区二区三区| 中文字幕+乱码+中文字幕一区| 韩国女主播一区| 2022国产精品视频| 国产馆精品极品| 欧美国产精品v| 不卡的av在线播放| 亚洲欧美国产三级| 欧美无乱码久久久免费午夜一区| 一区二区三区在线视频免费| 欧美亚洲尤物久久| 日韩精品高清不卡| 欧美成人精品1314www| 久久国产精品72免费观看| 2欧美一区二区三区在线观看视频| 久久激情五月婷婷| 国产色产综合色产在线视频| 成人爽a毛片一区二区免费| 国产精品久久久久三级| 99国产精品久久久久久久久久| 亚洲视频一区二区免费在线观看| 色婷婷综合久久久久中文一区二区| 中文字幕一区二区三区不卡| 色婷婷综合视频在线观看| 亚洲国产欧美在线人成| 日韩一区二区麻豆国产| 韩日欧美一区二区三区| 中文字幕永久在线不卡| 欧美丝袜自拍制服另类| 久久精品国产第一区二区三区| 久久久精品国产免费观看同学| 99re成人在线| 亚洲h精品动漫在线观看| 91麻豆精品国产| 国产大片一区二区| 夜夜嗨av一区二区三区中文字幕 | 欧美一区二区视频观看视频| 激情图区综合网| 国产精品无遮挡| 欧美日韩一区三区| 精品一区二区三区在线视频| 国产日韩欧美制服另类| 91久久精品日日躁夜夜躁欧美| 蜜乳av一区二区三区| 国产精品素人视频| 91精品国产综合久久小美女| 国产九色精品成人porny| 亚洲精品国产第一综合99久久 | 亚洲va欧美va人人爽| 欧美极品少妇xxxxⅹ高跟鞋 | 亚洲国产毛片aaaaa无费看| 精品av综合导航| 色拍拍在线精品视频8848| 狠狠色狠狠色综合系列| 国产精品国产精品国产专区不片| 6080午夜不卡| 91视视频在线直接观看在线看网页在线看| 丝袜诱惑制服诱惑色一区在线观看| 中文字幕国产一区| 日韩精品一区二区三区中文不卡| 97精品电影院| 国产成人三级在线观看| 香蕉加勒比综合久久| 自拍偷拍亚洲激情| 日本一区免费视频| 日韩欧美国产一二三区| 精品视频123区在线观看| av一区二区三区在线| 国产真实乱偷精品视频免| 午夜不卡av免费| 亚洲日本青草视频在线怡红院| 久久一区二区三区国产精品| 欧美人妖巨大在线| 91福利视频网站| 91在线观看美女| 国产999精品久久| 国产一区在线不卡| 免费三级欧美电影| 日本亚洲天堂网| 午夜久久久久久久久久一区二区| 国产精品国产精品国产专区不蜜 | 色欧美片视频在线观看| 波多野结衣亚洲| 丁香激情综合五月| 国产高清无密码一区二区三区| 久久er精品视频| 麻豆传媒一区二区三区| 奇米777欧美一区二区| 视频一区二区三区中文字幕| 亚洲成人av一区二区| 偷偷要91色婷婷| 天天av天天翘天天综合网| 午夜视频在线观看一区二区| 亚洲一区二区中文在线| 亚洲综合男人的天堂| 亚洲午夜羞羞片| 午夜av电影一区| 久久精品久久精品| 国产精品影视在线观看| 国产成人精品影视| 92精品国产成人观看免费| 色网站国产精品| 欧美精品一二三| 717成人午夜免费福利电影| 日韩一本二本av| 欧美精品一区二区三区久久久| 久久综合av免费| 国产精品美女一区二区三区| 亚洲欧美日韩国产综合| 天天综合网天天综合色| 韩国视频一区二区| 94-欧美-setu| 91精品国产综合久久精品性色| 欧美一区二区三区视频在线观看| 日韩西西人体444www| 国产视频911| 亚洲一级二级三级| 久久av资源网| 91在线视频免费91| 欧美一区二区精美| 亚洲国产岛国毛片在线| 一区二区三区av电影| 青娱乐精品视频| 成人性视频网站| 欧美美女网站色| 亚洲国产精品精华液2区45| 亚洲精品成人少妇| 久久国产精品99久久人人澡| 成人精品国产一区二区4080| 欧美日韩在线电影| 欧美经典三级视频一区二区三区| 亚洲午夜电影在线| 成人午夜伦理影院| 91精品国产福利在线观看| 国产精品久久久久久久久快鸭| 婷婷久久综合九色综合绿巨人| 国产电影精品久久禁18| 欧美人牲a欧美精品| 国产日韩欧美高清| 日本va欧美va欧美va精品| 99精品久久久久久| 久久免费美女视频| 午夜精品福利一区二区蜜股av| 粗大黑人巨茎大战欧美成人| 欧美精品欧美精品系列| 中文字幕一区二区三区视频| 国产真实乱子伦精品视频| 91麻豆精品91久久久久同性| 亚洲精品成a人| 成人小视频免费观看| 欧美成人综合网站| 午夜婷婷国产麻豆精品| 色94色欧美sute亚洲13| 中文字幕av一区二区三区| 精品伊人久久久久7777人| 欧美日韩国产综合视频在线观看 | 日韩一级片在线播放| 亚洲国产成人porn| 97精品电影院| 国产精品美女一区二区在线观看| 国产一区二区美女| 精品日韩在线观看| 欧美aaaaa成人免费观看视频| 欧美在线一二三| 一区二区三区成人在线视频| 91小视频免费看| 国产精品萝li| 99久久777色| 18成人在线观看| av不卡一区二区三区| 一色屋精品亚洲香蕉网站| 成人黄色a**站在线观看|