diff options
author | Carl-Daniel Hailfinger <c-d.hailfinger.devel.2006@gmx.net> | 2013-07-13 23:21:05 +0000 |
---|---|---|
committer | Stefan Tauner <stefan.tauner@alumni.tuwien.ac.at> | 2013-07-13 23:21:05 +0000 |
commit | ae356998b5315c82b2ac23ffb9ce3cd73cc8deda (patch) | |
tree | 5c905e082327d5714b6a09d30ae38e210d610ca9 | |
parent | 2ce27a97c246c58625afb5e15db314311e9d2a49 (diff) | |
download | flashrom-ae356998b5315c82b2ac23ffb9ce3cd73cc8deda.zip flashrom-ae356998b5315c82b2ac23ffb9ce3cd73cc8deda.tar.gz |
Various cross-platform fixes
Improve compilation with libpayload (compiling flashrom.c and
linking is still broken):
- disable Ponyprog (which enforced serial.c compilation)
- make errno available where it is needed
Fix internal.c for non-x86 and enable cb parsing on ARM.
Fix mingw builds by using its __USE_MINGW_ANSI_STDIO macro
and gnu_printf definition for printf format style checking.
See http://sourceforge.net/apps/trac/mingw-w64/wiki/gnu%20printf
This requires inclusion of stdio.h in flash.h.
Fix order of libraries in the Makefile:
FEATURE_LIBS needs to come *after* PCILIBS in case ZLIB is needed by it.
Corresponding to flashrom svn r1697.
Signed-off-by: Carl-Daniel Hailfinger <c-d.hailfinger.devel.2006@gmx.net>
Signed-off-by: Stefan Tauner <stefan.tauner@alumni.tuwien.ac.at>
Acked-by: Carl-Daniel Hailfinger <c-d.hailfinger.devel.2006@gmx.net>
-rw-r--r-- | Makefile | 11 | ||||
-rw-r--r-- | flash.h | 8 | ||||
-rw-r--r-- | flashrom.c | 2 | ||||
-rw-r--r-- | hwaccess.c | 5 | ||||
-rw-r--r-- | internal.c | 6 | ||||
-rw-r--r-- | physmap.c | 22 |
6 files changed, 36 insertions, 18 deletions
@@ -140,6 +140,9 @@ ifeq ($(TARGET_OS), MinGW) EXEC_SUFFIX := .exe # MinGW doesn't have the ffs() function, but we can use gcc's __builtin_ffs(). FLASHROM_CFLAGS += -Dffs=__builtin_ffs +# Some functions provided by Microsoft do not work as described in C99 specifications. This macro fixes that +# for MinGW. See http://sourceforge.net/apps/trac/mingw-w64/wiki/printf%20and%20scanf%20family */ +FLASHROM_CFLAGS += -D__USE_MINGW_ANSI_STDIO=1 # libusb-win32/libftdi stuff is usually installed in /usr/local. CPPFLAGS += -I/usr/local/include LDFLAGS += -L/usr/local/lib @@ -218,6 +221,7 @@ UNSUPPORTED_FEATURES += CONFIG_DUMMY=yes else override CONFIG_DUMMY = no endif +# Bus Pirate, Serprog and PonyProg are not supported with libpayload (missing serial support). ifeq ($(CONFIG_BUSPIRATE_SPI), yes) UNSUPPORTED_FEATURES += CONFIG_BUSPIRATE_SPI=yes else @@ -228,6 +232,11 @@ UNSUPPORTED_FEATURES += CONFIG_SERPROG=yes else override CONFIG_SERPROG = no endif +ifeq ($(CONFIG_PONY_SPI), yes) +UNSUPPORTED_FEATURES += CONFIG_PONY_SPI=yes +else +override CONFIG_PONY_SPI = no +endif # Dediprog and FT2232 are not supported with libpayload (missing libusb support) ifeq ($(CONFIG_DEDIPROG), yes) UNSUPPORTED_FEATURES += CONFIG_DEDIPROG=yes @@ -632,7 +641,7 @@ ifeq ($(ARCH), x86) endif $(PROGRAM)$(EXEC_SUFFIX): $(OBJS) - $(CC) $(LDFLAGS) -o $(PROGRAM)$(EXEC_SUFFIX) $(OBJS) $(FEATURE_LIBS) $(LIBS) $(PCILIBS) $(USBLIBS) + $(CC) $(LDFLAGS) -o $(PROGRAM)$(EXEC_SUFFIX) $(OBJS) $(LIBS) $(PCILIBS) $(FEATURE_LIBS) $(USBLIBS) libflashrom.a: $(LIBFLASHROM_OBJS) $(AR) rcs $@ $^ @@ -25,6 +25,7 @@ #define __FLASH_H__ 1 #include <inttypes.h> +#include <stdio.h> #include <stdint.h> #include <stddef.h> #include <stdbool.h> @@ -286,7 +287,12 @@ enum msglevel { MSG_SPEW = 5, }; /* Let gcc and clang check for correct printf-style format strings. */ -int print(enum msglevel level, const char *fmt, ...) __attribute__((format(printf, 2, 3))); +int print(enum msglevel level, const char *fmt, ...) +#ifdef __MINGW32__ +__attribute__((format(gnu_printf, 2, 3))); +#else +__attribute__((format(printf, 2, 3))); +#endif #define msg_gerr(...) print(MSG_ERROR, __VA_ARGS__) /* general errors */ #define msg_perr(...) print(MSG_ERROR, __VA_ARGS__) /* programmer errors */ #define msg_cerr(...) print(MSG_ERROR, __VA_ARGS__) /* chip errors */ @@ -1168,7 +1168,7 @@ int read_buf_from_file(unsigned char *buf, unsigned long size, return 1; } if (image_stat.st_size != size) { - msg_gerr("Error: Image size (%jd B) doesn't match the flash chip's size (%ld B)!\n", + msg_gerr("Error: Image size (%jd B) doesn't match the flash chip's size (%lu B)!\n", (intmax_t)image_stat.st_size, size); fclose(image); return 1; @@ -35,14 +35,13 @@ #include <stdint.h> #include <string.h> #include <stdlib.h> +#include <errno.h> #include <sys/types.h> #if !defined (__DJGPP__) && !defined(__LIBPAYLOAD__) +/* No file access needed/possible to get hardware access permissions. */ #include <unistd.h> #include <fcntl.h> #endif -#if !defined (__DJGPP__) -#include <errno.h> -#endif #include "flash.h" #include "hwaccess.h" @@ -172,8 +172,10 @@ int internal_init(void) int not_a_laptop = 0; const char *board_vendor = NULL; const char *board_model = NULL; +#if defined (__i386__) || defined (__x86_64__) || defined (__arm__) const char *cb_vendor = NULL; const char *cb_model = NULL; +#endif char *arg; arg = extract_programmer_param("boardenable"); @@ -254,7 +256,7 @@ int internal_init(void) return 1; } -#if defined(__i386__) || defined(__x86_64__) +#if defined(__i386__) || defined(__x86_64__) || defined (__arm__) if ((cb_parse_table(&cb_vendor, &cb_model) == 0) && (board_vendor != NULL) && (board_model != NULL)) { if (strcasecmp(board_vendor, cb_vendor) || strcasecmp(board_model, cb_model)) { msg_pwarn("Warning: The mainboard IDs set by -p internal:mainboard (%s:%s) do not\n" @@ -265,7 +267,9 @@ int internal_init(void) msg_pinfo("Continuing anyway.\n"); } } +#endif +#if defined(__i386__) || defined(__x86_64__) dmi_init(); /* In case Super I/O probing would cause pretty explosions. */ @@ -24,14 +24,14 @@ #include <stdio.h> #include <stdlib.h> #include <string.h> +#include <errno.h> #include "flash.h" #include "hwaccess.h" -/* Do we need any file access or ioctl for physmap or MSR? */ #if !defined(__DJGPP__) && !defined(__LIBPAYLOAD__) +/* No file access needed/possible to get mmap access permissions or access MSR. */ #include <sys/stat.h> #include <fcntl.h> -#include <errno.h> #endif #ifdef __DJGPP__ @@ -120,15 +120,6 @@ void *sys_physmap(unsigned long phys_addr, size_t len) void physunmap(void *virt_addr, size_t len) { } - -int setup_cpu_msr(int cpu) -{ - return 0; -} - -void cleanup_cpu_msr(void) -{ -} #elif defined(__MACH__) && defined(__APPLE__) #define MEM_DEV "DirectHW" @@ -569,6 +560,15 @@ int libpayload_wrmsr(int addr, msr_t msr) _wrmsr(addr, msr.lo | ((unsigned long long)msr.hi << 32)); return 0; } + +int setup_cpu_msr(int cpu) +{ + return 0; +} + +void cleanup_cpu_msr(void) +{ +} #else /* default MSR implementation */ msr_t rdmsr(int addr) |