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

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

?? pl010ser.c

?? 收集到的orion_ep93xx_wince_bsp_1-3-507串行通訊驅動源碼,未作測試
?? C
?? 第 1 頁 / 共 5 頁
字號:
    LeaveCriticalSection(&(pSer16550->RegCritSec));

    DEBUGMSG (ZONE_OPEN,
              (TEXT("-SL_Open 0x%Xr\n"), pHead));
}

//
// @doc OEM 
// @func PVOID | SL_Close | Does nothing except keep track of the
// open count so that other routines know what to do.
//
VOID
SL_Close(
        PVOID   pHead // @parm PVOID returned by HWinit.
        )
{
    PSER16550_INFO  pSer16550 = &(((PSER_INFO)pHead)->ser16550);
    PAMBA_UART_INFO pSerAMBA  = &(((PSER_INFO)pHead)->serAMBA);

    DEBUGMSG (ZONE_CLOSE,
              (TEXT("+SL_Close 0x%X\r\n"), pHead));

    if ( pSer16550->OpenCount )
        pSer16550->OpenCount--;

    EnterCriticalSection(&(pSer16550->RegCritSec));
    try {
        // Disable all interrupts and clear MCR.

        OUTB(pSerAMBA, pUART_CR, (UCHAR)0); 

        // Clear modem control state.
        //
        SL_ClearDTR(pHead);
        SL_ClearRTS(pHead);

    }
    except (GetExceptionCode() == EXCEPTION_ACCESS_VIOLATION ?
            EXCEPTION_EXECUTE_HANDLER : EXCEPTION_CONTINUE_SEARCH) {
        // Just get out of here.
    }
    LeaveCriticalSection(&(pSer16550->RegCritSec));

    DEBUGMSG (ZONE_CLOSE,
              (TEXT("-SL_Close 0x%X\r\n"), pHead));
}

//
// @doc OEM 
// @func PVOID | SL_Init | Initializes 16550 device head.  
//
VOID
SL_Init2(
       PVOID   pHead, // @parm points to device head
       PUCHAR  pRegBase, // Pointer to 16550 register base
       EVENT_FUNC EventCallback, // This callback exists in MDD
       PVOID   pMddHead,   // This is the first parm to callback
       PLOOKUP_TBL   pBaudTable  // BaudRate Table
       )
{
    PSER16550_INFO  pSer16550 = &(((PSER_INFO)pHead)->ser16550);
    PAMBA_UART_INFO pSerAMBA  = &(((PSER_INFO)pHead)->serAMBA);

    DEBUGMSG (ZONE_CLOSE,(TEXT("+SL_INIT, 0x%X\r\n"), pHead));

    // Set up pointers to UART registers
    pSerAMBA->pUART_DR    = pRegBase + AMBA_UARTDR;
    pSerAMBA->pUART_RSR   = pRegBase + AMBA_UARTRSR;
    pSerAMBA->pUART_ECR   = pRegBase + AMBA_UARTECR;
    pSerAMBA->pUART_LCR_H = pRegBase + AMBA_UARTLCR_H;
    pSerAMBA->pUART_LCR_M = pRegBase + AMBA_UARTLCR_M;
    pSerAMBA->pUART_LCR_L = pRegBase + AMBA_UARTLCR_L;
    pSerAMBA->pUART_CR    = pRegBase + AMBA_UARTCR;
    pSerAMBA->pUART_FR    = pRegBase + AMBA_UARTFR;
    pSerAMBA->pUART_IIR   = pRegBase + AMBA_UARTIIR;
    pSerAMBA->pUART_ICR   = pRegBase + AMBA_UARTICR;
    pSerAMBA->pUART_ILPR  = pRegBase + AMBA_UARTILPR;

    // Special registers: the AMBA UART doesn't implement DTR and RTS.  Instead,
    // these signals are implemented with general-purpose IO lines.
    //
    // We have to VirtualCopy the System Controller registers used for 
    // DTR and RTS signals.
    //
    //if (!(pSerAMBA->pSC_BASE = VirtualAlloc(NULL, (4 * sizeof(ULONG)), MEM_RESERVE, PAGE_NOACCESS)))
    //{
    //    DEBUGMSG(ZONE_INIT | ZONE_ERROR, (TEXT("!SL_Init2: VirtualAlloc Failed\r\n")));
    //    DEBUGCHK(FALSE);
    //    return;
    //}
    //
    //if (!VirtualCopy((LPVOID)pSerAMBA->pSC_BASE, (LPVOID)(VA_SC_BASE), (4 * sizeof(ULONG)), PAGE_READWRITE | PAGE_NOCACHE))
    //{
    //    DEBUGMSG(ZONE_INIT | ZONE_ERROR, (TEXT("!SL_Init2: VirtualCopy Failed (%d)\r\n"), GetLastError()));
    //    DEBUGCHK(FALSE);
    //    VirtualFree (pSerAMBA->pSC_BASE, 0, MEM_RELEASE);
    //    return;
    //}

    if(((PSER_INFO)pHead)->dwDevIndex ==1)
    {
        pSerAMBA->pSC_MCR   = (volatile PULONG)UART1_MCR;
    }
    else
    {
        pSerAMBA->pSC_MCR   = 0;
    }


    // Store info for callback function
    pSer16550->EventCallback = EventCallback;
    pSer16550->pMddHead = pMddHead;

    pSer16550->FlushDone      = CreateEvent(0, FALSE, FALSE, NULL);

    pSer16550->OpenCount = 0;

    // Don't allow any interrupts till PostInit.
    OUTB(pSerAMBA, pUART_CR, (UCHAR)0);

    InitializeCriticalSection(&(pSer16550->TransmitCritSec));
    InitializeCriticalSection(&(pSer16550->RegCritSec));

    // Clear any interrupts which may be pending.  Normally only
    // happens if we were warm reset.
    ClearPendingInts( pHead );

    DEBUGMSG (ZONE_CLOSE,(TEXT("-SL_INIT, 0x%X\r\n"), pHead));
}

//
// @doc OEM
// @func void | SL_PostInit | This routine takes care of final initialization.
//
// @rdesc None.
//
BOOL
SL_PostInit(
           PVOID   pHead // @parm PVOID returned by HWinit.
           )
{
    PSER16550_INFO  pSer16550 = &(((PSER_INFO)pHead)->ser16550);
    PAMBA_UART_INFO pSerAMBA  = &(((PSER_INFO)pHead)->serAMBA);

    DEBUGMSG (ZONE_INIT,(TEXT("+SL_PostInit, 0x%X\r\n"), pHead));
    
    // Since we are just a library which might get used for 
    // builtin ports which init at boot, or by PCMCIA ports
    // which init at Open, we can't do anything too fancy.
    // Lets just make sure we cancel any pending interrupts so
    // that if we are being used with an edge triggered PIC, he
    // will see an edge after the MDD hooks the interrupt.
    ClearPendingInts( pHead );
    
    DEBUGMSG (ZONE_INIT,(TEXT("-SL_PostInit, 0x%X\r\n"), pHead));
    return(TRUE);
}

//
// @doc OEM 
// @func PVOID | SL_Deinit | De-initializes 16550 device head.  
//
VOID
SL_Deinit(
         PVOID   pHead // @parm points to device head
         )
{
    PSER16550_INFO  pSer16550 = &(((PSER_INFO)pHead)->ser16550);
    PAMBA_UART_INFO pSerAMBA  = &(((PSER_INFO)pHead)->serAMBA);

    DEBUGMSG (ZONE_CLOSE,(TEXT("+SL_DEINIT, 0x%X\r\n"), pHead));

    DeleteCriticalSection(&(pSer16550->TransmitCritSec));
    DeleteCriticalSection(&(pSer16550->RegCritSec));

    // Free the flushdone event
    if ( pSer16550->FlushDone )
        CloseHandle( pSer16550->FlushDone );

    // Free System Controller memory handle
    //
    if (pSerAMBA->pSC_BASE)
        VirtualFree (pSerAMBA->pSC_BASE, 0, MEM_RELEASE);

    DEBUGMSG (ZONE_CLOSE,(TEXT("-SL_DEINIT, 0x%X\r\n"), pHead));
}

//
// @doc OEM
// @func void | SL_ClearDtr | This routine clears DTR.
//
// @rdesc None.
//
VOID
SL_ClearDTR(
           PVOID   pHead // @parm PVOID returned by HWinit.
           )
{
    PSER16550_INFO  pSer16550 = &(((PSER_INFO)pHead)->ser16550);
    PAMBA_UART_INFO pSerAMBA  = &(((PSER_INFO)pHead)->serAMBA);

    DEBUGMSG (ZONE_FUNCTION, (TEXT("+SL_ClearDTR, 0x%X\r\n"), pHead));
    EnterCriticalSection(&(pSer16550->RegCritSec));
    try {
        if(((PSER_INFO)pHead)->dwDevIndex == 1)
        {
            *pSerAMBA->pSC_MCR   &= ~MCR_DTR;
        }
        else
        {
            DEBUGMSG (ZONE_WARN, (TEXT("SL_ClearDTR: invalid device index (0x%X)\r\n"), ((PSER_INFO)pHead)->dwDevIndex));
        }
    }
    except (GetExceptionCode() == EXCEPTION_ACCESS_VIOLATION ?
            EXCEPTION_EXECUTE_HANDLER : EXCEPTION_CONTINUE_SEARCH) {
        // Just exit
    }
    LeaveCriticalSection(&(pSer16550->RegCritSec));

    DEBUGMSG (ZONE_FUNCTION, (TEXT("-SL_ClearDTR, 0x%X\r\n"), pHead));
}

//
// @doc OEM
// @func VOID | SL_SetDTR | This routine sets DTR.
// 
// @rdesc None.
//
VOID
SL_SetDTR(
         PVOID   pHead // @parm PVOID returned by HWinit.
         )
{    
    PSER16550_INFO  pSer16550 = &(((PSER_INFO)pHead)->ser16550);
    PAMBA_UART_INFO pSerAMBA  = &(((PSER_INFO)pHead)->serAMBA);

    DEBUGMSG (ZONE_FUNCTION, (TEXT("+SL_SetDTR, 0x%X\r\n"), pHead));
    EnterCriticalSection(&(pSer16550->RegCritSec));
    try {
        // Depending on which port we're talking to, assert the DTR signal.
        //
        if (((PSER_INFO)pHead)->dwDevIndex == 1)
        {
            *pSerAMBA->pSC_MCR   |= MCR_DTR;
        }
        else
        {
            DEBUGMSG (ZONE_WARN, (TEXT("SL_SetDTR: invalid device index (0x%X)\r\n"), ((PSER_INFO)pHead)->dwDevIndex));
        }
    }
    except (GetExceptionCode() == EXCEPTION_ACCESS_VIOLATION ?
            EXCEPTION_EXECUTE_HANDLER : EXCEPTION_CONTINUE_SEARCH) {
        // Just exit
    }
    LeaveCriticalSection(&(pSer16550->RegCritSec));

    DEBUGMSG (ZONE_FUNCTION, (TEXT("-SL_SetDTR, 0x%X\r\n"), pHead));
}

//
// @doc OEM
// @func VOID | SL_ClearRTS | This routine clears RTS.
// 
// @rdesc None.
// 
VOID
SL_ClearRTS(
           PVOID   pHead // @parm PVOID returned by HWinit.
           )
{
    PSER16550_INFO  pSer16550 = &(((PSER_INFO)pHead)->ser16550);
    PAMBA_UART_INFO pSerAMBA  = &(((PSER_INFO)pHead)->serAMBA);

    DEBUGMSG (ZONE_FUNCTION, (TEXT("+SL_ClearRTS, 0x%X\r\n"), pHead));
    EnterCriticalSection(&(pSer16550->RegCritSec));
    try {
        // Depending on which port we're talking to, deassert the RTS signal.
        //
        if (((PSER_INFO)pHead)->dwDevIndex == 1)
        {
            *pSerAMBA->pSC_MCR   &= ~MCR_RTS;
        }
        else
        {
            DEBUGMSG (ZONE_WARN, (TEXT("SL_ClearRTS: invalid device index (0x%X)\r\n"), ((PSER_INFO)pHead)->dwDevIndex));
        }
    }
    except (GetExceptionCode() == EXCEPTION_ACCESS_VIOLATION ?
            EXCEPTION_EXECUTE_HANDLER : EXCEPTION_CONTINUE_SEARCH) {
        // Just exit
    }
    LeaveCriticalSection(&(pSer16550->RegCritSec));

    DEBUGMSG (ZONE_FUNCTION, (TEXT("-SL_ClearRTS, 0x%X\r\n"), pHead));
}

//
// @doc OEM
// @func VOID | SL_SetRTS | This routine sets RTS.
// 
// @rdesc None.
//
VOID
SL_SetRTS(
         PVOID   pHead // @parm PVOID returned by HWinit.
         )
{
    PSER16550_INFO  pSer16550 = &(((PSER_INFO)pHead)->ser16550);
    PAMBA_UART_INFO pSerAMBA  = &(((PSER_INFO)pHead)->serAMBA);

    DEBUGMSG (ZONE_FUNCTION, (TEXT("+SL_SetRTS, 0x%X\r\n"), pHead));
    EnterCriticalSection(&(pSer16550->RegCritSec));
    try {
        // Depending on which port we're talking to, assert the DTR signal.
        //
        if (((PSER_INFO)pHead)->dwDevIndex == 1)
        {
            *pSerAMBA->pSC_MCR   |= MCR_RTS;
        }
        else
        {
            DEBUGMSG (ZONE_WARN, (TEXT("SL_SetRTS: invalid device index (0x%X)\r\n"), ((PSER_INFO)pHead)->dwDevIndex));
        }
    }
    except (GetExceptionCode() == EXCEPTION_ACCESS_VIOLATION ?
            EXCEPTION_EXECUTE_HANDLER : EXCEPTION_CONTINUE_SEARCH) {
        // Just exit
    }
    LeaveCriticalSection(&(pSer16550->RegCritSec));

    DEBUGMSG (ZONE_FUNCTION, (TEXT("-SL_SetRTS, 0x%X\r\n"), pHead));
}

//
// @doc OEM
// @func VOID | SL_ClearBreak | This routine clears break.
// 
// @rdesc None.
// 
VOID
SL_ClearBreak(
             PVOID   pHead // @parm PVOID returned by HWinit.
             )
{
    PSER16550_INFO  pSer16550 = &(((PSER_INFO)pHead)->ser16550);
    PAMBA_UART_INFO pSerAMBA  = &(((PSER_INFO)pHead)->serAMBA);

    DEBUGMSG (ZONE_FUNCTION, (TEXT("+SL_ClearBreak, 0x%X\r\n"), pHead));

    EnterCriticalSection(&(pSer16550->RegCritSec));
    try {
        unsigned char byte;

        byte = INB(pSerAMBA, pUART_LCR_H);
        OUTB(pSerAMBA, pUART_LCR_H, byte & ~AMBA_UARTLCR_H_BRK);
    }
    except (GetExceptionCode() == EXCEPTION_ACCESS_VIOLATION ?
            EXCEPTION_EXECUTE_HANDLER : EXCEPTION_CONTINUE_SEARCH) {
        // Just exit
    }
    LeaveCriticalSection(&(pSer16550->RegCritSec));

    DEBUGMSG (ZONE_FUNCTION, (TEXT("-SL_ClearBreak, 0x%X\r\n"), pHead));
}

//
// @doc OEM
// @func VOID | SL_SetBreak | This routine sets break.
// 
// @rdesc None.
//
VOID
SL_SetBreak(
           PVOID   pHead // @parm PVOID returned by HWinit.
           )
{
    PSER16550_INFO  pSer16550 = &(((PSER_INFO)pHead)->ser16550);
    PAMBA_UART_INFO pSerAMBA  = &(((PSER_INFO)pHead)->serAMBA);

    DEBUGMSG (ZONE_FUNCTION, (TEXT("+SL_SetBreak, 0x%X\r\n"), pHead));

    EnterCriticalSection(&(pSer16550->RegCritSec));
    try {
        unsigned char byte;

        byte = INB(pSerAMBA, pUART_LCR_H);
        OUTB(pSerAMBA, pUART_LCR_H, byte | AMBA_UARTLCR_H_BRK);
    }
    except (GetExceptionCode() == EXCEPTION_ACCESS_VIOLATION ?
            EXCEPTION_EXECUTE_HANDLER : EXCEPTION_CONTINUE_SEARCH) {
        // Just exit
    }
    LeaveCriticalSection(&(pSer16550->RegCritSec));

    DEBUGMSG (ZONE_FUNCTION, (TEXT("-SL_SetBreak, 0x%X\r\n"), pHead));
}

//
// SetBaudRate
//
// Internal function.  The only real reason for splitting this out
// is so that we can call it from PowerOn and still allow SL_SetBaud
// to do debug messages, acquire critical sections, etc.
//
BOOL
SetBaudRate(
           PVOID   pHead,
           ULONG   BaudRate
           )

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品国产三级国产普通话蜜臀 | 97久久超碰精品国产| 日本久久电影网| 日韩免费看网站| 一级特黄大欧美久久久| 激情深爱一区二区| 欧美日韩亚州综合| 中文字幕一区二区三| 国产一区在线观看视频| 欧美日本在线播放| 亚洲日本丝袜连裤袜办公室| 国产美女精品在线| 日韩欧美中文一区| 丝袜a∨在线一区二区三区不卡 | 国产亚洲婷婷免费| 偷窥少妇高潮呻吟av久久免费| av爱爱亚洲一区| 亚洲精品一区二区三区四区高清| 捆绑变态av一区二区三区| 欧洲精品中文字幕| 亚洲欧洲综合另类在线| 不卡电影一区二区三区| 欧美精品一区二区久久婷婷| 日本aⅴ精品一区二区三区| 欧美三级韩国三级日本三斤| 亚洲美女视频一区| 91伊人久久大香线蕉| 国产精品热久久久久夜色精品三区 | 国产美女娇喘av呻吟久久| 欧美一级xxx| 日本欧美加勒比视频| 欧美乱妇15p| 亚洲国产va精品久久久不卡综合| 色综合久久久久综合99| 亚洲欧美色图小说| 一本一道久久a久久精品| 亚洲情趣在线观看| 日本久久电影网| 亚洲一级不卡视频| 欧美色视频一区| 日韩和欧美一区二区| 这里只有精品电影| 激情伊人五月天久久综合| 精品日韩一区二区| 国产高清精品在线| 国产精品人成在线观看免费 | 亚洲嫩草精品久久| 一本大道av一区二区在线播放 | 色哟哟在线观看一区二区三区| 亚洲欧洲一区二区在线播放| 91蜜桃网址入口| 亚洲一区二区三区四区五区中文| 777奇米四色成人影色区| 免费xxxx性欧美18vr| 国产亚洲精品aa午夜观看| 波多野结衣91| 午夜精品久久久久久| 日韩女优毛片在线| 不卡的av中国片| 亚洲国产欧美一区二区三区丁香婷| 欧美日韩在线电影| 麻豆精品一二三| 中文字幕亚洲一区二区av在线 | 国产精品拍天天在线| 日本精品视频一区二区| 日本午夜精品视频在线观看| 国产欧美日韩综合精品一区二区| www.成人在线| 亚洲6080在线| 国产色婷婷亚洲99精品小说| 色综合久久久网| 国产一区二三区好的| 亚洲欧美日韩电影| 精品国产污污免费网站入口| 色婷婷国产精品久久包臀| 蜜桃精品视频在线观看| 中文字幕日韩一区| 精品国产99国产精品| 91一区二区三区在线观看| 麻豆91在线看| 亚洲在线视频免费观看| 国产色综合一区| 51精品秘密在线观看| 99久久国产免费看| 奇米四色…亚洲| 亚洲美女在线国产| 久久精品欧美一区二区三区麻豆| 欧美日本乱大交xxxxx| www.亚洲精品| 激情综合网天天干| 亚洲国产一区视频| 亚洲日本丝袜连裤袜办公室| 欧美成人精品3d动漫h| 欧美日精品一区视频| 93久久精品日日躁夜夜躁欧美| 精品无人区卡一卡二卡三乱码免费卡| 一区二区三区日韩欧美| 国产欧美精品在线观看| 欧美va在线播放| 777a∨成人精品桃花网| 欧美探花视频资源| 91一区二区三区在线播放| 成人动漫中文字幕| 国产成人av电影在线播放| 免费久久精品视频| 日本中文在线一区| 性久久久久久久久| 天天操天天综合网| 亚洲成人一区二区在线观看| 一个色综合av| 亚洲在线视频网站| 亚洲成精国产精品女| 亚洲国产综合色| 午夜精品视频一区| 亚洲成人资源在线| 日韩av二区在线播放| 日韩av电影免费观看高清完整版在线观看 | 午夜精品久久久久久久99水蜜桃 | 国产一区在线不卡| 麻豆专区一区二区三区四区五区| 天天射综合影视| 美女免费视频一区二区| 蜜桃一区二区三区在线| 久久99热99| 国产mv日韩mv欧美| 99在线精品免费| 在线免费观看日本欧美| 色老汉av一区二区三区| 欧美片网站yy| 日韩欧美中文字幕一区| 国产亚洲人成网站| 亚洲欧美日韩国产成人精品影院| 亚洲乱码中文字幕| 五月天婷婷综合| 国产美女视频91| 91浏览器打开| 6080午夜不卡| 精品国产乱码久久久久久浪潮| 久久久精品影视| 亚洲精品国产a| 麻豆国产精品官网| 成人成人成人在线视频| 91网站最新网址| 欧美一级黄色片| 国产精品久久三区| 亚洲成人免费av| 激情文学综合丁香| 色一情一乱一乱一91av| 91精品国产综合久久久蜜臀图片| 精品日韩在线观看| 亚洲视频免费看| 老司机一区二区| 91美女在线观看| 精品国产乱码久久久久久免费| 国产精品高潮呻吟| 日韩高清不卡一区二区| 白白色 亚洲乱淫| 日韩一区二区三区免费看 | 成人免费在线视频| 奇米精品一区二区三区在线观看一| 高清不卡在线观看| 欧美一区二区三区男人的天堂| 国产视频一区在线观看| 五月天一区二区三区| 不卡一区二区三区四区| 7777精品伊人久久久大香线蕉完整版 | 欧美日韩情趣电影| 久久久.com| 免费观看在线色综合| 国产91露脸合集magnet | 亚洲福利视频一区二区| 成人免费在线视频观看| 九色porny丨国产精品| 欧洲另类一二三四区| 天天影视网天天综合色在线播放| 激情综合网最新| 欧美一区二区三区在线观看| 中文字幕一区二区在线播放| 激情图区综合网| 欧美高清视频www夜色资源网| 欧美高清在线视频| 极品美女销魂一区二区三区免费| 欧美日韩一区二区三区四区五区 | 在线不卡欧美精品一区二区三区| 国产精品视频一二三区| 国产伦理精品不卡| 日韩美一区二区三区| 三级精品在线观看| 欧美日韩一二区| 亚洲国产综合视频在线观看| 色妞www精品视频| 成人免费在线播放视频| 成人黄色a**站在线观看| 久久精品一区八戒影视| 国内成+人亚洲+欧美+综合在线| 欧美高清激情brazzers| 午夜精品免费在线| 欧美蜜桃一区二区三区| 亚洲成av人**亚洲成av**| 欧美色大人视频|