Author: janderwald
Date: Fri Jun 26 19:51:14 2009
New Revision: 41624
URL:
http://svn.reactos.org/svn/reactos?rev=41624&view=rev
Log:
- Write strmini.h for stream class driver
Added:
trunk/reactos/include/ddk/strmini.h (with props)
Added: trunk/reactos/include/ddk/strmini.h
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/include/ddk/strmini.h?rev=…
==============================================================================
--- trunk/reactos/include/ddk/strmini.h (added)
+++ trunk/reactos/include/ddk/strmini.h [iso-8859-1] Fri Jun 26 19:51:14 2009
@@ -1,0 +1,562 @@
+#ifndef _STREAM_H
+#define _STREAM_H
+
+#include <wdm.h>
+#include <windef.h>
+#include <stdio.h>
+#include <ks.h>
+
+#define STREAMAPI __stdcall
+#define STREAM_SYSTEM_TIME_MASK ((STREAM_SYSTEM_TIME)0x00000001FFFFFFFF)
+
+#if DBG
+
+#define DebugPrint(x) StreamClassDebugPrint x
+#define DEBUG_BREAKPOINT() DbgBreakPoint()
+#define DEBUG_ASSERT(exp) \
+ if ( !(exp) ) { \
+ StreamClassDebugAssert( __FILE__, __LINE__, #exp, exp); \
+ }
+#else
+
+#define DebugPrint(x)
+#define DEBUG_BREAKPOINT()
+#define DEBUG_ASSERT(exp)
+
+#endif
+
+typedef PHYSICAL_ADDRESS STREAM_PHYSICAL_ADDRESS, *PSTREAM_PHYSICAL_ADDRESS;
+typedef unsigned __int64 STREAM_SYSTEM_TIME, *PSTREAM_SYSTEM_TIME;
+typedef unsigned __int64 STREAM_TIMESTAMP, *PSTREAM_TIMESTAMP;
+
+typedef enum
+{
+ TIME_GET_STREAM_TIME,
+ TIME_READ_ONBOARD_CLOCK,
+ TIME_SET_ONBOARD_CLOCK
+}TIME_FUNCTION;
+
+typedef struct _HW_TIME_CONTEXT
+{
+ struct _HW_DEVICE_EXTENSION *HwDeviceExtension;
+ struct _HW_STREAM_OBJECT *HwStreamObject;
+ TIME_FUNCTION Function;
+ ULONGLONG Time;
+ ULONGLONG SystemTime;
+}HW_TIME_CONTEXT, *PHW_TIME_CONTEXT;
+
+typedef struct _HW_EVENT_DESCRIPTOR
+{
+ BOOLEAN Enable;
+ PKSEVENT_ENTRY EventEntry;
+ PKSEVENTDATA EventData;
+ union
+ {
+ struct _HW_STREAM_OBJECT * StreamObject;
+ struct _HW_DEVICE_EXTENSION *DeviceExtension;
+ };
+ ULONG EnableEventSetIndex;
+ PVOID HwInstanceExtension;
+ ULONG Reserved;
+} HW_EVENT_DESCRIPTOR, *PHW_EVENT_DESCRIPTOR;
+
+
+typedef VOID (STREAMAPI * PHW_RECEIVE_STREAM_DATA_SRB) (IN struct
_HW_STREAM_REQUEST_BLOCK * SRB);
+typedef VOID (STREAMAPI * PHW_RECEIVE_STREAM_CONTROL_SRB) (IN struct
_HW_STREAM_REQUEST_BLOCK * SRB);
+typedef NTSTATUS (STREAMAPI * PHW_EVENT_ROUTINE) (IN PHW_EVENT_DESCRIPTOR
EventDescriptor);
+typedef VOID (STREAMAPI * PHW_CLOCK_FUNCTION) (IN PHW_TIME_CONTEXT HwTimeContext);
+
+typedef struct _HW_CLOCK_OBJECT
+{
+ PHW_CLOCK_FUNCTION HwClockFunction;
+ ULONG ClockSupportFlags;
+ ULONG Reserved[2];
+} HW_CLOCK_OBJECT, *PHW_CLOCK_OBJECT;
+
+#define CLOCK_SUPPORT_CAN_SET_ONBOARD_CLOCK 0x1
+#define CLOCK_SUPPORT_CAN_READ_ONBOARD_CLOCK 0x2
+#define CLOCK_SUPPORT_CAN_RETURN_STREAM_TIME 0x4
+
+typedef struct _HW_STREAM_OBJECT
+{
+ ULONG SizeOfThisPacket;
+ ULONG StreamNumber;
+ PVOID HwStreamExtension;
+ PHW_RECEIVE_STREAM_DATA_SRB ReceiveDataPacket;
+ PHW_RECEIVE_STREAM_CONTROL_SRB ReceiveControlPacket;
+ HW_CLOCK_OBJECT HwClockObject;
+ BOOLEAN Dma;
+ BOOLEAN Pio;
+ PVOID HwDeviceExtension;
+ ULONG StreamHeaderMediaSpecific;
+ ULONG StreamHeaderWorkspace;
+ BOOLEAN Allocator;
+ PHW_EVENT_ROUTINE HwEventRoutine;
+ ULONG Reserved[2];
+} HW_STREAM_OBJECT, *PHW_STREAM_OBJECT;
+
+typedef struct _HW_STREAM_HEADER
+{
+ ULONG NumberOfStreams;
+ ULONG SizeOfHwStreamInformation;
+ ULONG NumDevPropArrayEntries;
+ PKSPROPERTY_SET DevicePropertiesArray;
+ ULONG NumDevEventArrayEntries;
+ PKSEVENT_SET DeviceEventsArray;
+ PKSTOPOLOGY Topology;
+ PHW_EVENT_ROUTINE DeviceEventRoutine;
+ LONG NumDevMethodArrayEntries;
+ PKSMETHOD_SET DeviceMethodsArray;
+}HW_STREAM_HEADER, *PHW_STREAM_HEADER;
+
+typedef struct _HW_STREAM_INFORMATION
+{
+ ULONG NumberOfPossibleInstances;
+ KSPIN_DATAFLOW DataFlow;
+ BOOLEAN DataAccessible;
+ ULONG NumberOfFormatArrayEntries;
+ PKSDATAFORMAT* StreamFormatsArray;
+ PVOID ClassReserved[4];
+ ULONG NumStreamPropArrayEntries;
+ PKSPROPERTY_SET StreamPropertiesArray;
+ ULONG NumStreamEventArrayEntries;
+ PKSEVENT_SET StreamEventsArray;
+ GUID* Category;
+ GUID* Name;
+ ULONG MediumsCount;
+ const KSPIN_MEDIUM* Mediums;
+ BOOLEAN BridgeStream;
+ ULONG Reserved[2];
+}HW_STREAM_INFORMATION, *PHW_STREAM_INFORMATION;
+
+
+typedef struct _HW_STREAM_DESCRIPTOR
+{
+ HW_STREAM_HEADER StreamHeader;
+ HW_STREAM_INFORMATION StreamInfo;
+} HW_STREAM_DESCRIPTOR, *PHW_STREAM_DESCRIPTOR;
+
+typedef struct _STREAM_TIME_REFERENCE
+{
+ STREAM_TIMESTAMP CurrentOnboardClockValue;
+ LARGE_INTEGER OnboardClockFrequency;
+ LARGE_INTEGER CurrentSystemTime;
+ ULONG Reserved[2];
+}STREAM_TIME_REFERENCE, *PSTREAM_TIME_REFERENCE;
+
+typedef struct _STREAM_DATA_INTERSECT_INFO
+{
+ ULONG StreamNumber;
+ PKSDATARANGE DataRange;
+ PVOID DataFormatBuffer;
+ ULONG SizeOfDataFormatBuffer;
+
+}STREAM_DATA_INTERSECT_INFO, *PSTREAM_DATA_INTERSECT_INFO;
+
+typedef struct _STREAM_PROPERTY_DESCRIPTOR
+{
+ PKSPROPERTY Property;
+ ULONG PropertySetID;
+ PVOID PropertyInfo;
+ ULONG PropertyInputSize;
+ ULONG PropertyOutputSize;
+}STREAM_PROPERTY_DESCRIPTOR, *PSTREAM_PROPERTY_DESCRIPTOR;
+
+typedef struct _STREAM_METHOD_DESCRIPTOR
+{
+ ULONG MethodSetID;
+ PKSMETHOD Method;
+ PVOID MethodInfo;
+ LONG MethodInputSize;
+ LONG MethodOutputSize;
+} STREAM_METHOD_DESCRIPTOR, *PSTREAM_METHOD_DESCRIPTOR;
+
+#define STREAM_REQUEST_BLOCK_SIZE sizeof(STREAM_REQUEST_BLOCK)
+
+typedef enum _SRB_COMMAND
+{
+ SRB_READ_DATA,
+ SRB_WRITE_DATA,
+ SRB_GET_STREAM_STATE,
+ SRB_SET_STREAM_STATE,
+ SRB_SET_STREAM_PROPERTY,
+ SRB_GET_STREAM_PROPERTY,
+ SRB_OPEN_MASTER_CLOCK,
+
+ SRB_INDICATE_MASTER_CLOCK,
+ SRB_UNKNOWN_STREAM_COMMAND,
+ SRB_SET_STREAM_RATE,
+ SRB_PROPOSE_DATA_FORMAT,
+ SRB_CLOSE_MASTER_CLOCK,
+ SRB_PROPOSE_STREAM_RATE,
+ SRB_SET_DATA_FORMAT,
+ SRB_GET_DATA_FORMAT,
+ SRB_BEGIN_FLUSH,
+ SRB_END_FLUSH,
+
+ SRB_GET_STREAM_INFO = 0x100,
+ SRB_OPEN_STREAM,
+ SRB_CLOSE_STREAM,
+ SRB_OPEN_DEVICE_INSTANCE,
+ SRB_CLOSE_DEVICE_INSTANCE,
+ SRB_GET_DEVICE_PROPERTY,
+ SRB_SET_DEVICE_PROPERTY,
+ SRB_INITIALIZE_DEVICE,
+ SRB_CHANGE_POWER_STATE,
+ SRB_UNINITIALIZE_DEVICE,
+ SRB_UNKNOWN_DEVICE_COMMAND,
+ SRB_PAGING_OUT_DRIVER,
+ SRB_GET_DATA_INTERSECTION,
+ SRB_INITIALIZATION_COMPLETE,
+ SRB_SURPRISE_REMOVAL
+
+#if (NTDDI_VERSION >= NTDDI_WINXP)
+
+ ,SRB_DEVICE_METHOD
+ ,SRB_STREAM_METHOD
+
+#if ( (NTDDI_VERSION >= NTDDI_WINXPSP2) && (NTDDI_VERSION < NTDDI_WS03) )
|| (NTDDI_VERSION >= NTDDI_WS03SP1)
+
+ ,SRB_NOTIFY_IDLE_STATE
+
+#endif
+
+#endif
+
+}SRB_COMMAND;
+
+typedef struct
+{
+ PHYSICAL_ADDRESS PhysicalAddress;
+ ULONG Length;
+} KSSCATTER_GATHER, *PKSSCATTER_GATHER;
+
+
+typedef struct _HW_STREAM_REQUEST_BLOCK
+{
+ ULONG SizeOfThisPacket;
+ SRB_COMMAND Command;
+ NTSTATUS Status;
+ PHW_STREAM_OBJECT StreamObject;
+ PVOID HwDeviceExtension;
+ PVOID SRBExtension;
+
+ union _CommandData
+ {
+ PKSSTREAM_HEADER DataBufferArray;
+ PHW_STREAM_DESCRIPTOR StreamBuffer;
+ KSSTATE StreamState;
+ PSTREAM_TIME_REFERENCE TimeReference;
+ PSTREAM_PROPERTY_DESCRIPTOR PropertyInfo;
+ PKSDATAFORMAT OpenFormat;
+ struct _PORT_CONFIGURATION_INFORMATION *ConfigInfo;
+ HANDLE MasterClockHandle;
+ DEVICE_POWER_STATE DeviceState;
+ PSTREAM_DATA_INTERSECT_INFO IntersectInfo;
+
+#if (NTDDI_VERSION >= NTDDI_WINXP)
+ PVOID MethodInfo;
+ LONG FilterTypeIndex;
+#if ( (NTDDI_VERSION >= NTDDI_WINXPSP2) && (NTDDI_VERSION < NTDDI_WS03) )
|| (NTDDI_VERSION >= NTDDI_WS03SP1)
+ BOOLEAN Idle;
+#endif
+#endif
+
+ }CommandData;
+
+ ULONG NumberOfBuffers;
+ ULONG TimeoutCounter;
+ ULONG TimeoutOriginal;
+ struct _HW_STREAM_REQUEST_BLOCK *NextSRB;
+
+ PIRP Irp;
+ ULONG Flags;
+ PVOID HwInstanceExtension;
+
+ union
+ {
+ ULONG NumberOfBytesToTransfer;
+ ULONG ActualBytesTransferred;
+ };
+
+ PKSSCATTER_GATHER ScatterGatherBuffer;
+ ULONG NumberOfPhysicalPages;
+ ULONG NumberOfScatterGatherElements;
+ ULONG Reserved[1];
+
+}HW_STREAM_REQUEST_BLOCK, *PHW_STREAM_REQUEST_BLOCK;
+
+#define SRB_HW_FLAGS_DATA_TRANSFER 0x01
+#define SRB_HW_FLAGS_STREAM_REQUEST 0x2
+
+typedef enum
+{
+ PerRequestExtension,
+ DmaBuffer,
+ SRBDataBuffer
+}STREAM_BUFFER_TYPE;
+
+typedef struct _ACCESS_RANGE
+{
+ STREAM_PHYSICAL_ADDRESS RangeStart;
+ ULONG RangeLength;
+ BOOLEAN RangeInMemory;
+ ULONG Reserved;
+}ACCESS_RANGE, *PACCESS_RANGE;
+
+typedef struct _PORT_CONFIGURATION_INFORMATION
+{
+ ULONG SizeOfThisPacket;
+ PVOID HwDeviceExtension;
+ PDEVICE_OBJECT ClassDeviceObject;
+ PDEVICE_OBJECT PhysicalDeviceObject;
+ ULONG SystemIoBusNumber;
+ INTERFACE_TYPE AdapterInterfaceType;
+ ULONG BusInterruptLevel;
+ ULONG BusInterruptVector;
+ KINTERRUPT_MODE InterruptMode;
+ ULONG DmaChannel;
+ ULONG NumberOfAccessRanges;
+ PACCESS_RANGE AccessRanges;
+ ULONG StreamDescriptorSize;
+ PIRP Irp;
+ PKINTERRUPT InterruptObject;
+ PADAPTER_OBJECT DmaAdapterObject;
+ PDEVICE_OBJECT RealPhysicalDeviceObject;
+ ULONG Reserved[1];
+}PORT_CONFIGURATION_INFORMATION, *PPORT_CONFIGURATION_INFORMATION;
+
+typedef VOID (STREAMAPI * PHW_RECEIVE_DEVICE_SRB) (IN PHW_STREAM_REQUEST_BLOCK SRB);
+typedef VOID (STREAMAPI * PHW_CANCEL_SRB) (IN PHW_STREAM_REQUEST_BLOCK SRB);
+typedef VOID (STREAMAPI * PHW_REQUEST_TIMEOUT_HANDLER) (IN PHW_STREAM_REQUEST_BLOCK
SRB);
+typedef BOOLEAN (STREAMAPI * PHW_INTERRUPT) (IN PVOID DeviceExtension);
+typedef VOID (STREAMAPI * PHW_TIMER_ROUTINE) (IN PVOID Context);
+typedef VOID (STREAMAPI * PHW_PRIORITY_ROUTINE) (IN PVOID Context);
+typedef VOID (STREAMAPI * PHW_QUERY_CLOCK_ROUTINE) (IN PHW_TIME_CONTEXT TimeContext);
+typedef BOOLEAN (STREAMAPI * PHW_RESET_ADAPTER) (IN PVOID DeviceExtension);
+
+typedef enum _STREAM_MINIDRIVER_STREAM_NOTIFICATION_TYPE
+{
+ ReadyForNextStreamDataRequest,
+ ReadyForNextStreamControlRequest,
+ HardwareStarved,
+ StreamRequestComplete,
+ SignalMultipleStreamEvents,
+ SignalStreamEvent,
+ DeleteStreamEvent,
+ StreamNotificationMaximum
+}STREAM_MINIDRIVER_STREAM_NOTIFICATION_TYPE,
*PSTREAM_MINIDRIVER_STREAM_NOTIFICATION_TYPE;
+
+typedef enum _STREAM_MINIDRIVER_DEVICE_NOTIFICATION_TYPE
+{
+ ReadyForNextDeviceRequest,
+ DeviceRequestComplete,
+ SignalMultipleDeviceEvents,
+ SignalDeviceEvent,
+ DeleteDeviceEvent,
+#if (NTDDI_VERSION >= NTDDI_WINXP)
+ SignalMultipleDeviceInstanceEvents,
+#endif
+ DeviceNotificationMaximum
+} STREAM_MINIDRIVER_DEVICE_NOTIFICATION_TYPE,
*PSTREAM_MINIDRIVER_DEVICE_NOTIFICATION_TYPE;
+
+#define STREAM_CLASS_VERSION_20 0x0200
+
+typedef struct _HW_INITIALIZATION_DATA {
+#if (NTDDI_VERSION >= NTDDI_WINXP)
+ union
+ {
+ ULONG HwInitializationDataSize;
+ struct
+ {
+ USHORT SizeOfThisPacket;
+ USHORT StreamClassVersion;
+ };
+ };
+#else
+ ULONG HwInitializationDataSize;
+#endif
+
+ PHW_INTERRUPT HwInterrupt;
+ PHW_RECEIVE_DEVICE_SRB HwReceivePacket;
+ PHW_CANCEL_SRB HwCancelPacket;
+ PHW_REQUEST_TIMEOUT_HANDLER HwRequestTimeoutHandler;
+ ULONG DeviceExtensionSize;
+ ULONG PerRequestExtensionSize;
+ ULONG PerStreamExtensionSize;
+ ULONG FilterInstanceExtensionSize;
+ BOOLEAN BusMasterDMA;
+ BOOLEAN Dma24BitAddresses;
+ ULONG BufferAlignment;
+ BOOLEAN TurnOffSynchronization;
+ ULONG DmaBufferSize;
+
+#if (NTDDI_VERSION >= NTDDI_WINXP)
+ ULONG NumNameExtensions;
+ PWCHAR *NameExtensionArray;
+#else
+ ULONG Reserved[2];
+#endif
+} HW_INITIALIZATION_DATA, *PHW_INITIALIZATION_DATA;
+
+typedef enum _STREAM_PRIORITY
+{
+ High,
+ Dispatch,
+ Low,
+ LowToHigh
+}STREAM_PRIORITY, *PSTREAM_PRIORITY;
+
+
+VOID
+StreamClassAbortOutstandingRequests(
+ IN PVOID HwDeviceExtension,
+ IN PHW_STREAM_OBJECT HwStreamObject,
+ IN NTSTATUS Status
+);
+
+VOID
+STREAMAPI
+StreamClassCallAtNewPriority(
+ IN PHW_STREAM_OBJECT StreamObject,
+ IN PVOID HwDeviceExtension,
+ IN STREAM_PRIORITY Priority,
+ IN PHW_PRIORITY_ROUTINE PriorityRoutine,
+ IN PVOID Context
+ );
+
+VOID
+STREAMAPI
+StreamClassCompleteRequestAndMarkQueueReady(
+ IN PHW_STREAM_REQUEST_BLOCK Srb
+);
+
+VOID
+STREAMAPI
+StreamClassDebugAssert(
+ IN PCHAR File,
+ IN ULONG Line,
+ IN PCHAR AssertText,
+ IN ULONG AssertValue
+);
+
+VOID
+__cdecl
+StreamClassDebugPrint(
+ IN STREAM_DEBUG_LEVEL DebugPrintLevel,
+ IN PCCHAR DebugMessage,
+ ...
+);
+
+VOID
+__cdecl
+StreamClassDeviceNotification(
+ IN STREAM_MINIDRIVER_DEVICE_NOTIFICATION_TYPE NotificationType,
+ IN PVOID HwDeviceExtension,
+ ...
+);
+
+VOID
+STREAMAPI
+StreamClassFilterReenumerateStreams(
+ IN PVOID HwInstanceExtension,
+ IN ULONG StreamDescriptorSize
+);
+
+PVOID
+STREAMAPI
+StreamClassGetDmaBuffer(
+ IN PVOID HwDeviceExtension
+);
+
+
+PKSEVENT_ENTRY
+StreamClassGetNextEvent(
+ IN PVOID HwInstanceExtension_OR_HwDeviceExtension,
+ IN PHW_STREAM_OBJECT HwStreamObject,
+ IN GUID * EventGuid,
+ IN ULONG EventItem,
+ IN PKSEVENT_ENTRY CurrentEvent
+);
+
+STREAM_PHYSICAL_ADDRESS
+STREAMAPI
+StreamClassGetPhysicalAddress(
+ IN PVOID HwDeviceExtension,
+ IN PHW_STREAM_REQUEST_BLOCK HwSRB,
+ IN PVOID VirtualAddress,
+ IN STREAM_BUFFER_TYPE Type,
+ IN ULONG * Length
+);
+
+VOID
+StreamClassQueryMasterClock(
+ IN PHW_STREAM_OBJECT HwStreamObject,
+ IN HANDLE MasterClockHandle,
+ IN TIME_FUNCTION TimeFunction,
+ IN PHW_QUERY_CLOCK_ROUTINE ClockCallbackRoutine
+);
+
+VOID
+STREAMAPI
+StreamClassQueryMasterClockSync(
+ IN HANDLE MasterClockHandle,
+ IN PHW_TIME_CONTEXT TimeContext
+);
+
+BOOLEAN
+STREAMAPI
+StreamClassReadWriteConfig(
+ IN PVOID HwDeviceExtension,
+ IN BOOLEAN Read,
+ IN PVOID Buffer,
+ IN ULONG Offset,
+ IN ULONG Length
+);
+
+VOID
+STREAMAPI
+StreamClassReenumerateStreams(
+ IN PVOID HwDeviceExtension,
+ IN ULONG StreamDescriptorSize
+);
+
+NTSTATUS
+STREAMAPI
+StreamClassRegisterAdapter(
+ IN PVOID Argument1,
+ IN PVOID Argument2,
+ IN PHW_INITIALIZATION_DATA HwInitializationData
+);
+
+#define StreamClassRegisterMinidriver StreamClassRegisterAdapter
+
+NTSTATUS
+StreamClassRegisterFilterWithNoKSPins(
+ IN PDEVICE_OBJECT DeviceObject,
+ IN const GUID * InterfaceClassGUID,
+ IN ULONG PinCount,
+ IN BOOL * PinDirection,
+ IN KSPIN_MEDIUM * MediumList,
+ IN GUID * CategoryList
+);
+
+VOID
+STREAMAPI
+StreamClassScheduleTimer(
+ IN PHW_STREAM_OBJECT StreamObject,
+ IN PVOID HwDeviceExtension,
+ IN ULONG NumberOfMicroseconds,
+ IN PHW_TIMER_ROUTINE TimerRoutine,
+ IN PVOID Context
+);
+
+VOID
+__cdecl
+StreamClassStreamNotification(
+ IN STREAM_MINIDRIVER_STREAM_NOTIFICATION_TYPE NotificationType,
+ IN PHW_STREAM_OBJECT StreamObject,
+ IN ...
+);
+
+#endif
Propchange: trunk/reactos/include/ddk/strmini.h
------------------------------------------------------------------------------
svn:eol-style = native