Patchwork [DEMO] Merge print/print_wiki tables

login
register
about
Submitter Michael Karcher
Date 2010-03-14 15:42:26
Message ID <1268581346-12234-1-git-send-email-flashrom@mkarcher.dialup.fu-berlin.de>
Download mbox | patch
Permalink /patch/1044/
State Superseded
Headers show

Comments

Michael Karcher - 2010-03-14 15:42:26
No merge of boards_need_enable and the board enable table as I would never
get that patch past Luc Verhaegen. But a consistency check for these two
tables can be added to the flashrom selftest.

Note, this DEMO patch is broken in that it does not print "-m" parameters anymore.

Signed-off-by: Michael Karcher <flashrom@mkarcher.dialup.fu-berlin.de>
---
 flash.h      |    4 +
 print.c      |  276 +++++++++++++++++++++++++---------------------
 print_wiki.c |  349 ++++++++++------------------------------------------------
 3 files changed, 209 insertions(+), 420 deletions(-)
Carl-Daniel Hailfinger - 2010-03-25 20:38:11
On 14.03.2010 16:42, Michael Karcher wrote:
> No merge of boards_need_enable and the board enable table as I would never
> get that patch past Luc Verhaegen. But a consistency check for these two
> tables can be added to the flashrom selftest.
>
> Note, this DEMO patch is broken in that it does not print "-m" parameters anymore.
>
> Signed-off-by: Michael Karcher <flashrom@mkarcher.dialup.fu-berlin.de>

Hm. I'm not exactly thrilled about this patch (not your fault).
Yes, it reduces a sizable amount of duplication. Yes, it reduces the
amount of consistency checking we have to do. Yes, it will probably
reduce the number of mismatch bugs each time someone adds a new board.
Still, the original reason I didn't want URLs and board names in the
same master table is that I personally think URLs are ugly and should
not be in flashrom at all. print_wiki.c allowed me to ignore that stuff
without having to sacrifice working on any board lists. I can just
pretend print_wiki doesn't exist and be happy. ;-)

I won't veto the patch for two reasons:
1. You create most board enables and add most supported boards nowadays,
so this is much more "your" turf than mine, and it should be in a state
that makes development easier for you.
2. Uwe created most of the printing (and IIRC all of the wiki) code, so
he will know if this patch is a good idea or not.

If Uwe acks this, go ahead.

Regards,
Carl-Daniel
Michael Karcher - 2010-03-25 22:25:45
Am Donnerstag, den 25.03.2010, 21:38 +0100 schrieb Carl-Daniel
Hailfinger:
> > No merge of boards_need_enable and the board enable table as I would never
> > get that patch past Luc Verhaegen. But a consistency check for these two
> > tables can be added to the flashrom selftest.
> Hm. I'm not exactly thrilled about this patch (not your fault).
[...]
> Still, the original reason I didn't want URLs and board names in the
> same master table is that I personally think URLs are ugly and should
> not be in flashrom at all. print_wiki.c allowed me to ignore that stuff
> without having to sacrifice working on any board lists.
Which is exactly the reason why the tables get out of sync.

We really should have one board database somewhere, and have the board
enable table, and the board list (in the Wiki) generated from that. It
thus should include (at least) Board vendor/model, testing status
(works/broken), type (laptop system/desktop board), optionally DMI/PCI
IDs for board recognition, max decode sizes, in future SuperI/O chip,
and the board enable function. This table has to be in the flashrom VCS,
so a online database is not an option. It will be ugly to have it in
source code, I know quite well that Luc does not really like expanding
the board enable table for that reason. I see that you don't like
expanding the board tables for that reason, but I still think the only
way to keep things consistent is to have one master board table, though
I have no idea whether this is politically possible and technically
handleable. svn merges of patches to "the one big table" will probably
be a pain in the <you know what>.

> 1. You create most board enables and add most supported boards nowadays,
> so this is much more "your" turf than mine, and it should be in a state
> that makes development easier for you.
I didn't even realize that writing a board enable involves adding an URL
to the wiki table until recently...

> 2. Uwe created most of the printing (and IIRC all of the wiki) code, so
> he will know if this patch is a good idea or not.
Uwe asked me to create this demo patch.

Anyway, thanks for your input.

Regards,
  Michael Karcher
Carl-Daniel Hailfinger - 2010-03-25 22:59:18
On 25.03.2010 23:25, Michael Karcher wrote:
> Am Donnerstag, den 25.03.2010, 21:38 +0100 schrieb Carl-Daniel
> Hailfinger:
>   
>> 2. Uwe created most of the printing (and IIRC all of the wiki) code, so
>> he will know if this patch is a good idea or not.
>>     
> Uwe asked me to create this demo patch.
>
> Anyway, thanks for your input.
>   

I'm very sorry if my sort-of-review sounded dismissing. That was
unintentional and I wish to apologize for any negative feelings caused
by my mail.

If Uwe asked for that patch, I'm sure he will be happy to review and
ack. You do have a point with the synchronization problems, and I'll
just keep quiet in the future about this area of code.

Regards,
Carl-Daniel
Michael Karcher - 2010-03-26 05:57:07
Am Donnerstag, den 25.03.2010, 23:59 +0100 schrieb Carl-Daniel
Hailfinger:
> I'm very sorry if my sort-of-review sounded dismissing. That was
> unintentional and I wish to apologize for any negative feelings caused
> by my mail.
No, sorry. Your feedback is very appreciated! This mail does not cause
negative feelings, it just shows that the problem of managing the board
list in a sane way is complicated and needs discussion!

> If Uwe asked for that patch, I'm sure he will be happy to review and
> ack. You do have a point with the synchronization problems, and I'll
> just keep quiet in the future about this area of code.
Please continue to input your oppinion. I believe that even negative
feedback is better than no feedback - you might still be overruled,
though. And this DEMO patch can not be committed, as it kills part of
the functionality (as said in the original mail). I just sent it here
exactly for the discussion about this approach.

Regards,
  Michael Karcher

Patch

diff --git a/flash.h b/flash.h
index 34b04e6..c203a79 100644
--- a/flash.h
+++ b/flash.h
@@ -297,6 +297,10 @@  extern struct board_pciid_enable board_pciid_enables[];
 struct board_info {
 	const char *vendor;
 	const char *name;
+#ifdef PRINT_WIKI_SUPPORT
+	const char *url;
+	const char *note;
+#endif
 };
 
 extern const struct board_info boards_ok[];
diff --git a/print.c b/print.c
index 17a303d..8a5efe2 100644
--- a/print.c
+++ b/print.c
@@ -249,114 +249,125 @@  void print_supported(void)
 #endif
 }
 
+#ifdef PRINT_WIKI_SUPPORT
+#define B(vendor, name, url, notes) { vendor, name, url, notes, }
+#else
+#define B(vendor, name, url, notes) { vendor, name, }
+#endif
 
 #if INTERNAL_SUPPORT == 1
 /* Please keep this list alphabetically ordered by vendor/board. */
 const struct board_info boards_ok[] = {
 	/* Verified working boards that don't need write-enables. */
-	{ "Abit",		"AX8", },
-	{ "Abit",		"Fatal1ty F-I90HD", },
-	{ "Advantech",		"PCM-5820", },
-	{ "ASI",		"MB-5BLMP", },
-	{ "ASRock",		"A770CrossFire", },
-	{ "ASRock",		"K8S8X", },
-	{ "ASRock",		"M3A790GXH/128M" },
-	{ "ASUS",		"A7N8X Deluxe", },
-	{ "ASUS",		"A7N8X-E Deluxe", },
-	{ "ASUS",		"A7V400-MX", },
-	{ "ASUS",		"A7V8X-MX", },
-	{ "ASUS",		"A7V8X-X", },
-	{ "ASUS",		"A8N-E", },
-	{ "ASUS",		"A8NE-FM/S", },
-	{ "ASUS",		"A8N-SLI", },
-	{ "ASUS",		"A8N-SLI Premium", },
-	{ "ASUS",		"A8V Deluxe", },
-	{ "ASUS",		"A8V-E Deluxe", },
-	{ "ASUS",		"A8V-E SE", },
-	{ "ASUS",		"K8V", },
-	{ "ASUS",		"K8V SE Deluxe", },
-	{ "ASUS",		"K8V-X SE", },
-	{ "ASUS",		"M2A-MX", },
-	{ "ASUS",		"M2A-VM", },
-	{ "ASUS",		"M2N-E", },
-	{ "ASUS",		"M2V", },
-	{ "ASUS",		"M3A78-EM", },
-	{ "ASUS",		"P2B", },
-	{ "ASUS",		"P2B-D", },
-	{ "ASUS",		"P2B-DS", },
-	{ "ASUS",		"P2B-F", },
-	{ "ASUS",		"P2L97-S", },
-	{ "ASUS",		"P5B-Deluxe", },
-	{ "ASUS",		"P5KC", },
-	{ "ASUS",		"P5L-MX", },
-	{ "ASUS",		"P6T Deluxe V2", },
-	{ "A-Trend",		"ATC-6220", },
-	{ "BCOM",		"WinNET100", },
-	{ "DFI",		"Blood-Iron P35 T2RL", },
-	{ "Elitegroup",		"K7S5A", },
-	{ "Elitegroup",		"P6VAP-A+", },
-	{ "GIGABYTE",		"GA-6BXC", },
-	{ "GIGABYTE",		"GA-6BXDU", },
-	{ "GIGABYTE",		"GA-6ZMA", },
-	{ "GIGABYTE",		"GA-7ZM", },
-	{ "GIGABYTE",		"GA-EP35-DS3L", },
-	{ "GIGABYTE",		"GA-EX58-UD4P", },
-	{ "GIGABYTE",		"GA-MA69VM-S2", },
-	{ "GIGABYTE",		"GA-MA78GPM-DS2H", },
-	{ "GIGABYTE",		"GA-MA790GP-DS4H", },
-	{ "GIGABYTE",		"GA-MA770T-UD3P", },
-	{ "Intel",		"EP80759", },
-	{ "Jetway",		"J7F4K1G5D-PB", },
-	{ "MSI",                "MS-6153", },
-	{ "MSI",                "MS-6156", },
-	{ "MSI",		"MS-6570 (K7N2)", },
-	{ "MSI",		"MS-7065", },
-	{ "MSI",		"MS-7168 (Orion)", },
-	{ "MSI",		"MS-7236 (945PL Neo3)", },
-	{ "MSI",		"MS-7255 (P4M890M)", },
-	{ "MSI",		"MS-7345 (P35 Neo2-FIR)", },
-	{ "MSI",		"MS-7368 (K9AG Neo2-Digital)", },
-	{ "NEC",		"PowerMate 2000", },
-	{ "PC Engines",		"Alix.1c", },
-	{ "PC Engines",		"Alix.2c2", },
-	{ "PC Engines",		"Alix.2c3", },
-	{ "PC Engines",		"Alix.3c3", },
-	{ "PC Engines",		"Alix.3d3", },
-	{ "RCA",		"RM4100", },
-	{ "Sun",		"Blade x6250", },
-	{ "Supermicro",		"H8QC8", },
-	{ "Thomson",		"IP1000", },
-	{ "TriGem",		"Lomita", },
-	{ "T-Online",		"S-100", },
-	{ "Tyan",		"iS5375-1U", },
-	{ "Tyan",		"S1846", },
-	{ "Tyan",		"S2466", },
-	{ "Tyan",		"S2881", },
-	{ "Tyan",		"S2882", },
-	{ "Tyan",		"S2882-D", },
-	{ "Tyan",		"S2891", },
-	{ "Tyan",		"S2892", },
-	{ "Tyan",		"S2895", },
-	{ "Tyan",		"S3095", },
-	{ "Tyan",		"S5180", },
-	{ "Tyan",		"S5191", },
-	{ "Tyan",		"S5197", },
-	{ "Tyan",		"S5211", },
-	{ "Tyan",		"S5211-1U", },
-	{ "Tyan",		"S5220", },
-	{ "Tyan",		"S5375", },
-	{ "Tyan",		"S5376G2NR/S5376WAG2NR", },
-	{ "Tyan",		"S5377", },
-	{ "Tyan",		"S5397", },
-	{ "VIA",		"EPIA-CN", },
-	{ "VIA",		"EPIA-EX15000G", },
-	{ "VIA",		"EPIA-LN", },
-	{ "VIA",		"EPIA-M700", },
-	{ "VIA",		"EPIA-NX15000G", },
-	{ "VIA",		"EPIA-SP", },
-	{ "VIA",		"NAB74X0", },
-	{ "VIA",		"pc2500e", },
-	{ "VIA",		"VB700X", },
+	B("Abit",		"AX8",			"http://www.abit.com.tw/page/en/motherboard/motherboard_detail.php?DEFTITLE=Y&fMTYPE=Socket%20939&pMODEL_NAME=AX8", NULL),
+	B("Abit",		"Fatal1ty F-I90HD",	"http://www.abit.com.tw/page/de/motherboard/motherboard_detail.php?pMODEL_NAME=Fatal1ty+F-I90HD&fMTYPE=LGA775", NULL),
+	B("Advantech",		"PCM-5820",		"http://www.emacinc.com/sbc_pc_compatible/pcm_5820.htm", NULL),
+	B("ASI",		"MB-5BLMP",		"http://www.hojerteknik.com/winnet.htm",
+								"Used in the IGEL WinNET III thin client."),
+	B("ASRock",		"A770CrossFire",	"http://www.asrock.com/mb/overview.asp?Model=A770CrossFire&s=AM2\%2b", NULL),
+	B("ASRock",		"K8S8X",		"http://www.asrock.com/mb/overview.asp?Model=K8S8X",
+								"The Super I/O isn't found on this board. See http://www.flashrom.org/pipermail/flashrom/2009-November/000937.html."),
+	B("ASRock",		"M3A790GXH/128M",	"http://www.asrock.com/MB/overview.asp?Model=M3A790GXH/128M", NULL),
+	B("ASUS",		"A7N8X Deluxe",		"http://www.asus.com/Product.aspx?P_ID=wAsRYm41KTp78MFC", NULL),
+	B("ASUS",		"A7N8X-E Deluxe",	"http://www.asus.com/products.aspx?l1=3&l2=13&l3=56&l4=0&model=217&modelmenu=1", NULL),
+	B("ASUS",		"A7V400-MX",		"http://www.asus.com.tw/products.aspx?l1=3&l2=13&l3=63&l4=0&model=228&modelmenu=1", NULL),
+	B("ASUS",		"A7V8X-MX",		"http://www.asus.com.tw/products.aspx?l1=3&l2=13&l3=64&l4=0&model=229&modelmenu=1", NULL),
+	B("ASUS",		"A8N-E",		"http://www.asus.com.tw/products.aspx?l1=3&l2=15&l3=171&l4=0&model=455&modelmenu=2", NULL),
+	B("ASUS",		"A8NE-FM/S",		"http://www.hardwareschotte.de/hardware/preise/proid_1266090/preis_ASUS+A8NE-FM", NULL),
+	B("ASUS",		"A8N-SLI",		"http://asus.com/product.aspx?P_ID=J9FKa8z2xVId3pDK", NULL),
+	B("ASUS",		"A8N-SLI Premium",	"http://www.asus.com.tw/products.aspx?l1=3&l2=15&l3=148&l4=0&model=539&modelmenu=1", NULL),
+	B("ASUS",		"A8V Deluxe",		"http://www.asus.com/product.aspx?P_ID=tvpdgPNCPaABZRVU", NULL),
+	B("ASUS",		"A8V-E Deluxe",		"http://www.asus.com.tw/products.aspx?l1=3&l2=15&l3=143&l4=0&model=376&modelmenu=1", NULL),
+	B("ASUS",		"A8V-E SE",		"http://www.asus.com.tw/products.aspx?l1=3&l2=15&l3=143&l4=0&model=576&modelmenu=1",
+								"See http://www.coreboot.org/pipermail/coreboot/2007-October/026496.html."),
+	B("ASUS",		"K8V",			"http://www.asus.com/product.aspx?P_ID=fG2KZOWF7v6MRFRm", NULL),
+	B("ASUS",		"K8V SE Deluxe",	"http://www.asus.com/product.aspx?P_ID=65HeDI8XM1u6Uy6o", NULL),
+	B("ASUS",		"K8V-X SE",		"http://asus.com/product.aspx?P_ID=lzDXlbBVHkdckHVr", NULL),
+	B("ASUS",		"M2A-MX",		"http://www.asus.com/products.aspx?l1=3&l2=101&l3=583&l4=0&model=1909&modelmenu=1", NULL),
+	B("ASUS",		"M2A-VM",		"http://www.asus.com.tw/products.aspx?l1=3&l2=101&l3=496&l4=0&model=1568&modelmenu=1",
+								"See http://www.coreboot.org/pipermail/coreboot/2007-September/025281.html."),
+	B("ASUS",		"M2N-E",		"http://www.asus.com/products.aspx?l1=3&l2=101&l3=308&l4=0&model=1181&modelmenu=1",
+								"If the machine doesn't come up again after flashing, try resetting the NVRAM(CMOS). The MAC address of the onboard network card will change to the value stored in the new image, so backup the old address first. See http://www.flashrom.org/pipermail/flashrom/2009-November/000879.html"),
+	B("ASUS",		"M2V",			"http://asus.com/Product.aspx?P_ID=OqYlEDFfF6ZqZGvp", NULL),
+	B("ASUS",		"M3A78-EM",		"http://www.asus.com/product.aspx?P_ID=KjpYqzmAd9vsTM2D", NULL),
+	B("ASUS",		"P2B",			"http://www.motherboard.cz/mb/asus/P2B.htm", NULL),
+	B("ASUS",		"P2B-D",		"ftp://ftp.asus.com.tw/pub/ASUS/mb/slot1/440bx/p2b-d/", NULL),
+	B("ASUS",		"P2B-DS",		"ftp://ftp.asus.com.tw/pub/ASUS/mb/slot1/440bx/p2b-ds/", NULL),
+	B("ASUS",		"P2B-F",		"http://www.motherboard.cz/mb/asus/P2B-F.htm", NULL),
+	B("ASUS",		"P2L97-S",		"http://www.motherboard.cz/mb/asus/P2L97-S.htm", NULL),
+	B("ASUS",		"P5B-Deluxe",		"ftp://ftp.asus.com.tw/pub/ASUS/mb/socket775/P5B-Deluxe/", NULL),
+	B("ASUS",		"P5KC",			"http://www.asus.com/product.aspx?P_ID=fFZ8oUIGmLpwNMjj", NULL),
+	B("ASUS",		"P5L-MX",		"http://www.asus.com/product.aspx?P_ID=X70d3NCzH2DE9vWH", NULL),
+	B("ASUS",		"P6T Deluxe V2",	"http://www.asus.com/product.aspx?P_ID=iRlP8RG9han6saZx", NULL),
+	B("A-Trend",		"ATC-6220",		"http://www.motherboard.cz/mb/atrend/atc6220.htm", NULL),
+	B("BCOM",		"WinNET100",		"http://www.coreboot.org/BCOM_WINNET100",
+								"Used in the IGEL-316 thin client."),
+	B("DFI",		"Blood-Iron P35 T2RL",	"http://lp.lanparty.com.tw/portal/CM/cmproduct/XX_cmproddetail/XX_WbProdsWindow?itemId=516&downloadFlag=false&action=1", NULL),
+	B("Elitegroup",		"K7S5A",		"http://www.ecs.com.tw/ECSWebSite/Products/ProductsDetail.aspx?detailid=279&CategoryID=1&DetailName=Specification&MenuID=1&LanID=0", NULL),
+	B("Elitegroup",		"P6VAP-A+",		"http://www.ecs.com.tw/ECSWebSite/Products/ProductsDetail.aspx?detailid=117&CategoryID=1&DetailName=Specification&MenuID=1&LanID=0", NULL),
+	B("GIGABYTE",		"GA-6BXC",		"http://www.gigabyte.com.tw/Products/Motherboard/Products_Spec.aspx?ClassValue=Motherboard&ProductID=1445&ProductName=GA-6BXC", NULL),
+	B("GIGABYTE",		"GA-6BXDU",		"http://www.gigabyte.com.tw/Products/Motherboard/Products_Spec.aspx?ProductID=1429", NULL),
+	B("GIGABYTE",		"GA-6ZMA",		"http://www.gigabyte.de/Support/Motherboard/BIOS_Model.aspx?ProductID=3289", NULL),
+	B("GIGABYTE",		"GA-7ZM",		NULL,
+								"Works fine if you remove jumper JP9 on the board and disable the flash protection BIOS option."),
+	B("GIGABYTE",		"GA-EP35-DS3L",		"http://www.gigabyte.com.tw/Products/Motherboard/Products_Overview.aspx?ProductID=2778", NULL),
+	B("GIGABYTE",		"GA-EX58-UD4P",		"http://www.gigabyte.com.tw/Products/Motherboard/Products_Overview.aspx?ProductID=2986", NULL),
+	B("GIGABYTE",		"GA-MA69VM-S2",		"http://www.gigabyte.com.tw/Products/Motherboard/Products_Overview.aspx?ProductID=2500", NULL),
+	B("GIGABYTE",		"GA-MA78GPM-DS2H",	"http://www.gigabyte.com.tw/Products/Motherboard/Products_Spec.aspx?ProductID=2859", NULL),
+	B("GIGABYTE",		"GA-MA790GP-DS4H",	"http://www.gigabyte.com.tw/Products/Motherboard/Products_Spec.aspx?ProductID=2887", NULL),
+	B("GIGABYTE",		"GA-MA770T-UD3P",	"http://www.gigabyte.com.tw/Products/Motherboard/Products_Spec.aspx?ProductID=3096", NULL),
+	B("Intel",		"EP80759",		NULL, NULL),
+	B("Jetway",		"J7F4K1G5D-PB",		"http://www.jetway.com.tw/jetway/system/productshow2.asp?id=389&proname=J7F4K1G5D-P", NULL),
+	B("MSI",                "MS-6153",		"http://www.msi.com/index.php?func=proddesc&maincat_no=1&cat2_no=&cat3_no=&prod_no=336", NULL),
+	B("MSI",                "MS-6156",		"http://uk.ts.fujitsu.com/rl/servicesupport/techsupport/boards/Motherboards/MicroStar/Ms6156/MS6156.htm", NULL),
+	B("MSI",		"MS-6570 (K7N2)",	"http://www.msi-computer.de/index.php?func=proddesc&prod_no=519&maincat_no=1", NULL),
+	B("MSI",		"MS-7065",		"http://browse.geekbench.ca/geekbench2/view/53114", NULL),
+	B("MSI",		"MS-7168 (Orion)",	"http://support.packardbell.co.uk/uk/item/index.php?i=spec_orion&pi=platform_honeymoon_istart", NULL),
+	B("MSI",		"MS-7236 (945PL Neo3)",	"http://www.msi.com/index.php?func=proddesc&maincat_no=1&prod_no=1173", NULL),
+	B("MSI",		"MS-7255 (P4M890M)",	"http://www.tcsbahamas.com/P4M89.htm", NULL),
+	B("MSI",		"MS-7345 (P35 Neo2-FIR)","http://www.msi.com/index.php?func=prodcpusupport&maincat_no=1&cat2_no=170&cat3_no=&prod_no=1261", NULL),
+	B("MSI",		"MS-7368 (K9AG Neo2-Digital)","http://www.msi.com/index.php?func=proddesc&maincat_no=1&prod_no=1241", NULL),
+	B("NEC",		"PowerMate 2000",	"http://support.necam.com/mobilesolutions/hardware/Desktops/pm2000/celeron/", NULL),
+	B("PC Engines",		"Alix.1c",		"http://pcengines.ch/alix1c.htm", NULL),
+	B("PC Engines",		"Alix.2c2",		"http://pcengines.ch/alix2c2.htm", NULL),
+	B("PC Engines",		"Alix.2c3",		"http://pcengines.ch/alix2c3.htm", NULL),
+	B("PC Engines",		"Alix.3c3",		"http://pcengines.ch/alix3c3.htm", NULL),
+	B("PC Engines",		"Alix.3d3",		"http://pcengines.ch/alix3d3.htm", NULL),
+	B("RCA",		"RM4100",		"http://www.settoplinux.org/index.php?title=RCA_RM4100", NULL),
+	B("Sun",		"Blade x6250",		"http://www.sun.com/servers/blades/x6250/", NULL),
+	B("Supermicro",		"H8QC8",		"http://www.supermicro.com/Aplus/motherboard/Opteron/nforce/H8QC8.cfm", NULL),
+	B("Thomson",		"IP1000",		"http://www.settoplinux.org/index.php?title=Thomson_IP1000", NULL),
+	B("TriGem",		"Lomita",		"http://www.e4allupgraders.info/dir1/motherboards/socket370/lomita.shtml", NULL),
+	B("T-Online",		"S-100",		"http://wiki.freifunk-hannover.de/T-Online_S_100", NULL),
+	B("Tyan",		"iS5375-1U",		"http://www.tyan.com/product_board_detail.aspx?pid=610", NULL),
+	B("Tyan",		"S1846",		"http://www.tyan.com/archive/products/html/tsunamiatx.html", NULL),
+	B("Tyan",		"S2466",		"http://www.tyan.com/product_board_detail.aspx?pid=461", NULL),
+	B("Tyan",		"S2881",		"http://www.tyan.com/product_board_detail.aspx?pid=115", NULL),
+	B("Tyan",		"S2882",		"http://www.tyan.com/product_board_detail.aspx?pid=121", NULL),
+	B("Tyan",		"S2882-D",		"http://www.tyan.com/product_board_detail.aspx?pid=127", NULL),
+	B("Tyan",		"S2891",		"http://www.tyan.com/product_board_detail.aspx?pid=144", NULL),
+	B("Tyan",		"S2892",		"http://www.tyan.com/product_board_detail.aspx?pid=145", NULL),
+	B("Tyan",		"S2895",		"http://www.tyan.com/archive/products/html/thunderk8we.html", NULL),
+	B("Tyan",		"S3095",		"http://www.tyan.com/product_board_detail.aspx?pid=181", NULL),
+	B("Tyan",		"S5180",		"http://www.tyan.com/product_board_detail.aspx?pid=456", NULL),
+	B("Tyan",		"S5191",		"http://www.tyan.com/product_board_detail.aspx?pid=343", NULL),
+	B("Tyan",		"S5197",		"http://www.tyan.com/product_board_detail.aspx?pid=349", NULL),
+	B("Tyan",		"S5211",		"http://www.tyan.com/product_board_detail.aspx?pid=591", NULL),
+	B("Tyan",		"S5211-1U",		"http://www.tyan.com/product_board_detail.aspx?pid=593", NULL),
+	B("Tyan",		"S5220",		"http://www.tyan.com/product_board_detail.aspx?pid=597", NULL),
+	B("Tyan",		"S5375",		"http://www.tyan.com/product_board_detail.aspx?pid=566", NULL),
+	B("Tyan",		"S5376G2NR/S5376WAG2NR","http://www.tyan.com/product_board_detail.aspx?pid=605", NULL),
+	B("Tyan",		"S5377",		"http://www.tyan.com/product_SKU_spec.aspx?ProductType=MB&pid=642&SKU=600000017", NULL),
+	B("Tyan",		"S5397",		"http://www.tyan.com/product_board_detail.aspx?pid=560", NULL),
+	B("VIA",		"EPIA-CN",		NULL, NULL),
+	B("VIA",		"EPIA-EX15000G",	"http://www.via.com.tw/en/products/embedded/ProductDetail.jsp?productLine=1&motherboard_id=450", NULL),
+	B("VIA",		"EPIA-LN",		"http://www.via.com.tw/en/products/mainboards/motherboards.jsp?motherboard_id=473", NULL),
+	B("VIA",		"EPIA-M700",		"http://via.com.tw/servlet/downloadSvl?motherboard_id=670&download_file_id=3700", NULL),
+	B("VIA",		"EPIA-NX15000G",	"http://www.via.com.tw/en/products/embedded/ProductDetail.jsp?productLine=1&motherboard_id=470", NULL),
+	B("VIA",		"EPIA-SP",		NULL, NULL),
+	B("VIA",		"NAB74X0",		"http://www.via.com.tw/en/products/mainboards/motherboards.jsp?motherboard_id=590", NULL),
+	B("VIA",		"pc2500e",		"http://www.via.com.tw/en/initiatives/empowered/pc2500_mainboard/index.jsp", NULL),
+	B("VIA",		"VB700X",		"http://www.via.com.tw/en/products/mainboards/motherboards.jsp?motherboard_id=490", NULL),
 
 	{},
 };
@@ -364,24 +375,26 @@  const struct board_info boards_ok[] = {
 /* Please keep this list alphabetically ordered by vendor/board. */
 const struct board_info boards_bad[] = {
 	/* Verified non-working boards (for now). */
-	{ "Abit",		"IS-10", },
-	{ "ASRock",		"K7VT4A+", },
-	{ "ASUS",		"MEW-AM", },
-	{ "ASUS",		"MEW-VM", },
-	{ "ASUS",		"P3B-F", },
-	{ "ASUS",		"P5B", },
-	{ "ASUS",		"P5BV-M", },
-	{ "Biostar",		"M6TBA", },
-	{ "Boser",		"HS-6637", },
-	{ "DFI",		"855GME-MGF", },
-	{ "FIC",		"VA-502", },
-	{ "MSI",		"MS-6178", },
-	{ "MSI",		"MS-7260 (K9N Neo)", },
-	{ "Soyo",		"SY-5VD", },
-	{ "Sun",		"Fire x4150", },
-	{ "Sun",		"Fire x4200", },
-	{ "Sun",		"Fire x4540", },
-	{ "Sun",		"Fire x4600", },
+	B("Abit",		"IS-10",		"http://www.abit.com.tw/page/en/motherboard/motherboard_detail.php?pMODEL_NAME=IS-10&fMTYPE=Socket+478", NULL),
+	B("ASRock",		"K7VT4A+",		"http://www.asrock.com/mb/overview.asp?Model=K7VT4A%%2b&s=", NULL),
+	B("ASUS",		"MEW-AM",		"ftp://ftp.asus.com.tw/pub/ASUS/mb/sock370/810/mew-am/", NULL),
+	B("ASUS",		"MEW-VM",		"http://www.elhvb.com/mboards/OEM/HP/manual/ASUS%20MEW-VM.htm", NULL),
+	B("ASUS",		"P3B-F",		"ftp://ftp.asus.com.tw/pub/ASUS/mb/slot1/440bx/p3b-f/", NULL),
+	B("ASUS",		"P5B",			"ftp://ftp.asus.com.tw/pub/ASUS/mb/socket775/P5B/", NULL),
+	B("ASUS",		"P5BV-M",		"ftp://ftp.asus.com.tw/pub/ASUS/mb/socket775/P5B-VM/", NULL),
+	B("Biostar",		"M6TBA",		"ftp://ftp.biostar-usa.com/manuals/M6TBA/", NULL),
+	B("Boser",		"HS-6637",		"http://www.boser.com.tw/manual/HS-62376637v3.4.pdf", NULL),
+	B("DFI",		"855GME-MGF",		"http://www.dfi.com.tw/portal/CM/cmproduct/XX_cmproddetail/XX_WbProdsWindow?action=e&downloadType=&windowstate=normal&mode=view&downloadFlag=false&itemId=433", NULL),
+	B("FIC",		"VA-502",		"ftp://ftp.fic.com.tw/motherboard/manual/socket7/va-502/", NULL),
+	B("MSI",		"MS-6178",		"http://www.msi-technology.de/index.php?func=proddesc&prod_no=343&maincat_no=1",
+								"Immediately powers off if you try to hot-plug the chip. However, this does '''not''' happen if you use coreboot."),
+	B("MSI",		"MS-7260 (K9N Neo)",	"http://www.msi.com/index.php?func=proddesc&maincat_no=1&prod_no=255",
+								"Interestingly flashrom does not work when the vendor BIOS is booted, but it ''does'' work flawlessly when the machine is booted with coreboot."),
+	B("Soyo",		"SY-5VD",		"http://www.soyo.com/content/Downloads/163/&c=80&p=464&l=English", NULL),
+	B("Sun",		"Fire x4150",		"http://www.sun.com/servers/x64/x4150/", NULL),
+	B("Sun",		"Fire x4200",		"http://www.sun.com/servers/entry/x4200/", NULL),
+	B("Sun",		"Fire x4540",		"http://www.sun.com/servers/x64/x4540/", NULL),
+	B("Sun",		"Fire x4600",		"http://www.sun.com/servers/x64/x4600/", NULL),
 
 	{},
 };
@@ -389,7 +402,7 @@  const struct board_info boards_bad[] = {
 /* Please keep this list alphabetically ordered by vendor/board. */
 const struct board_info laptops_ok[] = {
 	/* Verified working laptops. */
-	{ "Lenovo",		"3000 V100 TF05Cxx", },
+	B("Lenovo",		"3000 V100 TF05Cxx",	"http://www5.pc.ibm.com/europe/products.nsf/products?openagent&brand=Lenovo3000Notebook&series=Lenovo+3000+V+Series#viewallmodelstop", NULL),
 
 	{},
 };
@@ -397,14 +410,21 @@  const struct board_info laptops_ok[] = {
 /* Please keep this list alphabetically ordered by vendor/board. */
 const struct board_info laptops_bad[] = {
 	/* Verified non-working laptops (for now). */
-	{ "Acer",		"Aspire One", },
-	{ "ASUS",		"Eee PC 701 4G", },
-	{ "Dell",		"Latitude CPi A366XT", },
-	{ "HP/Compaq",		"nx9010", },
-	{ "IBM/Lenovo",		"Thinkpad T40p", },
-	{ "IBM/Lenovo",		"240", },
+	B("Acer",		"Aspire One",		NULL,
+								"See http://www.coreboot.org/pipermail/coreboot/2009-May/048041.html"),
+	B("ASUS",		"Eee PC 701 4G",	"http://www.asus.com/product.aspx?P_ID=h6SPd3tEzLEsrEiS",
+								"It seems the chip (25X40VSIG) is behind some SPI flash translation layer (likely in the EC, the ENE KB3310)."),
+	B("Dell",		"Latitude CPi A366XT",	"http://www.coreboot.org/Dell_Latitude_CPi_A366XT",
+								"The laptop immediately powers off if you try to hot-swap the chip. It's not yet tested if write/erase would work on this laptop."),
+	B("HP/Compaq",		"nx9010",		"http://h20000.www2.hp.com/bizsupport/TechSupport/Document.jsp?lang=en&cc=us&objectID=c00348514",
+								"Hangs upon '''flashrom -V''' (needs hard power-cycle then)."),
+	B("IBM/Lenovo",		"Thinkpad T40p",	"http://www.thinkwiki.org/wiki/Category:T40p",
+								"Seems to (partially) work at first, but one block/sector cannot be written which then leaves you with a bricked laptop. Maybe this can be investigated and fixed in software later."),
+	B("IBM/Lenovo",		"240",			"http://www.stanford.edu/~bresnan//tp240.html", NULL),
 
 	{},
 };
 #endif
 
+#undef B
+
diff --git a/print_wiki.c b/print_wiki.c
index ff5a4c8..4787e7f 100644
--- a/print_wiki.c
+++ b/print_wiki.c
@@ -97,251 +97,61 @@  untested laptops unless you have a means to recover from a flashing that goes \
 wrong (a working backup flash chip and/or good soldering skills).\n</div>\n";
 
 /* Please keep these lists alphabetically ordered by vendor/board. */
-const struct board_info_url boards_url[] = {
-	/* Verified working boards that don't need write-enables. */
-	{ "Abit",		"AX8",			"http://www.abit.com.tw/page/en/motherboard/motherboard_detail.php?DEFTITLE=Y&fMTYPE=Socket%20939&pMODEL_NAME=AX8" },
-	{ "Abit",		"Fatal1ty F-I90HD",	"http://www.abit.com.tw/page/de/motherboard/motherboard_detail.php?pMODEL_NAME=Fatal1ty+F-I90HD&fMTYPE=LGA775" },
-	{ "Advantech",		"PCM-5820", 		"http://www.emacinc.com/sbc_pc_compatible/pcm_5820.htm" },
-	{ "ASI",		"MB-5BLMP",		"http://www.hojerteknik.com/winnet.htm" },
-	{ "ASRock",		"A770CrossFire",	"http://www.asrock.com/mb/overview.asp?Model=A770CrossFire&s=AM2\%2b" },
-	{ "ASRock",		"K8S8X",		"http://www.asrock.com/mb/overview.asp?Model=K8S8X" },
-	{ "ASRock",		"M3A790GXH/128M"	"http://www.asrock.com/MB/overview.asp?Model=M3A790GXH/128M" },
-	{ "ASUS",		"A7N8X Deluxe",		"http://www.asus.com/Product.aspx?P_ID=wAsRYm41KTp78MFC" },
-	{ "ASUS",		"A7N8X-E Deluxe",	"http://www.asus.com/products.aspx?l1=3&l2=13&l3=56&l4=0&model=217&modelmenu=1" },
-	{ "ASUS",		"A7V400-MX",		"http://www.asus.com.tw/products.aspx?l1=3&l2=13&l3=63&l4=0&model=228&modelmenu=1" },
-	{ "ASUS",		"A7V8X-MX",		"http://www.asus.com.tw/products.aspx?l1=3&l2=13&l3=64&l4=0&model=229&modelmenu=1" },
-	{ "ASUS",		"A8N-E",		"http://www.asus.com.tw/products.aspx?l1=3&l2=15&l3=171&l4=0&model=455&modelmenu=2" },
-	{ "ASUS",		"A8NE-FM/S",		"http://www.hardwareschotte.de/hardware/preise/proid_1266090/preis_ASUS+A8NE-FM" },
-	{ "ASUS",		"A8N-SLI",		"http://asus.com/product.aspx?P_ID=J9FKa8z2xVId3pDK" },
-	{ "ASUS",		"A8N-SLI Premium",	"http://www.asus.com.tw/products.aspx?l1=3&l2=15&l3=148&l4=0&model=539&modelmenu=1" },
-	{ "ASUS",		"A8V Deluxe",		"http://www.asus.com/product.aspx?P_ID=tvpdgPNCPaABZRVU" },
-	{ "ASUS",		"A8V-E Deluxe",		"http://www.asus.com.tw/products.aspx?l1=3&l2=15&l3=143&l4=0&model=376&modelmenu=1" },
-	{ "ASUS",		"A8V-E SE",		"http://www.asus.com.tw/products.aspx?l1=3&l2=15&l3=143&l4=0&model=576&modelmenu=1" },
-	{ "ASUS",		"K8V",			"http://www.asus.com/product.aspx?P_ID=fG2KZOWF7v6MRFRm" },
-	{ "ASUS",		"K8V SE Deluxe",	"http://www.asus.com/product.aspx?P_ID=65HeDI8XM1u6Uy6o" },
-	{ "ASUS",		"K8V-X SE",		"http://asus.com/product.aspx?P_ID=lzDXlbBVHkdckHVr" },
-	{ "ASUS",		"M2A-MX",		"http://www.asus.com/products.aspx?l1=3&l2=101&l3=583&l4=0&model=1909&modelmenu=1" },
-	{ "ASUS",		"M2A-VM",		"http://www.asus.com.tw/products.aspx?l1=3&l2=101&l3=496&l4=0&model=1568&modelmenu=1" },
-	{ "ASUS",		"M2N-E",		"http://www.asus.com/products.aspx?l1=3&l2=101&l3=308&l4=0&model=1181&modelmenu=1" },
-	{ "ASUS",		"M2V",			"http://asus.com/Product.aspx?P_ID=OqYlEDFfF6ZqZGvp" },
-	{ "ASUS",		"M3A78-EM",		"http://www.asus.com/product.aspx?P_ID=KjpYqzmAd9vsTM2D" },
-	{ "ASUS",		"P2B",			"http://www.motherboard.cz/mb/asus/P2B.htm" },
-	{ "ASUS",		"P2B-D",		"ftp://ftp.asus.com.tw/pub/ASUS/mb/slot1/440bx/p2b-d/" },
-	{ "ASUS",		"P2B-DS",		"ftp://ftp.asus.com.tw/pub/ASUS/mb/slot1/440bx/p2b-ds/" },
-	{ "ASUS",		"P2B-F",		"http://www.motherboard.cz/mb/asus/P2B-F.htm" },
-	{ "ASUS",		"P2L97-S",		"http://www.motherboard.cz/mb/asus/P2L97-S.htm" },
-	{ "ASUS",		"P5B-Deluxe",		"ftp://ftp.asus.com.tw/pub/ASUS/mb/socket775/P5B-Deluxe/" },
-	{ "ASUS",		"P5KC",			"http://www.asus.com/product.aspx?P_ID=fFZ8oUIGmLpwNMjj" },
-	{ "ASUS",		"P5L-MX",		"http://www.asus.com/product.aspx?P_ID=X70d3NCzH2DE9vWH" },
-	{ "ASUS",		"P6T Deluxe V2",	"http://www.asus.com/product.aspx?P_ID=iRlP8RG9han6saZx" },
-	{ "A-Trend",		"ATC-6220",		"http://www.motherboard.cz/mb/atrend/atc6220.htm" },
-	{ "BCOM",		"WinNET100",		"http://www.coreboot.org/BCOM_WINNET100" },
-	{ "DFI",		"Blood-Iron P35 T2RL",	"http://lp.lanparty.com.tw/portal/CM/cmproduct/XX_cmproddetail/XX_WbProdsWindow?itemId=516&downloadFlag=false&action=1" },
-	{ "Elitegroup",		"K7S5A",		"http://www.ecs.com.tw/ECSWebSite/Products/ProductsDetail.aspx?detailid=279&CategoryID=1&DetailName=Specification&MenuID=1&LanID=0" },
-	{ "Elitegroup",		"P6VAP-A+",		"http://www.ecs.com.tw/ECSWebSite/Products/ProductsDetail.aspx?detailid=117&CategoryID=1&DetailName=Specification&MenuID=1&LanID=0" },
-	{ "GIGABYTE",		"GA-6BXC",		"http://www.gigabyte.com.tw/Products/Motherboard/Products_Spec.aspx?ClassValue=Motherboard&ProductID=1445&ProductName=GA-6BXC" },
-	{ "GIGABYTE",		"GA-6BXDU",		"http://www.gigabyte.com.tw/Products/Motherboard/Products_Spec.aspx?ProductID=1429" },
-	{ "GIGABYTE",		"GA-6ZMA",		"http://www.gigabyte.de/Support/Motherboard/BIOS_Model.aspx?ProductID=3289" },
-	{ "GIGABYTE",		"GA-EX58-UD4P",		"http://www.gigabyte.com.tw/Products/Motherboard/Products_Overview.aspx?ProductID=2986" },
-	{ "GIGABYTE",		"GA-EP35-DS3L",		"http://www.gigabyte.com.tw/Products/Motherboard/Products_Overview.aspx?ProductID=2778" },
-	{ "GIGABYTE",		"GA-MA69VM-S2",		"http://www.gigabyte.com.tw/Products/Motherboard/Products_Overview.aspx?ProductID=2500" },
-	{ "GIGABYTE",		"GA-MA790GP-DS4H",	"http://www.gigabyte.com.tw/Products/Motherboard/Products_Spec.aspx?ProductID=2887" },
-	{ "GIGABYTE",		"GA-MA78GPM-DS2H",	"http://www.gigabyte.com.tw/Products/Motherboard/Products_Spec.aspx?ProductID=2859" },
-	{ "GIGABYTE",		"GA-MA770T-UD3P",	"http://www.gigabyte.com.tw/Products/Motherboard/Products_Spec.aspx?ProductID=3096" },
-	{ "Intel",		"EP80759",		NULL },
-	{ "Jetway",		"J7F4K1G5D-PB",		"http://www.jetway.com.tw/jetway/system/productshow2.asp?id=389&proname=J7F4K1G5D-P" },
-	{ "MSI",		"MS-6153",		"http://www.msi.com/index.php?func=proddesc&maincat_no=1&cat2_no=&cat3_no=&prod_no=336" },
-	{ "MSI",		"MS-6156",		"http://uk.ts.fujitsu.com/rl/servicesupport/techsupport/boards/Motherboards/MicroStar/Ms6156/MS6156.htm" },
-	{ "MSI",		"MS-6570 (K7N2)",	"http://www.msi-computer.de/index.php?func=proddesc&prod_no=519&maincat_no=1" },
-	{ "MSI",		"MS-7065",		"http://browse.geekbench.ca/geekbench2/view/53114" },
-	{ "MSI",		"MS-7168 (Orion)",	"http://support.packardbell.co.uk/uk/item/index.php?i=spec_orion&pi=platform_honeymoon_istart" },
-	{ "MSI",		"MS-7236 (945PL Neo3)",	"http://www.msi.com/index.php?func=proddesc&maincat_no=1&prod_no=1173" },
-	{ "MSI",		"MS-7255 (P4M890M)",	"http://www.tcsbahamas.com/P4M89.htm" },
-	{ "MSI",		"MS-7345 (P35 Neo2-FIR)","http://www.msi.com/index.php?func=prodcpusupport&maincat_no=1&cat2_no=170&cat3_no=&prod_no=1261" },
-	{ "MSI",		"MS-7368 (K9AG Neo2-Digital)", "http://www.msi.com/index.php?func=proddesc&maincat_no=1&prod_no=1241" },
-	{ "NEC",		"PowerMate 2000",	"http://support.necam.com/mobilesolutions/hardware/Desktops/pm2000/celeron/" },
-	{ "PC Engines",		"Alix.1c",		"http://pcengines.ch/alix1c.htm" },
-	{ "PC Engines",		"Alix.2c2",		"http://pcengines.ch/alix2c2.htm" },
-	{ "PC Engines",		"Alix.2c3",		"http://pcengines.ch/alix2c3.htm" },
-	{ "PC Engines",		"Alix.3c3",		"http://pcengines.ch/alix3c3.htm" },
-	{ "PC Engines",		"Alix.3d3",		"http://pcengines.ch/alix3d3.htm" },
-	{ "RCA",		"RM4100",		"http://www.settoplinux.org/index.php?title=RCA_RM4100" },
-	{ "Sun",		"Blade x6250",		"http://www.sun.com/servers/blades/x6250/" },
-	{ "Supermicro",		"H8QC8",		"http://www.supermicro.com/Aplus/motherboard/Opteron/nforce/H8QC8.cfm" },
-	{ "Tekram",		"P6Pro-A5",		"http://www.motherboard.cz/mb/tekram/P6Pro-A5.htm" },
-	{ "Thomson",		"IP1000",		"http://www.settoplinux.org/index.php?title=Thomson_IP1000" },
-	{ "TriGem",		"Lomita",		"http://www.e4allupgraders.info/dir1/motherboards/socket370/lomita.shtml" },
-	{ "T-Online",		"S-100",		"http://wiki.freifunk-hannover.de/T-Online_S_100" },
-	{ "Tyan",		"iS5375-1U",		"http://www.tyan.com/product_board_detail.aspx?pid=610" },
-	{ "Tyan",		"S1846",		"http://www.tyan.com/archive/products/html/tsunamiatx.html" },
-	{ "Tyan",		"S2466",		"http://www.tyan.com/product_board_detail.aspx?pid=461" },
-	{ "Tyan",		"S2881",		"http://www.tyan.com/product_board_detail.aspx?pid=115" },
-	{ "Tyan",		"S2882",		"http://www.tyan.com/product_board_detail.aspx?pid=121" },
-	{ "Tyan",		"S2882-D",		"http://www.tyan.com/product_board_detail.aspx?pid=127" },
-	{ "Tyan",		"S2891",		"http://www.tyan.com/product_board_detail.aspx?pid=144" },
-	{ "Tyan",		"S2892",		"http://www.tyan.com/product_board_detail.aspx?pid=145" },
-	{ "Tyan",		"S2895",		"http://www.tyan.com/archive/products/html/thunderk8we.html" },
-	{ "Tyan",		"S3095",		"http://www.tyan.com/product_board_detail.aspx?pid=181" },
-	{ "Tyan",		"S5180",		"http://www.tyan.com/product_board_detail.aspx?pid=456" },
-	{ "Tyan",		"S5191",		"http://www.tyan.com/product_board_detail.aspx?pid=343" },
-	{ "Tyan",		"S5197",		"http://www.tyan.com/product_board_detail.aspx?pid=349" },
-	{ "Tyan",		"S5211",		"http://www.tyan.com/product_board_detail.aspx?pid=591" },
-	{ "Tyan",		"S5211-1U",		"http://www.tyan.com/product_board_detail.aspx?pid=593" },
-	{ "Tyan",		"S5220",		"http://www.tyan.com/product_board_detail.aspx?pid=597" },
-	{ "Tyan",		"S5375",		"http://www.tyan.com/product_board_detail.aspx?pid=566" },
-	{ "Tyan",		"S5376G2NR/S5376WAG2NR","http://www.tyan.com/product_board_detail.aspx?pid=605" },
-	{ "Tyan",		"S5377",		"http://www.tyan.com/product_SKU_spec.aspx?ProductType=MB&pid=642&SKU=600000017" },
-	{ "Tyan",		"S5397",		"http://www.tyan.com/product_board_detail.aspx?pid=560" },
-	{ "VIA",		"EPIA-EX15000G",	"http://www.via.com.tw/en/products/embedded/ProductDetail.jsp?productLine=1&motherboard_id=450" },
-	{ "VIA",		"EPIA-LN",		"http://www.via.com.tw/en/products/mainboards/motherboards.jsp?motherboard_id=473" },
-	{ "VIA",		"EPIA-M700",		"http://via.com.tw/servlet/downloadSvl?motherboard_id=670&download_file_id=3700" },
-	{ "VIA",		"EPIA-NX15000G",	"http://www.via.com.tw/en/products/embedded/ProductDetail.jsp?productLine=1&motherboard_id=470" },
-	{ "VIA",		"NAB74X0",		"http://www.via.com.tw/en/products/mainboards/motherboards.jsp?motherboard_id=590" },
-	{ "VIA",		"pc2500e",		"http://www.via.com.tw/en/initiatives/empowered/pc2500_mainboard/index.jsp" },
-	{ "VIA",		"VB700X",		"http://www.via.com.tw/en/products/mainboards/motherboards.jsp?motherboard_id=490" },
-
-	/* Verified working boards that DO need write-enables. */
-	{ "Abit",		"IP35",			"http://www.abit.com.tw/page/en/motherboard/motherboard_detail.php?fMTYPE=LGA775&pMODEL_NAME=IP35" },
-	{ "Acorp",		"6A815EPD",		"http://web.archive.org/web/20021206163652/www.acorp.com.tw/English/default.asp" },
-	{ "agami",		"Aruma",		"http://web.archive.org/web/20080212111524/http://www.agami.com/site/ais-6000-series" },
-	{ "Albatron",		"PM266A Pro",		"http://www.albatron.com.tw/English/Product/MB/pro_detail.asp?rlink=Overview&no=56" }, /* FIXME */
-	{ "AOpen",		"vKM400Am-S",		"http://usa.aopen.com/products_detail.aspx?Auno=824" },
-	{ "Artec Group",	"DBE61",		"http://wiki.thincan.org/DBE61" },
-	{ "Artec Group",	"DBE62",		"http://wiki.thincan.org/DBE62" },
-	{ "ASUS",		"A7V600-X",		"http://www.asus.com/product.aspx?P_ID=L2XYS0rmtCjeOr4k" },
-	{ "ASUS",		"A7V8X",		"http://www.asus.com/product.aspx?P_ID=qfpaGrAy2kLVo0f2" },
-	{ "ASUS",		"A7V8X-MX SE",		"http://www.asus.com/product.aspx?P_ID=1guVBT1qV5oqhHyZ" },
-	{ "ASUS",		"A7V8X-X",		"http://www.asus.com/product.aspx?P_ID=YcXfRrWHZ9RKoVmw" },
-	{ "ASUS",		"P4B266",		"http://www.ciao.co.uk/ASUS_Intel_845D_Chipset_P4B266__5409807#productdetail" },
-	{ "ASUS",		"P4P800-E Deluxe",	"http://www.asus.com/product.aspx?P_ID=INIJUvLlif7LHp3g" },
-	{ "ASUS",		"P5ND2-SLI Deluxe",	"http://www.asus.com/product.aspx?P_ID=WY7XroDuUImVbgp5" },
-	{ "ASUS",		"P5A",			"ftp://ftp.asus.com.tw/pub/ASUS/mb/sock7/ali/p5a/" },
-	{ "Biostar",		"P4M80-M4",		"http://www.biostar-usa.com/mbdetails.asp?model=p4m80-m4" },
-	{ "Dell",		"PowerEdge 1850",	"http://support.dell.com/support/edocs/systems/pe1850/en/index.htm" },
-	{ "Elitegroup",		"K7VTA3",		"http://www.ecs.com.tw/ECSWebSite/Products/ProductsDetail.aspx?detailid=264&CategoryID=1&DetailName=Specification&MenuID=52&LanID=0" },
-	{ "EPoX",		"EP-8K5A2",		"http://www.epox.com/product.asp?ID=EP-8K5A2" },
-	{ "EPoX",		"EP-8RDA3+",		"http://www.epox.com/product.asp?ID=EP-8RDA3plus" },
-	{ "EPoX",		"EP-BX3",		"http://www.epox.com/product.asp?ID=EP-BX3" },
-	{ "GIGABYTE",		"GA-2761GXDK",		"http://www.computerbase.de/news/hardware/mainboards/amd-systeme/2007/mai/gigabyte_dtx-mainboard/" },
-	{ "GIGABYTE",		"GA-7VT600",		"http://www.gigabyte.com.tw/Products/Motherboard/Products_Spec.aspx?ProductID=1666" },
-	{ "GIGABYTE",		"GA-7ZM",		"http://www.gigabyte.com.tw/Products/Motherboard/Products_Spec.aspx?ProductID=1366" },
-	{ "GIGABYTE",		"GA-K8N-SLI",		"http://www.gigabyte.com.tw/Products/Motherboard/Products_Spec.aspx?ProductID=1928" },
-	{ "GIGABYTE",		"GA-M57SLI-S4",		"http://www.gigabyte.com.tw/Products/Motherboard/Products_Overview.aspx?ProductID=2287&ModelName=GA-M57SLI-S4" },
-	{ "GIGABYTE",		"GA-M61P-S3",		"http://www.gigabyte.com.tw/Products/Motherboard/Products_Spec.aspx?ProductID=2434" },
-	{ "GIGABYTE",		"GA-MA78G-DS3H",	"http://www.gigabyte.com.tw/Products/Motherboard/Products_Spec.aspx?ProductID=2800" }, /* TODO: Rev 1.x or 2.x? */
-	{ "GIGABYTE",		"GA-MA78GM-S2H",	"http://www.gigabyte.com.tw/Products/Motherboard/Products_Spec.aspx?ProductID=2758" }, /* TODO: Rev. 1.0, 1.1, or 2.x? */
-	{ "GIGABYTE",		"GA-MA790FX-DQ6",	"http://www.gigabyte.com.tw/Products/Motherboard/Products_Spec.aspx?ProductID=2690" },
-	{ "HP",			"DL145 G3",		"http://h20000.www2.hp.com/bizsupport/TechSupport/Document.jsp?objectID=c00816835&lang=en&cc=us&taskId=101&prodSeriesId=3219755&prodTypeId=15351" },
-	{ "IBM",		"x3455",		"http://www-03.ibm.com/systems/x/hardware/rack/x3455/index.html" },
-	{ "Intel",		"D201GLY",		"http://www.intel.com/support/motherboards/desktop/d201gly/index.htm" },
-	{ "IWILL",		"DK8-HTX",		"http://web.archive.org/web/20060507170150/http://www.iwill.net/product_2.asp?p_id=98" },
-	{ "Kontron",		"986LCD-M",		"http://de.kontron.com/products/boards+and+mezzanines/embedded+motherboards/miniitx+motherboards/986lcdmmitx.html" },
-	{ "Mitac",		"6513WU",		"http://web.archive.org/web/20050313054828/http://www.mitac.com/micweb/products/tyan/6513wu/6513wu.htm" },
-	{ "MSI",		"MS-6590 (KT4 Ultra)",	"http://www.msicomputer.com/product/p_spec.asp?model=KT4_Ultra&class=mb" },
-	{ "MSI",		"MS-6702E (K8T Neo2-F)","http://www.msicomputer.com/product/p_spec.asp?model=K8T_Neo2-F&class=mb" },
-	{ "MSI",		"MS-6712 (KT4V)",	"http://www.msi.com/index.php?func=proddesc&maincat_no=1&cat2_no=&cat3_no=&prod_no=505" },
-	{ "MSI",		"MS-7046",		"http://www.heimir.de/ms7046/" },
-	{ "MSI",		"MS-7135 (K8N Neo3)",	"http://www.msi-computer.de/index.php?func=proddesc&prod_no=170&maincat_no=1" },
-	{ "Shuttle",		"AK38N",		"http://eu.shuttle.com/en/desktopdefault.aspx/tabid-36/558_read-9889/" },
-	{ "Soyo",		"SY-7VCA",		"http://www.tomshardware.com/reviews/12-socket-370-motherboards,196-15.html" },
-	{ "Tyan",		"S2498 (Tomcat K7M)",	"http://www.tyan.com/archive/products/html/tomcatk7m.html" },
-	{ "VIA",		"EPIA-CN",		"http://www.via.com.tw/en/products/mainboards/motherboards.jsp?motherboard_id=400" },
-	{ "VIA",		"EPIA M/MII/...",	"http://www.via.com.tw/en/products/embedded/ProductDetail.jsp?productLine=1&motherboard_id=202" }, /* EPIA-MII link for now */
-	{ "VIA",		"EPIA-N/NL",		"http://www.via.com.tw/en/products/embedded/ProductDetail.jsp?productLine=1&motherboard_id=221" }, /* EPIA-N link for now */
-	{ "VIA",		"EPIA SP",		"http://www.via.com.tw/en/products/embedded/ProductDetail.jsp?productLine=1&motherboard_id=261" },
-	{ "VIA",		"PC3500G",		"http://www.via.com.tw/en/initiatives/empowered/pc3500_mainboard/index.jsp" },
- 
-	/* Verified non-working boards (for now). */
-	{ "Abit",		"IS-10",		"http://www.abit.com.tw/page/en/motherboard/motherboard_detail.php?pMODEL_NAME=IS-10&fMTYPE=Socket+478" },
-	{ "ASRock",		"K7VT4A+",		"http://www.asrock.com/mb/overview.asp?Model=K7VT4A%%2b&s=" },
-	{ "ASUS",		"MEW-AM",		"ftp://ftp.asus.com.tw/pub/ASUS/mb/sock370/810/mew-am/" },
-	{ "ASUS",		"MEW-VM",		"http://www.elhvb.com/mboards/OEM/HP/manual/ASUS%20MEW-VM.htm" },
-	{ "ASUS",		"P3B-F",		"ftp://ftp.asus.com.tw/pub/ASUS/mb/slot1/440bx/p3b-f/" },
-	{ "ASUS",		"P5B",			"ftp://ftp.asus.com.tw/pub/ASUS/mb/socket775/P5B/" },
-	{ "ASUS",		"P5BV-M",		"ftp://ftp.asus.com.tw/pub/ASUS/mb/socket775/P5B-VM/" },
-	{ "Biostar",		"M6TBA",		"ftp://ftp.biostar-usa.com/manuals/M6TBA/" },
-	{ "Boser",		"HS-6637",		"http://www.boser.com.tw/manual/HS-62376637v3.4.pdf" },
-	{ "DFI",		"855GME-MGF",		"http://www.dfi.com.tw/portal/CM/cmproduct/XX_cmproddetail/XX_WbProdsWindow?action=e&downloadType=&windowstate=normal&mode=view&downloadFlag=false&itemId=433" },
-	{ "FIC",		"VA-502",		"ftp://ftp.fic.com.tw/motherboard/manual/socket7/va-502/" },
-	{ "MSI",		"MS-6178",		"http://www.msi-technology.de/index.php?func=proddesc&prod_no=343&maincat_no=1" },
-	{ "MSI",		"MS-7260 (K9N Neo)",	"http://www.msi.com/index.php?func=proddesc&maincat_no=1&prod_no=255" },
-	{ "Soyo",		"SY-5VD",		"http://www.soyo.com/content/Downloads/163/&c=80&p=464&l=English" },
-	{ "Sun",		"Fire x4540",		"http://www.sun.com/servers/x64/x4540/" },
-	{ "Sun",		"Fire x4150",		"http://www.sun.com/servers/x64/x4150/" },
-	{ "Sun",		"Fire x4200",		"http://www.sun.com/servers/entry/x4200/" },
-	{ "Sun",		"Fire x4600",		"http://www.sun.com/servers/x64/x4600/" },
-
-	/* Verified working laptops. */
-	{ "Lenovo",		"3000 V100 TF05Cxx",	"http://www5.pc.ibm.com/europe/products.nsf/products?openagent&brand=Lenovo3000Notebook&series=Lenovo+3000+V+Series#viewallmodelstop" },
-
-	/* Verified non-working laptops (for now). */
-	{ "Acer",		"Aspire One",		NULL },
-	{ "ASUS",		"Eee PC 701 4G",	"http://www.asus.com/product.aspx?P_ID=h6SPd3tEzLEsrEiS" },
-	{ "Dell",		"Latitude CPi A366XT",	"http://www.coreboot.org/Dell_Latitude_CPi_A366XT" },
-	{ "HP/Compaq",		"nx9010",		"http://h20000.www2.hp.com/bizsupport/TechSupport/Document.jsp?lang=en&cc=us&objectID=c00348514" },
-	{ "IBM/Lenovo",		"Thinkpad T40p",	"http://www.thinkwiki.org/wiki/Category:T40p" },
-	{ "IBM/Lenovo",		"240",			"http://www.stanford.edu/~bresnan//tp240.html" },
-
-	{ NULL,			NULL,			0 },
-};
-
-/* Please keep these lists alphabetically ordered by vendor/board. */
-const struct board_info_notes boards_notes[] = {
-	/* Verified working boards that don't need write-enables. */
-	{ "ASI",		"MB-5BLMP",		"Used in the IGEL WinNET III thin client." },
-	{ "ASRock",		"K8S8X",		"The Super I/O isn't found on this board. See http://www.flashrom.org/pipermail/flashrom/2009-November/000937.html." },
-	{ "ASUS",		"A8V-E SE",		"See http://www.coreboot.org/pipermail/coreboot/2007-October/026496.html." },
-	{ "ASUS",		"M2A-VM",		"See http://www.coreboot.org/pipermail/coreboot/2007-September/025281.html." },
-	{ "BCOM",		"WinNET100",		"Used in the IGEL-316 thin client." },
-	{ "GIGABYTE",		"GA-7ZM",		"Works fine if you remove jumper JP9 on the board and disable the flash protection BIOS option." },
-	{ "ASUS",		"M2N-E",		"If the machine doesn't come up again after flashing, try resetting the NVRAM(CMOS). The MAC address of the onboard network card will change to the value stored in the new image, so backup the old address first. See http://www.flashrom.org/pipermail/flashrom/2009-November/000879.html" },
-
+const struct board_info boards_need_enable[] = {
 	/* Verified working boards that DO need write-enables. */
-	{ "Acer",		"Aspire One",		"See http://www.coreboot.org/pipermail/coreboot/2009-May/048041.html." },
-
-	/* Verified non-working boards (for now). */
-	{ "MSI",		"MS-6178",		"Immediately powers off if you try to hot-plug the chip. However, this does '''not''' happen if you use coreboot." },
-	{ "MSI",		"MS-7260 (K9N Neo)",	"Interestingly flashrom does not work when the vendor BIOS is booted, but it ''does'' work flawlessly when the machine is booted with coreboot." },
-
-	/* Verified working laptops. */
-	/* None which need comments, yet... */
-
-	/* Verified non-working laptops (for now). */
-	{ "Acer",		"Aspire One",		"http://www.coreboot.org/pipermail/coreboot/2009-May/048041.html" },
-	{ "ASUS",		"Eee PC 701 4G",	"It seems the chip (25X40VSIG) is behind some SPI flash translation layer (likely in the EC, the ENE KB3310)." },
-	{ "Dell",		"Latitude CPi A366XT",	"The laptop immediately powers off if you try to hot-swap the chip. It's not yet tested if write/erase would work on this laptop." },
-	{ "HP/Compaq",		"nx9010",		"Hangs upon '''flashrom -V''' (needs hard power-cycle then)." },
-	{ "IBM/Lenovo",		"Thinkpad T40p",	"Seems to (partially) work at first, but one block/sector cannot be written which then leaves you with a bricked laptop. Maybe this can be investigated and fixed in software later." },
+	{ "Abit",		"IP35",			"http://www.abit.com.tw/page/en/motherboard/motherboard_detail.php?fMTYPE=LGA775&pMODEL_NAME=IP35", NULL },
+	{ "Acorp",		"6A815EPD",		"http://web.archive.org/web/20021206163652/www.acorp.com.tw/English/default.asp", NULL },
+	{ "agami",		"Aruma",		"http://web.archive.org/web/20080212111524/http://www.agami.com/site/ais-6000-series", NULL },
+	{ "Albatron",		"PM266A Pro",		"http://www.albatron.com.tw/English/Product/MB/pro_detail.asp?rlink=Overview&no=56", NULL }, /* FIXME */
+	{ "AOpen",		"vKM400Am-S",		"http://usa.aopen.com/products_detail.aspx?Auno=824", NULL },
+	{ "Artec Group",	"DBE61",		"http://wiki.thincan.org/DBE61", NULL },
+	{ "Artec Group",	"DBE62",		"http://wiki.thincan.org/DBE62", NULL },
+	{ "ASUS",		"A7V600-X",		"http://www.asus.com/product.aspx?P_ID=L2XYS0rmtCjeOr4k", NULL },
+	{ "ASUS",		"A7V8X",		"http://www.asus.com/product.aspx?P_ID=qfpaGrAy2kLVo0f2", NULL },
+	{ "ASUS",		"A7V8X-MX SE",		"http://www.asus.com/product.aspx?P_ID=1guVBT1qV5oqhHyZ", NULL },
+	{ "ASUS",		"A7V8X-X",		"http://www.asus.com/product.aspx?P_ID=YcXfRrWHZ9RKoVmw", NULL },
+	{ "ASUS",		"P4B266",		"http://www.ciao.co.uk/ASUS_Intel_845D_Chipset_P4B266__5409807#productdetail", NULL },
+	{ "ASUS",		"P4P800-E Deluxe",	"http://www.asus.com/product.aspx?P_ID=INIJUvLlif7LHp3g", NULL },
+	{ "ASUS",		"P5ND2-SLI Deluxe",	"http://www.asus.com/product.aspx?P_ID=WY7XroDuUImVbgp5", NULL },
+	{ "ASUS",		"P5A",			"ftp://ftp.asus.com.tw/pub/ASUS/mb/sock7/ali/p5a/", NULL },
+	{ "Biostar",		"P4M80-M4",		"http://www.biostar-usa.com/mbdetails.asp?model=p4m80-m4", NULL },
+	{ "Dell",		"PowerEdge 1850",	"http://support.dell.com/support/edocs/systems/pe1850/en/index.htm", NULL },
+	{ "Elitegroup",		"K7VTA3",		"http://www.ecs.com.tw/ECSWebSite/Products/ProductsDetail.aspx?detailid=264&CategoryID=1&DetailName=Specification&MenuID=52&LanID=0", NULL },
+	{ "EPoX",		"EP-8K5A2",		"http://www.epox.com/product.asp?ID=EP-8K5A2", NULL },
+	{ "EPoX",		"EP-8RDA3+",		"http://www.epox.com/product.asp?ID=EP-8RDA3plus", NULL },
+	{ "EPoX",		"EP-BX3",		"http://www.epox.com/product.asp?ID=EP-BX3", NULL },
+	{ "GIGABYTE",		"GA-2761GXDK",		"http://www.computerbase.de/news/hardware/mainboards/amd-systeme/2007/mai/gigabyte_dtx-mainboard/", NULL },
+	{ "GIGABYTE",		"GA-7VT600",		"http://www.gigabyte.com.tw/Products/Motherboard/Products_Spec.aspx?ProductID=1666", NULL },
+	{ "GIGABYTE",		"GA-7ZM",		"http://www.gigabyte.com.tw/Products/Motherboard/Products_Spec.aspx?ProductID=1366", NULL },
+	{ "GIGABYTE",		"GA-K8N-SLI",		"http://www.gigabyte.com.tw/Products/Motherboard/Products_Spec.aspx?ProductID=1928", NULL },
+	{ "GIGABYTE",		"GA-M57SLI-S4",		"http://www.gigabyte.com.tw/Products/Motherboard/Products_Overview.aspx?ProductID=2287&ModelName=GA-M57SLI-S4", NULL },
+	{ "GIGABYTE",		"GA-M61P-S3",		"http://www.gigabyte.com.tw/Products/Motherboard/Products_Spec.aspx?ProductID=2434", NULL },
+	{ "GIGABYTE",		"GA-MA78G-DS3H",	"http://www.gigabyte.com.tw/Products/Motherboard/Products_Spec.aspx?ProductID=2800", NULL }, /* TODO: Rev 1.x or 2.x? */
+	{ "GIGABYTE",		"GA-MA78GM-S2H",	"http://www.gigabyte.com.tw/Products/Motherboard/Products_Spec.aspx?ProductID=2758", NULL }, /* TODO: Rev. 1.0, 1.1, or 2.x? */
+	{ "GIGABYTE",		"GA-MA790FX-DQ6",	"http://www.gigabyte.com.tw/Products/Motherboard/Products_Spec.aspx?ProductID=2690", NULL },
+	{ "HP",			"DL145 G3",		"http://h20000.www2.hp.com/bizsupport/TechSupport/Document.jsp?objectID=c00816835&lang=en&cc=us&taskId=101&prodSeriesId=3219755&prodTypeId=15351", NULL },
+	{ "IBM",		"x3455",		"http://www-03.ibm.com/systems/x/hardware/rack/x3455/index.html", NULL },
+	{ "Intel",		"D201GLY",		"http://www.intel.com/support/motherboards/desktop/d201gly/index.htm", NULL },
+	{ "IWILL",		"DK8-HTX",		"http://web.archive.org/web/20060507170150/http://www.iwill.net/product_2.asp?p_id=98", NULL },
+	{ "Kontron",		"986LCD-M",		"http://de.kontron.com/products/boards+and+mezzanines/embedded+motherboards/miniitx+motherboards/986lcdmmitx.html", NULL },
+	{ "Mitac",		"6513WU",		"http://web.archive.org/web/20050313054828/http://www.mitac.com/micweb/products/tyan/6513wu/6513wu.htm", NULL },
+	{ "MSI",		"MS-6590 (KT4 Ultra)",	"http://www.msicomputer.com/product/p_spec.asp?model=KT4_Ultra&class=mb", NULL },
+	{ "MSI",		"MS-6702E (K8T Neo2-F)","http://www.msicomputer.com/product/p_spec.asp?model=K8T_Neo2-F&class=mb", NULL },
+	{ "MSI",		"MS-6712 (KT4V)",	"http://www.msi.com/index.php?func=proddesc&maincat_no=1&cat2_no=&cat3_no=&prod_no=505", NULL },
+	{ "MSI",		"MS-7046",		"http://www.heimir.de/ms7046/", NULL },
+	{ "MSI",		"MS-7135 (K8N Neo3)",	"http://www.msi-computer.de/index.php?func=proddesc&prod_no=170&maincat_no=1", NULL },
+	{ "Shuttle",		"AK38N",		"http://eu.shuttle.com/en/desktopdefault.aspx/tabid-36/558_read-9889/", NULL },
+	{ "Soyo",		"SY-7VCA",		"http://www.tomshardware.com/reviews/12-socket-370-motherboards,196-15.html", NULL },
+	{ "Tyan",		"S2498 (Tomcat K7M)",	"http://www.tyan.com/archive/products/html/tomcatk7m.html", NULL },
+	{ "VIA",		"EPIA-CN",		"http://www.via.com.tw/en/products/mainboards/motherboards.jsp?motherboard_id=400", NULL },
+	{ "VIA",		"EPIA M/MII/...",	"http://www.via.com.tw/en/products/embedded/ProductDetail.jsp?productLine=1&motherboard_id=202", NULL }, /* EPIA-MII link for now */
+	{ "VIA",		"EPIA-N/NL",		"http://www.via.com.tw/en/products/embedded/ProductDetail.jsp?productLine=1&motherboard_id=221", NULL }, /* EPIA-N link for now */
+	{ "VIA",		"EPIA SP",		"http://www.via.com.tw/en/products/embedded/ProductDetail.jsp?productLine=1&motherboard_id=261", NULL },
+	{ "VIA",		"PC3500G",		"http://www.via.com.tw/en/initiatives/empowered/pc3500_mainboard/index.jsp", NULL },
 
 	{ NULL,			NULL,			0 },
 };
 
-static int url(const char *vendor, const char *board)
-{
-	int i;
-	const struct board_info_url *b = boards_url;
-
-        for (i = 0; b[i].vendor != NULL; i++) {
-		if (!strcmp(vendor, b[i].vendor) && !strcmp(board, b[i].name))
-			return i;
-	}
-
-	return -1;
-}
-
-static int note(const char *vendor, const char *board)
-{
-	int i;
-	const struct board_info_notes *n = boards_notes;
-
-        for (i = 0; n[i].vendor != NULL; i++) {
-		if (!strcmp(vendor, n[i].vendor) && !strcmp(board, n[i].name))
-			return i;
-	}
-
-	return -1;
-}
-
 void print_supported_chipsets_wiki(void)
 {
 	int i, j, enablescount = 0, color = 1;
@@ -379,9 +189,8 @@  void print_supported_chipsets_wiki(void)
 static void wiki_helper(const char *heading, const char *status,
 			int cols, const struct board_info boards[])
 {
-	int i, j, k, c, boardcount = 0, color = 1, num_notes = 0;
+	int i, j, boardcount = 0, color = 1, num_notes = 0;
 	const struct board_info *b;
-	const struct board_info_url *u = boards_url;
 	char *notes = calloc(1, 1);
 	char tmp[900 + 1];
 
@@ -397,19 +206,16 @@  static void wiki_helper(const char *heading, const char *status,
 		if (i > 0 && strcmp(b[i].vendor, b[i - 1].vendor))
 			color = !color;
 
-		k = url(b[i].vendor, b[i].name);
-		c = note(b[i].vendor, b[i].name);
-
 		printf("|- bgcolor=\"#%s\" valign=\"top\"\n| %s || %s%s %s%s ||"
 		       " {{%s}}", (color) ? "eeeeee" : "dddddd", b[i].vendor,
-		       (k != -1 && u[k].url) ? "[" : "",
-		       (k != -1 && u[k].url) ? u[k].url : "",
-		       b[i].name, (k != -1 && u[k].url) ? "]" : "", status);
+		       (b[i].url) ? "[" : "",
+		       (b[i].url) ? b[i].url : "",
+		       b[i].name, (b[i].url) ? "]" : "", status);
 
-		if (c != -1) {
+		if (b[i].note) {
 			printf("<sup>%d</sup>\n", num_notes + 1);
 			snprintf((char *)&tmp, 900, "<sup>%d</sup> %s<br />\n",
-				 1 + num_notes++, boards_notes[c].note);
+				 1 + num_notes++, b[i].note);
 			notes = strcat_realloc(notes, (char *)&tmp);
 		} else {
 			printf("\n");
@@ -429,52 +235,11 @@  static void wiki_helper(const char *heading, const char *status,
 	free(notes);
 }
 
-static void wiki_helper2(const char *heading, int cols)
-{
-	int i, j, k, boardcount = 0, color = 1;
-	struct board_pciid_enable *b;
-	const struct board_info_url *u = boards_url;
-
-	for (b = board_pciid_enables; b->vendor_name != NULL; b++)
-		boardcount++;
-
-	printf("\n'''%s'''\n\nTotal amount of boards: '''%d'''\n\n"
-	       "{| border=\"0\" valign=\"top\"\n| valign=\"top\"|\n\n%s",
-	       heading, boardcount, board_th2);
-
-	b = board_pciid_enables;
-	for (i = 0, j = 0; b[i].vendor_name != NULL; i++, j++) {
-		/* Alternate colors if the vendor changes. */
-		if (i > 0 && strcmp(b[i].vendor_name, b[i - 1].vendor_name))
-			color = !color;
-
-		k = url(b[i].vendor_name, b[i].board_name);
-
-		printf("|- bgcolor=\"#%s\" valign=\"top\"\n| %s || %s%s %s%s "
-		       "|| %s%s%s%s || {{OK}}\n", (color) ? "eeeeee" : "dddddd",
-		       b[i].vendor_name, (k != -1 && u[k].url) ? "[" : "",
-		       (k != -1 && u[k].url) ? u[k].url : "", b[i].board_name,
-		       (k != -1 && u[k].url) ? "]" : "",
-		       (b[i].lb_vendor) ? "-m " : "&mdash;",
-		       (b[i].lb_vendor) ? b[i].lb_vendor : "",
-		       (b[i].lb_vendor) ? ":" : "",
-		       (b[i].lb_vendor) ? b[i].lb_part : "");
-
-		/* Split table in three columns. */
-		if (j >= (boardcount / cols + 1)) {
-			printf("\n|}\n\n| valign=\"top\"|\n\n%s", board_th2);
-			j = 0;
-		}
-	}
-
-	printf("\n|}\n\n|}\n");
-}
-
 void print_supported_boards_wiki(void)
 {
 	printf("%s", board_intro);
 	wiki_helper("Known good (worked out of the box)", "OK", 3, boards_ok);
-	wiki_helper2("Known good (with write-enable code in flashrom)", 3);
+	wiki_helper("Known good (with write-enable code in flashrom)", "OK", 3, boards_need_enable);
 	wiki_helper("Not supported (yet)", "No", 3, boards_bad);
 
 	printf("%s", laptop_intro);