2009/12/14 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><div class="gmail_quote"><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
Split hardware access, OS abstraction and chip drivers out of flash.h to<br>
get a better overview of what belongs where.<br>
<br>
This patch is only the first step, but it hopefully will make working<br>
with the code and especially porting to new platforms easier.<br>
<br>
Subsequent patches should move #includes for the newly created files<br>
hwaccess.h and chipdrivers.h from flash.h to the files which need them.<br>
Programmers should live in a separate header file as well, but that<br>
would have made this patch pretty difficult to read.<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></blockquote><div><br>The given patch builds fine on "FreeBSD 8.0-RELEASE i386" but for
that platform a patch for Makefile is needed. I have attached that patch.<br>
<br>
Signed-off-by: Idwer Vollering <<a href="mailto:vidwer@gmail.com" target="_blank">vidwer@gmail.com</a>><br> <br></div><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">

<br>
Index: flashrom-flash_h_split_chipdrivers_hwaccess/flash.h<br>
===================================================================<br>
--- flashrom-flash_h_split_chipdrivers_hwaccess/flash.h (Revision 797)<br>
+++ flashrom-flash_h_split_chipdrivers_hwaccess/flash.h (Arbeitskopie)<br>
@@ -24,62 +24,11 @@<br>
 #ifndef __FLASH_H__<br>
 #define __FLASH_H__ 1<br>
<br>
-#if defined(__GLIBC__)<br>
-#include <sys/io.h><br>
-#endif<br>
 #include <unistd.h><br>
 #include <stdint.h><br>
 #include <stdio.h><br>
-#if NEED_PCI == 1<br>
-#include <pci/pci.h><br>
-#endif<br>
+#include "hwaccess.h"<br>
<br>
-/* for iopl and outb under Solaris */<br>
-#if defined (__sun) && (defined(__i386) || defined(__amd64))<br>
-#include <strings.h><br>
-#include <sys/sysi86.h><br>
-#include <sys/psw.h><br>
-#include <asm/sunddi.h><br>
-#endif<br>
-<br>
-#if (defined(__MACH__) && defined(__APPLE__))<br>
-#define __DARWIN__<br>
-#endif<br>
-<br>
-#if defined(__FreeBSD__) || defined(__DragonFly__)<br>
-  #include <machine/cpufunc.h><br>
-  #define off64_t off_t<br>
-  #define lseek64 lseek<br>
-  #define OUTB(x, y) do { u_int tmp = (y); outb(tmp, (x)); } while (0)<br>
-  #define OUTW(x, y) do { u_int tmp = (y); outw(tmp, (x)); } while (0)<br>
-  #define OUTL(x, y) do { u_int tmp = (y); outl(tmp, (x)); } while (0)<br>
-  #define INB(x) __extension__ ({ u_int tmp = (x); inb(tmp); })<br>
-  #define INW(x) __extension__ ({ u_int tmp = (x); inw(tmp); })<br>
-  #define INL(x) __extension__ ({ u_int tmp = (x); inl(tmp); })<br>
-#else<br>
-#if defined(__DARWIN__)<br>
-    #include <DirectIO/darwinio.h><br>
-    #define off64_t off_t<br>
-    #define lseek64 lseek<br>
-#endif<br>
-#if defined (__sun) && (defined(__i386) || defined(__amd64))<br>
-  /* Note different order for outb */<br>
-  #define OUTB(x,y) outb(y, x)<br>
-  #define OUTW(x,y) outw(y, x)<br>
-  #define OUTL(x,y) outl(y, x)<br>
-  #define INB  inb<br>
-  #define INW  inw<br>
-  #define INL  inl<br>
-#else<br>
-  #define OUTB outb<br>
-  #define OUTW outw<br>
-  #define OUTL outl<br>
-  #define INB  inb<br>
-  #define INW  inw<br>
-  #define INL  inl<br>
-#endif<br>
-#endif<br>
-<br>
 typedef unsigned long chipaddr;<br>
<br>
 enum programmer {<br>
@@ -373,22 +322,13 @@<br>
 void physunmap(void *virt_addr, size_t len);<br>
 int setup_cpu_msr(int cpu);<br>
 void cleanup_cpu_msr(void);<br>
-#if !defined(__DARWIN__) && !defined(__FreeBSD__) && !defined(__DragonFly__)<br>
-typedef struct { uint32_t hi, lo; } msr_t;<br>
-msr_t rdmsr(int addr);<br>
-int wrmsr(int addr, msr_t msr);<br>
-#endif<br>
-#if defined(__FreeBSD__) || defined(__DragonFly__)<br>
-/* FreeBSD already has conflicting definitions for wrmsr/rdmsr. */<br>
-#undef rdmsr<br>
-#undef wrmsr<br>
-#define rdmsr freebsd_rdmsr<br>
-#define wrmsr freebsd_wrmsr<br>
-typedef struct { uint32_t hi, lo; } msr_t;<br>
-msr_t freebsd_rdmsr(int addr);<br>
-int freebsd_wrmsr(int addr, msr_t msr);<br>
-#endif<br>
<br>
+/* cbtable.c */<br>
+void lb_vendor_dev_from_string(char *boardstring);<br>
+int coreboot_init(void);<br>
+extern char *lb_part, *lb_vendor;<br>
+extern int partvendor_from_cbtable;<br>
+<br>
 /* internal.c */<br>
 #if NEED_PCI == 1<br>
 struct pci_dev *pci_dev_find_filter(struct pci_filter filter);<br>
@@ -428,9 +368,6 @@<br>
 uint16_t fallback_chip_readw(const chipaddr addr);<br>
 uint32_t fallback_chip_readl(const chipaddr addr);<br>
 void fallback_chip_readn(uint8_t *buf, const chipaddr addr, size_t len);<br>
-#if defined(__FreeBSD__) || defined(__DragonFly__)<br>
-extern int io_fd;<br>
-#endif<br>
<br>
 /* dummyflasher.c */<br>
 #if DUMMY_SUPPORT == 1<br>
@@ -545,12 +482,6 @@<br>
 int find_romentry(char *name);<br>
 int handle_romentries(uint8_t *buffer, struct flashchip *flash);<br>
<br>
-/* cbtable.c */<br>
-void lb_vendor_dev_from_string(char *boardstring);<br>
-int coreboot_init(void);<br>
-extern char *lb_part, *lb_vendor;<br>
-extern int partvendor_from_cbtable;<br>
-<br>
 /* spi.c */<br>
 enum spi_controller {<br>
        SPI_CONTROLLER_NONE,<br>
@@ -593,57 +524,14 @@<br>
 extern enum spi_controller spi_controller;<br>
 extern const struct spi_programmer spi_programmer[];<br>
 extern void *spibar;<br>
-int probe_spi_rdid(struct flashchip *flash);<br>
-int probe_spi_rdid4(struct flashchip *flash);<br>
-int probe_spi_rems(struct flashchip *flash);<br>
-int probe_spi_res(struct flashchip *flash);<br>
 int spi_send_command(unsigned int writecnt, unsigned int readcnt,<br>
                const unsigned char *writearr, unsigned char *readarr);<br>
 int spi_send_multicommand(struct spi_command *cmds);<br>
-int spi_write_enable(void);<br>
-int spi_write_disable(void);<br>
-int spi_chip_erase_60(struct flashchip *flash);<br>
-int spi_chip_erase_c7(struct flashchip *flash);<br>
-int spi_chip_erase_60_c7(struct flashchip *flash);<br>
-int spi_chip_erase_d8(struct flashchip *flash);<br>
-int spi_block_erase_20(struct flashchip *flash, unsigned int addr, unsigned int blocklen);<br>
-int spi_block_erase_52(struct flashchip *flash, unsigned int addr, unsigned int blocklen);<br>
-int spi_block_erase_d8(struct flashchip *flash, unsigned int addr, unsigned int blocklen);<br>
-int spi_block_erase_60(struct flashchip *flash, unsigned int addr, unsigned int blocklen);<br>
-int spi_block_erase_c7(struct flashchip *flash, unsigned int addr, unsigned int blocklen);<br>
-int spi_chip_write_1(struct flashchip *flash, uint8_t *buf);<br>
-int spi_chip_write_256(struct flashchip *flash, uint8_t *buf);<br>
-int spi_chip_read(struct flashchip *flash, uint8_t *buf, int start, int len);<br>
-uint8_t spi_read_status_register(void);<br>
-int spi_disable_blockprotect(void);<br>
-int spi_byte_program(int addr, uint8_t byte);<br>
-int spi_nbyte_program(int addr, uint8_t *bytes, int len);<br>
-int spi_nbyte_read(int addr, uint8_t *bytes, int len);<br>
-int spi_read_chunked(struct flashchip *flash, uint8_t *buf, int start, int len, int chunksize);<br>
-int spi_aai_write(struct flashchip *flash, uint8_t *buf);<br>
-uint32_t spi_get_valid_read_addr(void);<br>
 int default_spi_send_command(unsigned int writecnt, unsigned int readcnt,<br>
                             const unsigned char *writearr, unsigned char *readarr);<br>
 int default_spi_send_multicommand(struct spi_command *cmds);<br>
+uint32_t spi_get_valid_read_addr(void);<br>
<br>
-/* 82802ab.c */<br>
-int probe_82802ab(struct flashchip *flash);<br>
-int erase_82802ab(struct flashchip *flash);<br>
-int write_82802ab(struct flashchip *flash, uint8_t *buf);<br>
-<br>
-/* am29f040b.c */<br>
-int probe_29f040b(struct flashchip *flash);<br>
-int erase_29f040b(struct flashchip *flash);<br>
-int write_29f040b(struct flashchip *flash, uint8_t *buf);<br>
-<br>
-/* pm29f002.c */<br>
-int write_pm29f002(struct flashchip *flash, uint8_t *buf);<br>
-<br>
-/* en29f002a.c */<br>
-int probe_en29f002a(struct flashchip *flash);<br>
-int erase_en29f002a(struct flashchip *flash);<br>
-int write_en29f002a(struct flashchip *flash, uint8_t *buf);<br>
-<br>
 /* ichspi.c */<br>
 int ich_init_opcodes(void);<br>
 int ich_spi_send_command(unsigned int writecnt, unsigned int readcnt,<br>
@@ -670,97 +558,6 @@<br>
 int sb600_spi_write_1(struct flashchip *flash, uint8_t *buf);<br>
 extern uint8_t *sb600_spibar;<br>
<br>
-/* jedec.c */<br>
-uint8_t oddparity(uint8_t val);<br>
-void toggle_ready_jedec(chipaddr dst);<br>
-void data_polling_jedec(chipaddr dst, uint8_t data);<br>
-void start_program_jedec(chipaddr bios);<br>
-int write_byte_program_jedec(chipaddr bios, uint8_t *src,<br>
-                            chipaddr dst);<br>
-int probe_jedec(struct flashchip *flash);<br>
-int erase_chip_jedec(struct flashchip *flash);<br>
-int write_jedec(struct flashchip *flash, uint8_t *buf);<br>
-int write_jedec_1(struct flashchip *flash, uint8_t *buf);<br>
-int erase_sector_jedec(struct flashchip *flash, unsigned int page, unsigned int pagesize);<br>
-int erase_block_jedec(struct flashchip *flash, unsigned int page, unsigned int blocksize);<br>
-int write_sector_jedec(chipaddr bios, uint8_t *src,<br>
-                      chipaddr dst, unsigned int page_size);<br>
-<br>
-/* m29f002.c */<br>
-int erase_m29f002(struct flashchip *flash);<br>
-int write_m29f002t(struct flashchip *flash, uint8_t *buf);<br>
-int write_m29f002b(struct flashchip *flash, uint8_t *buf);<br>
-<br>
-/* m29f400bt.c */<br>
-int probe_m29f400bt(struct flashchip *flash);<br>
-int erase_m29f400bt(struct flashchip *flash);<br>
-int block_erase_m29f400bt(struct flashchip *flash, int start, int len);<br>
-int write_m29f400bt(struct flashchip *flash, uint8_t *buf);<br>
-int write_coreboot_m29f400bt(struct flashchip *flash, uint8_t *buf);<br>
-void toggle_ready_m29f400bt(chipaddr dst);<br>
-void data_polling_m29f400bt(chipaddr dst, uint8_t data);<br>
-void protect_m29f400bt(chipaddr bios);<br>
-void write_page_m29f400bt(chipaddr bios, uint8_t *src,<br>
-                         chipaddr dst, int page_size);<br>
-<br>
-/* mx29f002.c */<br>
-int probe_29f002(struct flashchip *flash);<br>
-int erase_29f002(struct flashchip *flash);<br>
-int write_29f002(struct flashchip *flash, uint8_t *buf);<br>
-<br>
-/* pm49fl00x.c */<br>
-int probe_49fl00x(struct flashchip *flash);<br>
-int erase_49fl00x(struct flashchip *flash);<br>
-int write_49fl00x(struct flashchip *flash, uint8_t *buf);<br>
-<br>
-/* sharplhf00l04.c */<br>
-int probe_lhf00l04(struct flashchip *flash);<br>
-int erase_lhf00l04(struct flashchip *flash);<br>
-int write_lhf00l04(struct flashchip *flash, uint8_t *buf);<br>
-void toggle_ready_lhf00l04(chipaddr dst);<br>
-void data_polling_lhf00l04(chipaddr dst, uint8_t data);<br>
-void protect_lhf00l04(chipaddr bios);<br>
-<br>
-/* sst28sf040.c */<br>
-int probe_28sf040(struct flashchip *flash);<br>
-int erase_28sf040(struct flashchip *flash);<br>
-int write_28sf040(struct flashchip *flash, uint8_t *buf);<br>
-<br>
-/* sst39sf020.c */<br>
-int probe_39sf020(struct flashchip *flash);<br>
-int write_39sf020(struct flashchip *flash, uint8_t *buf);<br>
-<br>
-/* sst49lf040.c */<br>
-int erase_49lf040(struct flashchip *flash);<br>
-int write_49lf040(struct flashchip *flash, uint8_t *buf);<br>
-<br>
-/* sst49lfxxxc.c */<br>
-int probe_49lfxxxc(struct flashchip *flash);<br>
-int erase_49lfxxxc(struct flashchip *flash);<br>
-int write_49lfxxxc(struct flashchip *flash, uint8_t *buf);<br>
-<br>
-/* sst_fwhub.c */<br>
-int probe_sst_fwhub(struct flashchip *flash);<br>
-int erase_sst_fwhub(struct flashchip *flash);<br>
-int erase_sst_fwhub_block(struct flashchip *flash, unsigned int offset, unsigned int page_size);<br>
-int write_sst_fwhub(struct flashchip *flash, uint8_t *buf);<br>
-<br>
-/* w39v040c.c */<br>
-int probe_w39v040c(struct flashchip *flash);<br>
-int erase_w39v040c(struct flashchip *flash);<br>
-int write_w39v040c(struct flashchip *flash, uint8_t *buf);<br>
-<br>
-/* w39V080fa.c */<br>
-int probe_winbond_fwhub(struct flashchip *flash);<br>
-int erase_winbond_fwhub(struct flashchip *flash);<br>
-int write_winbond_fwhub(struct flashchip *flash, uint8_t *buf);<br>
-<br>
-/* w29ee011.c */<br>
-int probe_w29ee011(struct flashchip *flash);<br>
-<br>
-/* w49f002u.c */<br>
-int write_49f002(struct flashchip *flash, uint8_t *buf);<br>
-<br>
 /* wbsio_spi.c */<br>
 int wbsio_check_for_spi(const char *name);<br>
 int wbsio_spi_send_command(unsigned int writecnt, unsigned int readcnt,<br>
@@ -768,11 +565,6 @@<br>
 int wbsio_spi_read(struct flashchip *flash, uint8_t *buf, int start, int len);<br>
 int wbsio_spi_write_1(struct flashchip *flash, uint8_t *buf);<br>
<br>
-/* stm50flw0x0x.c */<br>
-int probe_stm50flw0x0x(struct flashchip *flash);<br>
-int erase_stm50flw0x0x(struct flashchip *flash);<br>
-int write_stm50flw0x0x(struct flashchip *flash, uint8_t *buf);<br>
-<br>
 /* serprog.c */<br>
 int serprog_init(void);<br>
 int serprog_shutdown(void);<br>
@@ -787,4 +579,6 @@<br>
 void __attribute__((noreturn)) sp_die(char *msg);<br>
 extern int sp_fd;<br>
<br>
+#include "chipdrivers.h"<br>
+<br>
 #endif                         /* !__FLASH_H__ */<br>
Index: flashrom-flash_h_split_chipdrivers_hwaccess/hwaccess.h<br>
===================================================================<br>
--- flashrom-flash_h_split_chipdrivers_hwaccess/hwaccess.h      (Revision 0)<br>
+++ flashrom-flash_h_split_chipdrivers_hwaccess/hwaccess.h      (Revision 0)<br>
@@ -0,0 +1,99 @@<br>
+/*<br>
+ * This file is part of the flashrom project.<br>
+ *<br>
+ * Copyright (C) 2009 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>
+ * the Free Software Foundation; version 2 of the License.<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>
+ * Header file for hardware access and OS abstraction. Included from flash.h.<br>
+ */<br>
+<br>
+#ifndef __HWACCESS_H__<br>
+#define __HWACCESS_H__ 1<br>
+<br>
+#if defined(__GLIBC__)<br>
+#include <sys/io.h><br>
+#endif<br>
+#if NEED_PCI == 1<br>
+#include <pci/pci.h><br>
+#endif<br>
+<br>
+/* for iopl and outb under Solaris */<br>
+#if defined (__sun) && (defined(__i386) || defined(__amd64))<br>
+#include <strings.h><br>
+#include <sys/sysi86.h><br>
+#include <sys/psw.h><br>
+#include <asm/sunddi.h><br>
+#endif<br>
+<br>
+#if (defined(__MACH__) && defined(__APPLE__))<br>
+#define __DARWIN__<br>
+#endif<br>
+<br>
+#if defined(__FreeBSD__) || defined(__DragonFly__)<br>
+  #include <machine/cpufunc.h><br>
+  #define off64_t off_t<br>
+  #define lseek64 lseek<br>
+  #define OUTB(x, y) do { u_int tmp = (y); outb(tmp, (x)); } while (0)<br>
+  #define OUTW(x, y) do { u_int tmp = (y); outw(tmp, (x)); } while (0)<br>
+  #define OUTL(x, y) do { u_int tmp = (y); outl(tmp, (x)); } while (0)<br>
+  #define INB(x) __extension__ ({ u_int tmp = (x); inb(tmp); })<br>
+  #define INW(x) __extension__ ({ u_int tmp = (x); inw(tmp); })<br>
+  #define INL(x) __extension__ ({ u_int tmp = (x); inl(tmp); })<br>
+#else<br>
+#if defined(__DARWIN__)<br>
+    #include <DirectIO/darwinio.h><br>
+    #define off64_t off_t<br>
+    #define lseek64 lseek<br>
+#endif<br>
+#if defined (__sun) && (defined(__i386) || defined(__amd64))<br>
+  /* Note different order for outb */<br>
+  #define OUTB(x,y) outb(y, x)<br>
+  #define OUTW(x,y) outw(y, x)<br>
+  #define OUTL(x,y) outl(y, x)<br>
+  #define INB  inb<br>
+  #define INW  inw<br>
+  #define INL  inl<br>
+#else<br>
+  #define OUTB outb<br>
+  #define OUTW outw<br>
+  #define OUTL outl<br>
+  #define INB  inb<br>
+  #define INW  inw<br>
+  #define INL  inl<br>
+#endif<br>
+#endif<br>
+<br>
+#if defined(__FreeBSD__) || defined(__DragonFly__)<br>
+extern int io_fd;<br>
+#endif<br>
+<br>
+#if !defined(__DARWIN__) && !defined(__FreeBSD__) && !defined(__DragonFly__)<br>
+typedef struct { uint32_t hi, lo; } msr_t;<br>
+msr_t rdmsr(int addr);<br>
+int wrmsr(int addr, msr_t msr);<br>
+#endif<br>
+#if defined(__FreeBSD__) || defined(__DragonFly__)<br>
+/* FreeBSD already has conflicting definitions for wrmsr/rdmsr. */<br>
+#undef rdmsr<br>
+#undef wrmsr<br>
+#define rdmsr freebsd_rdmsr<br>
+#define wrmsr freebsd_wrmsr<br>
+typedef struct { uint32_t hi, lo; } msr_t;<br>
+msr_t freebsd_rdmsr(int addr);<br>
+int freebsd_wrmsr(int addr, msr_t msr);<br>
+#endif<br>
+<br>
+#endif /* !__HWACCESS_H__ */<br>
Index: flashrom-flash_h_split_chipdrivers_hwaccess/chipdrivers.h<br>
===================================================================<br>
--- flashrom-flash_h_split_chipdrivers_hwaccess/chipdrivers.h   (Revision 0)<br>
+++ flashrom-flash_h_split_chipdrivers_hwaccess/chipdrivers.h   (Revision 0)<br>
@@ -0,0 +1,169 @@<br>
+/*<br>
+ * This file is part of the flashrom project.<br>
+ *<br>
+ * Copyright (C) 2009 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>
+ * the Free Software Foundation; version 2 of the License.<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>
+ * Header file for flash chip drivers. Included from flash.h.<br>
+ * As a general rule, every function listed here should take a pointer to<br>
+ * struct flashchip as first parameter.<br>
+ */<br>
+<br>
+#ifndef __CHIPDRIVERS_H__<br>
+#define __CHIPDRIVERS_H__ 1<br>
+<br>
+/* spi.c, should probably be in spi_chip.c */<br>
+int probe_spi_rdid(struct flashchip *flash);<br>
+int probe_spi_rdid4(struct flashchip *flash);<br>
+int probe_spi_rems(struct flashchip *flash);<br>
+int probe_spi_res(struct flashchip *flash);<br>
+int spi_write_enable(void);<br>
+int spi_write_disable(void);<br>
+int spi_chip_erase_60(struct flashchip *flash);<br>
+int spi_chip_erase_c7(struct flashchip *flash);<br>
+int spi_chip_erase_60_c7(struct flashchip *flash);<br>
+int spi_chip_erase_d8(struct flashchip *flash);<br>
+int spi_block_erase_20(struct flashchip *flash, unsigned int addr, unsigned int blocklen);<br>
+int spi_block_erase_52(struct flashchip *flash, unsigned int addr, unsigned int blocklen);<br>
+int spi_block_erase_d8(struct flashchip *flash, unsigned int addr, unsigned int blocklen);<br>
+int spi_block_erase_60(struct flashchip *flash, unsigned int addr, unsigned int blocklen);<br>
+int spi_block_erase_c7(struct flashchip *flash, unsigned int addr, unsigned int blocklen);<br>
+int spi_chip_write_1(struct flashchip *flash, uint8_t *buf);<br>
+int spi_chip_write_256(struct flashchip *flash, uint8_t *buf);<br>
+int spi_chip_read(struct flashchip *flash, uint8_t *buf, int start, int len);<br>
+uint8_t spi_read_status_register(void);<br>
+int spi_disable_blockprotect(void);<br>
+int spi_byte_program(int addr, uint8_t byte);<br>
+int spi_nbyte_program(int addr, uint8_t *bytes, int len);<br>
+int spi_nbyte_read(int addr, uint8_t *bytes, int len);<br>
+int spi_read_chunked(struct flashchip *flash, uint8_t *buf, int start, int len, int chunksize);<br>
+int spi_aai_write(struct flashchip *flash, uint8_t *buf);<br>
+<br>
+/* 82802ab.c */<br>
+int probe_82802ab(struct flashchip *flash);<br>
+int erase_82802ab(struct flashchip *flash);<br>
+int write_82802ab(struct flashchip *flash, uint8_t *buf);<br>
+<br>
+/* am29f040b.c */<br>
+int probe_29f040b(struct flashchip *flash);<br>
+int erase_29f040b(struct flashchip *flash);<br>
+int write_29f040b(struct flashchip *flash, uint8_t *buf);<br>
+<br>
+/* pm29f002.c */<br>
+int write_pm29f002(struct flashchip *flash, uint8_t *buf);<br>
+<br>
+/* en29f002a.c */<br>
+int probe_en29f002a(struct flashchip *flash);<br>
+int erase_en29f002a(struct flashchip *flash);<br>
+int write_en29f002a(struct flashchip *flash, uint8_t *buf);<br>
+<br>
+/* jedec.c */<br>
+uint8_t oddparity(uint8_t val);<br>
+void toggle_ready_jedec(chipaddr dst);<br>
+void data_polling_jedec(chipaddr dst, uint8_t data);<br>
+void start_program_jedec(chipaddr bios);<br>
+int write_byte_program_jedec(chipaddr bios, uint8_t *src,<br>
+                            chipaddr dst);<br>
+int probe_jedec(struct flashchip *flash);<br>
+int erase_chip_jedec(struct flashchip *flash);<br>
+int write_jedec(struct flashchip *flash, uint8_t *buf);<br>
+int write_jedec_1(struct flashchip *flash, uint8_t *buf);<br>
+int erase_sector_jedec(struct flashchip *flash, unsigned int page, unsigned int pagesize);<br>
+int erase_block_jedec(struct flashchip *flash, unsigned int page, unsigned int blocksize);<br>
+int write_sector_jedec(chipaddr bios, uint8_t *src,<br>
+                      chipaddr dst, unsigned int page_size);<br>
+<br>
+/* m29f002.c */<br>
+int erase_m29f002(struct flashchip *flash);<br>
+int write_m29f002t(struct flashchip *flash, uint8_t *buf);<br>
+int write_m29f002b(struct flashchip *flash, uint8_t *buf);<br>
+<br>
+/* m29f400bt.c */<br>
+int probe_m29f400bt(struct flashchip *flash);<br>
+int erase_m29f400bt(struct flashchip *flash);<br>
+int block_erase_m29f400bt(struct flashchip *flash, int start, int len);<br>
+int write_m29f400bt(struct flashchip *flash, uint8_t *buf);<br>
+int write_coreboot_m29f400bt(struct flashchip *flash, uint8_t *buf);<br>
+void toggle_ready_m29f400bt(chipaddr dst);<br>
+void data_polling_m29f400bt(chipaddr dst, uint8_t data);<br>
+void protect_m29f400bt(chipaddr bios);<br>
+void write_page_m29f400bt(chipaddr bios, uint8_t *src,<br>
+                         chipaddr dst, int page_size);<br>
+<br>
+/* mx29f002.c */<br>
+int probe_29f002(struct flashchip *flash);<br>
+int erase_29f002(struct flashchip *flash);<br>
+int write_29f002(struct flashchip *flash, uint8_t *buf);<br>
+<br>
+/* pm49fl00x.c */<br>
+int probe_49fl00x(struct flashchip *flash);<br>
+int erase_49fl00x(struct flashchip *flash);<br>
+int write_49fl00x(struct flashchip *flash, uint8_t *buf);<br>
+<br>
+/* sharplhf00l04.c */<br>
+int probe_lhf00l04(struct flashchip *flash);<br>
+int erase_lhf00l04(struct flashchip *flash);<br>
+int write_lhf00l04(struct flashchip *flash, uint8_t *buf);<br>
+void toggle_ready_lhf00l04(chipaddr dst);<br>
+void data_polling_lhf00l04(chipaddr dst, uint8_t data);<br>
+void protect_lhf00l04(chipaddr bios);<br>
+<br>
+/* sst28sf040.c */<br>
+int probe_28sf040(struct flashchip *flash);<br>
+int erase_28sf040(struct flashchip *flash);<br>
+int write_28sf040(struct flashchip *flash, uint8_t *buf);<br>
+<br>
+/* sst39sf020.c */<br>
+int probe_39sf020(struct flashchip *flash);<br>
+int write_39sf020(struct flashchip *flash, uint8_t *buf);<br>
+<br>
+/* sst49lf040.c */<br>
+int erase_49lf040(struct flashchip *flash);<br>
+int write_49lf040(struct flashchip *flash, uint8_t *buf);<br>
+<br>
+/* sst49lfxxxc.c */<br>
+int probe_49lfxxxc(struct flashchip *flash);<br>
+int erase_49lfxxxc(struct flashchip *flash);<br>
+int write_49lfxxxc(struct flashchip *flash, uint8_t *buf);<br>
+<br>
+/* sst_fwhub.c */<br>
+int probe_sst_fwhub(struct flashchip *flash);<br>
+int erase_sst_fwhub(struct flashchip *flash);<br>
+int erase_sst_fwhub_block(struct flashchip *flash, unsigned int offset, unsigned int page_size);<br>
+int write_sst_fwhub(struct flashchip *flash, uint8_t *buf);<br>
+<br>
+/* w39v040c.c */<br>
+int probe_w39v040c(struct flashchip *flash);<br>
+int erase_w39v040c(struct flashchip *flash);<br>
+int write_w39v040c(struct flashchip *flash, uint8_t *buf);<br>
+<br>
+/* w39V080fa.c */<br>
+int probe_winbond_fwhub(struct flashchip *flash);<br>
+int erase_winbond_fwhub(struct flashchip *flash);<br>
+int write_winbond_fwhub(struct flashchip *flash, uint8_t *buf);<br>
+<br>
+/* w29ee011.c */<br>
+int probe_w29ee011(struct flashchip *flash);<br>
+<br>
+/* w49f002u.c */<br>
+int write_49f002(struct flashchip *flash, uint8_t *buf);<br>
+<br>
+/* stm50flw0x0x.c */<br>
+int probe_stm50flw0x0x(struct flashchip *flash);<br>
+int erase_stm50flw0x0x(struct flashchip *flash);<br>
+int write_stm50flw0x0x(struct flashchip *flash, uint8_t *buf);<br>
+<br>
+#endif /* !__CHIPDRIVERS_H__ */<br>
<br>
<br>
--<br>
Developer quote of the month:<br>
"We are juggling too many chainsaws and flaming arrows and tigers."<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>
</blockquote></div><br>