blob: c7a71abad8c8b34fb9b8b8236f5c1bd43f5f6cb9 [file] [log] [blame]
rjw6c1fd8f2022-11-30 14:33:01 +08001/*****************************************************************************
2* Copyright Statement:
3* --------------------
4* This software is protected by Copyright and the information contained
5* herein is confidential. The software may not be copied and the information
6* contained herein may not be used or disclosed except with the written
7* permission of MediaTek Inc. (C) 2005
8*
9* BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
10* THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
11* RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO BUYER ON
12* AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL WARRANTIES,
13* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF
14* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NONINFRINGEMENT.
15* NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH RESPECT TO THE
16* SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY, INCORPORATED IN, OR
17* SUPPLIED WITH THE MEDIATEK SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH
18* THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO
19* NOT BE RESPONSIBLE FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S
20* SPECIFICATION OR TO CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM.
21*
22* BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE
23* LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL BE,
24* AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT ISSUE,
25* OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY BUYER TO
26* MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE.
27*
28* THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE
29* WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT OF
30* LAWS PRINCIPLES. ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING THEREOF AND
31* RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN FRANCISCO, CA, UNDER
32* THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE (ICC).
33*
34*****************************************************************************/
35
36/*****************************************************************************
37 *
38 * Filename:
39 * ---------
40 * task_config.c
41 *
42 * Project:
43 * --------
44 * Maui_Software
45 *
46 * Description:
47 * ------------
48 * This file contains the source code for configuring the
49 * data structures that hold task configuration info.
50 *
51 * Author:
52 * -------
53 * -------
54 *
55 *============================================================================
56 * HISTORY
57 * Below this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
58 *------------------------------------------------------------------------------
59 * removed!
60 * removed!
61 * removed!
62 *
63 * removed!
64 * removed!
65 * removed!
66 * removed!
67 *
68 * removed!
69 * removed!
70 * removed!
71 * removed!
72 *
73 * removed!
74 * removed!
75 * removed!
76 *
77 * removed!
78 * removed!
79 * removed!
80 * removed!
81 *
82 * removed!
83 * removed!
84 * removed!
85 *
86 * removed!
87 * removed!
88 * removed!
89 *
90 * removed!
91 * removed!
92 * removed!
93 *
94 * removed!
95 * removed!
96 * removed!
97 *
98 * removed!
99 * removed!
100 * removed!
101 *
102 * removed!
103 * removed!
104 * removed!
105 *
106 * removed!
107 * removed!
108 * removed!
109 *
110 * removed!
111 * removed!
112 * removed!
113 * removed!
114 *
115 * removed!
116 * removed!
117 * removed!
118 * removed!
119 *
120 * removed!
121 * removed!
122 * removed!
123 * removed!
124 *
125 * removed!
126 * removed!
127 * removed!
128 * removed!
129 *
130 * removed!
131 * removed!
132 * removed!
133 * removed!
134 *
135 * removed!
136 * removed!
137 * removed!
138 * removed!
139 *
140 * removed!
141 * removed!
142 * removed!
143 * removed!
144 *
145 * removed!
146 * removed!
147 * removed!
148 *
149 * removed!
150 * removed!
151 *
152 * removed!
153 * removed!
154 * removed!
155 *
156 * removed!
157 * removed!
158 * removed!
159 *
160 * removed!
161 * removed!
162 * removed!
163 * removed!
164 *
165 * removed!
166 * removed!
167 * removed!
168 *
169 * removed!
170 * removed!
171 * removed!
172 * removed!
173 *
174 * removed!
175 * removed!
176 * removed!
177 *
178 * removed!
179 * removed!
180 * removed!
181 *
182 * removed!
183 * removed!
184 * removed!
185 *
186 * removed!
187 * removed!
188 * removed!
189 *
190 * removed!
191 * removed!
192 * removed!
193 *
194 * removed!
195 * removed!
196 * removed!
197 *
198 * removed!
199 * removed!
200 * removed!
201 *
202 * removed!
203 * removed!
204 * removed!
205 *
206 * removed!
207 * removed!
208 * removed!
209 *
210 * removed!
211 * removed!
212 * removed!
213 *
214 * removed!
215 * removed!
216 * removed!
217 *
218 * removed!
219 * removed!
220 * removed!
221 *
222 * removed!
223 * removed!
224 * removed!
225 *
226 * removed!
227 * removed!
228 * removed!
229 *
230 * removed!
231 * removed!
232 * removed!
233 *
234 * removed!
235 * removed!
236 * removed!
237 *
238 * removed!
239 * removed!
240 * removed!
241 *
242 * removed!
243 * removed!
244 * removed!
245 *
246 * removed!
247 * removed!
248 * removed!
249 *
250 * removed!
251 * removed!
252 * removed!
253 *
254 * removed!
255 * removed!
256 * removed!
257 *
258 * removed!
259 * removed!
260 * removed!
261 *
262 * removed!
263 * removed!
264 * removed!
265 *
266 * removed!
267 * removed!
268 * removed!
269 *
270 * removed!
271 * removed!
272 * removed!
273 *
274 * removed!
275 * removed!
276 * removed!
277 *
278 * removed!
279 * removed!
280 * removed!
281 *
282 * removed!
283 * removed!
284 * removed!
285 * removed!
286 *
287 * removed!
288 * removed!
289 * removed!
290 *
291 * removed!
292 * removed!
293 * removed!
294 *
295 * removed!
296 * removed!
297 * removed!
298 * removed!
299 * removed!
300 * removed!
301 * removed!
302 * removed!
303 * removed!
304 * removed!
305 * removed!
306 * removed!
307 * removed!
308 * removed!
309 * removed!
310 * removed!
311 * removed!
312 * removed!
313 * removed!
314 * removed!
315 * removed!
316 * removed!
317 * removed!
318 *
319 * removed!
320 * removed!
321 * removed!
322 *
323 * removed!
324 * removed!
325 * removed!
326 *
327 * removed!
328 * removed!
329 * removed!
330 *
331 * removed!
332 * removed!
333 * removed!
334 *
335 * removed!
336 * removed!
337 * removed!
338 *
339 * removed!
340 * removed!
341 * removed!
342 *
343 * removed!
344 * removed!
345 * removed!
346 *
347 * removed!
348 * removed!
349 * removed!
350 *
351 * removed!
352 * removed!
353 * removed!
354 *
355 * removed!
356 * removed!
357 * removed!
358 *
359 * removed!
360 * removed!
361 * removed!
362 *
363 * removed!
364 * removed!
365 * removed!
366 *
367 * removed!
368 * removed!
369 * removed!
370 *
371 * removed!
372 * removed!
373 * removed!
374 *
375 * removed!
376 * removed!
377 * removed!
378 *
379 * removed!
380 * removed!
381 * removed!
382 *
383 * removed!
384 * removed!
385 * removed!
386 *
387 * removed!
388 * removed!
389 * removed!
390 *
391 * removed!
392 * removed!
393 * removed!
394 *
395 * removed!
396 * removed!
397 * removed!
398 *
399 * removed!
400 * removed!
401 * removed!
402 *
403 * removed!
404 * removed!
405 * removed!
406 *
407 * removed!
408 * removed!
409 * removed!
410 *
411 * removed!
412 * removed!
413 * removed!
414 *
415 * removed!
416 * removed!
417 * removed!
418 *
419 * removed!
420 * removed!
421 * removed!
422 *
423 * removed!
424 * removed!
425 * removed!
426 *
427 * removed!
428 * removed!
429 * removed!
430 *
431 * removed!
432 * removed!
433 * removed!
434 *
435 * removed!
436 * removed!
437 * removed!
438 *
439 * removed!
440 * removed!
441 * removed!
442 * removed!
443 * removed!
444 * removed!
445 * removed!
446 * removed!
447 * removed!
448 * removed!
449 * removed!
450 * removed!
451 * removed!
452 * removed!
453 * removed!
454 * removed!
455 * removed!
456 * removed!
457 * removed!
458 * removed!
459 * removed!
460 * removed!
461 * removed!
462 * removed!
463 * removed!
464 * removed!
465 * removed!
466 * removed!
467 * removed!
468 * removed!
469 * removed!
470 * removed!
471 * removed!
472 * removed!
473 * removed!
474 * removed!
475 * removed!
476 * removed!
477 * removed!
478 * removed!
479 * removed!
480 * removed!
481 * removed!
482 * removed!
483 * removed!
484 * removed!
485 * removed!
486 * removed!
487 * removed!
488 * removed!
489 * removed!
490 * removed!
491 * removed!
492 * removed!
493 * removed!
494 * removed!
495 * removed!
496 * removed!
497 * removed!
498 * removed!
499 * removed!
500 * removed!
501 * removed!
502 * removed!
503 * removed!
504 * removed!
505 * removed!
506 * removed!
507 * removed!
508 * removed!
509 * removed!
510 * removed!
511 * removed!
512 * removed!
513 * removed!
514 * removed!
515 * removed!
516 * removed!
517 * removed!
518 * removed!
519 * removed!
520 * removed!
521 * removed!
522 * removed!
523 * removed!
524 * removed!
525 * removed!
526 * removed!
527 * removed!
528 * removed!
529 * removed!
530 * removed!
531 * removed!
532 * removed!
533 * removed!
534 * removed!
535 * removed!
536 *------------------------------------------------------------------------------
537 * Upper this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
538 *============================================================================
539 ****************************************************************************/
540
541/*********************************************************************
542 (C) _____ (year of first publication) Sasken communication
543 Technologies Limited, All rights reserved.
544* This file provides a template for .c files. This space
545* should be used to describe the file contents
546* Component-specific prefix : xxxx
547*********************************************************************/
548
549/*************************************************************************
550* Include Statements
551 *************************************************************************/
552#include "kal_public_api.h"
553#include "task_config.h"
554#include "syscomp_config.h"
555//#include "dcl.h"
556
557#if defined(__ESL_COSIM_LTE__)
558#include "dhl_trace.h"
559#include "drv_hsl.h"
560#endif /* __ESL_COSIM_LTE__ */
561
562#ifdef __MULTI_BOOT__
563#include "multiboot_config.h"
564//#include "fctycomp_config.h"
565#endif /* __MULTI_BOOT__ */
566
567#if !defined(KAL_PRIORITY_NODE_BY_CTRL_BUFF) && defined(__MTK_TARGET__)
568#include "sys_mem_size.h"
569#endif
570
571#include "kal_os.h"
572#include "kal_internal_api.h"
573#include "kal_internal_def.h"
574#include "cache_sw.h"
575#include "cpu.h"
576
577/*************************************************************************
578* Definitions Of Exported Globals
579 *************************************************************************/
580task_info_struct *task_info_g;
581kal_uint32 KALTotalTasks;
582kal_uint32 KALTotalModules;
583
584volatile kal_atomic_uint32 taskInitEnterCount[RPS_TOTAL_STACK_TASKS];
585kal_uint32 taskInitStartTime[RPS_TOTAL_STACK_TASKS];
586kal_uint32 taskInitFinishTime[RPS_TOTAL_STACK_TASKS];
587kal_uint32 taskInitResourceIndex = 0xFF;
588
589eventid task_affinity_evt[RPS_TOTAL_STACK_TASKS];
590eventid hisr_affinity_evt[RPS_TOTAL_STACK_HISRS];
591kal_bool hisr_affinity_set[RPS_TOTAL_STACK_HISRS];
592kal_atomic_int32 hisr_affinity_set_msg_handle[RPS_TOTAL_STACK_HISRS];
593
594#ifdef SPLIT_SYS
595extern const kal_uint8 tst_routing_table[];
596/* Tasks created on target side */
597kal_uint32 utontarget_task_mask_g[2];
598/* Tasks created on PC side */
599kal_uint32 utonmnt_task_mask_g[2];
600#endif /* SPLIT_SYS */
601
602kal_uint8 remap_task_index_by_taskID[TASK_ID_DRV_CODE_TAIL];
603kal_uint8 remap_task_index_by_moduleID[MODULE_TAG_DRV_DUMMY_TAIL];
604kal_uint16 remap_mod_index_by_moduleID[MODULE_TAG_DRV_DUMMY_TAIL];
605/* ---------------------
606 * | HISR Q ID pointers | (KAL_MAX_NUM_HISRS * 4 bytes)
607 * ---------------------
608 * | LISR Q ID pointers | (KAL_MAX_NUM_LISRS * 4 bytes)
609 * ---------------------
610 */
611isr_q_type *isr_qid_ptrs_g[KAL_MAX_NUM_HISRS + KAL_MAX_NUM_LISRS];
612
613extern const comptask_info_struct sys_comp_config_tbl[];
614
615/*******************************************************************************
616 * Internal Globals
617 * these global array is used in kal files
618 * they should be defined in config file since config internal macro is used as array size
619 *******************************************************************************/
620#ifdef __MTK_TARGET__
621__attribute__((section("INTSRAM_RW")))
622#endif /* __MTK_TARGET__ */
623#if 0
624/* under construction !*/
625/* under construction !*/
626/* under construction !*/
627/* under construction !*/
628/* under construction !*/
629/* under construction !*/
630#endif
631module_type task_active_module_g[RPS_TOTAL_STACK_TASKS];
632/*************************************************************************
633* Declarations Of Imported functions
634 *************************************************************************/
635extern void *kal_sys_mem_alloc(kal_uint32 size);
636
637
638/*************************************************************************
639 * FUNCTION:
640 * remap_task_index
641 *
642 * DESCRIPTION:
643 * adjust index for save RAM, should call this function when refer task_info_g[task_index]
644 *
645 * PARAMETERS:
646 * module_type
647
648 * RETURNS
649 * task indx: the order in task_info_g[]
650 *
651 * GLOBALS AFFECTED
652 *
653 *************************************************************************/
654kal_uint32 remap_task_index(kal_uint32 task_indx)
655{
656 kal_uint32 task_index = 0;
657 if (task_indx < TASK_ID_DRV_CODE_TAIL)
658 task_index = remap_task_index_by_taskID[task_indx];
659
660 return task_index;
661}
662
663static kal_uint32 remap_task_index_internal(kal_uint32 task_indx)
664{
665 /* should rewrite this function once task id group is rearranged */
666
667 kal_uint32 task_index = task_indx;
668
669 if (task_index > TASK_ID_DRV_CODE_TAIL || task_index > TASK_ID_CODE_MAX) {
670 return 0;
671 }
672
673 if (task_indx > TASK_ID_SRV_CODE_TAIL) {
674 /* SRV group */
675 task_index = TASK_ID_SRV_CODE_TAIL;
676 if (task_indx < TASK_ID_MODEM_2G3G_CODE_BEGIN) {
677 task_index = 0;
678 } else if (task_indx <= TASK_ID_MODEM_2G3G_CODE_TAIL) {
679 /* 2G3G MODEM group */
680 task_index += (task_indx - TASK_ID_MODEM_2G3G_CODE_BEGIN + 1);
681 } else if (task_indx < TASK_ID_MODEM_4G_CODE_BEGIN) {
682 task_index = 0;
683 } else if (task_indx <= TASK_ID_MODEM_4G_CODE_TAIL) {
684 /* 4G MODEM group */
685 task_index +=
686 (TASK_ID_MODEM_2G3G_CODE_TAIL - TASK_ID_MODEM_2G3G_CODE_BEGIN + 1);
687 task_index += (task_indx - TASK_ID_MODEM_4G_CODE_BEGIN + 1);
688 } else if (task_indx < TASK_ID_MODEM_5G_CODE_BEGIN) {
689 task_index = 0;
690 } else if (task_indx <= TASK_ID_MODEM_5G_CODE_TAIL) {
691 /* 5G MODEM group */
692 task_index +=
693 (TASK_ID_MODEM_2G3G_CODE_TAIL - TASK_ID_MODEM_2G3G_CODE_BEGIN + 1);
694 task_index +=
695 (TASK_ID_MODEM_4G_CODE_TAIL - TASK_ID_MODEM_4G_CODE_BEGIN + 1);
696 task_index += (task_indx - TASK_ID_MODEM_5G_CODE_BEGIN + 1);
697 } else if (task_indx < TASK_ID_MW_CODE_BEGIN) {
698 task_index = 0;
699 } else if (task_indx <= TASK_ID_MW_CODE_TAIL) {
700 /* MW group */
701 task_index +=
702 (TASK_ID_MODEM_2G3G_CODE_TAIL - TASK_ID_MODEM_2G3G_CODE_BEGIN + 1);
703 task_index +=
704 (TASK_ID_MODEM_4G_CODE_TAIL - TASK_ID_MODEM_4G_CODE_BEGIN + 1);
705 task_index +=
706 (TASK_ID_MODEM_5G_CODE_TAIL - TASK_ID_MODEM_5G_CODE_BEGIN + 1);
707 task_index += (task_indx - TASK_ID_MW_CODE_BEGIN + 1);
708 } else if (task_indx < TASK_ID_DRV_CODE_BEGIN) {
709 task_index = 0;
710 } else {
711 /* DRV group */
712 task_index +=
713 (TASK_ID_MODEM_2G3G_CODE_TAIL - TASK_ID_MODEM_2G3G_CODE_BEGIN + 1);
714 task_index +=
715 (TASK_ID_MODEM_4G_CODE_TAIL - TASK_ID_MODEM_4G_CODE_BEGIN + 1);
716 task_index +=
717 (TASK_ID_MODEM_5G_CODE_TAIL - TASK_ID_MODEM_5G_CODE_BEGIN + 1);
718 task_index += (TASK_ID_MW_CODE_TAIL - TASK_ID_MW_CODE_BEGIN + 1);
719 task_index += (task_indx - TASK_ID_DRV_CODE_BEGIN + 1);
720 }
721 }
722
723 return task_index;
724}
725
726
727/*************************************************************************
728 * FUNCTION:
729 * remap_module_id
730 *
731 * DESCRIPTION:
732 * adjust index for save RAM, should call this function when refer mod_task_g[module_id]
733 *
734 * PARAMETERS:
735 * module_type
736
737 * RETURNS
738 * moduleid: the order in mod_task_g[]
739 *
740 * GLOBALS AFFECTED
741 *
742 *************************************************************************/
743kal_uint32 remap_module_id(kal_uint32 module_id)
744{
745 kal_uint32 moduleid = 0;
746 if (module_id < MODULE_TAG_DRV_DUMMY_TAIL)
747 moduleid = remap_mod_index_by_moduleID[module_id];
748
749 return moduleid;
750}
751
752static kal_uint32 remap_module_id_internal(kal_uint32 module_id)
753{
754 /* should rewrite this function once task id is rearranged */
755
756 kal_uint32 moduleid = 0;
757
758 do {
759
760 if (module_id <= MOD_ID_SRV_CODE_BEGIN) {
761 break;
762 } else if (module_id < MODULE_TAG_SRV_TAIL) {
763 moduleid = (module_id - MOD_ID_SRV_CODE_BEGIN);
764 } else if (module_id <= MOD_MODEM_DUMMY_BEGIN) {
765 break;
766 } else if (module_id < MODULE_TAG_MODEM_DUMMY_TAIL) {
767 moduleid = MODULE_TAG_SRV_TAIL - MOD_ID_SRV_CODE_BEGIN;
768 moduleid += (module_id - MOD_MODEM_DUMMY_BEGIN + 1);
769 } else if (module_id <= MOD_MODEM_4G_DUMMY_BEGIN) {
770 break;
771 } else if (module_id < MODULE_TAG_MODEM_4G_DUMMY_TAIL) {
772 moduleid = MODULE_TAG_SRV_TAIL - MOD_ID_SRV_CODE_BEGIN;
773 moduleid += (MODULE_TAG_MODEM_DUMMY_TAIL - MOD_MODEM_DUMMY_BEGIN + 1);
774 moduleid += (module_id - MOD_MODEM_4G_DUMMY_BEGIN + 1);
775 } else if (module_id <= MOD_MODEM_5G_DUMMY_BEGIN) {
776 break;
777 } else if (module_id < MODULE_TAG_MODEM_5G_DUMMY_TAIL) {
778 moduleid = MODULE_TAG_SRV_TAIL - MOD_ID_SRV_CODE_BEGIN;
779 moduleid += (MODULE_TAG_MODEM_DUMMY_TAIL - MOD_MODEM_DUMMY_BEGIN + 1);
780 moduleid +=
781 (MODULE_TAG_MODEM_4G_DUMMY_TAIL - MOD_MODEM_4G_DUMMY_BEGIN + 1);
782 moduleid += (module_id - MOD_MODEM_5G_DUMMY_BEGIN + 1);
783 } else if (module_id <= MOD_MW_DUMMY_BEGIN) {
784 break;
785 } else if (module_id < MODULE_TAG_MW_DUMMY_TAIL) {
786 moduleid = MODULE_TAG_SRV_TAIL - MOD_ID_SRV_CODE_BEGIN;
787 moduleid += (MODULE_TAG_MODEM_DUMMY_TAIL - MOD_MODEM_DUMMY_BEGIN + 1);
788 moduleid +=
789 (MODULE_TAG_MODEM_4G_DUMMY_TAIL - MOD_MODEM_4G_DUMMY_BEGIN + 1);
790 moduleid +=
791 (MODULE_TAG_MODEM_5G_DUMMY_TAIL - MOD_MODEM_5G_DUMMY_BEGIN + 1);
792 moduleid += (module_id - MOD_MW_DUMMY_BEGIN + 1);
793 } else if (module_id <= MOD_DRV_DUMMY_BEGIN) {
794 break;
795 } else if (module_id < MODULE_TAG_DRV_DUMMY_TAIL) {
796 moduleid = MODULE_TAG_SRV_TAIL - MOD_ID_SRV_CODE_BEGIN;
797 moduleid += (MODULE_TAG_MODEM_DUMMY_TAIL - MOD_MODEM_DUMMY_BEGIN + 1);
798 moduleid +=
799 (MODULE_TAG_MODEM_4G_DUMMY_TAIL - MOD_MODEM_4G_DUMMY_BEGIN + 1);
800 moduleid +=
801 (MODULE_TAG_MODEM_5G_DUMMY_TAIL - MOD_MODEM_5G_DUMMY_BEGIN + 1);
802 moduleid += (MODULE_TAG_MW_DUMMY_TAIL - MOD_MW_DUMMY_BEGIN + 1);
803 moduleid += (module_id - MOD_DRV_DUMMY_BEGIN + 1);
804 }
805 } while (0);
806
807 return moduleid;
808}
809
810/*************************************************************************
811 * FUNCTION:
812 * remap_task_index_by_module_id
813 *
814 * DESCRIPTION:
815 * Get remap task id from module id
816 *
817 * PARAMETERS:
818 * module_type
819
820 * RETURNS
821 * task indx: the order in task_info_g[]
822 *
823 * GLOBALS AFFECTED
824 *
825 *************************************************************************/
826kal_uint32 remap_task_index_by_module_id(kal_uint32 module_id)
827{
828
829#if KTEST_RTOS_TEST
830 return mod_task_g[module_id];
831#else
832 kal_uint32 task_index = 0;
833 if (module_id < MODULE_TAG_DRV_DUMMY_TAIL)
834 task_index = remap_task_index_by_moduleID[module_id];
835
836 return task_index;
837#endif
838}
839
840/*************************************************************************
841 * FUNCTION:
842 * stack_init_task_mod_remap_tbl
843 *
844 * DESCRIPTION:
845* This function will initialize module and task ID remap table at initialization stage.
846 *
847 * PARAMETERS:
848 * void
849
850 * RETURNS
851 * void
852 *
853 * GLOBALS AFFECTED
854 *
855 *************************************************************************/
856void stack_init_task_mod_remap_tbl(void)
857{
858 kal_uint32 index;
859
860 for (index = TASK_ID_SRV_CODE_BEGIN + 1; index < TASK_ID_DRV_CODE_TAIL;
861 index++) {
862 remap_task_index_by_taskID[index] = remap_task_index_internal(index);
863 }
864
865 for (index = MOD_ID_SRV_CODE_BEGIN + 1; index < MODULE_TAG_DRV_DUMMY_TAIL;
866 index++) {
867 remap_mod_index_by_moduleID[index] = remap_module_id_internal(index);
868 remap_task_index_by_moduleID[index] = remap_task_index_internal(
869 mod_task_g[remap_mod_index_by_moduleID[index]]);
870 }
871}
872
873/*************************************************************************
874 * FUNCTION:
875 * kal_get_task_index_by_mod_task_g
876 *
877 * DESCRIPTION:
878 * will get taskindexfrom mod_task_g as mod_task_g is privated
879 *
880 * PARAMETERS:
881 * module_type: module Id
882 beNeedRemap: need remap if the module id is from module Id defined;
883 don't remap if loop all module id one by one;
884 * RETURNS
885 * task indx in task_info_g[]
886 *
887 * GLOBALS AFFECTED
888 *
889 *************************************************************************/
890kal_uint32 kal_get_task_index_From_mod_task_g(module_type module_id,
891 kal_bool beNeedRemap)
892{
893 kal_uint32 moduleid = module_id;
894 /* should rewrite this function once task/module id is rearranged */
895 if (KAL_TRUE == beNeedRemap) {
896 moduleid = remap_module_id(module_id);
897 }
898 return mod_task_g[moduleid];
899}
900
901
902static void set_task_active_module_id(kal_uint32 module_id_start,
903 kal_uint32 module_id_end)
904{
905 kal_uint32 task_indx, module_id;
906
907 for (module_id = module_id_start + 1; module_id < module_id_end; module_id++) {
908 task_indx = remap_task_index_by_module_id(module_id);
909 if (INDX_NIL == task_indx) {
910 continue;
911 }
912 stack_set_active_module_id(task_indx, module_id);
913 }
914}
915
916
917/*************************************************************************
918* FUNCTION
919* stack_init_comp_info
920*
921* DESCRIPTION
922* This function configures the information related with
923* inidividual tasks in an array.
924* The configuration is based on following:
925* 1. The task configuration information passed.
926* 2. compile time flags.
927*
928* The configiration information for tasks not present are set
929* to default values.
930*
931*
932* PARAMETERS
933* Input only: TAsk configuration information.
934*
935* RETURNS
936* KAL_TRUE on success, else KAL_FALSE.
937*
938* GLOBALS AFFECTED
939*
940*************************************************************************/
941kal_bool stack_init_comp_info(void)
942{
943 kal_uint32 task_indx;
944 kal_int32 comp_task_indx;
945
946 kal_bool result = KAL_TRUE;
947 comptask_handler_struct *comp_handler = NULL;
948/*fix compile warning*/
949#ifdef SPLIT_SYS
950 kal_uint8 mask_offset;
951 kal_uint8 mask_pos;
952#endif /* SPLIT_SYS */
953
954 /*
955 * initialize task id and mod id remap table
956 */
957 stack_init_task_mod_remap_tbl();
958
959 KALTotalTasks = RPS_TOTAL_STACK_TASKS;
960 KALTotalModules = RPS_TOTAL_STACK_MODULES;
961
962 task_info_g = (task_info_struct *)kal_sys_mem_alloc(sizeof(task_info_struct) *
963 KALTotalTasks);
964 EXT_ASSERT(task_info_g != NULL, 0, 0, 0);
965 if (NULL == task_info_g) {
966 return KAL_FALSE;
967 }
968
969 /* Initialize global task info structure array */
970
971 for (task_indx = 0; task_indx < KALTotalTasks; task_indx++) {
972
973 task_info_g[task_indx].task_name_ptr = RPS_NO_TASK_NAME;
974 task_info_g[task_indx].task_qname_ptr = RPS_QNAME_NIL;
975 task_info_g[task_indx].task_priority = RPS_TASK_PRIORITY_NIL;
976 task_info_g[task_indx].task_stack_size = RPS_STACK_SIZE_NIL;
977 task_info_g[task_indx].task_id = KAL_NILTASK_ID;
978 task_info_g[task_indx].task_ext_qid = KAL_NILQ_ID;
979 task_info_g[task_indx].task_int_qid_ptr = NULL;
980 task_info_g[task_indx].task_entry_func = NULL;
981 task_info_g[task_indx].task_init_func = NULL;
982 task_info_g[task_indx].task_ext_qsize = RPS_QSIZE_NIL;
983 task_info_g[task_indx].task_affinity_attribute = None_Group;
984 task_info_g[task_indx].task_affinity_group_id = AFFI_GROUP_ID_NONE;
985 }
986
987/* assume that the normal mode is the default setting */
988
989#ifdef SPLIT_SYS
990 /* Transfer tst routing table module id to task id */
991 for (i = MOD_NIL + 1; i < LAST_MOD_ID; i++) {
992 mask_offset = i / 8;
993 mask_pos = i % 8;
994
995 if (tst_routing_table[mask_offset] & (0x1 << mask_pos)) {
996 /* On MNT PC side */
997 mask_offset = mod_task_g[i] / 32;
998 mask_pos = mod_task_g[i] % 32;
999
1000 utonmnt_task_mask_g[mask_offset] |= (0x1 << mask_pos);
1001 } else {
1002 /* On Target side */
1003 mask_offset = mod_task_g[i] / 32;
1004 mask_pos = mod_task_g[i] % 32;
1005
1006 utontarget_task_mask_g[mask_offset] |= (0x1 << mask_pos);
1007 }
1008 }
1009
1010 /* Both MNT, Target side need TST/TST Reader Tasks */
1011 i = INDX_TST;
1012 mask_offset = mod_task_g[i] / 32;
1013 mask_pos = mod_task_g[i] % 32;
1014 utonmnt_task_mask_g[mask_offset] &= ~(0x1 << mask_pos);
1015 utontarget_task_mask_g[mask_offset] &= ~(0x1 << mask_pos);
1016
1017 i = INDX_TST_READER;
1018 mask_offset = mod_task_g[i] / 32;
1019 mask_pos = mod_task_g[i] % 32;
1020 utonmnt_task_mask_g[mask_offset] &= ~(0x1 << mask_pos);
1021 utontarget_task_mask_g[mask_offset] &= ~(0x1 << mask_pos);
1022
1023#ifdef __MTK_TARGET__
1024 redirect_task_mask_g = (kal_uint32 *)&utonmnt_task_mask_g;
1025#else
1026 redirect_task_mask_g = (kal_uint32 *)&utontarget_task_mask_g;
1027#endif /* __MTK_TARGET__ */
1028
1029#endif /* SPLIT_SYS */
1030
1031 comp_task_indx = 0;
1032
1033 /* Initialize global task info structure array according to component info */
1034 for (task_indx = 0; task_indx < KALTotalTasks; task_indx++) {
1035 task_info_g[task_indx].task_name_ptr =
1036 sys_comp_config_tbl[comp_task_indx].comp_name_ptr;
1037 task_info_g[task_indx].task_priority =
1038 sys_comp_config_tbl[comp_task_indx].comp_priority;
1039 task_info_g[task_indx].task_affinity_attribute =
1040 sys_comp_config_tbl[comp_task_indx].comp_affinity_attribute;
1041
1042 task_info_g[task_indx].task_affinity_dynamic =
1043 sys_comp_config_tbl[comp_task_indx].comp_affinity_dynamic;
1044 task_info_g[task_indx].task_affinity_group_id =
1045 sys_comp_config_tbl[comp_task_indx].comp_affinity_group_id;
1046 task_info_g[task_indx].task_qname_ptr =
1047 sys_comp_config_tbl[comp_task_indx].comp_qname_ptr;
1048 task_info_g[task_indx].task_stack_size =
1049 sys_comp_config_tbl[comp_task_indx].comp_stack_size;
1050#ifdef __SYS_INTERN_RAM__
1051 task_info_g[task_indx].task_internal_ram_stack =
1052 sys_comp_config_tbl[comp_task_indx].comp_internal_ram_stack;
1053#endif /* __SYS_INTERN_RAM__ */
1054 task_info_g[task_indx].task_ext_qsize =
1055 sys_comp_config_tbl[comp_task_indx].comp_ext_qsize;
1056 task_info_g[task_indx].task_int_qsize =
1057 sys_comp_config_tbl[comp_task_indx].comp_int_qsize;
1058
1059 /*Check whether the task should be created or mis-configured*/
1060 if ((sys_comp_config_tbl[comp_task_indx].comp_create_func ==
1061 (kal_create_func_ptr)TASK_NO_CREATE_PATTERN)
1062#ifdef SPLIT_SYS
1063 ||
1064 (*(redirect_task_mask_g + (task_indx >> 5)) & (0x1 << (task_indx & 31)))
1065#endif /* SPLIT_SYS */
1066 ) {
1067 comp_task_indx++;
1068 continue;
1069 } else if ((sys_comp_config_tbl[comp_task_indx].comp_create_func ==
1070 (kal_create_func_ptr)KAL_FALSE) ||
1071 (sys_comp_config_tbl[comp_task_indx].comp_create_func ==
1072 (kal_create_func_ptr)KAL_TRUE)) {
1073 /*
1074 This is task mis-configured case. This occurs code like
1075 #ifdef xxx
1076 task_create_function(yyy)
1077 #endif
1078 missing the null_task_create_entry as the else branch.
1079
1080 The assumption is that task_stack_internalRAM(KAL_FALSE or KAL_TRUE)
1081 following task create function
1082 */
1083 kal_RecordSSTOwner(sys_comp_config_tbl[comp_task_indx].comp_name_ptr);
1084 kal_fatal_error_handler(KAL_ERROR_KALINIT_INIT_FAILED, comp_task_indx);
1085 } else if ((sys_comp_config_tbl[comp_task_indx].comp_create_func(
1086 &comp_handler) != KAL_TRUE) ||
1087 (NULL == comp_handler)) {
1088 comp_task_indx++;
1089 continue;
1090 }
1091
1092#if defined(__ESL_COSIM_LTE__)
1093 M_HSL_PRINTF(" task[%02d] = %10.*s, priority = 0x%04x_%04x\n", task_indx,
1094 10, task_info_g[task_indx].task_name_ptr,
1095 (task_info_g[task_indx].task_priority >> 16) & 0xFFFF,
1096 (task_info_g[task_indx].task_priority) & 0xFFFF);
1097#endif /* __ESL_COSIM_LTE__ */
1098
1099
1100 /* component task entry function */
1101 /*Null task_entry_func indicates the task will not create*/
1102 task_info_g[task_indx].task_entry_func = comp_handler->comp_entry_func;
1103
1104 /* component task initialization handler */
1105 task_info_g[task_indx].task_init_func = comp_handler->comp_init_func;
1106
1107 /* component task reset handler */
1108 task_info_g[task_indx].task_reset_func = comp_handler->comp_reset_func;
1109
1110 comp_handler = NULL;
1111
1112 /* mask_offset = task_indx / 32; fix compile warning*/
1113 /* mask_pos = task_indx % 32; fix compile warning*/
1114 comp_task_indx++;
1115 }
1116
1117
1118 set_task_active_module_id(MOD_DUMMY_NIL, MODULE_TAG_SRV_TAIL);
1119 set_task_active_module_id(MOD_MODEM_DUMMY_BEGIN, MODULE_TAG_MODEM_DUMMY_TAIL);
1120 set_task_active_module_id(MOD_MODEM_4G_DUMMY_BEGIN,
1121 MODULE_TAG_MODEM_4G_DUMMY_TAIL);
1122 set_task_active_module_id(MOD_MODEM_5G_DUMMY_BEGIN,
1123 MODULE_TAG_MODEM_5G_DUMMY_TAIL);
1124 set_task_active_module_id(MOD_MW_DUMMY_BEGIN, MODULE_TAG_MW_DUMMY_TAIL);
1125 set_task_active_module_id(MOD_DRV_DUMMY_BEGIN, MODULE_TAG_DRV_DUMMY_TAIL);
1126
1127 return result;
1128}
1129
1130
1131/*******************************************************************************
1132 * FUNCTION
1133 * kal_get_task_total_number
1134 * DESCRIPTION
1135 * query total task index number.
1136 * PARAMETERS
1137 * NA.
1138 * RETURNS
1139 * Return total task index number.
1140 * GLOBALS AFFECTED
1141 *
1142 ******************************************************************************/
1143kal_uint32 kal_get_task_total_number(void) { return KALTotalTasks; }
1144
1145/*******************************************************************************
1146 * FUNCTION
1147 * kal_get_send_msg_module_id_total_number
1148 * DESCRIPTION
1149 * query total module id number that can send message.
1150 * PARAMETERS
1151 * NA.
1152 * RETURNS
1153 * Return total module id number that can send message.
1154 * GLOBALS AFFECTED
1155 *
1156 ******************************************************************************/
1157kal_uint32 kal_get_send_msg_module_id_total_number(void)
1158{
1159 return (kal_uint32)RPS_TOTAL_STACK_MODULES;
1160}
1161
1162
1163/*************************************************************************
1164* FUNCTION
1165* kal_task_mod_remap (Only for NL1 Build Load)
1166*
1167* DESCRIPTION
1168* This function will remap module to new task.
1169*
1170* PARAMETERS
1171* module_type: destination module Id
1172* module_type: source module Id
1173*
1174* RETURNS
1175* None
1176*
1177* GLOBALS AFFECTED
1178* mod_task_g
1179*
1180*************************************************************************/
1181void kal_task_mod_remap(module_type dst_mod_id, module_type src_mod_id)
1182{
1183 /* This Function is Only for NL1 Build Load */
1184 mod_task_g[remap_module_id(dst_mod_id)] =
1185 mod_task_g[remap_module_id(src_mod_id)];
1186 remap_task_index_by_moduleID[dst_mod_id] =
1187 remap_task_index_by_moduleID[src_mod_id];
1188
1189 return;
1190}