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

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

?? sdiomain.c

?? linux下SDIO的驅動,請查看具體代碼內容.
?? C
字號:
///////////////////////////////////////////////////////////////////////////////
// Copyright (c) 2002-2004 BSQUARE Corporation.  All rights reserved.
//
// Module Name:
//
//    SDIOMain.c   
//
// Abstract:
//
//   Driver entry points
//
// Notes:
//
///////////////////////////////////////////////////////////////////////////////

#include "sdcardddk.h"
#include "sdhcd.h"
#include "sdio.h"
//#include "nkintr.h"

    // initialize debug zones
SD_DEBUG_INSTANTIATE_ZONES(
     TEXT("Au1100 SDIO Driver"), // module name
     ZONE_ENABLE_INIT | ZONE_ENABLE_ERROR | ZONE_ENABLE_WARN | SDIO_INTERRUPT_ZONE_ON | 
     SDIO_SEND_ZONE_ON | SDIO_RESPONSE_ZONE_ON | SDIO_TRANSMIT_ZONE_ON,
     TEXT("Interrupts"),
     TEXT("Send Handler"), 
     TEXT("Responses"), 
     TEXT("Receive Data"),                   
     TEXT("Clock Control"), 
     TEXT("Transmit Data"), 
     TEXT("DMA"), 
     TEXT(""),
     TEXT(""),
     TEXT(""),
     TEXT(""));

#define SDIO_REGISTRY_BASE_PATH TEXT("Drivers\\SDCARD\\HostControllers\\Au1100")

///////////////////////////////////////////////////////////////////////////////
//  DllEntry - the main dll entry point
//  Input:  hInstance - the instance that is attaching
//          Reason - the reason for attaching
//          pReserved - not much
//  Output: 
//  Return: always TRUE
//  Notes:  this is only used to initialize the zones
///////////////////////////////////////////////////////////////////////////////
BOOL DllEntry(HINSTANCE  hInstance,
              ULONG      Reason,
              LPVOID     pReserved)
{
    BOOL fRet = TRUE;

    if (Reason == DLL_PROCESS_ATTACH) {
        DEBUGREGISTER(hInstance);
        DisableThreadLibraryCalls((HMODULE) hInstance);

        if (!SDInitializeCardLib()) {
            fRet = FALSE;
        }
        else if (!SD_API_SUCCESS(SDHCDInitializeHCLib())) {
            SDDeinitializeCardLib();
            fRet = FALSE;
        }
    }
    else if (Reason == DLL_PROCESS_DETACH) {
        SDHCDDeinitializeHCLib();
        SDDeinitializeCardLib();
    }

    return fRet;
}

///////////////////////////////////////////////////////////////////////////////
//  SDP_Deinit - the deinit entry point for the driver
//  Input:  hDeviceContext - the context returned from SDP_Init
//  Output:
//  Return: always returns TRUE. 
//  Notes:  
///////////////////////////////////////////////////////////////////////////////
BOOL SDP_Deinit(DWORD hDeviceContext)
{
    PSDCARD_HC_CONTEXT pHostContext;

    DbgPrintZo(SDCARD_ZONE_INIT, (TEXT("SDH: +SDH_Deinit\n")));

    pHostContext = (PSDCARD_HC_CONTEXT)hDeviceContext;

        // deregister the host controller
    SDHCDDeregisterHostController(pHostContext);

    if( pHostContext && pHostContext->pHCSpecificContext )
    {
        free( pHostContext->pHCSpecificContext );
    }

        // cleanup the context
    SDHCDDeleteContext((PSDCARD_HC_CONTEXT)hDeviceContext);

    return TRUE;}

///////////////////////////////////////////////////////////////////////////////
//  SDP_Init - the init entry point for the CE driver instance
//  Input:  dwContext - the context passed from device manager
//  Output:
//  Return: the new device instance, zero on failure
//  Notes:  
///////////////////////////////////////////////////////////////////////////////
DWORD SDP_Init(DWORD dwContext)
{
    PSDCARD_HC_CONTEXT pHostContext;    // new HC context
    SD_API_STATUS      status;          // SD status
    PSDIO_HW_CONTEXT   pController;     // new instance
    DWORD              win32Status;     // win32 status
#ifdef USE_DMA
    HKEY               hKey;            // reg key
    DWORD              dataSize;        // size of key to get
#endif //#ifdef USE_DMA

    DWORD              PIOMode = FALSE; // PIO mode flag

    DbgPrintZo(SDCARD_ZONE_INIT, (TEXT("SDIO +SDP_Init\n")));    

    DbgPrintZo(SDCARD_ZONE_INIT, (TEXT("SDIO Active RegPath: %s \n"),(PTSTR)dwContext));

        // allocate the context
    status = SDHCDAllocateContext(SDIOPlatNumSlots(), &pHostContext);

    if (!SD_API_SUCCESS(status)) {
        DbgPrintZo(SDCARD_ZONE_ERROR, (TEXT("SDIO Failed to allocate context : 0x%08X \n"), status));
        return 0;
    }

        // allocate controller structure 
    pController = malloc( sizeof(*pController) );
    if( pController == NULL ) {
        DbgPrintZo(SDCARD_ZONE_ERROR, (TEXT("SDH: Failed to allocate extension\n")));
        return 0;
    }
    memset( pController, 0, sizeof(*pController) );

    // Set our extension 
    pHostContext->pHCSpecificContext = pController;
    pController = GetExtensionFromHCDContext(PSDIO_HW_CONTEXT, pHostContext);

        // extract the real reg path from the init context passed in
    win32Status = SDGetRegPathFromInitContext((PWCHAR)dwContext, 
                                              pController->RegPath, 
                                              sizeof(pController->RegPath));

    if (ERROR_SUCCESS != win32Status) {
        DbgPrintZo(SDCARD_ZONE_ERROR, (TEXT("SDIO Failed to get registry path (%d) \n"), win32Status));
        return 0;
    }

    DbgPrintZo(SDCARD_ZONE_INIT, (TEXT("SDIO Real RegPath: %s \n"),pController->RegPath));

#ifdef USE_DMA
        // default to DMA mode
    pController->Slots[0].UsingDma = TRUE;
    pController->Slots[1].UsingDma = TRUE;

        // look for PIO mode only key
    if (RegOpenKeyEx(HKEY_LOCAL_MACHINE,
                     pController->RegPath,
                     0,
                     KEY_ALL_ACCESS,
                     &hKey) == ERROR_SUCCESS) {
        
            // set the data size
        dataSize = sizeof(PIOMode);

            // look for  key
        RegQueryValueEx(hKey,
                       PIO_MODE_KEY,
                       NULL,
                       NULL,
                       (PUCHAR)&PIOMode,
                       &dataSize);

        if (PIOMode) {
            pController->Slots[0].UsingDma = FALSE;
            pController->Slots[1].UsingDma = FALSE;

            DbgPrintZo(SDCARD_ZONE_INIT,(TEXT("SDIO: Using PIO mode\r\n")));
        }
   
        RegCloseKey(hKey);
    } 
#endif //#ifdef USE_DMA

        // connect controller interrupt
    pController->SysIntr = InterruptConnect(Internal,
                                            0,
                                            HWINTR_SD,
                                            0);

    if (SYSINTR_NOP==pController->SysIntr) {
        DbgPrintZo(SDCARD_ZONE_ERROR,(TEXT("InterruptConnect returned SYSINTR_NOP\r\n")));
        return 0;
    }

        // save off the host context
    pController->pHCContext = pHostContext;

        // set the host controller name
    SDHCDSetHCName(pHostContext, TEXT("Au1100 SDIO"));

        // set init handler
    SDHCDSetControllerInitHandler(pHostContext, SDIOInitialize);  
        // set deinit handler    
    SDHCDSetControllerDeinitHandler(pHostContext, SDIODeinitialize);
        // set the bus reqeust handler
    SDHCDSetBusRequestHandler(pHostContext, SDIOBusRequestHandler);   
        // set the cancel I/O handler
    SDHCDSetCancelIOHandler(pHostContext, SDIOCancelIoHandler);   
        // set the slot option handler
    SDHCDSetSlotOptionHandler(pHostContext, SDIOSlotOptionHandler); 

        // now register the host controller 
    status = SDHCDRegisterHostController(pHostContext);

    if (!SD_API_SUCCESS(status)) {
        SDHCDDeleteContext(pHostContext);
        DbgPrintZo(SDCARD_ZONE_ERROR, (TEXT("SDIO: Failed to register host controller: %0x08X \n"),status));
        return 0;
    }

    DbgPrintZo(SDCARD_ZONE_INIT, (TEXT("SDIO: -SDP_Init\n")));
        // return the Host Controller context
    return (DWORD)pHostContext;
}

///////////////////////////////////////////////////////////////////////////////
//  SDP_IOControl - the I/O control entry point for the driver
//  Input:  hOpenContext - the context returned from SDP_Open
//          dwCode - the ioctl code
//          pBufIn - the input buffer from the user
//          dwLenIn - the length of the input buffer
//          pBufOut - the output buffer from the user
//          dwLenOut - the length of the output buffer
//          pdwActualOut - the size of the transfer
//  Output:
//  Return: always FALSE
//  Notes:  
///////////////////////////////////////////////////////////////////////////////
BOOL SDP_IOControl(DWORD   hOpenContext,
                   DWORD   dwCode,
                   PBYTE   pBufIn,
                   DWORD   dwLenIn,
                   PBYTE   pBufOut,
                   DWORD   dwLenOut,
                   PDWORD  pdwActualOut)
{
    DbgPrintZo(SDCARD_ZONE_FUNC, (TEXT("SDIO: +-SDP_IOControl \n")));
    return FALSE;;
}

///////////////////////////////////////////////////////////////////////////////
//  SDP_Open - the open entry point for the driver
//  Input:  hDeviceContext - the device context from SDP_Init
//          AccessCode - the desired access
//          ShareMode - the desired share mode
//  Output:
//  Return: Always zero 
//  Notes:  
///////////////////////////////////////////////////////////////////////////////
DWORD SDP_Open(DWORD    hDeviceContext,
               DWORD    AccessCode,
               DWORD    ShareMode)
{
    DbgPrintZo(SDCARD_ZONE_FUNC, (TEXT("SDIO: +-SDP_Open\n")));
    return 0;
}



///////////////////////////////////////////////////////////////////////////////
//  SDP_Close - the close entry point for the driver
//  Input:  hOpenContext - the context returned from SDP_Open
//  Output: 
//  Return: always returns TRUE
//  Notes:  
///////////////////////////////////////////////////////////////////////////////
BOOL SDP_Close(DWORD hOpenContext)
{
    DbgPrintZo(SDCARD_ZONE_FUNC, (TEXT("SDIO: +-SDP_Close\n")));
    return TRUE;
}

///////////////////////////////////////////////////////////////////////////////
//  SDP_PowerDown - the power down entry point for the driver
//  Input:  hDeviceContext - the device context from SDP_Init
//  Output: 
//  Return: 
//  Notes:
///////////////////////////////////////////////////////////////////////////////
void SDP_PowerDown(DWORD hDeviceContext)
{
    PSDIO_HW_CONTEXT pController;  
	int i;

    pController = GetExtensionFromHCDContext(PSDIO_HW_CONTEXT, 
                                            (PSDCARD_HC_CONTEXT)hDeviceContext);

	for (i=0;i<SDIOPlatNumSlots();i++) {
			// indicate power down , also indicating that power will be removed from the slot
		SDHCDPowerUpDown((PSDCARD_HC_CONTEXT)hDeviceContext, FALSE, FALSE, i);
	
            // remove power from slot
	    SDIOPlatPower(pController, FALSE, i);
    }
     
    return;
}

///////////////////////////////////////////////////////////////////////////////
//  SDP_PowerUp - the power up entry point for the driver
//  Input:  hDeviceContext - the device context from SDP_Init
//  Output: 
//  Return:
//  Notes: 
///////////////////////////////////////////////////////////////////////////////
void SDP_PowerUp(DWORD  hDeviceContext)
{
    PSDIO_HW_CONTEXT    pController;  
	int i;
 
    pController = GetExtensionFromHCDContext(PSDIO_HW_CONTEXT, 
                                            (PSDCARD_HC_CONTEXT)hDeviceContext);

	for (i=0;i<SDIOPlatNumSlots();i++) {
			// indicate power up
		SDHCDPowerUpDown((PSDCARD_HC_CONTEXT)hDeviceContext, TRUE, FALSE, i);

            // enable power to slot
	    SDIOPlatPower(pController, TRUE, i);
            
			// flag card detect thread to run through power up cycle
			// since there is a device present we issue a "fake" interrupt
			// so the card detection thread runs
		pController->Slots[i].CheckSlotOnStartUp  = TRUE;

			// wake up the card detect thread so that it can cycle device removal
			// to the bus driver
			// this is the only "safe" api to call
		SetInterruptEvent(pController->Slots[i].InsertionSysIntr);
	}

    return;
}

///////////////////////////////////////////////////////////////////////////////
//  SDP_Read - the read entry point for the driver (Unused)
//  Input:  hOpenContext - the context from SDP_Open
//          pBuffer - the user's buffer
//          Count - the size of the transfer
//  Output: 
//  Return: always zero
//  Notes: 
///////////////////////////////////////////////////////////////////////////////
DWORD SDP_Read(DWORD    hOpenContext,
               LPVOID   pBuffer,
               DWORD    Count)
{
    DbgPrintZo(SDCARD_ZONE_FUNC, (TEXT("SDIO: +-SDP_Read\n")));
    return 0;
}

///////////////////////////////////////////////////////////////////////////////
//  SDP_Seek - the seek entry point for the driver (Unused)
//  Input:  hOpenContext - the context from SDP_Open
//          Amount - the amount to seek
//          Type - the type of seek
//  Output: 
//  Return: always zero
//  Notes:  
///////////////////////////////////////////////////////////////////////////////
DWORD SDP_Seek(DWORD    hOpenContext,
               long     Amount,
               DWORD    Type)
{
    DbgPrintZo(SDCARD_ZONE_FUNC, (TEXT("SDIO: +-SDP_Seek\n")));
    return 0;
}

///////////////////////////////////////////////////////////////////////////////
//  SDP_Write - the write entry point for the driver (Unused)
//  Input:  hOpenContext - the context from SDP_Open
//          pBuffer - the user's buffer
//          Count - the size of the transfer
//  Output: 
//  Return: always zero
//  Notes: 
///////////////////////////////////////////////////////////////////////////////
DWORD SDP_Write(DWORD   hOpenContext,
                LPCVOID pBuffer,
                DWORD   Count)
{
    DbgPrintZo(SDCARD_ZONE_FUNC, (TEXT("SDIO: +-SDP_Write\n")));
    return 0;
}


?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
精品福利一区二区三区 | 国产丶欧美丶日本不卡视频| 国产成人欧美日韩在线电影| 欧美亚洲尤物久久| 中文字幕av一区二区三区免费看 | 亚洲h在线观看| 成人午夜av在线| 日韩视频一区二区在线观看| 亚洲欧美日韩久久| 福利电影一区二区三区| 51精品久久久久久久蜜臀| 亚洲免费观看在线视频| 国产精品91一区二区| 日韩三级.com| 秋霞影院一区二区| 在线观看免费成人| 亚洲色图清纯唯美| 粉嫩13p一区二区三区| 日韩女同互慰一区二区| 午夜欧美2019年伦理 | 成人三级伦理片| ww久久中文字幕| 看电视剧不卡顿的网站| 欧美性三三影院| 亚洲乱码中文字幕| 97久久精品人人爽人人爽蜜臀| 久久精品免视看| 国产精品一区二区久激情瑜伽| 日韩欧美你懂的| 秋霞电影网一区二区| 欧美剧情电影在线观看完整版免费励志电影 | 成人福利视频网站| 欧美经典一区二区三区| 韩国欧美国产1区| 精品福利一区二区三区| 国模少妇一区二区三区| 精品sm捆绑视频| 国产精品一二三在| 国产日韩影视精品| 99久久精品久久久久久清纯| 中文字幕在线不卡| 在线视频欧美精品| 亚洲卡通动漫在线| 欧美日韩在线播放一区| 日欧美一区二区| 欧美tickling挠脚心丨vk| 麻豆精品新av中文字幕| 欧美va亚洲va| 成人丝袜18视频在线观看| 国产精品成人在线观看| 欧美性一区二区| 免费观看在线色综合| 久久日韩精品一区二区五区| 国产精品12区| 综合久久综合久久| 欧美日韩在线亚洲一区蜜芽| 免费成人在线观看视频| 日本一区二区三区dvd视频在线| 成人18视频日本| 国产在线精品免费av| 久久精品水蜜桃av综合天堂| 91在线精品一区二区| 午夜伦欧美伦电影理论片| 久久伊人中文字幕| 色久优优欧美色久优优| 另类人妖一区二区av| 国产精品美女久久福利网站| 欧美人与性动xxxx| 国产一区二区三区| 亚洲一卡二卡三卡四卡无卡久久 | www.亚洲免费av| 午夜婷婷国产麻豆精品| 久久亚洲精品国产精品紫薇| 欧美在线视频你懂得| 国产伦理精品不卡| 亚瑟在线精品视频| 国产精品麻豆视频| 91精品国产综合久久精品| 成人高清免费在线播放| 日本视频一区二区| 亚洲女子a中天字幕| 2024国产精品| 6080yy午夜一二三区久久| 9i看片成人免费高清| 六月丁香婷婷色狠狠久久| 亚洲美女屁股眼交| 国产日产亚洲精品系列| 911精品产国品一二三产区| 99久久免费视频.com| 国产在线麻豆精品观看| 日本成人在线一区| 亚洲综合激情网| 亚洲天堂2014| 国产免费成人在线视频| 欧美成人伊人久久综合网| 欧美性感一区二区三区| 91香蕉视频污在线| 丰满放荡岳乱妇91ww| 国模娜娜一区二区三区| 免费黄网站欧美| 三级影片在线观看欧美日韩一区二区 | 日韩一区中文字幕| 日本一区二区免费在线| 国产亚洲视频系列| 久久综合av免费| 欧美岛国在线观看| 精品欧美久久久| 日韩免费看网站| 精品日韩在线观看| 亚洲精品在线免费播放| 欧美大片一区二区| 精品欧美乱码久久久久久| 欧美一级片在线看| 日韩精品一区二区三区四区视频| 日韩一二三四区| 精品免费国产二区三区| 精品第一国产综合精品aⅴ| 日韩一二三四区| 精品动漫一区二区三区在线观看| 久久综合色鬼综合色| 久久久久久久久伊人| 久久亚洲欧美国产精品乐播| 久久蜜桃一区二区| 欧美高清一级片在线观看| 国产精品成人在线观看| 亚洲精品乱码久久久久| 亚洲第一激情av| 日韩成人伦理电影在线观看| 精品一区二区久久| 国产精品小仙女| 99v久久综合狠狠综合久久| 91麻豆自制传媒国产之光| 欧美系列亚洲系列| 欧美区一区二区三区| 欧美大片日本大片免费观看| 久久久夜色精品亚洲| 日韩中文字幕不卡| 久久超碰97人人做人人爱| 国产精品白丝av| 色中色一区二区| 337p亚洲精品色噜噜| 国产欧美视频一区二区三区| 亚洲欧美一区二区久久 | 中文字幕在线不卡| 亚洲国产裸拍裸体视频在线观看乱了| 无码av免费一区二区三区试看 | 亚洲综合999| 老色鬼精品视频在线观看播放| 风间由美性色一区二区三区| 欧美性生活大片视频| 精品sm捆绑视频| 夜夜夜精品看看| 久久精品国产**网站演员| 91一区二区三区在线观看| 欧美福利电影网| 国产精品素人视频| 天堂va蜜桃一区二区三区| 国产精品夜夜嗨| 欧美日韩免费一区二区三区视频 | 国产精品久久免费看| 午夜精品久久久| 成人短视频下载| 日韩午夜av电影| 18成人在线观看| 久久电影国产免费久久电影| 色婷婷久久综合| 久久久久九九视频| 三级不卡在线观看| 91色porny在线视频| 2022国产精品视频| 亚洲国产一区二区三区青草影视 | www.久久精品| 久久夜色精品一区| 日韩不卡手机在线v区| 色噜噜狠狠成人网p站| 国产人成亚洲第一网站在线播放| 亚瑟在线精品视频| 色偷偷一区二区三区| 中文字幕乱码久久午夜不卡| 青椒成人免费视频| 欧美揉bbbbb揉bbbbb| 日韩美女精品在线| 成人综合在线观看| 26uuu国产在线精品一区二区| 天天综合色天天综合| 91黄视频在线观看| 亚洲色大成网站www久久九九| 国产91精品一区二区麻豆网站 | 国产午夜一区二区三区| 久久精品国产亚洲一区二区三区| 欧美日韩免费观看一区三区| 亚洲欧美成aⅴ人在线观看| 不卡视频在线看| 中文字幕成人在线观看| 国产福利91精品一区| 国产亚洲美州欧州综合国 | 亚洲成人一二三| 欧美性高清videossexo| 亚洲国产成人av网| 欧美三片在线视频观看 |