[Feature][Modem]Update MTK MODEM V1.6 baseline version: MOLY.NR15.R3.MD700.IVT.MP1MR3.MP.V1.6
MTK modem version: MT2735_IVT_MOLY.NR15.R3.MD700.IVT.MP1MR3.MP.V1.6.tar.gz
RF modem version: NA
Change-Id: I45a4c2752fa9d1a618beacd5d40737fb39ab64fb
diff --git a/mcu/tools/CommonUtility.pm b/mcu/tools/CommonUtility.pm
new file mode 100644
index 0000000..83322ee
--- /dev/null
+++ b/mcu/tools/CommonUtility.pm
@@ -0,0 +1,293 @@
+#!/usr/bin/perl
+#
+# Copyright Statement:
+# --------------------
+# This software is protected by Copyright and the information contained
+# herein is confidential. The software may not be copied and the information
+# contained herein may not be used or disclosed except with the written
+# permission of MediaTek Inc. (C) 2006
+#
+# BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
+# THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
+# RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO BUYER ON
+# AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL WARRANTIES,
+# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF
+# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NONINFRINGEMENT.
+# NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH RESPECT TO THE
+# SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY, INCORPORATED IN, OR
+# SUPPLIED WITH THE MEDIATEK SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH
+# THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO
+# NOT BE RESPONSIBLE FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S
+# SPECIFICATION OR TO CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM.
+#
+# BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE
+# LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL BE,
+# AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT ISSUE,
+# OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY BUYER TO
+# MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE.
+#
+# THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE
+# WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT OF
+# LAWS PRINCIPLES. ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING THEREOF AND
+# RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN FRANCISCO, CA, UNDER
+# THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE (ICC).
+#
+#*****************************************************************************
+#*
+#* Filename:
+#* ---------
+#* CommonUtility.pm
+#*
+#* Project:
+#* --------
+#*
+#*
+#* Description:
+#* ------------
+#* This script is to provide common utility
+#*
+#* Author:
+#* -------
+#* Carl Kao (mtk08237)
+#*
+#****************************************************************************/
+#****************************************************************************
+# Included Modules
+#****************************************************************************
+use strict;
+BEGIN { push @INC, './pcore/tools/' } # add additional library path
+package CommonUtil;
+use POSIX qw(floor ceil);
+#****************************************************************************
+# oo >>> Finished
+#****************************************************************************
+return 1;
+
+#****************************************************************************
+# CommonUtility Version
+#****************************************************************************
+sub CommonUtil_verno
+{
+ return " u0.03";
+ # u0.03, 2016/09/06, Tero, Add leading zeros to Dec2Hex
+ # u0.02_UMOLY, 2015/01/26, Carl, Refine GetMPUAligned for adding debug log
+ # u0.01_UMOLY = v0.08
+ # v0.08 , 20141105 by carl, add GetMPUAligned
+ # v0.07 , 20131215 by mei, Support space before = in HashStringParser()
+ # v0.06 , 20130625 by mei, Support HashStringGenerator() and HashStringParser()
+ # v0.05 , 20130115 by mei, Add WriteFileContent()
+ # v0.04 , 20120625 by mei, Change chomp by replacing \r\n directly
+ # v0.03 , 20120528 by mei, Support path and filename case sensitive on Linux
+ # v0.02 , 20120512 by mei, strengthen funcationality for ParseCSV()
+ # v0.01 , 20120504 by mei, initial version
+}
+
+
+#****************************************************************************
+# subroutine: error_handler
+# input: $error_msg: error message
+#****************************************************************************
+sub error_handler
+{
+ my ($error_msg, $file, $line_no, $strTitle) = @_;
+
+ my $final_error_msg = "$strTitle ERROR: $error_msg at $file line $line_no : $!\n";
+ print $final_error_msg;
+ die $final_error_msg;
+}
+
+
+#****************************************************************************
+# subroutine: Dec2Hex: translate dec number to hex string
+# input: Number in dec
+# output: hex in string
+#****************************************************************************
+#Hex2Dex() : hex string to dec number = hex()
+sub Dec2Hex
+{
+ my ($num) = @_;
+ return sprintf("0x%.08x", $num);
+}
+
+#****************************************************************************
+# subroutine: GetFileContent
+# input: strFilePath
+# output: strFileContent after chomp
+#****************************************************************************
+sub GetFileContent
+{
+ my ($strFilePath) = @_;
+ my $content;
+ my ($pack_name, $file, $line_no) = caller;
+ open FILE, "<$strFilePath" or &error_handler("$strFilePath: open file error!", $file, $line_no, 'CommonUtil::GetFileContent');
+ {
+ local $/;
+ $content = <FILE>;
+ }
+ close FILE;
+ chomp($content);
+ return $content;
+}
+
+#****************************************************************************
+# subroutine: WriteFileContent
+# input: $strFilePath, $$strFileContent,
+# $bAppend: 0 or undef= not append in the file, 1=need to append
+# output: x
+#****************************************************************************
+sub WriteFileContent
+{
+ my ($strFilePath, $strContent, $bAppend) = @_;
+ my $strAppend = "";
+ $strAppend = ">" if($bAppend);
+ open FILE, ">$strAppend$strFilePath" or &error_handler("$strFilePath: open file error!", __FILE__, __LINE__, 'CommonUtil::WriteFileContent');
+ print FILE $strContent;
+ close FILE;
+}
+
+#****************************************************************************
+# subroutine: ParseCSV
+# input: 1. strFilePath
+# 2. $bSkipFirstLine: 1=skip, 0 or undef=not to skip
+# output: 1. \@ContentList: array reference [[column, column, column...], [column, column, column...], ...]
+# 2. \@LineMeaning: if $bSkipFirstLine==1, return undef; if not, return FirstLine in [colume, colume,...]
+#****************************************************************************
+sub ParseCSV
+{
+ my ($strFilePath, $bSkipFirstLine) = @_;
+ my @ContentList;
+ my @LineMeaning;
+ my %IndexByName;
+ open FILE, "<$strFilePath" or &error_handler("$strFilePath: open file error!", __FILE__, __LINE__, 'CommonUtil::ParseCSV');
+ if(1 != $bSkipFirstLine)
+ {
+ my $FirstLine = <FILE>;
+ $FirstLine =~ s/\r|\n//g;
+ @LineMeaning = split(/,/, $FirstLine, -1);
+ for(my $i=0; $i<=$#LineMeaning ; $i++)
+ {
+ $IndexByName{$LineMeaning[$i]} = $i;
+ }
+ }
+ while(<FILE>)
+ {
+ $_ =~ s/\r|\n//g;
+ my @entry = split(/,/, $_, -1);
+ for(my $i= (scalar(@LineMeaning)- scalar(@entry)); (($i>0) && (1 != $bSkipFirstLine)); $i--)
+ {
+ push @entry, "";
+ }
+ my @Removed_Empty; # to replace " " by ""
+ foreach my $item(@entry)
+ {
+ my $orgitem = $item;
+ $item =~ s/\s//g;
+ push (@Removed_Empty, ($item eq "") ? "" : $orgitem );
+ }
+ push @ContentList, \@Removed_Empty;
+ }
+ close FILE;
+ return (\@ContentList, \%IndexByName);
+}
+
+#****************************************************************************
+# subroutine: ConnetString
+# input: 1. \@token
+# 2. string to conect
+# 3. $bConnectEmptyString: 1=support emptystring connect, 0 or undef=not support it
+# output: string
+#****************************************************************************
+sub ConnetString
+{
+ my ($token_ref, $strConnector, $bConnectEmptyString) = @_;
+ my $strResult;
+ if($bConnectEmptyString)
+ {
+ $strResult = join($strConnector, @$token_ref);
+ }
+ else
+ {
+ foreach my $i (@$token_ref)
+ {
+ my $temp = $i;
+ $temp =~ s/\s//g;
+ if($strResult eq "" and $temp ne "")
+ {
+ $strResult = $i;
+ }
+ else
+ {
+ $strResult = join($strConnector, $strResult, $i) if($i ne "");
+ }
+ }
+ }
+ return $strResult;
+}
+#****************************************************************************
+# subroutine: HashStringGenerator
+# input: 1. \%Hash
+# output: string
+#****************************************************************************
+sub HashStringGenerator
+{
+ my ($href) = @_;
+ my $strOutput;
+ map { $strOutput .= "$_=".$href->{$_}."\n";} sort keys %$href;
+ return $strOutput;
+}
+
+#****************************************************************************
+# subroutine: HashStringParser
+# input: 1.HashStringGenerator's content 2. output:\%Hash
+# output: N/A
+#****************************************************************************
+sub HashStringParser
+{
+ my ($strHash, $Output_href)= @_;
+ my @items = split(/\n/, $strHash);
+ foreach my $item (@items)
+ {
+ my @KeyValue = split(/\=/, $item);
+ my $key = $KeyValue[0];
+ my $value = $KeyValue[1];
+ $key =~ s/\s//;
+ $value =~ s/\s//;
+ $Output_href->{$key} = $value;
+ $Output_href->{uc($key)} = $value;
+ }
+}
+
+sub GetMBAligned
+{
+ my ($nSize, $nMBAligned) = @_;
+ return ceil($nSize/($nMBAligned*1024*1024)) *$nMBAligned*1024*1024;
+}
+
+sub GetKBAligned
+{
+ my ($nSize, $nKBAligned) = @_;
+ return ceil($nSize/($nKBAligned*1024)) *$nKBAligned*1024;
+}
+
+
+# ask by MPU owner
+sub GetMPUAligned
+{
+ my ($nOriAddr, $strTarget) = @_;
+
+ my $nAlignSize = 2**(ceil(log($nOriAddr)/log(2))-13);
+ my $nAlignAddr = CommonUtil::GetKBAligned($nOriAddr, $nAlignSize);
+
+ if($strTarget ne "") {
+ my ($strOriAddr, $strAlignAddr) = (CommonUtil::Dec2Hex($nOriAddr), CommonUtil::Dec2Hex($nAlignAddr));
+
+ if($nAlignSize<1024) {
+ print "$strTarget $nAlignSize KB MPU Alignment: $strOriAddr -> new:$strAlignAddr\n";
+ } else {
+ print "$strTarget ".($nAlignSize/1024)." MB MPU Alignment: $strOriAddr -> new:$strAlignAddr\n" ;
+ }
+ }
+ return $nAlignAddr;
+}
+
+