451 lines
20 KiB
C
Raw Permalink Normal View History

2001-01-01 00:00:00 +01:00
#ifndef _CLASS_H_
#define _CLASS_H_
/***************************************************************************\
|* *|
|* Copyright 1993-2000 NVIDIA, Corporation. All rights reserved. *|
|* *|
|* NOTICE TO USER: The source code is copyrighted under U.S. and *|
|* international laws. Users and possessors of this source code are *|
|* hereby granted a nonexclusive, royalty-free copyright license to *|
|* use this code in individual and commercial software. *|
|* *|
|* Any use of this source code must include, in the user documenta- *|
|* tion and internal comments to the code, notices to the end user *|
|* as follows: *|
|* *|
|* Copyright 1993-2000 NVIDIA, Corporation. All rights reserved. *|
|* *|
|* NVIDIA, CORPORATION MAKES NO REPRESENTATION ABOUT THE SUITABILITY *|
|* OF THIS SOURCE CODE FOR ANY PURPOSE. IT IS PROVIDED "AS IS" *|
|* WITHOUT EXPRESS OR IMPLIED WARRANTY OF ANY KIND. NVIDIA, CORPOR- *|
|* ATION DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOURCE CODE, *|
|* INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGE- *|
|* MENT, AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL *|
|* NVIDIA, CORPORATION BE LIABLE FOR ANY SPECIAL, INDIRECT, INCI- *|
|* DENTAL, OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RE- *|
|* SULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION *|
|* OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF *|
|* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOURCE CODE. *|
|* *|
|* U.S. Government End Users. This source code is a "commercial *|
|* item," as that term is defined at 48 C.F.R. 2.101 (OCT 1995), *|
|* consisting of "commercial computer software" and "commercial *|
|* computer software documentation," as such terms are used in *|
|* 48 C.F.R. 12.212 (SEPT 1995) and is provided to the U.S. Govern- *|
|* ment only as a commercial end item. Consistent with 48 C.F.R. *|
|* 12.212 and 48 C.F.R. 227.7202-1 through 227.7202-4 (JUNE 1995), *|
|* all U.S. Government End Users acquire the source code with only *|
|* those rights set forth herein. *|
|* *|
\***************************************************************************/
/****************************** Object Manager *****************************\
* *
* Module: CLASS.H *
* User Object management. *
* *
*****************************************************************************
* *
* History: *
* *
\***************************************************************************/
//---------------------------------------------------------------------------
//
// Includes.
//
//---------------------------------------------------------------------------
#ifndef _BTREE_H_
#include <btree.h>
#endif // _BTREE_H_
//---------------------------------------------------------------------------
//
// Defines.
//
//---------------------------------------------------------------------------
#define RESERVED_NAMES 4096
#define MAX_OS_NAME_LENGTH 80
//---------------------------------------------------------------------------
//
// Types and structures.
//
//---------------------------------------------------------------------------
//
// Forward declarations of structures.
//
typedef struct _def_method METHOD, *PMETHOD;
typedef struct _def_object OBJECT, *POBJECT;
typedef struct _def_class CLASS, *PCLASS;
//
// Methods.
//
typedef RM_STATUS (*METHODPROC)(PHWINFO, POBJECT, PMETHOD, U032, V032);
struct _def_method
{
METHODPROC Proc;
U032 Low;
U032 High;
};
//
// Objects.
//
typedef struct _def_class_object CLASSOBJECT, *PCLASSOBJECT;
typedef struct _def_dma_object DMAOBJECT, *PDMAOBJECT;
typedef struct _def_patch_object PATCHOBJECT, *PPATCHOBJECT;
typedef struct _def_context_time_object TIMEOBJECT, *PTIMEOBJECT;
typedef struct _def_event_notification EVENTNOTIFICATION, *PEVENTNOTIFICATION;
typedef struct _def_engine_info ENGINEINFO, *PENGINEINFO;
struct _def_object
{
U032 Name;
U032 ChID;
PCLASS Class;
U032 Subchannel;
NODE Node;
POBJECT Next;
PDMAOBJECT NotifyXlate;
U032 NotifyAction;
U032 NotifyTrigger;
PEVENTNOTIFICATION NotifyEvent;
PCLASS ThisClass; //KJK I don't like this!!
};
//
// Patch structure.
//
struct _def_patch_object
{
OBJECT Base;
POBJECT Destination;
POBJECT Source;
};
//
// NV_CLASS structure and create/destroy function prototypes.
//
typedef RM_STATUS (*CREATEOBJECTPROC)(PHWINFO, PCLASSOBJECT, U032, POBJECT *);
typedef RM_STATUS (*DELETEOBJECTPROC)(PHWINFO, POBJECT);
struct _def_class_create
{
U032 Class;
CREATEOBJECTPROC Function;
};
//
// Classes.
//
typedef struct _def_class_methods
{
U032 Type;
PMETHOD Method;
U032 MethodMax;
} CLASSMETHODS, *PCLASSMETHODS;
struct _def_class
{
U032 Type;
PMETHOD Method;
U032 MethodMax;
//U032 StateSize;
PCLASSDESCRIPTOR ClassDecl;
PCLASSDESCRIPTOR ClassInstMalloc;
PENGINEDESCRIPTOR EngineDecl;
PENGINEINFO EngineInfo;
};
struct _def_class_object
{
OBJECT Base;
};
//===========================================================================
//
// Class Defines.
//
//===========================================================================
#define NV_CONTEXT_DMA_TO_MEM 3
#define NV_NULL_OBJECT 0
//---------------------------------------------------------------------------
//
// Method prototypes.
//
//---------------------------------------------------------------------------
RM_STATUS mthdNoOperation(PHWINFO, POBJECT, PMETHOD, U032, U032);
RM_STATUS mthdValidate(PHWINFO, POBJECT, PMETHOD, U032, V032);
RM_STATUS mthdSetNotifyCtxDma(PHWINFO, POBJECT, PMETHOD, U032, V032);
RM_STATUS mthdSetNotify(PHWINFO, POBJECT, PMETHOD, U032, V032);
RM_STATUS mthdCreateLegacy(PHWINFO, POBJECT, PMETHOD, U032, V032);
RM_STATUS mthdCreate(PHWINFO, POBJECT, PMETHOD, U032, V032, VOID*);
RM_STATUS mthdDestroy(PHWINFO, POBJECT, PMETHOD, U032, V032);
RM_STATUS mthdSetNameCtxDma(PHWINFO, POBJECT, PMETHOD, U032, V032);
RM_STATUS mthdSetNameStart(PHWINFO, POBJECT, PMETHOD, U032, V032);
RM_STATUS mthdSetNameLength(PHWINFO, POBJECT, PMETHOD, U032, V032);
RM_STATUS mthdSetEnumerateCtxDma(PHWINFO, POBJECT, PMETHOD, U032, V032);
RM_STATUS mthdSetEnumerateStart(PHWINFO, POBJECT, PMETHOD, U032, V032);
RM_STATUS mthdSetEnumerateLength(PHWINFO, POBJECT, PMETHOD, U032, V032);
RM_STATUS mthdEnumerate(PHWINFO, POBJECT, PMETHOD, U032, V032);
RM_STATUS mthdSetDmaSpecifier(PHWINFO, POBJECT, PMETHOD, U032, V032);
RM_STATUS mthdSetTime(PHWINFO, POBJECT, PMETHOD, U032, V032);
RM_STATUS mthdSetAlarmTime(PHWINFO, POBJECT, PMETHOD, U032, V032);
RM_STATUS mthdSetAlarmTimeRelative(PHWINFO, POBJECT, PMETHOD, U032, V032);
RM_STATUS mthdSetAlarmNotifyCtxDma(PHWINFO, POBJECT, PMETHOD, U032, V032);
RM_STATUS mthdSetAlarmNotify(PHWINFO, POBJECT, PMETHOD, U032, V032);
RM_STATUS mthdTmrStopTransfer(PHWINFO, POBJECT, PMETHOD, U032, V032);
RM_STATUS mthdSetCtxDma(PHWINFO, POBJECT, PMETHOD, U032, V032);
RM_STATUS mthdGetChipToken(PHWINFO, POBJECT, PMETHOD, U032, V032);
RM_STATUS mthdSetOrdinal(PHWINFO, POBJECT, PMETHOD, U032, V032);
RM_STATUS mthdSetSwitchNotifyCtxDma(PHWINFO, POBJECT, PMETHOD, U032, V032);
RM_STATUS mthdSetSwitchNotify(PHWINFO, POBJECT, PMETHOD, U032, V032);
RM_STATUS mthdSetGamePortOutput(PHWINFO, POBJECT, PMETHOD, U032, V032);
RM_STATUS mthdSetGamePortInput(PHWINFO, POBJECT, PMETHOD, U032, V032);
RM_STATUS mthdSetGamePortFormat(PHWINFO, POBJECT, PMETHOD, U032, V032);
RM_STATUS mthdSetStartTime(PHWINFO, POBJECT, PMETHOD, U032, V032);
RM_STATUS mthdSetStartCtxTime(PHWINFO, POBJECT, PMETHOD, U032, V032);
RM_STATUS mthdSetSampleRate(PHWINFO, POBJECT, PMETHOD, U032, V032);
RM_STATUS mthdSetNumberChannels(PHWINFO, POBJECT, PMETHOD, U032, V032);
RM_STATUS mthdSetBufferCtxDma(PHWINFO, POBJECT, PMETHOD, U032, V032);
RM_STATUS mthdSetBufferNotifyCtxDma(PHWINFO, POBJECT, PMETHOD, U032, V032);
RM_STATUS mthdSetBufferStart(PHWINFO, POBJECT, PMETHOD, U032, V032);
RM_STATUS mthdSetBufferLength(PHWINFO, POBJECT, PMETHOD, U032, V032);
RM_STATUS mthdSetBufferNotify(PHWINFO, POBJECT, PMETHOD, U032, V032);
RM_STATUS mthdSetBufferNotifyCount(PHWINFO, POBJECT, PMETHOD, U032, V032);
RM_STATUS mthdSetBufferPosNotifyCtxDma(PHWINFO, POBJECT, PMETHOD, U032, V032);
RM_STATUS mthdSetBufferPosNotify(PHWINFO, POBJECT, PMETHOD, U032, V032);
RM_STATUS mthdSetBufferInCtxDma(PHWINFO, POBJECT, PMETHOD, U032, V032);
RM_STATUS mthdSetBufferOutCtxDma(PHWINFO, POBJECT, PMETHOD, U032, V032);
RM_STATUS mthdSetBufferInStart(PHWINFO, POBJECT, PMETHOD, U032, V032);
RM_STATUS mthdSetBufferOutStart(PHWINFO, POBJECT, PMETHOD, U032, V032);
RM_STATUS mthdSetBufferMemNotifyCtxDma(PHWINFO, POBJECT, PMETHOD, U032, V032);
RM_STATUS mthdSetBufferMemLength(PHWINFO, POBJECT, PMETHOD, U032, V032);
RM_STATUS mthdSetBufferMemNotify(PHWINFO, POBJECT, PMETHOD, U032, V032);
RM_STATUS mthdSetVideoInput(PHWINFO, POBJECT, PMETHOD, U032, V032);
RM_STATUS mthdSetVideoOutput(PHWINFO, POBJECT, PMETHOD, U032, V032);
RM_STATUS mthdSetCtxOrdinal(PHWINFO, POBJECT, PMETHOD, U032, V032);
RM_STATUS mthdSetColormapCtxDma(PHWINFO, POBJECT, PMETHOD, U032, V032);
RM_STATUS mthdSetColormapFormat(PHWINFO, POBJECT, PMETHOD, U032, V032);
RM_STATUS mthdSetColormapStart(PHWINFO, POBJECT, PMETHOD, U032, V032);
RM_STATUS mthdSetColormapLength(PHWINFO, POBJECT, PMETHOD, U032, V032);
RM_STATUS mthdColormapDirtyStart(PHWINFO, POBJECT, PMETHOD, U032, V032);
RM_STATUS mthdColormapDirtyLength(PHWINFO, POBJECT, PMETHOD, U032, V032);
RM_STATUS mthdSetImageOutput(PHWINFO, POBJECT, PMETHOD, U032, V032);
RM_STATUS mthdSetImageInput(PHWINFO, POBJECT, PMETHOD, U032, V032);
RM_STATUS mthdSetBetaInput(PHWINFO, POBJECT, PMETHOD, U032, V032);
RM_STATUS mthdSetBetaOutput(PHWINFO, POBJECT, PMETHOD, U032, V032);
RM_STATUS mthdSetRopInput(PHWINFO, POBJECT, PMETHOD, U032, V032);
RM_STATUS mthdSetRopOutput(PHWINFO, POBJECT, PMETHOD, U032, V032);
RM_STATUS mthdSetColorFormat(PHWINFO, POBJECT, PMETHOD, U032, V032);
RM_STATUS mthdSetMonochromeFormat(PHWINFO, POBJECT, PMETHOD, U032, V032);
RM_STATUS mthdSetGraphicsCtxDma(PHWINFO, POBJECT, PMETHOD, U032, V032);
RM_STATUS mthdSetAudioInput(PHWINFO, POBJECT, PMETHOD, U032, V032);
RM_STATUS mthdSetAudioFormat(PHWINFO, POBJECT, PMETHOD, U032, V032);
RM_STATUS mthdSetSampleRateAdjust(PHWINFO, POBJECT, PMETHOD, U032, V032);
RM_STATUS mthdSetStopLoopingCtxTime(PHWINFO, POBJECT, PMETHOD, U032, V032);
RM_STATUS mthdSetPortamento(PHWINFO, POBJECT, PMETHOD, U032, V032);
RM_STATUS mthdSetVibratoDepth(PHWINFO, POBJECT, PMETHOD, U032, V032);
RM_STATUS mthdSetVibratoFrequency(PHWINFO, POBJECT, PMETHOD, U032, V032);
RM_STATUS mthdSetVibratoAttackCtxTime(PHWINFO, POBJECT, PMETHOD, U032, V032);
RM_STATUS mthdSetVibratoAttack(PHWINFO, POBJECT, PMETHOD, U032, V032);
RM_STATUS mthdSetDiscardPriority(PHWINFO, POBJECT, PMETHOD, U032, V032);
RM_STATUS mthdSetBufferLoopStart(PHWINFO, POBJECT, PMETHOD, U032, V032);
RM_STATUS mthdSetBufferLoopLength(PHWINFO, POBJECT, PMETHOD, U032, V032);
RM_STATUS mthdSetAudioOutput(PHWINFO, POBJECT, PMETHOD, U032, V032);
RM_STATUS mthdSetOutputGain(PHWINFO, POBJECT, PMETHOD, U032, V032);
RM_STATUS mthdSetInputGain(PHWINFO, POBJECT, PMETHOD, U032, V032);
RM_STATUS mthdSetAttack(PHWINFO, POBJECT, PMETHOD, U032, V032);
RM_STATUS mthdSetDecay(PHWINFO, POBJECT, PMETHOD, U032, V032);
RM_STATUS mthdSetSustain(PHWINFO, POBJECT, PMETHOD, U032, V032);
RM_STATUS mthdSetRelease(PHWINFO, POBJECT, PMETHOD, U032, V032);
RM_STATUS mthdSetAttackCtxTime(PHWINFO, POBJECT, PMETHOD, U032, V032);
RM_STATUS mthdSetReleaseCtxTime(PHWINFO, POBJECT, PMETHOD, U032, V032);
RM_STATUS mthdSetSustainLevel(PHWINFO, POBJECT, PMETHOD, U032, V032);
RM_STATUS mthdSetTremoloDepth(PHWINFO, POBJECT, PMETHOD, U032, V032);
RM_STATUS mthdSetTremoloAttackCtxTime(PHWINFO, POBJECT, PMETHOD, U032, V032);
RM_STATUS mthdSetTremoloAttack(PHWINFO, POBJECT, PMETHOD, U032, V032);
RM_STATUS mthdSetTremoloFrequency(PHWINFO, POBJECT, PMETHOD, U032, V032);
//
// Method aliases to common method procedure.
//
RM_STATUS mthdStaticImage(PHWINFO, POBJECT, PMETHOD, U032, V032);
RM_STATUS mthdRender(PHWINFO, POBJECT, PMETHOD, U032, V032);
RM_STATUS mthdRenderBeta(PHWINFO, POBJECT, PMETHOD, U032, V032);
RM_STATUS mthdRender3d(PHWINFO, POBJECT, PMETHOD, U032, V032);
RM_STATUS mthdImageToMem(PHWINFO, POBJECT, PMETHOD, U032, V032);
RM_STATUS mthdDmaRender(PHWINFO, POBJECT, PMETHOD, U032, V032);
RM_STATUS mthdImageBlit(PHWINFO, POBJECT, PMETHOD, U032, V032);
RM_STATUS mthdGrSetNotify(PHWINFO, POBJECT, PMETHOD, U032, V032);
RM_STATUS mthdGrSetNotifyCtxDma(PHWINFO, POBJECT, PMETHOD, U032, V032);
#define mthdSetBeta mthdStaticImage
#define mthdSetRop mthdStaticImage
#define mthdSetColor mthdStaticImage
#define mthdSetPatternShape mthdStaticImage
#define mthdSetColor0 mthdStaticImage
#define mthdSetColor1 mthdStaticImage
#define mthdSetPattern mthdStaticImage
#define mthdSetRectangle mthdStaticImage
#define mthdColor mthdRender
#define mthdPoint mthdRender
#define mthdPoint32 mthdRender
#define mthdColorPoint mthdRender
#define mthdLine mthdRender
#define mthdLine32 mthdRender
#define mthdPolyLine mthdRender
#define mthdPolyLine32 mthdRender
#define mthdColorPolyLine mthdRender
#define mthdLin mthdRender
#define mthdLin32 mthdRender
#define mthdPolyLin mthdRender
#define mthdPolyLin32 mthdRender
#define mthdColorPolyLin mthdRender
#define mthdTriangle mthdRender
#define mthdTriangle32 mthdRender
#define mthdTrimesh mthdRender
#define mthdTrimesh32 mthdRender
#define mthdColorTriangle mthdRender
#define mthdColorTrimesh mthdRender
#define mthdRectangle mthdRender
#define mthdControlPointIn mthdRender
#define mthdControlPointOut mthdRender
#define mthdControlPointOutFP mthdRender
#define mthdSize mthdRender
#define mthdImagePitch mthdRender
#define mthdImageStart mthdRender
#define mthdSizeIn mthdRender
#define mthdColor0 mthdRender
#define mthdColor1 mthdRender
#define mthdMonochrome mthdRender
#define mthdSubdivideIn mthdRender
#define mthdColorBeta mthdRenderBeta
#define mthdControlBetaOut mthdRenderBeta
#define mthdSubdivideInBeta mthdRenderBeta
#define mthdFilterBeta mthdRenderBeta
#define mthdControlPointOutBeta mthdRenderBeta
#define mthdControlPointOutFPBeta mthdRenderBeta
#define mthdBlitPointIn mthdImageBlit
#define mthdBlitPointOut mthdImageBlit
#define mthdBlitSize mthdImageBlit
#define mthdImageToMemPoint mthdImageToMem
#define mthdImageToMemSize mthdImageToMem
#define mthdImageToMemPitch mthdImageToMem
#define mthdImageToMemStart mthdImageToMem
#define mthdGraphicsFromMemPoint mthdDmaRender
#define mthdGraphicsFromMemSize mthdDmaRender
#define mthdGraphicsFromMemPitch mthdDmaRender
#define mthdGraphicsFromMemStart mthdDmaRender
#define mthdGraphicsFromMemSize mthdDmaRender
//---------------------------------------------------------------------------
//
// Class object prototypes.
//
//---------------------------------------------------------------------------
RM_STATUS classCreateWellKnownObjects(PHWINFO, U032);
RM_STATUS classDeleteWellKnownObjects(VOID*, POBJECT);
RM_STATUS classInitCommonObject(POBJECT, PCLASSOBJECT, U032);
RM_STATUS classCreate(VOID*, PCLASSOBJECT, U032, POBJECT *, VOID*);
RM_STATUS classDestroy(VOID*, POBJECT);
RM_STATUS nopCreate(VOID*, PCLASSOBJECT, U032, POBJECT *, VOID*);
RM_STATUS nopDestroy(VOID*, POBJECT);
RM_STATUS classSoftwareMethod(PHWINFO, POBJECT, U032, V032);
RM_STATUS classDirectSoftwareMethod(PHWINFO, POBJECT, U032, V032);
// JJV - Moved this structure from class66.c and class63.c
typedef struct _def_surface_attributes
{
U032 StartAddress;
U032 Type; // tells you whether this is an interleaved surface or other
U032 Pitch;
U032 Length;
U032 FittedSize; // not used for overlay
} SURFACEATTRIBUTES, * PSURFACEATTRIBUTES ;
// JJV - Moved these defines from class66.c
// defined digitisers
#define PHILIPS_DEVICE_110 0
#define PHILIPS_DEVICE_111A 1
#define ITT_VPX3225D_A1 0x20
#define ITT_VPX3225D_C3 0x23
#define SAMSUNG_DEVICE_127 0xF0
#define ST_NTSC 0x0
#define ST_PAL 0x10
#define ST_UNDECODED 0xFFFFFFFF
#define IS_FLIP_FOR_OVERLAY_SURFACE_0 0x10
#define IS_FLIP_FOR_OVERLAY_SURFACE_1 0x20
#define NV_VCTM_IMAGE_FORMAT_NEXT_FIELD_EVEN 0x0
#define NV_VCTM_IMAGE_FORMAT_NEXT_FIELD_ODD 0x80000000
#define NV_VCTM_IMAGE_FORMAT_COLOR_LE_Y8V8Y8U8 0x00020001
#define NV_VCTM_VBI_FORMAT_NEXT_FIELD_EVEN 0x0
#define NV_VCTM_VBI_FORMAT_NEXT_FIELD_ODD 0x80000000
#define NV_VCTM_VBI_FORMAT_COLOR_LE_Y8_P4 0x01010000
//---------------------------------------------------------------------------
//
// Engine structures and prototypes.
//
//---------------------------------------------------------------------------
//
// Engine info structure.
//
typedef RM_STATUS (*ENGINECREATEOBJECT)(VOID*, PCLASSOBJECT, U032, POBJECT *, VOID*);
typedef RM_STATUS (*ENGINEDELETEOBJECT)(VOID*, POBJECT);
struct _def_engine_info
{
U032 Tag; // cross-ref with rom data tables
PMETHOD Methods; // default methods
U032 MethodMax; // default method max
ENGINECREATEOBJECT CreateObject;
ENGINEDELETEOBJECT DestroyObject;
};
typedef struct _def_engine_db
{
PENGINEINFO pEngineInfos;
PENGINEDESCRIPTOR pEngineDescriptors;
U032 numEngineDescriptors;
} ENGINEDB, *PENGINEDB;
// kernel/hal/haleng.c
RM_STATUS engineGetInfo(PENGINEDB, U032, PENGINEINFO *, PENGINEDESCRIPTOR *);
U032 engineGetBufferSize(PENGINEDB, U032, U032);
//---------------------------------------------------------------------------
//
// Class database structure.
//
// This state is pulled from the HAL tables.
//
//---------------------------------------------------------------------------
typedef struct _def_class_db
{
PCLASS pClasses;
U032 numClasses;
PCLASSDESCRIPTOR pClassDescriptors;
U032 numClassDescriptors;
} CLASSDB, *PCLASSDB;
RM_STATUS classBuildDB(PENGINEDB, PCLASSDB);
RM_STATUS classDestroyDB(PCLASSDB);
RM_STATUS classGetClass(PCLASSDB, U032, PCLASS *);
#endif // _CLASS_H_