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

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

?? pdsocket.cpp

?? WinCE5.0BSP for Renesas SH7770
?? CPP
?? 第 1 頁 / 共 3 頁
字號(hào):
//
//  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
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
精品粉嫩aⅴ一区二区三区四区| 亚洲国产一二三| 美女一区二区在线观看| 91国偷自产一区二区三区成为亚洲经典| 欧美欧美午夜aⅴ在线观看| 亚洲精品一卡二卡| 在线视频国产一区| 亚洲欧美乱综合| 成人免费高清在线观看| 中文字幕精品三区| 成人精品视频一区二区三区尤物| 久久久91精品国产一区二区精品| 精品一区二区日韩| www激情久久| 91在线视频官网| 亚洲欧美怡红院| 欧美在线短视频| 麻豆91精品91久久久的内涵| 欧美一区二区三区免费观看视频 | 韩国v欧美v日本v亚洲v| 久久久久久电影| 91成人在线免费观看| 奇米精品一区二区三区在线观看| 欧美mv日韩mv| 91在线观看污| 久久精品国产精品亚洲精品| 国产香蕉久久精品综合网| 91丝袜呻吟高潮美腿白嫩在线观看| 亚洲精品视频免费看| 日韩天堂在线观看| 91美女片黄在线观看91美女| 视频一区二区国产| 国产精品久久久久久户外露出| 欧美视频中文字幕| 欧美日韩黄视频| 7777精品伊人久久久大香线蕉超级流畅| 日本一区二区久久| 欧美日韩国产精选| 亚洲综合在线五月| 国产亚洲福利社区一区| 欧美日韩激情一区二区三区| 韩国女主播一区二区三区| 国产精品国产三级国产| 日韩一区二区精品在线观看| 色综合久久综合网97色综合| 久久成人综合网| 亚洲精品中文在线观看| 国产精品丝袜91| 国产欧美一区二区精品婷婷| 91精品中文字幕一区二区三区| 91理论电影在线观看| 丁香六月久久综合狠狠色| 久久99精品久久久| 极品美女销魂一区二区三区免费| 性做久久久久久免费观看欧美| 亚洲一区二区四区蜜桃| 亚洲美女淫视频| 亚洲韩国精品一区| 亚洲第一电影网| 蜜臀a∨国产成人精品| 美国毛片一区二区三区| 国产一二精品视频| 成人午夜短视频| 在线看不卡av| 91精品国产综合久久久久久漫画| 69堂亚洲精品首页| 精品成人一区二区三区四区| 国产日韩欧美亚洲| 中文字幕亚洲精品在线观看| 一区二区三区四区不卡在线| 一区二区三区四区蜜桃| 天天做天天摸天天爽国产一区 | 亚洲另类春色校园小说| 一区二区不卡在线播放| 青青草91视频| 成人免费观看男女羞羞视频| 欧美日韩一区二区三区视频| 欧美成人video| 亚洲激情男女视频| 国内外成人在线视频| 在线观看精品一区| 久久精品欧美一区二区三区麻豆| 亚洲视频一区在线| 国产一区二区三区在线观看免费 | 国产免费成人在线视频| 奇米888四色在线精品| 色悠悠久久综合| 国产亚洲视频系列| 男人操女人的视频在线观看欧美| av电影天堂一区二区在线观看| 欧美精品第1页| 亚洲自拍另类综合| 91女厕偷拍女厕偷拍高清| ww久久中文字幕| 国模无码大尺度一区二区三区| 欧美在线一区二区三区| 成人欧美一区二区三区1314| 国产电影精品久久禁18| 这里只有精品免费| 午夜精品久久久久久久蜜桃app| 波多野结衣在线一区| 国产欧美精品国产国产专区| 国产精品亚洲视频| 91久久一区二区| 欧美视频中文字幕| 中文字幕一区二区三区av| 夫妻av一区二区| 国产精品你懂的| 91一区二区在线观看| 亚洲精品亚洲人成人网| 欧美在线一区二区| 蜜桃91丨九色丨蝌蚪91桃色| 日韩亚洲欧美高清| 国产成人精品免费一区二区| 国产精品久久久久aaaa| 91福利在线看| 欧美96一区二区免费视频| 久久婷婷久久一区二区三区| 国产一区不卡在线| 亚洲美女偷拍久久| 精品国产髙清在线看国产毛片| 韩国中文字幕2020精品| 综合中文字幕亚洲| 日韩一区二区精品葵司在线| 成人国产精品视频| 青青草原综合久久大伊人精品 | 欧美日韩成人在线| 久久精品国产成人一区二区三区 | 亚洲成人自拍网| 国产清纯美女被跳蛋高潮一区二区久久w| 国产精品一二三四区| 亚洲国产精品欧美一二99| 国产亚洲精品超碰| 欧美一区二区在线不卡| 99国产一区二区三精品乱码| 麻豆91在线看| 日一区二区三区| 亚洲激情图片小说视频| 日韩毛片精品高清免费| 久久久噜噜噜久久中文字幕色伊伊 | 欧美日韩在线播放三区| 国产一区91精品张津瑜| 强制捆绑调教一区二区| 婷婷久久综合九色国产成人 | 亚洲国产精品av| 国产午夜久久久久| 久久久精品欧美丰满| 日韩欧美国产1| 日韩一区二区免费在线电影| 欧美美女bb生活片| 欧美久久高跟鞋激| 91精品黄色片免费大全| 欧美色综合影院| 91麻豆精品国产91久久久资源速度| 欧美美女网站色| 精品少妇一区二区三区日产乱码 | 国产黄色成人av| 国产精品综合网| 99久久久国产精品免费蜜臀| 成年人网站91| 欧美美女一区二区三区| 日韩一本二本av| 日本一区二区三区高清不卡| 日本一区二区成人| 亚洲一区二区三区四区的| 日本少妇一区二区| 国产成人激情av| 欧美日韩国产小视频| 欧美mv和日韩mv国产网站| 亚洲欧美一区二区三区孕妇| 日韩精品亚洲专区| 色国产综合视频| 奇米影视一区二区三区| 韩国成人在线视频| 欧美精品黑人性xxxx| 青娱乐精品视频| 日本不卡视频在线观看| 中文字幕第一区综合| 亚洲大片一区二区三区| 精品国产一区二区三区久久影院 | 久久久久久久久久久电影| 精品国产乱码久久久久久图片 | 一区二区欧美国产| 欧美一区三区四区| 成人av资源在线观看| caoporn国产精品| 国产一区二区免费视频| 99久久伊人精品| 色婷婷精品久久二区二区蜜臂av| 欧美日本精品一区二区三区| 欧美男人的天堂一二区| 亚洲精品一区二区三区影院| 精品久久久久久久久久久院品网| 夜夜精品浪潮av一区二区三区| 精品久久久久久久久久久久久久久久久| 136国产福利精品导航| 一区在线播放视频| 欧美中文字幕一区二区三区| 国产夫妻精品视频| 制服.丝袜.亚洲.另类.中文|