2025-04-27 07:49:33 -04:00

259 lines
5.3 KiB
C
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/*++
Copyright (c) 1998 Microsoft Corporation
Module Name:
dvdinit.h
Abstract:
Device Extension and other definitions for DVDTS
Environment:
Kernel mode only
Notes:
THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY
KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A PARTICULAR
PURPOSE.
Copyright (c) 1998 Microsoft Corporation. All Rights Reserved.
Some portions adapted with permission from code Copyright (c) 1997-1998 Toshiba Corporation
Revision History:
5/1/98: created
--*/
#ifndef __DVDINIT_H__
#define __DVDINIT_H__
// a few minimal hardware defs from regs.h
#define DMASIZE (2*1024)
#define IFLG_CNTL 0x00 // PCI I/F control
#define IFLG_INT 0x04 // Interrupt flags
#define PLAY_MODE_NORMAL 0x01 //enums for video play modes
#define PLAY_MODE_FAST 0x02
#define PLAY_MODE_SLOW 0x03
#define PLAY_MODE_FREEZE 0x04
#define PLAY_MODE_STILL 0x05
#define AUDIO_TYPE_AC3 0x01
#define AUDIO_TYPE_PCM 0x04
#define AUDIO_FS_48 0x03
// end, a few minimal hardware defs from regs.h
typedef enum tagStreamType {
strmVideo = 0,
strmAudio,
strmSubpicture,
strmYUVVideo,
strmCCOut,
STREAMNUM
} STREAMTYPES;
typedef enum
{
Video,
Audio,
SubPicture
} StreamType;
typedef enum
{
NO_GUARD,
GUARD
} CPPMODE;
typedef struct _DeviceQueue
{
ULONG count; // srb count in this queue
PHW_STREAM_REQUEST_BLOCK top;
PHW_STREAM_REQUEST_BLOCK bottom;
PHW_STREAM_REQUEST_BLOCK video;
PHW_STREAM_REQUEST_BLOCK audio;
PHW_STREAM_REQUEST_BLOCK subpic;
PVOID top_addr; // buffer address of the first srb
PVOID bottom_addr; // buffer address of the bottom srb
BOOLEAN v_first;
BOOLEAN a_first;
BOOLEAN s_first;
ULONG v_count;
ULONG a_count;
ULONG s_count;
} DeviceQueue, *PDeviceQueue;
typedef struct _CCQueue
{
ULONG count; // srb count in this queue
PHW_STREAM_REQUEST_BLOCK top;
PHW_STREAM_REQUEST_BLOCK bottom;
} CCQueue, *PCCQueue;
typedef struct _HW_DEVICE_EXTENSION {
PCI_COMMON_CONFIG PciConfigSpace;
PUCHAR ioBaseLocal; // board base address
ULONG Irq; // irq level
ULONG RevID; // Revision ID
BOOL fTimeOut;
PHW_STREAM_REQUEST_BLOCK pSrbDMA0;
PHW_STREAM_REQUEST_BLOCK pSrbDMA1;
BOOLEAN fSrbDMA0last;
BOOLEAN fSrbDMA1last;
BOOL SendFirst;
BOOL DecodeStart;
DWORD TimeDiscontFlagCount;
DWORD DataDiscontFlagCount;
DWORD SendFirstTime;
ULONG XferStartCount;
BOOL bKeyDataXfer;
PHW_TIMER_ROUTINE pfnEndKeyData;
DWORD CppFlagCount;
PHW_STREAM_REQUEST_BLOCK pSrbCpp;
BOOL bCppReset;
LONG lCPPStrm;
DWORD cOpenInputStream; // count opened input stream
DeviceQueue DevQue;
CCQueue CCQue;
PVOID DecoderInfo; // pointer to decoder and other hardware data,
// opaque to us and handled by DvdTDCod.lib
PHW_STREAM_OBJECT pstroVid;
PHW_STREAM_OBJECT pstroAud;
PHW_STREAM_OBJECT pstroSP;
PHW_STREAM_OBJECT pstroYUV;
PHW_STREAM_OBJECT pstroCC;
ULONG ddrawHandle;
ULONG VidPortID;
ULONG SurfaceHandle;
DWORD dwSTCInit;
DWORD dwSTCtemp;
DWORD dwSTCinPause; // is used to keep STC only from Fast to Pause
// because in this case STC doesn't STOP !! (why?)
BOOL bSTCvalid;
BOOL bDMAscheduled;
UCHAR fDMA;
UCHAR bDMAstop;
ULONG fCauseOfStop;
BOOL bVideoQueue;
BOOL bAudioQueue;
BOOL bSubpicQueue;
REFERENCE_TIME VideoStartTime;
REFERENCE_TIME VideoInterceptTime;
LONG VideoRate;
REFERENCE_TIME AudioStartTime;
REFERENCE_TIME AudioInterceptTime;
LONG AudioRate;
REFERENCE_TIME SubpicStartTime;
REFERENCE_TIME SubpicInterceptTime;
LONG SubpicRate;
REFERENCE_TIME StartTime;
REFERENCE_TIME InterceptTime;
LONG Rate;
LONG VideoMaxFullRate;
LONG AudioMaxFullRate;
LONG SubpicMaxFullRate;
LONG ChangeFlag;
PUCHAR pDmaBuf;
STREAM_PHYSICAL_ADDRESS addr;
KSPROPERTY_SPHLI hli;
KS_AMVPDATAINFO VPFmt;
BOOL bStopCC;
} HW_DEVICE_EXTENSION, *PHW_DEVICE_EXTENSION;
typedef struct _STREAMEX {
DWORD EventCount;
KSSTATE state;
} STREAMEX, *PSTREAMEX;
typedef struct _SRB_EXTENSION {
StreamType Type;
ULONG Index;
PHW_TIMER_ROUTINE pfnEndSrb;
PHW_STREAM_REQUEST_BLOCK parmSrb;
} SRB_EXTENSION, * PSRB_EXTENSION;
typedef struct _MYTIME {
KSEVENT_TIME_INTERVAL tim;
LONGLONG LastTime;
} MYTIME, *PMYTIME;
typedef struct _MYAUDIOFORMAT {
DWORD dwMode;
DWORD dwFreq;
DWORD dwQuant;
} MYAUDIOFORMAT, *PMYAUDIOFORMAT;
/*****************************************************************************
*
* the following section defines prototypes for the minidriver initialization
* routines
*
******************************************************************************/
NTSTATUS DriverEntry( IN PDRIVER_OBJECT DriverObject, IN PUNICODE_STRING RegistryPath );
NTSTATUS HwInitialize (IN PHW_STREAM_REQUEST_BLOCK pSrb);
void GetPCIConfigSpace(IN PHW_STREAM_REQUEST_BLOCK pSrb);
void InitializationEntry(IN PHW_STREAM_REQUEST_BLOCK pSrb);
// unit = ms
static DWORD GetCurrentTime_ms()
{
LARGE_INTEGER time, rate;
time = KeQueryPerformanceCounter( &rate );
return( (DWORD)( ( time.QuadPart * 1000 ) / rate.QuadPart ) );
}
#endif //__DVDINIT_H__