Commit 9b32de94 authored by Stefan Tauner's avatar Stefan Tauner
Browse files

Refactor some CLI-relevant parts


Begin to move functions that clearly belong to the (command line)
user interface out of flashrom's core files like flashrom.c.

 - Refine messages within check_chip_supported(), rename it to
   print_chip_support_status() and move it to newly created cli_common.c.
 - Move flashbuses_to_text() to cli_common.c as well.
 - Move global verbosity variables to cli_output.c.

Corresponding to flashrom svn r1841.
Signed-off-by: default avatarStefan Tauner <stefan.tauner@alumni.tuwien.ac.at>
Acked-by: default avatarCarl-Daniel Hailfinger <c-d.hailfinger.devel.2006@gmx.net>
parent a8cf3620
...@@ -363,7 +363,7 @@ LIB_OBJS = layout.o flashrom.o udelay.o programmer.o helpers.o ...@@ -363,7 +363,7 @@ LIB_OBJS = layout.o flashrom.o udelay.o programmer.o helpers.o
############################################################################### ###############################################################################
# Frontend related stuff. # Frontend related stuff.
CLI_OBJS = cli_classic.o cli_output.o print.o CLI_OBJS = cli_classic.o cli_output.o cli_common.o print.o
# Set the flashrom version string from the highest revision number of the checked out flashrom files. # Set the flashrom version string from the highest revision number of the checked out flashrom files.
# Note to packagers: Any tree exported with "make export" or "make tarball" # Note to packagers: Any tree exported with "make export" or "make tarball"
......
...@@ -499,7 +499,7 @@ int main(int argc, char *argv[]) ...@@ -499,7 +499,7 @@ int main(int argc, char *argv[])
fill_flash = &flashes[0]; fill_flash = &flashes[0];
check_chip_supported(fill_flash->chip); print_chip_support_status(fill_flash->chip);
size = fill_flash->chip->total_size * 1024; size = fill_flash->chip->total_size * 1024;
if (check_max_decode(fill_flash->mst->buses_supported & fill_flash->chip->bustype, size) && (!force)) { if (check_max_decode(fill_flash->mst->buses_supported & fill_flash->chip->bustype, size) && (!force)) {
......
/*
* This file is part of the flashrom project.
*
* Copyright (C) 2009 Uwe Hermann <uwe@hermann-uwe.de>
* Copyright (C) 2009 Carl-Daniel Hailfinger
* Copyright (C) 2011-2014 Stefan Tauner
*
* 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 <stdlib.h>
#include <string.h>
#include "flash.h"
/*
* Return a string corresponding to the bustype parameter.
* Memory is obtained with malloc() and must be freed with free() by the caller.
*/
char *flashbuses_to_text(enum chipbustype bustype)
{
char *ret = calloc(1, 1);
/*
* FIXME: Once all chipsets and flash chips have been updated, NONSPI
* will cease to exist and should be eliminated here as well.
*/
if (bustype == BUS_NONSPI) {
ret = strcat_realloc(ret, "Non-SPI, ");
} else {
if (bustype & BUS_PARALLEL)
ret = strcat_realloc(ret, "Parallel, ");
if (bustype & BUS_LPC)
ret = strcat_realloc(ret, "LPC, ");
if (bustype & BUS_FWH)
ret = strcat_realloc(ret, "FWH, ");
if (bustype & BUS_SPI)
ret = strcat_realloc(ret, "SPI, ");
if (bustype & BUS_PROG)
ret = strcat_realloc(ret, "Programmer-specific, ");
if (bustype == BUS_NONE)
ret = strcat_realloc(ret, "None, ");
}
/* Kill last comma. */
ret[strlen(ret) - 2] = '\0';
ret = realloc(ret, strlen(ret) + 1);
return ret;
}
void print_chip_support_status(const struct flashchip *chip)
{
if (chip->feature_bits & FEATURE_OTP) {
msg_cdbg("This chip may contain one-time programmable memory. flashrom cannot read\n"
"and may never be able to write it, hence it may not be able to completely\n"
"clone the contents of this chip (see man page for details).\n");
}
if ((chip->tested.erase == NA) && (chip->tested.write == NA)) {
msg_cdbg("This chip's main memory can not be erased/written by design.\n");
}
if ((chip->tested.probe == BAD) || (chip->tested.probe == NT) ||
(chip->tested.read == BAD) || (chip->tested.read == NT) ||
(chip->tested.erase == BAD) || (chip->tested.erase == NT) ||
(chip->tested.write == BAD) || (chip->tested.write == NT)){
msg_cinfo("===\n");
if ((chip->tested.probe == BAD) ||
(chip->tested.read == BAD) ||
(chip->tested.erase == BAD) ||
(chip->tested.write == BAD)) {
msg_cinfo("This flash part has status NOT WORKING for operations:");
if (chip->tested.probe == BAD)
msg_cinfo(" PROBE");
if (chip->tested.read == BAD)
msg_cinfo(" READ");
if (chip->tested.erase == BAD)
msg_cinfo(" ERASE");
if (chip->tested.write == BAD)
msg_cinfo(" WRITE");
msg_cinfo("\n");
}
if ((chip->tested.probe == NT) ||
(chip->tested.read == NT) ||
(chip->tested.erase == NT) ||
(chip->tested.write == NT)) {
msg_cinfo("This flash part has status UNTESTED for operations:");
if (chip->tested.probe == NT)
msg_cinfo(" PROBE");
if (chip->tested.read == NT)
msg_cinfo(" READ");
if (chip->tested.erase == NT)
msg_cinfo(" ERASE");
if (chip->tested.write == NT)
msg_cinfo(" WRITE");
msg_cinfo("\n");
}
msg_cinfo("The test status of this chip may have been updated in the latest development\n"
"version of flashrom. If you are running the latest development version,\n"
"please email a report to flashrom@flashrom.org if any of the above operations\n"
"work correctly for you with this flash chip. Please include the flashrom log\n"
"file for all operations you tested (see the man page for details), and mention\n"
"which mainboard or programmer you tested in the subject line.\n"
"Thanks for your help!\n");
}
}
...@@ -25,6 +25,9 @@ ...@@ -25,6 +25,9 @@
#include <errno.h> #include <errno.h>
#include "flash.h" #include "flash.h"
int verbose_screen = MSG_INFO;
int verbose_logfile = MSG_DEBUG2;
#ifndef STANDALONE #ifndef STANDALONE
static FILE *logfile = NULL; static FILE *logfile = NULL;
......
...@@ -238,7 +238,6 @@ uint32_t chip_readl(const struct flashctx *flash, const chipaddr addr); ...@@ -238,7 +238,6 @@ uint32_t chip_readl(const struct flashctx *flash, const chipaddr addr);
void chip_readn(const struct flashctx *flash, uint8_t *buf, const chipaddr addr, size_t len); void chip_readn(const struct flashctx *flash, uint8_t *buf, const chipaddr addr, size_t len);
/* print.c */ /* print.c */
char *flashbuses_to_text(enum chipbustype bustype);
int print_supported(void); int print_supported(void);
void print_supported_wiki(void); void print_supported_wiki(void);
...@@ -251,8 +250,6 @@ char *strcat_realloc(char *dest, const char *src); ...@@ -251,8 +250,6 @@ char *strcat_realloc(char *dest, const char *src);
void tolower_string(char *str); void tolower_string(char *str);
/* flashrom.c */ /* flashrom.c */
extern int verbose_screen;
extern int verbose_logfile;
extern const char flashrom_version[]; extern const char flashrom_version[];
extern const char *chip_to_probe; extern const char *chip_to_probe;
void map_flash_registers(struct flashctx *flash); void map_flash_registers(struct flashctx *flash);
...@@ -285,7 +282,13 @@ int write_buf_to_file(const unsigned char *buf, unsigned long size, const char * ...@@ -285,7 +282,13 @@ int write_buf_to_file(const unsigned char *buf, unsigned long size, const char *
*/ */
#define ERROR_FLASHROM_LIMIT -201 #define ERROR_FLASHROM_LIMIT -201
/* cli_common.c */
char *flashbuses_to_text(enum chipbustype bustype);
void print_chip_support_status(const struct flashchip *chip);
/* cli_output.c */ /* cli_output.c */
extern int verbose_screen;
extern int verbose_logfile;
#ifndef STANDALONE #ifndef STANDALONE
int open_logfile(const char * const filename); int open_logfile(const char * const filename);
int close_logfile(void); int close_logfile(void);
......
...@@ -42,11 +42,8 @@ ...@@ -42,11 +42,8 @@
const char flashrom_version[] = FLASHROM_VERSION; const char flashrom_version[] = FLASHROM_VERSION;
const char *chip_to_probe = NULL; const char *chip_to_probe = NULL;
int verbose_screen = MSG_INFO;
int verbose_logfile = MSG_DEBUG2;
static enum programmer programmer = PROGRAMMER_INVALID; static enum programmer programmer = PROGRAMMER_INVALID;
static const char *programmer_param = NULL; static const char *programmer_param = NULL;
/* /*
...@@ -1783,73 +1780,6 @@ int selfcheck(void) ...@@ -1783,73 +1780,6 @@ int selfcheck(void)
return ret; return ret;
} }
void check_chip_supported(const struct flashchip *chip)
{
if (chip->feature_bits & FEATURE_OTP) {
msg_cdbg("This chip may contain one-time programmable memory. "
"flashrom cannot read\nand may never be able to write "
"it, hence it may not be able to completely\n"
"clone the contents of this chip (see man page for "
"details).\n");
}
if ((chip->tested.erase == NA) && (chip->tested.write == NA)) {
msg_cdbg("This chip's main memory can not be erased/written by design.\n");
}
if ((chip->tested.probe == BAD) || (chip->tested.probe == NT) ||
(chip->tested.read == BAD) || (chip->tested.read == NT) ||
(chip->tested.erase == BAD) || (chip->tested.erase == NT) ||
(chip->tested.write == BAD) || (chip->tested.write == NT)){
msg_cinfo("===\n");
if ((chip->tested.probe == BAD) ||
(chip->tested.read == BAD) ||
(chip->tested.erase == BAD) ||
(chip->tested.write == BAD)) {
msg_cinfo("This flash part has status NOT WORKING for operations:");
if (chip->tested.probe == BAD)
msg_cinfo(" PROBE");
if (chip->tested.read == BAD)
msg_cinfo(" READ");
if (chip->tested.erase == BAD)
msg_cinfo(" ERASE");
if (chip->tested.write == BAD)
msg_cinfo(" WRITE");
msg_cinfo("\n");
}
if ((chip->tested.probe == NT) ||
(chip->tested.read == NT) ||
(chip->tested.erase == NT) ||
(chip->tested.write == NT)) {
msg_cinfo("This flash part has status UNTESTED for operations:");
if (chip->tested.probe == NT)
msg_cinfo(" PROBE");
if (chip->tested.read == NT)
msg_cinfo(" READ");
if (chip->tested.erase == NT)
msg_cinfo(" ERASE");
if (chip->tested.write == NT)
msg_cinfo(" WRITE");
msg_cinfo("\n");
}
/* FIXME: This message is designed towards CLI users. */
msg_cinfo("The test status of this chip may have been updated "
"in the latest development\n"
"version of flashrom. If you are running the latest "
"development version,\n"
"please email a report to flashrom@flashrom.org if "
"any of the above operations\n"
"work correctly for you with this flash part. Please "
"include the flashrom\n"
"output with the additional -V option for all "
"operations you tested (-V, -Vr,\n"
"-VE, -Vw), and mention which mainboard or "
"programmer you tested.\n"
"Please mention your board in the subject line. "
"Thanks for your help!\n");
}
}
/* FIXME: This function signature needs to be improved once doit() has a better /* FIXME: This function signature needs to be improved once doit() has a better
* function signature. * function signature.
*/ */
......
...@@ -59,39 +59,6 @@ static const char *test_state_to_text(enum test_state test_state) ...@@ -59,39 +59,6 @@ static const char *test_state_to_text(enum test_state test_state)
} }
} }
/*
* Return a string corresponding to the bustype parameter.
* Memory is obtained with malloc() and must be freed with free() by the caller.
*/
char *flashbuses_to_text(enum chipbustype bustype)
{
char *ret = calloc(1, 1);
/*
* FIXME: Once all chipsets and flash chips have been updated, NONSPI
* will cease to exist and should be eliminated here as well.
*/
if (bustype == BUS_NONSPI) {
ret = strcat_realloc(ret, "Non-SPI, ");
} else {
if (bustype & BUS_PARALLEL)
ret = strcat_realloc(ret, "Parallel, ");
if (bustype & BUS_LPC)
ret = strcat_realloc(ret, "LPC, ");
if (bustype & BUS_FWH)
ret = strcat_realloc(ret, "FWH, ");
if (bustype & BUS_SPI)
ret = strcat_realloc(ret, "SPI, ");
if (bustype & BUS_PROG)
ret = strcat_realloc(ret, "Programmer-specific, ");
if (bustype == BUS_NONE)
ret = strcat_realloc(ret, "None, ");
}
/* Kill last comma. */
ret[strlen(ret) - 2] = '\0';
ret = realloc(ret, strlen(ret) + 1);
return ret;
}
static int print_supported_chips(void) static int print_supported_chips(void)
{ {
const char *delim = "/"; const char *delim = "/";
......
...@@ -513,7 +513,6 @@ struct decode_sizes { ...@@ -513,7 +513,6 @@ struct decode_sizes {
extern struct decode_sizes max_rom_decode; extern struct decode_sizes max_rom_decode;
extern int programmer_may_write; extern int programmer_may_write;
extern unsigned long flashbase; extern unsigned long flashbase;
void check_chip_supported(const struct flashchip *chip);
int check_max_decode(enum chipbustype buses, uint32_t size); int check_max_decode(enum chipbustype buses, uint32_t size);
char *extract_programmer_param(const char *param_name); char *extract_programmer_param(const char *param_name);
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment