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

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

?? pdsocket.cpp

?? WinCE5.0BSP for Renesas SH7770
?? CPP
?? 第 1 頁 / 共 3 頁
字號:
//
//  Copyright(C) Renesas Technology Corp. 2005. All rights reserved.
//
// PCCARD driver for ITS-DS7
//
// FILE     : pdsocket.cpp
// CREATED  : 2005.02.03
// MODIFIED : 
// AUTHOR   : Renesas Technology Corp.
// HARDWARE : RENESAS ITS-DS7
// HISTORY  : 
//            2005.02.03
//            - Created release code.
//                (based on PCCARD driver for ASPEN for WCE5.0)

//
// 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:

    PDSocket.c

Abstract:

    This file implements the PCMCIA model device driver initialization functions
    This is provided as a sample to platform writers and is
    expected to be able to be used without modification on most (if not
    all) hardware platforms.

Functions:


Notes:


--*/
#include <windows.h>
#include <types.h>
#include <socksv2.h>
#include <memory.h>
#include <ceddk.h>
#include <nkintr.h>
#include "PDSocket.h"

//------------------------------------------------------------------------------

#define DEFAULT_PRIORITY 101

#define ZONE_SOCKET ZONE_PDD

typedef struct _PCMCIA_INIT {
	ULONG reg_base;
	ULONG attr_win_base;
	ULONG cmn_win_base;
	ULONG io_win_base;
}PCMCIA_INIT;
PCMCIA_INIT v_PcmciaInit[NUM_SLOTS] = {
	{PCMCIA0_REG_BASE, FIRST_1MB_FROM_BASE0, SECOND_1MB_FROM_BASE0, THIRD_1MB_FROM_BASE0},
	{PCMCIA1_REG_BASE, FIRST_1MB_FROM_BASE1, SECOND_1MB_FROM_BASE1, THIRD_1MB_FROM_BASE1}
};

//------------------------------------------------------------------------------

CPCCardBusBridge::CPCCardBusBridge( LPCTSTR RegPath ) : CPCCardBusBridgeBase( RegPath ),
                                                        CMiniThread( 0, TRUE )
{
    m_dwCSCSysIntr = (DWORD)-1;
    for( int nSlot = 0; nSlot < NUM_SLOTS; nSlot++ )
    {
        m_rgPcmciaInterruptEvents[nSlot] = PCMCIA_INTERRUPT_NONE;
        m_rgdwFunctionSysIntr[nSlot] = (DWORD)-1;
        m_rgpCardSocket[nSlot] = NULL;
        m_rguSocketNum[nSlot] = (WORD)-1;
    }

    m_hISTEvent = NULL;
    m_hPcCardDriver = NULL;
    m_ResumeFlag = FALSE;
};


BOOL CPCCardBusBridge::Init()
{
    // bind to socket services
    if( !loadPcCardEntry() )
    {
        return FALSE;
    }

    // load registry settings
    if( !loadRequiredRegEntry() )
    {
        return FALSE;
    }

    // map and initialize the hardware
    if( !MapHardware() )
    {
        return FALSE;
    }

    // disable client interrupts
    for( int nSlot = 0; nSlot < NUM_SLOTS; nSlot++ )
    {
        EnableClientInterrupt( nSlot, FALSE );
    }

    // register the sockets with socket services
    for( int nSlot = 0; nSlot < NUM_SLOTS; nSlot++ )
    {
        if( !GetSocketNumberFromCS( nSlot, TRUE ) )
        {
            // unregister sockets
            for( int n = 0; n < nSlot; n++ )
            {
                GetSocketNumberFromCS( nSlot, FALSE );
            }
            return FALSE;
        }
    }

    // Configure the CSC Interrupt event
    m_hISTEvent = CreateEvent( 0, FALSE, FALSE, NULL );
    BOOL b = InterruptInitialize( m_dwCSCSysIntr, m_hISTEvent, 0, 0 );

    // Enable CSC interrupt
    EnableCSCInterrupts( TRUE );

    // Set CSC tread priority.
    CeSetPriority( m_uPriority );

    // run the CSC thrad
    bTerminated = FALSE;
    ThreadStart();

    return TRUE;
}

CPCCardBusBridge::~CPCCardBusBridge()
{
    // Terminate the CSC thread
    bTerminated = TRUE;
    if( m_hISTEvent )
    {
        SetEvent( m_hISTEvent );
        ThreadTerminated( 1000 );
        InterruptDisable( m_dwCSCSysIntr );         
        CloseHandle( m_hISTEvent );
    };

    // remove the sockets
    for( int nSlot = 0; nSlot < NUM_SLOTS; nSlot++ )
    {
        RemovePCardSocket( nSlot );
        if( m_rguSocketNum[nSlot] != ( UINT16 ) - 1 )
        {
            GetSocketNumberFromCS( nSlot, FALSE );
            m_rguSocketNum[nSlot] = ( UINT16 ) - 1;
        }
    }
}

DWORD CPCCardBusBridge::ThreadRun() // This is the card detect / card status change IST.
{
    // If card is inserted into the socket when system boot. It doesn't generate interrupt.
    // To solve this we have to set this thread first.
	BOOL fFirstTime[NUM_SLOTS];
	for( int n = 0; n < NUM_SLOTS; n++ )
	{
		fFirstTime[n] = TRUE;
	}
    SetEvent( m_hISTEvent );

    while( !bTerminated )
    {
        DEBUGCHK( m_hISTEvent != NULL );
        BOOL bInterrupt = ( WaitForSingleObject( m_hISTEvent, INFINITE ) !=
                            WAIT_TIMEOUT );
        if( !bInterrupt )
        {
            // Time out
#ifdef DEBUG
            WORD wChanged = READ_REGISTER_USHORT( m_rgPcmciaRegisters[0].pINTR );
            WORD wStatus = READ_REGISTER_USHORT( m_rgPcmciaRegisters[0].pCST );
			WORD wStatChangeIntEn = READ_REGISTER_USHORT( m_rgPcmciaRegisters[0].pINTC );
#endif
            continue;
        }

        if( m_ResumeFlag )
        {
            for( int nSlot = 0; nSlot < NUM_SLOTS; nSlot++ )
            {
                Lock();
                m_ResumeFlag = FALSE;
                if( m_rgpCardSocket[nSlot] )
                    m_rgpCardSocket[nSlot]->Resuming();
                Unlock();
            }
        }
        else
        {
            for( int nSlot = 0; nSlot < NUM_SLOTS; nSlot++ )
            {
                Lock();
                // read the card status change and card status registers
				WORD wChanged;
				if(nSlot) wChanged = m_pDriverGlobals->pcm.slot1Enable;
				else wChanged = m_pDriverGlobals->pcm.slot0Enable;
                WORD wStatus = READ_REGISTER_USHORT( m_rgPcmciaRegisters[nSlot].pCST );
				WORD wStatChangeIntEn = READ_REGISTER_USHORT( m_rgPcmciaRegisters[nSlot].pINTC );

/*
				// acknowledge the inteerupt, clear the card status change register bits
                if( wChanged & ( MR_SHPC_INTR_CARD_DETECT | MR_SHPC_INTR_STSCHG ) )
                {
					WORD wTemp = wChanged & ( MR_SHPC_INTR_CARD_DETECT | MR_SHPC_INTR_STSCHG );
					wTemp = ~wTemp;
					wTemp &= ~CC_PCMCIA_CSCR_GEN_CD_INT;
					wTemp |= CC_PCMCIA_CSCR_TPS2206_SEL;
                    WRITE_REGISTER_USHORT( m_rgPcmciaRegisters[nSlot].pCSCR, wTemp );
                }
*/
				if( fFirstTime[nSlot] )
				{
					fFirstTime[nSlot] = FALSE;
					wChanged |= MR_SHPC_INTR_CARD_DETECT;
				}
				else
				{
					// now lets record which interrupts can be cleared for the HAL
					if(nSlot)
					{
						m_pDriverGlobals->pcm.slot1Enable = wChanged;
					}
					else
					{
						m_pDriverGlobals->pcm.slot0Enable = wChanged;
					}
				}

                PCMCIA_INTERRUPT_EVENT otherEvent = m_rgPcmciaInterruptEvents[nSlot];
                m_rgPcmciaInterruptEvents[nSlot] = PCMCIA_INTERRUPT_NONE;

                Unlock();

                // Process CD events
                if( ( wChanged & MR_SHPC_INTR_CARD_DETECT ) ||
                    ( otherEvent == PCMCIA_INTERRUPT_FORCE_EJECT ) )
                {
                    if( m_rgpCardSocket[nSlot] != NULL )
                    {
                        RemovePCardSocket( nSlot );
                    }
                    if( IsCardInserted( nSlot ) )
                    {
                        InsertPCardSocket( nSlot, CreatePCMCIASocket( nSlot, this ) );

						if(nSlot) m_pDriverGlobals->pcm.slot1Enable &= (~MR_SHPC_INTR_CARD_DETECT);
						else m_pDriverGlobals->pcm.slot0Enable &= (~MR_SHPC_INTR_CARD_DETECT);
                    }
                }
                else // process other events
                {
                    if( IsCardInserted( nSlot ) )
                    {
                        if( m_rgpCardSocket[nSlot] && otherEvent != PCMCIA_INTERRUPT_NONE )
                        {
                            m_rgpCardSocket[nSlot]->SocketEventHandle( nSlot, wChanged, wStatus, otherEvent );
                        }
                    }
                }
            } // for
        } // if
        DEBUGMSG( ZONE_FUNCTION,
                  ( L"PCCard: PCCard Bus Call InterruptDone\r\n" ) );
        InterruptDone( m_dwCSCSysIntr );
    } // while
    return 0;
}

BOOL CPCCardBusBridge::SetInterruptEvent( int nSlot, PCMCIA_INTERRUPT_EVENT pcmIntrEvent )
{
    Lock();
    m_rgPcmciaInterruptEvents[nSlot] = pcmIntrEvent;
    SetEvent( m_hISTEvent );
    Unlock();
    return TRUE;
}

BOOL CPCCardBusBridge::NeedPowerResuming()
{
    m_ResumeFlag = TRUE;
    ::SetInterruptEvent( m_dwCSCSysIntr );
    return TRUE;
}

void CPCCardBusBridge::PowerMgr( BOOL bPowerDown )

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91麻豆精东视频| 成人精品一区二区三区中文字幕 | 国产精品久久久爽爽爽麻豆色哟哟| 欧美一区二区在线免费观看| 欧美巨大另类极品videosbest | 国产欧美一区在线| 国产精品嫩草影院com| 亚洲日本va午夜在线电影| 亚洲视频狠狠干| 亚洲精选免费视频| 亚洲一区在线视频观看| 午夜视频一区在线观看| 麻豆国产精品777777在线| 久久精品久久精品| 亚洲第一福利视频在线| 亚洲嫩草精品久久| 免费观看91视频大全| 成人黄色国产精品网站大全在线免费观看| 国产盗摄精品一区二区三区在线| 9i在线看片成人免费| 欧美精品 国产精品| 中文字幕的久久| 免费视频一区二区| 色一情一乱一乱一91av| 日韩欧美电影一区| 亚洲综合在线第一页| 国产精华液一区二区三区| 欧美精品在线一区二区三区| 国产精品人妖ts系列视频| 麻豆专区一区二区三区四区五区| 97精品久久久午夜一区二区三区| 91精品国产综合久久精品app| 国产清纯白嫩初高生在线观看91 | 日韩三级电影网址| 亚洲国产另类精品专区| 成人av在线一区二区三区| 日韩视频一区二区| 首页国产欧美久久| 欧美亚洲禁片免费| 一区二区免费看| 欧美视频在线播放| 香蕉乱码成人久久天堂爱免费| 91国偷自产一区二区使用方法| 国产精品久久久久一区| 成人免费视频免费观看| 国产精品美女一区二区| 91影院在线免费观看| 一区二区三区在线免费播放| 精品系列免费在线观看| 欧美色大人视频| 蜜桃视频一区二区三区| 久久久电影一区二区三区| 国产乱妇无码大片在线观看| 欧美高清在线视频| 日本精品一区二区三区高清| 亚洲国产精品久久久久秋霞影院| 欧美午夜精品一区二区三区 | 制服丝袜亚洲播放| 国产成人免费在线观看| 亚洲最大成人综合| 日韩免费成人网| 色综合色综合色综合| 日本中文字幕一区二区视频| 日韩一区二区在线看片| 国产盗摄一区二区| 一区二区三区鲁丝不卡| 欧美午夜精品一区| 国产jizzjizz一区二区| 首页欧美精品中文字幕| 国产精品国产自产拍高清av| 日韩欧美中文字幕一区| 色综合久久99| 国产91精品一区二区麻豆网站| 亚洲永久免费视频| 国产精品伦一区二区三级视频| 日韩午夜精品视频| 欧美高清性hdvideosex| 91国内精品野花午夜精品| 国产一区二区主播在线| 日本不卡不码高清免费观看| 亚洲自拍偷拍九九九| 自拍偷拍国产精品| 一区视频在线播放| 欧美国产激情二区三区| 国产欧美视频在线观看| 国产欧美精品一区二区色综合| 日韩亚洲欧美在线| 久久这里只有精品6| 2023国产精华国产精品| 成人国产在线观看| 国内外成人在线视频| 精品一区二区免费在线观看| 日韩av电影免费观看高清完整版 | 日韩欧美国产午夜精品| 日韩欧美中文字幕制服| 久久久久久亚洲综合影院红桃| 久久久精品免费免费| 欧美成人猛片aaaaaaa| 亚洲精品一区二区三区在线观看| 2021国产精品久久精品| 国产偷国产偷精品高清尤物| 一区精品在线播放| 婷婷开心激情综合| 成人午夜激情影院| 欧美日韩mp4| 国产亚洲精品超碰| 日韩精品亚洲专区| 99国产精品99久久久久久| 欧美另类一区二区三区| 国产日产欧美精品一区二区三区| 一区二区在线观看视频| 国产又粗又猛又爽又黄91精品| 色偷偷久久一区二区三区| 欧美电影免费观看高清完整版在线观看 | 欧美精品vⅰdeose4hd| 国产亚洲制服色| 日韩黄色免费电影| 91在线免费视频观看| 久久久精品国产99久久精品芒果| 亚洲午夜精品17c| 国产一二精品视频| 日韩欧美一级在线播放| 一区二区三区四区在线| 不卡一区二区在线| 国产精品视频在线看| 一区二区久久久| 精品亚洲aⅴ乱码一区二区三区| 色94色欧美sute亚洲线路一ni | 精品无人区卡一卡二卡三乱码免费卡 | 色婷婷av一区二区三区大白胸 | 99这里只有精品| 国产欧美精品一区二区色综合朱莉| 日韩极品在线观看| 日韩欧美激情四射| 国产精品白丝jk白祙喷水网站 | 久久国产精品99久久久久久老狼| 91精品国产一区二区人妖| 亚洲综合av网| 3d动漫精品啪啪一区二区竹菊 | 国产成人自拍网| 久久久国产午夜精品 | 中文字幕久久午夜不卡| 高清不卡在线观看| 夜夜嗨av一区二区三区| 欧美日韩国产乱码电影| 欧美aaaaa成人免费观看视频| 欧美精品一区二区三区视频| 成人福利在线看| 亚洲午夜一区二区| 2023国产精品视频| 99精品视频在线观看免费| 亚洲成a人片综合在线| 精品久久国产老人久久综合| 成人做爰69片免费看网站| 亚洲在线中文字幕| 精品蜜桃在线看| 欧美日韩国产高清一区二区| 国产一区91精品张津瑜| 亚洲国产裸拍裸体视频在线观看乱了 | 久久综合av免费| 亚洲成人自拍偷拍| 久久精品视频一区二区| 欧洲视频一区二区| 国产不卡高清在线观看视频| 日韩精品一二三| 亚洲综合一区二区| 国产精品久久久久永久免费观看| 日韩精品专区在线影院观看| 欧美日韩免费一区二区三区视频| 成人一区在线看| eeuss影院一区二区三区| 成人自拍视频在线| 国产在线日韩欧美| 久久99最新地址| 久久99久久99| 精品亚洲porn| 高清不卡一二三区| 99国产精品99久久久久久| av福利精品导航| 99久久99久久免费精品蜜臀| 成人午夜免费av| 91丨porny丨蝌蚪视频| 国产一区二区精品久久| 国产精品中文字幕日韩精品| 国产精品66部| 91免费在线视频观看| 色老头久久综合| 日韩欧美国产三级| 国产日产欧美一区| 最新成人av在线| 日韩国产欧美在线观看| 国产激情一区二区三区桃花岛亚洲| 国产精品一区免费视频| 91丨porny丨国产| 欧美一二区视频| 亚洲人成影院在线观看| 另类成人小视频在线| 91香蕉视频污| 欧美成人a视频| 亚洲一区二区在线观看视频|