* Implement new mechanism to export U-Boot's functions to standalone
  applications: instead of using (PPC-specific) system calls we now
  use a jump table; please see doc/README.standalone for details

* Patch by Dave Westwood, 24 Jul 2003:
  added support for Unity OS (a proprietary OS)
diff --git a/include/_exports.h b/include/_exports.h
new file mode 100644
index 0000000..a4e1561
--- /dev/null
+++ b/include/_exports.h
@@ -0,0 +1,12 @@
+EXPORT_FUNC(get_version)
+EXPORT_FUNC(getc)
+EXPORT_FUNC(tstc)
+EXPORT_FUNC(putc)
+EXPORT_FUNC(puts)
+EXPORT_FUNC(printf)
+EXPORT_FUNC(install_hdlr)
+EXPORT_FUNC(free_hdlr)
+EXPORT_FUNC(malloc)
+EXPORT_FUNC(free)
+EXPORT_FUNC(udelay)
+EXPORT_FUNC(get_timer)
diff --git a/include/asm-arm/global_data.h b/include/asm-arm/global_data.h
index c804768..b5878ca 100644
--- a/include/asm-arm/global_data.h
+++ b/include/asm-arm/global_data.h
@@ -51,6 +51,7 @@
 	unsigned long	ram_size;	/* RAM size */
 	unsigned long	reset_status;	/* reset status register at boot */
 #endif
+	void		**jt;		/* jump table */
 } gd_t;
 
 /*
@@ -59,6 +60,6 @@
 #define	GD_FLG_RELOC	0x00001		/* Code was relocated to RAM		*/
 #define	GD_FLG_DEVINIT	0x00002		/* Devices have been initialized	*/
 
-#define DECLARE_GLOBAL_DATA_PTR     register gd_t *gd asm ("r8")
+#define DECLARE_GLOBAL_DATA_PTR     register volatile gd_t *gd asm ("r8")
 
 #endif /* __ASM_GBL_DATA_H */
diff --git a/include/asm-i386/global_data.h b/include/asm-i386/global_data.h
index 324b435..4ffbc07 100644
--- a/include/asm-i386/global_data.h
+++ b/include/asm-i386/global_data.h
@@ -45,6 +45,7 @@
 	unsigned long	bus_clk;
 	unsigned long	ram_size;	/* RAM size */
 	unsigned long	reset_status;	/* reset status register at boot */
+	void		**jt;		/* jump table */
 } gd_t;
 
 /*
diff --git a/include/asm-mips/global_data.h b/include/asm-mips/global_data.h
index 72d0cb0..3ecf555 100644
--- a/include/asm-mips/global_data.h
+++ b/include/asm-mips/global_data.h
@@ -45,6 +45,7 @@
 	unsigned long	reloc_off;	/* Relocation Offset */
 	unsigned long	env_addr;	/* Address  of Environment struct */
 	unsigned long	env_valid;	/* Checksum of Environment valid? */
+	void		**jt;		/* jump table */
 } gd_t;
 
 /*
@@ -53,6 +54,6 @@
 #define	GD_FLG_RELOC	0x00001		/* Code was relocated to RAM     */
 #define	GD_FLG_DEVINIT	0x00002		/* Devices have been initialized */
 
-#define DECLARE_GLOBAL_DATA_PTR     register gd_t *gd asm ("k0")
+#define DECLARE_GLOBAL_DATA_PTR     register volatile gd_t *gd asm ("k0")
 
 #endif /* __ASM_GBL_DATA_H */
diff --git a/include/asm-ppc/global_data.h b/include/asm-ppc/global_data.h
index 4253020..8ebaa17 100644
--- a/include/asm-ppc/global_data.h
+++ b/include/asm-ppc/global_data.h
@@ -88,6 +88,7 @@
 #ifdef CONFIG_LWMON
 	unsigned long kbd_status;
 #endif
+	void		**jt;		/* jump table */
 } gd_t;
 
 /*
@@ -97,7 +98,7 @@
 #define	GD_FLG_DEVINIT	0x00002		/* Devices have been initialized	*/
 
 #if 1
-#define DECLARE_GLOBAL_DATA_PTR     register gd_t *gd asm ("r29")
+#define DECLARE_GLOBAL_DATA_PTR     register volatile gd_t *gd asm ("r29")
 #else /* We could use plain global data, but the resulting code is bigger */
 #define XTRN_DECLARE_GLOBAL_DATA_PTR	extern
 #define DECLARE_GLOBAL_DATA_PTR     XTRN_DECLARE_GLOBAL_DATA_PTR \
diff --git a/include/bmp_layout.h b/include/bmp_layout.h
index 9d90e7f..d823de9 100644
--- a/include/bmp_layout.h
+++ b/include/bmp_layout.h
@@ -28,50 +28,50 @@
 #define _BMP_H_
 
 typedef struct bmp_color_table_entry {
-  __u8 blue;
-  __u8 green;
-  __u8 red;
-  __u8 reserved;
-} __attribute__((packed)) bmp_color_table_entry_t;
+	__u8	blue;
+	__u8	green;
+	__u8	red;
+	__u8	reserved;
+} __attribute__ ((packed)) bmp_color_table_entry_t;
 
 /* When accessing these fields, remember that they are stored in little
    endian format, so use linux macros, e.g. le32_to_cpu(width)          */
 
-typedef	struct bmp_header {
-  /* Header */
-  char signature[2];
-  __u32 file_size;
-  __u32 reserved;
-  __u32 data_offset;
-  /* InfoHeader */
-  __u32 size;
-  __u32 width;
-  __u32 height;
-  __u16 planes;
-  __u16 bit_count;
-  __u32 compression;
-  __u32 image_size;
-  __u32 x_pixels_per_m;
-  __u32 y_pixels_per_m;
-  __u32 colors_used;
-  __u32 colors_important;
-  /* ColorTable */
+typedef struct bmp_header {
+	/* Header */
+	char signature[2];
+	__u32	file_size;
+	__u32	reserved;
+	__u32	data_offset;
+	/* InfoHeader */
+	__u32	size;
+	__u32	width;
+	__u32	height;
+	__u16	planes;
+	__u16	bit_count;
+	__u32	compression;
+	__u32	image_size;
+	__u32	x_pixels_per_m;
+	__u32	y_pixels_per_m;
+	__u32	colors_used;
+	__u32	colors_important;
+	/* ColorTable */
 
-}  __attribute__((packed)) bmp_header_t;
+} __attribute__ ((packed)) bmp_header_t;
 
 typedef struct bmp_image {
-  bmp_header_t header;
-  /* We use a zero sized array just as a placeholder for variable
-     sized array */
-  bmp_color_table_entry_t color_table[0];
+	bmp_header_t header;
+	/* We use a zero sized array just as a placeholder for variable
+	   sized array */
+	bmp_color_table_entry_t color_table[0];
 } bmp_image_t;
 
 /* Data in the bmp_image is aligned to this length */
-#define BMP_DATA_ALIGN 4
+#define BMP_DATA_ALIGN	4
 
 /* Constants for the compression field */
-#define BMP_BI_RGB  0
-#define BMP_BI_RLE8 1
-#define BMP_BI_RLE4 2
+#define BMP_BI_RGB	0
+#define BMP_BI_RLE8	1
+#define BMP_BI_RLE4	2
 
-#endif /* _BMP_H_ */
+#endif							/* _BMP_H_ */
diff --git a/include/cmd_confdefs.h b/include/cmd_confdefs.h
index 577826c..8b8b0f5 100644
--- a/include/cmd_confdefs.h
+++ b/include/cmd_confdefs.h
@@ -84,6 +84,7 @@
 #define CFG_CMD_PING	0x0004000000000000U	/* ping support			*/
 #define CFG_CMD_MMC	0x0008000000000000U	/* MMC support			*/
 #define CFG_CMD_FAT	0x0010000000000000U	/* FAT support			*/
+#define CFG_CMD_IMLS	0x0020000000000000U	/* List all found images        */
 
 #define CFG_CMD_ALL	0xFFFFFFFFFFFFFFFFU	/* ALL commands			*/
 
diff --git a/include/common.h b/include/common.h
index 03db8d7..5158f97 100644
--- a/include/common.h
+++ b/include/common.h
@@ -207,6 +207,9 @@
 int	misc_init_f   (void);
 int	misc_init_r   (void);
 
+/* common/exports.c */
+void	jumptable_init(void);
+
 /* $(BOARD)/$(BOARD).c */
 void	reset_phy     (void);
 void    fdc_hw_init   (void);
@@ -436,8 +439,6 @@
 ulong crc32_no_comp (ulong, const unsigned char *, uint);
 
 /* common/console.c */
-extern void **syscall_tbl;
-
 int	console_init_f(void);	/* Before relocation; uses the serial  stuff	*/
 int	console_init_r(void);	/* After  relocation; uses the console stuff	*/
 int	console_assign (int file, char *devname);	/* Assign the console	*/
diff --git a/include/configs/MIP405.h b/include/configs/MIP405.h
index 8d79307..49b830b 100644
--- a/include/configs/MIP405.h
+++ b/include/configs/MIP405.h
@@ -67,6 +67,7 @@
 			CFG_CMD_DATE	| \
 			CFG_CMD_ELF	| \
 			CFG_CMD_MII	| \
+			CFG_CMD_PING	| \
 			CFG_CMD_SAVES	| \
 			CFG_CMD_BSP	)
 
diff --git a/include/configs/PIP405.h b/include/configs/PIP405.h
index 60e5a9a..d9f8be8 100644
--- a/include/configs/PIP405.h
+++ b/include/configs/PIP405.h
@@ -61,6 +61,7 @@
 			CFG_CMD_MII	| \
 			CFG_CMD_SDRAM	| \
 			CFG_CMD_DOC	| \
+			CFG_CMD_PING	| \
 			CFG_CMD_SAVES   | \
 			CFG_CMD_BSP	)
 /* this must be included AFTER the definition of CONFIG_COMMANDS  (if any) */
diff --git a/include/configs/PN62.h b/include/configs/PN62.h
index 6c37208..c58e990 100644
--- a/include/configs/PN62.h
+++ b/include/configs/PN62.h
@@ -42,10 +42,11 @@
 #define CONFIG_CONS_INDEX	1
 
 
-#define REMOVE_COMMANDS         ( CFG_CMD_AUTOSCRIPT | \
- 				  CFG_CMD_LOADS | \
- 				  CFG_CMD_ENV | \
- 				  CFG_CMD_FLASH )
+#define REMOVE_COMMANDS         ( CFG_CMD_AUTOSCRIPT	| \
+ 				  CFG_CMD_LOADS		| \
+ 				  CFG_CMD_ENV		| \
+ 				  CFG_CMD_FLASH		| \
+				  CFG_CMD_IMLS		)
 
 #define CONFIG_COMMANDS		( (CONFIG_CMD_DFL & ~REMOVE_COMMANDS) |\
 				  CFG_CMD_PCI |\
diff --git a/include/configs/TQM823L.h b/include/configs/TQM823L.h
index c7a63e9..be6e2f9 100644
--- a/include/configs/TQM823L.h
+++ b/include/configs/TQM823L.h
@@ -37,7 +37,7 @@
 #define CONFIG_TQM823L		1	/* ...on a TQM8xxL module	*/
 
 #ifdef	CONFIG_LCD			/* with LCD controller ?	*/
-/* #define CONFIG_NEC_NL6648BC20 1 / * use NEC NL6648BC20 display	*/
+#define	CONFIG_SPLASH_SCREEN		/* ... with splashscreen support*/
 #endif
 
 #define	CONFIG_8xx_CONS_SMC1	1	/* Console is on SMC1		*/
@@ -97,11 +97,20 @@
 
 #define	CONFIG_RTC_MPC8xx		/* use internal RTC of MPC8xx	*/
 
-#define CONFIG_COMMANDS	      ( CONFIG_CMD_DFL	| \
+#ifdef	CONFIG_SPLASH_SCREEN
+# define CONFIG_COMMANDS      ( CONFIG_CMD_DFL	| \
 				CFG_CMD_ASKENV	| \
+				CFG_CMD_BMP	| \
+				CFG_CMD_DATE	| \
 				CFG_CMD_DHCP	| \
-				CFG_CMD_IDE	| \
-				CFG_CMD_DATE	)
+				CFG_CMD_IDE	)
+#else
+# define CONFIG_COMMANDS      ( CONFIG_CMD_DFL	| \
+				CFG_CMD_ASKENV	| \
+				CFG_CMD_DATE	| \
+				CFG_CMD_DHCP	| \
+				CFG_CMD_IDE	)
+#endif
 
 /* this must be included AFTER the definition of CONFIG_COMMANDS (if any) */
 #include <cmd_confdefs.h>
diff --git a/include/configs/TQM8260.h b/include/configs/TQM8260.h
index de82e3e..a84f0dd 100644
--- a/include/configs/TQM8260.h
+++ b/include/configs/TQM8260.h
@@ -30,10 +30,13 @@
 
 /*
  * Imported from global configuration:
- *	CONFIG_L2_CACHE
+ *	CONFIG_MPC8255
+ *	CONFIG_MPC8265
+ *	CONFIG_200MHz
  *	CONFIG_266MHz
  *	CONFIG_300MHz
- *	CONFIG_MPC8255
+ *	CONFIG_L2_CACHE
+ *	CONFIG_BUSMODE_60x
  */
 
 /*
@@ -49,18 +52,6 @@
 #define CONFIG_TQM8260		200	/* ...on a TQM8260 module Rev.200	*/
 #endif
 
-/* Define 60x busmode only if your TQM8260 has L2 cache! */
-#ifdef CONFIG_L2_CACHE
-#  define CONFIG_BUSMODE_60x	1	/* bus mode: 60x			*/
-#else
-#  undef  CONFIG_BUSMODE_60x		/* bus mode: 8260			*/
-#endif
-
-/* The board with 300MHz CPU doesn't have L2 cache, but works in 60x bus mode */
-#ifdef CONFIG_300MHz
-#  define CONFIG_BUSMODE_60x
-#endif
-
 #define CONFIG_82xx_CONS_SMC1	1	/* console on SMC1			*/
 
 #define CONFIG_BOOTDELAY	5	/* autoboot after 5 seconds	*/
@@ -203,9 +194,9 @@
 
 
 /* system clock rate (CLKIN) - equal to the 60x and local bus speed */
-#ifdef CONFIG_MPC8255
+#if defined(CONFIG_MPC8255) || defined(CONFIG_MPC8265)
 #  define CONFIG_8260_CLKIN	66666666	/* in Hz */
-#else	/* !CONFIG_MPC8255 */
+#else	/* !CONFIG_MPC8255 && !CONFIG_MPC8265 */
 # ifndef CONFIG_300MHz
 #  define CONFIG_8260_CLKIN	66666666	/* in Hz */
 # else
@@ -317,9 +308,9 @@
  */
 #define	__HRCW__ALL__		(HRCW_CIP | HRCW_ISB111 | HRCW_BMS)
 
-#ifdef	CONFIG_MPC8255
+#if defined(CONFIG_MPC8255) || defined(CONFIG_MPC8265)
 #  define CFG_HRCW_MASTER	(__HRCW__ALL__ | HRCW_MODCK_H0111)
-#else	/* ! MPC8255 */
+#else	/* ! MPC8255 && !MPC8265 */
 # if defined(CONFIG_266MHz)
 #  define CFG_HRCW_MASTER	(__HRCW__ALL__ | HRCW_MODCK_H0111)
 # elif defined(CONFIG_300MHz)
diff --git a/include/exports.h b/include/exports.h
new file mode 100644
index 0000000..b45a466
--- /dev/null
+++ b/include/exports.h
@@ -0,0 +1,36 @@
+#ifndef __MON_SYS_CALL_H__
+#define __MON_SYS_CALL_H__
+
+#ifndef __ASSEMBLY__
+
+#include <common.h>
+
+/* These are declarations of exported functions available in C code */
+unsigned long get_version(void);
+int  getc(void);
+int  tstc(void);
+void putc(const char);
+void puts(const char*);
+void printf(const char* fmt, ...);
+void install_hdlr(int, interrupt_handler_t*, void*);
+void free_hdlr(int);
+void *malloc(size_t);
+void free(void*);
+void udelay(unsigned long);
+unsigned long get_timer(unsigned long);
+
+void app_startup(char **);
+
+#endif    /* ifndef __ASSEMBLY__ */
+
+enum {
+#define EXPORT_FUNC(x) XF_ ## x ,
+#include <_exports.h>
+#undef EXPORT_FUNC
+
+	XF_MAX
+};
+
+#define XF_VERSION	1
+
+#endif
diff --git a/include/image.h b/include/image.h
index 155617e..b93d104 100644
--- a/include/image.h
+++ b/include/image.h
@@ -47,6 +47,7 @@
 #define IH_OS_U_BOOT		17	/* Firmware	*/
 #define IH_OS_RTEMS		18	/* RTEMS	*/
 #define IH_OS_ARTOS		19	/* ARTOS	*/
+#define IH_OS_UNITY		20	/* Unity OS	*/
 
 /*
  * CPU Architecture Codes (supported by Linux)
@@ -101,7 +102,7 @@
  * "Script files" are command sequences that will be executed by
  *	U-Boot's command interpreter; this feature is especially
  *	useful when you configure U-Boot to use a real shell (hush)
- *	as command interpreter.
+ *	as command interpreter (=> Shell Scripts).
  */
 
 #define IH_TYPE_INVALID		0	/* Invalid Image		*/
diff --git a/include/post.h b/include/post.h
index 0f63668..130e715 100644
--- a/include/post.h
+++ b/include/post.h
@@ -34,6 +34,8 @@
 #define POST_SLOWTEST		0x04	/* test is slow, enabled by key press */
 #define POST_POWERTEST		0x08	/* test runs after watchdog reset */
 
+#define POST_COLDBOOT		0x80	/* first boot after power-on */
+
 #define POST_ROM		0x0100	/* test runs in ROM */
 #define POST_RAM		0x0200	/* test runs in RAM */
 #define POST_MANUAL		0x0400	/* test runs on diag command */
@@ -71,7 +73,7 @@
 
 extern struct post_test post_list[];
 extern unsigned int post_list_size;
-extern int post_hotkeys_pressed(gd_t *);
+extern int post_hotkeys_pressed(void);
 
 #endif /* __ASSEMBLY__ */
 
diff --git a/include/syscall.h b/include/syscall.h
deleted file mode 100644
index 9b9be0d..0000000
--- a/include/syscall.h
+++ /dev/null
@@ -1,42 +0,0 @@
-#ifndef __MON_SYS_CALL_H__
-#define __MON_SYS_CALL_H__
-
-#ifndef __ASSEMBLY__
-
-#include <common.h>
-
-/* These are declarations of system calls available in C code */
-int  mon_getc(void);
-int  mon_tstc(void);
-void mon_putc(const char);
-void mon_puts(const char*);
-void mon_printf(const char* fmt, ...);
-void mon_install_hdlr(int, interrupt_handler_t*, void*);
-void mon_free_hdlr(int);
-void *mon_malloc(size_t);
-void mon_free(void*);
-void mon_udelay(unsigned long);
-unsigned long mon_get_timer(unsigned long);
-
-#endif    /* ifndef __ASSEMBLY__ */
-
-#define NR_SYSCALLS            11        /* number of syscalls */
-
-
-/*
- * Make sure these functions are in the same order as they
- * appear in the "examples/syscall.S" file !!!
- */
-#define SYSCALL_GETC           0
-#define SYSCALL_TSTC           1
-#define SYSCALL_PUTC           2
-#define SYSCALL_PUTS           3
-#define SYSCALL_PRINTF         4
-#define SYSCALL_INSTALL_HDLR   5
-#define SYSCALL_FREE_HDLR      6
-#define SYSCALL_MALLOC         7
-#define SYSCALL_FREE           8
-#define SYSCALL_UDELAY         9
-#define SYSCALL_GET_TIMER     10
-
-#endif