| 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; |