Revamp board-specific quirk handling, allow for laptop support

Handle board-specific quirks in three phases:
1. Before Super I/O probing (e.g. blacklisting of some Super I/O probes,
or unhiding the Super I/O)
2. Before the laptop enforcement decision (e.g. whitelisting a laptop
for flashing)
3. After chipset enabling (all current board enables)

Implementation note: All entries in board_pciid_enables get an
additional phase parameter. Alternative variants (3 tables instead of 1)
also have their downsides, and I chose table bloat over table
multiplication).

With this patch, it should be possible to whitelist supported laptops
with a matching entry (phase P2) in board_pciid_enables which points to
a function setting laptop_ok=1. (In case DMI is broken, matching might
be a little bit more difficult, but it is still doable.)

Corresponding to flashrom svn r1294.

Signed-off-by: Carl-Daniel Hailfinger <c-d.hailfinger.devel.2006@gmx.net>
Acked-by: Michael Karcher <flashrom@mkarcher.dialup.fu-berlin.de>
diff --git a/internal.c b/internal.c
index d3866ba..33a4150 100644
--- a/internal.c
+++ b/internal.c
@@ -125,6 +125,7 @@
 #endif
 
 int is_laptop = 0;
+int laptop_ok = 0;
 
 int internal_init(void)
 {
@@ -198,6 +199,9 @@
 
 	dmi_init();
 
+	/* In case Super I/O probing would cause pretty explosions. */
+	board_handle_before_superio();
+
 	/* Probe for the Super I/O chip and fill global struct superio. */
 	probe_superio();
 #else
@@ -208,10 +212,13 @@
 	 */
 #endif
 
-	/* Warn if a laptop is detected. */
-	if (is_laptop) {
+	/* Check laptop whitelist. */
+	board_handle_before_laptop();
+
+	/* Warn if a non-whitelisted laptop is detected. */
+	if (is_laptop && !laptop_ok) {
 		msg_perr("========================================================================\n"
-			 "WARNING! You seem to be running flashrom on a laptop.\n"
+			 "WARNING! You seem to be running flashrom on an unsupported laptop.\n"
 			 "Laptops, notebooks and netbooks are difficult to support and we recommend\n"
 			 "to use the vendor flashing utility. The embedded controller (EC) in these\n"
 			 "machines often interacts badly with flashing.\n"