6 #define DONT_HOLD_FOR_SEQUENCING 0x8000000000000000
9 typedef LONGLONG REFERENCE_TIME
;
12 typedef struct _DMUS_KERNEL_EVENT
{
16 USHORT usChannelGroup
;
18 REFERENCE_TIME ullPresTime100ns
;
19 ULONGLONG ullBytePosition
;
20 struct _DMUS_KERNEL_EVENT
*pNextEvt
;
22 BYTE abData
[sizeof(PBYTE
)];
24 struct _DMUS_KERNEL_EVENT
*pPackageEvt
;
26 } DMUS_KERNEL_EVENT
, *PDMUS_KERNEL_EVENT
;
29 DMUS_STREAM_MIDI_INVALID
= -1,
30 DMUS_STREAM_MIDI_RENDER
= 0,
31 DMUS_STREAM_MIDI_CAPTURE
,
35 DEFINE_GUID(CLSID_MiniportDriverDMusUART
, 0xd3f0ce1c, 0xFFFC, 0x11D1, 0x81, 0xB0, 0x00, 0x60, 0x08, 0x33, 0x16, 0xC1);
36 DEFINE_GUID(CLSID_MiniportDriverDMusUARTCapture
, 0xD3F0CE1D, 0xFFFC, 0x11D1, 0x81, 0xB0, 0x00, 0x60, 0x08, 0x33, 0x16, 0xC1);
38 /* ===============================================================
39 IMasterClock Interface
43 #define INTERFACE IMasterClock
45 DECLARE_INTERFACE_(IMasterClock
,IUnknown
) {
46 DEFINE_ABSTRACT_UNKNOWN()
48 STDMETHOD_(NTSTATUS
,GetTime
)( THIS_
49 _Out_ REFERENCE_TIME
*pTime
53 typedef IMasterClock
*PMASTERCLOCK
;
55 #define IMP_IMasterClock \
56 STDMETHODIMP_(NTSTATUS) GetTime( \
57 _Out_ REFERENCE_TIME *pTime \
60 /* ===============================================================
65 #define INTERFACE IMXF
68 typedef struct IMXF
*PMXF
;
70 #define DEFINE_ABSTRACT_IMXF() \
71 STDMETHOD_(NTSTATUS,SetState)(THIS_ \
74 STDMETHOD_(NTSTATUS,PutMessage)(THIS_ \
75 _In_ PDMUS_KERNEL_EVENT pDMKEvt \
77 STDMETHOD_(NTSTATUS,ConnectOutput)(THIS_ \
80 STDMETHOD_(NTSTATUS,DisconnectOutput)(THIS_ \
85 STDMETHODIMP_(NTSTATUS) SetState ( \
86 _In_ KSSTATE State); \
87 STDMETHODIMP_(NTSTATUS) PutMessage (THIS_ \
88 _In_ PDMUS_KERNEL_EVENT pDMKEvt); \
89 STDMETHODIMP_(NTSTATUS) ConnectOutput (THIS_ \
91 STDMETHODIMP_(NTSTATUS) DisconnectOutput (THIS_ \
94 DECLARE_INTERFACE_(IMXF
,IUnknown
) {
95 DEFINE_ABSTRACT_UNKNOWN()
96 DEFINE_ABSTRACT_IMXF()
99 /* ===============================================================
100 IAllocatorMXF Interface
104 #define INTERFACE IAllocatorMXF
106 struct IAllocatorMXF
;
107 typedef struct IAllocatorMXF
*PAllocatorMXF
;
109 #define STATIC_IID_IAllocatorMXF\
110 0xa5f0d62c, 0xb30f, 0x11d2, 0xb7, 0xa3, 0x00, 0x60, 0x08, 0x33, 0x16, 0xc1
111 DEFINE_GUIDSTRUCT("a5f0d62c-b30f-11d2-b7a3-0060083316c1", IID_IAllocatorMXF
);
112 #define IID_IAllocatorMXF DEFINE_GUIDNAMED(IID_IAllocatorMXF)
115 DECLARE_INTERFACE_(IAllocatorMXF
, IMXF
) {
116 DEFINE_ABSTRACT_UNKNOWN()
118 DEFINE_ABSTRACT_IMXF()
120 STDMETHOD_(NTSTATUS
,GetMessage
)(THIS_
121 _Out_ PDMUS_KERNEL_EVENT
*ppDMKEvt
124 STDMETHOD_(USHORT
,GetBufferSize
)(THIS
) PURE
;
126 STDMETHOD_(NTSTATUS
,GetBuffer
)(THIS_
127 _Outptr_result_bytebuffer_(_Inexpressible_(GetBufferSize bytes
)) PBYTE
*ppBuffer
130 STDMETHOD_(NTSTATUS
,PutBuffer
)(THIS_
135 #define IMP_IAllocatorMXF \
137 STDMETHODIMP_(NTSTATUS) GetMessage( \
138 _Out_ PDMUS_KERNEL_EVENT *ppDMKEvt); \
140 STDMETHODIMP_(USHORT) GetBufferSize(void); \
142 STDMETHODIMP_(NTSTATUS) GetBuffer( \
143 _Outptr_result_bytebuffer_(_Inexpressible_(GetBufferSize bytes)) \
146 STDMETHODIMP_(NTSTATUS) PutBuffer( \
150 #define INTERFACE IPortDMus
152 DEFINE_GUID(IID_IPortDMus
, 0xc096df9c, 0xfb09, 0x11d1, 0x81, 0xb0, 0x00, 0x60, 0x08, 0x33, 0x16, 0xc1);
153 DEFINE_GUID(CLSID_PortDMus
, 0xb7902fe9, 0xfb0a, 0x11d1, 0x81, 0xb0, 0x00, 0x60, 0x08, 0x33, 0x16, 0xc1);
155 DECLARE_INTERFACE_(IPortDMus
, IPort
) {
156 DEFINE_ABSTRACT_UNKNOWN()
158 DEFINE_ABSTRACT_PORT()
160 STDMETHOD_(void,Notify
)(THIS_
161 _In_opt_ PSERVICEGROUP ServiceGroup
164 STDMETHOD_(void,RegisterServiceGroup
)(THIS_
165 _In_ PSERVICEGROUP ServiceGroup
168 typedef IPortDMus
*PPORTDMUS
;
170 #define IMP_IPortDMus \
172 STDMETHODIMP_(void) Notify( \
173 _In_opt_ PSERVICEGROUP ServiceGroup); \
175 STDMETHODIMP_(void) RegisterServiceGroup( \
176 _In_ PSERVICEGROUP ServiceGroup)
179 #define INTERFACE IMiniportDMus
181 DEFINE_GUID(IID_IMiniportDMus
, 0xc096df9d, 0xfb09, 0x11d1, 0x81, 0xb0, 0x00, 0x60, 0x08, 0x33, 0x16, 0xc1);
183 DECLARE_INTERFACE_(IMiniportDMus
, IMiniport
) {
184 DEFINE_ABSTRACT_UNKNOWN()
186 DEFINE_ABSTRACT_MINIPORT()
188 STDMETHOD_(NTSTATUS
,Init
)(THIS_
189 _In_opt_ PUNKNOWN UnknownAdapter
,
190 _In_ PRESOURCELIST ResourceList
,
192 _Out_ PSERVICEGROUP
*ServiceGroup
195 STDMETHOD_(void,Service
)(THIS
) PURE
;
197 STDMETHOD_(NTSTATUS
,NewStream
)(THIS_
199 _In_opt_ PUNKNOWN OuterUnknown
,
200 _In_ POOL_TYPE PoolType
,
202 _In_ DMUS_STREAM_TYPE StreamType
,
203 _In_ PKSDATAFORMAT DataFormat
,
204 _Out_ PSERVICEGROUP
*ServiceGroup
,
205 _In_ PAllocatorMXF AllocatorMXF
,
206 _In_ PMASTERCLOCK MasterClock
,
207 _Out_ PULONGLONG SchedulePreFetch
211 typedef IMiniportDMus
*PMINIPORTDMUS
;
214 #define IMP_IMiniportDMus \
216 STDMETHODIMP_(NTSTATUS) Init( \
217 _In_opt_ PUNKNOWN UnknownAdapter, \
218 _In_ PRESOURCELIST ResourceList, \
219 _In_ PPORTDMUS Port, \
220 _Out_ PSERVICEGROUP *ServiceGroup); \
222 STDMETHODIMP_(void) Service(THIS); \
224 STDMETHODIMP_(NTSTATUS) NewStream( \
226 _In_opt_ PUNKNOWN OuterUnknown, \
227 _In_ POOL_TYPE PoolType, \
229 _In_ DMUS_STREAM_TYPE StreamType, \
230 _In_ PKSDATAFORMAT DataFormat, \
231 _Out_ PSERVICEGROUP *ServiceGroup, \
232 _In_ PAllocatorMXF AllocatorMXF, \
233 _In_ PMASTERCLOCK MasterClock, \
234 _Out_ PULONGLONG SchedulePreFetch)
237 #define STATIC_KSAUDFNAME_DMUSIC_MPU_OUT\
238 0xA4DF0EB5, 0xBAC9, 0x11d2, {0xB7, 0xA8, 0x00, 0x60, 0x08, 0x33, 0x16, 0xC1}
239 DEFINE_GUIDSTRUCT("A4DF0EB5-BAC9-11d2-B7A8-0060083316C1", KSAUDFNAME_DMUSIC_MPU_OUT
);
240 #define KSAUDFNAME_DMUSIC_MPU_OUT DEFINE_GUIDNAMED(KSAUDFNAME_DMUSIC_MPU_OUT)
242 #define STATIC_KSAUDFNAME_DMUSIC_MPU_IN\
243 0xB2EC0A7D, 0xBAC9, 0x11d2, {0xB7, 0xA8, 0x00, 0x60, 0x08, 0x33, 0x16, 0xC1}
244 DEFINE_GUIDSTRUCT("B2EC0A7D-BAC9-11d2-B7A8-0060083316C1", KSAUDFNAME_DMUSIC_MPU_IN
);
245 #define KSAUDFNAME_DMUSIC_MPU_IN DEFINE_GUIDNAMED(KSAUDFNAME_DMUSIC_MPU_IN)
247 #define STATIC_IID_IMXF\
248 0xc096df9e, 0xfb09, 0x11d1, {0x81, 0xb0, 0x00, 0x60, 0x08, 0x33, 0x16, 0xc1}
249 DEFINE_GUIDSTRUCT("c096df9e-fb09-11d1-81b0-0060083316c1", IID_IMXF
);
250 #define IID_IMXF DEFINE_GUIDNAMED(IID_IMXF)
252 #define DMUS_KEF_EVENT_COMPLETE 0x0000
253 #define DMUS_KEF_EVENT_INCOMPLETE 0x0001
254 #define DMUS_KEF_PACKAGE_EVENT 0x0002
255 #define kBytePositionNone (~(ULONGLONG)0)
257 #define SHORT_EVT(evt) ((evt)->cbEvent <= sizeof(PBYTE))
258 #define PACKAGE_EVT(evt) ((evt)->usFlags & DMUS_KEF_PACKAGE_EVENT)
259 #define INCOMPLETE_EVT(evt) ((evt)->usFlags & DMUS_KEF_EVENT_INCOMPLETE)
260 #define COMPLETE_EVT(evt) (((evt)->usFlags & DMUS_KEF_EVENT_INCOMPLETE) == 0)
262 #define SET_INCOMPLETE_EVT(evt) ((evt)->usFlags |= DMUS_KEF_EVENT_INCOMPLETE)
263 #define SET_COMPLETE_EVT(evt) ((evt)->usFlags &= (~DMUS_KEF_EVENT_INCOMPLETE))
264 #define SET_PACKAGE_EVT(evt) ((evt)->usFlags |= DMUS_KEF_PACKAGE_EVENT)
265 #define CLEAR_PACKAGE_EVT(evt) ((evt)->usFlags &= (~DMUS_KEF_PACKAGE_EVENT))
267 #endif /* _DMUSICKS_ */