Author: hailfinger Date: 2009-08-12 15:32:56 +0200 (Wed, 12 Aug 2009) New Revision: 679
Modified: trunk/dummyflasher.c trunk/flash.h trunk/flashrom.c trunk/ft2232_spi.c trunk/it87spi.c trunk/nic3com.c trunk/pcidev.c trunk/satasii.c trunk/serprog.c Log: Use a common parameter variable for all programmers. This allows us to reduce #ifdef clauses a lot if we compile out some programmers completely.
Signed-off-by: Carl-Daniel Hailfinger c-d.hailfinger.devel.2006@gmx.net Acked-by: Stefan Reinauer stepan@coresystems.de
Modified: trunk/dummyflasher.c =================================================================== --- trunk/dummyflasher.c 2009-08-12 11:39:29 UTC (rev 678) +++ trunk/dummyflasher.c 2009-08-12 13:32:56 UTC (rev 679) @@ -24,45 +24,43 @@ #include <sys/types.h> #include "flash.h"
-char *dummytype = NULL; - int dummy_init(void) { int i; printf_debug("%s\n", __func__);
/* "all" is equivalent to specifying no type. */ - if (dummytype && (!strcmp(dummytype, "all"))) { - free(dummytype); - dummytype = NULL; + if (programmer_param && (!strcmp(programmer_param, "all"))) { + free(programmer_param); + programmer_param = NULL; } - if (!dummytype) - dummytype = strdup("parallel,lpc,fwh,spi"); + if (!programmer_param) + programmer_param = strdup("parallel,lpc,fwh,spi"); /* Convert the parameters to lowercase. */ - for (i = 0; dummytype[i] != '\0'; i++) - dummytype[i] = (char)tolower(dummytype[i]); + for (i = 0; programmer_param[i] != '\0'; i++) + programmer_param[i] = (char)tolower(programmer_param[i]);
buses_supported = CHIP_BUSTYPE_NONE; - if (strstr(dummytype, "parallel")) { + if (strstr(programmer_param, "parallel")) { buses_supported |= CHIP_BUSTYPE_PARALLEL; printf_debug("Enabling support for %s flash.\n", "parallel"); } - if (strstr(dummytype, "lpc")) { + if (strstr(programmer_param, "lpc")) { buses_supported |= CHIP_BUSTYPE_LPC; printf_debug("Enabling support for %s flash.\n", "LPC"); } - if (strstr(dummytype, "fwh")) { + if (strstr(programmer_param, "fwh")) { buses_supported |= CHIP_BUSTYPE_FWH; printf_debug("Enabling support for %s flash.\n", "FWH"); } - if (strstr(dummytype, "spi")) { + if (strstr(programmer_param, "spi")) { buses_supported |= CHIP_BUSTYPE_SPI; spi_controller = SPI_CONTROLLER_DUMMY; printf_debug("Enabling support for %s flash.\n", "SPI"); } if (buses_supported == CHIP_BUSTYPE_NONE) printf_debug("Support for all flash bus types disabled.\n"); - free(dummytype); + free(programmer_param); return 0; }
Modified: trunk/flash.h =================================================================== --- trunk/flash.h 2009-08-12 11:39:29 UTC (rev 678) +++ trunk/flash.h 2009-08-12 13:32:56 UTC (rev 679) @@ -277,7 +277,7 @@ const char *device_name; }; uint32_t pcidev_validate(struct pci_dev *dev, struct pcidev_status *devs); -uint32_t pcidev_init(uint16_t vendor_id, struct pcidev_status *devs); +uint32_t pcidev_init(uint16_t vendor_id, struct pcidev_status *devs, char *pcidev_bdf);
/* print.c */ char *flashbuses_to_text(enum chipbustype bustype); @@ -350,7 +350,6 @@ #endif
/* dummyflasher.c */ -extern char *dummytype; int dummy_init(void); int dummy_shutdown(void); void *dummy_map(const char *descr, unsigned long phys_addr, size_t len); @@ -383,13 +382,13 @@ /* ft2232_spi.c */ #define FTDI_FT2232H 0x6010 #define FTDI_FT4232H 0x6011 -extern char *ft2232spi_param; int ft2232_spi_init(void); int ft2232_spi_send_command(unsigned int writecnt, unsigned int readcnt, const unsigned char *writearr, unsigned char *readarr); int ft2232_spi_read(struct flashchip *flash, uint8_t *buf, int start, int len); int ft2232_spi_write_256(struct flashchip *flash, uint8_t *buf);
/* flashrom.c */ +extern char *programmer_param; extern int verbose; extern const char *flashrom_version; #define printf_debug(x...) { if (verbose) printf(x); } @@ -399,7 +398,6 @@ int max(int a, int b); int check_erased_range(struct flashchip *flash, int start, int len); int verify_range(struct flashchip *flash, uint8_t *cmpbuf, int start, int len, char *message); -extern char *pcidev_bdf; char *strcat_realloc(char *dest, const char *src);
#define OK 0 @@ -507,7 +505,6 @@ int ich_spi_send_multicommand(struct spi_command *spicommands);
/* it87spi.c */ -extern char *it87opts; extern uint16_t it8716f_flashport; void enter_conf_mode_ite(uint16_t port); void exit_conf_mode_ite(uint16_t port); @@ -628,7 +625,6 @@ 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);
Modified: trunk/flashrom.c =================================================================== --- trunk/flashrom.c 2009-08-12 11:39:29 UTC (rev 678) +++ trunk/flashrom.c 2009-08-12 13:32:56 UTC (rev 679) @@ -34,6 +34,7 @@ char *chip_to_probe = NULL; int verbose = 0; enum programmer programmer = PROGRAMMER_INTERNAL; +char *programmer_param = NULL;
const struct programmer_entry programmer_table[] = { { @@ -642,30 +643,32 @@ case 'p': if (strncmp(optarg, "internal", 8) == 0) { programmer = PROGRAMMER_INTERNAL; + if (optarg[8] == '=') + programmer_param = strdup(optarg + 9); } else if (strncmp(optarg, "dummy", 5) == 0) { programmer = PROGRAMMER_DUMMY; if (optarg[5] == '=') - dummytype = strdup(optarg + 6); + programmer_param = strdup(optarg + 6); } else if (strncmp(optarg, "nic3com", 7) == 0) { programmer = PROGRAMMER_NIC3COM; if (optarg[7] == '=') - pcidev_bdf = strdup(optarg + 8); + programmer_param = strdup(optarg + 8); } else if (strncmp(optarg, "satasii", 7) == 0) { programmer = PROGRAMMER_SATASII; if (optarg[7] == '=') - pcidev_bdf = strdup(optarg + 8); + programmer_param = strdup(optarg + 8); } else if (strncmp(optarg, "it87spi", 7) == 0) { programmer = PROGRAMMER_IT87SPI; if (optarg[7] == '=') - it87opts = strdup(optarg + 8); + programmer_param = strdup(optarg + 8); } else if (strncmp(optarg, "ft2232spi", 9) == 0) { programmer = PROGRAMMER_FT2232SPI; if (optarg[9] == '=') - ft2232spi_param = strdup(optarg + 10); + programmer_param = strdup(optarg + 10); } else if (strncmp(optarg, "serprog", 7) == 0) { programmer = PROGRAMMER_SERPROG; if (optarg[7] == '=') - serprog_param = strdup(optarg + 8); + programmer_param = strdup(optarg + 8); } else { printf("Error: Unknown programmer.\n"); exit(1);
Modified: trunk/ft2232_spi.c =================================================================== --- trunk/ft2232_spi.c 2009-08-12 11:39:29 UTC (rev 678) +++ trunk/ft2232_spi.c 2009-08-12 13:32:56 UTC (rev 679) @@ -26,8 +26,6 @@ #include "flash.h" #include "spi.h"
-char *ft2232spi_param = NULL; - #if FT2232_SPI_SUPPORT == 1
#include <ftdi.h> @@ -83,16 +81,16 @@ return EXIT_FAILURE; }
- if (ft2232spi_param && !strlen(ft2232spi_param)) { - free(ft2232spi_param); - ft2232spi_param = NULL; + if (programmer_param && !strlen(programmer_param)) { + free(programmer_param); + programmer_param = NULL; } - if (ft2232spi_param) { - if (strstr(ft2232spi_param, "2232")) + if (programmer_param) { + if (strstr(programmer_param, "2232")) ft2232_type = FTDI_FT2232H; - if (strstr(ft2232spi_param, "4232")) + if (strstr(programmer_param, "4232")) ft2232_type = FTDI_FT4232H; - portpos = strstr(ft2232spi_param, "port="); + portpos = strstr(programmer_param, "port="); if (portpos) { portpos += 5; switch (toupper(*portpos)) { @@ -107,7 +105,7 @@ "using default.\n"); } } - free(ft2232spi_param); + free(programmer_param); } printf_debug("Using device type %s ", (ft2232_type == FTDI_FT2232H) ? "2232H" : "4232H");
Modified: trunk/it87spi.c =================================================================== --- trunk/it87spi.c 2009-08-12 11:39:29 UTC (rev 678) +++ trunk/it87spi.c 2009-08-12 13:32:56 UTC (rev 679) @@ -31,7 +31,6 @@ #define ITE_SUPERIO_PORT1 0x2e #define ITE_SUPERIO_PORT2 0x4e
-char *it87opts = NULL; uint16_t it8716f_flashport = 0; /* use fast 33MHz SPI (<>0) or slow 16MHz (0) */ int fast_spi = 1; @@ -95,11 +94,11 @@ flashport = sio_read(port, 0x64) << 8; flashport |= sio_read(port, 0x65); printf("Serial flash port 0x%04x\n", flashport); - if (it87opts && !strlen(it87opts)) { - free(it87opts); - it87opts = NULL; + if (programmer_param && !strlen(programmer_param)) { + free(programmer_param); + programmer_param = NULL; } - if (it87opts && (portpos = strstr(it87opts, "port="))) { + if (programmer_param && (portpos = strstr(programmer_param, "port="))) { portpos += 5; flashport = strtol(portpos, (char **)NULL, 0); printf("Forcing serial flash port 0x%04x\n", flashport);
Modified: trunk/nic3com.c =================================================================== --- trunk/nic3com.c 2009-08-12 11:39:29 UTC (rev 678) +++ trunk/nic3com.c 2009-08-12 13:32:56 UTC (rev 679) @@ -58,7 +58,7 @@ { get_io_perms();
- io_base_addr = pcidev_init(PCI_VENDOR_ID_3COM, nics_3com); + io_base_addr = pcidev_init(PCI_VENDOR_ID_3COM, nics_3com, programmer_param); id = pcidev_dev->device_id;
/* 3COM 3C90xB cards need a special fixup. */ @@ -94,7 +94,7 @@ OUTL(internal_conf, io_base_addr + INTERNAL_CONFIG); }
- free(pcidev_bdf); + free(programmer_param); pci_cleanup(pacc); release_io_perms(); return 0;
Modified: trunk/pcidev.c =================================================================== --- trunk/pcidev.c 2009-08-12 11:39:29 UTC (rev 678) +++ trunk/pcidev.c 2009-08-12 13:32:56 UTC (rev 679) @@ -26,7 +26,6 @@ uint32_t io_base_addr; struct pci_access *pacc; struct pci_filter filter; -char *pcidev_bdf = NULL; struct pci_dev *pcidev_dev = NULL;
uint32_t pcidev_validate(struct pci_dev *dev, struct pcidev_status *devs) @@ -58,7 +57,7 @@ return 0; }
-uint32_t pcidev_init(uint16_t vendor_id, struct pcidev_status *devs) +uint32_t pcidev_init(uint16_t vendor_id, struct pcidev_status *devs, char *pcidev_bdf) { struct pci_dev *dev; char *msg = NULL;
Modified: trunk/satasii.c =================================================================== --- trunk/satasii.c 2009-08-12 11:39:29 UTC (rev 678) +++ trunk/satasii.c 2009-08-12 13:32:56 UTC (rev 679) @@ -47,7 +47,7 @@
get_io_perms();
- pcidev_init(PCI_VENDOR_ID_SII, satas_sii); + pcidev_init(PCI_VENDOR_ID_SII, satas_sii, programmer_param); id = pcidev_dev->device_id;
if ((id == 0x3132) || (id == 0x3124)) { @@ -71,7 +71,7 @@
int satasii_shutdown(void) { - free(pcidev_bdf); + free(programmer_param); pci_cleanup(pacc); release_io_perms(); return 0;
Modified: trunk/serprog.c =================================================================== --- trunk/serprog.c 2009-08-12 11:39:29 UTC (rev 678) +++ trunk/serprog.c 2009-08-12 13:32:56 UTC (rev 679) @@ -19,8 +19,14 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */
-#include <string.h> +#include <stdio.h> #include <stdlib.h> +#include <unistd.h> +#include "flash.h" + +#if SERPROG_SUPPORT == 1 + +#include <string.h> #include <ctype.h> #include <fcntl.h> #include <sys/types.h> @@ -31,16 +37,9 @@ #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; - -#if SERPROG_SUPPORT == 1 - #define MSGHEADER "serprog:"
#define S_ACK 0x06 @@ -431,15 +430,15 @@ char *dev; printf_debug("%s\n", __func__); /* the parameter is either of format "/dev/device:baud" or "ip:port" */ - if ((!serprog_param) || (!strlen(serprog_param))) { + if ((!programmer_param) || (!strlen(programmer_param))) { nodevice: fprintf(stderr, "Error: No device/host given for the serial programmer driver.\n" "Use flashrom -p serprog=/dev/device:baud or flashrom -p serprog=ip:port\n"); exit(1); } - num = strstr(serprog_param, ":"); - len = num - serprog_param; + num = strstr(programmer_param, ":"); + len = num - programmer_param; if (!len) goto nodevice; if (!num) { fprintf(stderr, @@ -447,15 +446,15 @@ "Use flashrom -p serprog=/dev/device:baud or flashrom -p serprog=ip:port\n"); exit(1); } - len = num - serprog_param; + len = num - programmer_param; dev = malloc(len + 1); if (!dev) sp_die("Error: memory allocation failure"); - memcpy(dev, serprog_param, len); + memcpy(dev, programmer_param, len); dev[len] = 0; num = strdup(num + 1); if (!num) sp_die("Error: memory allocation failure"); - free(serprog_param); - serprog_param = NULL; + free(programmer_param); + programmer_param = NULL;
if (dev[0] == '/') sp_fd = sp_openserport(dev, atoi(num)); else sp_fd = sp_opensocket(dev, atoi(num));