<br><br><div class="gmail_quote">2010/12/4 Carl-Daniel Hailfinger <span dir="ltr"><<a href="mailto:c-d.hailfinger.devel.2006@gmx.net">c-d.hailfinger.devel.2006@gmx.net</a>></span><br><blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;">
Print lock status for all supported Winbond W39* chips:<br>
W39V040A<br>
W39V040(F)B<br>
W39V040(F)C<br>
W39V040FA<br>
W39V080A<br>
W39V080FA<br>
W39V080FA (dual mode)<br>
<br>
Please note that the W39V040B/W39V040FB pair has identical IDs,<br>
identical read/write/erase, but locking differs. Right now they have a<br>
common chip definition, but that will have to change in the future. For<br>
chipsets which support LPC and FWH, separating the chips will be really<br>
painful because both variants will be detected and the user will have to<br>
choose. Same problem appears for W39V040C/W39V040FC.<br>
A better evil twin handling (patch available) will resolve that problem.<br>
<br>
Signed-off-by: Carl-Daniel Hailfinger <<a href="mailto:c-d.hailfinger.devel.2006@gmx.net">c-d.hailfinger.devel.2006@gmx.net</a>><br>
<br>
Please run "svn mv w39v080fa.c w39.c" before applying this patch.<br></blockquote><div><br>You'll want to run "svn cp w39v080fa.c w39.c" instead.<br> <br></div><blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;">
<br>
Index: flashrom-w39_printlock/w39.c<br>
===================================================================<br>
--- flashrom-w39_printlock/w39.c (Revision 1241)<br>
+++ flashrom-w39_printlock/w39.c (Arbeitskopie)<br>
@@ -2,6 +2,7 @@<br>
* This file is part of the flashrom project.<br>
*<br>
* Copyright (C) 2008 coresystems GmbH<br>
+ * Copyright (C) 2010 Carl-Daniel Hailfinger<br>
*<br>
* This program is free software; you can redistribute it and/or modify<br>
* it under the terms of the GNU General Public License as published by<br>
@@ -21,67 +22,78 @@<br>
#include "flash.h"<br>
#include "chipdrivers.h"<br>
<br>
-static int unlock_block_winbond_fwhub(struct flashchip *flash, int offset)<br>
+static int printlock_w39_fwh_block(struct flashchip *flash, int offset)<br>
{<br>
chipaddr wrprotect = flash->virtual_registers + offset + 2;<br>
uint8_t locking;<br>
<br>
- msg_cdbg("Trying to unlock block @0x%08x = 0x%02x\n", offset,<br>
- chip_readb(wrprotect));<br>
-<br>
locking = chip_readb(wrprotect);<br>
+ msg_cdbg("Lock status of block at 0x%08x is ", offset);<br>
switch (locking & 0x7) {<br>
case 0:<br>
msg_cdbg("Full Access.\n");<br>
- return 0;<br>
+ break;<br>
case 1:<br>
msg_cdbg("Write Lock (Default State).\n");<br>
- chip_writeb(0, wrprotect);<br>
- return 0;<br>
+ break;<br>
case 2:<br>
msg_cdbg("Locked Open (Full Access, Lock Down).\n");<br>
- return 0;<br>
+ break;<br>
case 3:<br>
msg_cerr("Error: Write Lock, Locked Down.\n");<br>
- return -1;<br>
+ break;<br>
case 4:<br>
msg_cdbg("Read Lock.\n");<br>
- chip_writeb(0, wrprotect);<br>
- return 0;<br>
+ break;<br>
case 5:<br>
msg_cdbg("Read/Write Lock.\n");<br>
- chip_writeb(0, wrprotect);<br>
- return 0;<br>
+ break;<br>
case 6:<br>
msg_cerr("Error: Read Lock, Locked Down.\n");<br>
- return -1;<br>
+ break;<br>
case 7:<br>
msg_cerr("Error: Read/Write Lock, Locked Down.\n");<br>
- return -1;<br>
+ break;<br>
}<br>
<br>
- /* We will never reach this point, but GCC doesn't know */<br>
- return -1;<br>
+ /* Read or write lock present? */<br>
+ return (locking & ((1 << 2) | (1 << 0))) ? -1 : 0;<br>
}<br>
<br>
-int unlock_winbond_fwhub(struct flashchip *flash)<br>
+static int unlock_w39_fwh_block(struct flashchip *flash, int offset)<br>
{<br>
- int i, total_size = flash->total_size * 1024;<br>
- chipaddr bios = flash->virtual_memory;<br>
+ chipaddr wrprotect = flash->virtual_registers + offset + 2;<br>
uint8_t locking;<br>
<br>
- /* Are there any hardware restrictions that we can't overcome?<br>
- * If flashrom fail here, someone's got to check all those GPIOs.<br>
- */<br>
+ locking = chip_readb(wrprotect);<br>
+ /* Read or write lock present? */<br>
+ if (locking & ((1 << 2) | (1 << 0))) {<br>
+ /* Lockdown active? */<br>
+ if (locking & (1 << 1)) {<br>
+ msg_cerr("Can't unlock block at 0x%x!\n", offset);<br>
+ return -1;<br>
+ } else {<br>
+ msg_cdbg("Unlocking block at 0x%x\n", offset);<br>
+ chip_writeb(0, wrprotect);<br>
+ }<br>
+ }<br>
<br>
+ return 0;<br>
+}<br>
+<br>
+static uint8_t w39_idmode_readb(struct flashchip *flash, int offset)<br>
+{<br>
+ chipaddr bios = flash->virtual_memory;<br>
+ uint8_t val;<br>
+<br>
/* Product Identification Entry */<br>
chip_writeb(0xAA, bios + 0x5555);<br>
chip_writeb(0x55, bios + 0x2AAA);<br>
chip_writeb(0x90, bios + 0x5555);<br>
programmer_delay(10);<br>
<br>
- /* Read Hardware Lock Bits */<br>
- locking = chip_readb(bios + 0xffff2);<br>
+ /* Read something, maybe hardware lock bits */<br>
+ val = chip_readb(bios + offset);<br>
<br>
/* Product Identification Exit */<br>
chip_writeb(0xAA, bios + 0x5555);<br>
@@ -89,25 +101,164 @@<br>
chip_writeb(0xF0, bios + 0x5555);<br>
programmer_delay(10);<br>
<br>
- msg_cdbg("Lockout bits:\n");<br>
+ return val;<br>
+}<br>
<br>
- if (locking & (1 << 2))<br>
- msg_cerr("Error: hardware bootblock locking (#TBL).\n");<br>
- else<br>
- msg_cdbg("No hardware bootblock locking (good!)\n");<br>
+static int printlock_w39_wblwp(uint8_t lock)<br>
+{<br>
+ msg_cdbg("Hardware bootblock locking (#TBL) is %sactive.\n",<br>
+ (lock & (1 << 2)) ? "" : "not ");<br>
+ msg_cdbg("Hardware remaining chip locking (#WP) is %sactive..\n",<br>
+ (lock & (1 << 3)) ? "" : "not ");<br>
+ if (lock & ((1 << 2) | (1 << 3)))<br>
+ return -1;<br>
<br>
- if (locking & (1 << 3))<br>
- msg_cerr("Error: hardware block locking (#WP).\n");<br>
- else<br>
- msg_cdbg("No hardware block locking (good!)\n");<br>
+ return 0;<br>
+}<br>
<br>
- if (locking & ((1 << 2) | (1 << 3)))<br>
+static int printlock_w39_bootblock_64k16k(uint8_t lock)<br>
+{<br>
+ msg_cdbg("Software 64 kB bootblock locking is %sactive.\n",<br>
+ (lock & (1 << 0)) ? "" : "not ");<br>
+ msg_cdbg("Software 16 kB bootblock locking is %sactive.\n",<br>
+ (lock & (1 << 1)) ? "" : "not ");<br>
+ if (lock & ((1 << 1) | (1 << 0)))<br>
return -1;<br>
<br>
+ return 0;<br>
+}<br>
+<br>
+static int printlock_w39_common(struct flashchip *flash, int offset)<br>
+{<br>
+ uint8_t lock;<br>
+<br>
+ lock = w39_idmode_readb(flash, offset);<br>
+ msg_cdbg("Lockout bits:\n");<br>
+ return printlock_w39_wblwp(lock);<br>
+}<br>
+<br>
+static int printlock_w39_fwh(struct flashchip *flash)<br>
+{<br>
+ int i, total_size = flash->total_size * 1024;<br>
+<br>
+ /* Print lock status of the complete chip */<br>
+ for (i = 0; i < total_size; i += flash->page_size)<br>
+ if (printlock_w39_fwh_block(flash, i))<br>
+ return -1;<br>
+<br>
+ return 0;<br>
+}<br>
+<br>
+static int unlock_w39_fwh(struct flashchip *flash)<br>
+{<br>
+ int i, total_size = flash->total_size * 1024;<br>
+<br>
/* Unlock the complete chip */<br>
for (i = 0; i < total_size; i += flash->page_size)<br>
- if (unlock_block_winbond_fwhub(flash, i))<br>
+ if (unlock_w39_fwh_block(flash, i))<br>
return -1;<br>
<br>
return 0;<br>
}<br>
+<br>
+int printlock_w39v040a(struct flashchip *flash)<br>
+{<br>
+ uint8_t lock;<br>
+ int ret = 0;<br>
+<br>
+ /* The W39V040A datasheet contradicts itself on the lock register<br>
+ * location: 0x00002 and 0x7fff2 are both mentioned. Pick the one<br>
+ * which is similar to the other chips of the same family.<br>
+ */<br>
+ lock = w39_idmode_readb(flash, 0x7fff2);<br>
+ msg_cdbg("Lockout bits:\n");<br>
+<br>
+ ret = printlock_w39_wblwp(lock);<br>
+ ret |= printlock_w39_bootblock_64k16k(lock);<br>
+<br>
+ return ret;<br>
+}<br>
+<br>
+int printlock_w39v040b(struct flashchip *flash)<br>
+{<br>
+ return printlock_w39_common(flash, 0x7fff2);<br>
+}<br>
+<br>
+int printlock_w39v040c(struct flashchip *flash)<br>
+{<br>
+ return printlock_w39_common(flash, 0xfff2);<br>
+}<br>
+<br>
+int printlock_w39v040fa(struct flashchip *flash)<br>
+{<br>
+ int ret = 0;<br>
+<br>
+ ret = printlock_w39v040a(flash);<br>
+ ret |= printlock_w39_fwh(flash);<br>
+<br>
+ return ret;<br>
+}<br>
+<br>
+/* Unused because W39V040B and W39V040FB can not be distinguished from each<br>
+ * other based on ID.<br>
+ */<br>
+int printlock_w39v040fb(struct flashchip *flash)<br>
+{<br>
+ int ret = 0;<br>
+<br>
+ ret = printlock_w39v040b(flash);<br>
+ ret |= printlock_w39_fwh(flash);<br>
+<br>
+ return ret;<br>
+}<br>
+<br>
+/* Unused because W39V040C and W39V040FC can not be distinguished from each<br>
+ * other based on ID.<br>
+ */<br>
+int printlock_w39v040fc(struct flashchip *flash)<br>
+{<br>
+ int ret = 0;<br>
+<br>
+ /* W39V040C and W39V040FC use different WP/TBL offsets. */<br>
+ ret = printlock_w39_common(flash, 0x7fff2);<br>
+ ret |= printlock_w39_fwh(flash);<br>
+<br>
+ return ret;<br>
+}<br>
+<br>
+int printlock_w39v080a(struct flashchip *flash)<br>
+{<br>
+ return printlock_w39_common(flash, 0xffff2);<br>
+}<br>
+<br>
+int printlock_w39v080fa(struct flashchip *flash)<br>
+{<br>
+ int ret = 0;<br>
+<br>
+ ret = printlock_w39v080a(flash);<br>
+ ret |= printlock_w39_fwh(flash);<br>
+<br>
+ return ret;<br>
+}<br>
+<br>
+int printlock_w39v080fa_dual(struct flashchip *flash)<br>
+{<br>
+ msg_cinfo("Block locking for W39V080FA in dual mode is "<br>
+ "undocumented.\n");<br>
+ /* Better safe than sorry. */<br>
+ return -1;<br>
+}<br>
+<br>
+int unlock_w39v080fa(struct flashchip *flash)<br>
+{<br>
+ if (unlock_w39_fwh(flash))<br>
+ return -1;<br>
+ /* The soft bootblock locks may have been deactivated by the unlock<br>
+ * above, so check them last.<br>
+ */<br>
+ if (printlock_w39_common(flash, 0xffff2))<br>
+ return -1;<br>
+<br>
+ return 0;<br>
+}<br>
+<br>
Index: flashrom-w39_printlock/Makefile<br>
===================================================================<br>
--- flashrom-w39_printlock/Makefile (Revision 1241)<br>
+++ flashrom-w39_printlock/Makefile (Arbeitskopie)<br>
@@ -82,7 +82,7 @@<br>
endif<br>
endif<br>
<br>
-CHIP_OBJS = jedec.o stm50flw0x0x.o w39v040c.o w39v080fa.o w29ee011.o \<br>
+CHIP_OBJS = jedec.o stm50flw0x0x.o w39.o w29ee011.o \<br>
sst28sf040.o m29f400bt.o 82802ab.o pm49fl00x.o \<br>
sst49lfxxxc.o sst_fwhub.o flashchips.o spi.o spi25.o sharplhf00l04.o<br>
<br>
Index: flashrom-w39_printlock/w39v040c.c<br>
===================================================================<br>
--- flashrom-w39_printlock/w39v040c.c (Revision 1241)<br>
+++ flashrom-w39_printlock/w39v040c.c (Arbeitskopie)<br>
@@ -1,48 +0,0 @@<br>
-/*<br>
- * This file is part of the flashrom project.<br>
- *<br>
- * Copyright (C) 2008 Peter Stuge <<a href="mailto:peter@stuge.se">peter@stuge.se</a>><br>
- *<br>
- * This program is free software; you can redistribute it and/or modify<br>
- * it under the terms of the GNU General Public License as published by<br>
- * the Free Software Foundation; either version 2 of the License, or<br>
- * (at your option) any later version.<br>
- *<br>
- * This program is distributed in the hope that it will be useful,<br>
- * but WITHOUT ANY WARRANTY; without even the implied warranty of<br>
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the<br>
- * GNU General Public License for more details.<br>
- *<br>
- * You should have received a copy of the GNU General Public License<br>
- * along with this program; if not, write to the Free Software<br>
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA<br>
- */<br>
-<br>
-#include "flash.h"<br>
-#include "chipdrivers.h"<br>
-<br>
-int printlock_w39v040c(struct flashchip *flash)<br>
-{<br>
- chipaddr bios = flash->virtual_memory;<br>
- uint8_t lock;<br>
-<br>
- chip_writeb(0xAA, bios + 0x5555);<br>
- programmer_delay(10);<br>
- chip_writeb(0x55, bios + 0x2AAA);<br>
- programmer_delay(10);<br>
- chip_writeb(0x90, bios + 0x5555);<br>
- programmer_delay(10);<br>
-<br>
- lock = chip_readb(bios + 0xfff2);<br>
-<br>
- chip_writeb(0xAA, bios + 0x5555);<br>
- programmer_delay(10);<br>
- chip_writeb(0x55, bios + 0x2AAA);<br>
- programmer_delay(10);<br>
- chip_writeb(0xF0, bios + 0x5555);<br>
- programmer_delay(40);<br>
-<br>
- msg_cdbg("%s: Boot block #TBL is %slocked, rest of chip #WP is %slocked.\n",<br>
- __func__, lock & 0x4 ? "" : "un", lock & 0x8 ? "" : "un");<br>
- return 0;<br>
-}<br>
Index: flashrom-w39_printlock/flashchips.c<br>
===================================================================<br>
--- flashrom-w39_printlock/flashchips.c (Revision 1241)<br>
+++ flashrom-w39_printlock/flashchips.c (Arbeitskopie)<br>
@@ -7593,6 +7593,7 @@<br>
.block_erase = erase_chip_block_jedec,<br>
}<br>
},<br>
+ .printlock = printlock_w39v040a,<br>
.write = write_jedec_1,<br>
.read = read_memmapped,<br>
},<br>
@@ -7600,7 +7601,7 @@<br>
{<br>
.vendor = "Winbond",<br>
.name = "W39V040(F)B",<br>
- .bustype = CHIP_BUSTYPE_LPC,<br>
+ .bustype = CHIP_BUSTYPE_LPC | CHIP_BUSTYPE_FWH,<br>
.manufacture_id = WINBOND_ID,<br>
.model_id = WINBOND_W39V040B,<br>
.total_size = 512,<br>
@@ -7619,6 +7620,7 @@<br>
.block_erase = erase_chip_block_jedec,<br>
}<br>
},<br>
+ .printlock = printlock_w39v040b,<br>
.write = write_jedec_1,<br>
.read = read_memmapped,<br>
},<br>
@@ -7626,7 +7628,7 @@<br>
{<br>
.vendor = "Winbond",<br>
.name = "W39V040(F)C",<br>
- .bustype = CHIP_BUSTYPE_LPC,<br>
+ .bustype = CHIP_BUSTYPE_LPC | CHIP_BUSTYPE_FWH,<br>
.manufacture_id = WINBOND_ID,<br>
.model_id = WINBOND_W39V040C,<br>
.total_size = 512,<br>
@@ -7634,7 +7636,7 @@<br>
.feature_bits = FEATURE_EITHER_RESET,<br>
.tested = TEST_UNTESTED,<br>
.probe = probe_jedec,<br>
- .probe_timing = TIMING_FIXME,<br>
+ .probe_timing = 10,<br>
.block_erasers =<br>
{<br>
{<br>
@@ -7675,7 +7677,7 @@<br>
.block_erase = erase_chip_block_jedec,<br>
}<br>
},<br>
- .printlock = printlock_sst_fwhub,<br>
+ .printlock = printlock_w39v040fa,<br>
.unlock = unlock_sst_fwhub,<br>
.write = write_jedec_1,<br>
.read = read_memmapped,<br>
@@ -7703,6 +7705,7 @@<br>
.block_erase = erase_chip_block_jedec,<br>
}<br>
},<br>
+ .printlock = printlock_w39v080a,<br>
.write = write_jedec_1,<br>
.read = read_memmapped,<br>
},<br>
@@ -7834,7 +7837,7 @@<br>
.feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,<br>
.tested = TEST_OK_PRE,<br>
.probe = probe_jedec,<br>
- .probe_timing = TIMING_FIXME,<br>
+ .probe_timing = 10,<br>
.block_erasers =<br>
{<br>
{<br>
@@ -7845,7 +7848,8 @@<br>
.block_erase = erase_chip_block_jedec,<br>
}<br>
},<br>
- .unlock = unlock_winbond_fwhub,<br>
+ .printlock = printlock_w39v080fa,<br>
+ .unlock = unlock_w39v080fa,<br>
.write = write_jedec_1,<br>
.read = read_memmapped,<br>
},<br>
@@ -7861,7 +7865,7 @@<br>
.feature_bits = FEATURE_REGISTERMAP | FEATURE_EITHER_RESET,<br>
.tested = TEST_UNTESTED,<br>
.probe = probe_jedec,<br>
- .probe_timing = TIMING_FIXME,<br>
+ .probe_timing = 10,<br>
.block_erasers =<br>
{<br>
{<br>
@@ -7872,7 +7876,7 @@<br>
.block_erase = erase_chip_block_jedec,<br>
}<br>
},<br>
- .unlock = unlock_winbond_fwhub,<br>
+ .printlock = printlock_w39v080fa_dual,<br>
.write = write_jedec_1,<br>
.read = read_memmapped,<br>
},<br>
Index: flashrom-w39_printlock/w39v080fa.c<br>
===================================================================<br>
--- flashrom-w39_printlock/w39v080fa.c (Revision 1241)<br>
+++ flashrom-w39_printlock/w39v080fa.c (Arbeitskopie)<br>
@@ -1,113 +0,0 @@<br>
-/*<br>
- * This file is part of the flashrom project.<br>
- *<br>
- * Copyright (C) 2008 coresystems GmbH<br>
- *<br>
- * This program is free software; you can redistribute it and/or modify<br>
- * it under the terms of the GNU General Public License as published by<br>
- * the Free Software Foundation; either version 2 of the License, or<br>
- * (at your option) any later version.<br>
- *<br>
- * This program is distributed in the hope that it will be useful,<br>
- * but WITHOUT ANY WARRANTY; without even the implied warranty of<br>
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the<br>
- * GNU General Public License for more details.<br>
- *<br>
- * You should have received a copy of the GNU General Public License<br>
- * along with this program; if not, write to the Free Software<br>
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA<br>
- */<br>
-<br>
-#include "flash.h"<br>
-#include "chipdrivers.h"<br>
-<br>
-static int unlock_block_winbond_fwhub(struct flashchip *flash, int offset)<br>
-{<br>
- chipaddr wrprotect = flash->virtual_registers + offset + 2;<br>
- uint8_t locking;<br>
-<br>
- msg_cdbg("Trying to unlock block @0x%08x = 0x%02x\n", offset,<br>
- chip_readb(wrprotect));<br>
-<br>
- locking = chip_readb(wrprotect);<br>
- switch (locking & 0x7) {<br>
- case 0:<br>
- msg_cdbg("Full Access.\n");<br>
- return 0;<br>
- case 1:<br>
- msg_cdbg("Write Lock (Default State).\n");<br>
- chip_writeb(0, wrprotect);<br>
- return 0;<br>
- case 2:<br>
- msg_cdbg("Locked Open (Full Access, Lock Down).\n");<br>
- return 0;<br>
- case 3:<br>
- msg_cerr("Error: Write Lock, Locked Down.\n");<br>
- return -1;<br>
- case 4:<br>
- msg_cdbg("Read Lock.\n");<br>
- chip_writeb(0, wrprotect);<br>
- return 0;<br>
- case 5:<br>
- msg_cdbg("Read/Write Lock.\n");<br>
- chip_writeb(0, wrprotect);<br>
- return 0;<br>
- case 6:<br>
- msg_cerr("Error: Read Lock, Locked Down.\n");<br>
- return -1;<br>
- case 7:<br>
- msg_cerr("Error: Read/Write Lock, Locked Down.\n");<br>
- return -1;<br>
- }<br>
-<br>
- /* We will never reach this point, but GCC doesn't know */<br>
- return -1;<br>
-}<br>
-<br>
-int unlock_winbond_fwhub(struct flashchip *flash)<br>
-{<br>
- int i, total_size = flash->total_size * 1024;<br>
- chipaddr bios = flash->virtual_memory;<br>
- uint8_t locking;<br>
-<br>
- /* Are there any hardware restrictions that we can't overcome?<br>
- * If flashrom fail here, someone's got to check all those GPIOs.<br>
- */<br>
-<br>
- /* Product Identification Entry */<br>
- chip_writeb(0xAA, bios + 0x5555);<br>
- chip_writeb(0x55, bios + 0x2AAA);<br>
- chip_writeb(0x90, bios + 0x5555);<br>
- programmer_delay(10);<br>
-<br>
- /* Read Hardware Lock Bits */<br>
- locking = chip_readb(bios + 0xffff2);<br>
-<br>
- /* Product Identification Exit */<br>
- chip_writeb(0xAA, bios + 0x5555);<br>
- chip_writeb(0x55, bios + 0x2AAA);<br>
- chip_writeb(0xF0, bios + 0x5555);<br>
- programmer_delay(10);<br>
-<br>
- msg_cdbg("Lockout bits:\n");<br>
-<br>
- if (locking & (1 << 2))<br>
- msg_cerr("Error: hardware bootblock locking (#TBL).\n");<br>
- else<br>
- msg_cdbg("No hardware bootblock locking (good!)\n");<br>
-<br>
- if (locking & (1 << 3))<br>
- msg_cerr("Error: hardware block locking (#WP).\n");<br>
- else<br>
- msg_cdbg("No hardware block locking (good!)\n");<br>
-<br>
- if (locking & ((1 << 2) | (1 << 3)))<br>
- return -1;<br>
-<br>
- /* Unlock the complete chip */<br>
- for (i = 0; i < total_size; i += flash->page_size)<br>
- if (unlock_block_winbond_fwhub(flash, i))<br>
- return -1;<br>
-<br>
- return 0;<br>
-}<br>
Index: flashrom-w39_printlock/chipdrivers.h<br>
===================================================================<br>
--- flashrom-w39_printlock/chipdrivers.h (Revision 1241)<br>
+++ flashrom-w39_printlock/chipdrivers.h (Arbeitskopie)<br>
@@ -109,12 +109,16 @@<br>
int printlock_sst_fwhub(struct flashchip *flash);<br>
int unlock_sst_fwhub(struct flashchip *flash);<br>
<br>
-/* w39v040c.c */<br>
+/* w39.c */<br>
+int printlock_w39v040a(struct flashchip *flash);<br>
+int printlock_w39v040b(struct flashchip *flash);<br>
int printlock_w39v040c(struct flashchip *flash);<br>
+int printlock_w39v040fa(struct flashchip *flash);<br>
+int printlock_w39v080a(struct flashchip *flash);<br>
+int printlock_w39v080fa(struct flashchip *flash);<br>
+int printlock_w39v080fa_dual(struct flashchip *flash);<br>
+int unlock_w39v080fa(struct flashchip *flash);<br>
<br>
-/* w39V080fa.c */<br>
-int unlock_winbond_fwhub(struct flashchip *flash);<br>
-<br>
/* w29ee011.c */<br>
int probe_w29ee011(struct flashchip *flash);<br>
<font color="#888888"><br>
<br>
<br>
--<br>
<a href="http://www.hailfinger.org/" target="_blank">http://www.hailfinger.org/</a><br>
<br>
<br>
_______________________________________________<br>
flashrom mailing list<br>
<a href="mailto:flashrom@flashrom.org">flashrom@flashrom.org</a><br>
<a href="http://www.flashrom.org/mailman/listinfo/flashrom" target="_blank">http://www.flashrom.org/mailman/listinfo/flashrom</a><br>
</font></blockquote></div><br>