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

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

?? cmmdriver.c

?? 6410BSP3
?? C
?? 第 1 頁 / 共 3 頁
字號:
//
// Copyright (c) Samsung Electronics. Co. LTD.  All rights reserved.
//
/*++
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.

*/


#include <bsp.h>
#include "CMMDriver.h"
#include "CMMMisc.h"

#if (_WIN32_WCE >= 600)
#define E2E_CMM
#endif
#include <pm.h>
#include <pmplatform.h>
#include <windows.h>
#include <nkintr.h>

BOOL            instanceNo[MAX_INSTANCE_NUM];
ALLOC_MEM_T    *AllocMemHead;
ALLOC_MEM_T    *AllocMemTail;
FREE_MEM_T        *FreeMemHead;
FREE_MEM_T        *FreeMemTail;
UINT8            *CachedVirAddr;

#if DEBUG
#define ZONE_INIT              DEBUGZONE(0)

DBGPARAM dpCurSettings =                \
{                                       \
    TEXT("CMM_Driver"),                 \
    {                                   \
        TEXT("Init"),       /* 0  */    \
    },                                  \
    (0x0001)                            \
};
#endif

/*----------------------------------------------------------------------------
*Function: CMM_Init

*Parameters:         dwContext        :
*Return Value:        True/False
*Implementation Notes: Initialize JPEG Hardware 
-----------------------------------------------------------------------------*/
DWORD
CMM_Init(
    DWORD dwContext
    )
{
    //CODEC_MEM_CTX *CodecMem;
    HANDLE      h_Mutex=NULL;
    DWORD       ret;
    FREE_MEM_T *node = NULL;
    PHYSICAL_ADDRESS    ioPhysicalBase = {0,0};

    printD("\n[CMM_Init]\n");

    
    // Mutex initialization
    h_Mutex = CreateCMMmutex();
    if (h_Mutex == NULL) 
    {
        RETAILMSG(1, (TEXT("[CMM_Init] CMM Mutex Initialize error : %d \r\n"),GetLastError()));    
        return FALSE;
    }

    ret = LockCMMMutex();
    if(!ret){
        RETAILMSG(1, (TEXT("[CMM_Init] CMM Mutex Lock Fail\r\n")));
        return FALSE;
    }

    ioPhysicalBase.LowPart = CODEC_MEM_START;
    CachedVirAddr = (UINT8 *)MmMapIoSpace(ioPhysicalBase, CODEC_MEM_SIZE, TRUE);

    // init alloc list, if(AllocMemHead == AllocMemTail) then, the list is NULL
    node = (ALLOC_MEM_T *)malloc(sizeof(ALLOC_MEM_T));
    if(node == NULL)
    {
        RETAILMSG(1, (TEXT("[CMM_Init] Cannot allocate node for Alloc List\r\n")));
        UnlockCMMMutex();
        return FALSE;
    }

    memset(node, 0x00, sizeof(ALLOC_MEM_T));
    node->next = node;
    node->prev = node;
    AllocMemHead = node;
    AllocMemTail = AllocMemHead;

    // init free list, if(FreeMemHead == FreeMemTail) then, the list is NULL
    node = (FREE_MEM_T *)malloc(sizeof(FREE_MEM_T));

    if(node == NULL)
    {
        RETAILMSG(1, (TEXT("[CMM_Init] Cannot allocate node for Free List\r\n")));
        UnlockCMMMutex();
        return FALSE;
    }

    memset(node, 0x00, sizeof(FREE_MEM_T));
    node->next = node;
    node->prev = node;
    FreeMemHead = node;
    FreeMemTail = FreeMemHead;
    
    node = (FREE_MEM_T *)malloc(sizeof(FREE_MEM_T));

    if(node == NULL)
    {
        RETAILMSG(1, (TEXT("[CMM_Init] Cannot allocate node for Free List first item\r\n")));
        UnlockCMMMutex();
        return FALSE;
    }

    memset(node, 0x00, sizeof(FREE_MEM_T));
    node->startAddr = CODEC_MEM_START;
    node->size = CODEC_MEM_SIZE;
    InsertNodeToFreeList(node, -1);

    UnlockCMMMutex();
    
    return TRUE;
}


/*----------------------------------------------------------------------------
*Function: CMM_DeInit

*Parameters:         InitHandle        :
*Return Value:        True/False
*Implementation Notes: Deinitialize JPEG Hardware 
-----------------------------------------------------------------------------*/
BOOL
CMM_Deinit(
    DWORD InitHandle
    )
{
    CODEC_MEM_CTX *CodecMem;

    printD("[CMM_DeInit] CMM_Deinit\n");
    CodecMem = (CODEC_MEM_CTX *)InitHandle;

    if(!CodecMem){
        RETAILMSG(1, (TEXT("[CMM_DeInit] CMM Invalid Input Handle\r\n")));
        return FALSE;
    }

    DeleteCMMMutex();    
    return TRUE;
}


/*----------------------------------------------------------------------------
*Function: CMM_Open

*Parameters:         InitHandle        :Handle to JPEG  context
                    dwAccess        :
                    dwShareMode        :File share mode of JPEG
*Return Value:        This function returns a handle that identifies the 
                    open context of JPEG  to the calling application.
*Implementation Notes: Opens JPEG CODEC device for reading, writing, or both 
-----------------------------------------------------------------------------*/
DWORD
CMM_Open(
    DWORD InitHandle,
    DWORD dwAccess,
    DWORD dwShareMode
    )
{
    CODEC_MEM_CTX *CodecMem;
    DWORD    ret;
    UINT8    inst_no;


    ret = LockCMMMutex();
    if(!ret){
        RETAILMSG(1, (TEXT("[CMM_Open] CMM Mutex Lock Fail\r\n")));
        return FALSE;
    }

    // check the number of instance 
    if((inst_no = GetInstanceNo()) < 0){
        RETAILMSG(1, (TEXT("[CMM_Open] Instance Number error-too many instance\r\n")));
        UnlockCMMMutex();
        return FALSE;
    }

    CodecMem = (CODEC_MEM_CTX *)malloc(sizeof(CODEC_MEM_CTX));
    if(CodecMem == NULL){
        RETAILMSG(1, (TEXT("[CMM_Init] CodecMem allocatopn failed\r\n")));
        UnlockCMMMutex();
        return FALSE;
    }
    
    memset(CodecMem, 0x00, sizeof(CODEC_MEM_CTX));

    CodecMem->inst_no = inst_no;
    printD("\n*****************************\n[CMM_Open] instanceNo : %d\n*****************************\n", CodecMem->inst_no);
    PrintList();
    UnlockCMMMutex();
    return (DWORD)CodecMem;
}


/*----------------------------------------------------------------------------
*Function: CMM_Close

*Parameters:         OpenHandle        :
*Return Value:        True/False
*Implementation Notes: This function closes the device context identified by
                        OpenHandle 
-----------------------------------------------------------------------------*/
BOOL
CMM_Close(
    DWORD OpenHandle
    )
{
    CODEC_MEM_CTX *CodecMem;
    DWORD    ret;
    ALLOC_MEM_T *node, *tmp_node;
    int        count=0;

    ret = LockCMMMutex();
    if(!ret){
        RETAILMSG(1, (TEXT("[CMM_Close] CMM Mutex Lock Fail\r\n")));
        return FALSE;
    }

    CodecMem = (CODEC_MEM_CTX *)OpenHandle;
    
    if(!CodecMem){
        RETAILMSG(1, (TEXT("[CMM_Close] CMM Invalid Input Handle\r\n")));
        UnlockCMMMutex();
        return FALSE;
    }

    printD("[CMM_Close] CodecMem->inst_no : %d CodecMem->callerProcess : 0x%x\n", CodecMem->inst_no, CodecMem->callerProcess);

    __try
    {
        // release u_addr and v_addr accoring to inst_no
        for(node = AllocMemHead; node != AllocMemTail; node = node->next){
            if(node->inst_no == CodecMem->inst_no){
                tmp_node = node;
                node = node->prev;
                ReleaseAllocMem(tmp_node, CodecMem);
            }
        }
    }
    __except(GetExceptionCode()==STATUS_ACCESS_VIOLATION ?
               EXCEPTION_EXECUTE_HANDLER : EXCEPTION_CONTINUE_SEARCH)
    {
       RETAILMSG( 1, ( _T("CMM_Close:Exception in releasing memory\n")) );
        return FALSE;
    }
    
    printD("[%d][CMM Close] MergeFragmentation\n", CodecMem->inst_no);
    MergeFragmentation(CodecMem->inst_no);

    ReturnInstanceNo(CodecMem->inst_no);

    free(CodecMem);
    UnlockCMMMutex();


    return TRUE;
}


/*----------------------------------------------------------------------------
*Function: CMM_IOControl

*Parameters:         OpenHandle        :
                    dwIoControlCode    :
*Return Value:        True/False
*Implementation Notes: JPEG_IOControl sends commands to initiate different
*                       operations like Init,Decode and Deinit.The test 
*                       application uses the DeviceIOControl function to 
*                       specify an operation to perform 
-----------------------------------------------------------------------------*/
BOOL
CMM_IOControl(
    DWORD OpenHandle,
    DWORD dwIoControlCode,
    PBYTE pInBuf,
    DWORD nInBufSize,
    PBYTE pOutBuf,
    DWORD nOutBufSize,
    PDWORD pBytesReturned
    )
{
    CODEC_MEM_CTX       *CodecMem;
    BOOL                result = TRUE;
    DWORD               ret;
    UINT8               *u_addr;
    ALLOC_MEM_T         *node;
    CMM_ALLOC_PRAM_T    *allocParam;
    PVOID pDestMarshalledIn = NULL;
    PVOID pDestMarshalledOut = NULL;
    
    ret = LockCMMMutex();
    if(!ret){
        RETAILMSG(1, (TEXT("[CMM_IOControl] CMM Mutex Lock Fail\r\n")));
        return FALSE;
    }

    CodecMem = (CODEC_MEM_CTX *)OpenHandle;

    if(!CodecMem){
        RETAILMSG(1, (TEXT("[CMM_IOControl] CMM Invalid Input Handle\r\n")));
        UnlockCMMMutex();
        return FALSE;
    }

    if ((pInBuf == NULL) || (nInBufSize == 0)){

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
69久久夜色精品国产69蝌蚪网| 六月丁香综合在线视频| 国产精品一区二区黑丝| 日韩欧美国产一区在线观看| 丝袜a∨在线一区二区三区不卡| 成人午夜激情视频| 国产精品欧美久久久久一区二区| 久久99国产精品成人| 337p粉嫩大胆噜噜噜噜噜91av| 久久99这里只有精品| 欧美成人a∨高清免费观看| 日本欧美一区二区三区乱码 | 91视视频在线观看入口直接观看www | voyeur盗摄精品| 国产精品女上位| 99视频在线精品| 亚洲精品免费电影| 欧美三级韩国三级日本一级| 亚洲动漫第一页| 欧美一区三区二区| 麻豆精品一区二区综合av| 欧美精品一区二区高清在线观看| 久久精品国产99| 欧美精品一区二区三区四区| 奇米888四色在线精品| 久久麻豆一区二区| 99国产一区二区三精品乱码| 亚洲一区二区在线视频| 正在播放亚洲一区| 国产麻豆午夜三级精品| 综合久久国产九一剧情麻豆| 在线免费av一区| 亚洲一区在线观看免费 | 91亚洲永久精品| 亚洲最大成人综合| 欧美系列亚洲系列| 另类调教123区| 国产精品久久久久久久久动漫 | 国产乱理伦片在线观看夜一区| 久久久久久亚洲综合影院红桃| 成a人片国产精品| 日韩电影在线一区二区三区| 7777精品伊人久久久大香线蕉完整版| 国产精品影视网| 一区二区三区中文在线| 欧美一区二区三区在线看| 国产自产v一区二区三区c| 亚洲美女视频在线| 日韩精品一区二区三区在线观看| www.亚洲人| 日本三级韩国三级欧美三级| 国产精品人成在线观看免费 | 精品一区二区综合| 亚洲女子a中天字幕| 日韩免费一区二区| www.亚洲人| 国内精品久久久久影院一蜜桃| 日韩毛片视频在线看| 欧美美女黄视频| jizzjizzjizz欧美| 精品一区二区国语对白| 亚洲国产乱码最新视频 | 国产精品亚洲一区二区三区妖精| 亚洲影视在线观看| 国产精品视频一二三区| 欧美一区日韩一区| 欧美三级中文字幕在线观看| 成人激情小说网站| 精品一区二区三区不卡| 午夜影院久久久| 亚洲免费伊人电影| 国产三级欧美三级日产三级99| 欧美日韩国产欧美日美国产精品| 成人黄色小视频| 国产毛片一区二区| 老汉av免费一区二区三区| 一区二区三区精品| 国产精品色哟哟| 久久久精品中文字幕麻豆发布| 欧美电影在线免费观看| 欧美性猛交xxxx乱大交退制版 | 欧美日本一区二区在线观看| 91香蕉视频黄| 91网上在线视频| www.亚洲精品| 99这里只有精品| 99久久国产综合色|国产精品| 国产成人av资源| 国产91在线观看丝袜| 久久99久久99精品免视看婷婷| 日韩精品一级中文字幕精品视频免费观看 | 亚洲一二三专区| 一区二区在线观看av| 国产精品久久久久影院亚瑟 | 国产亚洲va综合人人澡精品 | 国内精品国产成人国产三级粉色 | 欧美性大战久久| 欧美性色欧美a在线播放| 欧美性猛片xxxx免费看久爱| 一本久道中文字幕精品亚洲嫩| 色偷偷88欧美精品久久久| 一本大道av一区二区在线播放| 99国内精品久久| 欧美体内she精视频| 欧美日韩国产另类一区| 欧美主播一区二区三区| 欧美日韩在线精品一区二区三区激情 | 国产传媒日韩欧美成人| 成人性生交大片免费看视频在线| 成人性生交大片免费| 91天堂素人约啪| 欧美日韩国产片| 日韩精品中文字幕一区二区三区 | 亚洲二区在线观看| 日本vs亚洲vs韩国一区三区 | 久久99国产乱子伦精品免费| 国产精品2024| 在线观看视频91| 欧美日韩aaa| 国产亚洲一二三区| 亚洲男人都懂的| 日本成人在线看| 激情五月婷婷综合| 成人av午夜电影| 欧美三级欧美一级| 久久品道一品道久久精品| 亚洲欧洲中文日韩久久av乱码| 亚洲成人精品影院| 国产精品一区二区x88av| 色老汉一区二区三区| 欧美大尺度电影在线| 日韩欧美第一区| 久久人人97超碰com| 一区二区三区四区激情| 久88久久88久久久| 99久久99久久久精品齐齐| 欧美一区二区三区色| 国产精品的网站| 天天色综合成人网| 国产一区二区三区免费| 在线观看亚洲一区| 欧美电影精品一区二区| 日韩一区在线播放| 久久国产欧美日韩精品| 91免费版在线| 久久蜜桃av一区二区天堂| 亚洲午夜电影在线观看| 91小视频在线| 中文字幕在线一区| 国产精品一二三| 久久久久久久久久久电影| 久久99精品网久久| 日韩欧美国产小视频| 日本麻豆一区二区三区视频| 欧美午夜在线一二页| 亚洲综合清纯丝袜自拍| 日本二三区不卡| 亚洲日本成人在线观看| 91伊人久久大香线蕉| 国产精品成人免费在线| www.日韩av| 一区精品在线播放| 91网站最新网址| 亚洲制服丝袜一区| 欧美无砖砖区免费| 亚洲成人三级小说| 欧美肥妇bbw| 久久国产精品无码网站| 精品国产伦理网| 国产在线视频不卡二| 久久精品视频一区二区| 国产精品99久久久久| 国产午夜久久久久| 国产成人综合在线| 国产精品久99| 色综合久久99| 午夜在线电影亚洲一区| 日韩欧美在线一区二区三区| 蜜桃视频第一区免费观看| 久久―日本道色综合久久| 成人午夜在线播放| 亚洲女厕所小便bbb| 日韩一区二区在线观看视频| 亚洲成人动漫在线观看| 91精品国产全国免费观看| 久久精品久久久精品美女| 欧美xxxx在线观看| 大白屁股一区二区视频| 亚洲蜜桃精久久久久久久| 欧美日韩大陆在线| 久久99精品视频| 亚洲欧美在线观看| 欧美区视频在线观看| 免费成人在线影院| 国产精品美日韩| 色综合欧美在线视频区| 日本在线不卡视频| 中文字幕巨乱亚洲| 欧美色成人综合| 国产毛片精品一区|