Add support for Virtual A/B

For Virtual A/B OTA feature, change to
  * Fastboot Command snapshot update
  * Checks for Flash/Erase of Virtual A/B critical partitions
  * Check for Slot change

Change-Id: I54f76a2ff98dde9eac105e147c7ec9f9ab63545c
Signed-off-by: Rahul Shahare <rshaha@codeaurora.org>
diff --git a/app/aboot/recovery.c b/app/aboot/recovery.c
index a79f670..fd6c281 100644
--- a/app/aboot/recovery.c
+++ b/app/aboot/recovery.c
@@ -544,8 +544,11 @@
 
 		ptn = partition_get_offset(index);
 		ptn_size = partition_get_size(index);
-
+#if VIRTUAL_AB_OTA
+		offset = page_offset;
+#else
 		offset = page_offset * BLOCK_SIZE;
+#endif
 		aligned_size = ROUND_TO_PAGE(size, (unsigned)BLOCK_SIZE - 1);
 		if (ptn_size < offset + aligned_size)
 		{
@@ -619,6 +622,25 @@
 
 static MiscVirtualABMessage *VirtualAbMsg = NULL;
 
+int SetSnapshotMergeStatus (VirtualAbMergeStatus MergeStatus)
+{
+	int Status = 1;
+	VirtualAbMergeStatus OldMergeStatus;
+
+	if (target_is_emmc_boot())
+	{
+		OldMergeStatus = VirtualAbMsg->MergeStatus;
+		VirtualAbMsg->MergeStatus = MergeStatus;
+
+		Status = write_misc(MISC_VIRTUALAB_OFFSET, &VirtualAbMsg, sizeof(VirtualAbMsg));
+		if (Status != 0) {
+			dprintf(CRITICAL, "Write the VirtualAbMsg failed\n");
+			VirtualAbMsg->MergeStatus = OldMergeStatus;
+		}
+	}
+	return Status;
+}
+
 VirtualAbMergeStatus GetSnapshotMergeStatus (void)
 {
 	VirtualAbMergeStatus MergeStatus = NONE_MERGE_STATUS;