📄 tmif.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 + -