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

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

?? tmhal.c

?? PNX系列設備驅動 PNX系列設備驅動
?? C
?? 第 1 頁 / 共 3 頁
字號:
/*---------------------------------------------------------------------------- 
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
//	979527  Tilakraj Roy  Ported to Windows NT with TMMan V4.0 interfaces
//	970806	Tilakraj Roy Ported to Windows NT with TMMan V5.0 interfaces
//	982005	Volker Schildwach	Ported to Windwos CE
//	981021	Tilakraj Roy	Changes for integrating into common source base
//
//////////////////////////////////////////////////////////////////////////////

//////////////////////////////////////////////////////////////////////////////
//				SYSTEM INCLUDE FILES
//////////////////////////////////////////////////////////////////////////////


#include <windows.h>
#include "ceddk.h"
#include "NkIntr.h"
#define SYSINTR_TRIMEDIA (SYSINTR_FIRMWARE + Hal->Irql)

//////////////////////////////////////////////////////////////////////////////
//				DRIVER SPECIFIC INCLUDE FILES
//////////////////////////////////////////////////////////////////////////////

#include "tmmanlib.h"
#include "platform.h"
#include "mmio.h"

//////////////////////////////////////////////////////////////////////////////
//				MANIFEST CONSTANTS
//////////////////////////////////////////////////////////////////////////////

#define		HalFourCC		tmmanOBJECTID ( 'H', 'A', 'L', ' ' )

//////////////////////////////////////////////////////////////////////////////
//				TYPEDEFS
//////////////////////////////////////////////////////////////////////////////

typedef struct tagHalObject
{
	GenericObject		Object;
    ULONG				TMDeviceVendorID;
	ULONG				TMSubsystemID;
	ULONG				TMClassRevisionID;

    ULONG				BridgeDeviceVendorID;
    ULONG				BridgeSubsystemID;
	ULONG				BridgeClassRevisionID;

	ULONG				SelfInterrupt;	// from Target -> Host 
	ULONG				PeerInterrupt;	// Host -> Target 
	HalInterruptHandler	Handler;
	Pointer				Context;

	HalControl*			Control;
	/*	true -  target processor is running in different indianess */
	/*	false -  target processor is running in different indianess */
	Bool				Swapping;	

	ULONG				PeerMajorVersion;
	ULONG				PeerMinorVersion;

	/* BEGIN Platform Specific */

    ULONG				BusNumber;
    PCI_SLOT_NUMBER		SlotNumber;

    PHYSICAL_ADDRESS    MMIOAddrPhysical;
    ULONG               MMIOLength;
	PHYSICAL_ADDRESS	MMIOAddrTranslated;
	PUCHAR				MMIOAddrKernel;

    PHYSICAL_ADDRESS    SDRAMAddrPhysical;
    ULONG               SDRAMLength;
	PHYSICAL_ADDRESS	SDRAMAddrTranslated;
	PUCHAR				SDRAMAddrKernel;
	

	ULONG				MappedInterruptVector;

	BOOLEAN				FirstTimeReset;

    HANDLE              hThreadHandle;
    DWORD               dwThreadId;
    HANDLE              InterruptEvent;
    UINT				Irql;


	ULONG				DSPNumber;
	PDEVICE_OBJECT		TMManDeviceObject;
	PDEVICE_OBJECT		DeviceObject;
	PDRIVER_OBJECT		DriverObject;
	PADAPTER_OBJECT		AdapterObject;
	ULONG				NumberOfMapRegisters;
	ULONG				SpeculativeLoadFix;

	ULONG				SDRAMMapCount;

	ULONG				PCIRegisters[constTMMANPCIRegisters];

}	HalObject;

#define		PCI_CONFIG_ADDR_PORT		((PULONG)0xcf8)
#define		PCI_CONFIG_DATA_PORT		((PULONG)0xcfc)

typedef		struct _PCI_CONFIG_ADDRESS
{
	union
	{
		struct{
			ULONG	Zeros:2;
			ULONG	RegisterNumber:6;
			ULONG	FunctionNumber:3;
			ULONG	DeviceNumber:5;
			ULONG	BusNumber:8;
			ULONG	Reserved:7;
			ULONG	Enable:1;
		}BitField;
		ULONG	Long;
	}u;
}	PCI_CONFIG_ADDRESS, *PPCI_CONFIG_ADDRESS;

//////////////////////////////////////////////////////////////////////////////
//				PROTOTYPES
//////////////////////////////////////////////////////////////////////////////
void	halDumpObject (
 	UInt32	HalHandle );


DWORD  WINAPI halHardwareInterruptHandler(PVOID pContext);

//////////////////////////////////////////////////////////////////////////////
//				IMPLEMENTATION
//////////////////////////////////////////////////////////////////////////////

TMStatus	halCreate ( 
	Pointer Parameters,
	UInt32* HalHandlePointer )
{
	TMStatus		Status = statusHalInitializationFail;
	NTSTATUS		NTStatus;
	HalObject*		Hal;
	ULONG			AddressSpace, Idx;

	if ( ( Hal = objectAllocate ( 
		sizeof ( HalObject ),
		HalFourCC ) ) == NULL )
	{
	    DPF(0,("tmman:halCreate:objectAllocate:FAIL\n" ));
		Status = statusObjectAllocFail; 
		goto halCreateExit1;
	}


	Hal->SelfInterrupt = ((halParameters*)Parameters)->PCIIrq;// from Target -> Host 
	Hal->PeerInterrupt = ((halParameters*)Parameters)->TMIrq;// Host -> Target 

    Hal->InterruptEvent = NULL;
    Hal->Handler = Null;
	Hal->Context = Null;
	Hal->Swapping = False; // target running in same endianness

    Hal->TMDeviceVendorID = ((halParameters*)Parameters)->TMDeviceVendorID;
	Hal->TMSubsystemID = ((halParameters*)Parameters)->TMSubsystemID;
	Hal->TMClassRevisionID = ((halParameters*)Parameters)->TMClassRevisionID;

    Hal->BridgeDeviceVendorID = ((halParameters*)Parameters)->BridgeDeviceVendorID;
    Hal->BridgeSubsystemID = ((halParameters*)Parameters)->BridgeSubsystemID;
	Hal->BridgeClassRevisionID = ((halParameters*)Parameters)->BridgeClassRevisionID;

	/* BEGIN Platform Specific */
    Hal->BusNumber	= ((halParameters*)Parameters)->BusNumber;
	Hal->SlotNumber			= ((halParameters*)Parameters)->SlotNumber;
	Hal->TMManDeviceObject	= ((halParameters*)Parameters)->DeviceObject;
	Hal->DriverObject	= ((halParameters*)Parameters)->DriverObject;
	Hal->DSPNumber	= ((halParameters*)Parameters)->DSPNumber;
    Hal->MMIOAddrPhysical	= ((halParameters*)Parameters)->MMIOAddrPhysical;
	Hal->MMIOLength			= ((halParameters*)Parameters)->MMIOLength;

    Hal->SDRAMAddrPhysical	= ((halParameters*)Parameters)->SDRAMAddrPhysical;
	Hal->SDRAMLength		= ((halParameters*)Parameters)->SDRAMLength;
	Hal->Control			= ((halParameters*)Parameters)->SharedData;

	Hal->SpeculativeLoadFix	= ((halParameters*)Parameters)->SpeculativeLoadFix;
	Hal->SDRAMMapCount = 0;

	for ( Idx = 0 ; Idx < constTMMANPCIRegisters ; Idx ++ )
	{
		Hal->PCIRegisters[Idx] = 
			((halParameters*)Parameters)->PCIRegisters[Idx];
	}
   
    // get a handle to the physical memory for mapping user sections

	// create a device object for this physical hardware

   	// Map MMIO address space
    // Map Registers into our address space.
	
    if ((Hal->MMIOAddrKernel=(char*)VirtualAlloc(
		0,
		Hal->MMIOLength,
		MEM_RESERVE,
		PAGE_NOACCESS))==NULL)
	{
        DPF(0,("tmman:halCreate:VirtualAlloc:MMIO:FAIL size = 0x%x\n",Hal->MMIOLength ));
        goto	halCreateExit4;
	}

	if(!VirtualCopy(
			(void *)Hal->MMIOAddrKernel,
			(void *)(Hal->MMIOAddrPhysical.LowPart>>8),
			Hal->MMIOLength,
			PAGE_READWRITE|PAGE_PHYSICAL|PAGE_NOCACHE))
	{
		DPF(0,("tmman:halCreate:MmMapIoSpace:MMIO:FAIL \n" ));
        goto	halCreateExit5;
	}


    // Now map in the SDRAM Window (just allocate one page as we only have 32MByte of virtual memory)

	if ( TMManGlobal->MapSDRAM )
	{

		if ((Hal->SDRAMAddrKernel=(char*)VirtualAlloc(
			0,
			Hal->SDRAMLength,
			MEM_RESERVE,
			PAGE_NOACCESS))==NULL)
		{
			DPF(0,("tmman:halCreate:VirtualAlloc:SDRAM:FAIL size=0x%x\n",Hal->SDRAMLength ));
			goto	halCreateExit5;
		}

		if(!VirtualCopy(
			(void *)Hal->SDRAMAddrKernel,
			(void *)(Hal->SDRAMAddrPhysical.LowPart>>8),
			Hal->SDRAMLength,
			PAGE_READWRITE|PAGE_PHYSICAL|PAGE_NOCACHE))
		{
			DPF(0,("tmman:halCreate:MmMapIoSpace:SDRAM:FAIL\n" ));
			goto	halCreateExit6;
		}
	}


	/* do the interrupt stuff */
    Hal->hThreadHandle = NULL;
    Hal->dwThreadId    = 0;
    Hal->Irql = ((halParameters*)Parameters)->InterruptLevel; 
    DPF(8,("HAL->Irql = %x\n", Hal->Irql));


    // Create event
    if ( ( Hal->InterruptEvent = CreateEvent( NULL, FALSE, FALSE,NULL) ) == NULL )
    {
		DPF(0,("tmman:halCreate:CreateEvent:Interrupt:FAIL[%x]\n", GetLastError ));
		goto	halCreateExit6;
    }

	if ( InterruptInitialize (SYSINTR_TRIMEDIA, Hal->InterruptEvent, NULL, 0) != TRUE )
	{
		DPF(0,("tmman:halCreate:InterruptInitialize:SYSINTR[%x]:FAIL[%x]\n", SYSINTR_TRIMEDIA, GetLastError() ));
		goto	halCreateExit7;
	}

    DPF (8,("tmman:halCreate:InterruptInitialize:ISR[%x]:HANDLE[%x]\n", 
		Hal->Irql, Hal->InterruptEvent));


    // create thread with current Windows CE restrictions
    if ( (Hal->hThreadHandle = CreateThread (
		NULL,         // security attributes not supported
		0,            // stack size must be 0
		halHardwareInterruptHandler,     
		(void*)Hal,   // ServiceContext
		CREATE_SUSPENDED, // only suspended mode is supported
		&Hal->dwThreadId )) != NULL )// returns thread ID
		
    {
        // as thread was created in suspended mode, we want to start it now
        ResumeThread(Hal->hThreadHandle);  
    }
    else
    {
		DPF(0,("tmman:halCreate:CreateThread:halHardwareInterruptHandler:FAIL[%x]\n", GetLastError() ));
        goto halCreateExit7;
    }

	/* do this only if we have to run in INTEL MODE */

    // assume TM1S+
    if ( ( *(PULONG)(Hal->MMIOAddrKernel + BIU_CTL) &
        (constTMManBIU_CTL_SE | constTMManBIU_CTL_BO | constTMManBIU_CTL_HE) ) == 0x0 )
    {	// virgin biu control
		ULONG	SwappedBIUControl;
		UCHAR	TempByte;

        SwappedBIUControl = 
            ( constTMManBIU_CTL_SE | constTMManBIU_CTL_BO | constTMManBIU_CTL_HE | constTMManBIU_CTL_SR );
        // do a dword swap
        TempByte = ((PUCHAR)&SwappedBIUControl)[0];
        ((PUCHAR)&SwappedBIUControl)[0] = ((PUCHAR)&SwappedBIUControl)[3];
        ((PUCHAR)&SwappedBIUControl)[3] = TempByte;
        TempByte = ((PUCHAR)&SwappedBIUControl)[1];
        ((PUCHAR)&SwappedBIUControl)[1] = ((PUCHAR)&SwappedBIUControl)[2];
        ((PUCHAR)&SwappedBIUControl)[2] = TempByte;

        *(PULONG)(Hal->MMIOAddrKernel + BIU_CTL) = SwappedBIUControl;
        Hal->FirstTimeReset = TRUE;
    }
    else
    {
        Hal->FirstTimeReset  = FALSE;
    }


    // set the cache details every time this function is called
    *(PULONG)(Hal->MMIOAddrKernel + DRAM_LIMIT) = Hal->SDRAMAddrPhysical.LowPart + Hal->SDRAMLength; 
    //this->MMIO.pCache->dwDRAMCacheableLimit = this->dwSDRAMPhys;
    *(PULONG)(Hal->MMIOAddrKernel + DRAM_CACHEABLE_LIMIT) = Hal->SDRAMAddrPhysical.LowPart + Hal->SDRAMLength;


	*(PULONG)(Hal->MMIOAddrKernel + ICLEAR) = (ULONG)(0x0);
	*(PULONG)(Hal->MMIOAddrKernel + IMASK) = (ULONG)(~0x0);

	Status = statusSuccess;
	*HalHandlePointer = (UInt32)Hal;
	halDumpObject ( (UInt32)Hal );

	return Status;
	/* SEH code */

halCreateExit7:
	CloseHandle ( Hal->InterruptEvent );

halCreateExit6:
	if ( TMManGlobal->MapSDRAM )
	{
	    VirtualFree(Hal->SDRAMAddrKernel,0,MEM_RELEASE);
	}

halCreateExit5:
    VirtualFree(Hal->MMIOAddrKernel,0,MEM_RELEASE);

halCreateExit4:

halCreateExit3:

halCreateExit2:
	objectFree ( Hal );

halCreateExit1:
	return Status;
}

TMStatus	halDestroy ( 
	UInt32 HalHandle )
{
	HalObject*	Hal = (HalObject*)HalHandle;


	if ( objectValidate ( Hal, HalFourCC ) != True )
	{
        DPF(0,("tmman:halDestroy:objectValidate:FAIL\n" ));
		return statusInvalidHandle;
	}

    TerminateThread(  Hal->hThreadHandle,  0  );

    if ( Hal->InterruptEvent )
    {
        InterruptDisable(SYSINTR_TRIMEDIA);
        CloseHandle(Hal->InterruptEvent);
        Hal->InterruptEvent = NULL;
    }

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久一二三国产| 国产精品主播直播| 精品国产麻豆免费人成网站| 日本韩国视频一区二区| 国产98色在线|日韩| 久久精品国产亚洲a| 日本美女一区二区| 欧美丝袜丝交足nylons图片| 91免费国产视频网站| 99精品国产热久久91蜜凸| 91女人视频在线观看| 欧美成人精品福利| 中文字幕国产一区| 国产精品美女久久久久av爽李琼| 精品无人码麻豆乱码1区2区| 久久精品噜噜噜成人av农村| 一本到不卡免费一区二区| 91福利在线观看| 一区二区三区波多野结衣在线观看| 精品毛片乱码1区2区3区| 亚洲精品中文字幕乱码三区| 午夜激情综合网| 午夜欧美在线一二页| 99久久精品国产麻豆演员表| 蜜桃视频在线观看一区| 国产99久久久精品| 亚洲精品在线电影| 久久精品国产精品亚洲精品| 欧美日韩成人一区| 国产三级欧美三级日产三级99| 欧美一区二区三区视频在线| 精品成人一区二区三区四区| 色老汉一区二区三区| 亚洲欧洲精品成人久久奇米网| 亚洲一区电影777| 另类中文字幕网| 99热99精品| 国产成人在线视频网址| 色婷婷国产精品综合在线观看| 蜜臀av一区二区在线免费观看| 91精品国产色综合久久ai换脸| 婷婷中文字幕综合| 欧美成人三级在线| 国产精品一区久久久久| 国产欧美精品一区二区色综合 | 国产成人av自拍| 国产三级精品三级在线专区| 成人av网在线| 日韩欧美高清一区| 亚洲精品高清在线| 欧美男女性生活在线直播观看| 色94色欧美sute亚洲线路二 | 色婷婷av一区二区三区大白胸| 一区二区三区高清| 欧美日韩精品系列| 国产伦精一区二区三区| 欧美另类高清zo欧美| 国产精品萝li| 国产精品久久久久桃色tv| 免费国产亚洲视频| 欧美日韩免费在线视频| 日韩一区中文字幕| 欧美精品久久久久久久久老牛影院 | 国产欧美一区二区精品性色| 中文字幕不卡一区| 91小视频免费观看| 亚洲精品福利视频网站| 一本一道综合狠狠老| 日韩成人精品视频| 日本一区二区在线不卡| 欧美麻豆精品久久久久久| 国产一区二区在线观看视频| 尤物在线观看一区| 欧美成人综合网站| 国产精品视频观看| 日韩欧美你懂的| 免费观看30秒视频久久| 亚洲欧美日韩一区二区 | 亚洲一区二区欧美激情| 久久蜜桃av一区精品变态类天堂 | 天天色天天爱天天射综合| 日本一区二区三区国色天香| 欧美精品在线观看播放| 成人18视频在线播放| 美女网站色91| 午夜久久电影网| 大胆欧美人体老妇| 欧美韩日一区二区三区四区| 91精品在线一区二区| 久久成人羞羞网站| 午夜激情综合网| 一区二区三区不卡视频| 国产精品精品国产色婷婷| 日韩精品中文字幕一区二区三区| 在线亚洲一区观看| 国产亚洲福利社区一区| 日韩一区二区电影网| 国产精品中文字幕一区二区三区| 天天操天天干天天综合网| 亚洲人成网站色在线观看| 久久久国产精华| 精品99999| 日韩精品一区二区三区视频播放| 欧美网站大全在线观看| 色综合久久中文综合久久97| 亚洲精品在线三区| 精品美女一区二区| 日韩欧美亚洲另类制服综合在线| 欧美男男青年gay1069videost| 色乱码一区二区三区88| 91色九色蝌蚪| 色天天综合色天天久久| 91无套直看片红桃| aaa亚洲精品| 久久久亚洲午夜电影| 久久久午夜精品| 国产色一区二区| 国产精品日日摸夜夜摸av| 国产精品视频麻豆| 亚洲欧美日韩综合aⅴ视频| 在线亚洲人成电影网站色www| 国产精品视频线看| 日韩专区欧美专区| 久久久精品国产免大香伊| 久久久www成人免费毛片麻豆| 精品福利一区二区三区| 久久久www免费人成精品| 国产精品免费人成网站| 国产精品国产馆在线真实露脸 | 亚洲成人免费在线| 精品蜜桃在线看| 国产视频视频一区| 18涩涩午夜精品.www| 亚洲综合免费观看高清在线观看| av在线这里只有精品| 91黄视频在线| 欧美成人三级电影在线| 中文字幕精品三区| 亚洲高清一区二区三区| 综合婷婷亚洲小说| 亚洲国产成人私人影院tom| 一区二区三区精品视频| 日韩毛片一二三区| 亚洲一区二区三区中文字幕 | 亚洲国产精品ⅴa在线观看| 亚洲丝袜美腿综合| 日韩电影在线看| 国产999精品久久| 欧美三级中文字| 久久你懂得1024| 一区二区三区在线视频观看58 | 亚洲成人在线网站| 国产一区二区福利| 欧美色老头old∨ideo| 久久久久国产免费免费| 亚洲福利视频一区| 成人av在线网站| 欧美男人的天堂一二区| 国产女人水真多18毛片18精品视频| 亚洲黄色性网站| 91精品国产综合久久精品| 中文字幕一区二区三区在线播放 | 亚洲午夜激情网页| 国产成人鲁色资源国产91色综| 欧洲精品在线观看| 国产精品国产a级| 久久97超碰色| 欧美日韩国产片| 亚洲色图19p| 678五月天丁香亚洲综合网| 国产欧美一区二区精品性色| 五月激情综合色| 色婷婷av一区二区三区软件 | 夜夜嗨av一区二区三区网页 | 欧美日本高清视频在线观看| 国产精品毛片高清在线完整版| 91成人在线精品| 日韩美女久久久| 成人免费视频视频在线观看免费| 91精品国产一区二区| 亚洲aaa精品| 日本久久一区二区| 国产精品久久久久久久蜜臀 | 极品少妇xxxx偷拍精品少妇| 欧美日韩中文字幕一区二区| 国产激情精品久久久第一区二区| 91麻豆精品国产无毒不卡在线观看| 夜夜揉揉日日人人青青一国产精品| 99精品偷自拍| 国产精品网曝门| 成人免费毛片a| 中文字幕一区二区三区不卡| 成人h动漫精品一区二| 国产精品理伦片| 99视频一区二区| 亚洲三级久久久| 色先锋资源久久综合| 成人伦理片在线| 国产精品久久777777| 波多野结衣在线aⅴ中文字幕不卡|