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

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

?? osal.c

?? PNX系列設備驅動 PNX系列設備驅動
?? C
字號:
/*---------------------------------------------------------------------------- 
COPYRIGHT (c) 1997 by Philips Semiconductors

THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY ONLY BE USED AND COPIED IN 
ACCORDANCE WITH THE TERMS AND CONDITIONS OF SUCH A LICENSE AND WITH THE 
INCLUSION OF THE THIS COPY RIGHT NOTICE. THIS SOFTWARE OR ANY OTHER COPIES 
OF THIS SOFTWARE MAY NOT BE PROVIDED OR OTHERWISE MADE AVAILABLE TO ANY OTHER
PERSON. THE OWNERSHIP AND TITLE OF THIS SOFTWARE IS NOT TRANSFERRED. 

THE INFORMATION IN THIS SOFTWARE IS SUBJECT TO CHANGE WITHOUT ANY PRIOR NOTICE
AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY Philips Semiconductor. 

PHILIPS ASSUMES NO RESPONSIBILITY FOR THE USE OR RELIABILITY OF THIS SOFTWARE
ON PLATFORMS OTHER THAN THE ONE ON WHICH THIS SOFTWARE IS FURNISHED.
----------------------------------------------------------------------------*/
/*
	HISTORY
	960510	Tilakraj Roy 	Created
	961019	Tilakraj Roy	Moved the CTC 1.1 bug fix in IRQGen from IRQAck.
	970521	Tilakraj Roy	Rewrote for Generic Target TMMan
    980604  Volker Schildwach  Ported to Windows CE
	981021	Tilakraj Roy	Changes for integrating into common source base
	
*/

/*----------------------------------------------------------------------------
          SYSTEM INCLUDE FILES
----------------------------------------------------------------------------*/

#include <windows.h>
#include "ceddk.h"
#include "stdlib.h"

/*----------------------------------------------------------------------------
          DRIVER SPECIFIC INCLUDE FILES
----------------------------------------------------------------------------*/
#include "tmmanapi.h"
#include "tmmanlib.h"
#include "platform.h"

/* Synchronization Object Abstraction Functions */
typedef	struct	tagSynchronizationObject
{
	UInt32	UserModeHandle;
	UInt32	KernelModeHandle;	
	UInt32	SynchronizationFlags;
}	SynchronizationObject;

Bool	syncobjCreate ( 
	UInt32 SynchronizationFlags,
	UInt32	OSSynchronizationHandle,
	UInt32 *SynchronizationHandlePointer,
	Int8* Name  )
{
	ULONG	Idx;


    HANDLE hEvent;

    WCHAR UnicodeString[constTMManNameSpaceNameLength + 1];

	// we have to find all the '\' in the string and ignore those.
	// so we doa reverse scan for back slashes.

	for( Idx = ( strlen ( Name ) + 1 ); Idx > 0 ; Idx -- ) 
	{
		if ( Name [Idx-1] =='\\' )
			break;
	}



    //BUGBUG: we have to alllocate one character more than necessary and zero it out
    //        WINCE UNICODE bug!
    MultiByteToWideChar(  CP_ACP,           // code page
                          MB_PRECOMPOSED,   // character-type options
                          ( Name + Idx ) ,         // address of string to map
                          -1, // number of bytes in string
                          UnicodeString,         // address of wide-character buffer
                          (constTMManNameSpaceNameLength + 1) * 2 );// size of buffer);

    if ( ( hEvent =  CreateEvent( NULL, FALSE, FALSE, UnicodeString ) ) == NULL )
    {
	    DPF (0,("Osal:syncobjCreate:CreateEvent:FAIL[%x]\n",GetLastError() ));
        return False;
    }

    *SynchronizationHandlePointer = (UInt32)hEvent;

	return True;
}

Bool	syncobjSignal ( 
	UInt32 SynchronizationHandle )
{
    return SetEvent((HANDLE)SynchronizationHandle );
}


Bool	syncobjDestroy ( 
	UInt32 SynchronizationHandle )
{
    return CloseHandle((HANDLE)SynchronizationHandle);
}


Bool	critsectCreate ( 
	UInt32* CriticalSectionObjectPointer )
{
    CRITICAL_SECTION * pCriticalSection; 

    pCriticalSection = (CRITICAL_SECTION *)memAllocate(sizeof(CRITICAL_SECTION) );
    
	if ( ! pCriticalSection  )
		return False;

    InitializeCriticalSection(pCriticalSection); 
        
	*CriticalSectionObjectPointer = (UInt32)pCriticalSection;

	return True;

}

Bool	critsectDestroy ( 
	UInt32 CriticalSectionObject )
{

	memFree ( (Pointer) CriticalSectionObject );
	return True;
}

/* Note that the caller has to allocate storage 
	sizeof (UInt32) for nested context and pass the address
	of that parameter to this function.
*/
Bool	critsectEnter ( 
	UInt32 CriticalSectionObject, Pointer NestedContext )
{
    EnterCriticalSection(( CRITICAL_SECTION *)CriticalSectionObject); 
	return True;
}

Bool	critsectLeave ( 
	UInt32 CriticalSectionObject, Pointer NestedContext )
{
    LeaveCriticalSection(( CRITICAL_SECTION *)CriticalSectionObject); 
	return True;
}


Pointer	clientGetObjectFromProcess ( UInt32 Process )
{
	UInt32 ClientIdx;

	for ( ClientIdx = 0 ; ClientIdx < TMManGlobal->MaximumClients ; ClientIdx ++ )
	{
		if ( !TMManGlobal->ClientList[ClientIdx] )
			continue;

		if ( ((ClientObject*)TMManGlobal->ClientList[ClientIdx])->Process != Process )
			continue;
		break;
	}

	if ( ClientIdx == TMManGlobal->MaximumClients )
	{
		return Null;
	}

	return (Pointer)TMManGlobal->ClientList[ClientIdx];
}

Pointer clientGetDeviceObjectFromClient ( Pointer Client, UInt32 DSPNumber )
{
  	return NULL;
}

typedef	struct	tagPageTableObject
{
	PVOID BufferAddress;
	UInt32 BufferSize;
}	PageTableObject;


UInt32	pagetableGetTempBufferSize ( 
	UInt32 BufferAddress, UInt32 BufferSize )
{
	return ADDRESS_AND_SIZE_TO_SPAN_PAGES ( BufferAddress, BufferSize ) * sizeof(PageTableEntry);
}

Bool	pagetableCreate ( 
	UInt32 BufferAddress,
	UInt32 BufferSize,
	Pointer TempBuffer,
	UInt32	HalHandle,
	PageTableEntry	**PageTablePointer,
	UInt32 *PageTableEntryCountPointer,
	UInt32 *PageTableHandlePointer )
{
    // I think we need some documentation here:

    // Parameter description:

    //  BufferAddress : virtual address tp pre-allocated non-cached memory
    //  BufferSize    : size of buffer in bytes
    //  TempBuffer    : pre-allocated temporary buffer for page table entries
    //  HalHandle     : hal handle
    //  PageTablePointer : returns ptr to array of the page table struct
    //  PageTableEntryCountPointer : returns number of contiguous regions (length of array)
    //  PageTableHandlePointer : returns identifier for this page table (used for deletion)
    DWORD   dwActualOut         = 0;
    DWORD*  pPageBuffer         = NULL;
    DWORD   dwPageBufferSize    = 0;
    DWORD   dwPageTableEntries  = 0;
    DWORD   i                   = 0;
    DWORD   dwContCount          = 0;
    PageTableObject*  pPageTableObj ;
    
    // get required size for page buffer

    if (KernelIoControl(
		( TMManGlobal->OEMIOCTLBase + TMM_IOCTL_SYSMEM_PAGE_LOCK_OFFSET ), 
		NULL, 
		BufferSize, 
		NULL, 
		0, 
		&dwPageBufferSize) == FALSE)
    {
        DPF (0,("Osal:pagetableCreate:KernelIoControl FAILED\n"));
        goto pagetableCreateExit1;
    }


    pPageBuffer = (DWORD*)memAllocate (dwPageBufferSize);
   
    // lock pages and get list of physical adresses
    if (KernelIoControl(
		( TMManGlobal->OEMIOCTLBase + TMM_IOCTL_SYSMEM_PAGE_LOCK_OFFSET ), 
		(void*)BufferAddress, 
		BufferSize, 
		pPageBuffer, 
		dwPageBufferSize, 
		&dwActualOut) == FALSE)
    {
        DPF (0,("Osal:pagetableCreate:KernelIoControl FAILED\n"));
        goto pagetableCreateExit2;
    }
  
    // fill structures:
    dwPageTableEntries = dwActualOut / sizeof(DWORD);
    // thereby combine physical contigous regions

    ((PageTableEntry*)TempBuffer)[0].PhysicalAddress = pPageBuffer[0];
    ((PageTableEntry*)TempBuffer)[0].RunLength = PAGE_SIZE;
    
    DPF(8,("Osal:pagetableCreate: Entri[0]=  %x\n",pPageBuffer[0]));
    for (i=1; i < dwPageTableEntries; i++)
    {
        DPF(8,("Osal:pagetableCreate: Entri[%d]=  %x\n",i,pPageBuffer[i]));
        if (pPageBuffer[i] == (pPageBuffer[i-1] + PAGE_SIZE))
        {
            // increase size of contiguous region
            ((PageTableEntry*)TempBuffer)[dwContCount].RunLength += PAGE_SIZE;
        }
        else
        {
            // start next contiguous region:
            dwContCount++;
            ((PageTableEntry*)TempBuffer)[dwContCount].RunLength = PAGE_SIZE;
            ((PageTableEntry*)TempBuffer)[dwContCount].PhysicalAddress = pPageBuffer[i];
        }        
    }

    DPF(8,("Osal:pagetableCreate: dwContCount = %d\n",dwContCount));
    DPF(8,("Osal:pagetableCreate: dwPageTableEntries = %d\n",dwPageTableEntries));

    // allocate page table object handle
    pPageTableObj = (PageTableObject*)memAllocate(sizeof(PageTableObject));

    pPageTableObj->BufferAddress = (PVOID)BufferAddress;
    pPageTableObj->BufferSize    = BufferSize;

    // set return values:
	*PageTablePointer           = TempBuffer,
	*PageTableEntryCountPointer = dwContCount+1,
	*PageTableHandlePointer     = (UInt32)pPageTableObj;


    memFree(pPageBuffer);
    
    return TRUE;

pagetableCreateExit2:
    memFree(pPageBuffer);

pagetableCreateExit1:
    return FALSE;
}

Bool	pagetableDestroy ( 
	UInt32 PageTableHandle )
{
    DWORD   dwActualOut         = 0;
	PageTableObject	*PageTableObj = (PageTableObject*)PageTableHandle;
    BOOL    bRet = FALSE;

    bRet= KernelIoControl(  
		( TMManGlobal->OEMIOCTLBase + TMM_IOCTL_SYSMEM_PAGE_UNLOCK_OFFSET ), 
		PageTableObj->BufferAddress, 
		PageTableObj->BufferSize, 
		NULL, 
		0, 
		&dwActualOut); 

    memFree(PageTableObj);

    return bRet;

}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91精品国产91综合久久蜜臀| 91成人免费在线| 三级影片在线观看欧美日韩一区二区 | 日韩精品影音先锋| 7777精品伊人久久久大香线蕉经典版下载| 色av一区二区| 欧美优质美女网站| 欧美日韩精品一区二区三区四区| 在线一区二区视频| 欧美精品vⅰdeose4hd| 91精品国产综合久久小美女 | 人人精品人人爱| 欧美a一区二区| 国产一区 二区| 97久久超碰国产精品| 欧美日韩在线播| 欧美一区二区黄| 欧美激情一区不卡| 一区二区高清在线| 精品一区二区在线观看| 国产成人免费网站| 91福利在线免费观看| 欧美情侣在线播放| 国产无人区一区二区三区| 亚洲欧美另类图片小说| 视频一区二区三区入口| 成人午夜av在线| 欧美三级一区二区| 久久亚洲一区二区三区四区| 亚洲欧美国产高清| 麻豆极品一区二区三区| 岛国一区二区在线观看| 欧美午夜精品久久久久久孕妇| 91精品国产黑色紧身裤美女| 国产女主播视频一区二区| 亚洲影院理伦片| 国产精品影视在线观看| 欧美三级电影在线看| 国产色爱av资源综合区| 亚洲成人午夜影院| 国产美女视频一区| 欧美群妇大交群的观看方式| 国产精品区一区二区三区| 蜜臀av性久久久久av蜜臀妖精| av高清不卡在线| 亚洲精品一区二区三区四区高清| 一区二区免费在线播放| 国产成人综合在线播放| 欧美福利电影网| 亚洲精品国产a| 丁香激情综合五月| 久久影院视频免费| 日本色综合中文字幕| 色先锋久久av资源部| 国产精品视频观看| 激情综合五月婷婷| 91精品国产综合久久久蜜臀粉嫩 | 免费观看在线综合色| 91小视频免费观看| 久久久噜噜噜久久中文字幕色伊伊| 香蕉久久夜色精品国产使用方法 | 国产精品免费久久久久| 黄色小说综合网站| 精品美女在线播放| 国产成人免费视频网站| 日韩欧美亚洲另类制服综合在线| 亚洲国产欧美在线人成| 91色porny在线视频| 国产精品毛片大码女人| 高清国产一区二区| 国产精品婷婷午夜在线观看| 国产美女娇喘av呻吟久久| 久久亚洲综合av| 国产精品系列在线观看| 精品久久久久久久久久久久久久久久久 | 国产视频一区二区在线观看| 久久精工是国产品牌吗| 精品少妇一区二区三区| 精品一区二区三区久久久| 精品久久久三级丝袜| 国产九色sp调教91| 欧美韩国日本一区| www.日韩大片| 亚洲美女在线国产| 欧美日韩电影一区| 青青草国产精品亚洲专区无| 欧美不卡一区二区三区| 精品一区二区三区影院在线午夜| 精品国产乱码久久久久久久| 国产白丝网站精品污在线入口| 日本一区二区免费在线| 91麻豆免费在线观看| 亚洲国产视频在线| 欧美成人三级在线| av一本久道久久综合久久鬼色| 亚洲免费在线视频一区 二区| 在线观看日产精品| 日韩电影免费在线看| 国产偷v国产偷v亚洲高清| 色狠狠一区二区三区香蕉| 日韩av电影免费观看高清完整版在线观看| 欧美一级日韩一级| 北岛玲一区二区三区四区| 午夜影院在线观看欧美| 2欧美一区二区三区在线观看视频| 粉嫩aⅴ一区二区三区四区| 亚洲国产精品麻豆| 精品国产一区二区三区久久久蜜月 | 日韩三级伦理片妻子的秘密按摩| 国产精品69毛片高清亚洲| 亚洲一区二区三区在线看| 日韩免费看的电影| 在线观看一区二区精品视频| 久久66热偷产精品| 又紧又大又爽精品一区二区| 精品福利av导航| 色噜噜狠狠色综合欧洲selulu| 奇米影视一区二区三区| 最新国产の精品合集bt伙计| 欧美高清激情brazzers| 一本色道a无线码一区v| 精品在线一区二区| 午夜欧美视频在线观看| 蜜桃av一区二区在线观看| 国产乱理伦片在线观看夜一区| 国产精品第四页| 久久福利视频一区二区| 亚洲夂夂婷婷色拍ww47| 久久久久久久久久久久久夜| 欧美日韩一区高清| 久久99精品久久久久| 欧美日韩久久久一区| 99精品黄色片免费大全| 欧美亚洲日本国产| 日韩西西人体444www| 国产午夜精品久久久久久久| 国产精品理论片在线观看| 一区二区三区日韩在线观看| 婷婷丁香久久五月婷婷| 精品无人区卡一卡二卡三乱码免费卡| 韩国女主播一区| 91在线视频免费91| 91精品国产综合久久久久久漫画 | www.欧美精品一二区| 日本高清不卡视频| 欧美一区二区三区视频在线| 亚洲精品一区二区三区影院| 亚洲视频一区在线观看| 欧美96一区二区免费视频| 粉嫩久久99精品久久久久久夜| 色狠狠色狠狠综合| 精品国产乱码久久久久久夜甘婷婷| 国产精品麻豆久久久| 秋霞国产午夜精品免费视频| 国产69精品久久777的优势| 在线欧美一区二区| 久久久综合激的五月天| 亚洲国产你懂的| 成人精品gif动图一区| 91精品国产综合久久久久久久久久| 国产精品无人区| 免费观看30秒视频久久| 91社区在线播放| 久久综合久久鬼色| 午夜精品爽啪视频| 99热这里都是精品| 欧美大胆一级视频| 亚洲成人免费在线| 91女人视频在线观看| 久久综合久久综合亚洲| 亚洲主播在线观看| 成人精品高清在线| 久久久99免费| 免费久久精品视频| 欧美羞羞免费网站| 亚洲欧美aⅴ...| 成人妖精视频yjsp地址| 精品国产一区二区三区不卡 | 欧美日韩国产欧美日美国产精品| 国产日产欧产精品推荐色 | 亚洲成人久久影院| 91在线看国产| 国产精品你懂的| 国产一区二区三区不卡在线观看| 91精品国产入口| 亚洲综合网站在线观看| 91在线视频播放地址| 国产精品网站在线| 国产sm精品调教视频网站| 久久婷婷成人综合色| 蜜臀av在线播放一区二区三区| 欧美精品日日鲁夜夜添| 亚洲永久免费视频| 欧美午夜精品一区二区三区| 亚洲午夜日本在线观看| 在线这里只有精品| 亚洲电影视频在线| 欧美日韩在线电影| 天堂一区二区在线| 337p亚洲精品色噜噜噜|