[Feature]Upload Modem source code

Change-Id: Id4294f30faced84d3e6fd6d5e61e1111bf287a37
diff --git a/mcu/tools/vivaProcess.pl b/mcu/tools/vivaProcess.pl
new file mode 100644
index 0000000..92d3365
--- /dev/null
+++ b/mcu/tools/vivaProcess.pl
@@ -0,0 +1,209 @@
+#!/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) 2005

+#

+#  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:

+#* ---------

+#*   vivaProcess.pl

+#*

+#* Project:

+#* --------

+#*   Maui_Software

+#*

+#* Description:

+#* ------------

+#*   This file implemented the VIVA post build process to gen the VI binaries.

+#*

+#*

+#* Author:

+#* -------

+#*   Ke-Ting Chen (mtk03141)

+#*

+#*****************************************************************************

+

+#****************************************************************************

+# Included Modules

+#****************************************************************************

+use strict;

+use warnings;

+BEGIN { push @INC, "pcore/" , '.\\pcore\\tools\\' }  # add additional library path

+use vivaHelper;

+use zImageProcess;

+use File::Copy;

+

+#****************************************************************************

+# History

+#****************************************************************************

+my $VIVA_PROCESS_VERNO = " v1.02";

+   # v1.02: Phase out ALICE and BOOT_ZIMAGE on MOLY

+   # v1.01: Phase in BOOT_ZIMAGE

+   # v1.00: Phase in VIVA

+

+#****************************************************************************

+# Constants

+#****************************************************************************

+my $DEBUG = 1;

+my $vivaBinaryName = "VIVA";

+my $vivaBinaryBackupName = "VIVA.bin";

+# Note the sequence of this list is the same as VI processing sequence.

+# Thus it should be consistent to the position in scatter file.

+my @viList = (&zImageProcess::GetZImageInfo());

+my $separateLine = "=============================================================";

+

+#****************************************************************************

+# Arguments

+#****************************************************************************

+&vivaHelper::ErrorHandler("Insufficient arguments!", __LINE__, __FILE__)

+   unless scalar(@ARGV) == 2;

+

+my ($binaryFolder, $makefilePath) = @ARGV;

+$binaryFolder =~ s/^.\\|^\\//;

+$makefilePath =~ s/^.\\|^\\//;

+

+#****************************************************************************

+# Variables

+#****************************************************************************

+my $vivaBinary = "$binaryFolder\\$vivaBinaryName";

+my $vivaBinaryBackup = "$binaryFolder\\$vivaBinaryBackupName";

+my %vivaInfo;

+my $viAvailableStartAddress;

+my $viStartAddressRef;

+my $viSize;

+

+#****************************************************************************

+# Process

+#****************************************************************************

+printLog("Start VIVA processing...");

+

+&vivaHelper::Initialize(&vivaHelper::PROCESS_TYPE, $makefilePath);

+

+&vivaHelper::ErrorHandler("Insufficient arguments!", __LINE__, __FILE__)

+   unless defined $binaryFolder and defined $makefilePath;

+

+debugLog("Binary Folder: $binaryFolder");

+debugLog("Makefile: $makefilePath");

+

+# Backup VIVA binary

+copy($vivaBinary, $vivaBinaryBackup) or

+   &vivaHelper::ErrorHandler("Cannot backup VIVA header binary $vivaBinary: $!", __FILE__, __LINE__);

+

+# Open VIVA binary

+open my $inout, "+<$vivaBinary" or

+   &vivaHelper::ErrorHandler("Cannot open VIVA header binary $vivaBinary: $!", __FILE__, __LINE__);

+binmode $inout;

+

+# Read VIVA binary

+printLog("Read VIVA info...");

+&vivaHelper::ReadVIVAInfo($inout, \%vivaInfo);

+while (my ($key, $value) = each (%vivaInfo))

+{

+   debugLog("$key: ".&vivaHelper::DecToHex($value));

+}

+

+# Get the first VI available start address

+$viSize = -s $vivaBinaryBackup;

+$viAvailableStartAddress = $vivaInfo{"viva_base"} + $viSize;

+printLog("VI Start Address: ".&vivaHelper::DecToHex($viAvailableStartAddress));

+

+# For each VI

+foreach my $vi (@viList)

+{

+   printLog($separateLine);

+   printLog("Start processing ".$vi->{"name"}."...");

+

+   $viStartAddressRef = \$vivaInfo{$vi->{"struct_name"}."_base"};

+

+   # Invoke VI post process

+   if ($vi->{"entry_function"}($binaryFolder, $viAvailableStartAddress, $viStartAddressRef, \$viSize))

+   {

+      # Add padding for new start address

+      {

+         my $writeCount = $$viStartAddressRef - $viAvailableStartAddress;

+         my $buffer = pack("C[$writeCount]", 0);

+         print $inout $buffer;

+      }

+

+      # Append proccessed binary

+      &vivaHelper::ConcatenateBinary($inout, [$binaryFolder."\\".$vi->{"binary_name"}]);

+

+      printLog("Processing OK");

+

+      $viAvailableStartAddress = $$viStartAddressRef + $viSize;

+

+      debugLog("Start Address: ".&vivaHelper::DecToHex($$viStartAddressRef));

+      debugLog("Image Size: ".&vivaHelper::DecToHex($viSize));

+      debugLog("Next Available Start Address: ".&vivaHelper::DecToHex($viAvailableStartAddress));

+   }

+   else

+   {

+      printLog("Processing SKIPPED");

+   }

+   printLog("End processing ".$vi->{"name"});

+}

+

+printLog($separateLine);

+

+# Write VIVA binary

+printLog("Update VIVA info...");

+seek $inout, 0, 0;

+&vivaHelper::WriteVIVAInfo($inout, \%vivaInfo);

+while (my ($key, $value) = each (%vivaInfo))

+{

+   debugLog("$key: ".&vivaHelper::DecToHex($value));

+}

+

+close $inout;

+

+# Padding the total size to 4 bytes align

+&vivaHelper::PaddingBinaryToAlignment($vivaBinary, 4);

+

+printLog("End VIVA processing");

+exit 0;

+

+

+

+sub printLog

+{

+   print "[VIVA] $_[0]\n";

+}

+

+sub debugLog

+{

+   if ($DEBUG)

+   {

+      printLog("[DEBUG] $_[0]");

+   }

+}