summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-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
OpenPOWER on IntegriCloud