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

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

?? tmhal.c

?? PNX系列設(shè)備驅(qū)動 PNX系列設(shè)備驅(qū)動
?? 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;
    }

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
**性色生活片久久毛片| 欧美经典一区二区| 成人激情免费视频| 丝袜诱惑制服诱惑色一区在线观看| 久久久午夜电影| 欧美日韩亚州综合| 成人av高清在线| 六月丁香婷婷久久| 亚洲午夜久久久久久久久久久| 国产人成亚洲第一网站在线播放| 欧美日韩不卡一区| 99视频精品免费视频| 黄页视频在线91| 亚洲成国产人片在线观看| 国产精品天干天干在观线| 日韩一级二级三级精品视频| 日本大香伊一区二区三区| 国产夫妻精品视频| 久久er99精品| 日本女人一区二区三区| 亚洲午夜激情av| 亚洲欧美激情视频在线观看一区二区三区 | 综合激情成人伊人| 久久久久久久国产精品影院| 欧美高清视频www夜色资源网| 色哟哟国产精品| 成人免费视频视频在线观看免费| 激情六月婷婷久久| 久久国产精品99久久人人澡| 日本不卡视频在线观看| 亚洲成av人影院| 亚洲国产综合在线| 又紧又大又爽精品一区二区| 国产精品天美传媒| 中文字幕在线视频一区| 国产欧美在线观看一区| 国产午夜一区二区三区| 久久影院视频免费| 久久久国产精品麻豆| 久久精品无码一区二区三区| 久久久久久久电影| 亚洲国产精品ⅴa在线观看| 久久久99久久| 国产精品久久久久一区二区三区共 | 一区二区三区.www| 一区二区高清免费观看影视大全| 亚洲另类一区二区| 亚洲国产一区二区视频| 亚洲妇熟xx妇色黄| 人人爽香蕉精品| 国产伦理精品不卡| 懂色av中文字幕一区二区三区 | 欧美日韩中文一区| 欧美一级视频精品观看| 亚洲精品在线免费观看视频| 久久精品人人做| 136国产福利精品导航| 亚洲精品国产a久久久久久 | 亚洲免费在线电影| 亚洲午夜视频在线观看| 久久99精品久久久久久久久久久久 | 亚洲欧洲日韩av| 亚洲综合久久久| 久久精品国产精品亚洲综合| 国产一区不卡视频| 99国产精品久| 7777精品伊人久久久大香线蕉的| 日韩欧美久久久| 国产精品福利一区二区三区| 亚洲午夜三级在线| 久久91精品国产91久久小草| 成人永久看片免费视频天堂| 欧美亚洲一区二区在线观看| 91精品国产色综合久久久蜜香臀| 久久影院视频免费| 一区二区三区产品免费精品久久75| 蜜桃久久久久久| www.日韩大片| 欧美一区二区三区电影| 国产精品美女一区二区三区 | 国产欧美日韩另类一区| 亚洲免费资源在线播放| 美女www一区二区| 91免费观看视频| 精品日韩在线一区| 亚洲免费色视频| 国产毛片精品视频| 欧美日韩免费不卡视频一区二区三区| 精品日韩欧美在线| 亚洲一区二区美女| 国产成人免费网站| 69堂精品视频| 亚洲日本va在线观看| 久久9热精品视频| 在线看国产日韩| 国产精品美女久久久久久久网站| 天天色天天爱天天射综合| 成人性生交大片免费看中文| 欧美电影一区二区三区| 亚洲欧洲在线观看av| 韩国三级在线一区| 欧美乱妇23p| 亚洲男人的天堂在线观看| 国产伦精品一区二区三区免费迷 | 粉嫩aⅴ一区二区三区四区| 日韩一区二区免费电影| 亚洲一二三四久久| eeuss鲁片一区二区三区在线观看| 欧美福利视频一区| 亚洲女同ⅹxx女同tv| 国产乱码一区二区三区| 宅男在线国产精品| 亚洲国产成人高清精品| 99re热视频这里只精品| 国产三区在线成人av| 久久国产精品一区二区| 51精品视频一区二区三区| 亚洲一区二区四区蜜桃| jizz一区二区| 国产精品网曝门| 国产成a人无v码亚洲福利| 欧美va亚洲va在线观看蝴蝶网| 亚洲一级不卡视频| 精品视频一区二区不卡| 亚洲日本免费电影| 色94色欧美sute亚洲线路二 | 一区二区三区av电影 | 精品福利在线导航| 裸体歌舞表演一区二区| 正在播放一区二区| 青青草97国产精品免费观看| 欧美巨大另类极品videosbest| 亚洲视频综合在线| 91在线观看地址| 国产精品传媒在线| 99精品久久只有精品| 亚洲欧洲av在线| av一区二区三区四区| 1000精品久久久久久久久| 99免费精品视频| 一区二区三区高清| 欧美日韩国产高清一区二区三区| 天堂va蜜桃一区二区三区漫画版| 欧美日本视频在线| 久久精品国产亚洲一区二区三区| 91精品国产免费| 久久er99热精品一区二区| 久久久噜噜噜久久人人看 | 亚洲欧洲av在线| 欧洲色大大久久| 日本在线不卡一区| 久久综合99re88久久爱| 国产成人综合在线| 一色屋精品亚洲香蕉网站| 91国产精品成人| 日韩成人免费电影| 欧美精品一区二区久久久| 国产成人午夜99999| 亚洲免费色视频| 久久综合999| 成人精品鲁一区一区二区| 亚洲三级在线播放| 777欧美精品| 福利电影一区二区| 一区二区三区中文免费| 91精品欧美综合在线观看最新| 久久丁香综合五月国产三级网站| 久久久不卡影院| 在线国产电影不卡| 久草在线在线精品观看| 中文字幕一区三区| 在线成人av影院| 国产精品1024| 亚洲高清免费一级二级三级| 精品国产亚洲在线| 91麻豆自制传媒国产之光| 日韩国产在线观看| 国产精品日韩成人| 欧美一区二区网站| 成人h精品动漫一区二区三区| 一区二区三区精品| 欧美高清在线精品一区| 欧美色图第一页| 国产精品99久| 日韩高清不卡一区二区三区| 久久久精品免费观看| 欧美亚洲日本国产| 国产91高潮流白浆在线麻豆| 亚洲成av人片在线观看无码| 久久蜜臀精品av| 欧美精品xxxxbbbb| 99精品久久99久久久久| 美日韩一区二区三区| 亚洲女人小视频在线观看| 精品99一区二区| 欧美日韩成人高清| 91精品91久久久中77777| 国产一区二区三区四区五区美女| 亚洲国产另类av| 中文字幕欧美一区|