source: cmedia/trunk/Vsd/AudioIF/ddcmd.c@ 354

Last change on this file since 354 was 354, checked in by stevenhl, 17 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: 13.4 KB
Line 
1
2/************************ START OF SPECIFICATIONS ***************************/
3/* */
4/* SOURCE FILE NAME: DDCMD.C */
5/* */
6/* DESCRIPTIVE NAME: vsdDDCMDEntryPoint and procedures */
7/* */
8/* COPYRIGHT: IBM Confidential */
9/* Copyright (c) IBM Corporation 1993 */
10/* All Rights Reserved */
11/* */
12/* STATUS: WPOS Release 1.0 */
13/* */
14/* NOTES: */
15/* */
16/* ENTRY POINTS: */
17/* */
18/* EXTERNAL REFERENCES: */
19/* */
20/* MODIFICATION HISTORY: */
21/* DATE DEVELOPER CHANGE DESCRIPTION */
22/* -------- ----------- -------------------- */
23/* 11/11/93 Brian Czako Initial code added to module. */
24/* 07/22/94 Mike Koval WPOS Changes for WorkPlace OS */
25/*************************** END OF SPECIFICATIONS **************************/
26
27/**********************************************************/
28/* Include files */
29/**********************************************************/
30
31#define INCL_BASE /* include BASE OS/2 defines */
32#define INCL_PM
33#define INCL_WINWINDOWMGR
34#include <os2.h> /* all-inclusive OS/2 include file */
35
36#include <ptrace.h> /* PTRACE macros */
37#include <os2me.h> /* include external definitions */
38
39#include <shdd.h>
40
41#include "ddcmd.h"
42
43//-----------------------------------------------------------------------------
44#ifdef INCL_MM_OS2
45extern STREAM aStreamVSD[MAX_STREAM_NUM];
46
47
48#define Convert32to1616(value) ( \
49 (value) \
50 ? ((PVOID) MAKEULONG (LOUSHORT (value), (HIUSHORT (value) << 3) + 7)) \
51 : NULL)
52#endif
53//-----------------------------------------------------------------------------
54
55
56/************************** START OF SPECIFICATIONS *************************/
57/* */
58/* SUBROUTINE NAME: DDCMDEntryPoint */
59/* */
60/* FUNCTION: Entry point to "generic" DDCMD DLL. Used for ring 3 */
61/* stream handler DLL, passing down requests to ring 0 via IOCtl */
62/* calls. For WPOS, the appropriate mach kernel calls are made. */
63/* from LIBDDCMD.DLL. */
64/* */
65/* NOTES: none */
66/* */
67/* INPUT: none */
68/* */
69/* OUTPUT: */
70/* */
71/*************************** END OF SPECIFICATIONS **************************/
72ULONG vsdDDCMDEntryPoint (PVOID pEntry)
73{
74//-----------------------------------------------------------------------------
75#ifdef INCL_MM_WPOS
76 // Call DDCMD.DLL (DDCMCSRV.C) to process the DDCMD command for WPOS.
77 return XvsdDDCMDEntryPoint (pEntry);
78#endif
79//-----------------------------------------------------------------------------
80
81//-----------------------------------------------------------------------------
82#ifdef INCL_MM_OS2
83
84 PDDCMDCOMMON pCommon = (PDDCMDCOMMON) pEntry;
85
86 if (pCommon == NULL)
87 {
88 return (ERROR_INVALID_BLOCK) ;
89 }
90
91 switch (pCommon->ulFunction)
92 {
93 case DDCMD_SETUP:
94 return DDCmdSetup ((PDDCMDSETUP)pCommon);
95
96 case DDCMD_READ:
97 return DDCmdRead ((PDDCMDREADWRITE)pCommon);
98
99 case DDCMD_WRITE:
100 return DDCmdWrite ((PDDCMDREADWRITE)pCommon);
101
102 case DDCMD_STATUS:
103 return DDCmdStatus ((PDDCMDSTATUS)pCommon);
104
105 case DDCMD_CONTROL:
106 return DDCmdControl ((PDDCMDCONTROL)pCommon);
107
108 case DDCMD_REG_STREAM:
109 return DDCmdRegister ((PDDCMDREGISTER)pCommon);
110
111 case DDCMD_DEREG_STREAM:
112 return DDCmdDeRegister ((PDDCMDDEREGISTER)pCommon);
113
114 default:
115 return (ERROR_INVALID_FUNCTION);
116 }
117#endif
118//-----------------------------------------------------------------------------
119}
120
121
122
123//-----------------------------------------------------------------------------
124#ifdef INCL_MM_OS2
125ULONG DDCmdSetup (PDDCMDSETUP pSetup)
126{
127 ULONG rc, ParmSize;
128 PVOID pBackupSetupParm;
129 DDSHPARMS ParmIn;
130
131 //******************************************************
132 // Convert pSetup, pSetup->pSetupParm to 16:16 pointers
133 //******************************************************
134 pBackupSetupParm = pSetup->pSetupParm;
135
136 pSetup->pSetupParm = Convert32to1616 (pSetup->pSetupParm);
137 ParmIn.pBuffer = Convert32to1616 (pSetup);
138 ParmIn.rc = 0;
139 ParmSize = sizeof (DDCMDSETUP);
140
141 rc = DosDevIOCtl (aStreamVSD[pSetup->hStream].hfileDDSHPDD,
142 (ULONG) DDSH_CATEGORY_INTERNAL,
143 (ULONG) DDCMD_SETUP,
144 (PVOID) &ParmIn,
145 (ULONG) ParmSize,
146 (PULONG) &ParmSize,
147 (PVOID) &ParmIn,
148 (ULONG) ParmSize,
149 (PULONG) &ParmSize );
150
151 if (!rc)
152 {
153 rc = ParmIn.rc;
154 }
155
156 //********************
157 // Restore pSetupParm
158 //********************
159 pSetup->pSetupParm = pBackupSetupParm;
160
161 return (rc);
162}
163
164
165
166ULONG DDCmdRead (PDDCMDREADWRITE pRead)
167{
168 ULONG rc, ParmSize;
169 DDSHPARMS ParmIn;
170
171
172 ParmIn.pBuffer = Convert32to1616 (pRead);
173 ParmIn.rc = 0;
174 ParmSize = sizeof (DDCMDREADWRITE);
175
176 rc = DosDevIOCtl (aStreamVSD[pRead->hStream].hfileDDSHPDD,
177 (ULONG) DDSH_CATEGORY_INTERNAL,
178 (ULONG) DDCMD_READ,
179 (PVOID) &ParmIn,
180 (ULONG) ParmSize,
181 (PULONG) &ParmSize,
182 (PVOID) &ParmIn,
183 (ULONG) ParmSize,
184 (PULONG) &ParmSize );
185
186 if (!rc)
187 {
188 rc = ParmIn.rc;
189 }
190
191 return (rc);
192}
193
194ULONG DDCmdWrite (PDDCMDREADWRITE pWrite)
195{
196 ULONG rc, ParmSize;
197 DDSHPARMS ParmIn;
198
199
200 ParmIn.pBuffer = Convert32to1616 (pWrite);
201 ParmIn.rc = 0;
202 ParmSize = sizeof (DDCMDREADWRITE);
203
204 rc = DosDevIOCtl (aStreamVSD[pWrite->hStream].hfileDDSHPDD,
205 (ULONG) DDSH_CATEGORY_INTERNAL,
206 (ULONG) DDCMD_WRITE,
207 (PVOID) &ParmIn,
208 (ULONG) ParmSize,
209 (PULONG) &ParmSize,
210 (PVOID) &ParmIn,
211 (ULONG) ParmSize,
212 (PULONG) &ParmSize );
213
214 if (!rc)
215 {
216 rc = ParmIn.rc;
217 }
218
219 return (rc);
220}
221
222ULONG DDCmdStatus (PDDCMDSTATUS pDDCMDStatus)
223{
224 ULONG rc, ParmSize;
225 PVOID pBackupBuffer;
226 DDSHPARMS ParmIn;
227
228 pBackupBuffer = pDDCMDStatus->pStatus;
229 pDDCMDStatus->pStatus = Convert32to1616 (pDDCMDStatus->pStatus);
230 ParmIn.pBuffer = Convert32to1616 (pDDCMDStatus);
231 ParmIn.rc = 0;
232 ParmSize = sizeof (DDCMDSTATUS);
233
234 rc = DosDevIOCtl (aStreamVSD[pDDCMDStatus->hStream].hfileDDSHPDD,
235 (ULONG) DDSH_CATEGORY_INTERNAL,
236 (ULONG) DDCMD_STATUS,
237 (PVOID) &ParmIn,
238 (ULONG) ParmSize,
239 (PULONG) &ParmSize,
240 (PVOID) &ParmIn,
241 (ULONG) ParmSize,
242 (PULONG) &ParmSize );
243
244 if (!rc)
245 {
246 rc = ParmIn.rc;
247 }
248
249 pDDCMDStatus->pStatus = pBackupBuffer; // Restore original pointer
250
251 return (rc);
252}
253
254ULONG DDCmdControl (PDDCMDCONTROL pControl)
255{
256 ULONG rc, ParmSize;
257 DDSHPARMS ParmIn;
258 PVOID pBackupBuffer;
259
260 pBackupBuffer = pControl->pParm;
261 pControl->pParm = Convert32to1616 (pControl->pParm);
262 ParmIn.pBuffer = Convert32to1616 (pControl);
263 ParmIn.rc = 0;
264 ParmSize = sizeof (DDCMDCONTROL);
265
266 rc = DosDevIOCtl (aStreamVSD[pControl->hStream].hfileDDSHPDD,
267 (ULONG) DDSH_CATEGORY_INTERNAL,
268 (ULONG) DDCMD_CONTROL,
269 (PVOID) &ParmIn,
270 (ULONG) ParmSize,
271 (PULONG) &ParmSize,
272 (PVOID) &ParmIn,
273 (ULONG) ParmSize,
274 (PULONG) &ParmSize );
275
276 if (!rc)
277 {
278 rc = ParmIn.rc;
279 }
280
281 pControl->pParm = pBackupBuffer;
282
283 return (rc);
284}
285
286ULONG DDCmdRegister (PDDCMDREGISTER pRegister)
287{
288 ULONG rc, ParmSize;
289 DDSHPARMS ParmIn;
290 ULONG ActionTaken;
291
292 ParmIn.pBuffer = Convert32to1616 (pRegister);
293 ParmIn.rc = 0;
294 ParmSize = sizeof (DDCMDREGISTER);
295
296 //*****************
297 // Open Ring 0 stub
298 //*****************
299////////if (!(rc = DosOpen (pRegister->szR0StubName,
300
301 if (!(rc = DosOpen ("R0STUB$", // Hardcoding of stub
302 &aStreamVSD[pRegister->hStream].hfileDDSHPDD,
303 &ActionTaken,
304 0,
305 FILE_NORMAL,
306 OPEN_ACTION_OPEN_IF_EXISTS |
307 OPEN_ACTION_FAIL_IF_NEW,
308 OPEN_ACCESS_READWRITE |
309 OPEN_FLAGS_NOINHERIT |
310 OPEN_FLAGS_FAIL_ON_ERROR |
311 OPEN_SHARE_DENYNONE,
312 NULL)))
313 {
314
315 rc = DosDevIOCtl (aStreamVSD[pRegister->hStream].hfileDDSHPDD,
316 (ULONG) DDSH_CATEGORY_INTERNAL,
317 (ULONG) DDCMD_REG_STREAM,
318 (PVOID) &ParmIn,
319 (ULONG) ParmSize,
320 (PULONG) &ParmSize,
321 (PVOID) &ParmIn,
322 (ULONG) ParmSize,
323 (PULONG) &ParmSize );
324 }
325
326 if (!rc)
327 {
328 rc = ParmIn.rc;
329 }
330
331 return (rc);
332}
333
334
335
336
337ULONG DDCmdDeRegister (PDDCMDDEREGISTER pDeregister)
338{
339 ULONG rc, ParmSize;
340 DDSHPARMS ParmIn;
341
342
343 ParmIn.pBuffer = Convert32to1616 (pDeregister);
344 ParmIn.rc = 0;
345 ParmSize = sizeof (DDCMDDEREGISTER);
346
347 rc = DosDevIOCtl (aStreamVSD[pDeregister->hStream].hfileDDSHPDD,
348 (ULONG) DDSH_CATEGORY_INTERNAL,
349 (ULONG) DDCMD_DEREG_STREAM,
350 (PVOID) &ParmIn,
351 (ULONG) ParmSize,
352 (PULONG) &ParmSize,
353 (PVOID) &ParmIn,
354 (ULONG) ParmSize,
355 (PULONG) &ParmSize );
356
357 if (!rc)
358 {
359 rc = ParmIn.rc;
360 DosClose(aStreamVSD[pDeregister->hStream].hfileDDSHPDD);
361 aStreamVSD[pDeregister->hStream].hfileDDSHPDD = 0;
362 }
363
364 return (rc);
365}
366
367#endif
368//-----------------------------------------------------------------------------
Note: See TracBrowser for help on using the repository browser.