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

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

?? socket.c

?? 收集到的orion_ep93xx_wince_bsp_1-3-507 pcmcia卡驅動源碼,未作測試
?? C
?? 第 1 頁 / 共 2 頁
字號:
//**********************************************************************
//                                                                      
// Filename: socket.c
//                                                                      
// Description: Routines to set/return the sockets paramaters.
//
// 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.
//
// Use of this source code is subject to the terms of the Cirrus 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.
//
// Copyright(c) Cirrus Logic Corporation 2002, All Rights Reserved                       
//                                                                      
//**********************************************************************
#include <windows.h>
#include <types.h>
#include <cardserv.h>
#include <sockserv.h>
#include <sockpd.h>
#include <memory.h>
#include <hwdefs.h>


//#define FORCE_POLLING 1

//
// CEPC PCMCIA Socket Services Socket APIs:
//    PDCardInquireSocket
//    PDCardGetSocket
//    PDCardSetSocket
//    PDCardInquireAdapter
//

#define NUM_SOCKETS         1
#define NUM_POWER_ENTRIES   4
#define VCC_DEFAULT_INDEX   2

//
// @doc DRIVERS
//
PDCARD_ADAPTER_INFO v_AdapterInfo = 
{
    1,  // memory granularity (for production platforms, this should be 1)
    0,  // adapter capabilities
    8,  // cache line size in 32-bit words
    NUM_POWER_ENTRIES
};

//
// These #defs must match how the v_PowerEntries[] table entry #defines below
// are arranged.  (This simplifies the code in other areas).
//
#define VCC_0V_INDEX    0
#define VPP1_0V_INDEX   0
#define VPP2_0V_INDEX   0
#define VCC_33V_INDEX   1
#define VCC_50V_INDEX   2
#define VPP1_120V_INDEX 3

PDCARD_POWER_ENTRY v_PowerEntries[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 }
};

PDCARD_SOCKET_STATE v_SockState[NUM_SOCKETS] = 
{
    {
        SOCK_CAP_IO,
        EVENT_MASK_BATTERY_DEAD|EVENT_MASK_BATTERY_LOW|EVENT_MASK_CARD_DETECT|
        EVENT_MASK_WRITE_PROTECT,   // status change interrupt mask
        0,  // present socket state
        0,  // control and indicators
        0,  // interface type
        0,  // Vcc
        0,  // Vpp1
        0   // Vpp2
    },
};

PDCARD_ADAPTER_STATE v_AdapterState[NUM_SOCKETS] = {ADP_STATE_POWEROFF};



extern DWORD g_Irq; // PCMCIA IRQ set in init.c

//****************************************************************************
// InitSocketNoCard
//****************************************************************************
// Set the socket controller registers to initial state with no card inserted.
// 
//
VOID InitSocketNoCard( void)
{
    DEBUGMSG(1,(TEXT("++InitSocket")));

    //
    // I believe all that is needed here is to initialize the GPIO registers
    // so that a card can be detected. Only GPIO F is used and GPIOF 
    // is exclusively used for PCMCIA so there is no need to call
    // the system.
    //

    //
    // All GPIO pins are inputs.
    //
    *GPIO_PFDDR = 0;
    *GPIO_PFDR  = 0;        

    //
    // Temporarily disable all PCMCIA interrupts.
    //
    *GPIO_INTENF    = 0;

    //
    // Acknowlege any pending edge triggered PCMCIA interrupts.
    //
    *GPIO_FEOI      = 0xFF;
    
    //
    // We want to make the  GPIOF_PCMCIA_IRQ pin level triggered.
    // We don't care about any of the other bits in the register.
    //
    *GPIO_FINTTYPE1 = 0;
    
    //
    // We want the GPIOF_PCMCIA to be triggered high.
    //
    //*GPIO_FINTTYPE2  = GPIOF_PCMCIA_IRQ;

    //
    // We want the GPIOF_PCMCIA to be triggered low.
    //
    *GPIO_FINTTYPE2 = 0;
    
    //
    // Enable the interrupt.
    //
    *GPIO_INTENF    = 0;

    //
    // Setup the PCMCIA controller.
    //
    *SMC_PCCONFIG_ATT1  =   PCCONFIG_ADDRESSTIME_MASK |
                            PCCONFIG_HOLDTIME_MASK    |
                            PCCONFIG_ACCESSTIME_MASK  |
                            PCCONFIG_MW_8BIT;

    *SMC_PCCONFIG_MEM1  =   PCCONFIG_ADDRESSTIME_MASK |
                            PCCONFIG_HOLDTIME_MASK    |
                            PCCONFIG_ACCESSTIME_MASK  |
                            PCCONFIG_MW_8BIT;

    //
    // The Windows drivers never seem to set the access speed for the I/O
    // windows.  Since I/O has a fixed access speed we need to set it
    // initially.
    //
    *SMC_PCCONFIG_IO1   =   CalculatePcmciaTimings(0) |
                            PCCONFIG_MW_8BIT;

    *SMC_PCCONT         =   PCCONT_PC1EN | PCCONT_WEN1;


    DEBUGMSG (1,(TEXT("--InitSocket\n\r")));
}

//****************************************************************************
// PDCardGetSocket
//****************************************************************************
// @func    STATUS | PDCardGetSocket | Get the socket state of the specified socket.
// @rdesc   Returns one of the CERR_* return codes in cardserv.h.
//
// @comm    This function reads the specified socket's state and returns it in
//          the PDCARD_SOCKET_STATE structure.
STATUS PDCardGetSocket
(
    UINT32 uSocket,             // @parm Socket number (first socket is 0)
    PPDCARD_SOCKET_STATE pState // @parm Pointer to PDCARD_SOCKET_STATE structure
)
{
    ULONG ulGPIOF;
    PPDCARD_SOCKET_STATE pPDDState;

    if (uSocket >= NUM_SOCKETS) 
    {
        return CERR_BAD_SOCKET;
    }

    pPDDState = &v_SockState[uSocket];
    
    EnterCriticalSection(&g_PCIC_Crit);

    //
    // Start off with nothing
    //
    pPDDState->fNotifyEvents = 0;        

    //
    // First acknowledge any status change interrupts
    //
    ulGPIOF   = *GPIO_PFDR ;


    DumpSocketRegisters();
    //DEBUGMSG
    //(
    //    ZONE_PDD,
    //    (
    //        TEXT("PDCardGetSocket *GPIO_PFDR = 0x%x, VIC1_STATUS =0x%08x, VICSTATUS =0x%08x\r\n"),
    //        ulGPIOF, 
    //        *VIC1_IRQSTATUS, 
    //        *VIC2_IRQSTATUS
    //    )
    //);

    //
    // The first thing in code after an interrupt occuring is the MDD reads
    // PDCardGetSocket to determine the interupt type.  In this function we
    // need to switch the direction of the interrupt for card detect and battery level.
    // We only need one interrupt of each type unless the state changes.
    //
    *GPIO_FINTTYPE2   = ~ulGPIOF & ( GPIOF_PCMCIA_CD1 | GPIOF_PCMCIA_CD2 | GPIOF_PCMCIA_BVD1 | GPIOF_PCMCIA_BVD2);

    //
    // Check out the card detect pins.
    //
    if (( ulGPIOF & ( GPIOF_PCMCIA_CD1 | GPIOF_PCMCIA_CD2 )) == 
                    ( GPIOF_PCMCIA_CD1 | GPIOF_PCMCIA_CD2 )) 
    {
        DEBUGMSG(ZONE_PDD, (TEXT("PDCardGetSocket(%d) ~CARD_DETECT\r\n"), uSocket));
        // InitSocketNoCard();
        goto pcgs_exit;
    } 
    else 
    {
        pPDDState->fNotifyEvents |= EVENT_MASK_CARD_DETECT;
        DEBUGMSG(ZONE_PDD, (TEXT("PDCardGetSocket(%d) CARD_DETECT\r\n"), uSocket));
    }

    
    //
    // Check out the Battery voltage.
    //    
    switch (ulGPIOF & (GPIOF_PCMCIA_BVD1 | GPIOF_PCMCIA_BVD2)) 
    {
        case GPIOF_PCMCIA_BVD1:
            pPDDState->fNotifyEvents |= EVENT_MASK_BATTERY_LOW;
            DEBUGMSG(ZONE_PDD, (TEXT("PDCardGetSocket(%d) BATTERY_LOW\r\n"), uSocket));
            break;

        case GPIOF_PCMCIA_BVD2:
        case 0:
            DEBUGMSG(ZONE_PDD, (TEXT("PDCardGetSocket(%d) BATTERY_DEAD\r\n"), uSocket));
            pPDDState->fNotifyEvents |= EVENT_MASK_BATTERY_DEAD;
            break;
    }

    //
    // Check to see if the card write protect is on.  This is an old
    // pcmcia construct.
    //
    if (ulGPIOF & GPIOF_PCMCIA_WP) 
    {
        DEBUGMSG(ZONE_PDD, (TEXT("PDCardGetSocket(%d) WRITE_PROTECT\r\n"), uSocket));
        pPDDState->fNotifyEvents |= EVENT_MASK_WRITE_PROTECT;
    }

    if (ulGPIOF & GPIOF_PCMCIA_IRQ) 
    {
        DEBUGMSG(ZONE_PDD, (TEXT("PDCardGetSocket(%d) CARD_READY\r\n"), uSocket));
        pPDDState->fNotifyEvents |= EVENT_MASK_CARD_READY;
    }

    //
    // Copy the parameters
    //
pcgs_exit:
    memcpy(pState, pPDDState, sizeof(PDCARD_SOCKET_STATE));
    LeaveCriticalSection(&g_PCIC_Crit);
    return CERR_SUCCESS;
}   // PDDCardGetSocket



//****************************************************************************
// 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 PDCardSetSocket
(
    UINT32 uSocket,             // @parm Socket number (first socket is 0)
    PPDCARD_SOCKET_STATE pState // @parm Pointer to PDCARD_SOCKET_STATE structure
)
{
    ULONG               ulGPIOF, ulIntEnF;
    PPDCARD_SOCKET_STATE pPDDState;
    STATUS              ret;
    UCHAR               ucVcc, ucVpp1, ucVpp2;
    BOOL                fSetVoltage;
    int                 t;

    DEBUGMSG(ZONE_PDD, (TEXT("PDCardSetSocket(%d) entered\r\n"), uSocket));

    if (uSocket >= NUM_SOCKETS) 
    {
        ret = CERR_BAD_SOCKET;
        goto pcss_fail;
    }

    //
    // Check socket power level indexes
    //
    if ((pState->fVcc & SOCK_VCC_LEVEL_MASK) >= NUM_POWER_ENTRIES ||
        !(v_PowerEntries[pState->fVcc & SOCK_VCC_LEVEL_MASK].fSupply & PWR_SUPPLY_VCC)) 
    {
        ret = CERR_BAD_VCC;
        goto pcss_fail;
    }
    if (pState->uVpp1 >= NUM_POWER_ENTRIES || pState->uVpp2 >= NUM_POWER_ENTRIES ||
        !(v_PowerEntries[pState->uVpp1].fSupply & PWR_SUPPLY_VPP1) ||
        !(v_PowerEntries[pState->uVpp2].fSupply & PWR_SUPPLY_VPP2)) 
    {
        ret = CERR_BAD_VPP;
        goto pcss_fail;
    }

    EnterCriticalSection(&g_PCIC_Crit);

    //
    // TODO TODO TODO We need special code to initialize window if the window 
    // is disabled.
    //

    //
    // TODO TODO TODO - Set Card State.
    //
    ulGPIOF   = *GPIO_PFDR ;


    pPDDState = &v_SockState[uSocket];

    //
    // Set the status change interrupt sources
    //
    ulIntEnF = 0;


    if (pState->fInterruptEvents & EVENT_MASK_CARD_DETECT) 
    {
        ulIntEnF |= GPIOF_PCMCIA_CD1 | GPIOF_PCMCIA_CD2 ; 
    }
    if (pState->fInterruptEvents & EVENT_MASK_BATTERY_DEAD) 
    {
        ulIntEnF |= GPIOF_PCMCIA_BVD1; 
    }
    if (pState->fInterruptEvents & EVENT_MASK_BATTERY_LOW) 
    {
        ulIntEnF |= GPIOF_PCMCIA_BVD2; 
    }
    if (pState->fIREQRouting & SOCK_IREQ_ENABLE) 
    {
        ulIntEnF |= GPIOF_PCMCIA_IRQ; 
    } 

    *GPIO_INTENF = ulIntEnF;

    DEBUGMSG
    (
        ZONE_PDD,
        (   TEXT("PDCardSetSocket *GPIO_INTENF = 0x%x\r\n"),
            ulIntEnF
        )
    );

    if (( ulGPIOF & (GPIOF_PCMCIA_CD1|GPIOF_PCMCIA_CD2)) == 
                    (GPIOF_PCMCIA_CD1|GPIOF_PCMCIA_CD2)) 
    {
        DEBUGMSG(ZONE_PDD,
            (TEXT("PDCardSetSocket(%d) No card inserted\r\n"), uSocket));
        goto pcss_exit;
    }


    DEBUGMSG(1,
        (TEXT("PDCardSetSocket voltage = %d\r\n"),
        v_PowerEntries[pState->fVcc & SOCK_VCC_LEVEL_MASK].uPowerLevel));

    //
    // Check to see if the voltages are reasonable.
    //
    fSetVoltage = FALSE;
    if ((pState->fVcc & SOCK_VCC_LEVEL_MASK) != (pPDDState->fVcc & SOCK_VCC_LEVEL_MASK)) 
    {
        ucVcc = v_PowerEntries[pState->fVcc & SOCK_VCC_LEVEL_MASK].uPowerLevel;
        fSetVoltage = TRUE;
    }
  
    if ((pState->uVpp1 & SOCK_VCC_LEVEL_MASK) != (pPDDState->uVpp1 & SOCK_VCC_LEVEL_MASK)) 
    {
        ucVpp1= v_PowerEntries[pState->uVpp1 & SOCK_VCC_LEVEL_MASK].uPowerLevel;
        fSetVoltage = TRUE;
    }

    if ((pState->uVpp2 & SOCK_VCC_LEVEL_MASK) != (pPDDState->uVpp2 & SOCK_VCC_LEVEL_MASK)) 
    {
        ucVpp2 = v_PowerEntries[pState->uVpp1 & SOCK_VCC_LEVEL_MASK].uPowerLevel;
        fSetVoltage = TRUE;
    }

    if(fSetVoltage)

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
av一二三不卡影片| 国产高清精品网站| 国产成人综合自拍| 欧洲色大大久久| 精品国产一区二区精华| 一区二区三区丝袜| 国产成人三级在线观看| 制服丝袜亚洲播放| 亚洲综合久久久久| 99久久久久久| 国产午夜精品一区二区三区四区| 亚洲国产人成综合网站| www.在线成人| 中文字幕免费不卡| 国产麻豆精品久久一二三| 69堂精品视频| 亚洲成av人综合在线观看| 99精品久久99久久久久| 国产欧美精品一区二区色综合| 日韩av在线免费观看不卡| 在线免费观看视频一区| 亚洲欧洲国产日韩| 丁香另类激情小说| 国产欧美日本一区视频| 国产福利一区在线观看| 久久久久久久性| 国产在线看一区| 精品国一区二区三区| 免费精品视频最新在线| 日韩一区二区免费视频| 首页国产欧美日韩丝袜| 91麻豆精品国产91久久久久| 偷窥国产亚洲免费视频| 欧美精品日日鲁夜夜添| 日产精品久久久久久久性色| 欧美剧情片在线观看| 丝瓜av网站精品一区二区| 欧美人体做爰大胆视频| 日本视频一区二区| 精品国产乱码久久久久久蜜臀| 精品一区精品二区高清| 国产亚洲一区二区三区| 成人午夜电影网站| 亚洲欧美日韩久久精品| 欧美日韩中文字幕精品| 丝袜美腿亚洲色图| 久久女同性恋中文字幕| 成人avav影音| 亚洲精品国产成人久久av盗摄| 在线观看日产精品| 天天综合网天天综合色| 久久综合色天天久久综合图片| 国产成人精品一区二区三区四区| 国产精品理论在线观看| 欧美性生活影院| 美女精品一区二区| 国产精品色哟哟网站| 91国偷自产一区二区三区成为亚洲经典 | 九色综合国产一区二区三区| 精品国产乱码久久久久久影片| 福利一区二区在线观看| 亚洲色图欧美在线| 欧美一区日韩一区| 成人av在线影院| 亚洲国产aⅴ成人精品无吗| 精品日产卡一卡二卡麻豆| 成人午夜短视频| 日本不卡高清视频| 中文字幕在线不卡| 日韩一区二区免费在线观看| av亚洲精华国产精华精华 | 国产一区91精品张津瑜| 亚洲激情五月婷婷| 精品国产在天天线2019| 色视频一区二区| 国产精品一区二区不卡| 亚洲高清中文字幕| 国产精品电影院| 欧美成人三级电影在线| 91麻豆6部合集magnet| 国产在线精品一区二区不卡了 | 视频一区二区中文字幕| 26uuu成人网一区二区三区| 色欧美88888久久久久久影院| 精品影视av免费| 亚洲第一av色| 国产精品毛片久久久久久| 日韩免费高清视频| 欧美色爱综合网| 99国产精品久久久| 国产精品一区二区三区99| 性久久久久久久| 亚洲精选视频免费看| 欧美激情一区二区三区全黄| 日韩美一区二区三区| 欧美亚洲精品一区| 色欧美乱欧美15图片| 99亚偷拍自图区亚洲| 国产乱一区二区| 久久精品72免费观看| 视频一区视频二区在线观看| 亚洲高清一区二区三区| 亚洲柠檬福利资源导航| 国产精品动漫网站| 国产精品美女久久久久av爽李琼| 久久久综合视频| 欧美成人性战久久| 欧美xxxxx牲另类人与| 91精品国产乱| 日韩一区二区三区av| 欧美一级日韩一级| 欧美一区二区美女| 91精品国产综合久久久久久| 欧美日韩大陆在线| 欧美日本在线一区| 91精品国产91久久综合桃花 | 91美女蜜桃在线| 91亚洲大成网污www| 91美女片黄在线| 一本色道综合亚洲| 欧美人xxxx| 欧美一区二区美女| 精品国产凹凸成av人网站| 日韩欧美国产精品| 久久精品亚洲国产奇米99| 国产片一区二区三区| 国产精品丝袜一区| 有坂深雪av一区二区精品| 一区二区三区日韩在线观看| 亚洲一区二区三区精品在线| 午夜精品久久一牛影视| 捆绑调教一区二区三区| 国产一区二区三区久久久 | 精品一区二区三区久久| 国产一区二区三区最好精华液| 国产在线精品一区在线观看麻豆| 岛国精品在线观看| 色婷婷av久久久久久久| 欧美日韩日本视频| 亚洲精品一区二区三区在线观看| 国产欧美中文在线| 亚洲综合色区另类av| 日本强好片久久久久久aaa| 国产美女主播视频一区| 91网址在线看| 日韩美一区二区三区| 亚洲欧美自拍偷拍| 亚洲sss视频在线视频| 国产精品综合av一区二区国产馆| 91免费视频观看| 日韩久久免费av| 亚洲色图清纯唯美| 精品一区二区三区香蕉蜜桃| 97久久超碰国产精品| 欧美一区中文字幕| 中文字幕日韩欧美一区二区三区| 天堂va蜜桃一区二区三区漫画版| 国产一区二区三区四区五区入口| 色哦色哦哦色天天综合| 久久久久国产一区二区三区四区 | 国产精品美女久久久久久久| 亚洲大型综合色站| 成人高清免费观看| 欧美一级二级在线观看| 亚洲色图色小说| 国产精品综合二区| 91精品午夜视频| 中文字幕日本乱码精品影院| 免费观看成人av| 99在线精品观看| 久久久亚洲精品石原莉奈| 亚洲最大色网站| 成人性生交大片免费| 日韩亚洲欧美中文三级| 亚洲一区二区免费视频| 成人一区二区三区在线观看| 欧美电视剧在线看免费| 亚洲成人在线免费| 99精品偷自拍| 中文在线免费一区三区高中清不卡| 日韩电影在线观看电影| 色婷婷av一区二区三区软件| 国产精品美女一区二区在线观看| 久久国产精品99精品国产| 欧美性色黄大片手机版| 国产精品视频九色porn| 高清不卡在线观看| 久久久久久久久岛国免费| 久久国产三级精品| 日韩西西人体444www| 性久久久久久久久| 911精品国产一区二区在线| 亚洲综合清纯丝袜自拍| 91在线视频网址| 最近中文字幕一区二区三区| 福利一区二区在线观看| 国产欧美一区在线| 99久久777色| 亚洲三级视频在线观看| 99久久精品免费精品国产|