⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tmif.h

📁 wince host 和 target PCI驱动程序
💻 H
字号:
/*
	tmif.h

	950928	TR	Created.
	960610	TR	Major revamp to include all the new tmman interfaces.

	The TriMedia inter-ring interface header file.
	This files contains the data structures and constants that are passed from
	Ring 3 to Ring 0 and also Ring 0 to Ring0.
	Any entry into vtmman.vxd has to be made via the tmif intefaces,
	ctcmon is the only entity that  presently bypasses this paradigm.
*/

#define 	TMIF_ERR_DSPNUMOUTOFRANGE		TMERR(TM_STATUS_HCOMP_TMIF,1)
#define 	TMIF_ERR_MINVERSIONERR			TMERR(TM_STATUS_HCOMP_TMIF,2)
#define 	TMIF_ERR_MAJVERSIONERR			TMERR(TM_STATUS_HCOMP_TMIF,3)

#define RING3_FUNC_BASE	16


#define DIOC_READMEM		( 1 + RING3_FUNC_BASE ) 
#define DIOC_WRITEMEM		( 2 + RING3_FUNC_BASE ) 
#define DIOC_READMEMDMA		( 3 + RING3_FUNC_BASE ) 
#define DIOC_WRITEMEMDMA	( 4 + RING3_FUNC_BASE ) 
#define DIOC_GENHOSTINT		( 5 + RING3_FUNC_BASE ) 
#define DIOC_ACKHOSTINT		( 6 + RING3_FUNC_BASE ) 
#define DIOC_QUIT			( 7 + RING3_FUNC_BASE )
#define DIOC_PCIREAD		( 8 + RING3_FUNC_BASE )
#define DIOC_PCIWRITE		( 9 + RING3_FUNC_BASE )
#define DIOC_GETCONFIG		( 10 + RING3_FUNC_BASE )
#define DIOC_VXDVERSION		( 11 + RING3_FUNC_BASE )
#define DIOC_GENDSPIRQ		( 12 + RING3_FUNC_BASE )
#define DIOC_WAITFORIRQ		( 13 + RING3_FUNC_BASE )
#define DIOC_SIMHOSTIRQ		( 14 + RING3_FUNC_BASE )

#define DIOC_STARTEXECUTION	( 15 + RING3_FUNC_BASE )
#define DIOC_GETPHYSICAL	( 16 + RING3_FUNC_BASE )
#define DIOC_GETLINEAR		( 17 + RING3_FUNC_BASE )


/* this functionality is a duplicte of what DOSPCI does and should be removed */


/*
	VxDDispatcher 
	pointer to the ring 0 entry point in ring 3.
	This pointer had to be initialized by calling vxdInitialize(VxDID)
*/

typedef DWORD ( * VxDDispatcher )( DWORD dwFunc,
	DWORD dwInputBufPtr, DWORD dwInputBufLen,
	DWORD dwOutputBufPtr, DWORD dwOutputBufLen );

#define	TMIF_FUNCTION_BASE	(0xff)

// functions that map directly to the tmman interace

#define	TMIF_DIOC_MSGCREATE			( TMIF_FUNCTION_BASE + 1 )
#define	TMIF_DIOC_MSGDESTROY		( TMIF_FUNCTION_BASE + 3 )
#define	TMIF_DIOC_MSGSEND			( TMIF_FUNCTION_BASE + 2 )

#define	TMIF_DIOC_BUFFERPREPARE		( TMIF_FUNCTION_BASE + 4 )
#define	TMIF_DIOC_BUFFERXFER		( TMIF_FUNCTION_BASE + 5 )
#define	TMIF_DIOC_BUFFERUNPREPARE	( TMIF_FUNCTION_BASE + 6 )

#define	TMIF_DIOC_TASKCREATE		( TMIF_FUNCTION_BASE + 7 )
#define TMIF_DIOC_TASKSTART			( TMIF_FUNCTION_BASE + 8 )
#define	TMIF_DIOC_TASKDESTROY		( TMIF_FUNCTION_BASE + 9 )
#define	TMIF_DIOC_TASKSTOP			( TMIF_FUNCTION_BASE + 26 )
#define	TMIF_DIOC_TASKSIGNAL		( TMIF_FUNCTION_BASE + 27 )

#define TMIF_DIOC_NEGOTIATEVERSION	( TMIF_FUNCTION_BASE + 0xa )

#define TMIF_DIOC_DSPGETNUM			( TMIF_FUNCTION_BASE + 0xb )
#define TMIF_DIOC_DSPGETCAPS		( TMIF_FUNCTION_BASE + 0xc )
#define TMIF_DIOC_DSPOPEN			( TMIF_FUNCTION_BASE + 0xd )
#define TMIF_DIOC_DSPEXECUTABLELOAD	( TMIF_FUNCTION_BASE + 0xe )
#define TMIF_DIOC_DSPEXECUTABLERUN 	( TMIF_FUNCTION_BASE + 0xf )
#define TMIF_DIOC_DSPEXECUTABLESTOP	( TMIF_FUNCTION_BASE + 0x10 )
#define TMIF_DIOC_DSPGETSTATUS		( TMIF_FUNCTION_BASE + 0x11 )
#define TMIF_DIOC_DSPCLOSE			( TMIF_FUNCTION_BASE + 0x12 )

#define	TMIF_DIOC_TASKCREATESYS		( TMIF_FUNCTION_BASE + 0x13 )
#define	TMIF_DIOC_TASKDESTROYSYS	( TMIF_FUNCTION_BASE + 0x14 )

#define	TMIF_DIOC_SHMEMALLOCATE		( TMIF_FUNCTION_BASE + 0x15 )
#define	TMIF_DIOC_SHMEMFREE			( TMIF_FUNCTION_BASE + 0x16 )

#define	TMIF_DIOC_DSPGETMISCINFO	( TMIF_FUNCTION_BASE + 0x17 )
#define	TMIF_DIOC_DSPRESET			( TMIF_FUNCTION_BASE + 0x18 )

#define	TMIF_DIOC_DWORDPARAMGET		( TMIF_FUNCTION_BASE + 0x20 )
#define	TMIF_DIOC_DWORDPARAMSET		( TMIF_FUNCTION_BASE + 0x21 )

#define	TMIF_DIOC_STRMCREATE		( TMIF_FUNCTION_BASE + 0x22 )
#define	TMIF_DIOC_STRMDESTROY		( TMIF_FUNCTION_BASE + 0x23 )
#define	TMIF_DIOC_STRMGETOPOS		( TMIF_FUNCTION_BASE + 0x24 )
#define	TMIF_DIOC_STRMRESET			( TMIF_FUNCTION_BASE + 0x25 )

// functions that do not directly map to the tmman intterface

#define TMIF_DIOC_REGISTERCLIENT	( TMIF_FUNCTION_BASE + 0x100 )
#define	TMIF_DIOC_BLOCKONADVISE		( TMIF_FUNCTION_BASE + 0x101 )
#define	TMIF_DIOC_PHYS2LIN			( TMIF_FUNCTION_BASE + 0x102 )
#define	TMIF_DIOC_LIN2PHYS			( TMIF_FUNCTION_BASE + 0x103 )
#define TMIF_DIOC_UNREGISTERCLIENT	( TMIF_FUNCTION_BASE + 0x104 )

//  interfaces for tmldr called by tmman32

#define TMIF_DIOC_CHECKTMLDR		( TMIF_FUNCTION_BASE + 0x105 )

// private vtmman functions called by tmldr 
#define TMIF_DIOC_TMLDRREGISTER		( TMIF_FUNCTION_BASE + 0x106 )
#define TMIF_DIOC_TMLDRUNREGISTER	( TMIF_FUNCTION_BASE + 0x107 )
#define TMIF_DIOC_TMLDRCOMPLETE		( TMIF_FUNCTION_BASE + 0x108 )
#define TMIF_DIOC_TMLDRLOADOS		( TMIF_FUNCTION_BASE + 0x109 )
#define TMIF_DIOC_TMLDRUNLOADOS		( TMIF_FUNCTION_BASE + 0x10a )
#define TMIF_DIOC_TMLDRLOADTASK		( TMIF_FUNCTION_BASE + 0x10b )
#define TMIF_DIOC_TMLDRUNLOADTASK	( TMIF_FUNCTION_BASE + 0x10c )
#define TMIF_DIOC_TMLDRPATCHLOC		( TMIF_FUNCTION_BASE + 0x10d )

#define	TMIF_DIOC_DSPSETMISCINFO	( TMIF_FUNCTION_BASE + 0x10e )

/* CONSTANTS */
#define		TMIF_TASK_CREATE_STREAMCOUNT	0x4
#define		TMIF_TASK_CREATE_MESSAGECOUNT	0x4

//#define		TMIF_TASK_NAMELEN				0x8


typedef struct	_TMIF_REGISTERCLIENT
{
	IN	DWORD	dwModuleHandle;
	IN	DWORD	dwContext;
	OUT	DWORD	dwClientHandle;	
	OUT	PVOID	pvAdvisoryQueue;
	OUT	PVOID	pvOverlapped;
	OUT	BOOL	FlagTMLDRStarted;
	OUT	STATUS	Status;

}	TMIF_REGISTERCLIENT, *PTMIF_REGISTERCLIENT;


#define		TMIF_ADVISORY_REQUEST_COUNT		0x100

typedef struct _TMIF_ADVISORY_REQUEST
{
	DWORD	dwMessage;
	DWORD	dwObjHandle;
	PVOID	pContext;
	DWORD	dwCallback;
	TMSTD_PACKET	Packet;

}	TMIF_ADVISORY_REQUEST, *PTMIF_ADVISORY_REQUEST;

//
//			STRUCTURES REQURIED FOR API MARSHALING
//

typedef	struct _TMIF_STRUCT_NEGOTIATEVERSION
{
	OUT	STATUS			Status;
	IN	DWORD			ModuleID;
	TMSTD_VERSION_INFO	Version;
}	TMIF_STRUCT_NEGOTIATEVERSION, *PTMIF_STRUCT_NEGOTIATEVERSION;

typedef	struct _TMIF_STRUCT_DSPGETNUM
{
	IN	DWORD	ClientHandle;
	OUT	STATUS	Status;
	OUT	DWORD	DSPCount;
}	TMIF_STRUCT_DSPGETNUM, *PTMIF_STRUCT_DSPGETNUM;

#define	TMIF_DSPMISCINFO_SYMBOLNOTPATCHED	0x01
#define	TMIF_DSPMISCINFO_TMCONSRUNNING		0x02

typedef	struct _TMIF_STRUCT_DSPMISCINFO
{
	IN	DWORD	ClientHandle;
	OUT	STATUS	Status;
	IN	DWORD	DSPHandle;
	OUT	TMMAN_DSP_INFO	Info;
}	TMIF_STRUCT_DSPMISCINFO, *PTMIF_STRUCT_DSPMISCINFO;

typedef	struct _TMIF_STRUCT_DSPGETSTATUS
{
	IN	DWORD	ClientHandle;
	OUT	STATUS	Status;
	IN	DWORD	DSPHandle;
	OUT	DWORD	DSPStatus;
}	TMIF_STRUCT_DSPGETSTATUS, *PTMIF_STRUCT_DSPGETSTATUS;

typedef	struct _TMIF_STRUCT_DSPGETCAPS
{
	IN	DWORD	ClientHandle;
	OUT	STATUS	Status;
	IN	DWORD	DSPHandle;
	OUT	TMMAN_DSP_CAPS	DSPCaps;
}	TMIF_STRUCT_DSPGETCAPS, *PTMIF_STRUCT_DSPGETCAPS;


typedef	struct _TMIF_STRUCT_DSPOPEN
{
	IN	DWORD	ClientHandle;
	OUT	STATUS	Status;
	IN	DWORD	DSPNumber;
	OUT	DWORD	DSPHandle;

}	TMIF_STRUCT_DSPOPEN, *PTMIF_STRUCT_DSPOPEN;


typedef	struct _TMIF_STRUCT_DSPCLOSE
{
	IN	DWORD	ClientHandle;
	OUT	STATUS	Status;
	IN	DWORD	DSPHandle;
}	TMIF_STRUCT_DSPCLOSE, *PTMIF_STRUCT_DSPCLOSE;

typedef	struct _TMIF_STRUCT_DSPEXECUTABLELOAD
{
	IN	DWORD	ClientHandle;
	OUT	STATUS	Status;
	IN	DWORD	DSPHandle;
	IN	DWORD	PhysLoadAddr;
	IN	DWORD	ImageAddr;
	IN	DWORD	ImageSize;
	IN	DWORD	ArgC;
	IN	DWORD	ArgV;
	IN	DWORD	TargetMajorVersion;
	IN	DWORD	TargetMinorVersion;
}	TMIF_STRUCT_DSPEXECUTABLELOAD, *PTMIF_STRUCT_DSPEXECUTABLELOAD;

typedef	struct _TMIF_STRUCT_DSPEXECUTABLERUN
{
	IN	DWORD	ClientHandle;
	OUT	STATUS	Status;
	IN	DWORD	DSPHandle;
	IN	DWORD	PhysStartAddr;
}	TMIF_STRUCT_DSPEXECUTABLERUN, *PTMIF_STRUCT_DSPEXECUTABLERUN;

typedef	struct _TMIF_STRUCT_DSPEXECUTABLESTOP
{
	IN	DWORD	ClientHandle;
	OUT	STATUS	Status;
	IN	DWORD	DSPHandle;
}	TMIF_STRUCT_DSPEXECUTABLESTOP, *PTMIF_STRUCT_DSPEXECUTABLESTOP;

typedef	struct _TMIF_STRUCT_DSPRESET
{
	IN	DWORD	ClientHandle;
	OUT	STATUS	Status;
	IN	DWORD	DSPHandle;
}	TMIF_STRUCT_DSPRESET, *PTMIF_STRUCT_DSPRESET;

typedef	struct	_TMIF_STRUCT_TASKCREATE
{
	IN	DWORD	ClientHandle;
	OUT	STATUS	Status;
	IN	DWORD	DSPHandle;
	IN	DWORD	dwFlags;
	IN	DWORD	dwCallback;
	IN	PVOID	pvContext;
	IN	DWORD	dwPriority;
	IN	DWORD	dwStackSize;
	IN	DWORD	dwArgumentCount;
	IN	PCHAR	*ppbArgumentVector;
	IN	CHAR	szTaskFile[TMSTD_PATH_LENGTH];
   	OUT	DWORD	TaskHandle;
}	TMIF_STRUCT_TASKCREATE, *PTMIF_STRUCT_TASKCREATE;

typedef struct _TMIF_STRUCT_TASKSTART
{
	IN	DWORD	ClientHandle;
	OUT	STATUS	Status;
	IN	DWORD	TaskHandle;
}	TMIF_STRUCT_TASKSTART, *PTMIF_STRUCT_TASKSTART;

typedef struct _TMIF_STRUCT_TASKSTOP
{
	IN	DWORD	ClientHandle;
	OUT	STATUS	Status;
	IN	DWORD	TaskHandle;
}	TMIF_STRUCT_TASKSTOP, *PTMIF_STRUCT_TASKSTOP;

typedef struct _TMIF_STRUCT_TASKDESTROY
{
	IN	DWORD	ClientHandle;
	OUT	STATUS	Status;
	IN	DWORD	TaskHandle;
}	TMIF_STRUCT_TASKDESTROY, *PTMIF_STRUCT_TASKDESTROY;

typedef struct _TMIF_STRUCT_TASKSIGNAL
{
	IN	DWORD	ClientHandle;
	OUT	STATUS	Status;
	IN	DWORD	TaskHandle;
	IN	DWORD	State;
}	TMIF_STRUCT_TASKSIGNAL, *PTMIF_STRUCT_TASKSIGNAL;

typedef struct _TMIF_STRUCT_MSGCREATE
{
	IN	DWORD	ClientHandle;
	OUT	STATUS	Status;
	IN	DWORD	DSPHandle;
	IN	DWORD	CallbackFunction;
	IN	DWORD	CallbackContext;
	IN	DWORD	Slots;
	IN	DWORD	ChannelID;
	OUT	DWORD	MsgHandle;
}	TMIF_STRUCT_MSGCREATE, *PTMIF_STRUCT_MSGCREATE;

typedef struct _TMIF_STRUCT_MSGSEND
{
	IN	DWORD	ClientHandle;
	OUT	STATUS	Status;
	IN	DWORD	MsgHandle;
	IN	TMSTD_PACKET	Packet;
}	TMIF_STRUCT_MSGSEND, *PTMIF_STRUCT_MSGSEND;

typedef struct _TMIF_STRUCT_MSGDESTROY
{
	IN	DWORD	ClientHandle;
	OUT	STATUS	Status;
	IN	DWORD	MsgHandle;
}	TMIF_STRUCT_MSGDESTROY, *PTMIF_STRUCT_MSGDESTROY;

typedef struct _TMIF_STRUCT_SHMEMALLOCATE
{
	IN	DWORD	ClientHandle;
	OUT	STATUS	Status;
	IN	DWORD	DSPHandle;
	IN	DWORD	Flags;
	IN	DWORD	Size;
	OUT	PVOID	Linear;
	OUT	DWORD	Physical;
}	TMIF_STRUCT_SHMEMALLOCATE, *PTMIF_STRUCT_SHMEMALLOCATE;

typedef struct _TMIF_STRUCT_SHMEMFREE
{
	IN	DWORD	ClientHandle;
	OUT	STATUS	Status;
	IN	DWORD	DSPHandle;
	IN	PVOID	Linear;
}	TMIF_STRUCT_SHMEMFREE, *PTMIF_STRUCT_SHMEMFREE;

typedef struct _TMIF_STRUCT_BUFFERPREPARE
{
	IN	DWORD	ClientHandle;
	OUT	STATUS	Status;
	IN	DWORD	DSPHandle;
	IN	DWORD	dwAddress;
	IN	DWORD	dwSize;
	OUT	DWORD	dwPhysicalAddress;
	OUT	DWORD	dwBufferHandle;
}	TMIF_STRUCT_BUFFERPREPARE, *PTMIF_STRUCT_BUFFERPREPARE;

typedef struct _TMIF_STRUCT_BUFFERUNPREPARE
{
	IN	DWORD	ClientHandle;
	OUT	STATUS	Status;
	IN	DWORD	dwBufferHandle;
}	TMIF_STRUCT_BUFFERUNPREPARE, *PTMIF_STRUCT_BUFFERUNPREPARE;

typedef struct _TMIF_STRUCT_DWORDPARAMGETSET
{
	IN	DWORD	ClientHandle;
	OUT	STATUS	Status;
	IN	DWORD	DSPHandle;
	IN	DWORD	ParamID;
	DWORD		Value;
}	TMIF_STRUCT_DWORDPARAMGETSET, *PTMIF_STRUCT_DWORDPARAMGETSET;




/*---------------------------------------------------------------------------
	TMLDR - private interfaces
---------------------------------------------------------------------------*/
/*
	TMIF_STRUCT_TMLDRREQUEST
	this struct is used to send request pakcets from the vtmman to tmldr
*/
typedef struct _TMIF_STRUCT_TMLDRREQUEST
{
	IN	DWORD	ClientHandle;
	IN	DWORD	LoaderHandle;
	IN	PVOID	pContext;
	IN	BYTE	String[0x100];
	OUT	STATUS	Status;
}	TMIF_STRUCT_TMLDRREQUEST, *PTMIF_STRUCT_TMLDRREQUEST;

typedef struct _TMIF_STRUCT_TMLDRREPLY
{
	IN	DWORD	ClientHandle;
	IN	DWORD	LoaderHandle;
	IN	PVOID	pContext;
	OUT	STATUS	Status;
}	TMIF_STRUCT_TMLDRREPLY, *PTMIF_STRUCT_TMLDRREPLY;

typedef struct _TMIF_STRUCT_TMLDRREGISTER
{
	IN	DWORD	dwModuleHandle;
	IN	DWORD	dwContext;
	OUT	DWORD	LoaderHandle;	
	OUT	PVOID	pQueue;
	OUT	PVOID	pOverlapped;
	OUT	STATUS	Status;
}	TMIF_STRUCT_TMLDRREGISTER, *PTMIF_STRUCT_TMLDRREGISTER;

typedef struct _TMIF_STRUCT_TMLDRUNREGISTER
{
	IN	DWORD	LoaderHandle;
	OUT	DWORD	Status;
}	TMIF_STRUCT_TMLDRUNREGISTER, *PTMIF_STRUCT_TMLDRUNREGISTER;

typedef struct _TMIF_STRUCT_SECTION
{
	PVOID	pSrcLinearAddr;
	DWORD	DstPhysicalAddr;
	DWORD	Size;
}	TMIF_STRUCT_SECTION, *PTMIF_STRUCT_SECTION;

typedef struct _TMIF_STRUCT_TMLDRLOADIMAGE
{
	IN	DWORD		LoaderHandle;
	IN	PVOID		pSectionTable;
	IN	DWORD		SectionCount;
	OUT	STATUS		Status;
}	TMIF_STRUCT_TMLDRLOADIMAGE, *PTMIF_STRUCT_TMLDRLOADIMAGE;

typedef struct _TMIF_STRUCT_TMLDRPATCHMEMORY
{
	IN	DWORD		LoaderHandle;
	IN	PVOID		pPatchTable;
	IN	DWORD		PatchCount;
	OUT	STATUS		Status;
}	TMIF_STRUCT_TMLDRPATCHMEMORY, *PTMIF_STRUCT_TMLDRPATCHMEMORY;


/*
	Defines for requests sent from vtmman to TMLDR
*/
#define	TMIF_LOADER_REQUEST_COUNT			0x16


#define	TMIF_TMLDRREQ_LOADEXECUTEABLE		0x01
#define	TMIF_TMLDRREQ_LOADTASK				0x02
#define	TMIF_TMLDRREQ_GETSYMBOLADDR			0x03

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -