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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? pdsocket.cpp

?? 基于s3c2440A的wince5.0 pccard driver
?? CPP
?? 第 1 頁 / 共 3 頁
字號:
            tmp = ( UCHAR ) ( m_dwCSCIrq << 4 );
            tmp |= CFG_CARD_DETECT_ENABLE | CFG_READY_ENABLE;
            WritePCICRegister( nSocket, REG_STATUS_CHANGE_INT_CONFIG, tmp );
        }
        else
        {
            WritePCICRegister( nSocket, REG_STATUS_CHANGE_INT_CONFIG, 0 );
        }

        // PD6710 specific code to enable management interrupt(routed to -INTR)
        if( !m_fPollingMode )
        {
            WritePCICRegister( nSocket, REG_STATUS_CHANGE_INT_CONFIG, CFG_CARD_DETECT_ENABLE );
        }
        else
        {
            WritePCICRegister( nSocket, REG_STATUS_CHANGE_INT_CONFIG, 0 );
        }

        if( !m_fPollingMode )
        {
            // Enable Manage Interrupt
            tmp = ReadPCICRegister( nSocket, REG_INTERRUPT_AND_GENERAL_CONTROL );
            tmp |= INT_ENABLE_MANAGE_INT;
            WritePCICRegister( nSocket, REG_INTERRUPT_AND_GENERAL_CONTROL, tmp );
        }
    }

    // CreateIST Event
    m_hISTEvent = CreateEvent( 0, FALSE, FALSE, NULL );

    if( !m_fPollingMode )
    {
        // Run IST
        BOOL r = InterruptInitialize( m_dwCSCSysIntr, m_hISTEvent, 0, 0 );
        ASSERT( r );
    }

    return TRUE;
}

#ifdef DEBUG
VOID CPcmciaBusBridge::DumpAllRegisters()
{
    DEBUGMSG( ZONE_FUNCTION, ( TEXT( "Dumping all PCIC registers\r\n" ) ) );
    for( UINT8 nRegNum = 0; nRegNum < 0x40; nRegNum++ )
    {
        UINT8 val = ReadPCICRegister( 0, nRegNum );
        UINT8 val2 = ReadPCICRegister( 1, nRegNum );
        DEBUGMSG( ZONE_FUNCTION,
                  ( TEXT( "%02x: %02x %02x\r\n" ), nRegNum, val, val2 ) );
    }
    DEBUGMSG( ZONE_FUNCTION, ( TEXT( "Dump completed.\r\n" ) ) );
}
#endif

//
// Function to set the PCIC index register
//
VOID CPcmciaBusBridge::PCICIndex( UINT socket_num, UINT8  register_num )
{
    WRITE_PORT_UCHAR( m_PCICIndex,
                      ( UINT8 )( ( socket_num == 0 ? 0 : 0x40 ) | register_num ) );
}

//
// Function to write to the PCIC data register
//
VOID CPcmciaBusBridge::PCICDataWrite( UINT8 value )
{
    WRITE_PORT_UCHAR( m_PCICData, value );
}

//
// Function to read the PCIC data register
//
UINT8 CPcmciaBusBridge::PCICDataRead( VOID )
{
    return READ_PORT_UCHAR( m_PCICData );
}


//
// Verify the PCIC's REG_CHIP_REVISION
//
// This bit of code looks in the 82365 chip revision register (PCIC index 0)
// to see if a valid 82365 is in the system.  The original code only
// recognized the 83h silicon revision.  This indicates REV C silicon from
// Intel.  However, Intel also had a very popular rev B version, and that's
// what the integrated PCMCIA controller on the AMD ElanSC400 emulated.  The
// silicon revision register for that version returned 82h.
//
BOOL CPcmciaBusBridge::IsValidPCICSig( void )
{
    switch( m_vRevision = ReadPCICRegister( 0, REG_CHIP_REVISION ) )
    {
      case 0x82:
      case 0x83:
      case 0x84:
        // for newer chip - can handle 3.3v
        DEBUGMSG( 1,
                  ( TEXT( "PCMCIA:IsValidPCICSig Valid CHIP_REVISION detected = 0x%x at 0x%x\r\n" ),
                    m_vRevision,
                    m_PCICIndex ) );
        return TRUE;
    }
    DEBUGMSG( 1,
              ( TEXT( "PCMCIA:IsValidPCICSig Invalid CHIP_REVISION = 0x%x at 0x%x!!!\r\n" ),
                m_vRevision,
                m_PCICIndex ) );
    return FALSE;
}

//
// Function to get the initial settings from the registry
//
// NOTE: lpRegPath is assumed to be under HKEY_LOCAL_MACHINE
//
// Returns ERROR_SUCCESS on success or a Win32 error code on failure
//
DWORD CPcmciaBusBridge::GetRegistryConfig()
{
    DWORD dwRet = 1;
    DWORD dwSize, dwType, dwData;

    // get the PCMCIA windows configuration
    if( !LoadWindowsSettings() )
    {
        dwRet = ERROR_INVALID_DATA;
        goto grc_fail;
    }

    // get the polling mode value
    dwSize = sizeof( DWORD );
    if( !RegQueryValueEx( POLLING_MODE_NAME,
                          &dwType,
                          ( PUCHAR ) & dwData,
                          &dwSize ) )
    {
        m_fPollingMode = TRUE; // RegQueryValueEx failed, default to TRUE
    }
    else
    {
        m_fPollingMode = dwData ? TRUE : FALSE;
    }

    // get function interrupt routing configuration
    dwSize = sizeof( DWORD );
    if( !RegQueryValueEx( IRQ_VALUE_NAME,
                          &dwType,
                          ( PUCHAR ) & dwData,
                          &dwSize ) )
    {
        DEBUGMSG( ZONE_PDD,
                  ( TEXT( "PCMCIA:GetRegistyConfig RegQueryValueEx(%s) failed\r\n" ),
                    IRQ_VALUE_NAME ) );
        goto grc_fail;
    }
    m_dwIrq = dwData;

    m_dwCSCSysIntr = 0;
    m_dwCSCIrq = 0;
    if( !m_fPollingMode )
    {
        // get card status change interrupt routing configuration
        dwSize = sizeof( DWORD );
        if( !RegQueryValueEx( CSC_IRQ_VALUE_NAME,
                              &dwType,
                              ( PUCHAR ) & dwData,
                              &dwSize ) )
        {
            m_fPollingMode = TRUE;
        }
        else
        {
            m_dwCSCIrq = dwData;
        }
        dwSize = sizeof( DWORD );
        if( !RegQueryValueEx( CSC_SYSINTR_VALUE_NAME,
                              &dwType,
                              ( PUCHAR ) & dwData,
                              &dwSize ) )
        {
            m_fPollingMode = TRUE;
        }
        else
        {
            m_dwCSCSysIntr = dwData;
        }
    }

    // get the polling timeout value
    dwSize = sizeof( DWORD );
    if( !RegQueryValueEx( POLL_TIMEOUT_NAME,
                          &dwType,
                          ( PUCHAR ) & dwData,
                          &dwSize ) )
    {
        // RegQueryValueEx failed; if polling, set the timeout to 0.5 sec, otherwise set to INFINITE
        m_dwPollTimeout = m_fPollingMode ? 500 : INFINITE;
    }
    else
    {
        m_dwPollTimeout = dwData;
    }

    dwRet = ERROR_SUCCESS;

    grc_fail : return dwRet;
}   // GetRegistryConfig

BOOL CPcmciaBusBridge::InitCardBusBridge( void )
{
    DWORD dwRet;

    // Create critical section protecting the PCIC registers
    __try
    {
        InitializeCriticalSection( &m_PCICCritSec );
    }
    __except( EXCEPTION_EXECUTE_HANDLER )
    {
        DEBUGMSG( ZONE_PDD,
                  ( TEXT( "PDCardInitServices InitializeCriticalSection failed %d\r\n" ) ) );
        return FALSE;
    }
    m_fPCICCritSecInitialized = true;

    // Get registry information
    if( ( dwRet = GetRegistryConfig() ) != ERROR_SUCCESS )
    {
        DEBUGMSG( ZONE_PDD,
                  ( TEXT( "PDCardInitServices GetRegistryConfig failed %d\r\n" ),
                    dwRet ) );
        return FALSE;
    }

    // Convert the data interrupt to a logical sysintr value.
    //
    if (!KernelIoControl(IOCTL_HAL_REQUEST_SYSINTR, &m_dwIrq, sizeof(DWORD), &m_dwSysIntr, sizeof(DWORD), NULL))
    {
        RETAILMSG(1, (TEXT("PCMCIA: Failed to obtain sysintr value for data interrupt.\r\n")));
        m_dwSysIntr = SYSINTR_UNDEFINED;
        return FALSE;
    }

	// Allocate PCMCIA buffers.
	m_vpIOPRegs = (S3C2440A_IOPORT_REG*)VirtualAlloc(0, sizeof(S3C2440A_IOPORT_REG), MEM_RESERVE, PAGE_NOACCESS);
	if (m_vpIOPRegs == NULL) 
	{
		DEBUGMSG (1,(TEXT("m_vpIOPRegs is not allocated\n\r")));
		goto pcis_fail;
	}
	if (!VirtualCopy((PVOID)m_vpIOPRegs, (PVOID)(S3C2440A_BASE_REG_PA_IOPORT >> 8), sizeof(S3C2440A_IOPORT_REG), PAGE_PHYSICAL|PAGE_READWRITE|PAGE_NOCACHE)) {
		DEBUGMSG (1,(TEXT("m_vpIOPRegs is not mapped\n\r")));
		goto pcis_fail;
	}
	DEBUGMSG (1,(TEXT("m_vpIOPRegs is mapped to %x\n\r"), m_vpIOPRegs));
	
	m_vpMEMRegs = (S3C2440A_MEMCTRL_REG*)VirtualAlloc(0,sizeof(S3C2440A_MEMCTRL_REG), MEM_RESERVE,PAGE_NOACCESS);
	if(m_vpMEMRegs == NULL) 
	{
		DEBUGMSG (1,(TEXT("m_vpMEMRegs is not allocated\n\r")));
		goto pcis_fail;
	}
	if(!VirtualCopy((PVOID)m_vpMEMRegs,(PVOID)(S3C2440A_BASE_REG_PA_MEMCTRL >> 8),sizeof(S3C2440A_MEMCTRL_REG), PAGE_PHYSICAL|PAGE_READWRITE|PAGE_NOCACHE)) {

		DEBUGMSG (1,(TEXT("m_vpMEMRegs is not mapped\n\r")));
		goto pcis_fail;
	}    
	DEBUGMSG (1,(TEXT("m_vpMEMRegs is mapped to %x\n\r"), m_vpMEMRegs));

	m_vpPCMCIAPort = (PUCHAR*)VirtualAlloc(0, 0x0400, MEM_RESERVE,PAGE_NOACCESS);
	if(m_vpPCMCIAPort == NULL) 
	{
		DEBUGMSG (1,(TEXT("m_vpPCMCIAPort is not allocated\n\r")));
		goto pcis_fail;
	}
	if(!VirtualCopy((PVOID)m_vpPCMCIAPort,(PVOID)PD6710_IO_BASE_ADDRESS, 0x0400, PAGE_READWRITE|PAGE_NOCACHE)) {
		DEBUGMSG (1,(TEXT("m_vpPCMCIAPort is not mapped\n\r")));
		goto pcis_fail;
	}    
	DEBUGMSG (1,(TEXT("m_vpPCMCIAPort is mapped to %x\n\r"), m_vpPCMCIAPort));
	
	// Initialize S3C2440 for PD6710           
	// EINT3(GPF3) is enabled.
	m_vpIOPRegs->GPFCON = (m_vpIOPRegs->GPFCON & ~(0x3<<6)) | (0x2<<6); 
	// EINT3 is PULLUP enabled.
	m_vpIOPRegs->GPFUP = (m_vpIOPRegs->GPFUP & ~(0x1<<3));              

	// EINT8(GPG0) is enabled.
	m_vpIOPRegs->GPGCON = (m_vpIOPRegs->GPGCON & ~(0x3<<0)) | (0x2<<0); 
	// EINT8 is *not* PULLUP enabled.
	m_vpIOPRegs->GPGUP = (m_vpIOPRegs->GPGUP | (0x1<<0));

	
	// nGCS2=nUB/nLB(nSBHE),nWAIT,16-bit
	m_vpMEMRegs->BWSCON = (m_vpMEMRegs->BWSCON & ~(0xf<<8)) | (0xd<<8); 

	// BANK2 access timing
	m_vpMEMRegs->BANKCON2 = ((B6710_Tacs<<13)+(B6710_Tcos<<11)+(B6710_Tacc<<8)+(B6710_Tcoh<<6)\
		+(B6710_Tah<<4)+(B6710_Tacp<<2)+(B6710_PMC));

	
	// EINT8=Level-high triggered, IRQ3.
	// EINT3=Falling Edge triggering -> connected INTR(controller)
	m_vpIOPRegs->EXTINT1=(m_vpIOPRegs->EXTINT1 & ~(0xf<<0)) | (0x1<<0); 
	m_vpIOPRegs->EXTINT0=(m_vpIOPRegs->EXTINT0 & ~(0xf<<12)) | (0x2<<12); 
		
	m_PCICIndex = ((PUCHAR)((ULONG)m_vpPCMCIAPort+0x3e0));
	m_PCICData = ((PUCHAR)((ULONG)m_vpPCMCIAPort+0x3e1));

	DEBUGMSG(1, (TEXT("PDCardInitServices m_PCICIndex = 0x%x, m_PCICData = 0x%x\r\n"),
		          m_PCICIndex, m_PCICData));

    if( !IsValidPCICSig() )
    {
        return FALSE;
    }

    DEBUGMSG( ZONE_PDD,
              ( TEXT( "PDCardInitServices m_PCICIndex = 0x%x, m_PCICData = 0x%x\r\n" ),
                m_PCICIndex,
                m_PCICData ) );

    UINT8 tmp = ReadPCICRegister( 0, REG_CHIP_REVISION );
    DEBUGMSG( ZONE_PDD,
              ( TEXT( "PDCardInitServices REG_CHIP_REVISION = 0x%x\r\n" ),
                tmp ) );

    DDKISRINFO ddi;
    if( GetIsrInfo( &ddi ) != ERROR_SUCCESS )
    {
        return FALSE;
    }

    InstallIsr();

    return TRUE;

pcis_fail:
    return FALSE;
}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩免费看网站| 国产原创一区二区三区| 紧缚奴在线一区二区三区| 国产99久久久国产精品潘金| 欧美三级视频在线播放| 国产精品日韩精品欧美在线 | 99国产精品99久久久久久| 欧美一级日韩免费不卡| 一区二区三区影院| 国产成人欧美日韩在线电影| 91精品国产福利在线观看| 亚洲一二三区视频在线观看| 成人高清在线视频| 国产视频911| 久久国内精品自在自线400部| 欧美性色aⅴ视频一区日韩精品| 国产精品视频看| 国产成人一区在线| 久久久久高清精品| 国产黄色成人av| 久久久久久久久岛国免费| 久久99国产精品麻豆| 日韩亚洲欧美一区| 日产欧产美韩系列久久99| 欧美男人的天堂一二区| 亚洲自拍偷拍麻豆| 欧美色老头old∨ideo| 一区二区三区欧美在线观看| 97se狠狠狠综合亚洲狠狠| 亚洲视频免费在线观看| av一区二区三区在线| 17c精品麻豆一区二区免费| av在线不卡免费看| 亚洲欧美偷拍另类a∨色屁股| 99在线精品免费| 亚洲综合小说图片| 欧美日韩亚洲综合一区| 日韩高清不卡一区| 欧美一级精品在线| 国产专区综合网| 久久精品视频一区二区三区| 国产高清不卡一区| 亚洲欧美经典视频| 欧美日韩国产三级| 久久er99精品| 欧美激情一区二区三区四区| 丁香啪啪综合成人亚洲小说| 亚洲欧美精品午睡沙发| 欧美日韩高清在线播放| 久久精品国产99| 国产精品天美传媒| 欧美影院一区二区三区| 热久久一区二区| 国产亚洲精品福利| 色乱码一区二区三区88| 人人狠狠综合久久亚洲| 中文字幕不卡在线播放| 欧美偷拍一区二区| 激情综合色播五月| 亚洲欧美色一区| 精品免费视频一区二区| 91性感美女视频| 日本网站在线观看一区二区三区| 精品福利一区二区三区| 91无套直看片红桃| 美国欧美日韩国产在线播放| 国产精品入口麻豆九色| 日韩无一区二区| 97精品久久久午夜一区二区三区 | 一本色道久久加勒比精品| 日韩制服丝袜先锋影音| 欧美高清在线一区| 日韩一卡二卡三卡| 91视频在线看| 国产乱人伦偷精品视频免下载| 亚洲欧洲一区二区三区| 日韩欧美黄色影院| 欧洲日韩一区二区三区| 国产精品1区2区3区在线观看| 五月婷婷综合网| 国产精品欧美久久久久一区二区| 欧美理论电影在线| 色先锋久久av资源部| 国产一区二区三区久久悠悠色av| 一区二区在线免费| 国产偷国产偷亚洲高清人白洁| 欧美性色黄大片手机版| www.激情成人| 国产尤物一区二区| 久久er99精品| 日韩精品成人一区二区三区| 亚洲乱码中文字幕综合| 国产精品女同互慰在线看| 日韩欧美国产精品| 7777精品伊人久久久大香线蕉的 | 日韩女优制服丝袜电影| 日本道免费精品一区二区三区| 国产精品99久久久久久久vr| 日韩精品免费专区| 亚洲国产色一区| 亚洲免费观看高清完整版在线观看 | 国产调教视频一区| 欧美成人高清电影在线| 欧美精品 国产精品| 欧美美女直播网站| 在线免费观看一区| 欧美性猛片xxxx免费看久爱| 色婷婷久久综合| 91尤物视频在线观看| 91美女视频网站| 91福利资源站| 欧美色图在线观看| 欧美日韩久久不卡| 欧美日韩国产一二三| 欧美日韩不卡一区| 欧美一区二区黄色| 日韩欧美亚洲一区二区| 久久综合五月天婷婷伊人| 久久久一区二区三区| 久久久美女艺术照精彩视频福利播放 | 国产精品高潮呻吟久久| 中文字幕亚洲欧美在线不卡| 亚洲丝袜精品丝袜在线| 亚洲欧美偷拍另类a∨色屁股| 亚洲美女免费视频| 亚洲h动漫在线| 久久精品国产久精国产| 国产美女精品人人做人人爽| 国产精品66部| 9l国产精品久久久久麻豆| 色欧美乱欧美15图片| 欧美日韩国产经典色站一区二区三区| 91超碰这里只有精品国产| 欧美mv日韩mv国产网站| 国产精品久久网站| 亚洲电影中文字幕在线观看| 久草中文综合在线| 国产精品一区二区免费不卡| 91影院在线观看| 日韩欧美一区在线观看| 18欧美亚洲精品| 青青草精品视频| 成人av电影在线播放| 欧美日韩在线不卡| 久久伊人中文字幕| 亚洲精品久久久久久国产精华液| 五月天久久比比资源色| 国产精品一区二区免费不卡| 欧美电影免费观看高清完整版| 日本一区二区三区久久久久久久久不 | 欧美日本不卡视频| 2019国产精品| 亚洲国产乱码最新视频 | 中文字幕电影一区| 五月综合激情婷婷六月色窝| 国产成人精品亚洲午夜麻豆| 色婷婷亚洲婷婷| 久久亚洲精品国产精品紫薇| 亚洲狠狠丁香婷婷综合久久久| 韩国精品在线观看| 欧美丝袜丝nylons| 国产丝袜在线精品| 捆绑变态av一区二区三区| 91美女福利视频| 日本一区二区高清| 麻豆精品在线播放| 欧美在线看片a免费观看| 久久免费精品国产久精品久久久久| 亚洲黄色免费网站| 99久久综合国产精品| 精品国产亚洲在线| 午夜精品在线视频一区| 99久久精品国产毛片| 国产亚洲精品aa午夜观看| 日韩国产欧美在线播放| 色婷婷香蕉在线一区二区| 日本一区二区免费在线观看视频| 日韩精品一二三四| 欧美日韩一区三区| 亚洲欧美激情视频在线观看一区二区三区 | 成人爱爱电影网址| 久久久久久久综合| 久色婷婷小香蕉久久| 91精品国产麻豆国产自产在线| 综合电影一区二区三区| 成人免费视频视频在线观看免费 | 亚洲精品高清在线| 成人免费黄色大片| 久久综合成人精品亚洲另类欧美| 蜜臀va亚洲va欧美va天堂| 欧美日韩精品二区第二页| 亚洲一区二区欧美激情| 一本久久精品一区二区| 中文字幕制服丝袜成人av| 国产精品一区二区你懂的| 国产日韩一级二级三级| 国产成人精品一区二区三区四区| 久久久国产一区二区三区四区小说 | 欧美色手机在线观看| 亚洲国产综合91精品麻豆|