summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorhailfinger <hailfinger@2b7e53f0-3cfb-0310-b3e9-8179ed1497e1>2009-06-23 11:33:43 +0000
committerhailfinger <hailfinger@2b7e53f0-3cfb-0310-b3e9-8179ed1497e1>2009-06-23 11:33:43 +0000
commit89070e2e7b35f769e04e462d65cf5c161ad7c7e3 (patch)
tree6cecd997684ef18bc32a64cf1c16812f1ad6f6d2
parente8b7293a4728b4e8d0c57fd9b41df9c4aa6764ab (diff)
downloadflashrom-89070e2e7b35f769e04e462d65cf5c161ad7c7e3.tar.gz
Initial commit of an external serial flasher protocol.
Supports RS-232, USB serial converters (untested) and TCP streams. All functionality is stubbed out to allow multiplatform compile testing of the headers we use. The real serial flasher protocol driver will be committed next. Signed-off-by: Urja Rannikko <urjaman@gmail.com> Signed-off-by: Carl-Daniel Hailfinger <c-d.hailfinger.devel.2006@gmx.net> Acked-by: Carl-Daniel Hailfinger <c-d.hailfinger.devel.2006@gmx.net> git-svn-id: https://code.coreboot.org/svn/flashrom/trunk@625 2b7e53f0-3cfb-0310-b3e9-8179ed1497e1
-rw-r--r--Makefile3
-rw-r--r--flash.h9
-rw-r--r--flashrom.c21
-rw-r--r--serprog.c80
4 files changed, 111 insertions, 2 deletions
diff --git a/Makefile b/Makefile
index f95ba8d..2a54c73 100644
--- a/Makefile
+++ b/Makefile
@@ -49,7 +49,8 @@ OBJS = chipset_enable.o board_enable.o udelay.o jedec.o stm50flw0x0x.o \
sst49lfxxxc.o sst_fwhub.o layout.o cbtable.o flashchips.o physmap.o \
flashrom.o w39v080fa.o sharplhf00l04.o w29ee011.o spi.o it87spi.o \
ichspi.o w39v040c.o sb600spi.o wbsio_spi.o m29f002.o internal.o \
- dummyflasher.o pcidev.o nic3com.o satasii.o ft2232_spi.o print.o
+ dummyflasher.o pcidev.o nic3com.o satasii.o ft2232_spi.o serprog.o \
+ print.o
all: pciutils features dep $(PROGRAM)
diff --git a/flash.h b/flash.h
index 5abda95..74a9e4b 100644
--- a/flash.h
+++ b/flash.h
@@ -87,6 +87,7 @@ extern int programmer;
#define PROGRAMMER_SATASII 0x03
#define PROGRAMMER_IT87SPI 0x04
#define PROGRAMMER_FT2232SPI 0x05
+#define PROGRAMMER_SERPROG 0x06
struct programmer_entry {
const char *vendor;
@@ -585,4 +586,12 @@ int probe_stm50flw0x0x(struct flashchip *flash);
int erase_stm50flw0x0x(struct flashchip *flash);
int write_stm50flw0x0x(struct flashchip *flash, uint8_t *buf);
+/* serprog.c */
+extern char* serprog_param;
+int serprog_init(void);
+int serprog_shutdown(void);
+void serprog_chip_writeb(uint8_t val, chipaddr addr);
+uint8_t serprog_chip_readb(const chipaddr addr);
+void serprog_chip_readn(uint8_t *buf, const chipaddr addr, size_t len);
+void serprog_delay(int delay);
#endif /* !__FLASH_H__ */
diff --git a/flashrom.c b/flashrom.c
index b3f9b03..914ee4b 100644
--- a/flashrom.c
+++ b/flashrom.c
@@ -130,6 +130,21 @@ const struct programmer_entry programmer_table[] = {
.chip_writen = fallback_chip_writen,
.delay = internal_delay,
},
+ {
+ .init = serprog_init,
+ .shutdown = serprog_shutdown,
+ .map_flash_region = fallback_map,
+ .unmap_flash_region = fallback_unmap,
+ .chip_readb = serprog_chip_readb,
+ .chip_readw = fallback_chip_readw,
+ .chip_readl = fallback_chip_readl,
+ .chip_readn = serprog_chip_readn,
+ .chip_writeb = serprog_chip_writeb,
+ .chip_writew = fallback_chip_writew,
+ .chip_writel = fallback_chip_writel,
+ .chip_writen = fallback_chip_writen,
+ .delay = serprog_delay,
+ },
{},
};
@@ -500,7 +515,7 @@ void usage(const char *name)
" -z | --list-supported-wiki: print supported devices in wiki syntax\n"
" -p | --programmer <name>: specify the programmer device\n"
" (internal, dummy, nic3com, satasii,\n"
- " it87spi, ft2232spi)\n"
+ " it87spi, ft2232spi, serprog)\n"
" -h | --help: print this help text\n"
" -R | --version: print the version (release)\n"
"\nYou can specify one of -E, -r, -w, -v or no operation. "
@@ -653,6 +668,10 @@ int main(int argc, char *argv[])
programmer = PROGRAMMER_IT87SPI;
} else if (strncmp(optarg, "ft2232spi", 9) == 0) {
programmer = PROGRAMMER_FT2232SPI;
+ } else if (strncmp(optarg, "serprog", 7) == 0) {
+ programmer = PROGRAMMER_SERPROG;
+ if (optarg[7] == '=')
+ serprog_param = strdup(optarg + 8);
} else {
printf("Error: Unknown programmer.\n");
exit(1);
diff --git a/serprog.c b/serprog.c
new file mode 100644
index 0000000..3a105c8
--- /dev/null
+++ b/serprog.c
@@ -0,0 +1,80 @@
+/*
+ * This file is part of the flashrom project.
+ *
+ * Copyright (C) 2009 Urja Rannikko <urjaman@gmail.com>
+ * Copyright (C) 2009 Carl-Daniel Hailfinger
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+#include <string.h>
+#include <stdlib.h>
+#include <ctype.h>
+#include <fcntl.h>
+#include <sys/types.h>
+#include <sys/socket.h>
+#include <arpa/inet.h>
+#include <netinet/in.h>
+#include <netinet/tcp.h>
+#include <netdb.h>
+#include <sys/stat.h>
+#include <errno.h>
+#include <stdio.h>
+#include <unistd.h>
+#include <inttypes.h>
+#include <termios.h>
+#include "flash.h"
+
+char *serprog_param = NULL;
+
+#define SERPROG_SUPPORT 0
+#if SERPROG_SUPPORT == 1
+#else
+int serprog_init(void)
+{
+ fprintf(stderr, "Serial programmer support was not compiled in\n");
+ exit(1);
+}
+
+int serprog_shutdown(void)
+{
+ fprintf(stderr, "Serial programmer support was not compiled in\n");
+ exit(1);
+}
+
+void serprog_chip_writeb(uint8_t val, chipaddr addr)
+{
+ fprintf(stderr, "Serial programmer support was not compiled in\n");
+ exit(1);
+}
+
+uint8_t serprog_chip_readb(const chipaddr addr)
+{
+ fprintf(stderr, "Serial programmer support was not compiled in\n");
+ exit(1);
+}
+
+void serprog_chip_readn(uint8_t *buf, const chipaddr addr, size_t len)
+{
+ fprintf(stderr, "Serial programmer support was not compiled in\n");
+ exit(1);
+}
+
+void serprog_delay(int delay)
+{
+ fprintf(stderr, "Serial programmer support was not compiled in\n");
+ exit(1);
+}
+#endif