[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]");
+ }
+}