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

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

?? tmhal.c

?? PNX系列設備驅動 PNX系列設備驅動
?? C
?? 第 1 頁 / 共 2 頁
字號:
/*---------------------------------------------------------------------------- 
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
	#define	TR	Tilakraj Roy
	960510	TR 	Created
	961019	TR	Moved the CTC 1.1 bug fix in IRQGen from IRQAck.
	970521	TR	Rewrote for Generic Target TMMan
	
*/

/*----------------------------------------------------------------------------
          SYSTEM INCLUDE FILES
----------------------------------------------------------------------------*/
/* tm1 specific includes */
#include "ops/custom_defs.h"
#include "ops/custom_ops.h"
#include "tm1/mmio.h"
#include "tm1/tmInterrupts.h"
#include "tmlib/AppModel.h"

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

typedef struct tagHalObject
{
    UInt32	TMDeviceVendorID;
	UInt32	TMSubsystemID;
	UInt32	TMClassRevisionID;
    UInt32	BridgeDeviceVendorID;
    UInt32	BridgeSubsystemID;
	UInt32	BridgeClassRevisionID;

	UInt8* MMIOBase;
	UInt32 MMIOLength;
	UInt8* SDRAMBase;
	UInt32 SDRAMLength;
	UInt8* MMIOMapped;
	UInt8* SDRAMMapped;
	UInt32 SelfInterrupt;
	UInt32 PeerInterrupt;
	HalInterruptHandler Handler;
	Pointer	Context;
	HalControl*	Control;
	UInt32	PeerMajorVersion;
	UInt32	PeerMinorVersion;
	UInt32	SpeculativeLoadFix;
	UInt32	MemoryAccessInterruptState;
}	HalObject;

/* GLOBALS */

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

/* 
this crap is required since TM hardware cannot 
return a registered context in an interrupt 
*/
#define		constMaxInterruptHandlers	constTMManBoardCount

extern UInt32* Host2TargetIntPtr;
extern UInt32* Target2HostIntPtr;

/*
#define	PROTOTYPEhalHardwareInterruptHandler(x) \
void halHardwareInterruptHandler##x ( void );


#define	BEGINhalHardwareInterruptHandler(x) \
void halHardwareInterruptHandler##x ( void ) \
{ \
	HalObject*	Hal = HalInterruptContextTable[x];
	#define	ENDhalHardwareInterruptHandler \
	AppModel_suspend_scheduling (); \
	halDisableIRQ ( (UInt32)Hal ); \
	Hal->Handler ( Hal->Context ); \
	halEnableIRQ ( (UInt32)Hal ); \
	AppModel_resume_scheduling (); \
}


PROTOTYPEhalHardwareInterruptHandler(0);
PROTOTYPEhalHardwareInterruptHandler(1);
PROTOTYPEhalHardwareInterruptHandler(2);
PROTOTYPEhalHardwareInterruptHandler(3);
PROTOTYPEhalHardwareInterruptHandler(4);
*/

static	Pointer HalGlobal = 0;

void halHardwareInterruptHandler ( void ) 
{ 
	HalObject*	Hal = HalGlobal;
	#pragma	TCS_handler

	AppModel_suspend_scheduling ();
	AppModel_run_on_sstack( (Pointer)Hal->Handler, (Pointer)Hal->Context );
	AppModel_resume_scheduling ();
}

/*
	this is neeed since we have no way of determining
	whcih processor generated the interrupt.
	so we install seperate interrupt handlers for each procesor.
	and the context that these interrupt handlers have to refer to
	are hardcoded in the functions themselves.
*/


static	Pointer HalInterruptContextTable[constMaxInterruptHandlers];
/*
static	Pointer HalInterruptHandlerTable[constMaxInterruptHandlers] = 
{
	(Pointer)halHardwareInterruptHandler0,
	(Pointer)halHardwareInterruptHandler1,
	(Pointer)halHardwareInterruptHandler2,
	(Pointer)halHardwareInterruptHandler3,
	(Pointer)halHardwareInterruptHandler4
};
*/
/* FUNCTION IMPLEMENTATION */
/*
	This function assumes that the host has already set the mmio regiters to 
	their proper values. So we just read them in order to initialize our data
	structures.
*/
TMStatus	halCreate ( 
	Pointer Parameters,
	UInt32* HalHandlePointer )
{
	TMStatus		StatusCode;
	HalObject*	Hal;
	intInstanceSetup_t	Setup;
	UInt32 gpiojMod2;

	/*
	Pointer InterruptHandler = 
		HalInterruptHandlerTable[((halParameters*)Parameters)->DSPNumber];
	*/
	if ( ( Hal = objectAllocate ( 
		sizeof ( HalObject ),
		HalFourCC ) ) == Null )
	{
		StatusCode = statusObjectAllocFail; 
		goto halCreateExit1;
	}

/* NM added change */
/* Due to an interaction with the new GPIO facilities of TM2, the MMIO register 
GPIOJ_MOD2 must be programmed to enable 'regular-function' of the imaginary 'J21' 
pin, which is actually PCI INTA.  See TM2 Databook 29.11 for details.   */

#ifndef GPIOJ_MOD2
#define  GPIOJ_MOD2 0x104194
#endif

    gpiojMod2 = MMIO(GPIOJ_MOD2);
    gpiojMod2 &= 0xfffff3ff;
    gpiojMod2 |= 0xc00;
    MMIO(GPIOJ_MOD2) = gpiojMod2;
/* End of NM added change */
	Hal->MMIOBase = Hal->MMIOMapped = ((halParameters*)Parameters)->MMIOBase;
	Hal->MMIOLength			= ((halParameters*)Parameters)->MMIOLength;
	Hal->SelfInterrupt		= ((halParameters*)Parameters)->TMIrq;
	Hal->PeerInterrupt		= ((halParameters*)Parameters)->PCIIrq;

    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;

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

	Hal->SDRAMBase = Hal->SDRAMMapped = 
		(UInt8 *)(*(UInt32*)( Hal->MMIOBase + DRAM_BASE));
	Hal->SDRAMLength		= (*(UInt32*)( Hal->MMIOBase + DRAM_LIMIT)) -
		(*(UInt32*)( Hal->MMIOBase + DRAM_BASE));

	HalGlobal = Hal;

	Target2HostIntPtr = &Hal->Control->TargetInterruptSpinLock;
	Host2TargetIntPtr = &Hal->Control->HostInterruptSpinLock;

	if ( intOpen ( (intInterrupt_t)Hal->SelfInterrupt ) != 0 )
	{
		StatusCode = statusHalAllocInterruptFail;
		goto	halCreateExit2;
	}

	Setup.enabled = True;
	Setup.handler = halHardwareInterruptHandler;
	Setup.level_triggered = False;
	Setup.priority = intPRIO_0;

	if ( intInstanceSetup (
		(intInterrupt_t)Hal->SelfInterrupt, /* HOST INTERRUPTING US */
		&Setup ) != 0 )
	{
		StatusCode = statusHalConnectInterruptFail;
		goto	halCreateExit3;
	}


	*HalHandlePointer = (UInt32)Hal;

	return statusSuccess;	

halCreateExit3:
	intClose (  (intInterrupt_t)Hal->SelfInterrupt );

halCreateExit2:
	objectFree( Hal );

halCreateExit1:
	return StatusCode;

}

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

#ifdef DEBUG
	if ( objectValidate ( Hal, HalFourCC ) != True )
	{
		return statusInvalidHandle;
	}
#endif

	intClose (  (intInterrupt_t)Hal->SelfInterrupt );
	objectFree( Hal );
	return statusSuccess;
}

TMStatus	halGetMMIOInfo (
	UInt32	HalHandle,
	Pointer *MMIOPhysical, 
	Pointer *MMIOMapped, 
	UInt32 *MMIOSize )

{
	HalObject*	Hal = (HalObject*)HalHandle;
#ifdef DEBUG
	if ( objectValidate ( Hal, HalFourCC ) != True )
	{
		return statusInvalidHandle;
	}
#endif

	*MMIOPhysical = Hal->MMIOBase;
	*MMIOMapped = Hal->MMIOMapped;
	*MMIOSize = Hal->MMIOLength;
	return statusSuccess;
}

TMStatus	halGetSDRAMInfo ( 
	UInt32	HalHandle,
	Pointer *SDRAMPhysical, 
	Pointer *SDRAMMapped, 
	UInt32 *SDRAMSize )
{
	HalObject*	Hal = (HalObject*)HalHandle;

#ifdef DEBUG
	if ( objectValidate ( Hal, HalFourCC ) != True )
	{
		return statusInvalidHandle;
	}
#endif

	*SDRAMPhysical = Hal->SDRAMBase;
	*SDRAMMapped = Hal->SDRAMMapped;
	*SDRAMSize = Hal->SDRAMLength;
	return statusSuccess;

}

TMStatus	halGetTMPCIInfo ( 
	UInt32	HalHandle,
	UInt32* DeviceVendorID,
	UInt32* SubsystemID,
	UInt32* ClassRevisionID )
{
	HalObject*	Hal = (HalObject*)HalHandle;
#ifdef DEBUG
	if ( objectValidate ( Hal, HalFourCC ) != True )
	{
		DPF(0,("tmman:halGetTMPCIInfo:objectValidate:FAIL\n" ));
		return statusInvalidHandle;
	}
#endif

	*DeviceVendorID = Hal->TMDeviceVendorID;
	*SubsystemID = Hal->TMSubsystemID;
	*ClassRevisionID = Hal->TMClassRevisionID;

	return statusSuccess;
}

TMStatus	halGetBridgePCIInfo ( 
	UInt32	HalHandle,
	UInt32* DeviceVendorID,
	UInt32* SubsystemID,
	UInt32* ClassRevisionID )
{
	HalObject*	Hal = (HalObject*)HalHandle;

#ifdef DEBUG
	if ( objectValidate ( Hal, HalFourCC ) != True )
	{
		DPF(0,("tmman:halGetBridgePCIInfo:objectValidate:FAIL\n" ));
		return statusInvalidHandle;
	}
#endif
	*DeviceVendorID = Hal->BridgeDeviceVendorID;
	*SubsystemID = Hal->BridgeSubsystemID;
	*ClassRevisionID = Hal->BridgeClassRevisionID;


	return statusSuccess;
}

TMStatus	halInstallHandler ( 
	UInt32	HalHandle,
	HalInterruptHandler Handler, 
	Pointer Context )
{

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
玉足女爽爽91| 六月丁香婷婷久久| 精品久久人人做人人爽| 欧美在线观看视频一区二区三区| 成人动漫一区二区| 成人午夜在线播放| 成人国产在线观看| 欧美一二区视频| 精品国产乱码久久久久久夜甘婷婷 | 中文字幕巨乱亚洲| 久久精品视频在线免费观看 | 欧美午夜电影网| 欧美日韩视频不卡| 欧美成人精精品一区二区频| 亚洲久草在线视频| 激情综合色播五月| 奇米影视一区二区三区小说| 激情伊人五月天久久综合| 在线精品国精品国产尤物884a| 国产日产亚洲精品系列| 亚洲免费大片在线观看| 同产精品九九九| 韩国女主播一区| 制服.丝袜.亚洲.中文.综合| 久久无码av三级| 有码一区二区三区| 91色婷婷久久久久合中文| 日韩欧美国产一区二区在线播放| 国产精品色一区二区三区| 亚洲一区二区三区美女| 国产精品一区二区在线观看网站| 91丨porny丨国产入口| 欧美国产精品一区二区| 国产福利一区在线| 欧美日韩一区二区三区免费看| 一区二区三区欧美| 激情综合色丁香一区二区| 日韩久久久精品| 韩国女主播成人在线观看| 久久久久久久国产精品影院| 亚洲风情在线资源站| 国产精华液一区二区三区| 久久嫩草精品久久久精品| 国产一区三区三区| 91精品国产黑色紧身裤美女| 亚洲视频1区2区| 国产老肥熟一区二区三区| 久久久久久久久久久久久久久99| 国产91精品入口| 欧美精品一区二区蜜臀亚洲| 国内成人自拍视频| 国产三级一区二区| 97精品国产露脸对白| 国产亚洲污的网站| 97se亚洲国产综合自在线观| 亚洲一区二区三区四区五区中文 | 成人91在线观看| 亚洲激情自拍视频| 91精品在线一区二区| 国产在线视频精品一区| 国产精品福利一区| 国产精品99久久不卡二区| 综合欧美亚洲日本| 欧美性大战久久久| 国产一区二区三区黄视频 | 欧美成人性福生活免费看| 国产精品123区| 樱花草国产18久久久久| 日韩一区二区三区三四区视频在线观看| 精品一区二区三区免费毛片爱| 国产精品久久久爽爽爽麻豆色哟哟 | 欧美特级限制片免费在线观看| 日本大胆欧美人术艺术动态| 欧美日韩久久久| 亚洲一区中文在线| 精品少妇一区二区三区 | 国产一区在线精品| 亚洲同性同志一二三专区| 91精品国产一区二区三区| 国产a精品视频| 日韩高清在线观看| 日韩码欧中文字| 久久影院视频免费| 欧美日韩成人一区二区| 风流少妇一区二区| 青青草国产成人av片免费| 亚洲视频一区二区在线| 亚洲精品在线三区| 欧美日韩精品福利| 99re在线精品| 国产成人日日夜夜| 日本午夜精品视频在线观看| 亚洲丝袜制服诱惑| 国产亚洲欧美日韩在线一区| 欧美一区二区三区四区久久| 在线欧美一区二区| 91在线免费播放| 国产 日韩 欧美大片| 精一区二区三区| 亚洲国产一区二区三区| 亚洲视频小说图片| 国产精品美女视频| 久久综合资源网| 精品久久久久久综合日本欧美| 欧美精品自拍偷拍动漫精品| 韩国v欧美v亚洲v日本v| 日韩 欧美一区二区三区| 亚洲二区在线观看| 亚洲一二三级电影| 亚洲在线成人精品| 亚洲一区二区av电影| 一区二区三区四区av| 亚洲男同性视频| 亚洲人成在线播放网站岛国| 中文字幕在线观看一区二区| 5566中文字幕一区二区电影| 欧美日韩一二三| 欧美日韩中文另类| 欧美日韩黄色影视| 7777精品久久久大香线蕉| 91精品国产一区二区三区香蕉| 日韩手机在线导航| 精品粉嫩aⅴ一区二区三区四区 | 91精彩视频在线| 国产中文字幕精品| 国产一区二区三区黄视频| 国产麻豆精品theporn| 国产精品99久久久久久久女警| 国产91高潮流白浆在线麻豆 | 久久99精品国产麻豆不卡| 麻豆91免费看| 一区二区三区中文字幕精品精品 | 亚洲第一综合色| 日韩三级中文字幕| 26uuu精品一区二区三区四区在线 26uuu精品一区二区在线观看 | 2020日本不卡一区二区视频| 久久久高清一区二区三区| 欧美激情资源网| 亚洲欧美日韩系列| 五月婷婷综合在线| 精品在线一区二区| 99久精品国产| 717成人午夜免费福利电影| 久久久久久免费毛片精品| 国产精品热久久久久夜色精品三区| 亚洲欧美日韩在线| 日韩电影一区二区三区四区| 国产乱国产乱300精品| 色综合色综合色综合色综合色综合| 国产一区二区三区av电影| 91丨九色丨黑人外教| 日韩视频在线一区二区| 综合久久综合久久| 麻豆国产精品777777在线| 白白色 亚洲乱淫| gogogo免费视频观看亚洲一| 欧美色图12p| 国产日产精品一区| 亚洲高清不卡在线观看| 国产成人av资源| 欧美三区免费完整视频在线观看| 久久影院视频免费| 亚洲va欧美va国产va天堂影院| 国产大陆a不卡| 欧美人狂配大交3d怪物一区| 国产精品久久久久久久久搜平片 | 色老综合老女人久久久| 精品日韩一区二区三区| 依依成人精品视频| 国产精品综合久久| 欧美日韩成人一区| 亚洲欧美日韩综合aⅴ视频| 精品亚洲国内自在自线福利| 欧美色欧美亚洲另类二区| 国产精品视频免费| 久久精品国产精品亚洲综合| 91福利视频久久久久| 国产精品久久久久久亚洲毛片| 久久激五月天综合精品| 欧美人体做爰大胆视频| 亚洲色图自拍偷拍美腿丝袜制服诱惑麻豆 | 免费人成精品欧美精品| 在线影院国内精品| 国产精品高清亚洲| 国产成a人亚洲| 欧美精品一区二区三区蜜桃视频| 亚洲 欧美综合在线网络| 91美女在线观看| 国产精品美女久久久久aⅴ国产馆| 看电视剧不卡顿的网站| 7777精品久久久大香线蕉| 亚洲成人动漫av| 欧美性感一类影片在线播放| 一区二区三区四区不卡视频 | 欧美日韩不卡在线| 亚洲图片有声小说| 在线亚洲一区二区| 亚洲一区二区三区四区五区黄| 99久久国产综合精品色伊| 国产精品人成在线观看免费|