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

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

?? pcmsock.cpp

?? 基于s3c2440A的wince5.0 pccard driver
?? CPP
?? 第 1 頁 / 共 2 頁
字號:
//
// Copyright (c) Microsoft Corporation.  All rights reserved.
//
//
// Use of this source code is subject to the terms of the Microsoft end-user
// license agreement (EULA) under which you licensed this SOFTWARE PRODUCT.
// If you did not accept the terms of the EULA, you are not authorized to use
// this source code. For a copy of the EULA, please see the LICENSE.RTF on your
// install media.
//
/*++
THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF
ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A
PARTICULAR PURPOSE.

Module Name:  

Abstract:

    Samsung SMDK2440 PCMCIA Socket Services Object for PCMCIA(16-bit) Interface.

Notes: 
--*/
#include <windows.h>
#include <types.h>
#include <socksv2.h>
#include <memory.h>
#include <ceddk.h>
#include <debug.h>
#define ZONE_SOCKET ZONE_PDD

#include "PCMSock.h"

#define DATA_INT_IRQ    (INT_IRQ_BIT0 | INT_IRQ_BIT1)	// SMDK2440 board routes PD6710 IRQ3 to EINT8.


//--------------------Pcmcia Socket Implementation--------------------------------------------
const SS_SOCKET_INFO CPCMSocket::ms_SocketInitInfo =
{
    SOCK_CAP_MEM_CARD |
    SOCK_CAP_IO_MEMORY_CARD |
    SOCK_CAP_ONLY_SYSINTR,      //dwSocketCaps
    SOCK_CAP_PWRCYCLE |
    SOCK_CAP_CD |
    SOCK_CAP_SUSPEND_RESUME |
    SOCK_CAP_WP |
    SOCK_CAP_BVD1 |
    SOCK_CAP_BVD2,  // Socket Interrupt Capability Set follow bitmap.
    SOCK_CAP_PWRCYCLE |
    SOCK_CAP_CD |
    SOCK_CAP_SUSPEND_RESUME |
    SOCK_CAP_WP |
    SOCK_CAP_BVD1 |
    SOCK_CAP_BVD2,  // Socket status report capability
    0,              // Socket status indicate capability
    0,              // Number of power entry this socket have.
    0,              // Number of Window supported in this Socket.
    Internal,       // Bus Type is Internal.
    (DWORD) -1,     // Bus Number.
    { - 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}
};
const SS_SOCKET_STATE CPCMSocket::ms_SocketInitState =
{
    SOCK_EVENT_PWRCYCLE |
    SOCK_EVENT_CD |
    SOCK_EVENT_SUSPEND_RESUME |
    SOCK_EVENT_WP |
    SOCK_EVENT_BVD1 |
    SOCK_EVENT_BVD2, // Initial EventMask
    0, // Event Changed.
    0, // Event Status
    CFG_IFACE_MEMORY,  //default interface type
    0,  // Interrupt Enable.
    0,  // Vcc
    0,  // Vpp1
    0   // Vpp2

};

CPCMSocket::CPCMSocket( CPcmciaBusBridge* pBridge, UINT8 nSocketNumber ) : CPCMCIASocketBase<CPcmciaMemWindows, CPcmciaIoWindows, CPcmciaCardSocket, CPcmciaBusBridge>( pBridge )
{
    DEBUGMSG( ZONE_SOCKET, ( TEXT( "+CPCMSocket::CPCMSocket\r\n" ) ) );
    m_nSlotNumber = nSocketNumber;
    m_SocketState = ms_SocketInitState;
    m_SocketInfo = ms_SocketInitInfo;
    // Use Default Setting the Function interrupt is routed same IRQ as the Bridge
    for( DWORD dwIndex = 0; dwIndex < IRQ_ROUTINGTABLE_SIZE; dwIndex++ )
    {
        m_SocketInfo.bArrayIrqRouting[dwIndex] = ( BYTE )
                                                         pBridge->GetClientSysInt();
    }
    m_SocketInfo.dwNumOfPowerEntry = NUM_POWER_ENTRIES;
    m_SocketInfo.dwNumOfWindows = pBridge->GetMemWindowCount() +
                                          pBridge->GetIoWindowCount();
    m_SocketInfo.dwBusNumber = 0;

    if( !pBridge->PollingMode() )
    {
        PCICRegisterWrite( REG_STATUS_CHANGE_INT_CONFIG,
                        ( ( ( UINT8 ) pBridge->GetBridgeCSCIrq() ) << 4 ) |
                        CFG_BATTERY_DEAD_ENABLE |
                        CFG_BATTERY_WARNING_ENABLE |
                        CFG_CARD_DETECT_ENABLE |
                        CFG_READY_ENABLE );
    }
    m_bResuming = FALSE;

    DEBUGMSG( ZONE_SOCKET, ( TEXT( "-CPCMSocket::CPCMSocket\r\n" ) ) );
}
CPCMSocket::~CPCMSocket()
{
    DEBUGMSG( ZONE_SOCKET, ( TEXT( "+CPCMSocket::Deinitialize()\r\n" ) ) );
    Lock();
    BOOL bInitWindow = CardDeInitWindow();
    DEBUGCHK( bInitWindow );
    PCICRegisterWrite( REG_POWER_CONTROL,
                       PCICRegisterRead( REG_POWER_CONTROL ) & ~PWR_OUTPUT_ENABLE );
    Unlock();
    DEBUGMSG( ZONE_SOCKET, ( TEXT( "-CPCMSocket::Deinitialize()\r\n" ) ) );
}

//
// GetSocket - return Socket state
// [In/Out] pBuf - pointer to SS_SOCKET_STATE struct
// [In/Out] pnBuf - pointer to size of struct pointed to by pBuf
// return CERR_SUCCESS on success, CERR_UNSUPPORTED_SERVICE if size is anomolous
//
STATUS CPCMSocket::CardGetSocket( PSS_SOCKET_STATE pState )
{
    DWORD dwReg;

    DEBUGMSG( ZONE_SOCKET, ( TEXT( "+CPCMSocket::GetSocket()\r\n" ) ) );
    Lock();
    if( pState )
    {
        // Read voltage information
        dwReg = PCICRegisterRead( REG_POWER_CONTROL );
        if( dwReg & PWR_VCC_POWER )
        {
            dwReg = PCICRegisterRead( REG_GENERAL_CONTROL );
            if( dwReg & MISC1_VCC_33 ) // Vcc = 3V
            {
                // Vcc = 3V
                m_SocketState.fVcc = 0x1;
            }
            else
            {
                // Vcc = 5V
                m_SocketState.fVcc = 0x2;
            }
        }
        else
        {
            // Vcc = 0V
            m_SocketState.fVcc = 0x0;
        }
        m_SocketState.uVpp1 = m_SocketState.uVpp2 = 0; //m_SocketState.fVcc;

        BYTE uStatusChange = 0;
        m_SocketState.dwEventChanged |= ( ( uStatusChange & CSC_DETECT_CHANGE ) !=
                                        0 ?
                                        SOCK_EVENT_CD :
                                        0 );
        m_SocketState.dwEventChanged |= ( ( uStatusChange & CSC_BATTERY_DEAD_OR_STS_CHG ) !=
                                        0 ?
                                        SOCK_EVENT_BVD1 :
                                        0 );
        m_SocketState.dwEventChanged |= ( ( uStatusChange & CSC_BATTERY_WARNING ) !=
                                        0 ?
                                        SOCK_EVENT_BVD2 :
                                        0 );
        m_SocketState.dwEventChanged |= ( ( uStatusChange & CSC_READY_CHANGE ) !=
                                        0 ?
                                        SOCK_EVENT_READY :
                                        0 );

        BYTE uCurrentStatus = PCICRegisterRead( REG_INTERFACE_STATUS );
        m_SocketState.dwEventStatus = 0;
        m_SocketState.dwEventStatus |= ( ( uCurrentStatus & ( STS_CD1 | STS_CD2 ) ) ==
                                       ( STS_CD1 | STS_CD2 ) ?
                                       SOCK_EVENT_CD :
                                       0 );
        m_SocketState.dwEventStatus |= ( ( uCurrentStatus & STS_BVD1 ) ==
                                       0 ?
                                       SOCK_EVENT_BVD1 :
                                       0 );
        m_SocketState.dwEventStatus |= ( ( uCurrentStatus & STS_BVD2 ) ==
                                       0 ?
                                       SOCK_EVENT_BVD2 :
                                       0 );
        m_SocketState.dwEventStatus |= ( ( uCurrentStatus & STS_CARD_READY ) !=
                                       0 ?
                                       SOCK_EVENT_READY :
                                       0 );
        m_SocketState.dwEventStatus |= ( ( uCurrentStatus & STS_WRITE_PROTECT ) !=
                                       0 ?
                                       SOCK_EVENT_WP :
                                       0 );

        m_SocketState.dwEventStatus &= ~SOCK_EVENT_CARDBUS_CARD;
        *pState = m_SocketState;
        pState->dwEventChanged &= pState->dwEventMask;

        DEBUGMSG( ZONE_SOCKET,
                  ( TEXT( "-CPCMSocket::GetSocket(): dwEventMask: %x dwEventChanged: %x dwEventStatus: %x\r\n" ),
                    pState->dwEventMask,
                    pState->dwEventChanged,
                    pState->dwEventStatus ) );
    }
    Unlock();
    return CERR_SUCCESS;
}
void CPCMSocket::PowerMgrCallback( BOOL bPowerOff )
{
    SS_SOCKET_STATE sSocketState = m_SocketState;
    sSocketState.dwEventChanged = SOCK_EVENT_SUSPEND_RESUME;
    sSocketState.dwEventStatus = ( bPowerOff ?
                                   SOCK_EVENT_CD :
                                   ( SOCK_EVENT_CD |
                                     SOCK_EVENT_SUSPEND_RESUME ) );
    m_pBridge->CallBackToCardService( GetSlotNumber(),
                                      GetSocketHandle(),
                                      &sSocketState );
}

void CPCMSocket::PowerMgr( BOOL bPowerDown )
{
    if( bPowerDown )
    {
        // Power Off Socket If it is applied.
        PowerMgrCallback( bPowerDown );
        if( ( m_SocketState.dwInteruptStatus & SOCK_INT_FUNC_IRQ_WAKE ) == 0 ) // We can shut down this function card
        {
            m_bBackupPCICPwrCtrlReg = PCICRegisterRead( REG_POWER_CONTROL );
            // Disable Socket Power.
            PCICRegisterWrite( REG_POWER_CONTROL, 0 );
            m_bResuming = TRUE;
        }
    }
    else
    {
        if( m_bResuming )
        {
            PCICRegisterWrite( REG_POWER_CONTROL, m_bBackupPCICPwrCtrlReg );
            m_pBridge->NeedPowerResuming();
        }
        else
        {
            PowerMgrCallback( bPowerDown );
        }
    }
}
BOOL CPCMSocket::Resuming()
{
    if( m_bResuming )
    {
        Lock();
        DWORD dwStartTickCount = GetTickCount();
        // Wait for 100MS for power set .
        while( GetTickCount() - dwStartTickCount < 100 )
            Sleep( 0 ); //Yeild among same priority thread.
        //Assert Resetting.
        dwStartTickCount = GetTickCount();
        while( GetTickCount() - dwStartTickCount < 20 )
            Sleep( 0 ); //Yeild among same priority thread.
        // Deassert Reset.
        PCICRegisterWrite( REG_INTERRUPT_AND_GENERAL_CONTROL,
                           INT_CARD_NOT_RESET/*|INT_ENABLE_MANAGE_INT*/ ); 
        dwStartTickCount = GetTickCount();
        while( GetTickCount() - dwStartTickCount < 20 )
            Sleep( 0 ); //Yeild among same priority thread.
        m_bResuming = FALSE;
        dwStartTickCount = GetTickCount();

        PowerMgrCallback( FALSE );
        Unlock();
        return TRUE;
    }
    return FALSE;
}

#ifdef DEBUG
VOID CPCMSocket::DumpAllRegisters()
{
    DEBUGMSG( ZONE_FUNCTION,
              ( TEXT( "Dumping all PCIC registers for socket %d\r\n" ),
                GetSlotNumber() ) );
    for( UINT8 nRegNum = 0; nRegNum < 0x40; nRegNum++ )
    {
        UINT8 val = PCICRegisterRead( nRegNum );
        DEBUGMSG( ZONE_FUNCTION,
                  ( TEXT( "PCIC Register %02x: %02x\r\n" ), nRegNum, val ) );
    }
}
#endif DEBUG

//
// PDCardSetSocket
//
// @func    STATUS | PDCardSetSocket | Set the socket state of the specified socket.
// @rdesc   Returns one of the CERR_* return codes in cardserv.h.
//
// @comm    This function sets the specified socket's state and adjusts the socket
//          controller appropriately.
//          PDCardGetSocketState will usually be called first and adjustments will
//          be made to the PDCARD_SOCKET_STATE structure before PDCardSetSocketState
//          is called.  This avoids duplicated socket state on different layers and
//          it avoids unintentionally setting socket parameters.
//
// @xref <f PDCardGetSocketState>
//

STATUS CPCMSocket::CardSetSocket( PSS_SOCKET_STATE pState )
{
    Lock();
    STATUS status = CERR_SUCCESS;
    if( m_pBridge && pState )
    {
        m_SocketState.dwEventMask = pState->dwEventMask;
        m_SocketState.dwEventChanged &= ~pState->dwEventChanged;

        BYTE tmp = PCICRegisterRead( REG_INTERRUPT_AND_GENERAL_CONTROL ) & ( INT_RING_INDICATE_ENABLE |
                                                                             INT_CARD_NOT_RESET |
                                                                             0x0f );
        tmp |= INT_CARD_NOT_RESET ;
        if( ( pState->dwInteruptStatus & SOCK_INT_FUNC_IRQ_ROUTING ) !=
            ( m_SocketState.dwInteruptStatus & SOCK_INT_FUNC_IRQ_ROUTING ) )
        {
            if( pState->dwInteruptStatus & SOCK_INT_FUNC_IRQ_ROUTING )
            {
                tmp |= DATA_INT_IRQ; // enable interrupt routing

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久久久久亚洲综合影院红桃| 国产视频一区在线播放| 日韩三级.com| 国产精品免费视频观看| 亚洲二区在线观看| 国产精品一区二区久激情瑜伽| 国产69精品久久久久毛片| 欧美视频一区二区三区| 欧美精品一区二区三区高清aⅴ| 国产精品另类一区| 丝袜亚洲另类欧美| av在线一区二区| 日韩视频一区二区三区在线播放| 国产精品久久久久影院色老大| 亚洲成av人**亚洲成av**| 成人午夜大片免费观看| 日韩三级免费观看| 国产欧美一区二区精品性色超碰| 亚洲人成精品久久久久久| 婷婷丁香激情综合| 成人深夜视频在线观看| 日韩三级视频在线看| 一区二区三区不卡视频在线观看| 国产精品18久久久久久久网站| 欧美视频日韩视频| **性色生活片久久毛片| 国产剧情在线观看一区二区| 欧美精品123区| 亚洲自拍偷拍综合| 色噜噜狠狠成人中文综合| 中文字幕亚洲欧美在线不卡| 黄页网站大全一区二区| 91精品国产高清一区二区三区蜜臀| 国产精品九色蝌蚪自拍| 紧缚奴在线一区二区三区| 99久久精品国产观看| 精品毛片乱码1区2区3区| 性做久久久久久免费观看| 91蜜桃网址入口| 久久婷婷国产综合国色天香| 激情五月激情综合网| 欧美精品一级二级| 日日夜夜精品视频天天综合网| 91国偷自产一区二区三区观看| 成人免费一区二区三区视频| 成人免费毛片片v| 国产亚洲一区二区在线观看| 国产精品一区一区三区| 久久久久国色av免费看影院| 国产一区二区福利| 久久久久国产精品人| 国产一区二区精品在线观看| 国产日韩一级二级三级| 国产经典欧美精品| 国产日韩欧美电影| 国产精品一品视频| 久久久一区二区三区捆绑**| 久久国产精品一区二区| 欧美日韩激情在线| 亚洲最大成人网4388xx| 欧美视频三区在线播放| 亚洲一区二区三区四区在线| 欧美日韩精品一区二区| 久久99久久久久| www亚洲一区| 成人h动漫精品一区二| 一区在线观看视频| 欧美亚洲国产bt| 另类小说综合欧美亚洲| 国产欧美久久久精品影院| 91在线云播放| 五月天激情综合网| 久久色成人在线| 在线观看亚洲一区| 蜜桃视频一区二区三区| 久久久久久久精| 在线观看一区二区精品视频| 91亚洲精品一区二区乱码| 国产精品理论在线观看| 欧美日韩另类一区| 国产成人亚洲综合色影视| 亚洲一区二区在线播放相泽| 日韩视频免费观看高清完整版 | 欧美一级理论片| 国产在线精品一区二区| 亚洲日本欧美天堂| 精品视频一区 二区 三区| 日韩av网站免费在线| 欧美精品一区二区蜜臀亚洲| 99久久婷婷国产综合精品| 日本欧美大码aⅴ在线播放| 中文字幕免费不卡在线| 欧美高清www午色夜在线视频| 粉嫩一区二区三区性色av| 亚洲不卡av一区二区三区| 久久精品人人做人人爽人人| 在线观看视频一区| 国产一区二区三区av电影| 午夜视频久久久久久| 国产欧美精品一区二区三区四区| 欧美日韩成人高清| 91网站视频在线观看| 国产在线播精品第三| 亚洲一区在线观看免费观看电影高清| 久久久精品蜜桃| 日韩精品一区二区三区在线 | 欧美一区二区视频在线观看2022| 国产白丝精品91爽爽久久| 偷窥国产亚洲免费视频| 国产精品久久久99| 欧美不卡一区二区三区四区| 99精品一区二区| 久久国产综合精品| 亚洲精品视频一区二区| 国产日韩欧美一区二区三区综合| 欧美美女一区二区三区| 91麻豆精东视频| 99久免费精品视频在线观看| 国产在线视频不卡二| 蜜臀久久久久久久| 五月综合激情日本mⅴ| 亚洲欧美成人一区二区三区| 中文字幕精品一区| 久久精品综合网| 久久久久久久久久看片| 久久综合久色欧美综合狠狠| 日韩亚洲欧美高清| 日韩欧美国产精品| 精品三级在线观看| 91精品国产一区二区三区 | 午夜精品久久久久影视| 亚洲男人的天堂在线aⅴ视频| 国产精品丝袜一区| 国产精品视频观看| 亚洲欧美中日韩| 日韩美女久久久| 亚洲精品欧美激情| 亚洲午夜在线视频| 视频一区视频二区中文| 日本成人中文字幕| 狠狠色丁香婷综合久久| 国产一区二区精品久久91| 国产精一区二区三区| 成人高清在线视频| 91色九色蝌蚪| 精品视频色一区| 精品久久一区二区三区| 久久久久97国产精华液好用吗| 中文字幕精品—区二区四季| 久久人人爽人人爽| 中文字幕不卡一区| 亚洲国产电影在线观看| 亚洲欧美国产77777| 国产精品视频一二三| 国产精品女同一区二区三区| 国产精品伦一区二区三级视频| 亚洲精品第一国产综合野| 午夜激情一区二区| 极品少妇xxxx精品少妇| 成人av在线电影| 欧美乱妇一区二区三区不卡视频| 欧美大片一区二区| 国产精品久久久久久久久搜平片| 亚洲美女一区二区三区| 天天色综合天天| 国产一区91精品张津瑜| 91国偷自产一区二区开放时间 | 青青草91视频| 一本色道久久综合亚洲精品按摩| 精品少妇一区二区三区视频免付费| 亚洲视频在线一区| 国产精华液一区二区三区| 51精品国自产在线| 伊人婷婷欧美激情| 成人高清免费观看| 亚洲精品一区二区三区在线观看 | 国产ts人妖一区二区| 91精品国产综合久久香蕉麻豆| 亚洲三级在线观看| 成人午夜激情影院| 国产欧美一区视频| 国产精品自产自拍| 2020国产精品| 国产在线精品免费| 精品国产乱码久久久久久免费| 日日夜夜免费精品| 欧美麻豆精品久久久久久| 亚洲一二三四久久| 在线看国产一区| 亚洲一区在线视频| 欧美日韩精品免费观看视频| 亚洲国产乱码最新视频| 欧美视频在线观看一区二区| 亚洲综合激情另类小说区| 国产女人18毛片水真多成人如厕| 日韩av一区二区在线影视| 91精品国产一区二区三区 | 无吗不卡中文字幕| 欧美日韩精品一区二区| 三级影片在线观看欧美日韩一区二区 |