vboot_ref: Reshuffle parallel flashrom impl

Bring sub-process and libflashrom wrapper implementations
under the common host/lib path to later be reconciled.
The WP implementation is left separated out due to the
lack of a libflashrom WP implementation which creates
circular dependencies for the moment.

BUG=b:207808292
BRANCH=none
TEST=none

Signed-off-by: Edward O'Callaghan <quasisec@google.com>
Change-Id: Ic759c4e9828778a0ef1443b163224aef2c7cba54
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/vboot_reference/+/3461093
Reviewed-by: Nikolai Artemiev <nartemiev@google.com>
Auto-Submit: Edward O'Callaghan <quasisec@chromium.org>
Tested-by: Edward O'Callaghan <quasisec@chromium.org>
Commit-Queue: Edward O'Callaghan <quasisec@chromium.org>
diff --git a/Makefile b/Makefile
index 4f0dee4..e6c3bca 100644
--- a/Makefile
+++ b/Makefile
@@ -436,6 +436,7 @@
 COMMONLIB_SRCS = \
 	host/lib/fmap.c \
 	host/lib/flashrom.c \
+	host/lib/flashrom_drv.c \
 	host/lib/subprocess.c
 
 # Intermediate library for the vboot_reference utilities to link against.
@@ -664,7 +665,8 @@
 ifneq ($(filter-out 0,${USE_FLASHROM}),)
 $(info building with libflashrom support)
 FLASHROM_LIBS := $(shell ${PKG_CONFIG} --libs flashrom)
-FUTIL_SRCS += futility/flashrom_drv.c \
+FUTIL_SRCS += host/lib/flashrom_drv.c \
+	futility/flashrom_wp_drv.c \
 	futility/updater_archive.c \
 	futility/updater_quirks.c \
 	futility/updater_utils.c \
diff --git a/futility/flashrom_wp_drv.c b/futility/flashrom_wp_drv.c
new file mode 100644
index 0000000..ff7a821
--- /dev/null
+++ b/futility/flashrom_wp_drv.c
@@ -0,0 +1,50 @@
+/* Copyright 2021 The Chromium OS Authors. All rights reserved.
+ * Use of this source code is governed by a BSD-style license that can be
+ * found in the LICENSE file.
+ *
+ * The utility functions for firmware updater.
+ */
+
+#include <libflashrom.h>
+
+#include "updater.h"
+
+#define FLASHROM_OUTPUT_WP_PATTERN "write protect is "
+
+/* System environment values. */
+static const char * const FLASHROM_OUTPUT_WP_ENABLED =
+			  FLASHROM_OUTPUT_WP_PATTERN "enabled",
+		  * const FLASHROM_OUTPUT_WP_DISABLED =
+			  FLASHROM_OUTPUT_WP_PATTERN "disabled";
+
+
+/* Helper function to return write protection status via given programmer. */
+enum wp_state flashrom_get_wp(const char *programmer)
+{
+	char *command, *result;
+	const char *postfix;
+	int r;
+
+	/* grep is needed because host_shell only returns 1 line. */
+	postfix = " 2>/dev/null | grep \"" FLASHROM_OUTPUT_WP_PATTERN "\"";
+
+
+	/* TODO(b/203715651): link with flashrom directly. */
+	ASPRINTF(&command, "flashrom --wp-status -p %s %s", programmer, postfix);
+
+	/* invokes flashrom(8) with non-zero result if error. */
+	result = host_shell(command);
+	strip_string(result, NULL);
+	free(command);
+	VB2_DEBUG("wp-status: %s\n", result);
+
+	if (strstr(result, FLASHROM_OUTPUT_WP_ENABLED))
+		r = WP_ENABLED;
+	else if (strstr(result, FLASHROM_OUTPUT_WP_DISABLED))
+		r = WP_DISABLED;
+	else
+		r = WP_ERROR;
+	free(result);
+
+	return r;
+}
diff --git a/futility/updater_utils.h b/futility/updater_utils.h
index e2c8b96..4ab61c9 100644
--- a/futility/updater_utils.h
+++ b/futility/updater_utils.h
@@ -225,11 +225,4 @@
  */
 const char *get_firmware_rootkey_hash(const struct firmware_image *image);
 
-int flashrom_read_image(struct firmware_image *image, const char *region,
-			 int verbosity);
-int flashrom_write_image(const struct firmware_image *image,
-			const char *region,
-			const struct firmware_image *diff_image,
-			int do_verify, int verbosity);
-
 #endif  /* VBOOT_REFERENCE_FUTILITY_UPDATER_UTILS_H_ */
diff --git a/futility/flashrom_drv.c b/host/lib/flashrom_drv.c
similarity index 81%
rename from futility/flashrom_drv.c
rename to host/lib/flashrom_drv.c
index 8630b8f..0225047 100644
--- a/futility/flashrom_drv.c
+++ b/host/lib/flashrom_drv.c
@@ -11,15 +11,9 @@
 #include "crossystem.h"
 #include "host_misc.h"
 #include "util_misc.h"
-#include "updater.h"
-
-#define FLASHROM_OUTPUT_WP_PATTERN "write protect is "
-
-/* System environment values. */
-static const char * const FLASHROM_OUTPUT_WP_ENABLED =
-			  FLASHROM_OUTPUT_WP_PATTERN "enabled",
-		  * const FLASHROM_OUTPUT_WP_DISABLED =
-			  FLASHROM_OUTPUT_WP_PATTERN "disabled";
+//#include "updater.h"
+#include "../../futility/futility.h"
+#include "flashrom.h"
 
 // global to allow verbosity level to be injected into callback.
 static enum flashrom_log_level g_verbose_screen = FLASHROM_MSG_INFO;
@@ -194,34 +188,3 @@
 
 	return r;
 }
-
-/* Helper function to return write protection status via given programmer. */
-enum wp_state flashrom_get_wp(const char *programmer)
-{
-	char *command, *result;
-	const char *postfix;
-	int r;
-
-	/* grep is needed because host_shell only returns 1 line. */
-	postfix = " 2>/dev/null | grep \"" FLASHROM_OUTPUT_WP_PATTERN "\"";
-
-
-	/* TODO(b/203715651): link with flashrom directly. */
-	ASPRINTF(&command, "flashrom --wp-status -p %s %s", programmer, postfix);
-
-	/* invokes flashrom(8) with non-zero result if error. */
-	result = host_shell(command);
-	strip_string(result, NULL);
-	free(command);
-	VB2_DEBUG("wp-status: %s\n", result);
-
-	if (strstr(result, FLASHROM_OUTPUT_WP_ENABLED))
-		r = WP_ENABLED;
-	else if (strstr(result, FLASHROM_OUTPUT_WP_DISABLED))
-		r = WP_DISABLED;
-	else
-		r = WP_ERROR;
-	free(result);
-
-	return r;
-}
diff --git a/host/lib/include/flashrom.h b/host/lib/include/flashrom.h
index 0a4f885..eb6d531 100644
--- a/host/lib/include/flashrom.h
+++ b/host/lib/include/flashrom.h
@@ -40,6 +40,8 @@
  * @return VB2_SUCCESS on success, or a relevant error.
  */
 vb2_error_t flashrom_read(struct firmware_image *image, const char *region);
+int flashrom_read_image(struct firmware_image *image, const char *region,
+			 int verbosity);
 
 /**
  * Write using flashrom from a buffer.
@@ -52,3 +54,7 @@
  * @return VB2_SUCCESS on success, or a relevant error.
  */
 vb2_error_t flashrom_write(struct firmware_image *image, const char *region);
+int flashrom_write_image(const struct firmware_image *image,
+			const char *region,
+			const struct firmware_image *diff_image,
+			int do_verify, int verbosity);