diff --git a/Makefile b/Makefile index f95ba8d45..2a54c737b 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 5abda9528..74a9e4b53 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 b3f9b038e..914ee4bd1 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 : 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 000000000..3a105c8bb --- /dev/null +++ b/serprog.c @@ -0,0 +1,80 @@ +/* + * This file is part of the flashrom project. + * + * Copyright (C) 2009 Urja Rannikko + * 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 +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#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