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

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

?? sdio.c

?? linux下SDIO的驅動,請查看具體代碼內容.
?? C
?? 第 1 頁 / 共 5 頁
字號:
    }
#endif //#ifdef USE_DMA

        // turn on the clock 
//    SDIOClockOn(pSlot);

    SD_INTERRUPTS_CLEAR(pSlot,SD_Int_CRC_Errors | 
                              SD_Int_Response_Timeout | 
                              SD_Int_Response_Done );

        // enable response done and response timeout interrupts
    SD_INTERRUPTS_ENABLE(pSlot, SD_Int_Response_Done | SD_Int_Response_Timeout );


        // for Stop Transmission and IO Abort disable clock freezing to
        // get the state machine running again to send command
	if ((SD_CMD_STOP_TRANSMISSION == pRequest->CommandCode) ||
        (SD_CMD_IO_RW_DIRECT == pRequest->CommandCode && SD_IO_REG_IO_ABORT == IO_RW_DIRECT_ADDR_ARG(pRequest->CommandArgument))) {
		tmp = READ_REGISTER_ULONG((PULONG)&pSlot->pSD->config2);
		tmp |= SD_CONFIG2_DF;
		WRITE_REGISTER_ULONG((PULONG)&pSlot->pSD->config2, tmp);
    }         

        // remember whether the last command is CMD53 or not.
    lastCmd53 = ( SD_CMD_IO_RW_EXTENDED == pRequest->CommandCode );

        // write the 32 bit command argument
    WRITE_REGISTER_ULONG((PULONG)&pSlot->pSD->cmdarg, pRequest->CommandArgument );
        // write the completed command register - this will issue the command
    WRITE_REGISTER_ULONG((PULONG)&pSlot->pSD->cmd, commandRegister );

    DEBUGMSG(SDIO_SEND_ZONE,(TEXT("Send Command - CMD register = 0x%08X\r\n"),commandRegister));

    return SD_API_STATUS_PENDING;
}

///////////////////////////////////////////////////////////////////////////////
//  SDIOSDCancelIoHandler - io cancel handler 
//  Input:  pHostContext - host controller context
//          Slot - slot the request is going on
//          pRequest - the request to be cancelled
//  Output: 
//  Return: TRUE if request cancelled
//  Notes:  the HC lock is taken before entering this cancel handler
///////////////////////////////////////////////////////////////////////////////
BOOLEAN SDIOCancelIoHandler(PSDCARD_HC_CONTEXT pHCContext, DWORD Slot, PSD_BUS_REQUEST pRequest)
{
    PSDIO_HW_CONTEXT    pController;     // the controller

        // for now, we should never get here because all requests are non-cancelable
        // the hardware supports timeouts so it is impossible for the controller to get stuck
    DEBUG_ASSERT(FALSE);

        // get our extension 
    pController = GetExtensionFromHCDContext(PSDIO_HW_CONTEXT, pHCContext);

        // TODO --- Stop hardware, cancel the request!

        // release the lock before we complete the request
    SDHCDReleaseHCLock(pHCContext);
 
        // complete the request with a cancelled status
    SDHCDIndicateBusRequestComplete(pHCContext,
                                    pRequest,
                                    SD_API_STATUS_CANCELED);

    return TRUE;
}

///////////////////////////////////////////////////////////////////////////////
//  SDIOSlotOptionHandler - handler for slot option changes
//  Input:  pHostContext - host controller context
//          Slot         - the slot the change is being applied to
//          Option       - the option code
//          pData        - data associated with the option
//          OptionSize   - size of option data
//  Output: 
//  Return: SD_API_STATUS
//  Notes:  
///////////////////////////////////////////////////////////////////////////////
SD_API_STATUS SDIOSlotOptionHandler(PSDCARD_HC_CONTEXT    pHCContext,
                                    DWORD                 Slot, 
                                    SD_SLOT_OPTION_CODE   Option, 
                                    PVOID                 pData,
                                    ULONG                 OptionSize)
{
    SD_API_STATUS    status = SD_API_STATUS_SUCCESS; // status
    PSDIO_HW_CONTEXT pController;                    // the controller
	PSD_HOST_BLOCK_CAPABILITY  pBlockCaps;           // queried block capabilities
	ULONG tmp;
    
        // get our extension 
    pController = GetExtensionFromHCDContext(PSDIO_HW_CONTEXT, pHCContext);

    switch (Option) {

        case SDHCDSetSlotPower:
                // can't set power so ignore this
            DEBUGMSG(SDCARD_ZONE_INIT, (TEXT("SDIOSDSlotOptionHandler - called - SetSlotPower : 0x%08X  \n"), *((PDWORD)pData)));
            break;

        case SDHCDSetSlotInterface:
                // shut off clock first
            SDIOClockOff(&pController->Slots[Slot]);
            DEBUGMSG(SDCARD_ZONE_INIT, (TEXT("SDIOSDSlotOptionHandler - called - SetSlotInterface : Clock Setting: %d \n"), 
                                         ((PSD_CARD_INTERFACE)pData)->ClockRate));
            
            if (SD_INTERFACE_SD_MMC_1BIT == ((PSD_CARD_INTERFACE)pData)->InterfaceMode) {
                DEBUGMSG(SDCARD_ZONE_INIT, (TEXT("SDIOSDSlotOptionHandler - called - SetSlotInterface : setting for 1 bit mode \n")));
				tmp = READ_REGISTER_ULONG((PULONG)&pController->Slots[Slot].pSD->config2);
				tmp &= ~SD_CONFIG2_WB;
				WRITE_REGISTER_ULONG((PULONG)&pController->Slots[Slot].pSD->config2,tmp);
            } else if (SD_INTERFACE_SD_4BIT == ((PSD_CARD_INTERFACE)pData)->InterfaceMode) {
                DEBUGMSG(SDCARD_ZONE_INIT, (TEXT("SDIOSDSlotOptionHandler - called - SetSlotInterface : setting for 4 bit mode \n"))); 
				tmp = READ_REGISTER_ULONG((PULONG)&pController->Slots[Slot].pSD->config2);
				tmp |= SD_CONFIG2_WB;
				WRITE_REGISTER_ULONG((PULONG)&pController->Slots[Slot].pSD->config2,tmp);
            } else {
                DEBUG_ASSERT(FALSE);
            }
                // set rate
            SDIOSetRate(&pController->Slots[Slot], &((PSD_CARD_INTERFACE)pData)->ClockRate);
            break;

        case SDHCDEnableSDIOInterrupts:
                // enable SDIO interrupt detection
            DEBUGMSG(SDCARD_ZONE_INIT, (TEXT("SDIOSDSlotOptionHandler - called - EnableSDIOInterrupts : on slot %d  \n"),Slot));
            SD_INTERRUPTS_ENABLE(&pController->Slots[Slot],SD_Int_SDIO_Interrupt);
            break;

        case SDHCDAckSDIOInterrupt:
                 // re-enable SDIO interrupt detection
            SD_INTERRUPTS_ENABLE(&pController->Slots[Slot],SD_Int_SDIO_Interrupt);
            break;

        case SDHCDDisableSDIOInterrupts:
                // disable SDIO interrupt detection
            DEBUGMSG(SDCARD_ZONE_INIT, (TEXT("SDIOSDSlotOptionHandler - called - DisableSDIOInterrupts : on slot %d  \n"),Slot));
			SD_INTERRUPTS_DISABLE(&pController->Slots[Slot],SD_Int_SDIO_Interrupt);
            break;

        case SDHCDGetWriteProtectStatus:
				// get the write protect status
            DEBUGMSG(SDCARD_ZONE_INIT, (TEXT("SDIOSDSlotOptionHandler - called - SDHCDGetWriteProtectStatus : on slot %d  \n"),Slot)); 
            if (SDIOPlatCardWriteProteced(pController,Slot)) {
                DEBUGMSG(SDCARD_ZONE_INIT, (TEXT("SDIOSDSlotOptionHandler - Card is Write Protected\n"))); 
                ((PSD_CARD_INTERFACE)pData)->WriteProtected = TRUE;
            } else {
                DEBUGMSG(SDCARD_ZONE_INIT, (TEXT("SDIOSDSlotOptionHandler - Card is NOT Write Protected\n"))); 
                ((PSD_CARD_INTERFACE)pData)->WriteProtected = FALSE;
            }
            break;

        case SDHCDQueryBlockCapability:
                // set the block capability
            DEBUGMSG(SDCARD_ZONE_INIT, (TEXT("SDIOSDSlotOptionHandler - called - SDHCDQueryBlockCapability : on slot %d  \n"),Slot));             
            pBlockCaps = (PSD_HOST_BLOCK_CAPABILITY)pData;

			DEBUGMSG(SDCARD_ZONE_INIT, 
			(TEXT("SDIOSDSlotOptionHandler: Read Block Length: %d , Read Blocks: %d\n"), 
				pBlockCaps->ReadBlockSize, 
				pBlockCaps->ReadBlocks));
			DEBUGMSG(SDCARD_ZONE_INIT, 
			(TEXT("SDIOSDSlotOptionHandler: Write Block Length: %d , Write Blocks: %d\n"), 
				pBlockCaps->WriteBlockSize, 
				pBlockCaps->WriteBlocks));

			// the Au1100 SD controller can only handle up to 2048 bytes for each block.
            if (pBlockCaps->ReadBlockSize > SD_MAX_BLOCK_SIZE) {

				RETAILMSG(1, 
						(TEXT("SDIOSDSlotOptionHandler: Read Block Length: %d is out of the range!\n"), 
						pBlockCaps->ReadBlockSize));
                pBlockCaps->ReadBlockSize = SD_MAX_BLOCK_SIZE;
            }
            if (pBlockCaps->WriteBlockSize > SD_MAX_BLOCK_SIZE) {

				RETAILMSG(1, 
						(TEXT("SDIOSDSlotOptionHandler: Write Block Length: %d is out of the range!\n"), 
						pBlockCaps->WriteBlockSize));
                pBlockCaps->WriteBlockSize = SD_MAX_BLOCK_SIZE;
            }
            
                // the Au1100 SD controller can only handle up to 511 blocks per transfer
            if (pBlockCaps->ReadBlocks > SD_MAX_BLOCK_COUNT ) {

				RETAILMSG(1, 
						(TEXT("SDIOSDSlotOptionHandler: Read Block count: %d is out of the range!\n"), 
						pBlockCaps->ReadBlocks));
                pBlockCaps->ReadBlocks = SD_MAX_BLOCK_COUNT;
            }
            if (pBlockCaps->WriteBlocks > SD_MAX_BLOCK_COUNT ) {

				RETAILMSG(1, 
						(TEXT("SDIOSDSlotOptionHandler: Write Block count: %d is out of the range!\n"), 
						pBlockCaps->WriteBlocks));
                pBlockCaps->WriteBlocks = SD_MAX_BLOCK_COUNT;
            }             
            break;

		case SDHCDGetSlotInfo:
			{
				PSDCARD_HC_SLOT_INFO pSlotInfo = pData;

				// set the slot capabilities
				SDHCDSetSlotCapabilities(pSlotInfo, SD_SLOT_SD_4BIT_CAPABLE | 
													SD_SLOT_SD_1BIT_CAPABLE | 
													SD_SLOT_SDIO_CAPABLE    |
													SD_SLOT_SDIO_INT_DETECT_4BIT_MULTI_BLOCK);

					// set voltage window mask  +- 10%
				SDHCDSetVoltageWindowMask(pSlotInfo, ( SD_VDD_WINDOW_3_1_TO_3_2 | SD_VDD_WINDOW_3_2_TO_3_3 | SD_VDD_WINDOW_3_3_TO_3_4)); 
					// set optimal voltage
				SDHCDSetDesiredSlotVoltage(pSlotInfo, SD_VDD_WINDOW_3_2_TO_3_3 );     
					// set max clock rate
				SDHCDSetMaxClockRate(pSlotInfo, 25000000);
					// set power up delay
				SDHCDSetPowerUpDelay(pSlotInfo, 200 ); 
			}
			break;
			

        default:
           status = SD_API_STATUS_INVALID_PARAMETER;
    }

    return status;
}

///////////////////////////////////////////////////////////////////////////////
//  RemoveDevice - remove the device in the slot
//  Input:  pSlot - slot context
//  Output:
//  Return:
//  Notes:  
///////////////////////////////////////////////////////////////////////////////
VOID RemoveDevice(PSDIO_SLOT pSlot)
{
    PSD_BUS_REQUEST pRequest; // request to cancel

        // indicate the slot change
    SDHCDIndicateSlotStateChange(pSlot->pController->pHCContext, 
                                 pSlot->SlotNumber,
                                 DeviceEjected);

    DEBUGMSG(SDCARD_ZONE_INIT, (TEXT("RemoveDevice: Card Removal Detected - \n"))); 
            
        // get the current request  
    pRequest = pSlot->pCurrentRequest;
    
#ifdef DEBUG
    DumpSlot(pSlot);
#endif

    if (pRequest != NULL) {
        CompleteRequest(pSlot, SD_API_STATUS_DEVICE_REMOVED);
    }

    ResetSlot(pSlot, FALSE);
}

///////////////////////////////////////////////////////////////////////////////
//  HandleTransferErrors - Check for and handle transfer error conditions
//  Input:  pSlot        - slot context
//          pRequest     - the request
//  Output:
//  Return: TRUE if an error condition occurred and the request got completed
//  Notes:  If an error is detected the request will be completed.
///////////////////////////////////////////////////////////////////////////////
BOOL HandleTransferErrors(PSDIO_SLOT      pSlot,
                          PSD_BUS_REQUEST pRequest,
                          ULONG           CRCMask)
{
    ULONG status;

    status = READ_REGISTER_ULONG((PULONG)&pSlot->pSD->status);
    SD_INTERRUPTS_CLEAR(pSlot,CRCMask|SD_Int_Data_Timeout|SD_Int_Response_Timeout);

    if (status & CRCMask) {
        ResetSlot(pSlot, FALSE);
        DEBUGMSG(SDCARD_ZONE_ERROR,(TEXT("SDIO[%d]: CRC Error %08X\r\n"),pSlot->SlotNumber,status));
        CompleteRequest(pSlot,SD_API_STATUS_CRC_ERROR);
        return TRUE;
    }

    if (status & SD_Int_Data_Timeout) {
        DEBUGMSG(SDCARD_ZONE_ERROR,(TEXT("SDIO[%d]: Data Timeout %08X\r\n"),pSlot->SlotNumber,status));
        CompleteRequest(pSlot,SD_API_STATUS_DATA_TIMEOUT);
        return TRUE;
    }

    if (status & SD_Int_Response_Timeout) {
        DEBUGMSG(SDCARD_ZONE_ERROR,(TEXT("SDIO[%d]: Response Timeout %08X\r\n"),pSlot->SlotNumber,status));
        CompleteRequest(pSlot,SD_API_STATUS_RESPONSE_TIMEOUT);
        return TRUE;
    }

    return FALSE;
}

///////////////////////////////////////////////////////////////////////////////
//  HandleResponseTimeout - handle response timeout interrupt
//  Input:  pSlot  - slot context
//  Output: 
//  Return:
//  Notes:  
///////////////////////////////////////////////////////////////////////////////
VOID HandleResponseTimeout(PSDIO_SLOT pSlot)
{
        // this should never happen because we mark the request as un-cancelable
    if (NULL==pSlot->pCurrentRequest) {
        return;
    }

        // turn off response end / response timeout interrupts
    SD_INTERRUPTS_DISABLE(pSlot, SD_Int_Response_Done | SD_Int_Response_Timeout);
        // clear
    SD_INTERRUPTS_CLEAR(pSlot, SD_Int_Response_Done | SD_Int_Response_Timeout);

        // complete request with timeout indication
    CompleteRequest(pSlot, SD_API_STATUS_RESPONSE_TIMEOUT);
}

///////////////////////////////////////////////////////////////////////////////
//  HandleDataTimeout - handle data timeout interrupt
//  Input:  pSlot  - slot context
//  Output: 
//  Return:
//  Notes:  
///////////////////////////////////////////////////////////////////////////////
VOID HandleDataTimeout(PSDIO_SLOT pSlot)
{
        // this should never happen because we mark the request as un-cancelable
    if (NULL==pSlot->pCurrentRequest) {
        return;
    }

        // turn off interrupts
    SD_INTERRUPTS_DISABLE(pSlot, ( SD_Int_Rx_FIFO_Not_Empty 

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
另类调教123区| 日韩免费一区二区| 久久久午夜电影| 日韩中文欧美在线| 欧美色窝79yyyycom| 国产精品久久久久毛片软件| 国产精品国产三级国产普通话99| 国产精品一卡二| 欧美成人免费网站| 蜜桃av噜噜一区| 91丨porny丨国产| 国产精品伦一区二区三级视频| 国内一区二区视频| 精品日韩在线观看| 蜜臀精品一区二区三区在线观看| 欧美三级在线播放| 亚洲国产精品视频| 精品欧美一区二区三区精品久久| 国产成人在线网站| 亚洲女人****多毛耸耸8| 欧美群妇大交群的观看方式| 蜜桃av噜噜一区| 欧美激情在线观看视频免费| 99国产欧美久久久精品| 天天色天天操综合| 久久久国产午夜精品| 欧美综合久久久| 精品影院一区二区久久久| 久久蜜桃一区二区| 在线精品视频一区二区三四| 日本成人在线视频网站| 国产精品网站一区| 欧美三级乱人伦电影| 国产精品影视天天线| 亚洲主播在线播放| 久久综合久久综合亚洲| 日本韩国欧美在线| 国产精品亚洲成人| 三级影片在线观看欧美日韩一区二区 | 91美女片黄在线| 免费观看日韩电影| 亚洲曰韩产成在线| 欧美韩国日本一区| 日韩一区二区三区电影在线观看 | 午夜亚洲福利老司机| 欧美激情一二三区| 日韩欧美一级片| 欧美午夜影院一区| av午夜一区麻豆| 黄页视频在线91| 亚洲va天堂va国产va久| 国产欧美精品国产国产专区 | 日本在线不卡视频一二三区| 中文字幕视频一区二区三区久| 91麻豆精品国产无毒不卡在线观看 | 99综合电影在线视频| 捆绑紧缚一区二区三区视频| 一区二区三区四区av| 国产欧美精品一区二区色综合| 欧美另类久久久品| 91浏览器入口在线观看| 国产福利91精品| 国模娜娜一区二区三区| 丝袜美腿成人在线| 亚洲一区二区视频在线观看| 国产精品美女久久久久久久久| 欧美不卡一区二区三区| 欧美日本一区二区三区四区| 欧美亚洲日本国产| 欧洲av在线精品| 色哟哟日韩精品| 国产成人8x视频一区二区 | 国产老妇另类xxxxx| 日韩av一级电影| 无吗不卡中文字幕| 夜夜亚洲天天久久| 夜夜爽夜夜爽精品视频| 亚洲综合激情另类小说区| 综合久久久久综合| 亚洲人被黑人高潮完整版| 亚洲天堂a在线| √…a在线天堂一区| 国产精品福利电影一区二区三区四区| 国产女人aaa级久久久级| 久久色中文字幕| 久久久久久**毛片大全| 日本一区二区免费在线观看视频| 国产视频一区在线观看| 日本一区二区综合亚洲| 国产精品美女久久久久久久| 国产精品久久久久永久免费观看| 国产精品美日韩| 亚洲一区二区三区影院| 五月婷婷另类国产| 免费人成黄页网站在线一区二区| 蜜桃精品视频在线| 国产成人亚洲综合色影视| 国产福利91精品一区| 99re8在线精品视频免费播放| 97国产精品videossex| 欧洲一区在线观看| 在线播放中文一区| 精品国产欧美一区二区| **欧美大码日韩| 日韩专区一卡二卡| 国产精品91xxx| 91免费视频大全| 6080国产精品一区二区| 精品日韩一区二区三区免费视频| 日本一区二区视频在线观看| 亚洲精品一二三| 日韩激情在线观看| 国产乱码精品一品二品| 色呦呦网站一区| 精品电影一区二区三区| 国产精品久久久久久久第一福利 | 亚洲欧美视频一区| 香蕉av福利精品导航| 国产成人在线视频免费播放| 欧美主播一区二区三区| 久久久久久久久久看片| 亚洲精品中文字幕乱码三区| 蜜桃一区二区三区在线观看| jlzzjlzz国产精品久久| 日韩欧美亚洲国产另类| 中文一区一区三区高中清不卡| 亚洲国产欧美在线| 国产a级毛片一区| 91精品国产日韩91久久久久久| 国产欧美日韩视频在线观看| 婷婷国产在线综合| 波多野结衣中文字幕一区| 91精品国产欧美一区二区18| 国产精品女上位| 久久精品99国产精品| 91行情网站电视在线观看高清版| 精品久久久久久久久久久久久久久 | 国产一区二区三区四区五区美女 | 伊人婷婷欧美激情| 国产曰批免费观看久久久| 欧美日韩卡一卡二| 中文字幕在线不卡一区二区三区| 青青草精品视频| 欧美亚洲禁片免费| 亚洲视频狠狠干| 国产成人日日夜夜| 日韩精品一区二区三区三区免费| 亚洲一区在线视频| 91在线高清观看| 欧美激情综合网| 国产精品影视天天线| 精品国产一区久久| 日本aⅴ精品一区二区三区| 91国在线观看| 亚洲激情网站免费观看| 97se狠狠狠综合亚洲狠狠| 日本一区二区三区国色天香 | 久久99国产精品麻豆| 欧美高清视频一二三区 | 国产精品 欧美精品| 欧美一级高清片在线观看| 性久久久久久久久| 欧美偷拍一区二区| 一区二区三区在线观看欧美| 成人动漫在线一区| 国产午夜一区二区三区| 久久国产精品99久久久久久老狼 | 中文字幕亚洲一区二区va在线| 国产在线精品免费av| 日韩精品一区二区三区四区视频| 日韩电影在线观看一区| 欧美美女bb生活片| 天天综合日日夜夜精品| 337p亚洲精品色噜噜狠狠| 秋霞影院一区二区| 欧美va亚洲va| 国产在线一区观看| 国产亚洲一区二区三区四区 | 不卡的电影网站| 国产精品美女久久久久aⅴ国产馆 国产精品美女久久久久av爽李琼 国产精品美女久久久久高潮 | 国产欧美日韩一区二区三区在线观看 | 精品sm在线观看| 国产一区福利在线| 国产欧美日韩视频在线观看| 国产a久久麻豆| 亚洲婷婷在线视频| 欧美三级在线视频| 亚洲一区二区成人在线观看| 欧美日韩国产在线观看| 奇米综合一区二区三区精品视频 | 99re6这里只有精品视频在线观看 99re8在线精品视频免费播放 | 欧美日韩精品一区二区天天拍小说| 亚洲自拍欧美精品| 日韩欧美在线综合网| 国产乱淫av一区二区三区| 国产精品伦理一区二区| 欧美色涩在线第一页| 麻豆91小视频| 国产精品超碰97尤物18| 欧美性一二三区|