[Feature]Upload Modem source code

Change-Id: Id4294f30faced84d3e6fd6d5e61e1111bf287a37
diff --git a/mcu/tools/sys_mem_gen/taskHisrParaCheckingAndReport.pm b/mcu/tools/sys_mem_gen/taskHisrParaCheckingAndReport.pm
new file mode 100644
index 0000000..c1c7c05
--- /dev/null
+++ b/mcu/tools/sys_mem_gen/taskHisrParaCheckingAndReport.pm
@@ -0,0 +1,256 @@
+

+

+package taskHisrParaCheckingAndReport;

+

+use Exporter qw(import);

+our @EXPORT_OK = qw(checkingPriority);

+

+sub checkingTaskPriority

+{

+    

+    my $g_task_number = $_[0];

+    my $g_hisr_number = $_[1];

+    my @task_config = @{$_[2]};

+    my @hisr_config = @{$_[3]};

+    my $g_ATEST_DRV_ENABLE = $_[4];

+    my $modem_arch = $_[5];

+    

+    my $i=0;

+    my $j=0;

+    my $priority1;

+    my $priority2;

+    my $priority_j1;

+    my $priority_j2;

+    my $priority_max;

+    my $reserved_prio_1;

+    my $reserved_prio_2;

+    my $reserved_prio_3;

+    $ERR_DUPLICATE_TASK_PRIORITY = 14;

+

+    #print "Hello $g_task_number,$g_hisr_number, $task_config,$hisr_config, $g_ATEST_DRV_ENABLE\n";

+        

+    

+    if($g_ATEST_DRV_ENABLE == 0)

+    {

+        if($modem_arch eq "MT6295"){

+            $priority_max    = 256;

+            $reserved_prio_1 = 255;

+            $reserved_prio_2 = 254;

+            $reserved_prio_3 = 253;

+        } else {

+            $priority_max    = 512;

+            $reserved_prio_1 = 505;

+            $reserved_prio_2 = 504;

+            $reserved_prio_3 = 503;

+        }

+        #check task priority from next to the end     

+        #Even though the task is not created, we will also compare it with others !!  

+        while($i < $g_task_number){

+                

+            #printf("%-20s %-5d  %-5d %-5d\n", $task_config[$i]{'name'}, $task_config[$i]{'prio_1'}, $task_config[$i]{'affinity'}, $task_config[$i]{'exist'}); 

+               

+            $j = $i+1;

+            #bypass task which is not created.

+            if ($task_config[$i]{'exist'} != 0xF0F0F0F0)

+            {

+                $priority1 = $task_config[$i]{'prio_1'};

+                $priority2 = $task_config[$i]{'prio_2'};

+                

+                if( $priority1 > $priority_max)

+                {

+                     printf "task index %d 1st priority %d > %d\n", $i, $priority1, $priority_max;

+                     print "Please check task config or contact config owner!!!";

+                     exit $ERR_DUPLICATE_TASK_PRIORITY;                

+                } 

+                

+                if( $priority2 > $priority_max)

+                {

+                     printf "task index %d 2nd priority %d > %d\n", $i, $priority2, $priority_max;

+                     print "Please check task config or contact config owner!!!";

+                     exit $ERR_DUPLICATE_TASK_PRIORITY;                

+                }

+                

+                while ($j < $g_task_number)

+                {

+                   

+                    $priority_j1 = $task_config[$j]{'prio_1'};

+                    $priority_j2 = $task_config[$j]{'prio_2'};

+                    # priority 256 means start or tail task. e.g. TASK_ID_SRV_CODE_BEGIN. 

+                    # 255, 254, 253 reserved for IDLE tasks in Gen97.

+                    if (  $priority1 != $priority_max && $priority1 != $reserved_prio_1 && $priority1 != $reserved_prio_2 && $priority1 != $reserved_prio_3) 

+                    {

+                        if( ($priority1 == $priority2) || ($priority1 == $priority_j1) || ($priority1 == $priority_j2)

+                        || (($priority2 != $priority_max) && (($priority2 == $priority_j1) || ($priority2 == $priority_j2))) )

+                        {

+                            #printf "KAL task config Error: duplicate task index %d priority 0x%08X, index %d priority 0x%08X\n",

+                            #$i, $priority, $j, $priority_j;

+                

+                            if($priority1 == $priority2)

+                            {

+                               printf "task index %d name: %s 1st priority %d == 2nd priority %d \n", $i, $task_config[$i]{'name'}, $priority1, $priority2;

+                            }

+                            if($priority1 == $priority_j1)

+                            {

+                               printf "task index %d name: %s 1st priority %d == task index %d name: %s 1st priority %d \n", $i, $task_config[$i]{'name'}, $priority1, $j, $task_config[$j]{'name'}, $priority_j1;

+                            }

+                            if($priority1 == $priority_j2)

+                            {

+                               printf "task index %d name: %s 1st priority %d == task index %d name: %s 2nd priority %d \n", $i, $task_config[$i]{'name'}, $priority1, $j, $task_config[$j]{'name'}, $priority_j2;

+                            }

+                            if(($priority2 != $priority_max) && ($priority2 == $priority_j1))

+                            {

+                               printf "task index %d name: %s 2nd priority %d == task index %d name: %s 1st priority %d \n", $i, $task_config[$i]{'name'}, $priority2, $j, $task_config[$j]{'name'}, $priority_j1;

+                            }

+                            if(($priority2 != $priority_max) && ($priority2 == $priority_j2))

+                            {

+                               printf "task index %d name: %s 2nd priority %d == task index %d name: %s 2nd priority %d \n", $i, $task_config[$i]{'name'}, $priority2, $j, $task_config[$j]{'name'}, $priority_j2;

+                            }

+                            print "Please check task config or contact config owner!!!";

+                            exit $ERR_DUPLICATE_TASK_PRIORITY;                

+                        }

+                    }

+                

+                    $j++;

+                }

+            }

+            $i++;

+        }

+        

+        

+     }

+}

+

+sub checkingHISRIndexDuplicated

+{

+    my $g_task_number = $_[0];

+    my $g_hisr_number = $_[1];

+    my @task_config = @{$_[2]};

+    my @hisr_config = @{$_[3]};

+    my $g_ATEST_DRV_ENABLE = $_[4];

+    

+    my $i=0;

+    my $j=0;

+    my $i_index;

+    my $j_index;

+    $ERR_HISR_INDEX = 13;

+    

+    #check if duplicate hisr index is inside hisr_info

+    while($i < $g_hisr_number)

+    {

+        $j = $i+1;

+        $i_index = $hisr_config[$i]{'index'};

+        while($j < $g_hisr_number)

+        {            

+            $j_index = $hisr_config[$j]{'index'};

+            if($i_index == $j_index)

+            {

+                printf "KAL hisr config Error: %s and %s has duplicate hisr index %d\n", $hisr_config[$i]{'name'}, $hisr_config[$j]{'name'},  $i_index;

+                print "Please check hisr config or contact config owner!!!";

+                exit $ERR_HISR_INDEX;

+            }

+            $j++;

+        }

+        $i++;

+    }

+

+}

+

+sub checking4charOfTaskHisrName

+{

+    

+    my $g_task_number = $_[0];

+    my $g_hisr_number = $_[1];

+    my @task_config = @{$_[2]};

+    my @hisr_config = @{$_[3]};

+    my $g_ATEST_DRV_ENABLE = $_[4];

+    

+    my $i=0;

+    my $j=0;

+    $ERR_DUPLICATE_TASKHISR_NAME = 17;

+   

+    if($g_ATEST_DRV_ENABLE == 0)

+    {

+

+        # Check firt 4 characters of Task/Hisr names for SWLA

+        $i = 0;

+        my $name_1;

+        my $name_2;

+        while($i < $g_task_number){

+            

+            $name_1 = substr $task_config[$i]{'name'}, 0, 4;

+            

+            if( $name_1 ne ""){

+                

+                # Tasks compare Tasks

+                $j = $i+1;

+                while( $j < $g_task_number){

+                    

+                    $name_2 = substr $task_config[$j]{'name'}, 0, 4;

+                    if( $name_1 eq $name_2 ){

+                    

+                        printf "Dup name found!! Task:$task_config[$i]{'name'}, Index:$i <==> Task:$task_config[$j]{'name'}, Index:$j\n";

+                        exit $ERR_DUPLICATE_TASKHISR_NAME;

+                    }

+                    $j++;

+                }

+                

+                # Tasks compare HISRs

+                $j = 0;

+                while( $j < $g_hisr_number){

+                    $name_2 = substr $hisr_config[$j]{'name'}, 0, 4;

+                    if( $name_1 eq $name_2 ){

+                        printf "Dup name found!! Task:$task_config[$i]{'name'}, Index:$i <==> HISR: $hisr_config[$j]{'name'}, hisr_index:$hisr_config[$j]{'index'}\n";

+                        exit $ERR_DUPLICATE_TASKHISR_NAME;

+                    }

+                    $j++;

+                }

+                

+            }

+            

+            $i++;

+        }

+        

+        # HISRs compare HISRs

+        $i = 0;

+        while( $i < $g_hisr_number){

+        

+            $name_1 = substr $hisr_config[$i]{'name'}, 0, 4;

+            

+            if( $name_1 ne ""){

+                

+                $j = $i+1;

+                while( $j < $g_hisr_number){

+                    

+                    $name_2 = substr $hisr_config[$j]{'name'}, 0, 4;

+                    if( $name_1 eq $name_2 ){

+                    

+                        printf "Dup name found!! HISR:$hisr_config[$i]{'name'}, hisr_index:$hisr_config[$i]{'index'} <==>  HISR:$hisr_config[$j]{'name'}, hisr_index:$hisr_config[$j]{'index'}\n";

+                        exit $ERR_DUPLICATE_TASKHISR_NAME;

+                    }

+                    $j++;

+                }

+            }

+            $i ++;

+        }

+        

+     }

+}

+

+# TODO

+sub checkingTaskIndexRange

+{

+    my $task_number = $_[0];

+    my @task_config = @{$_[1]};

+    my $task_real_module_num = $_[2];

+    my $task_expected_module_num = $_[3];

+    my $ATEST_DRV_ENABLE = $_[4];

+    

+    # printf "task_real_module_num: $task_real_module_num";

+    # printf "task_expected_module_num: $task_expected_module_num";

+    # printf "ATEST_DRV_ENABLE: $ATEST_DRV_ENABLE";

+     

+

+

+}

+

+1;
\ No newline at end of file