Multiple unrelated changes

CONFIG_BITBANG_SPI was not selected if CONFIG_NICINTEL_SPI was on by default.
Wiki output was missing all flash chips if CONFIG_INTERNAL was not
selected.
Use correct type for toupper()/tolower()/isspace() functions.
Specify software requirements in a generic way.
Non-x86 compilation does not work with the default programmer set, so
list the make parameters which result in a working build.

Corresponding to flashrom svn r1203.

Signed-off-by: Carl-Daniel Hailfinger <c-d.hailfinger.devel.2006@gmx.net>
Acked-by: Michael Karcher <flashrom@mkarcher.dialup.fu-berlin.de>
diff --git a/Makefile b/Makefile
index 54f04b9..77e9b5f 100644
--- a/Makefile
+++ b/Makefile
@@ -115,21 +115,6 @@
 # RayeR SPIPGM hardware support
 CONFIG_RAYER_SPI ?= yes
 
-# Bitbanging SPI infrastructure, default off unless needed.
-ifeq ($(CONFIG_RAYER_SPI), yes)
-override CONFIG_BITBANG_SPI = yes
-else
-ifeq ($(CONFIG_INTERNAL), yes)
-override CONFIG_BITBANG_SPI = yes
-else
-ifeq ($(CONFIG_NICINTEL_SPI), yes)
-override CONFIG_BITBANG_SPI = yes
-else
-CONFIG_BITBANG_SPI ?= no
-endif
-endif
-endif
-
 # Always enable 3Com NICs for now.
 CONFIG_NIC3COM ?= yes
 
@@ -170,6 +155,21 @@
 # Disable wiki printing by default. It is only useful if you have wiki access.
 CONFIG_PRINT_WIKI ?= no
 
+# Bitbanging SPI infrastructure, default off unless needed.
+ifeq ($(CONFIG_RAYER_SPI), yes)
+override CONFIG_BITBANG_SPI = yes
+else
+ifeq ($(CONFIG_INTERNAL), yes)
+override CONFIG_BITBANG_SPI = yes
+else
+ifeq ($(CONFIG_NICINTEL_SPI), yes)
+override CONFIG_BITBANG_SPI = yes
+else
+CONFIG_BITBANG_SPI ?= no
+endif
+endif
+endif
+
 ifeq ($(CONFIG_INTERNAL), yes)
 FEATURE_CFLAGS += -D'CONFIG_INTERNAL=1'
 PROGRAMMER_OBJS += processor_enable.o chipset_enable.o board_enable.o cbtable.o dmi.o internal.o
diff --git a/README b/README
index 5b1799b..a94cae8 100644
--- a/README
+++ b/README
@@ -42,7 +42,11 @@
 Build Instructions
 ------------------
 
-To build flashrom you need to install the following packages or ports:
+To build flashrom you need to install the following software:
+
+ * pciutils+libpci (if you want support for mainboard or PCI device flashing)
+ * libusb (if you want FT2232 or Dediprog support)
+ * libftdi (if you want FT2232 support)
 
 Linux et al:
 
@@ -111,6 +115,18 @@
  http://homer.rice.edu/~sandmann/cwsdpmi/csdpmi7b.zip and make sure
  CWSDPMI.EXE is in the current directory.
 
+Processor architecture dependent features:
+
+ On non-x86 architectures you have to disable a few programmers because they
+ use port-based I/O which is not directly available on non-x86. Please add
+ CONFIG_RAYER_SPI=no CONFIG_NIC3COM=no CONFIG_ATAHPT=no CONFIG_NICREALTEK=no \
+ CONFIG_NICNATSEMI=no
+ as parameters to the "make" invocation.
+ Besides that, the internal programmer is only supported on x86 and MIPS. On
+ other architectures, please add
+ CONFIG_INTERNAL=no
+ as parameter to the "make" invocation.
+
 Installation
 ------------
 
diff --git a/ft2232_spi.c b/ft2232_spi.c
index ee2b693..a2ea2a8 100644
--- a/ft2232_spi.c
+++ b/ft2232_spi.c
@@ -148,7 +148,7 @@
 	free(arg);
 	arg = extract_programmer_param("port");
 	if (arg) {
-		switch (toupper(*arg)) {
+		switch (toupper((unsigned char)*arg)) {
 		case 'A':
 			ft2232_interface = INTERFACE_A;
 			break;
diff --git a/print_wiki.c b/print_wiki.c
index 313fdea..1b46dd0 100644
--- a/print_wiki.c
+++ b/print_wiki.c
@@ -268,8 +268,8 @@
 	time_t t = time(NULL);
 
 	printf(wiki_header, ctime(&t), flashrom_version);
-#if CONFIG_INTERNAL == 1
 	print_supported_chips_wiki(2);
+#if CONFIG_INTERNAL == 1
 	print_supported_chipsets_wiki(3);
 	print_supported_boards_wiki();
 #endif
diff --git a/processor_enable.c b/processor_enable.c
index 74caedc..b14cd33 100644
--- a/processor_enable.c
+++ b/processor_enable.c
@@ -53,22 +53,22 @@
 		if (fgets(line, sizeof(line), cpuinfo) == NULL)
 			break;
 		ptr = line;
-		while (*ptr && isspace(*ptr))
+		while (*ptr && isspace((unsigned char)*ptr))
 			ptr++;
 		/* "cpu" part appears only with some Linux versions.  */
 		if (strncmp(ptr, "cpu", sizeof("cpu") - 1) == 0)
 			ptr += sizeof("cpu") - 1;
-		while (*ptr && isspace(*ptr))
+		while (*ptr && isspace((unsigned char)*ptr))
 			ptr++;
 		if (strncmp(ptr, "model", sizeof("model") - 1) != 0)
 			continue;
 		ptr += sizeof("model") - 1;
-		while (*ptr && isspace(*ptr))
+		while (*ptr && isspace((unsigned char)*ptr))
 			ptr++;
 		if (*ptr != ':')
 			continue;
 		ptr++;
-		while (*ptr && isspace(*ptr))
+		while (*ptr && isspace((unsigned char)*ptr))
 			ptr++;
 		fclose(cpuinfo);
 		return (strncmp(ptr, "ICT Loongson-2 V0.3",
diff --git a/serial.c b/serial.c
index 053b09a..a04a138 100644
--- a/serial.c
+++ b/serial.c
@@ -106,8 +106,9 @@
 #ifdef _WIN32
 	HANDLE fd;
 	char *dev2 = dev;
-	if ((strlen(dev) > 3) && (tolower(dev[0]) == 'c')
-	    && (tolower(dev[1]) == 'o') && (tolower(dev[2]) == 'm')) {
+	if ((strlen(dev) > 3) && (tolower((unsigned char)dev[0]) == 'c') &&
+	    (tolower((unsigned char)dev[1]) == 'o') &&
+	    (tolower((unsigned char)dev[2]) == 'm')) {
 		dev2 = malloc(strlen(dev) + 5);
 		strcpy(dev2, "\\\\.\\");
 		strcpy(dev2 + 4, dev);