blob: 0c877e6cc6f8fef5a95199ba9c352197bff7ed48 [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 * kal_public_defs.h
41 *
42 * Project:
43 * --------
44 * Maui_Software
45 *
46 * Description:
47 * ------------
48 * This file provides public and common types definations.
49 * Note this file will inhirit RTOS header file
50 *
51 * Data type definitions in this file are visible for KAL Public Users.
52 *
53 * Author:
54 * -------
55 * -------
56 *
57 *============================================================================
58 * HISTORY
59 * Below this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
60 *------------------------------------------------------------------------------
61 * removed!
62 * removed!
63 * removed!
64 *
65 * removed!
66 * removed!
67 * removed!
68 * removed!
69 *
70 * removed!
71 * removed!
72 * removed!
73 *
74 * removed!
75 * removed!
76 * removed!
77 * removed!
78 *
79 * removed!
80 * removed!
81 *
82 * removed!
83 * removed!
84 * removed!
85 *
86 * removed!
87 * removed!
88 * removed!
89 * removed!
90 *
91 * removed!
92 * removed!
93 * removed!
94 * removed!
95 *
96 * removed!
97 * removed!
98 * removed!
99 *
100 * removed!
101 * removed!
102 * removed!
103 *
104 * removed!
105 * removed!
106 * removed!
107 * removed!
108 *
109 * removed!
110 * removed!
111 * removed!
112 * removed!
113 * removed!
114 *
115 * removed!
116 * removed!
117 * removed!
118 * removed!
119 * removed!
120 *
121 * removed!
122 * removed!
123 * removed!
124 *
125 * removed!
126 * removed!
127 * removed!
128 *
129 * removed!
130 * removed!
131 * removed!
132 * removed!
133 *
134 * removed!
135 * removed!
136 * removed!
137 *
138 * removed!
139 * removed!
140 * removed!
141 * removed!
142 *
143 * removed!
144 * removed!
145 * removed!
146 *
147 * removed!
148 * removed!
149 * removed!
150 *
151 * removed!
152 * removed!
153 * removed!
154 *
155 * removed!
156 * removed!
157 * removed!
158 * removed!
159 *
160 * removed!
161 * removed!
162 * removed!
163 *
164 * removed!
165 * removed!
166 * removed!
167 *
168 * removed!
169 * removed!
170 * removed!
171 *
172 * removed!
173 * removed!
174 * removed!
175 * removed!
176 *
177 * removed!
178 * removed!
179 * removed!
180 *
181 * removed!
182 * removed!
183 * removed!
184 *
185 * removed!
186 * removed!
187 * removed!
188 * removed!
189 *
190 * removed!
191 * removed!
192 * removed!
193 * removed!
194 *
195 * removed!
196 * removed!
197 * removed!
198 * removed!
199 *
200 * removed!
201 * removed!
202 * removed!
203 *
204 * removed!
205 * removed!
206 *
207 * removed!
208 * removed!
209 * removed!
210 *
211 * removed!
212 * removed!
213 * removed!
214 *
215 * removed!
216 * removed!
217 * removed!
218 *
219 * removed!
220 * removed!
221 * removed!
222 *
223 * removed!
224 * removed!
225 * removed!
226 * removed!
227 *
228 * removed!
229 * removed!
230 * removed!
231 *
232 * removed!
233 * removed!
234 * removed!
235 * removed!
236 *
237 * removed!
238 * removed!
239 * removed!
240 * removed!
241 * removed!
242 * removed!
243 * removed!
244 *
245 * removed!
246 * removed!
247 * removed!
248 *
249 * removed!
250 * removed!
251 * removed!
252 *
253 * removed!
254 * removed!
255 * removed!
256 *
257 * removed!
258 * removed!
259 * removed!
260 *
261 * removed!
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 *
286 * removed!
287 * removed!
288 * removed!
289 *
290 * removed!
291 * removed!
292 * removed!
293 * removed!
294 *
295 * removed!
296 * removed!
297 * removed!
298 * removed!
299 *
300 * removed!
301 * removed!
302 * removed!
303 * removed!
304 *
305 * removed!
306 * removed!
307 * removed!
308 * removed!
309 *
310 * removed!
311 * removed!
312 * removed!
313 * removed!
314 *
315 * removed!
316 * removed!
317 * removed!
318 *
319 * removed!
320 * removed!
321 * removed!
322 * removed!
323 *
324 * removed!
325 * removed!
326 * removed!
327 * removed!
328 *
329 * removed!
330 * removed!
331 * removed!
332 *
333 * removed!
334 * removed!
335 * removed!
336 *
337 * removed!
338 * removed!
339 * removed!
340 * removed!
341 *
342 * removed!
343 * removed!
344 * removed!
345 * removed!
346 *
347 * removed!
348 * removed!
349 * removed!
350 * removed!
351 *
352 * removed!
353 * removed!
354 * removed!
355 * removed!
356 *
357 * removed!
358 * removed!
359 * removed!
360 * removed!
361 *
362 * removed!
363 * removed!
364 * removed!
365 *
366 * removed!
367 * removed!
368 * removed!
369 *
370 * removed!
371 * removed!
372 * removed!
373 *
374 * removed!
375 * removed!
376 * removed!
377 *
378 * removed!
379 * removed!
380 * removed!
381 *
382 * removed!
383 * removed!
384 * removed!
385 *
386 * removed!
387 * removed!
388 * removed!
389 *
390 * removed!
391 * removed!
392 * removed!
393 *
394 * removed!
395 * removed!
396 * removed!
397 *
398 * removed!
399 * removed!
400 * removed!
401 *
402 * removed!
403 * removed!
404 * removed!
405 *
406 * removed!
407 * removed!
408 * removed!
409 *
410 * removed!
411 * removed!
412 * removed!
413 *
414 * removed!
415 * removed!
416 * removed!
417 *
418 * removed!
419 * removed!
420 * removed!
421 *
422 * removed!
423 * removed!
424 * removed!
425 *
426 * removed!
427 * removed!
428 * removed!
429 * removed!
430 *
431 * removed!
432 * removed!
433 * removed!
434 *
435 * removed!
436 * removed!
437 * removed!
438 * removed!
439 *
440 * removed!
441 * removed!
442 * removed!
443 *
444 * removed!
445 * removed!
446 * removed!
447 *
448 * removed!
449 * removed!
450 * removed!
451 *
452 * removed!
453 * removed!
454 *
455 * removed!
456 * removed!
457 * removed!
458 *
459 * removed!
460 * removed!
461 * removed!
462 *
463 * removed!
464 * removed!
465 *
466 * removed!
467 * removed!
468 * removed!
469 *
470 * removed!
471 * removed!
472 * removed!
473 *
474 * removed!
475 * removed!
476 *
477 * removed!
478 * removed!
479 * removed!
480 *
481 * removed!
482 * removed!
483 * removed!
484 * removed!
485 *
486 * removed!
487 * removed!
488 * removed!
489 *
490 * removed!
491 * removed!
492 * removed!
493 * removed!
494 * removed!
495 *
496 * removed!
497 * removed!
498 * removed!
499 *
500 * removed!
501 * removed!
502 * removed!
503 *
504 * removed!
505 * removed!
506 * removed!
507 *
508 * removed!
509 * removed!
510 * removed!
511 *
512 * removed!
513 * removed!
514 * removed!
515 *
516 * removed!
517 * removed!
518 * removed!
519 * removed!
520 * removed!
521 *
522 * removed!
523 * removed!
524 * removed!
525 *
526 * removed!
527 * removed!
528 * removed!
529 *
530 * removed!
531 * removed!
532 * removed!
533 *
534 * removed!
535 * removed!
536 * removed!
537 *
538 * removed!
539 * removed!
540 * removed!
541 *
542 * removed!
543 * removed!
544 * removed!
545 *
546 * removed!
547 * removed!
548 * removed!
549 *
550 * removed!
551 * removed!
552 * removed!
553 *
554 * removed!
555 * removed!
556 * removed!
557 * removed!
558 *
559 * removed!
560 * removed!
561 * removed!
562 * removed!
563 * removed!
564 * removed!
565 * removed!
566 * removed!
567 * removed!
568 *
569 * removed!
570 * removed!
571 * removed!
572 *
573 * removed!
574 * removed!
575 * removed!
576 *
577 * removed!
578 * removed!
579 * removed!
580 *
581 * removed!
582 * removed!
583 * removed!
584 *
585 * removed!
586 * removed!
587 * removed!
588 *
589 * removed!
590 * removed!
591 * removed!
592 *
593 * removed!
594 * removed!
595 * removed!
596 *
597 * removed!
598 * removed!
599 * removed!
600 *
601 * removed!
602 * removed!
603 * removed!
604 *
605 * removed!
606 * removed!
607 * removed!
608 *
609 * removed!
610 * removed!
611 * removed!
612 *
613 * removed!
614 * removed!
615 * removed!
616 * removed!
617 * removed!
618 * removed!
619 * removed!
620 * removed!
621 * removed!
622 * removed!
623 * removed!
624 * removed!
625 *
626 * removed!
627 * removed!
628 * removed!
629 * removed!
630 * removed!
631 * removed!
632 * removed!
633 * removed!
634 * removed!
635 *
636 * removed!
637 * removed!
638 * removed!
639 *
640 * removed!
641 * removed!
642 * removed!
643 *
644 * removed!
645 * removed!
646 * removed!
647 *
648 * removed!
649 * removed!
650 * removed!
651 *
652 * removed!
653 * removed!
654 * removed!
655 *
656 * removed!
657 * removed!
658 * removed!
659 *
660 * removed!
661 * removed!
662 * removed!
663 *
664 * removed!
665 * removed!
666 * removed!
667 *
668 * removed!
669 * removed!
670 * removed!
671 *
672 * removed!
673 * removed!
674 * removed!
675 *
676 * removed!
677 * removed!
678 * removed!
679 *
680 * removed!
681 * removed!
682 * removed!
683 *
684 * removed!
685 * removed!
686 * removed!
687 *
688 * removed!
689 * removed!
690 * removed!
691 *
692 * removed!
693 * removed!
694 * removed!
695 *
696 * removed!
697 * removed!
698 * removed!
699 *
700 * removed!
701 * removed!
702 * removed!
703 *
704 * removed!
705 * removed!
706 * removed!
707 *
708 * removed!
709 * removed!
710 * removed!
711 *
712 * removed!
713 * removed!
714 * removed!
715 *
716 * removed!
717 * removed!
718 * removed!
719 *
720 * removed!
721 * removed!
722 * removed!
723 *
724 * removed!
725 * removed!
726 * removed!
727 *
728 * removed!
729 * removed!
730 * removed!
731 *
732 * removed!
733 * removed!
734 * removed!
735 *
736 * removed!
737 * removed!
738 * removed!
739 *
740 * removed!
741 * removed!
742 * removed!
743 *
744 * removed!
745 * removed!
746 * removed!
747 *
748 * removed!
749 * removed!
750 * removed!
751 *
752 * removed!
753 * removed!
754 * removed!
755 *
756 * removed!
757 * removed!
758 * removed!
759 *
760 * removed!
761 * removed!
762 * removed!
763 * removed!
764 * removed!
765 * removed!
766 * removed!
767 * removed!
768 * removed!
769 * removed!
770 * removed!
771 * removed!
772 * removed!
773 * removed!
774 * removed!
775 * removed!
776 * removed!
777 * removed!
778 * removed!
779 * removed!
780 * removed!
781 * removed!
782 * removed!
783 * removed!
784 * removed!
785 * removed!
786 * removed!
787 * removed!
788 * removed!
789 * removed!
790 * removed!
791 * removed!
792 * removed!
793 * removed!
794 * removed!
795 * removed!
796 * removed!
797 * removed!
798 * removed!
799 * removed!
800 * removed!
801 * removed!
802 * removed!
803 * removed!
804 * removed!
805 * removed!
806 * removed!
807 *
808 * removed!
809 * removed!
810 * removed!
811 *
812 * removed!
813 * removed!
814 * removed!
815 *
816 * removed!
817 * removed!
818 * removed!
819 *
820 * removed!
821 * removed!
822 * removed!
823 *
824 * removed!
825 * removed!
826 * removed!
827 *
828 * removed!
829 * removed!
830 * removed!
831 *
832 * removed!
833 * removed!
834 * removed!
835 *
836 * removed!
837 * removed!
838 * removed!
839 *
840 * removed!
841 * removed!
842 * removed!
843 *
844 * removed!
845 * removed!
846 * removed!
847 *
848 * removed!
849 * removed!
850 * removed!
851 *
852 * removed!
853 * removed!
854 * removed!
855 *
856 * removed!
857 * removed!
858 * removed!
859 *
860 * removed!
861 * removed!
862 * removed!
863 *
864 * removed!
865 * removed!
866 * removed!
867 *
868 * removed!
869 * removed!
870 * removed!
871 * removed!
872 *
873 * removed!
874 * removed!
875 * removed!
876 *
877 * removed!
878 * removed!
879 * removed!
880 *
881 * removed!
882 * removed!
883 * removed!
884 *
885 * removed!
886 * removed!
887 * removed!
888 *
889 * removed!
890 * removed!
891 * removed!
892 *
893 * removed!
894 * removed!
895 * removed!
896 *
897 * removed!
898 * removed!
899 * removed!
900 *
901 * removed!
902 * removed!
903 * removed!
904 *
905 * removed!
906 * removed!
907 * removed!
908 *
909 ****************************************************************************/
910
911#ifndef _KAL_PUBLIC_DEFS_H
912#define _KAL_PUBLIC_DEFS_H
913
914#include "kal_general_types.h"
915#ifndef _DEBUG_MSG_SAP_
916#include "stack_config.h" /* module_type & task_indx_type */
917#endif
918#include "stack_msgs.h" /* sap_type & msg_type */
919#include "hisr_config_defs.h" /* kal_hisr */
920
921/*******************************************************************************
922 * Type Definitions
923 *******************************************************************************/
924
925/* opaque type for task identity */
926typedef struct {
927 kal_uint8 unused;
928} kal_taskid_s;
929typedef kal_taskid_s *kal_taskid;
930
931/* opaque type for hisr identity */
932typedef struct {
933 kal_uint8 unused;
934} kal_hisrid_s;
935typedef kal_hisrid_s *kal_hisrid;
936
937/* opaque type for semaphore identity */
938typedef struct {
939 kal_uint8 unused;
940} kal_semid_s;
941typedef kal_semid_s *kal_semid;
942
943/* opaque type for message queue identity */
944typedef struct {
945 kal_uint8 unused;
946} kal_msgqid_s;
947typedef kal_msgqid_s *kal_msgqid;
948
949/* contain message queue information */
950typedef struct {
951 /* current number of pending messages in message queue */
952 kal_uint32 pending_msgs;
953 /* maximum number of pending messages in message queue */
954 kal_uint32 max_msgs;
955} kal_msgq_info;
956
957/* opaque type for mutex identity */
958typedef struct {
959 kal_uint8 unused;
960} kal_mutexid_s;
961
962typedef kal_mutexid_s *kal_mutexid;
963
964/* opaque type for event group identity */
965typedef struct {
966 kal_uint8 unused;
967} kal_eventgrpid_s;
968typedef kal_eventgrpid_s *kal_eventgrpid;
969
970/* opaque type for spinlock identity */
971typedef struct {
972 kal_uint8 unused;
973} kal_spinlockid_s;
974typedef kal_spinlockid_s* kal_spinlockid;
975typedef kal_spinlockid_s* kal_lockid;
976
977/* NOTE: Atomic variables must be in cacheable memory */
978typedef kal_int32 kal_atomic_int32;
979typedef kal_uint32 kal_atomic_uint32;
980
981/* opaque type for partition memory pool identity */
982typedef struct {
983 kal_uint8 unused;
984} kal_poolid_s;
985
986typedef kal_poolid_s *kal_poolid;
987
988/* opaque type for Application Dynamic Memory identity */
989typedef struct {
990 kal_uint8 unused;
991} KAL_ADM_ID_s;
992typedef KAL_ADM_ID_s *KAL_ADM_ID;
993
994/* opaque type for Application Fix Memory identity */
995typedef struct {
996 kal_uint8 unused;
997} KAL_AFM_ID_s;
998typedef KAL_AFM_ID_s *KAL_AFM_ID;
999
1000/* opaque type for First Level Memory Manager identity */
1001typedef struct {
1002 kal_uint8 unused;
1003} KAL_FLMM_ID_s;
1004typedef KAL_FLMM_ID_s *KAL_FLMM_ID;
1005
1006/* opaque type for Second Level Memory Manager identity */
1007typedef struct {
1008 kal_uint8 unused;
1009} KAL_SLMM_ID_s;
1010typedef KAL_SLMM_ID_s *KAL_SLMM_ID;
1011
1012/* opaque type for enhance mutex identity */
1013typedef struct {
1014 kal_uint8 unused;
1015} kal_enhmutexid_s;
1016typedef kal_enhmutexid_s *kal_enhmutexid;
1017
1018/* opaque type for kal timer identity */
1019typedef struct {
1020 kal_uint8 unused;
1021} kal_timerid_s;
1022
1023typedef kal_timerid_s *kal_timerid;
1024
1025/* opaque type for event scheduler identity */
1026typedef struct event_scheduler {
1027 kal_uint8 unused;
1028} event_scheduler;
1029
1030/* opaque type for event identity */
1031typedef struct {
1032 kal_uint8 unused;
1033} eventid_s;
1034
1035typedef eventid_s *eventid;
1036
1037/* task entry function parameter */
1038typedef struct task_entry_struct {
1039 /* paremeter of task main entry*/
1040 kal_uint32 parameter;
1041} task_entry_struct;
1042
1043/* general function pointer prototype */
1044typedef void (*kal_func_ptr)(void);
1045/* task entry function prototype */
1046typedef void (*kal_task_func_ptr)(task_entry_struct *task_entry_ptr);
1047/* hisr entry function prototype */
1048typedef void (*kal_hisr_func_ptr)(void);
1049/* timer (kal timer, stack timer, event scheduler) callback function prototype */
1050typedef void (*kal_timer_func_ptr)(void *param_ptr);
1051/* IRQ ISR handler function prototype */
1052typedef void (*irq_isr_hdlr_ptr)(kal_uint32);
1053/* IRQ ISR handler function prototype */
1054typedef void (*irq_init_func_ptr)(kal_uint32);
1055/* task clean up handler function prototype */
1056typedef void (*kal_task_clean_hdlr_ptr)(void);
1057
1058/*************************************************************************
1059 * Type Definitions for ILM communication
1060 *************************************************************************/
1061
1062/* transfer direction flags for local_para & peer_buff, only TD_RESET is meaningful now */
1063typedef enum {
1064 TD_UL = 0x01 << 0, /* Uplink Direction, obsolete */
1065 TD_DL = 0x01 << 1, /* Downlink Direction, obsolete */
1066 TD_CTRL = 0x01 << 2, /* Control Plane. Both directions, obsolete */
1067 TD_RESET = 0x01 << 3 /* Reset buffer content to 0 */
1068} transfer_direction;
1069
1070#define LOCAL_PARA_HDR \
1071 kal_uint8 ref_count; \
1072 kal_uint8 lp_reserved; \
1073 kal_uint16 msg_len;
1074/* common local_para header */
1075typedef struct local_para_struct {
1076 /* ref_count: reference count;
1077 * lp_reserved : reserved for future;
1078 * msg_len : total length including this header.
1079 */
1080 LOCAL_PARA_HDR
1081#ifdef __BUILD_DOM__
1082 ;
1083#endif
1084} local_para_struct;
1085
1086#define PEER_BUFF_HDR \
1087 kal_uint16 pdu_len; \
1088 kal_uint8 ref_count; \
1089 kal_uint8 pb_resvered; \
1090 kal_uint16 free_header_space; \
1091 kal_uint16 free_tail_space;
1092/* peer buffer header, user should treat it as opaque type */
1093typedef struct peer_buff_struct {
1094 PEER_BUFF_HDR
1095#ifdef __BUILD_DOM__
1096 ;
1097#endif
1098} peer_buff_struct;
1099
1100typedef kal_uint16 interrupt_type;
1101typedef kal_uint16 module_type;
1102typedef kal_uint16 sap_type;
1103typedef kal_uint16 msg_type;
1104
1105/* The Interlayer Message structure, which is exchaged between modules. */
1106typedef struct ilm_struct {
1107 module_type src_mod_id; /* Source module ID of the message. */
1108 module_type dest_mod_id; /* Destination module ID of the message. */
1109 sap_type sap_id; /* Service Access Pointer Identifier. */
1110 msg_type msg_id; /* Message identifier */
1111 local_para_struct *local_para_ptr; /* local_para pointer */
1112 peer_buff_struct * peer_buff_ptr; /* peer_buff pointer */
1113} ilm_struct;
1114
1115/* The Interlayer Inline Message structure, which is exchaged between modules. */
1116typedef struct
1117{
1118 module_type src_mod_id; /* Source module ID of the message. */
1119 module_type dest_mod_id; /* Destination module ID of the message. */
1120 sap_type sap_id; /* Service Access Pointer Identifier. */
1121 msg_type msg_id; /* Message identifier */
1122 kal_uint32 data[2]; /* Inline data */
1123} inl_struct;
1124
1125/* Union wrapper type for ILM and inline (INL) structures */
1126typedef union
1127{
1128 ilm_struct ilm;
1129 inl_struct inl;
1130} ilm_inl_u;
1131
1132/* maximum payload size in an inline-ILM message */
1133#define MSG_INLINE_ILM_MAX_PAYLOAD \
1134 (sizeof(local_para_struct *) + sizeof(peer_buff_struct *))
1135
1136typedef enum {
1137 dummy_timer_status1,
1138 dummy_timer_status2,
1139} dummy_es_timer_status;
1140
1141typedef struct event_scheduler_dummy {
1142 kal_uint32 reserved[4];
1143 kal_uint8 reserved1[3];
1144 kal_bool reserved2;
1145 kal_uint32 reserved3[2];
1146 dummy_es_timer_status es_timer_status;
1147 module_type dest_mod_id;
1148 kal_uint16 es_user_index;
1149 kal_uint32 reserved4[2];
1150} event_scheduler_dummy;
1151
1152typedef event_scheduler_dummy timer_expiry_struct;
1153
1154#if defined KAL_ON_OSCAR
1155#ifdef DEBUG_BUF2
1156typedef struct {
1157 void * start_address;
1158 kal_char file_name[32];
1159 kal_uint32 line;
1160 kal_uint32 alloc_id;
1161 kal_uint32 size;
1162 kal_uint32 ticks_alloc;
1163 kal_uint32 reserved;
1164} kal_ctrl_buff_stats;
1165#endif /* DEBUG_BUF2 */
1166#endif
1167
1168/* DOM-NOT_FOR_SDK-BEGIN */
1169/*******************************************************************************
1170 * Constant definition
1171 *******************************************************************************/
1172#if defined(KAL_ON_OSCAR)
1173
1174#define KAL_CONSUME 0x4 //OSC_ACTION_CLS
1175#define KAL_AND 0x1 //OSC_ACTION_FULL_SET
1176#define KAL_AND_CONSUME \
1177 (KAL_AND | KAL_CONSUME) //OSC_ACTION_FULL_SET | OSC_ACTION_CLS
1178#define KAL_OR 0x2 //OSC_ACTION_PART_SET
1179#define KAL_OR_CONSUME (KAL_OR | KAL_CONSUME) //OSC_ACTION_PART_SET | OSC_ACTION_CLS
1180#define KAL_NO_SUSPEND 0 //OSC_TIMEOUT_NONE
1181#define KAL_SUSPEND 0xFFFFFFFF //OSC_TIMEOUT_FOREVER
1182
1183#elif defined(KAL_ON_OSABS)
1184
1185typedef enum {
1186 KAL_CONSUME,
1187 KAL_AND,
1188 KAL_AND_CONSUME,
1189 KAL_OR,
1190 KAL_OR_CONSUME,
1191 KAL_NO_SUSPEND,
1192 KAL_SUSPEND
1193};
1194
1195#elif defined(KAL_ON_MERTOS)
1196
1197#define KAL_CONSUME 0x10
1198#define KAL_AND 0x02
1199#define KAL_AND_CONSUME 0x12
1200#define KAL_OR 0x01
1201#define KAL_OR_CONSUME 0x11
1202#define KAL_NO_SUSPEND 0
1203#define KAL_SUSPEND 0xFFFFFFFFUL
1204
1205#endif
1206
1207#define KAL_NILTASK_ID (kal_taskid) NULL
1208#define KAL_NILHISR_ID (kal_hisrid) NULL
1209#define KAL_NILTIMER_ID (kal_timerid) NULL
1210#define KAL_NILPOOL_ID (kal_poolid) NULL
1211#define KAL_NILMUTEX_ID (kal_mutexid) NULL
1212#define KAL_NILEVENTGRP_ID (kal_eventgrpid) NULL
1213#define KAL_NILSEM_ID (kal_semid) NULL
1214#define KAL_NILQ_ID (kal_msgqid) NULL
1215#define KAL_NILSEC (kal_uint32)0xffffffff
1216#define KAL_NILMSEC (kal_uint16)0xffff
1217#define KAL_NILTICK (kal_uint32)0xffffffff
1218#define KAL_NILSPINLOCK_ID (kal_spinlockid) NULL
1219/* DOM-NOT_FOR_SDK-END */
1220
1221/*******************************************************************************
1222 * Constant definition Referenced By Public APIs
1223 *******************************************************************************/
1224typedef enum {
1225 KAL_SW_CONTEXT_INIT,
1226 KAL_SW_CONTEXT_TASK,
1227 KAL_SW_CONTEXT_LISR,
1228 KAL_SW_CONTEXT_HISR,
1229 KAL_SW_CONTEXT_EXCP,
1230 KAL_SW_CONTEXT_TYPE_END
1231} kal_sw_context_type;
1232
1233/* boot mode enumeration */
1234typedef enum {
1235 /* factory mode, system boot up to communicate with factory tools */
1236 FACTORY_BOOT = 0,
1237 /* normal mode */
1238 NORMAL_BOOT = 1,
1239 /* USB mode, system boot up when USB charger connect */
1240 USBMS_BOOT = 2,
1241 /* Firmware Update Engine mode, system run inside FUE */
1242 FUE_BOOT = 3,
1243 /* number of known boot mode */
1244 NUM_OF_BOOT_MODE,
1245 /* unknown mode */
1246 UNKNOWN_BOOT_MODE = 0xff
1247} boot_mode_type;
1248
1249/* adm feature option used in kal_adm_create2 */
1250/* DOM-NOT_FOR_SDK-BEGIN */
1251#define KAL_ADM_OLD_ISLOGGING_FLAG 0x1
1252#define KAL_ADM_PROFILE_FLAG 0x2
1253/* DOM-NOT_FOR_SDK-END */
1254/* put a guard word before and after each user buffer to detect memory corruption */
1255#define KAL_ADM_GUARDIAN_FLAG 0x4
1256/* has an extensible header immediate before each user buffer */
1257#define KAL_ADM_EXTHEADER_FLAG 0x8
1258/* on kal_adm_delete(), if any user buffer is not free yet, system enter fatal error handling */
1259#define KAL_ADM_CLEANDELETE_FLAG 0x10
1260/* if kal_adm_realloc() failed, system enter fatal error handling */
1261#define KAL_ADM_REALLOCFAIL_FATAL_FLAG 0x20
1262/* if kal_adm_realloc() failed, free old user buffer before return NULL */
1263#define KAL_ADM_REALLOCFAIL_FREE_FLAG 0x40
1264#define KAL_ADM_LIGHTCHECK_FREEPATTERN_FLAG 0x80
1265#define KAL_ADM_FREEPATTERN_FLAG 0x100
1266#define KAL_ADM_PROFILE_USER 0x200
1267#define KAL_ADM_CONCURRENT_FLAG 0x400
1268/* DOM-NOT_FOR_SDK-BEGIN */
1269/* OR of all KAL_ADM_*_FLAG, should not used by users */
1270#define KAL_ADM_VALID_FLAG 0x7ff
1271/* DOM-NOT_FOR_SDK-END */
1272
1273/* DOM-NOT_FOR_SDK-BEGIN */
1274/* ADM allocation options */
1275#define ADM_OPT_ALIGN_ALLOC (0x01 << 16)
1276#define ADM_CACHE_1_CHANNEL_COVER (0x02 << 16)
1277#define ADM_CACHE_ALL_CHANNEL_COVER (0x04 << 16)
1278#define ADM_OPT_TOPMOST_ALLOC (0x08 << 16)
1279/* allocate from the bottom(lower address)*/
1280#define ADM_OPT_BOTTOMMOST_ALLOC (0x10 << 16)
1281/* the highest bit is reserved to avoid signed overflow warning */
1282#define ADM_OPT_MASK (0x7fff << 16)
1283/* DOM-NOT_FOR_SDK-END */
1284/* Calculate how many words needed for an extheader (argument of extheader_size_in_word in kal_adm_create2) */
1285#define KAL_ADM_EXTHEADER_WORDS(x) \
1286 (((x) + 3) / sizeof(kal_uint32) * sizeof(kal_uint32))
1287
1288/* DOM-NOT_FOR_SDK-BEGIN */
1289/* ADM POOL SIZE CALCULATE MACROS BEGIN */
1290/* NOTE: */
1291/* following sizes are hard size for ADM structure, user must not */
1292/* use it directly. and it must be sync with kal_adm.h when ADM */
1293/* structure has been changed. */
1294/* macros internal begin */
1295#define ADM_CB_SIZE 20
1296#define ADM_BL_SIZE 16
1297#define ADM_MB_MINI_HEAD_SIZE 8
1298#define ADM_MB_HEAD_SIZE 16
1299#define ADM_MB_HEADGUARD_SIZE 4
1300#define ADM_MB_FOOTGUARD_SIZE 4
1301#define ADM_MB_OLDLOGGING_EXTHEADER_SIZE 8
1302/* macros internal end */
1303
1304/* macros external begin */
1305#define ADM_DEFAULT_BL_NUM 7
1306#define ADM_MB_OVERHEAD(flags, extheader_size_in_word) \
1307 (ADM_MB_MINI_HEAD_SIZE + \
1308 ((flags)&KAL_ADM_OLD_ISLOGGING_FLAG \
1309 ? (ADM_MB_HEADGUARD_SIZE + ADM_MB_FOOTGUARD_SIZE + \
1310 ADM_MB_OLDLOGGING_EXTHEADER_SIZE) \
1311 : 0) + \
1312 ((flags)&KAL_ADM_GUARDIAN_FLAG \
1313 ? (ADM_MB_HEADGUARD_SIZE + ADM_MB_FOOTGUARD_SIZE) \
1314 : 0) + \
1315 ((flags)&KAL_ADM_EXTHEADER_FLAG ? (extheader_size_in_word)*4 : 0))
1316
1317#define ADM_POOLSIZE_CALC(bl_num, user_pool_size) \
1318 (ADM_CB_SIZE + ADM_BL_SIZE * (bl_num) + ADM_MB_MINI_HEAD_SIZE + \
1319 ADM_MB_HEADGUARD_SIZE + ADM_MB_FOOTGUARD_SIZE + ADM_MB_MINI_HEAD_SIZE + \
1320 ADM_MB_HEADGUARD_SIZE + ADM_MB_FOOTGUARD_SIZE + (user_pool_size))
1321/* macros external end */
1322/* ADM POOL SIZE CALCULATE MACROS END */
1323/* DOM-NOT_FOR_SDK-END */
1324
1325/* DOM-NOT_FOR_SDK-BEGIN */
1326/* AFM allocation options */
1327#define AFM_OPT_NONE 0x0000
1328/* user buffers in this AFM is aligned to CPU cache line (32 bytes) */
1329#define AFM_OPT_ALIGN_ALLOC 0x0001
1330#define AFM_OPT_DBG 0x0002
1331#define AFM_OPT_CUSLOG 0x0004
1332/* when search avaiable user buffer, don't try to search subpools bigger than fittest subpool */
1333#define AFM_OPT_NOFALLBACK_ALLOC 0x0008
1334#define AFM_OPT_DBG_FREEPATTERN 0x0010
1335#define AFM_OPT_CONCURRENT 0x0020
1336#define AFM_OPT_PROFILE_USER 0x0040
1337#define AFM_OPT_VALID 0x7F /* OR of all AFM_OPT_*, should not used by users */
1338
1339#define AFM_LOG_PAUSE 0x01
1340#define AFM_LOG_CLEAR 0x02
1341#define AFM_LOG_CLR AFM_LOG_CLEAR /* for compatible only */
1342#define AFM_LOG_START 0x04
1343#define AFM_LOG_STR AFM_LOG_START /* for compatible only */
1344/* DOM-NOT_FOR_SDK-END */
1345
1346/* DOM-NOT_FOR_SDK-BEGIN */
1347/* AFM POOL SIZE CALCULATE MACROS BEGIN*/
1348/* NOTE: */
1349/* following sizes are hard size for AFM structure, user MUST NOT */
1350/* use it directly. and it must be sync with kal_afm.h when AFM */
1351/* structure has been changed. */
1352/* macros internal begin*/
1353#define AFM_CB_T_SIZE 20
1354#define AFM_POOL_CB_T_SIZE 20
1355#define AFM_POOL_CUSLOG_T_SIZE 4
1356#define AFM_MB_HEAD_T_SIZE 8
1357#define AFM_MB_HEADGUD_T_SIZE 16
1358#define AFM_MB_FOOTGUD_T_SIZE 4
1359#define ALIGNTO4(sz) (((sz) + 3) & ~3)
1360#define ALIGNTOCACHELINE(sz) \
1361 (((sz) + CPU_CACHE_LINE_SIZE - 1) & ~(CPU_CACHE_LINE_SIZE - 1))
1362/* macros internal end*/
1363
1364/* macros external begin*/
1365#define AFM_MB_OVERHEAD(option) \
1366 (AFM_MB_HEAD_T_SIZE + \
1367 (option & AFM_OPT_DBG ? AFM_MB_HEADGUD_T_SIZE + AFM_MB_FOOTGUD_T_SIZE : 0))
1368#if defined(__MTK_TARGET__) && \
1369 (defined(__ARM9_MMU__) || defined(__DYNAMIC_SWITCH_CACHEABILITY__))
1370#define AFM_POOL_OVERHEAD(option, subpool_count) \
1371 (AFM_CB_T_SIZE + AFM_POOL_CB_T_SIZE * subpool_count + \
1372 (((option)&AFM_OPT_CUSLOG) ? AFM_POOL_CUSLOG_T_SIZE * (subpool_count) : 0) + \
1373 4 + (((option)&AFM_OPT_ALIGN_ALLOC) ? CPU_CACHE_LINE_SIZE : 0))
1374#define AFM_SUBPOOL_OVERHEAD(option, sz, nr) \
1375 (option & AFM_OPT_ALIGN_ALLOC \
1376 ? (nr) * \
1377 (ALIGNTOCACHELINE(sz) + ALIGNTOCACHELINE(AFM_MB_OVERHEAD(option))) \
1378 : (nr) * (ALIGNTO4(sz) + AFM_MB_OVERHEAD(option)))
1379#else
1380#define AFM_POOL_OVERHEAD(option, subpool_count) \
1381 AFM_CB_T_SIZE + AFM_POOL_CB_T_SIZE *(subpool_count) + \
1382 ((option & AFM_OPT_CUSLOG) ? AFM_POOL_CUSLOG_T_SIZE * subpool_count : 0) + \
1383 4
1384#define AFM_SUBPOOL_OVERHEAD(option, sz, nr) \
1385 (nr) * (ALIGNTO4(sz) + AFM_MB_OVERHEAD(option))
1386#endif
1387/* macros external end*/
1388/* AFM POOL SIZE CALCULATE MACROS END*/
1389#define AFM_SUBPOOL_END_PATTERN 0xFFFFFFFF
1390/* DOM-NOT_FOR_SDK-END */
1391
1392#if defined(__MTK_TARGET__) && defined(__KAL_STACK_ISOLATION__)
1393
1394#define KAL_VM_PAGESIZE (4096) /* KAL VM page size */
1395
1396#ifdef __ARM9_MMU__
1397#define KAL_VM_STACK_PAGESIZE 1024
1398#else //!__ARM9_MMU__
1399#define KAL_VM_STACK_PAGESIZE 4096
1400#endif //__ARM9_MMU__
1401#define KAL_VM_STACK_UPALIGN(x) \
1402 (((x) + KAL_VM_STACK_PAGESIZE - 1) / KAL_VM_STACK_PAGESIZE * \
1403 KAL_VM_STACK_PAGESIZE)
1404#define KAL_VM_STACK_ALIGNED(x) ((x) & ~(KAL_VM_STACK_PAGESIZE - 1) == 0)
1405#define kal_vm_stack_begin() (custom_get_FLMM_STACKSPACE_Base())
1406#define kal_vm_stack_end() (custom_get_FLMM_STACKSPACE_End())
1407
1408/* is KAL VM page size aligned */
1409#define KAL_VM_PAGE_ALIGNED(x) (!(((kal_uint32)(x)) & (KAL_VM_PAGESIZE - 1)))
1410/* align to next KAL VM page size */
1411#define KAL_VM_PAGE_UPALIGN(x) \
1412 ((((kal_uint32)(x)) + KAL_VM_PAGESIZE - 1) & ~(KAL_VM_PAGESIZE - 1))
1413/* align to KAL VM page size */
1414#define KAL_VM_PAGE_DOWNALIGN(x) (((kal_uint32)(x)) & ~(KAL_VM_PAGESIZE - 1))
1415/* how many bytes needed to align to next KAL VM page size */
1416#define KAL_VM_PAGE_MARGIN(x) (KAL_VM_PAGE_UPALIGN(x) - (x))
1417
1418#endif /* #if defined(__MTK_TARGET__) && defined(__KAL_STACK_ISOLATION__) */
1419
1420/* define maximum memory region number can be dump via catcher on EXT_ASSERT_DUMP */
1421#define ASSERT_DUMP_PARAM_MAX 10
1422
1423/* memory regions dump via catcher */
1424typedef struct ASSERT_DUMP_PARAM {
1425 kal_uint32 addr[ASSERT_DUMP_PARAM_MAX]; /* start address of this memory region */
1426 kal_uint32 len[ASSERT_DUMP_PARAM_MAX]; /* length of this memory region */
1427} ASSERT_DUMP_PARAM_T;
1428
1429#if defined(__nanomips__)
1430/* Cited from MIPS's ticket 106287
1431Below are the reserved code and usages from our experts' information.
1432There are 2 codes for TRAP, 0 for BREAK and optional 1 for SYSCALL in baremetal environment.
1433As it stands we have two trap codes with bare metal programs which are 0x7 for divide by zero
1434and also 0x0 which signals some unspecified form of error.
1435Because we guarantee to have TRAP instructions in nanoMIPS there are no reserved BREAK codes in bare metal environments,
1436the OS would be responsible for allocating those.
1437We do have one reserved SYSCAL which is operation '1' and this is for our semi-hosting implementation for interacting with an RTOS,
1438simulators or debuggers to produce output on a terminal or other device; it gets handled by our example exception handlers and converted to an SDBBP 1 if it is being sent to a debugger.
1439Even though we reserve this it is only reserved if opting in to the semihosting support so MTK can still reuse it as you may not need to use our form of semi-hosting support.
1440
1441TEQ 0x7:
1442In interAptiv, mips32 use TEQ 0x7 to detect divide by zero and mips16 use BREAK 0x7.
1443We saw that nanoMips also use TEQ 0x7.
1444Traps for div by zero (TEQ 0x7) are disabled by default for -Os for code size reasons.
1445You can control this behavior with -m[no-]check-zero-division.
1446*/
1447
1448/*
1449BREAK[32] has 19 bits for code field
1450BREAK[16] has only 3 bits
1451*/
1452
1453typedef enum
1454{
1455 BREAK_USERBP = 0, /* can be used for sw break points */
1456
1457 KAL_FATAL_ERROR = 1,
1458 ASSERT_LINE = 2, /* Should be the ASSERT category first one for range checking */
1459 ASSERT_EXT1 = 3,
1460 ASSERT_EXT2 = 4,
1461 ASSERT_EXT3 = 5,
1462 ASSERT_CUS_MODID = 6,
1463 ASSERT_CUS_ADDR = 7,
1464 /* code larger than 7 will become 32-bit length instruction.
1465 should be only for low frequency usage for footprint*/
1466 ASSERT_EXL = 8,
1467 ASSERT_NATIVE = 9,
1468 ASSERT_EXT_DUMP = 10,
1469 ASSERT_CUS_MODID_EXT1 = 11,
1470 ASSERT_CUS_MODID_EXT2 = 12,
1471 ASSERT_CUS_MODID_EXT3 = 13,
1472 ASSERT_CUS_ADDR_EXT1 = 14,
1473 ASSERT_CUS_ADDR_EXT2 = 15,
1474 ASSERT_CUS_ADDR_EXT3 = 16,
1475 ASSERT_CUS_MOFID = 17,
1476 ASSERT_CUS_MOFID_EXT1 = 18,
1477 ASSERT_CUS_MOFID_EXT2 = 19,
1478 ASSERT_CUS_MOFID_EXT3 = 20,
1479 ASSERT_LAST_TYPE = ASSERT_CUS_MOFID_EXT3, /* Should be the ASSERT category last one for range checking */
1480 MAX_NANOMIPS_BREAK_CODE = 524287,
1481} break_codes;
1482
1483/* TRAP only used in TEQ instruction,
1484and TEQ[32] has 5 bits code field */
1485
1486typedef enum
1487{
1488 TRAP_IMGTEK_USED = 0, /* Reserved for MIPS */
1489 TRAP_RESERVED1 = 1,
1490 TRAP_RESERVED2 = 2,
1491 TRAP_RESERVED3 = 3,
1492 TRAP_RESERVED4 = 4,
1493 TRAP_RESERVED5 = 5,
1494 TRAP_RESERVED6 = 6,
1495 TRAP_DIVIDE_BY_ZERO = 7, /* from compiler generated checks */
1496 TRAP_RESERVED8 = 8,
1497 TRAP_RESERVED9 = 9,
1498 TRAP_RESERVED10 = 10,
1499 TRAP_RESERVED11 = 11,
1500 TRAP_RESERVED12 = 12,
1501 TRAP_RESERVED13 = 13,
1502 TRAP_RESERVED14 = 14,
1503 TRAP_RESERVED15 = 15,
1504
1505 MAX_TRAP_CODE = 31,
1506} trap_codes;
1507
1508/*
1509SYSCALL[32] has 18 bits code field,
1510SYSCALL[16] has 2 bits only */
1511
1512typedef enum
1513{
1514 SYSCALL_USERBP = 0, /* can be used for sw break points */
1515 SYSCALL_IMGTEK_USED = 1, /* Reserved for MIPS */
1516 SYSCALL_RESERVED2 = 2,
1517 /* if pc goes out of spram area, the fetched SPRAM cotent would be syscall 0x3.
1518 information provided by CPU owner */
1519 SYSCALL_EXEC_OUT_OF_SPRAM = 3,
1520
1521
1522 MAX_SYSCALL_CODE = 262143,
1523} syscall_codes;
1524
1525
1526
1527#else
1528/* break instruction codes. The first 16 codes are reserved and those might be used
1529 * by compiler, OS, or by debuggers. */
1530typedef enum {
1531 BREAK_USERBP = 0, /* can be used for sw break points */
1532 BREAK_RESERVED1 = 1,
1533 BREAK_RESERVED2 = 2,
1534 BREAK_RESERVED3 = 3,
1535 BREAK_RESERVED4 = 4,
1536 BREAK_SSTEPBP = 5,
1537 BREAK_OVERFLOW = 6, /* from compiler generated checks */
1538 BREAK_DIVIDE_BY_ZERO = 7, /* from compiler generated checks */
1539 BREAK_RANGE = 8, /* from compiler generated checks */
1540 BREAK_RESERVED9 = 9,
1541 BREAK_RESERVED10 = 10,
1542 BREAK_RESERVED11 = 11,
1543 BREAK_BUG = 12,
1544 BREAK_RESERVED13 = 13,
1545 BREAK_RESERVED14 = 14,
1546 BREAK_RESERVED15 = 15,
1547
1548 /* MTK allocated break codes */
1549 ASSERT_LINE = 16,
1550 ASSERT_EXT1 = 17,
1551 ASSERT_EXT2 = 18,
1552 ASSERT_EXT3 = 19,
1553 ASSERT_EXT_DUMP = 20,
1554 ASSERT_EXL = 21,
1555 ASSERT_NATIVE = 22,
1556 ASSERT_CUS_MODID = 23,
1557 ASSERT_CUS_MODID_EXT1 = 24,
1558 ASSERT_CUS_MODID_EXT2 = 25,
1559 ASSERT_CUS_MODID_EXT3 = 26,
1560 ASSERT_CUS_ADDR = 27,
1561 ASSERT_CUS_ADDR_EXT1 = 28,
1562 ASSERT_CUS_ADDR_EXT2 = 29,
1563 ASSERT_CUS_ADDR_EXT3 = 30,
1564 KAL_FATAL_ERROR = 31,
1565
1566
1567 /* These codes are used in mips16
1568 if pc goes out of spram area */
1569 BREAK_EXEC_OUT_OF_SPRAM3 = 60,
1570 BREAK_EXEC_OUT_OF_SPRAM2 = 61,
1571 BREAK_EXEC_OUT_OF_SPRAM0 = 62,
1572 BREAK_EXEC_OUT_OF_SPRAM1 = 63,
1573
1574 /* codes from 24 to 63 are free to use */
1575
1576 /* in mips16, break instruction code field is 6 bits. With mips32 break instruction,
1577 * the code field is 20 bits but to keep code compatible use only first 64 codes */
1578 MAX_MIPS16_BREAK_CODE = 64,
1579} break_codes;
1580
1581typedef enum {
1582 TRAP_USERBP = 0, /* can be used for sw break points */
1583 TRAP_RESERVED1 = 1,
1584 TRAP_RESERVED2 = 2,
1585 TRAP_RESERVED3 = 3,
1586 TRAP_RESERVED4 = 4,
1587 TRAP_SSTEPBP = 5,
1588 TRAP_OVERFLOW = 6, /* from compiler generated checks */
1589 TRAP_DIVIDE_BY_ZERO = 7, /* from compiler generated checks */
1590 TRAP_RANGE = 8, /* from compiler generated checks */
1591 TRAP_RESERVED9 = 9,
1592 TRAP_RESERVED10 = 10,
1593 TRAP_RESERVED11 = 11,
1594 TRAP_BUG = 12,
1595 TRAP_RESERVED13 = 13,
1596 TRAP_RESERVED14 = 14,
1597 TRAP_RESERVED15 = 15,
1598
1599 /* codes from 23 to 63 are free to use */
1600
1601 MAX_TRAP_CODE = 1023,
1602} trap_codes;
1603#endif
1604
1605typedef enum {
1606 THREAD_UNDERFLOW = 0,
1607 THREAD_OVERFLOW = 1,
1608 THREAD_INVALID_YIELD_QUALIFIER = 2,
1609 THREAD_GATING_STORAGE = 3,
1610 THREAD_YIELD_SCHEDULER = 4,
1611 THREAD_GS_SCHEDULER = 5,
1612 THREAD_RESERVED6 = 6,
1613 THREAD_RESERVED7 = 7,
1614} thread_exception_codes;
1615
1616/* callback function of ASSERT_SPECIFIC_CALLBACK */
1617typedef void (*Assert_Specific_Callback)(void *para_ptr);
1618
1619
1620/* define wait mode */
1621typedef enum {
1622 /* don't wait if the condition is not satisfied and return error code */
1623 KAL_NO_WAIT = 0,
1624 /* wait until the condition is satisfied */
1625 KAL_INFINITE_WAIT,
1626} kal_wait_mode;
1627
1628/* define kal status */
1629typedef enum {
1630 KAL_SUCCESS, /* the operation is succeeded */
1631 KAL_ERROR, /* general error */
1632 KAL_Q_FULL, /* queue is full */
1633 KAL_Q_EMPTY, /* queue is empty */
1634 KAL_SEM_NOT_AVAILABLE, /* semaphore is not available at the moment */
1635 KAL_WOULD_BLOCK, /* the operation would block but requester don't want */
1636 KAL_MESSAGE_TOO_BIG, /* message is too big */
1637 KAL_INVALID_ID, /* an invalid identity */
1638 KAL_NOT_INITIALIZED, /* the resource is not initialized */
1639 KAL_INVALID_LENGHT, /* an invalid length */
1640 KAL_NULL_ADDRESS, /* the address is NULL */
1641 KAL_NOT_RECEIVE, /* no receiver want this message */
1642 KAL_NOT_SEND, /* can't send this message out */
1643 KAL_MEMORY_NOT_VALID, /* memory is corrupted */
1644 KAL_NOT_PRESENT, /* the request resource is not present */
1645 KAL_MEMORY_NOT_RELEASE, /* some memory is not released */
1646 KAL_TIMEOUT, /* the opearation time out */
1647 KAL_INIT_BEFORE, /* the resource has been init before*/
1648 KAL_SPINLOCK_NOT_AVAILABLE, /* spinlock is not available at the moment */
1649 KAL_ITC_NOT_AVAILABLE, /* itc cell is not available at the moment */
1650 KAL_TIMER_INVALID_TIMER_ID, /* KAL timer ID is invalid */
1651 KAL_TIMER_NON_TASK_CONTEXT, /* API is invoked in NON-Task context */
1652 KAL_TIMER_MAX_DELAY_OUT_OF_RANGE, /* max delay ticks is out of range */
1653 KAL_BUFF_NOT_AVAILABLE /* buffer is not available at the moment */
1654} kal_status;
1655
1656/* define kal task status */
1657typedef enum {
1658 /*------- error cases -------*/
1659 KAL_ERROR_RESERVE1, /**/
1660 KAL_ERROR_RESERVE2, /**/
1661 KAL_ERROR_RESERVE3, /**/
1662 KAL_ERROR_TCB, /* incorrect task control block */
1663 /*------- running case -------*/
1664 KAL_SCHEDULED, /* running */
1665 KAL_READY, /* ready to execute */
1666 /*------- suspend cases -------*/
1667 KAL_SLEEP_SUSPEND, /* waiting for sleep timeout */
1668 KAL_SEMA_SUSPEND, /* waiting for semaphore */
1669 KAL_ENHMUTEX_SUSPEND, /* waiting for enhanced mutex */
1670 KAL_OTHER_SUSPEND, /* waiting for other resource */
1671 KAL_EVENT_SUSPEND, /* waiting for event */
1672 KAL_QUEUE_SUSPEND, /* waiting for queue */
1673 KAL_RESERVE1_SUSPEND, /* */
1674 KAL_RESERVE2_SUSPEND, /* */
1675 KAL_RESERVE3_SUSPEND, /* */
1676 /*------- end case -------*/
1677 KAL_TERMINATED, /* task is terminated */
1678} kal_task_status;
1679
1680typedef enum {
1681 MODULE_OUT_OF_RANGE,
1682 MD1_MODULE,
1683 MD2_MODULE,
1684 MD3_MODULE,
1685 PCORE_MODULE,
1686} kal_module_core;
1687
1688#ifdef __STACK_ALIGN_MPU__
1689#define KAL_TASK_STACK_ALIGN (__STACK_ALIGN_MPU__)
1690#else
1691#define KAL_TASK_STACK_ALIGN (8U)
1692#endif
1693#define KAL_TASK_STACK_ALIGNMASK (KAL_TASK_STACK_ALIGN - 1)
1694#define KAL_STACK_ALIGN(SIZE) \
1695 (((SIZE + KAL_TASK_STACK_ALIGNMASK) / KAL_TASK_STACK_ALIGN) * \
1696 KAL_TASK_STACK_ALIGN)
1697
1698#if defined(__MTK_TARGET__)
1699/* define how many miliseconds per system tick represent */
1700#ifdef OS_TICK_PERIOD_US
1701/* the type of max delay is kal_uint16, thus max 65535*/
1702#define MAX_DELAY_UNLIMITED 65535
1703
1704/* For FPGA, clock rate will be 26MHz (us counter used),
1705 but L1 subframe tick is slowed down XXX times comparing to ASIC for Digital-I/Q test purpose */
1706#if defined(__HAPS_FPGA_CLK_ADJUST__) && defined(__EVENT_BASED_TIMER__)
1707#define KAL_CLOCK_RATIO_REAL 160 /* slowed down XXX times */
1708#else
1709#define KAL_CLOCK_RATIO_REAL 1
1710#endif
1711
1712#ifdef __HAPS_FPGA_CLK_ADJUST__
1713#define OST_TICK_UNIT OS_TICK_PERIOD_US
1714#define KAL_MICROSECS_PER_TICK ((float)OST_TICK_UNIT / KAL_CLOCK_RATIO_REAL)
1715#define KAL_MILLISECS_PER_TICK ((float)KAL_MICROSECS_PER_TICK / 1000)
1716
1717/* +(KAL_MICROSECS_PER_TICK/2)/KAL_MICROSECS_PER_TICK:
1718 * round the number to the nearest whole number
1719 */
1720/* 10 msec */
1721#define KAL_TICKS_10_MSEC \
1722 (((10000 + (OS_TICK_PERIOD_US / 2)) / OS_TICK_PERIOD_US) * KAL_CLOCK_RATIO_REAL)
1723/* 50 msec */
1724#define KAL_TICKS_50_MSEC \
1725 (((50000 + (OS_TICK_PERIOD_US / 2)) / OS_TICK_PERIOD_US) * KAL_CLOCK_RATIO_REAL)
1726/* 100 msec */
1727#define KAL_TICKS_100_MSEC \
1728 (((100000 + (OS_TICK_PERIOD_US / 2)) / OS_TICK_PERIOD_US) * KAL_CLOCK_RATIO_REAL)
1729/* 500 msec */
1730#define KAL_TICKS_500_MSEC \
1731 (((500000 + (OS_TICK_PERIOD_US / 2)) / OS_TICK_PERIOD_US) * KAL_CLOCK_RATIO_REAL)
1732/* 1024 msec */
1733#define KAL_TICKS_1024_MSEC \
1734 (((1024000 + (OS_TICK_PERIOD_US / 2)) / OS_TICK_PERIOD_US) * \
1735 KAL_CLOCK_RATIO_REAL)
1736/* 1 sec */
1737#define KAL_TICKS_1_SEC \
1738 (((1000000 + (OS_TICK_PERIOD_US / 2)) / OS_TICK_PERIOD_US) * \
1739 KAL_CLOCK_RATIO_REAL)
1740/* 2 sec */
1741#define KAL_TICKS_2_SEC \
1742 (((2000000 + (OS_TICK_PERIOD_US / 2)) / OS_TICK_PERIOD_US) * \
1743 KAL_CLOCK_RATIO_REAL)
1744/* 3 sec */
1745#define KAL_TICKS_3_SEC \
1746 (((3000000 + (OS_TICK_PERIOD_US / 2)) / OS_TICK_PERIOD_US) * \
1747 KAL_CLOCK_RATIO_REAL)
1748/* 5 sec */
1749#define KAL_TICKS_5_SEC \
1750 (((5000000 + (OS_TICK_PERIOD_US / 2)) / OS_TICK_PERIOD_US) * \
1751 KAL_CLOCK_RATIO_REAL)
1752/* 30 sec */
1753#define KAL_TICKS_30_SEC \
1754 (((30000000 + (OS_TICK_PERIOD_US / 2)) / OS_TICK_PERIOD_US) * \
1755 KAL_CLOCK_RATIO_REAL)
1756/* 1 min */
1757#define KAL_TICKS_1_MIN \
1758 (((60000000 + (OS_TICK_PERIOD_US / 2)) / OS_TICK_PERIOD_US) * \
1759 KAL_CLOCK_RATIO_REAL)
1760/* 64 ticks */
1761#define KAL_MSEC_64_TICKS \
1762 (((float)OS_TICK_PERIOD_US * 64 + (1000 / 2)) / 1000) / KAL_CLOCK_RATIO_REAL
1763/* 256 ticks */
1764#define KAL_MSEC_256_TICKS \
1765 (((float)OS_TICK_PERIOD_US * 256 + (1000 / 2)) / 1000) / KAL_CLOCK_RATIO_REAL
1766#else /* __HAPS_FPGA_CLK_ADJUST__ */
1767#define KAL_MICROSECS_PER_TICK OS_TICK_PERIOD_US
1768#define KAL_MILLISECS_PER_TICK ((float)KAL_MICROSECS_PER_TICK / 1000)
1769
1770#define KAL_TICKS_10_MSEC \
1771 ((10000 + (KAL_MICROSECS_PER_TICK / 2)) / KAL_MICROSECS_PER_TICK) /* 10 msec */
1772#define KAL_TICKS_50_MSEC \
1773 ((50000 + (KAL_MICROSECS_PER_TICK / 2)) / KAL_MICROSECS_PER_TICK) /* 50 msec */
1774#define KAL_TICKS_100_MSEC \
1775 ((100000 + (KAL_MICROSECS_PER_TICK / 2)) / KAL_MICROSECS_PER_TICK) /* 100 msec */
1776#define KAL_TICKS_500_MSEC \
1777 ((500000 + (KAL_MICROSECS_PER_TICK / 2)) / KAL_MICROSECS_PER_TICK) /* 500 msec */
1778#define KAL_TICKS_1024_MSEC \
1779 ((1024000 + (KAL_MICROSECS_PER_TICK / 2)) / \
1780 KAL_MICROSECS_PER_TICK) /* 1024 msec */
1781#define KAL_TICKS_1_SEC \
1782 ((1000000 + (KAL_MICROSECS_PER_TICK / 2)) / KAL_MICROSECS_PER_TICK) /* 1 sec */
1783#define KAL_TICKS_2_SEC \
1784 ((2000000 + (KAL_MICROSECS_PER_TICK / 2)) / KAL_MICROSECS_PER_TICK) /* 2 sec */
1785#define KAL_TICKS_3_SEC \
1786 ((3000000 + (KAL_MICROSECS_PER_TICK / 2)) / KAL_MICROSECS_PER_TICK) /* 3 sec */
1787#define KAL_TICKS_5_SEC \
1788 ((5000000 + (KAL_MICROSECS_PER_TICK / 2)) / KAL_MICROSECS_PER_TICK) /* 5 sec */
1789#define KAL_TICKS_30_SEC \
1790 ((30000000 + (KAL_MICROSECS_PER_TICK / 2)) / KAL_MICROSECS_PER_TICK) /* 30 sec */
1791#define KAL_TICKS_1_MIN \
1792 ((60000000 + (KAL_MICROSECS_PER_TICK / 2)) / KAL_MICROSECS_PER_TICK) /* 1 min */
1793#define KAL_MSEC_64_TICKS \
1794 ((KAL_MICROSECS_PER_TICK * 64 + (1000 / 2)) / 1000) /* 64 ticks */
1795#define KAL_MSEC_256_TICKS \
1796 ((KAL_MICROSECS_PER_TICK * 256 + (1000 / 2)) / 1000) /* 256 ticks */
1797#endif /* __HAPS_FPGA_CLK_ADJUST__ */
1798
1799
1800#define KAL_MICROSECS_PER_TICK_REAL OS_TICK_PERIOD_US
1801#define KAL_MILLISECS_PER_TICK_REAL ((float)KAL_MICROSECS_PER_TICK_REAL / 1000)
1802
1803/* 10 msec */
1804#define KAL_TICKS_10_MSEC_REAL \
1805 ((10000 + (KAL_MICROSECS_PER_TICK_REAL / 2)) / KAL_MICROSECS_PER_TICK_REAL)
1806/* 50 msec */
1807#define KAL_TICKS_50_MSEC_REAL \
1808 ((50000 + (KAL_MICROSECS_PER_TICK_REAL / 2)) / KAL_MICROSECS_PER_TICK_REAL)
1809/* 100 msec */
1810#define KAL_TICKS_100_MSEC_REAL \
1811 ((100000 + (KAL_MICROSECS_PER_TICK_REAL / 2)) / KAL_MICROSECS_PER_TICK_REAL)
1812/* 500 msec */
1813#define KAL_TICKS_500_MSEC_REAL \
1814 ((500000 + (KAL_MICROSECS_PER_TICK_REAL / 2)) / KAL_MICROSECS_PER_TICK_REAL)
1815/* 1024 msec */
1816#define KAL_TICKS_1024_MSEC_REAL \
1817 ((1024000 + (KAL_MICROSECS_PER_TICK_REAL / 2)) / KAL_MICROSECS_PER_TICK_REAL)
1818/* 1 sec */
1819#define KAL_TICKS_1_SEC_REAL \
1820 ((1000000 + (KAL_MICROSECS_PER_TICK_REAL / 2)) / KAL_MICROSECS_PER_TICK_REAL)
1821/* 2 sec */
1822#define KAL_TICKS_2_SEC_REAL \
1823 ((2000000 + (KAL_MICROSECS_PER_TICK_REAL / 2)) / KAL_MICROSECS_PER_TICK_REAL)
1824/* 3 sec */
1825#define KAL_TICKS_3_SEC_REAL \
1826 ((3000000 + (KAL_MICROSECS_PER_TICK_REAL / 2)) / KAL_MICROSECS_PER_TICK_REAL)
1827/* 5 sec */
1828#define KAL_TICKS_5_SEC_REAL \
1829 ((5000000 + (KAL_MICROSECS_PER_TICK_REAL / 2)) / KAL_MICROSECS_PER_TICK_REAL)
1830/* 30 sec */
1831#define KAL_TICKS_30_SEC_REAL \
1832 ((30000000 + (KAL_MICROSECS_PER_TICK_REAL / 2)) / KAL_MICROSECS_PER_TICK_REAL)
1833/* 1 min */
1834#define KAL_TICKS_1_MIN_REAL \
1835 ((60000000 + (KAL_MICROSECS_PER_TICK_REAL / 2)) / KAL_MICROSECS_PER_TICK_REAL)
1836/* 64 ticks */
1837#define KAL_MSEC_64_TICKS_REAL \
1838 ((KAL_MICROSECS_PER_TICK_REAL * 64 + (1000 / 2)) / 1000)
1839/* 256 ticks */
1840#define KAL_MSEC_256_TICKS_REAL \
1841 ((KAL_MICROSECS_PER_TICK_REAL * 256 + (1000 / 2)) / 1000)
1842
1843
1844#else /* else of OS_TICK_PERIOD_US */
1845#define KAL_MICROSECS_PER_TICK 4615
1846#define KAL_MILLISECS_PER_TICK 4.615
1847
1848/* DOM-NOT_FOR_SDK-BEGIN */
1849/* Following defines are internal to the KAL */
1850#define KAL_TICKS_10_MSEC (2) /* 10 msec */
1851#define KAL_TICKS_50_MSEC (10) /* 50 msec */
1852#define KAL_TICKS_100_MSEC (21) /* 100 msec */
1853#define KAL_TICKS_500_MSEC (108) /* 500 msec */
1854#define KAL_TICKS_1024_MSEC (221) /* 1024 msec */
1855#define KAL_TICKS_1_SEC (216) /* 1 sec */
1856#define KAL_TICKS_2_SEC (433) /* 2 sec */
1857#define KAL_TICKS_3_SEC (650) /* 3 sec */
1858#define KAL_TICKS_5_SEC (1083) /* 5 sec */
1859#define KAL_TICKS_30_SEC (6500) /* 30 sec */
1860#define KAL_TICKS_1_MIN (13000) /* 1 min */
1861#define KAL_MSEC_64_TICKS (295) /* 64 ticks */
1862#define KAL_MSEC_256_TICKS (1181) /* 256 ticks */
1863/* DOM-NOT_FOR_SDK-END */
1864
1865
1866#endif /* end of "else of OS_TICK_PERIOD_US" */
1867#endif
1868
1869
1870#ifdef KAL_ON_OSCAR
1871/* define how many miliseconds per system tick represent */
1872#define KAL_MILLISECS_PER_TICK 1
1873#define KAL_MICROSECS_PER_TICK 1000
1874#define MAX_DELAY_UNLIMITED 65535
1875
1876/* DOM-NOT_FOR_SDK-BEGIN */
1877/* Following defines are internal to the KAL */
1878#define KAL_SIM_MSECS_PER_TICK KAL_MILLISECS_PER_TICK
1879#define KAL_TICKS_10_MSEC (10 / KAL_SIM_MSECS_PER_TICK) /* 10 msec */
1880#define KAL_TICKS_50_MSEC (50 / KAL_SIM_MSECS_PER_TICK) /* 50 msec */
1881#define KAL_TICKS_100_MSEC (100 / KAL_SIM_MSECS_PER_TICK) /* 100 msec */
1882#define KAL_TICKS_500_MSEC (500 / KAL_SIM_MSECS_PER_TICK) /* 500 msec */
1883#define KAL_TICKS_1024_MSEC (1024 / KAL_SIM_MSECS_PER_TICK) /* 1024 msec */
1884#define KAL_TICKS_1_SEC (1000 / KAL_SIM_MSECS_PER_TICK) /* 1 sec */
1885#define KAL_TICKS_2_SEC (2000 / KAL_SIM_MSECS_PER_TICK) /* 2 sec */
1886#define KAL_TICKS_3_SEC (3000 / KAL_SIM_MSECS_PER_TICK) /* 3 sec */
1887#define KAL_TICKS_5_SEC (5000 / KAL_SIM_MSECS_PER_TICK) /* 5 sec */
1888#define KAL_TICKS_30_SEC (30000 / KAL_SIM_MSECS_PER_TICK) /* 30 sec */
1889#define KAL_TICKS_1_MIN (60000 / KAL_SIM_MSECS_PER_TICK) /* 1 min */
1890#define KAL_MSEC_64_TICKS (64 * KAL_SIM_MSECS_PER_TICK) /* 64 ticks */
1891#define KAL_MSEC_256_TICKS (256 * KAL_SIM_MSECS_PER_TICK) /* 256 ticks */
1892/* DOM-NOT_FOR_SDK-END */
1893
1894#define KAL_CLOCK_RATIO_REAL 1
1895#define KAL_MICROSECS_PER_TICK_REAL OS_TICK_PERIOD_US
1896#define KAL_MILLISECS_PER_TICK_REAL ((float)KAL_MICROSECS_PER_TICK_REAL / 1000)
1897
1898/* 10 msec */
1899#define KAL_TICKS_10_MSEC_REAL \
1900 ((10000 + (KAL_MICROSECS_PER_TICK_REAL / 2)) / KAL_MICROSECS_PER_TICK_REAL)
1901/* 50 msec */
1902#define KAL_TICKS_50_MSEC_REAL \
1903 ((50000 + (KAL_MICROSECS_PER_TICK_REAL / 2)) / KAL_MICROSECS_PER_TICK_REAL)
1904/* 100 msec */
1905#define KAL_TICKS_100_MSEC_REAL \
1906 ((100000 + (KAL_MICROSECS_PER_TICK_REAL / 2)) / KAL_MICROSECS_PER_TICK_REAL)
1907/* 500 msec */
1908#define KAL_TICKS_500_MSEC_REAL \
1909 ((500000 + (KAL_MICROSECS_PER_TICK_REAL / 2)) / KAL_MICROSECS_PER_TICK_REAL)
1910/* 1024 msec */
1911#define KAL_TICKS_1024_MSEC_REAL \
1912 ((1024000 + (KAL_MICROSECS_PER_TICK_REAL / 2)) / KAL_MICROSECS_PER_TICK_REAL)
1913/* 1 sec */
1914#define KAL_TICKS_1_SEC_REAL \
1915 ((1000000 + (KAL_MICROSECS_PER_TICK_REAL / 2)) / KAL_MICROSECS_PER_TICK_REAL)
1916/* 2 sec */
1917#define KAL_TICKS_2_SEC_REAL \
1918 ((2000000 + (KAL_MICROSECS_PER_TICK_REAL / 2)) / KAL_MICROSECS_PER_TICK_REAL)
1919/* 3 sec */
1920#define KAL_TICKS_3_SEC_REAL \
1921 ((3000000 + (KAL_MICROSECS_PER_TICK_REAL / 2)) / KAL_MICROSECS_PER_TICK_REAL)
1922/* 5 sec */
1923#define KAL_TICKS_5_SEC_REAL \
1924 ((5000000 + (KAL_MICROSECS_PER_TICK_REAL / 2)) / KAL_MICROSECS_PER_TICK_REAL)
1925/* 30 sec */
1926#define KAL_TICKS_30_SEC_REAL \
1927 ((30000000 + (KAL_MICROSECS_PER_TICK_REAL / 2)) / KAL_MICROSECS_PER_TICK_REAL)
1928/* 1 min */
1929#define KAL_TICKS_1_MIN_REAL \
1930 ((60000000 + (KAL_MICROSECS_PER_TICK_REAL / 2)) / KAL_MICROSECS_PER_TICK_REAL)
1931/* 64 ticks */
1932#define KAL_MSEC_64_TICKS_REAL \
1933 ((KAL_MICROSECS_PER_TICK_REAL * 64 + (1000 / 2)) / 1000)
1934/* 256 ticks */
1935#define KAL_MSEC_256_TICKS_REAL \
1936 ((KAL_MICROSECS_PER_TICK_REAL * 256 + (1000 / 2)) / 1000)
1937#endif /* KAL_ON_OSCAR */
1938
1939#if defined(KAL_ON_OSABS)
1940#define KAL_TICKS_10_MSEC (2) /* 10 msec */
1941#define KAL_TICKS_50_MSEC (10) /* 50 msec */
1942#define KAL_TICKS_100_MSEC (21) /* 100 msec */
1943#define KAL_TICKS_500_MSEC (108) /* 500 msec */
1944#define KAL_TICKS_1024_MSEC (221) /* 1024 msec */
1945#define KAL_TICKS_1_SEC (216) /* 1 sec */
1946#define KAL_TICKS_5_SEC (1083) /* 5 sec */
1947#define KAL_TICKS_30_SEC (6500) /* 30 sec */
1948#define KAL_TICKS_1_MIN (13001) /* 1 min */
1949#define KAL_MSEC_64_TICKS (295) /* 64 ticks */
1950#define KAL_MSEC_256_TICKS (1181) /* 256 ticks */
1951#endif
1952
1953#if defined(__ARMCC_VERSION)
1954#define INLINE __inline
1955#define INLINE_MODIFIER extern
1956#define INLINE_ALWAYS
1957#elif defined(__GNUC__) && !defined(__MINGW32__)
1958#define INLINE inline
1959#define INLINE_MODIFIER
1960#define INLINE_ALWAYS __attribute__((always_inline))
1961#elif defined(_MSC_VER) || defined(__MINGW32__)
1962#define INLINE __inline
1963#define INLINE_MODIFIER static
1964#define INLINE_ALWAYS
1965#endif /* Cross RVCT/GCC/VC9 Compiler marco definition */
1966
1967
1968#if defined(__ARMCC_VERSION)
1969#define GET_RETURN_ADDRESS(a) a = __return_address()
1970#elif defined(__GNUC__)
1971#define GET_RETURN_ADDRESS(a) a = (kal_uint32)__builtin_return_address(0)
1972#elif defined(_MSC_VER)
1973#define GET_RETURN_ADDRESS(a) a = (kal_uint32)_ReturnAddress()
1974#endif /* Cross RVCT/GCC/VC9 Compiler marco definition */
1975#if defined(__ARMCC_VERSION)
1976#define GET_STACK_POINTER(a) a = __current_sp()
1977#elif defined(__GNUC__)
1978#define GET_STACK_POINTER(a) a = (kal_uint32)__builtin_frame_address(0)
1979#elif defined(_MSC_VER)
1980#define GET_STACK_POINTER(a) __asm mov a, ESP
1981#endif /* Cross RVCT/GCC/VC9 Compiler marco definition */
1982
1983#if defined(__ARMCC_VERSION) && defined(__MTK_TARGET__)
1984#define PRAGMA_BEGIN_COMPILER_OPTIMIZE_DISABLE _Pragma("push") _Pragma("O0")
1985#define PRAGMA_END_COMPILER_OPTIMIZE_DISABLE _Pragma("pop")
1986#define PRAGMA_BEGIN_COMPILER_OPTIMIZE_TIME _Pragma("push") _Pragma("Otime")
1987#define PRAGMA_END_COMPILER_OPTIMIZE_TIME _Pragma("pop")
1988#elif defined(__GNUC__) && defined(__MTK_TARGET__)
1989#define PRAGMA_BEGIN_COMPILER_OPTIMIZE_DISABLE \
1990 _Pragma("GCC push_options") _Pragma("GCC optimize(\"-O0\")")
1991#define PRAGMA_END_COMPILER_OPTIMIZE_DISABLE _Pragma("GCC pop_options")
1992#define PRAGMA_BEGIN_COMPILER_OPTIMIZE_TIME \
1993 _Pragma("GCC push_options") _Pragma("GCC optimize(\"-O3\")")
1994#define PRAGMA_END_COMPILER_OPTIMIZE_TIME _Pragma("GCC pop_options")
1995#else
1996#define PRAGMA_BEGIN_COMPILER_OPTIMIZE_DISABLE
1997#define PRAGMA_END_COMPILER_OPTIMIZE_DISABLE
1998#define PRAGMA_BEGIN_COMPILER_OPTIMIZE_TIME
1999#define PRAGMA_END_COMPILER_OPTIMIZE_TIME
2000#endif /* Cross RVCT/GCC/VC9 Compiler marco definition */
2001
2002#define CBS_SCAN_EVENT_INDEX (1)
2003
2004#if defined(__EVENT_CNT_PROFILING__)
2005#define EVENT_CNT_SCAN_EVENT_INDEX (2)
2006
2007#define EVENT_CNT_SCAN_TIME KAL_TICKS_30_SEC
2008#endif /*__EVENT_CNT_PROFILING__*/
2009
2010/** Define the macro which tells compiler to reload all the variables from
2011 memory after this. It can ensure all variables are reloaded after entering
2012 a critical section. Otherwise compiler may optimize the code and result in
2013 a race condition which can't be observed in source code level */
2014#if defined(__ARMCC_VERSION)
2015#define STRONG_ORDER_MEMORY_LOAD()
2016#elif defined(__GNUC__)
2017#define STRONG_ORDER_MEMORY_LOAD() asm volatile("" : : : "memory")
2018#elif defined(_MSC_VER)
2019#define STRONG_ORDER_MEMORY_LOAD()
2020#endif /* Cross RVCT/GCC/VC9 Compiler marco definition */
2021
2022
2023/* opaque type for event group identity */
2024typedef struct {
2025#if defined(KAL_ON_MERTOS)
2026 kal_uint8 unused[96]; /* align to cache line size */
2027#elif defined(KAL_ON_OSCAR)
2028 kal_uint8 unused[76]; /* as sizeof(event group) in oscar */
2029#endif
2030} cc_eventgrpid;
2031
2032
2033/*******************************************************************************
2034 * Defines for ADT
2035 *******************************************************************************/
2036/* ADT */
2037struct adt_node;
2038
2039/* ilm free callback function prototype */
2040typedef void (*ilm_free_callback_t)(ilm_struct *ilm_ptr);
2041/* ilm ADT translator callback function prototype */
2042typedef void (*translator_adt_enc_callback_t)(const ilm_struct *ilm_ptr,
2043 struct adt_node **adt);
2044
2045
2046/* opaque type for RCU */
2047typedef struct {
2048 kal_uint8 unused;
2049} * kalcc_rcuid;
2050
2051
2052#define RCU_BUFF_HEADER kal_uint8 rcu_buff_header[32];
2053#define RCU_HEADER kal_uint8 rcu_header[32];
2054
2055#define RCU_MEMORY_SIZE(sz, nr) \
2056 (CPU_CACHE_LINE_SIZE + nr * (CPU_CACHE_LINE_SIZE + ALIGNTOCACHELINE(sz)))
2057
2058#define HRT_RCU_MEMORY_SIZE(sz, nr) \
2059 (CPU_CACHE_LINE_SIZE + nr * (CPU_CACHE_LINE_SIZE + ALIGNTOCACHELINE(sz)))
2060
2061
2062/*******************************************************************************
2063 * Defines for ITC
2064 *******************************************************************************/
2065typedef enum{
2066
2067 KAL_ITC_TAG_START = 0,
2068
2069 KAL_ITC_CORE01_RF = KAL_ITC_TAG_START, /* 00: EL1D RF Ctrl Sequence (use FIFO) */
2070 KAL_ITC_CORE01_SF, /* 01: EL1D SF Tick Handshake for Multi-Threading (use FIFO) */
2071 KAL_ITC_CORE0_CT, /* 02: Core0 Child Thread Wait */
2072 KAL_ITC_CORE1_CT, /* 03: Core1 Child Thread Wait */
2073 KAL_ITC_MT_CORE0_TC_STATUS, /* 04: CORE0 MT TC STATUS*/
2074 KAL_ITC_MT_CORE1_TC_STATUS, /* 05: CORE0 MT TC STATUS*/
2075 KAL_ITC_CORE012_HRT, /* 06: HRT API (RCU) Usage */
2076 KAL_ITC_OS_L_1, /* 07: OS Schedule Lock #1 */
2077 KAL_ITC_DHL_MDM, /* 08: DHL Modem Monitor Lock */
2078 KAL_ITC_DHL_ISR, /* 09: DHL ISR Logging Lock */
2079 KAL_ITC_PS_TL, /* 10: PS Trace Lock */
2080 KAL_ITC_L1_RF_REQ, /* 11: All RF requests from L1 modules running on Core 0/1 VPE 1 */
2081 KAL_ITC_L2_PS_LOCK, /* 12: 2/3G L2 PS lock (URLC/UMAC, RLC/MAC) */
2082 KAL_ITC_ERRC_LOCK, /* 13: ERRC Lock */
2083 KAL_ITC_C2K_SLEEP_L, /* 14: C2K Modem Timer ON/OFF */
2084 KAL_ITC_C2K_RCP_TX_L, /* 15: C2K L2/RCP TX Lock */
2085 KAL_ITC_C2K_SYS_PROTECT, /* 16: C2K common system API protection */
2086 KAL_ITC_DSP_SLEEP_L, /* 17: DSP sleep flow control */
2087 KAL_ITC_DSP_DOWNLOAD, /* 18: DSP dynamic download */
2088 KAL_ITC_GPT_DRIVER, /* 19: GPT driver */
2089 KAL_ITC_OS_L_2, /* 20: All Cores SST EMM */
2090 KAL_ITC_4GPS, /* 21: EL2 Task/LISR C.S. */
2091 KAL_ITC_EL1D_ALL, /* 22: EL1D Common Data Between Core0,1 HISR/Task and LISR */
2092 KAL_ITC_CORE012_GDMA, /* 23: All Cores HRT API Handle: GDMA */
2093 KAL_ITC_CORE012_INT, /* 24: All Cores HRT API Handle: Interrupt */
2094 KAL_ITC_DVFS, /* 25: DVFS request table and DVFS/PLL HW control */
2095 KAL_ITC_LOW_POWER, /* 26: Core0/1: L1 low power, sleep flow, 32k less, HW resource control */
2096 KAL_ITC_SLEEP_L, /* 27: MIPS core sleep flow */
2097 KAL_ITC_EL1D_LISR, /* 28: EL1D Common Data Between Core0,1 LISR */
2098 KAL_ITC_EL1D_GDMA_LIST, /* 29: EL1D GDMA Link List Handling in Core 0/1 VPE 0/1 */
2099 KAL_ITC_EL1CRX, /* 30: EL1 RX Common Data */
2100 KAL_ITC_EL1C_IDC, /* 31: EL1C IDC Common Data Between Core 0/1 VPE 0/1 */
2101 KAL_ITC_RTB_LOCK, /* 32: L1 RTB Critical Section */
2102 KAL_ITC_23G_L1_HRT_LOCK, /* 33: 2/3G L1 lock in Core 0/1 VPE 1 */
2103 KAL_ITC_23G_L1_LOCK, /* 34: 2/3G L1 lock in Core 0/1 VPE 0/1 */
2104 KAL_ITC_AMIF_LOCK, /* 35: AP Modem Interface */
2105 KAL_ITC_MEM_SLOW_DOWN, /* 36: Memset Slow Down */
2106 KAL_ITC_DCM, /* 37: DCM handler */
2107 KAL_ITC_ADT, /* 38: ADT */
2108 KAL_ITC_DSM, /* 39: DSM */
2109 KAL_ITC_ELM_LOCK, /* 40: ELM */
2110 KAL_ITC_EVRCP_RCP_RI, /* 41: lock between ECRCP and RCP_RI */
2111 KAL_ITC_CHLP_RCP_RI, /* 42: lock between CHIP and RCP_RI */
2112 KAL_ITC_PSTRACE_LOCK, /* 43: dhl PSTRACE*/
2113 KAL_ITC_EVSHED_EVNO_LOCK, /* 44: Event Scheduler number lock*/
2114 KAL_ITC_META_SYSTRACE_LOCK, /* 45: META_SYSTRACE lock*/
2115 KAL_ITC_ERRC_AFM_LOCK, /* 46: ERRC*/
2116 KAL_ITC_ERRC_C2K_AMIF_LOCK, /* 47: AMIF modeule lock between ERRC and C2K LISR(IRQ137)*/
2117 KAL_ITC_VPE0_DL, /* 48: Core0 VPE0 Dummy LISR*/
2118 KAL_ITC_VPE1_DL, /* 49: Core0 VPE1 Dummy LISR*/
2119 KAL_ITC_VPE2_DL, /* 50: Core1 VPE0 Dummy LISR*/
2120 KAL_ITC_VPE3_DL, /* 51: Core1 VPE1 Dummy LISR*/
2121 KAL_ITC_DL_PROTECT, /* 52: Lock for Dummy LISR data*/
2122 KAL_ITC_MMRFD_SCH_MIPI_LOCK, /* 53: Lock for MMRFD to protect API operation*/
2123 KAL_ITC_MMRFD_SCH_BPI_LOCK, /* 54: Lock for MMRFD to protect API operation*/
2124 KAL_ITC_MMRFD_SCH_RFIC_LOCK, /* 55: Lock for MMRFD to protect API operation*/
2125 KAL_ITC_IDC, /* 56: Lock for IDC driver */
2126 KAL_ITC_AFM, /* 57: Lock for AFM */
2127 KAL_ITC_NL1C_IDC, /* 58: NL1C IDC Commond Data */
2128 KAL_ITC_TTY, /* 59: Lock for TTY */
2129 KAL_ITC_CCCITTY, /* 60: Lock for CCCI TTY */
2130 KAL_ITC_CCCI, /* 61: Lock for CCCI */
2131 KAL_ITC_CCISM, /* 62: Lock for CCISM */
2132 KAL_ITC_NL1_RFD_CMN, /* 63: Lock for NL1 RFD Common */
2133 KAL_ITC_GPT_DSCC1, /* 64: Lock for GPT driver DSCC */
2134 KAL_ITC_GPT_DSCC2, /* 65: Lock for GPT driver DSCC */
2135 KAL_ITC_NL1_CTRL, /* 66: Lock for NL1 CTRL */
2136 KAL_ITC_COMMON_L1C_IDC, /* 67: Lock for NL1C & EL1C common IDC */
2137 KAL_ITC_GPT_DPCOPRO, /* 68: Lock for GPT driver, DPCOPRO */
2138 KAL_ITC_ISR_Q, /* 69: Lock for ISR Queue (!TARGET) */
2139 KAL_ITC_DIGRF_MIPI_LOCK, /* 70: Lock for MIPI driver */
2140 KAL_ITC_CSIF_LOCK, /* 71: Lock for CSIF driver */
2141 KAL_ITC_DIGRF_DSB_LOCK, /* 72: Lock for DSB driver */
2142 KAL_ITC_DIGRF_DSB_READ_REG32_LOCK, /* 73: Lock for DSB driver */
2143 KAL_ITC_NRRC_SRB_UL_LOCK, /* 74: Lock for NRRC AFM protection */
2144 KAL_ITC_TXDFE_D_NRT, /* 75: Lock for TXDFE-D NRT part */
2145 KAL_ITC_TXDFE_A_NRT, /* 76: Lock for TXDFE-A NRT part */
2146#if defined(__KTEST__)
2147 KAL_ITC_PROF, /* 77: Lock for KAL/OS profiling */
2148#endif
2149 KAL_ITC_EL1C_SLEEP_L, /* 78: Lock phs sleep bmp*/
2150 KAL_ITC_DIGRF_COM_DVFS_LOCK, /* 79: Lock for A-Die DVFS and MIPI control*/
2151 KAL_ITC_SERDES_BW_CAL, /* 80: Lock for serdes */
2152#if defined(__ESL_MASE__)
2153 KAL_ITC_ESL,
2154#endif
2155#if defined(KTEST_UART_TRACES)
2156 // ITC locks for UART driver in KTEST. KTEST needs to use UART from HRT VPE.
2157 KAL_ITC_DBG,
2158 KAL_ITC_PRINT,
2159#endif
2160#if defined(__DYNAMIC_POWER_DOWN_L2CACHE_WAY_SUPPORT__)
2161 KAL_ITC_DPDL2,
2162#endif
2163 KAL_ITC_SPMI_LOCK, /* X: Lock for SPMI driver */
2164
2165 KAL_ITC_TAG_END,
2166
2167 KAL_ITC_CORE0_DL, /* X: Core0 VPE0 Dummy LISR */
2168 KAL_ITC_CORE1_DL, /* X: Core1 VPE0 Dummy LISR */
2169 KAL_ITC_CORE2_DL, /* X: Core2 VPE0 Dummy LISR */
2170 KAL_ITC_CORE0_23G, /* X: Core0 23G Giant Lock */
2171 KAL_ITC_CORE2_23G, /* X: Core2 23G Giant Lock */
2172 KAL_ITC_CORE012_SYNC /* X: All Cores HRT API Handle: Sync */
2173} kal_itc_lock_id;
2174
2175#define KAL_ITC_NUM (KAL_ITC_TAG_END - KAL_ITC_TAG_START)
2176
2177/*******************************************************************************
2178 * Defines for HRT Multi-threading
2179 *******************************************************************************/
2180typedef kal_uint32 kal_workqueue_mask;
2181#if defined(__MD97__) || defined(__MD97P__)
2182typedef enum {
2183 KAL_Q1,
2184 KAL_Q_MAX,
2185} kal_workqueueid;
2186
2187#define KAL_Q1_MASK (1)
2188#define KAL_ALL_Q_MASK (1)
2189
2190#define KAL_ALL_Q_FINISH (0)
2191#define KAL_Q1_EXECUTE (1)
2192
2193typedef struct mt_func_para_struct {
2194 kal_uint16 func_index;
2195 //kal_uint8 reserved0;
2196 //kal_uint8 reserved1;
2197 void *func_param;
2198} mt_func_para_struct;
2199#else
2200#error No MT config yet
2201#endif
2202
2203/*******************************************************************************
2204 * Defines for VPE ID
2205 *******************************************************************************/
2206typedef enum {
2207 CORE0_VPE0 = 0,
2208 CORE0_VPE1,
2209#if SYS_MCU_NUM_CORE == 2
2210 CORE1_VPE0,
2211 CORE1_VPE1,
2212#elif SYS_MCU_NUM_CORE == 3
2213 CORE1_VPE0,
2214 CORE1_VPE1,
2215 CORE2_VPE0,
2216 CORE2_VPE1,
2217#elif SYS_MCU_NUM_CORE == 4
2218#if defined(MT6297_IA)
2219 CORE1_VPE0,
2220 CORE1_VPE1,
2221 CORE2_VPE0,
2222 CORE2_VPE1,
2223 CORE3_VPE0,
2224 CORE3_VPE1,
2225#else
2226 CORE0_VPE2,
2227 CORE1_VPE0,
2228 CORE1_VPE1,
2229 CORE1_VPE2,
2230 CORE2_VPE0,
2231 CORE2_VPE1,
2232 CORE2_VPE2,
2233 CORE3_VPE0,
2234 CORE3_VPE1,
2235 CORE3_VPE2,
2236#endif
2237#endif
2238 TOTAL_VPE_NUM
2239} kal_vpe_id;
2240
2241/*******************************************************************************
2242 * Defines for TC ID per core
2243 *******************************************************************************/
2244typedef enum {
2245 VPE0_MAIN_TC = 0,
2246#if defined(__MD93__) || defined(__MD95__)
2247 VPE1_MAIN_TC,
2248 VPE1_CHILD_TC1,
2249 VPE1_CHILD_TC2,
2250#elif defined(__MD97__)
2251#if defined(MT6297_IA)
2252 VPE0_CHILD_TC1,
2253 VPE0_CHILD_TC2,
2254 VPE1_MAIN_TC,
2255 VPE1_CHILD_TC1,
2256 VPE1_CHILD_TC2,
2257#else
2258 VPE0_CHILD_TC1,
2259 VPE1_MAIN_TC,
2260 VPE1_CHILD_TC1,
2261 VPE2_MAIN_TC,
2262 VPE2_CHILD_TC1,
2263#endif
2264#endif
2265 TOTAL_TC_NUM_PER_CORE
2266} kal_tc_id;
2267
2268/*******************************************************************************
2269 * Defines for Task/HISR affinity config
2270 *******************************************************************************/
2271#define AFFINITY_NIL 0x0
2272#define AFFINITY_VPE0 0x1
2273#define AFFINITY_VPE1 0x2
2274#define AFFINITY_VPE2 0x4
2275#define AFFINITY_VPE3 0x8
2276#define AFFINITY_VPE4 0x10
2277#define AFFINITY_VPE5 0x20
2278#define AFFINITY_VPE6 0x40
2279#define AFFINITY_VPE7 0x80
2280#define AFFINITY_VPE8 0x100
2281#define AFFINITY_VPE9 0x200
2282#define AFFINITY_VPE10 0x400
2283#define AFFINITY_VPE11 0x800
2284#define AFFINITY_DYNAMIC 0x8000
2285typedef enum {
2286 None_Group = AFFINITY_NIL,
2287
2288#if (defined(__MD93__) || defined(__MD95__)) && SYS_MCU_NUM_CORE == 2
2289 /* For Gen93/Gen95 2 Cores Configuration */
2290 C0V0_Group = AFFINITY_VPE0,
2291 C1V0_Group = AFFINITY_VPE2,
2292
2293 VPE0_Group = C0V0_Group,
2294 VPE2_Group = C1V0_Group,
2295 VPE0_RESERVED = AFFINITY_VPE0, // this is only for vpe0 idle task
2296 VPE1_RESERVED = AFFINITY_VPE1, // this is only for vpe1 idle task
2297 VPE2_RESERVED = AFFINITY_VPE2, // this is only for vpe2 idle task
2298 VPE3_RESERVED = AFFINITY_VPE3, // this is only for vpe3 idle task
2299 SMP_NORMAL_Group = C0V0_Group | C1V0_Group,
2300 SMP_NORMAL_AND_HRT_Group =
2301 AFFINITY_VPE0 | AFFINITY_VPE1 | AFFINITY_VPE2 | AFFINITY_VPE3
2302#elif defined(__MD95__) && SYS_MCU_NUM_CORE == 3
2303 /* For Gen95, if it supports 3 cores, the 3rd Core's 2 VPEs would be both Normal Domain */
2304 C0V0_Group = AFFINITY_VPE0,
2305 C1V0_Group = AFFINITY_VPE2,
2306 C2V0_Group = AFFINITY_VPE4,
2307
2308 VPE0_Group = C0V0_Group,
2309 VPE2_Group = C1V0_Group,
2310 VPE4_Group = C2V0_Group,
2311 VPE0_RESERVED = AFFINITY_VPE0, // this is only for vpe0 idle task
2312 VPE1_RESERVED = AFFINITY_VPE1, // this is only for vpe1 idle task
2313 VPE2_RESERVED = AFFINITY_VPE2, // this is only for vpe2 idle task
2314 VPE3_RESERVED = AFFINITY_VPE3, // this is only for vpe3 idle task
2315 VPE4_RESERVED = AFFINITY_VPE4, // this is only for vpe4 idle task
2316 VPE5_RESERVED = AFFINITY_VPE5, // this is only for vpe5 idle task
2317 SMP_NORMAL_Group = C0V0_Group | C1V0_Group | C2V0_Group | AFFINITY_VPE5,
2318 SMP_NORMAL_AND_HRT_Group = AFFINITY_VPE0 | AFFINITY_VPE1 | AFFINITY_VPE2 |
2319 AFFINITY_VPE3 | AFFINITY_VPE4 | AFFINITY_VPE5
2320#else /* SYS_MCU_NUM_CORE == 4 */
2321/* Gen97 Core VPE configuration */
2322#if defined(MT6297_IA)
2323 /* For Gen97 iA, it supports 4 cores, 2 VPEs per core */
2324 /* Per Core: VPE0 is normal domain, VPE1 are HRT domain */
2325 C0V0_Group = AFFINITY_VPE0,
2326 C1V0_Group = AFFINITY_VPE2,
2327 C2V0_Group = AFFINITY_VPE4,
2328 C3V0_Group = AFFINITY_VPE6,
2329
2330 VPE0_Group = C0V0_Group,
2331 VPE2_Group = C1V0_Group,
2332 VPE4_Group = C2V0_Group,
2333 VPE6_Group = C3V0_Group,
2334 VPE0_RESERVED = AFFINITY_VPE0, // this is only for vpe0 idle task
2335 VPE1_RESERVED = AFFINITY_VPE1, // this is only for vpe1 idle task
2336 VPE2_RESERVED = AFFINITY_VPE2, // this is only for vpe2 idle task
2337 VPE3_RESERVED = AFFINITY_VPE3, // this is only for vpe3 idle task
2338 VPE4_RESERVED = AFFINITY_VPE4, // this is only for vpe4 idle task
2339 VPE5_RESERVED = AFFINITY_VPE5, // this is only for vpe5 idle task
2340 VPE6_RESERVED = AFFINITY_VPE6, // this is only for vpe6 idle task
2341 VPE7_RESERVED = AFFINITY_VPE7, // this is only for vpe7 idle task
2342 SMP_NORMAL_Group = C0V0_Group | C1V0_Group | C2V0_Group | C3V0_Group,
2343 SMP_NORMAL_AND_HRT_Group = AFFINITY_VPE0 | AFFINITY_VPE1 | AFFINITY_VPE2 |
2344 AFFINITY_VPE3 | AFFINITY_VPE4 | AFFINITY_VPE5 |
2345 AFFINITY_VPE6 | AFFINITY_VPE7
2346#else
2347
2348#if defined(__MD97_IS_2CORES__)
2349 /* For Gen97 Shaolin FPGA H3, it supports 4 cores, 3 VPEs per core */
2350 /* Per Core: VPE0 is normal domain, VPE1/2 are HRT domain */
2351 C0V0_Group = AFFINITY_VPE0,
2352 C1V0_Group = AFFINITY_VPE3,
2353
2354 VPE0_Group = C0V0_Group,
2355 VPE2_Group = C1V0_Group, // this is temp version for building pass
2356 VPE0_RESERVED = AFFINITY_VPE0, // this is only for vpe0 idle task
2357 VPE1_RESERVED = AFFINITY_VPE1, // this is only for vpe1 idle task
2358 VPE2_RESERVED = AFFINITY_VPE2, // this is only for vpe2 idle task
2359 VPE3_RESERVED = AFFINITY_VPE3, // this is only for vpe3 idle task
2360 VPE4_RESERVED = AFFINITY_VPE4, // this is only for vpe4 idle task
2361 VPE5_RESERVED = AFFINITY_VPE5, // this is only for vpe5 idle task
2362 SMP_NORMAL_Group = C0V0_Group | C1V0_Group,
2363 SMP_NORMAL_AND_HRT_Group = AFFINITY_VPE0 | AFFINITY_VPE1 | AFFINITY_VPE2 |
2364 AFFINITY_VPE3 | AFFINITY_VPE4 | AFFINITY_VPE5
2365#else
2366 /* For Gen97 Shaolin, it supports 4 cores, 3 VPEs per core */
2367 /* Per Core: VPE0 is normal domain, VPE1/2 are HRT domain */
2368 C0V0_Group = AFFINITY_VPE0,
2369 C1V0_Group = AFFINITY_VPE3,
2370 C2V0_Group = AFFINITY_VPE6,
2371 C3V0_Group = AFFINITY_VPE9,
2372
2373 VPE0_Group = C0V0_Group,
2374 VPE2_Group = C1V0_Group, // this is temp version for building pass
2375 VPE0_RESERVED = AFFINITY_VPE0, // this is only for vpe0 idle task
2376 VPE1_RESERVED = AFFINITY_VPE1, // this is only for vpe1 idle task
2377 VPE2_RESERVED = AFFINITY_VPE2, // this is only for vpe2 idle task
2378 VPE3_RESERVED = AFFINITY_VPE3, // this is only for vpe3 idle task
2379 VPE4_RESERVED = AFFINITY_VPE4, // this is only for vpe4 idle task
2380 VPE5_RESERVED = AFFINITY_VPE5, // this is only for vpe5 idle task
2381 VPE6_RESERVED = AFFINITY_VPE6, // this is only for vpe6 idle task
2382 VPE7_RESERVED = AFFINITY_VPE7, // this is only for vpe7 idle task
2383 VPE8_RESERVED = AFFINITY_VPE8, // this is only for vpe8 idle task
2384 VPE9_RESERVED = AFFINITY_VPE9, // this is only for vpe9 idle task
2385 VPE10_RESERVED = AFFINITY_VPE10, // this is only for vpe10 idle task
2386 VPE11_RESERVED = AFFINITY_VPE11, // this is only for vpe11 idle task
2387 SMP_NORMAL_Group = C0V0_Group | C1V0_Group | C2V0_Group | C3V0_Group,
2388 SMP_NORMAL_AND_HRT_Group = AFFINITY_VPE0 | AFFINITY_VPE1 |
2389 AFFINITY_VPE3 | AFFINITY_VPE4 |
2390 AFFINITY_VPE6 | AFFINITY_VPE7 |
2391 AFFINITY_VPE9 | AFFINITY_VPE10
2392#endif /* defined(__MD97_IS_2CORES__) */
2393#endif /* defined(MT6297_IA) */
2394
2395#endif
2396} kal_affinity_group;
2397
2398/* Affinity group IDs for group affinity */
2399
2400typedef kal_uint32 kal_task_group_id;
2401
2402#define AFFI_GROUP_ID_0 0
2403#define AFFI_GROUP_ID_1 1
2404#define AFFI_GROUP_ID_2 2
2405#define AFFI_GROUP_ID_3 3
2406#define AFFI_GROUP_ID_4 4
2407#define AFFI_GROUP_ID_5 5
2408#define AFFI_GROUP_ID_6 6
2409#define AFFI_GROUP_ID_7 7
2410#define AFFI_GROUP_ID_8 8
2411#define AFFI_GROUP_ID_9 9
2412#define AFFI_GROUP_ID_NONE 0xFFFFFFFF
2413
2414
2415typedef enum {
2416 RESETM_SUCCESS = 0,
2417 RESETM_SUCCESS_TASK_NOT_SUSPEND,
2418 RESETM_FAIL,
2419 RESETM_FAIL_TASK_NOT_SUSPEND,
2420 RESETM_NOT_EXIST, // Module not found by module id
2421 RESETM_NOT_TASK // This module is not real task (maybe DUMMY or LISR/HISR)
2422} E_RESETM_ERROR_CODE;
2423
2424/*******************************************************************************
2425 * Defines for Task/HISR affinity config
2426 *******************************************************************************/
2427
2428/*******************************************************************************
2429 * Defines for UTC counte
2430 *******************************************************************************/
2431typedef struct wall_clock_t {
2432 kal_uint32 ms_msb_utc_counter;
2433 kal_uint32 ms_lsb_utc_counter;
2434 kal_uint32 us_msb_utc_counter;
2435 kal_uint32 us_lsb_utc_counter;
2436} wall_clock;
2437
2438/* kal domain enumeration */
2439typedef enum {
2440 KAL_DOMAIN_NORMAL = 0,
2441 KAL_DOMAIN_HRT,
2442 KAL_DOMAIN_CHRT,
2443} kal_domain;
2444
2445#endif /* _KAL_PUBLIC_DEFS_H */