File indexing completed on 2025-05-11 08:24:53
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023
0024
0025
0026
0027
0028
0029
0030
0031
0032
0033
0034
0035
0036
0037
0038
0039
0040
0041
0042
0043
0044
0045
0046
0047
0048
0049
0050
0051 #ifdef HAVE_CONFIG_H
0052 #include "config.h"
0053 #endif
0054
0055 #include <rtems.h>
0056 #include <rtems/test-scheduler.h>
0057
0058 #include "tx-support.h"
0059
0060 #include <rtems/test.h>
0061
0062
0063
0064
0065
0066
0067
0068
0069
0070 typedef enum {
0071 RtemsTaskReqStart_Pre_Id_Invalid,
0072 RtemsTaskReqStart_Pre_Id_Task,
0073 RtemsTaskReqStart_Pre_Id_NA
0074 } RtemsTaskReqStart_Pre_Id;
0075
0076 typedef enum {
0077 RtemsTaskReqStart_Pre_EntryPoint_Valid,
0078 RtemsTaskReqStart_Pre_EntryPoint_Null,
0079 RtemsTaskReqStart_Pre_EntryPoint_NA
0080 } RtemsTaskReqStart_Pre_EntryPoint;
0081
0082 typedef enum {
0083 RtemsTaskReqStart_Pre_Argument_Pointer,
0084 RtemsTaskReqStart_Pre_Argument_Number,
0085 RtemsTaskReqStart_Pre_Argument_NA
0086 } RtemsTaskReqStart_Pre_Argument;
0087
0088 typedef enum {
0089 RtemsTaskReqStart_Pre_Dormant_Yes,
0090 RtemsTaskReqStart_Pre_Dormant_No,
0091 RtemsTaskReqStart_Pre_Dormant_NA
0092 } RtemsTaskReqStart_Pre_Dormant;
0093
0094 typedef enum {
0095 RtemsTaskReqStart_Pre_Suspended_Yes,
0096 RtemsTaskReqStart_Pre_Suspended_No,
0097 RtemsTaskReqStart_Pre_Suspended_NA
0098 } RtemsTaskReqStart_Pre_Suspended;
0099
0100 typedef enum {
0101 RtemsTaskReqStart_Post_Status_Ok,
0102 RtemsTaskReqStart_Post_Status_InvAddr,
0103 RtemsTaskReqStart_Post_Status_InvId,
0104 RtemsTaskReqStart_Post_Status_IncStat,
0105 RtemsTaskReqStart_Post_Status_NA
0106 } RtemsTaskReqStart_Post_Status;
0107
0108 typedef enum {
0109 RtemsTaskReqStart_Post_EntryPoint_Set,
0110 RtemsTaskReqStart_Post_EntryPoint_Nop,
0111 RtemsTaskReqStart_Post_EntryPoint_NA
0112 } RtemsTaskReqStart_Post_EntryPoint;
0113
0114 typedef enum {
0115 RtemsTaskReqStart_Post_Argument_Set,
0116 RtemsTaskReqStart_Post_Argument_Nop,
0117 RtemsTaskReqStart_Post_Argument_NA
0118 } RtemsTaskReqStart_Post_Argument;
0119
0120 typedef enum {
0121 RtemsTaskReqStart_Post_Unblock_Yes,
0122 RtemsTaskReqStart_Post_Unblock_Nop,
0123 RtemsTaskReqStart_Post_Unblock_NA
0124 } RtemsTaskReqStart_Post_Unblock;
0125
0126 typedef enum {
0127 RtemsTaskReqStart_Post_StartExtensions_Yes,
0128 RtemsTaskReqStart_Post_StartExtensions_Nop,
0129 RtemsTaskReqStart_Post_StartExtensions_NA
0130 } RtemsTaskReqStart_Post_StartExtensions;
0131
0132 typedef struct {
0133 uint32_t Skip : 1;
0134 uint32_t Pre_Id_NA : 1;
0135 uint32_t Pre_EntryPoint_NA : 1;
0136 uint32_t Pre_Argument_NA : 1;
0137 uint32_t Pre_Dormant_NA : 1;
0138 uint32_t Pre_Suspended_NA : 1;
0139 uint32_t Post_Status : 3;
0140 uint32_t Post_EntryPoint : 2;
0141 uint32_t Post_Argument : 2;
0142 uint32_t Post_Unblock : 2;
0143 uint32_t Post_StartExtensions : 2;
0144 } RtemsTaskReqStart_Entry;
0145
0146
0147
0148
0149 typedef struct {
0150
0151
0152
0153 T_scheduler_log_2 scheduler_log;
0154
0155
0156
0157
0158 rtems_id worker_id;
0159
0160
0161
0162
0163 rtems_id extension_id;
0164
0165
0166
0167
0168 uint32_t start_extension_calls;
0169
0170
0171
0172
0173 rtems_task_argument actual_argument;
0174
0175
0176
0177
0178 uint32_t counter;
0179
0180
0181
0182
0183
0184 bool start;
0185
0186
0187
0188
0189
0190 bool suspend;
0191
0192
0193
0194
0195
0196 rtems_status_code status;
0197
0198
0199
0200
0201 rtems_id id;
0202
0203
0204
0205
0206 rtems_task_entry entry_point;
0207
0208
0209
0210
0211 rtems_task_argument argument;
0212
0213 struct {
0214
0215
0216
0217
0218 size_t pci[ 5 ];
0219
0220
0221
0222
0223 size_t pcs[ 5 ];
0224
0225
0226
0227
0228 bool in_action_loop;
0229
0230
0231
0232
0233 size_t index;
0234
0235
0236
0237
0238 RtemsTaskReqStart_Entry entry;
0239
0240
0241
0242
0243
0244 bool skip;
0245 } Map;
0246 } RtemsTaskReqStart_Context;
0247
0248 static RtemsTaskReqStart_Context
0249 RtemsTaskReqStart_Instance;
0250
0251 static const char * const RtemsTaskReqStart_PreDesc_Id[] = {
0252 "Invalid",
0253 "Task",
0254 "NA"
0255 };
0256
0257 static const char * const RtemsTaskReqStart_PreDesc_EntryPoint[] = {
0258 "Valid",
0259 "Null",
0260 "NA"
0261 };
0262
0263 static const char * const RtemsTaskReqStart_PreDesc_Argument[] = {
0264 "Pointer",
0265 "Number",
0266 "NA"
0267 };
0268
0269 static const char * const RtemsTaskReqStart_PreDesc_Dormant[] = {
0270 "Yes",
0271 "No",
0272 "NA"
0273 };
0274
0275 static const char * const RtemsTaskReqStart_PreDesc_Suspended[] = {
0276 "Yes",
0277 "No",
0278 "NA"
0279 };
0280
0281 static const char * const * const RtemsTaskReqStart_PreDesc[] = {
0282 RtemsTaskReqStart_PreDesc_Id,
0283 RtemsTaskReqStart_PreDesc_EntryPoint,
0284 RtemsTaskReqStart_PreDesc_Argument,
0285 RtemsTaskReqStart_PreDesc_Dormant,
0286 RtemsTaskReqStart_PreDesc_Suspended,
0287 NULL
0288 };
0289
0290 typedef RtemsTaskReqStart_Context Context;
0291
0292 static void WorkerA( rtems_task_argument arg )
0293 {
0294 Context *ctx;
0295
0296 ctx = &RtemsTaskReqStart_Instance;
0297
0298 while ( true ) {
0299 ctx->actual_argument += arg;
0300 ++ctx->counter;
0301 Yield();
0302 }
0303 }
0304
0305 static void WorkerB( rtems_task_argument arg )
0306 {
0307 Context *ctx;
0308
0309 ctx = &RtemsTaskReqStart_Instance;
0310
0311 while ( true ) {
0312 ctx->actual_argument += arg;
0313 Yield();
0314 }
0315 }
0316
0317 static void ThreadStart( rtems_tcb *executing, rtems_tcb *started )
0318 {
0319 (void) executing;
0320 (void) started;
0321
0322 ++RtemsTaskReqStart_Instance.start_extension_calls;
0323 }
0324
0325 static const rtems_extensions_table extensions = {
0326 .thread_start = ThreadStart
0327 };
0328
0329 static void RtemsTaskReqStart_Pre_Id_Prepare(
0330 RtemsTaskReqStart_Context *ctx,
0331 RtemsTaskReqStart_Pre_Id state
0332 )
0333 {
0334 switch ( state ) {
0335 case RtemsTaskReqStart_Pre_Id_Invalid: {
0336
0337
0338
0339 ctx->id = INVALID_ID;
0340 break;
0341 }
0342
0343 case RtemsTaskReqStart_Pre_Id_Task: {
0344
0345
0346
0347 ctx->id = ctx->worker_id;
0348 break;
0349 }
0350
0351 case RtemsTaskReqStart_Pre_Id_NA:
0352 break;
0353 }
0354 }
0355
0356 static void RtemsTaskReqStart_Pre_EntryPoint_Prepare(
0357 RtemsTaskReqStart_Context *ctx,
0358 RtemsTaskReqStart_Pre_EntryPoint state
0359 )
0360 {
0361 switch ( state ) {
0362 case RtemsTaskReqStart_Pre_EntryPoint_Valid: {
0363
0364
0365
0366
0367 ctx->entry_point = WorkerA;
0368 break;
0369 }
0370
0371 case RtemsTaskReqStart_Pre_EntryPoint_Null: {
0372
0373
0374
0375
0376 ctx->entry_point = NULL;
0377 break;
0378 }
0379
0380 case RtemsTaskReqStart_Pre_EntryPoint_NA:
0381 break;
0382 }
0383 }
0384
0385 static void RtemsTaskReqStart_Pre_Argument_Prepare(
0386 RtemsTaskReqStart_Context *ctx,
0387 RtemsTaskReqStart_Pre_Argument state
0388 )
0389 {
0390 switch ( state ) {
0391 case RtemsTaskReqStart_Pre_Argument_Pointer: {
0392
0393
0394
0395
0396 ctx->argument = (rtems_task_argument) ctx;
0397 break;
0398 }
0399
0400 case RtemsTaskReqStart_Pre_Argument_Number: {
0401
0402
0403
0404
0405 ctx->argument = UINT32_C( 0x87654321 );
0406 break;
0407 }
0408
0409 case RtemsTaskReqStart_Pre_Argument_NA:
0410 break;
0411 }
0412 }
0413
0414 static void RtemsTaskReqStart_Pre_Dormant_Prepare(
0415 RtemsTaskReqStart_Context *ctx,
0416 RtemsTaskReqStart_Pre_Dormant state
0417 )
0418 {
0419 switch ( state ) {
0420 case RtemsTaskReqStart_Pre_Dormant_Yes: {
0421
0422
0423
0424 ctx->start = false;
0425 break;
0426 }
0427
0428 case RtemsTaskReqStart_Pre_Dormant_No: {
0429
0430
0431
0432 ctx->start = true;
0433 break;
0434 }
0435
0436 case RtemsTaskReqStart_Pre_Dormant_NA:
0437 break;
0438 }
0439 }
0440
0441 static void RtemsTaskReqStart_Pre_Suspended_Prepare(
0442 RtemsTaskReqStart_Context *ctx,
0443 RtemsTaskReqStart_Pre_Suspended state
0444 )
0445 {
0446 switch ( state ) {
0447 case RtemsTaskReqStart_Pre_Suspended_Yes: {
0448
0449
0450
0451 ctx->suspend = true;
0452 break;
0453 }
0454
0455 case RtemsTaskReqStart_Pre_Suspended_No: {
0456
0457
0458
0459 ctx->suspend = false;
0460 break;
0461 }
0462
0463 case RtemsTaskReqStart_Pre_Suspended_NA:
0464 break;
0465 }
0466 }
0467
0468 static void RtemsTaskReqStart_Post_Status_Check(
0469 RtemsTaskReqStart_Context *ctx,
0470 RtemsTaskReqStart_Post_Status state
0471 )
0472 {
0473 switch ( state ) {
0474 case RtemsTaskReqStart_Post_Status_Ok: {
0475
0476
0477
0478 T_rsc_success( ctx->status );
0479 break;
0480 }
0481
0482 case RtemsTaskReqStart_Post_Status_InvAddr: {
0483
0484
0485
0486
0487 T_rsc( ctx->status, RTEMS_INVALID_ADDRESS );
0488 break;
0489 }
0490
0491 case RtemsTaskReqStart_Post_Status_InvId: {
0492
0493
0494
0495 T_rsc( ctx->status, RTEMS_INVALID_ID );
0496 break;
0497 }
0498
0499 case RtemsTaskReqStart_Post_Status_IncStat: {
0500
0501
0502
0503
0504 T_rsc( ctx->status, RTEMS_INCORRECT_STATE );
0505 break;
0506 }
0507
0508 case RtemsTaskReqStart_Post_Status_NA:
0509 break;
0510 }
0511 }
0512
0513 static void RtemsTaskReqStart_Post_EntryPoint_Check(
0514 RtemsTaskReqStart_Context *ctx,
0515 RtemsTaskReqStart_Post_EntryPoint state
0516 )
0517 {
0518 switch ( state ) {
0519 case RtemsTaskReqStart_Post_EntryPoint_Set: {
0520
0521
0522
0523
0524
0525 T_eq_u32( ctx->counter, 1 );
0526 break;
0527 }
0528
0529 case RtemsTaskReqStart_Post_EntryPoint_Nop: {
0530
0531
0532
0533
0534 T_eq_u32( ctx->counter, 0 );
0535 break;
0536 }
0537
0538 case RtemsTaskReqStart_Post_EntryPoint_NA:
0539 break;
0540 }
0541 }
0542
0543 static void RtemsTaskReqStart_Post_Argument_Check(
0544 RtemsTaskReqStart_Context *ctx,
0545 RtemsTaskReqStart_Post_Argument state
0546 )
0547 {
0548 switch ( state ) {
0549 case RtemsTaskReqStart_Post_Argument_Set: {
0550
0551
0552
0553
0554
0555 T_eq_u32( ctx->actual_argument, ctx->argument );
0556 break;
0557 }
0558
0559 case RtemsTaskReqStart_Post_Argument_Nop: {
0560
0561
0562
0563
0564 T_eq_u32( ctx->actual_argument, 0 );
0565 break;
0566 }
0567
0568 case RtemsTaskReqStart_Post_Argument_NA:
0569 break;
0570 }
0571 }
0572
0573 static void RtemsTaskReqStart_Post_Unblock_Check(
0574 RtemsTaskReqStart_Context *ctx,
0575 RtemsTaskReqStart_Post_Unblock state
0576 )
0577 {
0578 switch ( state ) {
0579 case RtemsTaskReqStart_Post_Unblock_Yes: {
0580
0581
0582
0583
0584 T_eq_sz( ctx->scheduler_log.header.recorded, 1 );
0585 T_eq_int(
0586 ctx->scheduler_log.events[ 0 ].operation,
0587 T_SCHEDULER_UNBLOCK
0588 );
0589 break;
0590 }
0591
0592 case RtemsTaskReqStart_Post_Unblock_Nop: {
0593
0594
0595
0596 T_eq_sz( ctx->scheduler_log.header.recorded, 0 );
0597 break;
0598 }
0599
0600 case RtemsTaskReqStart_Post_Unblock_NA:
0601 break;
0602 }
0603 }
0604
0605 static void RtemsTaskReqStart_Post_StartExtensions_Check(
0606 RtemsTaskReqStart_Context *ctx,
0607 RtemsTaskReqStart_Post_StartExtensions state
0608 )
0609 {
0610 switch ( state ) {
0611 case RtemsTaskReqStart_Post_StartExtensions_Yes: {
0612
0613
0614
0615
0616 T_eq_u32( ctx->start_extension_calls, 1 );
0617 break;
0618 }
0619
0620 case RtemsTaskReqStart_Post_StartExtensions_Nop: {
0621
0622
0623
0624
0625 T_eq_u32( ctx->start_extension_calls, 0 );
0626 break;
0627 }
0628
0629 case RtemsTaskReqStart_Post_StartExtensions_NA:
0630 break;
0631 }
0632 }
0633
0634 static void RtemsTaskReqStart_Setup( RtemsTaskReqStart_Context *ctx )
0635 {
0636 rtems_status_code sc;
0637
0638 sc = rtems_extension_create(
0639 rtems_build_name( 'T', 'E', 'S', 'T' ),
0640 &extensions,
0641 &ctx->extension_id
0642 );
0643 T_rsc_success( sc );
0644 }
0645
0646 static void RtemsTaskReqStart_Setup_Wrap( void *arg )
0647 {
0648 RtemsTaskReqStart_Context *ctx;
0649
0650 ctx = arg;
0651 ctx->Map.in_action_loop = false;
0652 RtemsTaskReqStart_Setup( ctx );
0653 }
0654
0655 static void RtemsTaskReqStart_Teardown( RtemsTaskReqStart_Context *ctx )
0656 {
0657 rtems_status_code sc;
0658
0659 sc = rtems_extension_delete( ctx->extension_id );
0660 T_rsc_success( sc );
0661 }
0662
0663 static void RtemsTaskReqStart_Teardown_Wrap( void *arg )
0664 {
0665 RtemsTaskReqStart_Context *ctx;
0666
0667 ctx = arg;
0668 ctx->Map.in_action_loop = false;
0669 RtemsTaskReqStart_Teardown( ctx );
0670 }
0671
0672 static void RtemsTaskReqStart_Prepare( RtemsTaskReqStart_Context *ctx )
0673 {
0674 ctx->actual_argument = 0;
0675 ctx->counter = 0;
0676 ctx->worker_id = CreateTask( "WORK", PRIO_DEFAULT );
0677 }
0678
0679 static void RtemsTaskReqStart_Action( RtemsTaskReqStart_Context *ctx )
0680 {
0681 T_scheduler_log *log;
0682
0683 if ( ctx->start ) {
0684 StartTask( ctx->worker_id, WorkerB, 0 );
0685 }
0686
0687 if ( ctx->suspend ) {
0688 SuspendTask( ctx->worker_id );
0689 }
0690
0691 ctx->start_extension_calls = 0;
0692
0693 log = T_scheduler_record_2( &ctx->scheduler_log );
0694 T_null( log );
0695
0696 ctx->status = rtems_task_start( ctx->id, ctx->entry_point, ctx->argument );
0697
0698 log = T_scheduler_record( NULL );
0699 T_eq_ptr( &log->header, &ctx->scheduler_log.header );
0700
0701 Yield();
0702 }
0703
0704 static void RtemsTaskReqStart_Cleanup( RtemsTaskReqStart_Context *ctx )
0705 {
0706 DeleteTask( ctx->worker_id );
0707 }
0708
0709 static const RtemsTaskReqStart_Entry
0710 RtemsTaskReqStart_Entries[] = {
0711 { 0, 0, 0, 0, 0, 0, RtemsTaskReqStart_Post_Status_InvAddr,
0712 RtemsTaskReqStart_Post_EntryPoint_Nop, RtemsTaskReqStart_Post_Argument_Nop,
0713 RtemsTaskReqStart_Post_Unblock_Nop,
0714 RtemsTaskReqStart_Post_StartExtensions_Nop },
0715 { 0, 0, 0, 0, 1, 1, RtemsTaskReqStart_Post_Status_InvId,
0716 RtemsTaskReqStart_Post_EntryPoint_Nop, RtemsTaskReqStart_Post_Argument_Nop,
0717 RtemsTaskReqStart_Post_Unblock_Nop,
0718 RtemsTaskReqStart_Post_StartExtensions_Nop },
0719 { 0, 0, 0, 0, 0, 0, RtemsTaskReqStart_Post_Status_Ok,
0720 RtemsTaskReqStart_Post_EntryPoint_Set, RtemsTaskReqStart_Post_Argument_Set,
0721 RtemsTaskReqStart_Post_Unblock_Yes,
0722 RtemsTaskReqStart_Post_StartExtensions_Yes },
0723 { 0, 0, 0, 0, 0, 0, RtemsTaskReqStart_Post_Status_IncStat,
0724 RtemsTaskReqStart_Post_EntryPoint_Nop, RtemsTaskReqStart_Post_Argument_Nop,
0725 RtemsTaskReqStart_Post_Unblock_Nop,
0726 RtemsTaskReqStart_Post_StartExtensions_Nop }
0727 };
0728
0729 static const uint8_t
0730 RtemsTaskReqStart_Map[] = {
0731 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 3, 3, 2, 2, 3, 3, 0, 0,
0732 0, 0, 0, 0, 0, 0
0733 };
0734
0735 static size_t RtemsTaskReqStart_Scope( void *arg, char *buf, size_t n )
0736 {
0737 RtemsTaskReqStart_Context *ctx;
0738
0739 ctx = arg;
0740
0741 if ( ctx->Map.in_action_loop ) {
0742 return T_get_scope( RtemsTaskReqStart_PreDesc, buf, n, ctx->Map.pcs );
0743 }
0744
0745 return 0;
0746 }
0747
0748 static T_fixture RtemsTaskReqStart_Fixture = {
0749 .setup = RtemsTaskReqStart_Setup_Wrap,
0750 .stop = NULL,
0751 .teardown = RtemsTaskReqStart_Teardown_Wrap,
0752 .scope = RtemsTaskReqStart_Scope,
0753 .initial_context = &RtemsTaskReqStart_Instance
0754 };
0755
0756 static inline RtemsTaskReqStart_Entry RtemsTaskReqStart_PopEntry(
0757 RtemsTaskReqStart_Context *ctx
0758 )
0759 {
0760 size_t index;
0761
0762 index = ctx->Map.index;
0763 ctx->Map.index = index + 1;
0764 return RtemsTaskReqStart_Entries[
0765 RtemsTaskReqStart_Map[ index ]
0766 ];
0767 }
0768
0769 static void RtemsTaskReqStart_SetPreConditionStates(
0770 RtemsTaskReqStart_Context *ctx
0771 )
0772 {
0773 ctx->Map.pcs[ 0 ] = ctx->Map.pci[ 0 ];
0774 ctx->Map.pcs[ 1 ] = ctx->Map.pci[ 1 ];
0775 ctx->Map.pcs[ 2 ] = ctx->Map.pci[ 2 ];
0776
0777 if ( ctx->Map.entry.Pre_Dormant_NA ) {
0778 ctx->Map.pcs[ 3 ] = RtemsTaskReqStart_Pre_Dormant_NA;
0779 } else {
0780 ctx->Map.pcs[ 3 ] = ctx->Map.pci[ 3 ];
0781 }
0782
0783 if ( ctx->Map.entry.Pre_Suspended_NA ) {
0784 ctx->Map.pcs[ 4 ] = RtemsTaskReqStart_Pre_Suspended_NA;
0785 } else {
0786 ctx->Map.pcs[ 4 ] = ctx->Map.pci[ 4 ];
0787 }
0788 }
0789
0790 static void RtemsTaskReqStart_TestVariant( RtemsTaskReqStart_Context *ctx )
0791 {
0792 RtemsTaskReqStart_Pre_Id_Prepare( ctx, ctx->Map.pcs[ 0 ] );
0793 RtemsTaskReqStart_Pre_EntryPoint_Prepare( ctx, ctx->Map.pcs[ 1 ] );
0794 RtemsTaskReqStart_Pre_Argument_Prepare( ctx, ctx->Map.pcs[ 2 ] );
0795 RtemsTaskReqStart_Pre_Dormant_Prepare( ctx, ctx->Map.pcs[ 3 ] );
0796 RtemsTaskReqStart_Pre_Suspended_Prepare( ctx, ctx->Map.pcs[ 4 ] );
0797 RtemsTaskReqStart_Action( ctx );
0798 RtemsTaskReqStart_Post_Status_Check( ctx, ctx->Map.entry.Post_Status );
0799 RtemsTaskReqStart_Post_EntryPoint_Check(
0800 ctx,
0801 ctx->Map.entry.Post_EntryPoint
0802 );
0803 RtemsTaskReqStart_Post_Argument_Check( ctx, ctx->Map.entry.Post_Argument );
0804 RtemsTaskReqStart_Post_Unblock_Check( ctx, ctx->Map.entry.Post_Unblock );
0805 RtemsTaskReqStart_Post_StartExtensions_Check(
0806 ctx,
0807 ctx->Map.entry.Post_StartExtensions
0808 );
0809 }
0810
0811
0812
0813
0814 T_TEST_CASE_FIXTURE( RtemsTaskReqStart, &RtemsTaskReqStart_Fixture )
0815 {
0816 RtemsTaskReqStart_Context *ctx;
0817
0818 ctx = T_fixture_context();
0819 ctx->Map.in_action_loop = true;
0820 ctx->Map.index = 0;
0821
0822 for (
0823 ctx->Map.pci[ 0 ] = RtemsTaskReqStart_Pre_Id_Invalid;
0824 ctx->Map.pci[ 0 ] < RtemsTaskReqStart_Pre_Id_NA;
0825 ++ctx->Map.pci[ 0 ]
0826 ) {
0827 for (
0828 ctx->Map.pci[ 1 ] = RtemsTaskReqStart_Pre_EntryPoint_Valid;
0829 ctx->Map.pci[ 1 ] < RtemsTaskReqStart_Pre_EntryPoint_NA;
0830 ++ctx->Map.pci[ 1 ]
0831 ) {
0832 for (
0833 ctx->Map.pci[ 2 ] = RtemsTaskReqStart_Pre_Argument_Pointer;
0834 ctx->Map.pci[ 2 ] < RtemsTaskReqStart_Pre_Argument_NA;
0835 ++ctx->Map.pci[ 2 ]
0836 ) {
0837 for (
0838 ctx->Map.pci[ 3 ] = RtemsTaskReqStart_Pre_Dormant_Yes;
0839 ctx->Map.pci[ 3 ] < RtemsTaskReqStart_Pre_Dormant_NA;
0840 ++ctx->Map.pci[ 3 ]
0841 ) {
0842 for (
0843 ctx->Map.pci[ 4 ] = RtemsTaskReqStart_Pre_Suspended_Yes;
0844 ctx->Map.pci[ 4 ] < RtemsTaskReqStart_Pre_Suspended_NA;
0845 ++ctx->Map.pci[ 4 ]
0846 ) {
0847 ctx->Map.entry = RtemsTaskReqStart_PopEntry( ctx );
0848 RtemsTaskReqStart_SetPreConditionStates( ctx );
0849 RtemsTaskReqStart_Prepare( ctx );
0850 RtemsTaskReqStart_TestVariant( ctx );
0851 RtemsTaskReqStart_Cleanup( ctx );
0852 }
0853 }
0854 }
0855 }
0856 }
0857 }
0858
0859