summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorPradeep Venkatasubbarao2013-12-03 05:01:25 -0600
committerPradeep Venkatasubbarao2013-12-03 05:01:25 -0600
commit9e05b5f585e8502bcbac516cae35b0194058ece2 (patch)
tree7e86f4e8372058405134e7be9d5a4580e7b8aac4 /src
parent04da5646c83b698e7d18f3eee29b23bf6b161e1f (diff)
downloaddspdce-9e05b5f585e8502bcbac516cae35b0194058ece2.tar.gz
dspdce-9e05b5f585e8502bcbac516cae35b0194058ece2.tar.xz
dspdce-9e05b5f585e8502bcbac516cae35b0194058ece2.zip
Modified Memory Map in Resource table.1.00.00.00
Now DSP can allocate upto 64MB. Signed-off-by: Pradeep Venkatasubbarao <pradeepv@ti.com>
Diffstat (limited to 'src')
-rw-r--r--src/ti/framework/dce/dce.c155
1 files changed, 100 insertions, 55 deletions
diff --git a/src/ti/framework/dce/dce.c b/src/ti/framework/dce/dce.c
index 0b7093d..875b33e 100644
--- a/src/ti/framework/dce/dce.c
+++ b/src/ti/framework/dce/dce.c
@@ -29,7 +29,7 @@
29 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, 29 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
30 * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 30 * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
31 */ 31 */
32 32
33#include <stdlib.h> 33#include <stdlib.h>
34#include <stdint.h> 34#include <stdint.h>
35#include <string.h> 35#include <string.h>
@@ -101,13 +101,13 @@ static Int32 engine_close(UInt32 size, UInt32 *data);
101 101
102/* VIDDEC2 Decoder Server static function declarations */ 102/* VIDDEC2 Decoder Server static function declarations */
103static VIDDEC2_Handle viddec2_create(Engine_Handle engine, String name, VIDDEC2_Params *params); 103static VIDDEC2_Handle viddec2_create(Engine_Handle engine, String name, VIDDEC2_Params *params);
104static int viddec2_reloc(VIDDEC2_Handle handle, uint8_t *ptr, uint32_t len); 104static int viddec2_reloc(VIDDEC2_Handle handle, uint8_t *ptr, uint32_t len);
105static int viddec2_control(VIDDEC2_Handle handle, VIDDEC2_Cmd id, VIDDEC2_DynamicParams *dynParams, 105static int viddec2_control(VIDDEC2_Handle handle, VIDDEC2_Cmd id, VIDDEC2_DynamicParams *dynParams,
106 VIDDEC2_Status *status ); 106 VIDDEC2_Status *status );
107static int viddec2_process(VIDDEC2_Handle handle, XDM1_BufDesc *inBufs, 107static int viddec2_process(VIDDEC2_Handle handle, XDM1_BufDesc *inBufs,
108 XDM_BufDesc *outBufs, VIDDEC2_InArgs *inArgs, VIDDEC2_OutArgs *outArgs ); 108 XDM_BufDesc *outBufs, VIDDEC2_InArgs *inArgs, VIDDEC2_OutArgs *outArgs );
109static int viddec2_delete(VIDDEC2_Handle handle); 109static int viddec2_delete(VIDDEC2_Handle handle);
110 110
111static struct { 111static struct {
112 CreateFxn create; 112 CreateFxn create;
113 ControlFxn control; 113 ControlFxn control;
@@ -124,7 +124,7 @@ static struct {
124 }, 124 },
125}; 125};
126 126
127 127#define UNIVERSAL_COPY_EXAMPLE
128/* Static version string buffer. 128/* Static version string buffer.
129 * Note: codec version can be large. For example, h264vdec needs more than 129 * Note: codec version can be large. For example, h264vdec needs more than
130 * 58 characters, or the query will fail. */ 130 * 58 characters, or the query will fail. */
@@ -139,7 +139,7 @@ static char version_buffer[VERSION_SIZE];
139 * it gets populated in the future versions of framework components. 139 * it gets populated in the future versions of framework components.
140 * 140 *
141 * Forced off mode during video decode/encode is not supported. */ 141 * Forced off mode during video decode/encode is not supported. */
142#if 0 142#if 0
143static void dce_suspend() 143static void dce_suspend()
144{ 144{
145 INFO("Preparing for suspend..."); 145 INFO("Preparing for suspend...");
@@ -153,6 +153,7 @@ static void dce_resume()
153} 153}
154#endif 154#endif
155 155
156#ifdef UNIVERSAL_COPY_EXAMPLE
156static void get_universal_version(UNIVERSAL_Handle h, char *buffer, unsigned size) 157static void get_universal_version(UNIVERSAL_Handle h, char *buffer, unsigned size)
157{ 158{
158 UNIVERSAL_DynamicParams params = 159 UNIVERSAL_DynamicParams params =
@@ -180,20 +181,59 @@ static void get_universal_version(UNIVERSAL_Handle h, char *buffer, unsigned siz
180 ERROR("Unknown version Error = %d:: buffer = %p size = %d", s, buffer, size); 181 ERROR("Unknown version Error = %d:: buffer = %p size = %d", s, buffer, size);
181 } 182 }
182} 183}
184#else
185static void get_viddec2_version(VIDDEC2_Handle h, char *buffer, unsigned size)
186{
187 VIDDEC2_DynamicParams params =
188 {
189 .size = sizeof(VIDDEC2_DynamicParams),
190 };
191
192 VIDDEC2_Status status =
193 {
194 .size = sizeof(VIDDEC2_Status),
195 .data =
196 {
197 .buf = (XDAS_Int8 *)buffer,
198 .bufSize = (XDAS_Int32)size,
199 },
200 };
201
202 XDAS_Int32 s;
203
204 memset(buffer, 0, size);
205 s = VIDDEC2_control(h, XDM_GETVERSION, &params, &status);
206
207 if( s != VIDDEC2_EOK ) {
208 ERROR("Unknown version Error = %d:: buffer = %p size = %d", s, buffer, size);
209 }
210}
211
212#endif
183 213
184// VIDDEC2_create wrapper, to display version string in the trace. 214// VIDDEC2_create wrapper, to display version string in the trace.
185static VIDDEC2_Handle viddec2_create(Engine_Handle engine, String name, VIDDEC2_Params *params) 215static VIDDEC2_Handle viddec2_create(Engine_Handle engine, String name, VIDDEC2_Params *params)
186{ 216{
217#ifdef UNIVERSAL_COPY_EXAMPLE
187 UNIVERSAL_Handle h; 218 UNIVERSAL_Handle h;
188 219
189 DEBUG(">> engine=%08x, name=%s, params=%p", engine, name, params); 220 DEBUG(">> engine=%08x, name=%s, params=%p", engine, name, params);
190 221
191 h = UNIVERSAL_create(engine, name, (IUNIVERSAL_Params*)params); 222 h = UNIVERSAL_create(engine, name, (IUNIVERSAL_Params*)params);
192 223 if(h){
193 get_universal_version(h, version_buffer, VERSION_SIZE); 224 get_universal_version(h, version_buffer, VERSION_SIZE);
194 225 INFO("Created codec %s: version %s", name, version_buffer);
195 INFO("Created codec %s: version %s", name, version_buffer); 226 }
196 227#else
228 VIDDEC2_Handle h;
229
230 h = VIDDEC2_create(engine, name, params);
231
232 if( h ) {
233 get_viddec2_version(h, version_buffer, VERSION_SIZE);
234 INFO("Created viddec2 %s: version %s", name, version_buffer);
235 }
236#endif
197 return ((VIDDEC2_Handle)h); 237 return ((VIDDEC2_Handle)h);
198} 238}
199 239
@@ -204,69 +244,74 @@ static int viddec2_reloc(VIDDEC2_Handle handle, uint8_t *ptr, uint32_t len)
204 244
205} 245}
206 246
207static int viddec2_control(VIDDEC2_Handle handle, VIDDEC2_Cmd id, VIDDEC2_DynamicParams *dynParams, 247static int viddec2_control(VIDDEC2_Handle handle, VIDDEC2_Cmd id, VIDDEC2_DynamicParams *dynParams,
208 VIDDEC2_Status *status ) 248 VIDDEC2_Status *status )
209{ 249{
210 int ret = 0; 250 int ret = 0;
251#ifdef UNIVERSAL_COPY_EXAMPLE
211 UNIVERSAL_DynamicParams udynParam; 252 UNIVERSAL_DynamicParams udynParam;
212 UNIVERSAL_Status ustatus; 253 UNIVERSAL_Status ustatus;
213 254
214 udynParam.size = sizeof(UNIVERSAL_DynamicParams); 255 udynParam.size = sizeof(UNIVERSAL_DynamicParams);
215 ustatus.size = sizeof(UNIVERSAL_Status); 256 ustatus.size = sizeof(UNIVERSAL_Status);
216 //System_printf("command id is %d\n", id);
217 257
218 if(id == XDM_GETVERSION){ 258 if(id == XDM_GETVERSION){
219 ustatus.data.numBufs = 1; 259 ustatus.data.numBufs = 1;
220 ustatus.data.descs[0].buf = status->data.buf; 260 ustatus.data.descs[0].buf = status->data.buf;
221 ustatus.data.descs[0].bufSize = status->data.bufSize; 261 ustatus.data.descs[0].bufSize = status->data.bufSize;
222 } 262 }
223 263
224 ret = UNIVERSAL_control((UNIVERSAL_Handle)handle, (UNIVERSAL_Cmd)id, 264 ret = UNIVERSAL_control((UNIVERSAL_Handle)handle, (UNIVERSAL_Cmd)id,
225 &udynParam, &ustatus); 265 &udynParam, &ustatus);
226 266
227 /*universal copy supports only XDM_GETVERSION cmd id */ 267 /*universal copy supports only XDM_GETVERSION cmd id */
228 /*This is to return success to VIDDEC2 application in case of other cmd ids */ 268 /*This is to return success to VIDDEC2 application in case of other cmd ids */
229 if(ret == IUNIVERSAL_EFAIL)ret = IUNIVERSAL_EOK; 269 if(ret == IUNIVERSAL_EFAIL)ret = IUNIVERSAL_EOK;
230 270#else
271 ret = VIDDEC2_control(handle, id, dynParams, status);
272#endif
231 return ret; 273 return ret;
232} 274}
233 275
234static int viddec2_process(VIDDEC2_Handle handle, XDM1_BufDesc *inBufs, 276static int viddec2_process(VIDDEC2_Handle handle, XDM1_BufDesc *inBufs,
235 XDM_BufDesc *outBufs, VIDDEC2_InArgs *inArgs, VIDDEC2_OutArgs *outArgs ) 277 XDM_BufDesc *outBufs, VIDDEC2_InArgs *inArgs, VIDDEC2_OutArgs *outArgs )
236{ 278{
237 int ret = 0; 279 int ret = 0;
280#ifdef UNIVERSAL_COPY_EXAMPLE
238 XDM1_BufDesc inBuf, outBuf; 281 XDM1_BufDesc inBuf, outBuf;
239 UNIVERSAL_InArgs inArg; 282 UNIVERSAL_InArgs inArg;
240 UNIVERSAL_OutArgs outArg; 283 UNIVERSAL_OutArgs outArg;
241 284
242 inArg.size = sizeof(UNIVERSAL_InArgs); 285 inArg.size = sizeof(UNIVERSAL_InArgs);
243 outArg.size = sizeof(UNIVERSAL_OutArgs); 286 outArg.size = sizeof(UNIVERSAL_OutArgs);
244 outArg.extendedError = 0; 287 outArg.extendedError = 0;
245 //System_printf("Before VIDDEC2 process\n"); 288
246
247 //System_printf("outptr = 0x%x, size = %d\n",outBufs->bufs[0],outBufs->bufSizes[0]);
248 inBuf.numBufs = 1; 289 inBuf.numBufs = 1;
249 outBuf.numBufs = 1; 290 outBuf.numBufs = 1;
250 inBuf.descs[0].buf = inBufs->descs[0].buf; 291 inBuf.descs[0].buf = inBufs->descs[0].buf;
251 inBuf.descs[0].bufSize = inBufs->descs[0].bufSize; 292 inBuf.descs[0].bufSize = inBufs->descs[0].bufSize;
252 293
253 outBuf.descs[0].buf = outBufs->bufs[0]; 294 outBuf.descs[0].buf = outBufs->bufs[0];
254 outBuf.descs[0].bufSize = outBufs->bufSizes[0]; 295 outBuf.descs[0].bufSize = outBufs->bufSizes[0];
255
256 ret = UNIVERSAL_process((UNIVERSAL_Handle)handle, &inBuf, &outBuf, NULL,
257 &inArg, &outArg);
258 296
259 //System_printf("After VIDDEC2 process\n"); 297 ret = UNIVERSAL_process((UNIVERSAL_Handle)handle, &inBuf, &outBuf, NULL,
260 return ret; 298 &inArg, &outArg);
299#else
300 ret = VIDDEC2_process(handle, inBufs, outBufs, inArgs, outArgs);
301#endif
302 return ret;
261} 303}
262 304
263static int viddec2_delete(VIDDEC2_Handle handle) 305static int viddec2_delete(VIDDEC2_Handle handle)
264{ 306{
265 //System_printf("Deleting VIDDEC2\n"); 307#ifdef UNIVERSAL_COPY_EXAMPLE
266 UNIVERSAL_delete((UNIVERSAL_Handle)handle); 308 UNIVERSAL_delete((UNIVERSAL_Handle)handle);
309#else
310 VIDDEC2_delete(handle);
311#endif
267 return 0; 312 return 0;
268} 313}
269 314
270 315
271/* 316/*
272 * RPC message handlers 317 * RPC message handlers
@@ -281,10 +326,10 @@ static int connect(void *msg)
281 326
282 FCSettings_init(); 327 FCSettings_init();
283 Diags_setMask(FCSETTINGS_MODNAME "+12345678LEXAIZFS"); 328 Diags_setMask(FCSETTINGS_MODNAME "+12345678LEXAIZFS");
284 329
285 CESettings_init(); 330 CESettings_init();
286 Diags_setMask(CESETTINGS_MODNAME "+12345678LEXAIZFS"); 331 Diags_setMask(CESETTINGS_MODNAME "+12345678LEXAIZFS");
287 332
288 /* 333 /*
289 * Enable use of runtime Diags_setMask per module: 334 * Enable use of runtime Diags_setMask per module:
290 * 335 *
@@ -293,7 +338,7 @@ static int connect(void *msg)
293 Diags_setMask("ti.ipc.rpmsg.RPMessage=EXLFS"); 338 Diags_setMask("ti.ipc.rpmsg.RPMessage=EXLFS");
294 Diags_setMask("ti.ipc.rpmsg.VirtQueue=EXLFS"); 339 Diags_setMask("ti.ipc.rpmsg.VirtQueue=EXLFS");
295 } 340 }
296 341
297 CERuntime_init(); 342 CERuntime_init();
298 343
299 if( !suspend_initialised ) { 344 if( !suspend_initialised ) {
@@ -318,7 +363,7 @@ static Int32 engine_open(UInt32 size, UInt32 *data)
318 dce_engine_open *engine_open_msg = (dce_engine_open *)payload[0].data; 363 dce_engine_open *engine_open_msg = (dce_engine_open *)payload[0].data;
319 Engine_Handle eng_handle = NULL; 364 Engine_Handle eng_handle = NULL;
320 Uint32 num_params = MmRpc_NUM_PARAMETERS(size); 365 Uint32 num_params = MmRpc_NUM_PARAMETERS(size);
321 366
322 DEBUG(">> engine_open"); 367 DEBUG(">> engine_open");
323 if( num_params != 1 ) { 368 if( num_params != 1 ) {
324 ERROR("Invalid number of params sent"); 369 ERROR("Invalid number of params sent");
@@ -326,10 +371,10 @@ static Int32 engine_open(UInt32 size, UInt32 *data)
326 } 371 }
327 372
328 dce_inv(engine_open_msg); 373 dce_inv(engine_open_msg);
329 374
330 eng_handle = Engine_open(engine_open_msg->name, engine_open_msg->engine_attrs, &engine_open_msg->error_code); 375 eng_handle = Engine_open(engine_open_msg->name, engine_open_msg->engine_attrs, &engine_open_msg->error_code);
331 DEBUG("<< engine=%08x, ec=%d", eng_handle, engine_open_msg->error_code); 376 DEBUG("<< engine=%08x, ec=%d", eng_handle, engine_open_msg->error_code);
332 377
333 dce_clean(engine_open_msg); 378 dce_clean(engine_open_msg);
334 379
335 return ((Int32)eng_handle); 380 return ((Int32)eng_handle);
@@ -377,7 +422,7 @@ static Int32 codec_create(UInt32 size, UInt32 *data)
377 ERROR("invalid number of params sent"); 422 ERROR("invalid number of params sent");
378 return (-1); 423 return (-1);
379 } 424 }
380 425
381 if(codec_id != OMAP_DCE_VIDDEC2){ 426 if(codec_id != OMAP_DCE_VIDDEC2){
382 ERROR("invalid codec id sent"); 427 ERROR("invalid codec id sent");
383 return (-1); 428 return (-1);
@@ -386,7 +431,7 @@ static Int32 codec_create(UInt32 size, UInt32 *data)
386 dce_inv(static_params); 431 dce_inv(static_params);
387 432
388 codec_handle = (void *)codec_fxns[codec_id].create(engine, codec_name, static_params); 433 codec_handle = (void *)codec_fxns[codec_id].create(engine, codec_name, static_params);
389 434
390 DEBUG("<< codec_handle=%08x", codec_handle); 435 DEBUG("<< codec_handle=%08x", codec_handle);
391 436
392 dce_clean(static_params); 437 dce_clean(static_params);
@@ -420,7 +465,7 @@ static int codec_control(UInt32 size, UInt32 *data)
420 ERROR("invalid number of params sent"); 465 ERROR("invalid number of params sent");
421 return (-1); 466 return (-1);
422 } 467 }
423 468
424 if(codec_id != OMAP_DCE_VIDDEC2){ 469 if(codec_id != OMAP_DCE_VIDDEC2){
425 ERROR("invalid codec id sent"); 470 ERROR("invalid codec id sent");
426 return (-1); 471 return (-1);
@@ -430,7 +475,7 @@ static int codec_control(UInt32 size, UInt32 *data)
430 dce_inv(status); 475 dce_inv(status);
431 476
432 ret = (uint32_t) codec_fxns[codec_id].control(codec_handle, cmd_id, dyn_params, status); 477 ret = (uint32_t) codec_fxns[codec_id].control(codec_handle, cmd_id, dyn_params, status);
433 478
434 DEBUG("<< result=%d", ret); 479 DEBUG("<< result=%d", ret);
435 480
436 dce_clean(dyn_params); 481 dce_clean(dyn_params);
@@ -459,18 +504,18 @@ static int codec_get_version(UInt32 size, UInt32 *data)
459 ERROR("invalid number of params sent"); 504 ERROR("invalid number of params sent");
460 return (-1); 505 return (-1);
461 } 506 }
462 507
463 if(codec_id != OMAP_DCE_VIDDEC2){ 508 if(codec_id != OMAP_DCE_VIDDEC2){
464 ERROR("invalid codec id sent"); 509 ERROR("invalid codec id sent");
465 return (-1); 510 return (-1);
466 } 511 }
467 512
468 version_buf = (void *)(H2P((MemHeader *)((IVIDDEC2_Status *)status)->data.buf)); 513 version_buf = (void *)(H2P((MemHeader *)((IVIDDEC2_Status *)status)->data.buf));
469 514
470 dce_inv(dyn_params); 515 dce_inv(dyn_params);
471 dce_inv(status); 516 dce_inv(status);
472 dce_inv(version_buf); 517 dce_inv(version_buf);
473 518
474 ret = (uint32_t) codec_fxns[codec_id].control(codec_handle, XDM_GETVERSION, dyn_params, status); 519 ret = (uint32_t) codec_fxns[codec_id].control(codec_handle, XDM_GETVERSION, dyn_params, status);
475 520
476 DEBUG("<< result=%d", ret); 521 DEBUG("<< result=%d", ret);
@@ -562,7 +607,7 @@ static int codec_process(UInt32 size, UInt32 *data)
562 void *outBufptr = (void *)payload[6].data; 607 void *outBufptr = (void *)payload[6].data;
563 Int32 ret = 0; 608 Int32 ret = 0;
564 void *outBufSize = NULL; 609 void *outBufSize = NULL;
565 610
566 DEBUG(">> codec_process"); 611 DEBUG(">> codec_process");
567 612
568 if( num_params != 7 ) { 613 if( num_params != 7 ) {
@@ -574,7 +619,7 @@ static int codec_process(UInt32 size, UInt32 *data)
574 ERROR("invalid codec id sent"); 619 ERROR("invalid codec id sent");
575 return (-1); 620 return (-1);
576 } 621 }
577 622
578 outBufSize = (void *)(H2P((MemHeader *)((XDM_BufDesc *)outBufs)->bufSizes)); 623 outBufSize = (void *)(H2P((MemHeader *)((XDM_BufDesc *)outBufs)->bufSizes));
579 624
580 dce_inv(inBufs); 625 dce_inv(inBufs);
@@ -583,12 +628,12 @@ static int codec_process(UInt32 size, UInt32 *data)
583 dce_inv(outArgs); 628 dce_inv(outArgs);
584 dce_inv(outBufptr); 629 dce_inv(outBufptr);
585 dce_inv(outBufSize); 630 dce_inv(outBufSize);
586 631
587 DEBUG(">> codec=%p, inBufs=%p, outBufs=%p, inArgs=%p, outArgs=%p codec_id=%d", 632 DEBUG(">> codec=%p, inBufs=%p, outBufs=%p, inArgs=%p, outArgs=%p codec_id=%d",
588 codec, inBufs, outBufs, inArgs, outArgs, codec_id); 633 codec, inBufs, outBufs, inArgs, outArgs, codec_id);
589 634
590 ret = codec_fxns[codec_id].process((void *)codec, inBufs, outBufs, inArgs, outArgs); 635 ret = codec_fxns[codec_id].process((void *)codec, inBufs, outBufs, inArgs, outArgs);
591 636
592 637
593 DEBUG("<< ret=%d extendedError=%08x", ret, ((VIDDEC3_OutArgs *)outArgs)->extendedError); 638 DEBUG("<< ret=%d extendedError=%08x", ret, ((VIDDEC3_OutArgs *)outArgs)->extendedError);
594 639
@@ -623,7 +668,7 @@ static int codec_delete(UInt32 size, UInt32 *data)
623 ERROR("invalid number of params sent"); 668 ERROR("invalid number of params sent");
624 return (-1); 669 return (-1);
625 } 670 }
626 671
627 if(codec_id != OMAP_DCE_VIDDEC2){ 672 if(codec_id != OMAP_DCE_VIDDEC2){
628 ERROR("invalid codec id sent"); 673 ERROR("invalid codec id sent");
629 return (-1); 674 return (-1);
@@ -739,7 +784,7 @@ static void dce_main(uint32_t arg0, uint32_t arg1)
739{ 784{
740 int err = 0; 785 int err = 0;
741 dce_connect dce_connect_msg; 786 dce_connect dce_connect_msg;
742 787
743 err = MmServiceMgr_init(); // MmServiceMgr_init() will always return MmServiceMgr_S_SUCCESS. 788 err = MmServiceMgr_init(); // MmServiceMgr_init() will always return MmServiceMgr_S_SUCCESS.
744 789
745 // setup the RCM Server create params 790 // setup the RCM Server create params
@@ -751,7 +796,7 @@ static void dce_main(uint32_t arg0, uint32_t arg1)
751 796
752 // Get the Service Manager handle 797 // Get the Service Manager handle
753 err = MmServiceMgr_register(SERVER_NAME, &rpc_Params, &dce_fxnSigTab, dce_SrvDelNotification); 798 err = MmServiceMgr_register(SERVER_NAME, &rpc_Params, &dce_fxnSigTab, dce_SrvDelNotification);
754 799
755 if( err < 0 ) { 800 if( err < 0 ) {
756 DEBUG("failed to start " SERVER_NAME " \n"); 801 DEBUG("failed to start " SERVER_NAME " \n");
757 //err = -1; 802 //err = -1;
@@ -796,7 +841,7 @@ Bool dce_init(void)
796 params.instance->name = "dce-server"; 841 params.instance->name = "dce-server";
797 params.priority = Thread_Priority_ABOVE_NORMAL; 842 params.priority = Thread_Priority_ABOVE_NORMAL;
798 Task_create(dce_main, &params, NULL); 843 Task_create(dce_main, &params, NULL);
799 844
800 return (TRUE); 845 return (TRUE);
801} 846}
802 847