Leaked source code of windows server 2003
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
//==========================================================================;
//
// MiniDriver entry points for stream class driver
//
// $Date: 05 Aug 1998 11:11:18 $
// $Revision: 1.0 $
// $Author: Tashjian $
//
// $Copyright: (c) 1997 - 1998 ATI Technologies Inc. All Rights Reserved. $
//
//==========================================================================;
extern "C" { #include "strmini.h"
#include "ksmedia.h"
}
#include "DrvEntry.h"
#include "wdmvdec.h"
#include "wdmdrv.h"
#include "capdebug.h"
#include "VidStrm.h"
/*^^*
* DriverEntry() * Purpose : Called when an SRB_INITIALIZE_DEVICE request is received * * Inputs : IN PDRIVER_OBJECT pDriverObject * IN PUNICODE_STRING pRegistryPath * * Outputs : result of StreamClassregisterAdapter() * Author : IKLEBANOV *^^*/ extern "C" ULONG DriverEntry ( IN PDRIVER_OBJECT pDriverObject, IN PUNICODE_STRING pRegistryPath ) { HW_INITIALIZATION_DATA HwInitData;
SetMiniDriverDebugLevel(pRegistryPath);
DBGTRACE(("DriverEntry\n")); RtlZeroMemory(&HwInitData, sizeof(HwInitData));
HwInitData.HwInitializationDataSize = sizeof(HwInitData);
// Entry points for Port Driver
HwInitData.HwInterrupt = NULL; // HwInterrupt;
HwInitData.HwReceivePacket = ReceivePacket; HwInitData.HwCancelPacket = CancelPacket; HwInitData.HwRequestTimeoutHandler = TimeoutPacket;
HwInitData.DeviceExtensionSize = DeivceExtensionSize(); HwInitData.PerRequestExtensionSize = sizeof(SRB_DATA_EXTENSION); HwInitData.FilterInstanceExtensionSize = 0; HwInitData.PerStreamExtensionSize = streamDataExtensionSize; HwInitData.BusMasterDMA = FALSE; HwInitData.Dma24BitAddresses = FALSE; HwInitData.BufferAlignment = 3; HwInitData.TurnOffSynchronization = TRUE; HwInitData.DmaBufferSize = 0;
DBGTRACE(("StreamClassRegisterAdapter\n"));
return(StreamClassRegisterAdapter(pDriverObject, pRegistryPath, &HwInitData)); }
/*^^*
* ReceivePacket() * Purpose : Main entry point for receiving adapter based request SRBs from the Class Driver. * Will always be called at High Priority. * Note : This is an asyncronous entry point. The request does not complete on return from * this function, the request only completes when a StreamClassDeviceNotification * on this request block, of type DeviceRequestComplete, is issued. * * Inputs : PHW_STREAM_REQUEST_BLOCK pSrb : pointer to the current Srb * * Outputs : none * Author : IKLEBANOV *^^*/
void STREAMAPI ReceivePacket(IN OUT PHW_STREAM_REQUEST_BLOCK pSrb) { DBGINFO(("ReceivePacket() SRB = %x, Command = %x\n", pSrb, pSrb->Command));
// This needs to be a special case because no spinlocks, etc
// have been initialized until HwInitialize runs. Even though
// this minidriver handles synchronization itself, it assumes
// that no adapter SRBs will arrive until after this one
// completes.
if (pSrb->Command == SRB_INITIALIZE_DEVICE) { DBGTRACE(("SRB_INITIALIZE_DEVICE; SRB=%x\n", pSrb));
SrbInitializeDevice(pSrb); StreamClassDeviceNotification(DeviceRequestComplete, pSrb->HwDeviceExtension, pSrb); } else { CWDMVideoDecoder* pCWDMVideoDecoder = (CWDMVideoDecoder*)pSrb->HwDeviceExtension;
// check the device extension pointer
if(pCWDMVideoDecoder == NULL) { DBGERROR(("ReceivePacket(): Device extension pointer is null!\n")); TRAP(); pSrb->Status = STATUS_INVALID_PARAMETER; StreamClassDeviceNotification(DeviceRequestComplete, pSrb->HwDeviceExtension, pSrb); } else pCWDMVideoDecoder->ReceivePacket(pSrb); } }
void STREAMAPI CancelPacket(IN OUT PHW_STREAM_REQUEST_BLOCK pSrb) { CWDMVideoDecoder* pCWDMVideoDecoder = (CWDMVideoDecoder*)pSrb->HwDeviceExtension;
pCWDMVideoDecoder->CancelPacket(pSrb); }
void STREAMAPI TimeoutPacket(IN OUT PHW_STREAM_REQUEST_BLOCK pSrb) { CWDMVideoDecoder* pCWDMVideoDecoder = (CWDMVideoDecoder*)pSrb->HwDeviceExtension;
pCWDMVideoDecoder->TimeoutPacket(pSrb); }
/*^^*
* SrbInitializeDevice() * Purpose : Called when SRB_INITIALIZE_DEVICE SRB is received. * Performs checking of the hardware presence and I2C provider availability. * Sets the hardware in an initial state. * Note : The request does not completed unless we know everything * about the hardware and we are sure it is capable to work in the current configuration. * The hardware Caps are also aquised at this point. * * Inputs : PHW_STREAM_REQUEST_BLOCK pSrb : pointer to the current Srb * * Outputs : none * Author : IKLEBANOV *^^*/
void SrbInitializeDevice(PHW_STREAM_REQUEST_BLOCK pSrb) { DBGTRACE(("SrbInitializeDevice()\n"));
PPORT_CONFIGURATION_INFORMATION pConfigInfo = pSrb->CommandData.ConfigInfo;
pSrb->Status = STATUS_SUCCESS;
ENSURE { PBYTE pHwDevExt = (PBYTE)pConfigInfo->HwDeviceExtension;
if (pConfigInfo->NumberOfAccessRanges != 0) { DBGERROR(("Illegal config info!\n")); pSrb->Status = STATUS_NO_SUCH_DEVICE; TRAP(); FAIL; }
CVideoDecoderDevice * pDevice = InitializeDevice(pConfigInfo, pHwDevExt); if (!pDevice) { DBGERROR(("CI2CScript creation failure!\n")); pSrb->Status = STATUS_NO_SUCH_DEVICE; TRAP(); FAIL; }
CWDMVideoDecoder *pCWDMVideoDecoder = (CWDMVideoDecoder *) new ((PVOID)pHwDevExt) CWDMVideoDecoder(pConfigInfo, pDevice); } END_ENSURE; DBGTRACE(("Exit : SrbInitializeDevice()\n")); }
|