source: cmedia/trunk/Vsd/shdd.h@ 577

Last change on this file since 577 was 354, checked in by stevenhl, 18 years ago

Import untested baseline cmedia sources, work products and binaries
Binaries and work products should be deleted from repository.
once new builds are verified to work.

File size: 16.1 KB
Line 
1/* NOINC */
2#ifdef __cplusplus
3extern "C" {
4#endif
5
6#ifndef _SHDD_H_ /* notforh2inc */
7/* INC */
8
9#define _SHDD_H_
10/***************************************************************************\
11*
12* Module Name: SHDD.H
13*
14* OS/2 2.0 Multimedia Extensions Stream Handler Device Driver Interfaces
15* Block defintions.
16*
17* Copyright (c) International Business Machines Corporation 1990,1991
18* All Rights Reserved
19*
20\***************************************************************************/
21
22/****************************************************************************/
23/* D E F I N E S */
24/****************************************************************************/
25
26/* XLATOFF */
27typedef RC (FAR *PSHDFN) (PVOID pParmIn);
28typedef RC (FAR *PDDCMDFN) (PVOID pParmIn);
29/* XLATON */
30#ifdef XXXXX /* Picked up by H2INC only */
31typedef PVOID PSHDFN; /* Because previous function */
32typedef PVOID PDDCMDFN; /* prototypes generate errors */
33 /* when parsed by H2INC. */
34#endif /* */
35
36
37
38
39
40/****************************************************************************/
41/* S T R U C T U R E S */
42/****************************************************************************/
43
44/* XLATOFF */
45#pragma pack(4)
46/* XLATON */
47
48/****************************************************************************/
49/**** DDCMD Interface **/
50/****************************************************************************/
51
52/* DDCMD Defines */
53#define DDCMD_SETUP 0L
54#define DDCMD_READ 1L
55#define DDCMD_WRITE 2L
56#define DDCMD_STATUS 3L
57#define DDCMD_CONTROL 4L
58#define DDCMD_REG_STREAM 5L
59#define DDCMD_DEREG_STREAM 6L
60
61typedef struct _ddcmd_common_parm { /* comm - common to all DD cmds */
62 ULONG ulFunction; /* Function requested by SH */
63 HSTREAM hStream; /* data stream instance */
64 } DDCMDCOMMON;
65typedef DDCMDCOMMON FAR *PDDCMDCOMMON;
66
67typedef struct _ddcmd_setup_parm { /* setu */
68 ULONG ulFunction; /* Function requested by SH */
69 HSTREAM hStream;
70 PVOID pSetupParm; /* see SETUP_PARM struct */
71 ULONG ulSetupParmSize; /* see SETUP_PARM struct */
72 } DDCMDSETUP;
73typedef DDCMDSETUP FAR *PDDCMDSETUP;
74
75 /**********************************************/
76 /* SETUP_PARM structure */
77 /**********************************************/
78typedef struct _SETUP_PARM { /* setu_parm - DDCMDSETUP parameter block */
79 ULONG ulStreamTime; /* stream time in milliseconds */
80 ULONG ulFlags; /* various flags (input/output)*/
81 /* NOTE: new fields will be added here */
82 } SETUP_PARM;
83typedef SETUP_PARM FAR *PSETUP_PARM;
84
85 /**********************************************/
86 /* ulFlag defines */
87 /**********************************************/
88#define SETUP_RECURRING_EVENTS 0x00000001
89 /* the device driver sets this flag on return from the */
90 /* DDCMD_SETUP command if the device driver assumes events */
91 /* are recurring events---in this case, the stream handler */
92 /* will not have to re-enable a recurring event each time */
93 /* the event occurs by sending a DDCMD_CONTROL command to */
94 /* the device driver. this is useful when CUE_TIME or */
95 /* DATA_CUE events are expected to be used as RECURRING */
96
97typedef struct _ddcmd_readwrite_parm { /* read */
98 ULONG ulFunction; /* Function requested by SH */
99 HSTREAM hStream;
100 PVOID pBuffer;
101 ULONG ulBufferSize;
102 PVOID pProcessLin;
103 BOOL fEOS; /* Is this the EOS buffer???*/
104 ULONG ulParm1; /* Reserved for future use */
105 ULONG ulParm2; /* Reserved for future use */
106 ULONG ulLength;
107 } DDCMDREADWRITE;
108typedef DDCMDREADWRITE FAR *PDDCMDREADWRITE;
109typedef PDDCMDREADWRITE FAR *PPDDCMDREADWRITE;
110
111typedef struct _ddcmd_status_parm { /* stat */
112 ULONG ulFunction; /* Function requested by SH */
113 HSTREAM hStream;
114 PVOID pStatus; /* (output)ptr to current position time */
115 ULONG ulStatusSize; /* (output)size of position time */
116 } DDCMDSTATUS;
117typedef DDCMDSTATUS FAR *PDDCMDSTATUS;
118
119 /**********************************************/
120 /* STATUS_PARM structure */
121 /**********************************************/
122typedef struct _STATUS_PARM { /* stat_parm - DDCMDSTATUS parameter block */
123 ULONG ulTime; /* current position time in milliseconds */
124 /* NOTE: new fields will be added here */
125 } STATUS_PARM;
126typedef STATUS_PARM FAR *PSTATUS_PARM;
127
128typedef struct _ddcmd_control_parm { /* cont */
129 ULONG ulFunction; /* Function requested by SH */
130 HSTREAM hStream;
131 HEVENT hEvent; /* used for EVENTS only */
132 ULONG ulCmd;
133 PVOID pParm; /* see CONTROL_PARM structure */
134 ULONG ulParmSize; /* see CONTROL_PARM structure */
135 } DDCMDCONTROL;
136typedef DDCMDCONTROL FAR *PDDCMDCONTROL;
137
138 /**********************************************/
139 /* ulCmd defines */
140 /**********************************************/
141 /* CHANGE and WAIT not implemented */
142#define DDCMD_START 1 /* start device */
143#define DDCMD_STOP 2 /* stop device and return current position in pParm */
144#define DDCMD_PAUSE 3 /* pause device and return current position in pParm */
145#define DDCMD_RESUME 4 /* resume device */
146#define DDCMD_ENABLE_EVENT 5 /* ask PDD to create this event */
147#define DDCMD_DISABLE_EVENT 6 /* ask PDD to purge this event */
148#define DDCMD_PAUSE_TIME 7 /* pause time keeping, but not the stream */
149#define DDCMD_RESUME_TIME 8 /* resume time keeping. */
150
151 /**********************************************/
152 /* CONTROL_PARM structure */
153 /**********************************************/
154typedef struct _CONTROL_PARM { /* cont_parm - DDCMDCONTROL parameter block */
155 ULONG ulTime; /* time in milliseconds */
156 /* SH sets cuetime when ulCmd is ENABLE_EVENT */
157 /* PDD returns current time for STOP, PAUSE */
158 TIME_EVCB evcb;
159
160 } CONTROL_PARM;
161typedef CONTROL_PARM FAR *PCONTROL_PARM;
162
163 /*******************************************************************************/
164 /* This structure is filled in by the amp mixer based on the instance */
165 /* data. */
166 /*******************************************************************************/
167typedef struct _AUDIOMODE { /* audio mode fields for DDCMDRegister */
168 LONG lSRate; /* sample rate */
169 LONG lBitsPerSRate; /* bits per sample */
170 SHORT sChannels; /* Channels */
171 } AUDIOMODE;
172typedef AUDIOMODE FAR *PAUDIOMODE;
173
174typedef struct _ddcmd_register_parm { /* regi */
175 ULONG ulFunction; /* Function requested by SH */
176 HSTREAM hStream; /* Stream handle needed @ interrupt time */
177 ULONG ulSysFileNum; /* Device Handle so pdd can map device instance to hstream */
178 PSHDFN pSHDEntryPoint; /* Stream handler entry point */
179 ULONG ulStreamOperation; /* SH input Record or play */
180 SPCBKEY spcbkey;
181 ULONG ulBufSize; /* PDD output (optional) buffer size in bytes for SPCB */
182 ULONG ulNumBufs; /* PDD output (optional) # of buffers for SPCB */
183 ULONG ulAddressType; /* PDD output (required) addr ptr type to data buffer */
184 ULONG ulBytesPerUnit; /*PDD output (required) */
185 MMTIME mmtimePerUnit; /*PDD output (required) */
186 E_DCB dcbAudio; /* SH input Device Control Block */
187 HID hid; /* SH input stream handler id */
188 AUDIOMODE AudioMode; /* PPC - Audio mode data structure */
189 } DDCMDREGISTER;
190typedef DDCMDREGISTER FAR *PDDCMDREGISTER;
191
192 /*****************************/
193 /* ulStreamOperation defines*/
194 /*****************************/
195#define STREAM_OPERATION_MASK 0xC000
196#define STREAM_OPERATION_CONSUME 0x8000
197#define STREAM_OPERATION_PRODUCE 0xC000
198
199 /*******************************************************************************/
200 /* ulAddressType defines */
201 /* The PDD will tell the SH what type of address ptr it expects the data buffer*/
202 /* to be. The SH will then request this address type to the SSM, so that the */
203 /* SSM will send the correct type of each buffer request. */
204 /*******************************************************************************/
205#define ADDRESS_TYPE_VIRTUAL 0L
206#define ADDRESS_TYPE_PHYSICAL 1L /*default */
207#define ADDRESS_TYPE_LINEAR 2L
208
209typedef struct _ddcmd_deregister_parm { /* dere */
210 ULONG ulFunction; /* Function requested by SH */
211 HSTREAM hStream; /* Stream handle needed @ interrupt time */
212 } DDCMDDEREGISTER;
213typedef DDCMDDEREGISTER FAR *PDDCMDDEREGISTER;
214
215
216
217/****************************************************************************/
218/**** RING 0 Stream Handler SHD Interfaces ***/
219/****************************************************************************/
220
221/* RING 0 Stream Handler SHD's: */
222#define SHD_REPORT_INT 0L /* PDD reports interrupt has arrived*/
223#define SHD_REPORT_EVENT 1L /* PDD reports cuetime has arrived */
224
225typedef struct _shd_common_parm { /* shdc */
226 ULONG ulFunction; /* Function requested by PDD */
227 HSTREAM hStream; /* Stream handle needed @ interrupt time */
228 }SHD_COMMON;
229typedef SHD_COMMON FAR *PSHD_COMMON;
230
231typedef struct _shd_reportint_parm { /* repi */
232 ULONG ulFunction; /* Function requested by PDD*/
233 HSTREAM hStream; /* so SH knows which stream to process */
234 PVOID pBuffer; /* return ptr to last used buffer */
235 ULONG ulFlag; /* reason for interrupt */
236 ULONG ulStatus; /* rc or bytes read/written */
237 ULONG ulStreamTime; /* time in milliseconds of stream position */
238 } SHD_REPORTINT;
239typedef SHD_REPORTINT FAR *PSHD_REPORTINT;
240
241 /*******************/
242 /* ulFlag settings */
243 /*******************/
244#define ERROR 0x80L
245#define STREAM_STOP_NOW 0x40L
246#define SHD_READ_COMPLETE 1L
247#define SHD_WRITE_COMPLETE 2L
248
249typedef struct _shd_reportevent_parm { /* repe */
250 ULONG ulFunction; /* Function requested by PDD*/
251 HSTREAM hStream; /* so SH knows which stream to process */
252 HEVENT hEvent; /* event handle pass back to stream handler*/
253 ULONG ulStreamTime; /* time in milliseconds of stream position */
254 } SHD_REPORTEVENT;
255typedef SHD_REPORTEVENT FAR *PSHD_REPORTEVENT;
256
257
258
259/****************************************************************************/
260/**** RING 3 Stream Handler SHD Interfaces ***/
261/****************************************************************************/
262
263/* RING 3 Stream Handler SHD's: (Uses SpiSendMsg as interface) */
264#define SHC_REPORT_INT 0x80000000L /* ulMsgType for SHD_REPORT_INT */
265#define SHC_REPORT_EVENT 0x80000001L /* ulMsgType for SHD_REPORT_EVENT */
266
267/**********************************************
268 *
269 * MSG_REPORTINT Control Block.
270 * pMsg field of SpiSendMsg api
271 *
272 **********************************************/
273typedef struct _MSG_REPORTINT { /* msgrepi */
274 ULONG ulMsgLen; /* Length of structure */
275 PVOID pBuffer; /* return ptr to last used buffer */
276 ULONG ulFlag; /* reason for interrupt */
277 ULONG ulStatus; /* rc or bytes read/written */
278 ULONG ulStreamTime; /* time in milliseconds of stream position */
279 } MSG_REPORTINT, FAR *PMSG_REPORTINT;
280
281 /* For ulFlag defines, refer to the _shd_reportint_parm structure */
282
283
284
285/**********************************************
286 *
287 * MSG_REPORTEVENT Control Block.
288 * pMsg field of SpiSendMsg api
289 *
290 **********************************************/
291typedef struct _MSG_REPORTEVENT { /* msgrepe */
292 ULONG ulMsgLen; /* Length of structure */
293 HEVENT hevent; /* event handle pass back to stream handler */
294 ULONG ulStreamTime; /* time in milliseconds of stream position */
295 } MSG_REPORTEVENT, FAR *PMSG_REPORTEVENT;
296
297
298
299/* XLATOFF */
300#pragma pack()
301/* XLATON */
302
303/****************************************************************************/
304/* F U N C T I O N P R O T O T Y P E S */
305/****************************************************************************/
306
307/* XLATOFF */
308RC FAR SHDEntryPoint(PSHD_COMMON pCommon);
309RC FAR DDCMDEntryPoint(PDDCMDCOMMON pCommon);
310/* XLATON */
311
312/* NOINC */
313#endif /* notforh2inc */
314
315#ifdef __cplusplus
316}
317#endif
318/* INC */
Note: See TracBrowser for help on using the repository browser.