Refactor the -p internal:mainboard handling

This patch gets rid of some global variables and makes lots of bits along
the code path that control the board enable execution more generic and
clearer. From now on flashrom aborts on a few more occasions that should be
safer for the user. For example it aborts if the enable function for the
specified mainboard (enable) can not be found.

Parts of the board_match_cbname refactoring were done by Carl-Daniel.

Corresponding to flashrom svn r1577.

Signed-off-by: Stefan Tauner <stefan.tauner@alumni.tuwien.ac.at>
Signed-off-by: Carl-Daniel Hailfinger <c-d.hailfinger.devel.2006@gmx.net>
Acked-by: Carl-Daniel Hailfinger <c-d.hailfinger.devel.2006@gmx.net>
diff --git a/flashrom.c b/flashrom.c
index 9544155..ee01e60 100644
--- a/flashrom.c
+++ b/flashrom.c
@@ -1012,12 +1012,11 @@
 					  "work, but to support all possible "
 					  "features");
 
-			msg_cinfo(" we need to add them manually.\nYou "
-				  "can help us by mailing us the output of "
-				  "the following command to flashrom@flashrom."
-				  "org: \n'flashrom -VV [plus the "
-				  "-p/--programmer parameter (if needed)]"
-				  "'\nThanks for your help!\n"
+			msg_cinfo(" we need to add them manually.\n"
+				  "You can help us by mailing us the output of the following command to "
+				  "flashrom@flashrom.org:\n"
+				  "'flashrom -VV [plus the -p/--programmer parameter]'\n"
+				  "Thanks for your help!\n"
 				  "===\n");
 		}
 
@@ -1814,11 +1813,16 @@
 		}
 
 #if CONFIG_INTERNAL == 1
-		if (programmer == PROGRAMMER_INTERNAL)
-			if (show_id(newcontents, size)) {
+		if (programmer == PROGRAMMER_INTERNAL && cb_check_image(newcontents, size) < 0) {
+			if (force_boardmismatch) {
+				msg_pinfo("Proceeding anyway because user forced us to.\n");
+			} else {
+				msg_perr("Aborting. You can override this with "
+					 "-p internal:boardmismatch=force.\n");
 				ret = 1;
 				goto out;
 			}
+		}
 #endif
 	}