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

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

?? pdsocket.cpp

?? 基于s3c2440A的wince5.0 pccard driver
?? CPP
?? 第 1 頁 / 共 3 頁
字號:
//
// 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:

    Platform dependent PCMCIA initialization functions

Notes: 
--*/
#include <windows.h>
#include <types.h>
#include <socksv2.h>
#include <memory.h>
#include <ceddk.h>
#include <nkintr.h>

#include "PDSocket.h"
//
// @doc DRIVERS
//


#define REG_CHIP_REVISION                    0x00
#define REG_INTERFACE_STATUS                 0x01
#define REG_POWER_CONTROL                    0x02
#define REG_INTERRUPT_AND_GENERAL_CONTROL    0x03
#define REG_CARD_STATUS_CHANGE               0x04
#define REG_STATUS_CHANGE_INT_CONFIG         0x05
#define REG_GENERAL_CONTROL					 0x16
#define REG_GLOBAL_CONTROL                   0x1E
#define REG_FIFO_CTRL						 0x17

//
// Interface status register 0x01
//
#define STS_BVD1                             0x01
#define STS_BVD2                             0x02
#define STS_CD1                              0x04
#define STS_CD2                              0x08
#define STS_WRITE_PROTECT                    0x10
#define STS_CARD_READY                       0x20
#define STS_CARD_POWER_ON                    0x40
#define STS_GPI                              0x80

//
// Power and RESETDRV control register 0x02
//
#define PWR_VPP1_BIT0							0x01
#define PWR_VPP1_BIT1							0x02
#define PWR_VPP2_BIT0							0x04
#define PWR_VPP2_BIT1							0x08
#define PWR_VCC_POWER							0x10
#define PWR_AUTO_POWER 							0x20
#define PWR_RESUME_RESET						0x40
#define PWR_OUTPUT_ENABLE 						0x80

//
// Interrupt and general control register 0x03
//
#define INT_IRQ_BIT0                         0x01
#define INT_IRQ_BIT1                         0x02
#define INT_IRQ_BIT2                         0x04
#define INT_IRQ_BIT3                         0x08
#define INT_ENABLE_MANAGE_INT                0x10
#define INT_CARD_IS_IO                       0x20
#define INT_CARD_NOT_RESET                   0x40
#define INT_RING_INDICATE_ENABLE             0x80

//
// Card Status change register 0x04
//
#define CSC_BATTERY_DEAD_OR_STS_CHG          0x01
#define CSC_BATTERY_WARNING                  0x02
#define CSC_READY_CHANGE                     0x04
#define CSC_DETECT_CHANGE                    0x08
#define CSC_GPI_CHANGE                       0x10

//
// Card Status change interrupt configuration register 0x05
//
#define CFG_BATTERY_DEAD_ENABLE              0x01
#define CFG_BATTERY_WARNING_ENABLE           0x02
#define CFG_READY_ENABLE                     0x04
#define CFG_CARD_DETECT_ENABLE               0x08
#define CFG_MANAGEMENT_IRQ_BIT0              0x10
#define CFG_MANAGEMENT_IRQ_BIT1              0x20
#define CFG_MANAGEMENT_IRQ_BIT2              0x40
#define CFG_MANAGEMENT_IRQ_BIT3              0x80


//
// MISC Control 1 register 0x16
//
#define MISC1_5V_DETECT							0x01
#define MISC1_VCC_33							0x02
#define MISC1_PM_IRQ							0x04
#define MISC1_PS_IRQ							0x08
#define MISC1_SPK_ENABLE						0x10
#define MISC1_INPACK_ENABLE						0x80

//
// FIFO Control register 0x17
//
#define FIFO_EMPTY_WRITE						0x80

//
// MISC Control 2 register  0x1E
//
#define MISC2_BFS								0x01
#define MISC2_LOW_POWER_MODE					0x02
#define MISC2_SUSPEND							0x04
#define MISC2_5V_CORE							0x08
#define MISC2_LED_ENABLE						0x10
#define MISC2_3STATE_BIT7						0x20
#define MISC2_IRQ15_RIOUT						0x80

//
// Global control register 0x1E
//
#define GCR_POWER_DOWN                       0x01
#define GCR_LEVEL_MODE_INT                   0x02
#define GCR_WRITE_BACK_ACK                   0x04
#define GCR_PULSE_IRQ14                      0x08

// more PD6710 specific flags
#define REG_CARD_IO_MAP0_OFFSET_L 				0x36
#define REG_CARD_IO_MAP0_OFFSET_H 				0x37
#define REG_CARD_IO_MAP1_OFFSET_L 				0x38
#define REG_CARD_IO_MAP1_OFFSET_H 				0x39
#define REG_SETUP_TIMING0						0x3a
#define REG_CMD_TIMING0							0x3b
#define REG_RECOVERY_TIMING0					0x3c
#define REG_SETUP_TIMING1						0x3d
#define REG_CMD_TIMING1							0x3e
#define REG_RECOVERY_TIMING1					0x3f
#define REG_LAST_INDEX 							REG_RECOVERY_TIMING1

#define EVENT_MASK_WRITE_PROTECT    0x0001 // write protect change
#define EVENT_MASK_CARD_LOCK        0x0002 // card lock change
#define EVENT_MASK_EJECT_REQ        0x0004 // ejection request
#define EVENT_MASK_INSERT_REQ       0x0008 // insertion request
#define EVENT_MASK_BATTERY_DEAD     0x0010 // battery dead
#define EVENT_MASK_BATTERY_LOW      0x0020 // battery low
#define EVENT_MASK_CARD_READY       0x0040 // ready change
#define EVENT_MASK_CARD_DETECT      0x0080 // card detect change
#define EVENT_MASK_POWER_MGMT       0x0100 // power management change
#define EVENT_MASK_RESET            0x0200 // card resets
#define EVENT_MASK_STATUS_CHANGE    0x0400 // card generated status change interrupts

//////////////////////////////////////////////////////////////////////////

//#define PCMCIA_DRIVER_KEY TEXT("Drivers\\PCMCIA")
#define IRQ_VALUE_NAME TEXT("Irq")
#define CHIPSET_VALUE_NAME TEXT("Chipset")
#define DEVICEID_VALUE_NAME TEXT("DeviceID")
#define POLLEDDEVICES_VALUE_NAME TEXT("PolledDevices")
#define CSC_SYSINTR_VALUE_NAME TEXT("CSCSysIntr")
#define CSC_IRQ_VALUE_NAME TEXT("CSCIrq")
#define POLL_TIMEOUT_NAME TEXT("PollTimeout")
#define POLLING_MODE_NAME TEXT("PollingMode")
#define DISABLE_SOCKET_NAME TEXT("DisableSocket")

#define CHIPSET_ID_CNT 32
#define CHIPSET_ID_LEN ((CHIPSET_ID_CNT * 9) + 1)

const SS_POWER_ENTRY CPcmciaCardSocket::m_rgPowerEntries[NUM_POWER_ENTRIES] =
{
    { 0,    PWR_SUPPLY_VCC | PWR_SUPPLY_VPP1 | PWR_SUPPLY_VPP2 },
    { 33,   PWR_SUPPLY_VCC                                     },
    { 50,   PWR_SUPPLY_VCC | PWR_SUPPLY_VPP1 | PWR_SUPPLY_VPP2 },
    { 120,                   PWR_SUPPLY_VPP1 | PWR_SUPPLY_VPP2 }
};
DWORD CPcmciaCardSocket::ms_dwSocketLastIndex = 1;

CPcmciaCardSocket::CPcmciaCardSocket( CPcmciaBusBridge* pBridge )
{
    m_pBridge = pBridge;
    m_dwSocketIndex = 0;
    while( m_dwSocketIndex == 0 )
    {
        m_dwSocketIndex = ( DWORD )
                          InterlockedIncrement( ( LONG * ) &ms_dwSocketLastIndex ); 
        //Make it is it does not exist.
        CPcmciaCardSocket* pSocket = GetSocket( ( HANDLE ) m_dwSocketIndex );
        if( pSocket != NULL )
        {
            // Duplicated , Retry.
            m_dwSocketIndex = 0;
            pSocket->DeRef();
        }
    }

    DEBUGCHK( m_pBridge );
    while( m_pBridge->LockOwner( 1000 ) != TRUE )
    {
        DEBUGCHK( FALSE );
    }
    DEBUGMSG( ZONE_INIT,
              ( TEXT( "CARDBUS: CPcmciaCardSocket (Socket=%d Index=%d) Created\r\n" ),
                GetSlotNumber(),
                GetSocketHandle() ) );
}

CPcmciaCardSocket::~CPcmciaCardSocket()
{
    m_pBridge->ReleaseOwner();
    DEBUGMSG( ZONE_INIT,
              ( TEXT( "CARDBUS: CPcmciaCardSocket (Socket=%d Index=%d) Deleted\r\n" ),
                GetSlotNumber(),
                GetSocketHandle() ) );
}

STATUS CPcmciaCardSocket::GetPowerEntry( PDWORD pdwNumOfEnery,
                                         PSS_POWER_ENTRY pPowerEntry )
{
    STATUS status = CERR_BAD_ARGS;
    if( pdwNumOfEnery != NULL && pPowerEntry != NULL )
    {
        DWORD dwNumOfCopied = min( *pdwNumOfEnery, NUM_POWER_ENTRIES );
        if( dwNumOfCopied != 0 )
        {
            memcpy( pPowerEntry,
                    m_rgPowerEntries,
                    dwNumOfCopied * sizeof( SS_POWER_ENTRY ) );
            *pdwNumOfEnery = dwNumOfCopied;
            status = CERR_SUCCESS;
        }
    }
    return status;
}

UINT16 CPcmciaCardSocket::GetSocketNo()
{
    return m_pBridge->GetSocketNo( GetSlotNumber() );
};

CPcmciaBusBridge::CPcmciaBusBridge( LPCTSTR RegPath ) : CPCCardBusBridgeBase( RegPath ),
                                                        CMiniThread( 0,
                                                                     TRUE )
{
    m_fPCICCritSecInitialized = false;
    m_pCardBusResource = NULL;
    m_hISTEvent = NULL;
    m_dwSocketLowBound = 0;
    m_dwSocketHighBound = NUM_SLOTS - 1;
    for( UINT8 nSocket = m_dwSocketLowBound;
         nSocket <= m_dwSocketHighBound;
         nSocket++ )
    {
        m_rguSocketNum[nSocket] = ( WORD ) - 1;
        m_prgCardSocket[nSocket] = NULL;
        m_rgfPowerCycleEvent[nSocket] = FALSE;
        m_rgfCardInjectEvent[nSocket] = FALSE;
    }
    m_fPollingMode = TRUE;
};


CPcmciaBusBridge::~CPcmciaBusBridge()
{
    // Terminate IST
    m_bTerminated = TRUE;
    if( m_hISTEvent )
    {
        SetEvent( m_hISTEvent );
        ThreadTerminated( 1000 );
        if( !m_fPollingMode )
        {
            InterruptDisable( m_dwCSCSysIntr );
        }
        CloseHandle( m_hISTEvent );
    };

    for( UINT8 nSocket = GetSocketLowBound();
         nSocket <= GetSocketHighBound();
         nSocket++ )
    {
        if( m_rguSocketNum[nSocket] != ( UINT16 ) - 1 )
        {
            GetSocketNumberFromCS( nSocket, FALSE );
            m_rguSocketNum[nSocket] = ( UINT16 ) - 1;
        }

        RemovePcmciaCardSocket( nSocket );
    }
    if( m_pCardBusResource != NULL )
    {
        delete  m_pCardBusResource;
    }
    if( m_fPCICCritSecInitialized )
    {
        DeleteCriticalSection( &m_PCICCritSec );
    }
}

BOOL CPcmciaBusBridge::InstallIsr()
{
    UINT8 tmp;

    for( UINT8 nSocket = GetSocketLowBound();
         nSocket <= GetSocketHighBound();
         nSocket++ )
    {
        //
        // Disable interrupts
        //
        WritePCICRegister( nSocket, REG_INTERRUPT_AND_GENERAL_CONTROL, 0 );

	    // Management int -> edge triggering(PULSE), System int -> LEVEL triggering 
        WritePCICRegister( nSocket, REG_GENERAL_CONTROL, MISC1_VCC_33|MISC1_PM_IRQ|MISC1_SPK_ENABLE );
        UINT8 bPat = ReadPCICRegister( nSocket, REG_GENERAL_CONTROL );
	    // 25Mhz_bypass,low_power_dynamic,IRQ12=drive_LED
	    WritePCICRegister( nSocket, REG_GLOBAL_CONTROL, MISC2_LOW_POWER_MODE|MISC2_LED_ENABLE);

	    // before configuring timing register, FIFO should be cleared.
	    WritePCICRegister( nSocket, REG_FIFO_CTRL, FIFO_EMPTY_WRITE);    //Flush FIFO

	    //default access time is 300ns
	    WritePCICRegister( nSocket, REG_SETUP_TIMING0, 5);                   //80ns(no spec)
	    WritePCICRegister( nSocket, REG_CMD_TIMING0, 20);                  //320ns(by spec,25Mhz clock)
	    WritePCICRegister( nSocket, REG_RECOVERY_TIMING0, 5);                   //80ns(no spec)

	    //default access time is 300ns
	    WritePCICRegister( nSocket, REG_SETUP_TIMING1, 2);                   //80ns(no spec)
	    WritePCICRegister( nSocket, REG_CMD_TIMING1, 8);                   //320ns(by spec,25Mhz clock)
	    WritePCICRegister( nSocket, REG_RECOVERY_TIMING1, 2);                   //80ns(no spec)

        if( !m_fPollingMode )
        {

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美一二三区精品| 国产91综合一区在线观看| 国产日韩视频一区二区三区| 91精品一区二区三区在线观看| 91丝袜美腿高跟国产极品老师| 国产大片一区二区| 国产一区二区成人久久免费影院 | 亚洲一二三四在线| 有坂深雪av一区二区精品| 亚洲另类春色国产| 亚洲伦在线观看| 亚洲宅男天堂在线观看无病毒| 一个色综合网站| 亚洲高清免费观看| 麻豆国产欧美日韩综合精品二区| 免费在线一区观看| 国产精品一区二区久激情瑜伽 | 成人av在线影院| 波多野结衣在线一区| 色偷偷一区二区三区| 欧美亚洲日本国产| 日韩精品一区二区三区swag| 久久久久成人黄色影片| √…a在线天堂一区| 亚洲视频你懂的| 午夜国产不卡在线观看视频| 日韩av在线播放中文字幕| 国产精品一二三四五| av在线不卡网| 91精品免费观看| 国产精品欧美一区喷水| 亚洲在线中文字幕| 国产乱码一区二区三区| 91亚洲精品乱码久久久久久蜜桃| 欧美日韩一级视频| 久久久久久久久蜜桃| 亚洲人精品午夜| 成人黄色a**站在线观看| 99久久伊人精品| 在线电影欧美成精品| 国产三级精品三级| 亚洲影院理伦片| 国产精品自产自拍| 欧美高清视频一二三区| 中国av一区二区三区| 日韩电影免费在线观看网站| 成人精品一区二区三区四区 | 欧美日韩精品一区二区三区四区 | 国产乱码精品一区二区三区av| 色噜噜久久综合| 久久久不卡影院| 天天综合色天天| av网站一区二区三区| 欧美大度的电影原声| 亚洲午夜精品久久久久久久久| 国产一区 二区 三区一级| 在线精品视频免费播放| 国产精品婷婷午夜在线观看| 日本午夜一区二区| 在线观看欧美黄色| 国产欧美精品日韩区二区麻豆天美| 亚洲国产人成综合网站| 97精品国产97久久久久久久久久久久| 精品久久国产97色综合| 日韩精品福利网| 欧美三级视频在线观看| 一区二区三区毛片| 日本道在线观看一区二区| 中文字幕佐山爱一区二区免费| 国产黄色91视频| 久久精品一区二区三区不卡| 极品少妇一区二区三区精品视频| 欧美老肥妇做.爰bbww| 天天色 色综合| 欧美性生活久久| 一区二区三区四区亚洲| 日本韩国欧美一区| 一区二区三区视频在线看| 在线免费精品视频| 亚洲专区一二三| 欧美电影在线免费观看| 日日夜夜精品视频免费| 欧美一区二区性放荡片| 美国一区二区三区在线播放| 日韩一二三四区| 国产毛片精品视频| 中文字幕第一区第二区| jiyouzz国产精品久久| 日韩美女视频一区二区| 一本一本久久a久久精品综合麻豆| 日韩美女视频19| 欧美日韩国产片| 日本不卡高清视频| 久久久亚洲精品石原莉奈| 国产乱国产乱300精品| 中文字幕乱码日本亚洲一区二区| 不卡一区二区中文字幕| 亚洲自拍偷拍av| 欧美xxxxxxxx| av一区二区不卡| 亚洲精品视频在线看| 欧美夫妻性生活| 国产成人福利片| 中文字幕一区免费在线观看| 91福利精品视频| 日本美女一区二区三区| 欧美激情综合五月色丁香| 在线视频国内自拍亚洲视频| 日本视频一区二区三区| 国产三级精品视频| 欧美系列一区二区| 国产综合色精品一区二区三区| 国产精品不卡视频| 91精品国产高清一区二区三区| 极品少妇一区二区三区精品视频| 中文字幕日韩一区| 欧美成人乱码一区二区三区| 成人中文字幕电影| 日本成人在线看| 亚洲欧美综合在线精品| 日韩免费看网站| 色欧美88888久久久久久影院| 麻豆精品一区二区三区| 亚洲色欲色欲www| 久久天堂av综合合色蜜桃网| 色噜噜狠狠色综合中国| 国产suv精品一区二区6| 日韩电影一区二区三区四区| 亚洲精品视频在线观看免费 | 国产精品国产精品国产专区不蜜| 欧美日韩视频一区二区| 成人av在线观| 久久99国产精品免费| 夜夜亚洲天天久久| 国产精品无人区| 精品国精品国产| 欧美精品乱人伦久久久久久| 成人一区在线观看| 国内偷窥港台综合视频在线播放| 亚洲综合在线视频| 17c精品麻豆一区二区免费| 精品人伦一区二区色婷婷| 欧美日韩亚洲综合一区二区三区| 97久久超碰精品国产| 国产乱码精品一区二区三区忘忧草 | 青娱乐精品视频| 亚洲综合色噜噜狠狠| 亚洲欧美日韩国产综合在线| 中文字幕av一区二区三区免费看 | 色婷婷久久一区二区三区麻豆| 国产精品一区在线观看乱码| 免费成人小视频| 奇米精品一区二区三区在线观看一| 一区二区欧美在线观看| 亚洲免费在线视频| 亚洲三级电影网站| 国产精品久久影院| 国产精品久久久久久亚洲毛片| 久久嫩草精品久久久精品| 26uuu亚洲| 国产欧美一区二区在线| 国产精品福利一区二区三区| 国产精品色婷婷久久58| 中文字幕一区av| 综合在线观看色| 一区二区三区在线视频观看| 亚洲一区视频在线| 日韩一区精品视频| 久久精品国产第一区二区三区| 蜜臀精品一区二区三区在线观看| 国内成人自拍视频| 成人爽a毛片一区二区免费| av网站一区二区三区| 91成人看片片| 欧美一级二级在线观看| 国产日产欧产精品推荐色 | 欧美在线色视频| 欧美一区二区三区视频免费 | 国产精品久久午夜| 亚洲综合区在线| 老司机午夜精品99久久| 国产自产视频一区二区三区| 成人免费视频国产在线观看| 97久久精品人人做人人爽| 欧美综合在线视频| 久久综合九色综合97_久久久| 亚洲欧美偷拍三级| 日韩电影在线观看电影| 成人av在线影院| 制服丝袜亚洲网站| 国产精品午夜免费| 日本网站在线观看一区二区三区| 成人一区在线观看| 3d成人动漫网站| 亚洲人成在线播放网站岛国| 久88久久88久久久| 一本色道久久综合精品竹菊| 精品国产凹凸成av人网站| 亚洲国产日产av| 成人高清视频在线|