initial release
[apps/tidep0074.git] / ipu1 / MainIpu1.c
1 /*
2  * Copyright (c) 2016, Texas Instruments Incorporated
3  * All rights reserved.
4  *
5  * Redistribution and use in source and binary forms, with or without
6  * modification, are permitted provided that the following conditions
7  * are met:
8  *
9  * *  Redistributions of source code must retain the above copyright
10  *    notice, this list of conditions and the following disclaimer.
11  *
12  * *  Redistributions in binary form must reproduce the above copyright
13  *    notice, this list of conditions and the following disclaimer in the
14  *    documentation and/or other materials provided with the distribution.
15  *
16  * *  Neither the name of Texas Instruments Incorporated nor the names of
17  *    its contributors may be used to endorse or promote products derived
18  *    from this software without specific prior written permission.
19  *
20  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
21  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
22  * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
23  * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
24  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
25  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
26  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
27  * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
28  * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
29  * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
30  * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
31  */
33 /*
34  *  ======== main_Ipu1.c ========
35  *
36  */
38 /* xdctools header files */
39 #include <xdc/std.h>
40 #include <xdc/runtime/Diags.h>
41 #include <xdc/runtime/Error.h>
42 #include <xdc/runtime/Log.h>
43 #include <xdc/runtime/System.h>
45 /* package header files */
46 #include <ti/ipc/Ipc.h>
47 #include <ti/sysbios/BIOS.h>
48 #include <ti/sysbios/knl/Task.h>
50 /* local header files */
51 #include "Server.h"
52 #include "rsc_table_vayu_ipu.h"
54 /* private functions */
55 static Void smain(UArg arg0, UArg arg1);
57 extern int pru_icss();
59 /*
60  *  ======== main ========
61  */
62 Int main(Int argc, Char* argv[])
63 {
64     Error_Block     eb;
65     Task_Params     taskParams;
67     Log_print0(Diags_ENTRY, "--> main:");
69     /* must initialize the error block before using it */
70     Error_init(&eb);
72     /* create main thread (interrupts not enabled in main on BIOS) */
73     Task_Params_init(&taskParams);
74     taskParams.priority = 1;
75     taskParams.instance->name = "smain";
76     taskParams.arg0 = (UArg)argc;
77     taskParams.arg1 = (UArg)argv;
78     taskParams.stackSize = 0x1000;
79     Task_create(smain, &taskParams, &eb);
81     if (Error_check(&eb)) {
82         System_abort("main: failed to create application startup thread");
83     }
85     if(pru_icss()) {
86         System_abort("main: failed to initialize PRU_ICSS thread");
87     }
89     /* start scheduler, this never returns */
90     BIOS_start();
92     /* should never get here */
93     Log_print0(Diags_EXIT, "<-- main:");
94     return (0);
95 }
98 /*
99  *  ======== smain ========
100  */
101 Void smain(UArg arg0, UArg arg1)
103     Int                 status = 0;
104     Error_Block         eb;
105     Bool                running = TRUE;
107     Log_print0(Diags_ENTRY | Diags_INFO, "--> smain:");
109     Error_init(&eb);
111     /* initialize modules */
112     Server_init();
114     /* turn on Diags_INFO trace */
115     Diags_setMask("Server+F");
117     /* loop forever */
118     while (running) {
120         /* BEGIN server phase */
122         /* server setup phase */
123         status = Server_create();
125         if (status < 0) {
126             goto leave;
127         }
129         /* server execute phase */
130         status = Server_exec();
132         if (status < 0) {
133             goto leave;
134         }
136         /* server shutdown phase */
137         status = Server_delete();
139         if (status < 0) {
140             goto leave;
141         }
143         /* END server phase */
145     } /* while (running) */
147     /* finalize modules */
148     Server_exit();
150 leave:
151     Log_print1(Diags_EXIT, "<-- smain: %d", (IArg)status);
152     return;