]> git.kernelconcepts.de Git - karo-tx-uboot.git/commitdiff
* Implement new mechanism to export U-Boot's functions to standalone
authorwdenk <wdenk>
Thu, 24 Jul 2003 23:38:38 +0000 (23:38 +0000)
committerwdenk <wdenk>
Thu, 24 Jul 2003 23:38:38 +0000 (23:38 +0000)
  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)

72 files changed:
CHANGELOG
MAKEALL
Makefile
board/bmw/bmw.c
board/eltec/bab7xx/bab7xx.c
board/eltec/elppc/elppc.c
board/evb64260/evb64260.c
board/lwmon/lwmon.c
board/mpl/common/flash.c
board/mpl/common/memtst.c
board/mpl/common/pci_parts.h
board/mpl/mip405/mip405.c
board/pcippc2/pcippc2.c
common/Makefile
common/cmd_boot.c
common/cmd_bootm.c
common/cmd_load.c
common/cmd_log.c
common/cmd_mem.c
common/console.c
common/exports.c [new file with mode: 0644]
config.mk
cpu/74xx_7xx/start.S
cpu/i386/interrupts.c
cpu/mips/start.S
cpu/mpc5xx/start.S
cpu/mpc5xxx/start.S
cpu/mpc824x/drivers/i2c/i2c1.c
cpu/mpc824x/start.S
cpu/mpc8260/start.S
cpu/mpc8xx/lcd.c
cpu/mpc8xx/start.S
cpu/ppc4xx/start.S
doc/README.standalone [new file with mode: 0644]
examples/82559_eeprom.c
examples/Makefile
examples/eepro100_eeprom.c
examples/hello_world.c
examples/mem_to_mem_idma2intr.c
examples/mips.lds [new file with mode: 0644]
examples/sched.c
examples/stubs.c [new file with mode: 0644]
examples/syscall.S [deleted file]
examples/timer.c
include/_exports.h [new file with mode: 0644]
include/asm-arm/global_data.h
include/asm-i386/global_data.h
include/asm-mips/global_data.h
include/asm-ppc/global_data.h
include/bmp_layout.h
include/cmd_confdefs.h
include/common.h
include/configs/MIP405.h
include/configs/PIP405.h
include/configs/PN62.h
include/configs/TQM823L.h
include/configs/TQM8260.h
include/exports.h [new file with mode: 0644]
include/image.h
include/post.h
include/syscall.h [deleted file]
lib_arm/board.c
lib_i386/board.c
lib_mips/board.c
lib_ppc/board.c
post/post.c
tools/updater/Makefile
tools/updater/cmd_flash.c
tools/updater/flash.c
tools/updater/flash_hw.c
tools/updater/string.c
tools/updater/update.c

index 66621ba90b119fc1a12172837ff37b8f44ec03b0..53fb5bbbcf1b7885adfb63887898b7c17f1b0972 100644 (file)
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -2,6 +2,35 @@
 Changes for U-Boot 0.4.5:
 ======================================================================
 
+* 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)
+
+* Patch by Detlev Zundel, 23 Jul 2003:
+  add "imls" command to print flash table of contents
+
+* Fix cold boot detection for log buffer reset
+
+* Return error for invalid length specifiers with "cp.X" etc.
+
+* Fix startup problem on MIPS
+
+* Allow for CONFIG_SPLASH_SCREEN even when no explicit
+  bitmap support is configured
+
+* Patch by Bill Hargen, 18 Jul 2003:
+  - fix endinaness problem in cpu/mpc824x/drivers/i2c/i2c1.c
+
+* Patch by Denis Peter, 18 Jul 2003:
+  - fix memory configuration for MIP405T
+  - fix printout of baudrate for "loadb <loadaddr> <baudrate>"
+
+* Cleanup of TQM82xx configurations; use "official" board types
+  to make selection easier.
+
 * Patch by Martin Krause, 17 Jul 2003:
   add delay to get I2C working with "imm" command and s3c24x0_i2c.c
 
diff --git a/MAKEALL b/MAKEALL
index a630cd2670540cb977c1e87b4d4b6b01b17dbdbd..af5af6af902ff7ce7c4ac9ae8b5d0700e6392f14 100644 (file)
--- a/MAKEALL
+++ b/MAKEALL
@@ -80,7 +80,7 @@ LIST_8260="   \
        gw8260          hymod           IPHASE4539      MPC8260ADS      \
        MPC8266ADS      PM826           ppmc8260        RPXsuper        \
        rsdproto        sacsng          sbc8260         SCM             \
-       TQM8260                                                         \
+       TQM8260_AC      TQM8260_AD      TQM8260_AE                      \
 "
 
 #########################################################################
index e10e4185bcf424590714101d556ad85763f85877..f3751770aaf2a3e9779d7468cb28e3f6be82b8c9 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -662,32 +662,48 @@ sbc8260_config:   unconfig
 SCM_config:            unconfig
        @./mkconfig $(@:_config=) ppc mpc8260 SCM siemens
 
-TQM8255_config \
-TQM8260_config \
-TQM8260_L2_config      \
-TQM8255_266MHz_config  \
-TQM8260_266MHz_config  \
-TQM8260_L2_266MHz_config \
-TQM8255_300MHz_config  \
-TQM8260_300MHz_config: unconfig
-       @ >include/config.h
-       @if [ "$(findstring _L2_,$@)" ] ; then \
+TQM8255_AA_config \
+TQM8260_AA_config \
+TQM8260_AB_config \
+TQM8260_AC_config \
+TQM8260_AD_config \
+TQM8260_AE_config \
+TQM8260_AF_config \
+TQM8260_AG_config \
+TQM8260_AH_config \
+TQM8265_AA_config:  unconfig
+       @case "$@" in \
+       TQM8255_AA_config) CTYPE=MPC8255; CFREQ=300; CACHE=no;  BMODE=8260;;  \
+       TQM8260_AA_config) CTYPE=MPC8260; CFREQ=200; CACHE=no;  BMODE=8260;; \
+       TQM8260_AB_config) CTYPE=MPC8260; CFREQ=200; CACHE=yes; BMODE=60x;;  \
+       TQM8260_AC_config) CTYPE=MPC8260; CFREQ=200; CACHE=yes; BMODE=60x;;  \
+       TQM8260_AD_config) CTYPE=MPC8260; CFREQ=300; CACHE=no;  BMODE=60x;;  \
+       TQM8260_AE_config) CTYPE=MPC8260; CFREQ=266; CACHE=no;  BMODE=8260;; \
+       TQM8260_AF_config) CTYPE=MPC8260; CFREQ=300; CACHE=no;  BMODE=60x;;  \
+       TQM8260_AG_config) CTYPE=MPC8260; CFREQ=300; CACHE=no;  BMODE=8260;; \
+       TQM8260_AH_config) CTYPE=MPC8260; CFREQ=300; CACHE=yes; BMODE=60x;;  \
+       TQM8265_AA_config) CTYPE=MPC8265; CFREQ=300; CACHE=no;  BMODE=60x;;  \
+       esac; \
+       >include/config.h ; \
+       if [ "$${CTYPE}" != "MPC8260" ] ; then \
+               echo "#define CONFIG_$${CTYPE}" >>include/config.h ; \
+       fi; \
+       echo "#define CONFIG_$${CFREQ}MHz"      >>include/config.h ; \
+       echo "... with $${CFREQ}MHz system clock" ; \
+       if [ "$${CACHE}" == "yes" ] ; then \
                echo "#define CONFIG_L2_CACHE"  >>include/config.h ; \
-               echo "... with L2 Cache support (60x Bus Mode)" ; \
+               echo "... with L2 Cache support" ; \
        else \
                echo "#undef CONFIG_L2_CACHE"   >>include/config.h ; \
                echo "... without L2 Cache support" ; \
+       fi; \
+       if [ "$${BMODE}" == "60x" ] ; then \
+               echo "#define CONFIG_BUSMODE_60x" >>include/config.h ; \
+               echo "... with 60x Bus Mode" ; \
+       else \
+               echo "#undef CONFIG_BUSMODE_60x"  >>include/config.h ; \
+               echo "... without 60x Bus Mode" ; \
        fi
-       @[ -z "$(findstring _266MHz,$@)" ] || \
-               { echo "#define CONFIG_266MHz"  >>include/config.h ; \
-                 echo "... with 266MHz system clock" ; \
-               }
-       @[ -z "$(findstring _300MHz,$@)" ] || \
-               { echo "#define CONFIG_300MHz"  >>include/config.h ; \
-                 echo "... with 300MHz system clock" ; \
-               }
-       @[ -z "$(findstring TQM8255_,$@)" ] || \
-               { echo "#define CONFIG_MPC8255" >>include/config.h ; }
        @./mkconfig -a TQM8260 ppc mpc8260 tqm8260
 
 atc_config:    unconfig
index f2d33fc15360a59d00fcecb366ae5fd02e21bffc..485e050b19a65319a5b272326b32ff64193a4ec5 100644 (file)
@@ -27,7 +27,6 @@
 #include <command.h>
 #include <malloc.h>
 #include <devices.h>
-#include <syscall.h>
 #include <net.h>
 #include <version.h>
 #include <dtt.h>
index b74b055879d4e2fe64fe1f021a62e26ed4d32695..c75137ab3e4f3df0f170240306d0d6b29a1554a6 100644 (file)
@@ -173,7 +173,7 @@ void after_reloc (ulong dest_addr)
     /*
      * Jump to the main U-Boot board init code
      */
-    board_init_r(gd, dest_addr);
+    board_init_r((gd_t *)gd, dest_addr);
 }
 
 /* ------------------------------------------------------------------------- */
index 7b4d7d20090fc1859a64af445db1e85a72d2cc94..a9dbeb209599eb71978253afdb72e45ae5b1616a 100644 (file)
@@ -142,7 +142,7 @@ void after_reloc (ulong dest_addr)
        /*
         * Jump to the main U-Boot board init code
         */
-       board_init_r (gd, dest_addr);
+       board_init_r ((gd_t *)gd, dest_addr);
 }
 
 /* ------------------------------------------------------------------------- */
index fd09690b86ef1208c48a8f44569a6467f10a20ee..4f3032efec36a2d46a3f92f47418c229c9f06bd7 100644 (file)
@@ -329,7 +329,7 @@ after_reloc(ulong dest_addr)
        }
 
        /* now, jump to the main U-Boot board init code */
-       board_init_r (gd, dest_addr);
+       board_init_r ((gd_t *)gd, dest_addr);
 
        /* NOTREACHED */
 }
index 869cd5872351dcc6a802849c88a944d27e1e9079..0e6c3fc2ca599ae1e966428af85761d30a8c9ab0 100644 (file)
@@ -1077,7 +1077,7 @@ static int key_pressed(void)
  * Returns 1 if keys pressed to start the power-on long-running tests
  * Called from board_init_f().
  */
-int post_hotkeys_pressed(gd_t *gd)
+int post_hotkeys_pressed(void)
 {
        uchar kbd_data[KEYBD_DATALEN];
        uchar val;
index 28f6f0a22b08c7f5f4f73b5f9075fab6bf8f9cd8..4bdb8bdc65f53a0c054802d9ffed87dd3e3a1544 100644 (file)
@@ -105,6 +105,8 @@ unsigned long flash_init (void)
                        CFG_MONITOR_BASE+monitor_flash_len-1,
                        &flash_info[0]);
 #endif
+       /* protect reset vector */
+       flash_info[0].protect[flash_info[0].sector_count-1] = 1;
        size_b1 = 0 ;
        flash_info[0].size = size_b0;
 #if 0
index c994a8b05f4e48ebbdf67fc6f8160904c7f52e1d..2c77d375ea00a5a2d2420fa2af69ed788ec48c5b 100644 (file)
@@ -494,7 +494,7 @@ void mem_test_reloc(void)
 }
 
 
-int mem_test (unsigned long start, unsigned long ramsize, int quiet, int reloc)
+int mem_test (unsigned long start, unsigned long ramsize, int quiet)
 {
        unsigned long errors, stage;
        unsigned long startaddr, size, i;
index 82426f3d0337706b35b551703137b4aa7fc66387..e5627aa34eb6653463327bea145c6d393db8588e 100644 (file)
@@ -110,7 +110,7 @@ static struct pci_pip405_config_entry piix4_ide_cntrl_f1[] = {
 #if !defined(CONFIG_MIP405T)
        {PCI_CFG_PIIX4_IDETIM,  0x80008000,     4}, /* enable Both IDE channels */
 #else
-       {PCI_CFG_PIIX4_IDETIM,  0x80000000,     4}, /* enable IDE channel0      */
+       {PCI_CFG_PIIX4_IDETIM,  0x00008000,     4}, /* enable IDE channel0      */
 #endif
        { }                                         /* end of device table      */
 };
index 07922bc98970b626af0adf305dfbead5cb5fbe34..090041b403f18b6627f29e411864ad9cc7aeb267 100644 (file)
@@ -69,6 +69,7 @@
 #include <miiphy.h>
 #include "../common/common_util.h"
 #include <i2c.h>
+#include <rtc.h>
 extern block_dev_desc_t * scsi_get_dev(int dev);
 extern block_dev_desc_t * ide_get_dev(int dev);
 
@@ -110,14 +111,14 @@ typedef struct {
 } sdram_t;
 #if defined(CONFIG_MIP405T)
 const sdram_t sdram_table[] = {
-       { 0x01, /* MIP405T Rev A, 64MByte -1 Board */
+       { 0x0F, /* MIP405T Rev A, 64MByte -1 Board */
                3,      /* Case Latenty = 3 */
                3,      /* trp 20ns / 7.5 ns datain[27] */
                3,      /* trcd 20ns /7.5 ns (datain[29]) */
                6,      /* tras 44ns /7.5 ns  (datain[30]) */
                4,      /* tcpt 44 - 20ns = 24ns */
-               3,      /* Address Mode = 3 (13x9x4) */
-               4,      /* size value (64MByte) */
+               2,      /* Address Mode = 2 (12x9x4) */
+               3,      /* size value (32MByte) */
                0},     /* ECC disabled */
        { 0xff, /* terminator */
          0xff,
@@ -281,11 +282,6 @@ int init_sdram (void)
        if((bc & 0x80)==0x80)
                SDRAM_err ("U-Boot configured for a MIP405 not for a MIP405T!!!\n");
 #endif
-#if !defined(CONFIG_MIP405T)
-       /* since the ECC initialisation needs some time,
-        * we show that we're alive
-        */
-       serial_puts ("\nInitializing SDRAM, Please stand by");
        /* set-up the chipselect machine */
        mtdcr (ebccfga, pb0cr);         /* get cs0 config reg */
        tmp = mfdcr (ebccfgd);
@@ -311,7 +307,6 @@ int init_sdram (void)
        mtdcr (ebccfgd, UART1_AP);
        mtdcr (ebccfga, pb3cr);
        mtdcr (ebccfgd, UART1_CR);
-#endif
        bc = in8 (PLD_BOARD_CFG_REG);
 #ifdef SDRAM_DEBUG
        serial_puts ("\nstart SDRAM Setup\n");
@@ -333,6 +328,11 @@ int init_sdram (void)
        write_hex (i);
        serial_puts (" \n");
 #endif
+       /* since the ECC initialisation needs some time,
+        * we show that we're alive
+        */
+       if (sdram_table[i].ecc)
+               serial_puts ("\nInitializing SDRAM, Please stand by");
        cal_val = sdram_table[i].cal - 1;       /* Cas Latency */
        trp_clocks = sdram_table[i].trp;        /* 20ns / 7.5 ns datain[27] */
        trcd_clocks = sdram_table[i].trcd;      /* 20ns /7.5 ns (datain[29]) */
@@ -559,7 +559,7 @@ void get_pcbrev_var(unsigned char *pcbrev, unsigned char *var)
        unsigned char bc;
        bc = in8 (PLD_BOARD_CFG_REG);
        *pcbrev=(bc >> 4) & 0xf;
-       *var=bc & 0xf ;
+       *var=16-(bc & 0xf);
 #endif
 }
 
@@ -654,8 +654,6 @@ long int initdram (int board_type)
 
 /* ------------------------------------------------------------------------- */
 
-extern int mem_test (unsigned long start, unsigned long ramsize,
-                                        int quiet);
 
 static int test_dram (unsigned long ramsize)
 {
@@ -666,8 +664,15 @@ static int test_dram (unsigned long ramsize)
        return (1);
 }
 
+/* used to check if the time in RTC is valid */
+static unsigned long start;
+static struct rtc_time tm;
+
 int misc_init_r (void)
 {
+       /* check, if RTC is running */
+       rtc_get (&tm);
+       start=get_timer(0);
        /* if MIP405 has booted from PCI, reset CCR0[24] as described in errata PCI_18 */
        if (mfdcr(strap) & PSR_ROM_LOC)
               mtspr(ccr0, (mfspr(ccr0) & ~0x80));
@@ -688,9 +693,13 @@ void print_mip405_rev (void)
 }
 
 extern void mem_test_reloc(void);
+extern int mk_date (char *, struct rtc_time *);
 
 int last_stage_init (void)
 {
+       unsigned long stop;
+       struct rtc_time newtm;
+       unsigned char *s;
        mem_test_reloc();
        /* write correct LED configuration */
        if (miiphy_write (0x1, 0x14, 0x2402) != 0) {
@@ -704,6 +713,25 @@ int last_stage_init (void)
        print_mip405_rev ();
        show_stdio_dev ();
        check_env ();
+       /* check if RTC time is valid */
+       stop=get_timer(start);
+       while(stop<1200) {   /* we wait 1.2 sec to check if the RTC is running */
+               udelay(1000);
+               stop=get_timer(start);
+       }
+       rtc_get (&newtm);
+       if(tm.tm_sec==newtm.tm_sec) {
+               s=getenv("defaultdate");
+               if(!s)
+                       mk_date ("010112001970", &newtm);
+               else
+                       if(mk_date (s, &newtm)!=0) {
+                               printf("RTC: Bad date format in defaultdate\n");
+                               return 0;
+                       }
+               rtc_reset ();
+               rtc_set(&newtm);
+       }
        return 0;
 }
 
@@ -745,10 +773,10 @@ void print_mip405_info (void)
        printf ("SER1 uses handshakes %s\n",
                        (ext & 0x80) ? "DTR/DSR" : "RTS/CTS");
 #else
-       printf ("User Config Switch %d %d %d %d %d %d %d %d %d\n",
+       printf ("User Config Switch %d %d %d %d %d %d %d %d\n",
                        (ext) & 0x1, (ext >> 1) & 0x1, (ext >> 2) & 0x1,
                        (ext >> 3) & 0x1, (ext >> 4) & 0x1, (ext >> 5) & 0x1,
-                       (ext >> 6) & 0x1,(ext >> 7) & 0x1,(ext >> 8) & 0x1);
+                       (ext >> 6) & 0x1,(ext >> 7) & 0x1);
 #endif
        printf ("IDE Reset %s\n", (ext & 0x01) ? "asserted" : "not asserted");
        printf ("IRQs:\n");
index ce3ae4dd905162b2adaca3005441e4abfd6a8cc8..a0fe39a1e90165a93ab7bfdb34f2c2da3abb1d1d 100644 (file)
@@ -112,7 +112,7 @@ void after_reloc (ulong dest_addr)
 
        /* Jump to the main U-Boot board init code
         */
-       board_init_r (gd, dest_addr);
+       board_init_r ((gd_t *)gd, dest_addr);
 }
 
 int misc_init_r (void)
index 3aa9b65a9032b6afc3dab4b562626ba9deb0f4cf..d144bef1d40498a59621564ec9bd55f36a02d6a6 100644 (file)
@@ -42,7 +42,7 @@ COBJS = main.o altera.o bedbug.o \
          cmd_reginfo.o cmd_scsi.o cmd_spi.o cmd_usb.o cmd_vfd.o \
          command.o console.o devices.o dlmalloc.o docecc.o \
          environment.o env_common.o \
-         env_flash.o env_eeprom.o env_nvram.o env_nowhere.o \
+         env_flash.o env_eeprom.o env_nvram.o env_nowhere.o exports.o \
          flash.o fpga.o \
          hush.o kgdb.o lists.o miiphybb.o miiphyutil.o \
          s_record.o soft_i2c.o soft_spi.o spartan2.o \
index fe8025d3b46f83d6d9cf7740fb2f8187ad3173b2..b2f0331dc925c5ea72b935f0e7adde94983fb93b 100644 (file)
 #include <common.h>
 #include <command.h>
 #include <net.h>
-#include <syscall.h>
 
 
 /* -------------------------------------------------------------------- */
 
 int do_go (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
 {
+#if defined(CONFIG_I386)
+       DECLARE_GLOBAL_DATA_PTR;
+#endif
        ulong   addr, rc;
        int     rcode = 0;
 
@@ -50,6 +52,13 @@ int do_go (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
         * pass address parameter as argv[0] (aka command name),
         * and all remaining args
         */
+#if defined(CONFIG_I386)
+       /*
+        * x86 does not use a dedicated register to pass the pointer
+        * to the global_data
+        */
+       argv[0] = (char *)gd;
+#endif
        rc = ((ulong (*)(int, char *[]))addr) (--argc, &argv[1]);
        if (rc != 0) rcode = 1;
 
index d1d03e3194b4c0d1671b68fe644c74ac35d63243..13436594f6e80315e2e2a73ddf089a4dc13c85bd 100644 (file)
@@ -80,6 +80,13 @@ static void zfree(void *, void *, unsigned);
 #if (CONFIG_COMMANDS & CFG_CMD_IMI)
 static int image_info (unsigned long addr);
 #endif
+
+#if (CONFIG_COMMANDS & CFG_CMD_IMLS)
+#include <flash.h>
+extern flash_info_t flash_info[CFG_MAX_FLASH_BANKS]; /* info for FLASH chips */
+static int do_imls (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[]);
+#endif
+
 static void print_type (image_header_t *hdr);
 
 #ifdef __I386__
@@ -961,6 +968,56 @@ U_BOOT_CMD(
 
 #endif /* CFG_CMD_IMI */
 
+#if (CONFIG_COMMANDS & CFG_CMD_IMLS)
+/*-----------------------------------------------------------------------
+ * List all images found in flash.
+ */
+int do_imls (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
+{
+       flash_info_t *info;
+       int i, j;
+       image_header_t *hdr;
+       ulong checksum;
+
+       for (i=0, info=&flash_info[0]; i<CFG_MAX_FLASH_BANKS; ++i, ++info) {
+               if (info->flash_id == FLASH_UNKNOWN)
+                       goto next_bank;
+               for (j=0; j<CFG_MAX_FLASH_SECT; ++j) {
+
+                       if (!(hdr=(image_header_t *)info->start[j]) ||
+                           (ntohl(hdr->ih_magic) != IH_MAGIC))
+                               goto next_sector;
+
+                       /* Copy header so we can blank CRC field for re-calculation */
+                       memmove (&header, (char *)hdr, sizeof(image_header_t));
+
+                       checksum = ntohl(header.ih_hcrc);
+                       header.ih_hcrc = 0;
+
+                       if (crc32 (0, (char *)&header, sizeof(image_header_t))
+                           != checksum)
+                               goto next_sector;
+
+                       printf ("Image at %08lX:\n", (ulong)hdr);
+                       print_image_hdr( hdr );
+                       putc ('\n');
+               next_sector:
+               }
+       next_bank:
+       }
+
+       return (0);
+}
+
+U_BOOT_CMD(
+       imls,   1,              1,      do_imls,
+       "imls    - list all images found in flash\n",
+       "\n"
+       "    - Prints information about all images found at sector\n"
+       "      boundaries in flash.\n"
+);
+#endif /* CFG_CMD_IMLS */
+
 void
 print_image_hdr (image_header_t *hdr)
 {
index 0ea8c4b4e43bb3c2b570e2018b901a006566cc80..5622452ccbff395735f8bf9e1fb1204cdaa2e532 100644 (file)
@@ -28,7 +28,7 @@
 #include <command.h>
 #include <s_record.h>
 #include <net.h>
-#include <syscall.h>
+#include <exports.h>
 
 
 #if (CONFIG_COMMANDS & CFG_CMD_LOADS)
@@ -213,6 +213,7 @@ load_serial (ulong offset)
 static int
 read_record (char *buf, ulong len)
 {
+       DECLARE_GLOBAL_DATA_PTR;
        char *p;
        char c;
 
@@ -236,13 +237,11 @@ read_record (char *buf, ulong len)
                }
 
            /* Check for the console hangup (if any different from serial) */
-#ifdef CONFIG_PPC      /* we don't have syscall_tbl anywhere else */
-           if (syscall_tbl[SYSCALL_GETC] != serial_getc) {
+           if (gd->jt[XF_getc] != serial_getc) {
                if (ctrlc()) {
                    return (-1);
                }
            }
-#endif
        }
 
        /* line too long - truncate */
@@ -479,7 +478,7 @@ int do_load_serial_bin (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
        printf ("## Ready for binary (kermit) download "
                "to 0x%08lX at %d bps...\n",
                offset,
-               current_baudrate);
+               load_baudrate);
        addr = load_serial_bin (offset);
 
        if (addr == ~0) {
index 8780da5e2904248a23f637728611a244485b782a..57ef48461a537b12228ab830fe27db794d8c51c7 100644 (file)
@@ -86,8 +86,7 @@ void logbuff_init_ptrs (void)
        post_word = post_word_load();
 #ifdef CONFIG_POST
        /* The post routines have setup the word so we can simply test it */
-       if (((post_word & 0xffff) == POST_POWERON) ||
-           ((post_word & 0xffff) == POST_SLOWTEST)) {
+       if (post_word_load () & POST_COLDBOOT) {
                logged_chars = log_size = log_start = 0;
                *ext_tag = LOGBUFF_MAGIC;
        }
index 7e6c19eb8001dc1dfca9fdf64166d3d119cdd382..3e225988bba1e989d7a4060fb37b01474a336a88 100644 (file)
@@ -53,6 +53,8 @@ int cmd_get_data_size(char* arg, int default_size)
                        return 2;
                case 'l':
                        return 4;
+               default:
+                       return -1;
                }
        }
        return default_size;
@@ -86,9 +88,10 @@ static       ulong   base_address = 0;
 #define DISP_LINE_LEN  16
 int do_mem_md ( cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
 {
-       ulong   addr, size, length;
+       ulong   addr, length;
        ulong   i, nbytes, linebytes;
        u_char  *cp;
+       int     size;
        int rc = 0;
 
        /* We use the last specified parameters, unless new ones are
@@ -107,7 +110,8 @@ int do_mem_md ( cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
                /* New command specified.  Check for a size specification.
                 * Defaults to long if no or incorrect specification.
                 */
-               size = cmd_get_data_size(argv[0], 4);
+               if ((size = cmd_get_data_size(argv[0], 4)) < 0)
+                       return 1;
 
                /* Address is specified since argc > 1
                */
@@ -199,7 +203,8 @@ int do_mem_nm ( cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
 
 int do_mem_mw ( cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
 {
-       ulong   addr, size, writeval, count;
+       ulong   addr, writeval, count;
+       int     size;
 
        if ((argc < 3) || (argc > 4)) {
                printf ("Usage:\n%s\n", cmdtp->usage);
@@ -208,7 +213,8 @@ int do_mem_mw ( cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
 
        /* Check for size specification.
        */
-       size = cmd_get_data_size(argv[0], 4);
+       if ((size = cmd_get_data_size(argv[0], 4)) < 1)
+               return 1;
 
        /* Address is specified since argc > 1
        */
@@ -240,7 +246,8 @@ int do_mem_mw ( cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
 
 int do_mem_cmp (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
 {
-       ulong   size, addr1, addr2, count, ngood;
+       ulong   addr1, addr2, count, ngood;
+       int     size;
        int     rcode = 0;
 
        if (argc != 4) {
@@ -250,7 +257,8 @@ int do_mem_cmp (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
 
        /* Check for size specification.
        */
-       size = cmd_get_data_size(argv[0], 4);
+       if ((size = cmd_get_data_size(argv[0], 4)) < 0)
+               return 1;
 
        addr1 = simple_strtoul(argv[1], NULL, 16);
        addr1 += base_address;
@@ -316,7 +324,8 @@ int do_mem_cmp (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
 
 int do_mem_cp ( cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
 {
-       ulong   addr, size, dest, count;
+       ulong   addr, dest, count;
+       int     size;
 
        if (argc != 4) {
                printf ("Usage:\n%s\n", cmdtp->usage);
@@ -325,7 +334,8 @@ int do_mem_cp ( cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
 
        /* Check for size specification.
        */
-       size = cmd_get_data_size(argv[0], 4);
+       if ((size = cmd_get_data_size(argv[0], 4)) < 0)
+               return 1;
 
        addr = simple_strtoul(argv[1], NULL, 16);
        addr += base_address;
@@ -458,7 +468,8 @@ int do_mem_base (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
 
 int do_mem_loop (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
 {
-       ulong   addr, size, length, i, junk;
+       ulong   addr, length, i, junk;
+       int     size;
        volatile uint   *longp;
        volatile ushort *shortp;
        volatile u_char *cp;
@@ -471,7 +482,8 @@ int do_mem_loop (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
        /* Check for a size spefication.
         * Defaults to long if no or incorrect specification.
         */
-       size = cmd_get_data_size(argv[0], 4);
+       if ((size = cmd_get_data_size(argv[0], 4)) < 0)
+               return 1;
 
        /* Address is always specified.
        */
@@ -839,8 +851,8 @@ int do_mem_mtest (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
 static int
 mod_mem(cmd_tbl_t *cmdtp, int incrflag, int flag, int argc, char *argv[])
 {
-       ulong   addr, size, i;
-       int     nbytes;
+       ulong   addr, i;
+       int     nbytes, size;
        extern char console_buffer[];
 
        if (argc != 2) {
@@ -861,7 +873,8 @@ mod_mem(cmd_tbl_t *cmdtp, int incrflag, int flag, int argc, char *argv[])
                /* New command specified.  Check for a size specification.
                 * Defaults to long if no or incorrect specification.
                 */
-               size = cmd_get_data_size(argv[0], 4);
+               if ((size = cmd_get_data_size(argv[0], 4)) < 0)
+                       return 1;
 
                /* Address is specified since argc > 1
                */
index 8c94aa7656c2c099c0112182379a6bfbbe4d6276..148c59981d36bd572e1b72b0fdd680b6614dadc3 100644 (file)
@@ -25,9 +25,7 @@
 #include <stdarg.h>
 #include <malloc.h>
 #include <console.h>
-#include <syscall.h>
-
-void **syscall_tbl;
+#include <exports.h>
 
 #ifdef CONFIG_AMIGAONEG3SE
 int console_changed = 0;
@@ -52,6 +50,7 @@ int overwrite_console (void)
 
 static int console_setfile (int file, device_t * dev)
 {
+       DECLARE_GLOBAL_DATA_PTR;
        int error = 0;
 
        if (dev == NULL)
@@ -78,13 +77,13 @@ static int console_setfile (int file, device_t * dev)
                 */
                switch (file) {
                case stdin:
-                       syscall_tbl[SYSCALL_GETC] = dev->getc;
-                       syscall_tbl[SYSCALL_TSTC] = dev->tstc;
+                       gd->jt[XF_getc] = dev->getc;
+                       gd->jt[XF_tstc] = dev->tstc;
                        break;
                case stdout:
-                       syscall_tbl[SYSCALL_PUTC] = dev->putc;
-                       syscall_tbl[SYSCALL_PUTS] = dev->puts;
-                       syscall_tbl[SYSCALL_PRINTF] = printf;
+                       gd->jt[XF_putc] = dev->putc;
+                       gd->jt[XF_puts] = dev->puts;
+                       gd->jt[XF_printf] = printf;
                        break;
                }
                break;
@@ -394,15 +393,16 @@ device_t *search_device (int flags, char *name)
 /* Called after the relocation - use desired console functions */
 int console_init_r (void)
 {
+       DECLARE_GLOBAL_DATA_PTR;
        char *stdinname, *stdoutname, *stderrname;
        device_t *inputdev = NULL, *outputdev = NULL, *errdev = NULL;
 
        /* set default handlers at first */
-       syscall_tbl[SYSCALL_GETC] = serial_getc;
-       syscall_tbl[SYSCALL_TSTC] = serial_tstc;
-       syscall_tbl[SYSCALL_PUTC] = serial_putc;
-       syscall_tbl[SYSCALL_PUTS] = serial_puts;
-       syscall_tbl[SYSCALL_PRINTF] = serial_printf;
+       gd->jt[XF_getc] = serial_getc;
+       gd->jt[XF_tstc] = serial_tstc;
+       gd->jt[XF_putc] = serial_putc;
+       gd->jt[XF_puts] = serial_puts;
+       gd->jt[XF_printf] = serial_printf;
 
        /* stdin stdout and stderr are in environment */
        /* scan for it */
diff --git a/common/exports.c b/common/exports.c
new file mode 100644 (file)
index 0000000..22002cc
--- /dev/null
@@ -0,0 +1,31 @@
+#include <common.h>
+#include <exports.h>
+
+static void dummy(void)
+{
+}
+
+unsigned long get_version(void)
+{
+       return XF_VERSION;
+}
+
+void jumptable_init (void)
+{
+       DECLARE_GLOBAL_DATA_PTR;
+       int i;
+
+       gd->jt = (void **) malloc (XF_MAX * sizeof (void *));
+       for (i = 0; i < XF_MAX; i++)
+               gd->jt[i] = (void *) dummy;
+
+       gd->jt[XF_get_version] = (void *) get_version;
+       gd->jt[XF_malloc] = (void *) malloc;
+       gd->jt[XF_free] = (void *) free;
+       gd->jt[XF_get_timer] = (void *)get_timer;
+       gd->jt[XF_udelay] = (void *)udelay;
+#if defined(CONFIG_I386) || defined(CONFIG_PPC)
+       gd->jt[XF_install_hdlr] = (void *) irq_install_handler;
+       gd->jt[XF_free_hdlr] = (void *) irq_free_handler;
+#endif
+}
index c8358cf7825b64a1c3a30793c7356da602ef1cd4..f73d6f4c90903fb3608701c56a1af345a3a579c9 100644 (file)
--- a/config.mk
+++ b/config.mk
@@ -112,8 +112,8 @@ gccincdir := $(shell $(CC) -print-file-name=include)
 CPPFLAGS := $(DBGFLAGS) $(OPTFLAGS) $(RELFLAGS)                \
        -D__KERNEL__ -DTEXT_BASE=$(TEXT_BASE)           \
        -I$(TOPDIR)/include                             \
-       -fno-builtin -nostdinc -isystem $(gccincdir)    \
-       -pipe $(PLATFORM_CPPFLAGS)
+       -fno-builtin -ffreestanding -nostdinc -isystem  \
+       $(gccincdir) -pipe $(PLATFORM_CPPFLAGS)
 
 ifdef BUILD_TAG
 CFLAGS := $(CPPFLAGS) -Wall -Wstrict-prototypes \
index 7d37c8e2a97d2a614d2fb57a2541a98a9470a295..7d7a493fea6a5427c39b6212bf8bf18f73d1d949 100644 (file)
@@ -159,75 +159,7 @@ ProgramCheck:
        STD_EXCEPTION(0x900, Decrementer, timer_interrupt)
        STD_EXCEPTION(0xa00, Trap_0a, UnknownException)
        STD_EXCEPTION(0xb00, Trap_0b, UnknownException)
-
-       . = 0xc00
-/*
- * r0 - SYSCALL number
- * r3-... arguments
- */
-SystemCall:
-       addis   r11,r0,0                /* get functions table addr */
-       ori     r11,r11,0               /* Note: this code is patched in trap_init */
-       addis   r12,r0,0                /* get number of functions */
-       ori     r12,r12,0
-
-       cmplw   0, r0, r12
-       bge     1f
-
-       rlwinm  r0,r0,2,0,31            /* fn_addr = fn_tbl[r0] */
-       add     r11,r11,r0
-       lwz     r11,0(r11)
-
-       li      r20,0xd00-4             /* Get stack pointer */
-       lwz     r12,0(r20)
-       subi    r12,r12,12              /* Adjust stack pointer */
-       li      r0,0xc00+_end_back-SystemCall
-       cmplw   0, r0, r12              /* Check stack overflow */
-       bgt     1f
-       stw     r12,0(r20)
-
-       mflr    r0
-       stw     r0,0(r12)
-       mfspr   r0,SRR0
-       stw     r0,4(r12)
-       mfspr   r0,SRR1
-       stw     r0,8(r12)
-
-       li      r12,0xc00+_back-SystemCall
-       mtlr    r12
-       mtspr   SRR0,r11
-
-1:     SYNC
-       rfi
-
-_back:
-
-       mfmsr   r11                     /* Disable interrupts */
-       li      r12,0
-       ori     r12,r12,MSR_EE
-       andc    r11,r11,r12
-       SYNC                            /* Some chip revs need this... */
-       mtmsr   r11
-       SYNC
-
-       li      r12,0xd00-4             /* restore regs */
-       lwz     r12,0(r12)
-
-       lwz     r11,0(r12)
-       mtlr    r11
-       lwz     r11,4(r12)
-       mtspr   SRR0,r11
-       lwz     r11,8(r12)
-       mtspr   SRR1,r11
-
-       addi    r12,r12,12              /* Adjust stack pointer */
-       li      r20,0xd00-4
-       stw     r12,0(r20)
-
-       SYNC
-       rfi
-_end_back:
-
+       STD_EXCEPTION(0xc00, SystemCall, UnknownException)
        STD_EXCEPTION(0xd00, SingleStep, UnknownException)
 
        STD_EXCEPTION(0xe00, Trap_0e, UnknownException)
index 84825aea192392105b0682fc4c035345da5cbd99..f340119900689bbc4d915cc1fe46208c6673a4fd 100644 (file)
@@ -22,7 +22,6 @@
  */
 
 #include <common.h>
-#include <syscall.h>
 #include <malloc.h>
 #include <asm/io.h>
 #include <asm/i8259.h>
@@ -58,31 +57,6 @@ typedef struct {
 
 static irq_desc_t irq_table[MAX_IRQ];
 
-
-asm(".globl syscall_entry\n" \
-       "syscall_entry:\n" \
-       "popl   %ebx\n"        /* throw away the return address, flags  */ \
-       "popl   %ebx\n"        /* and segment that the INT instruction pushed */ \
-       "popl   %ebx\n"        /* on to the stack */ \
-       "movl   %eax, %ecx\n"  /* load the syscall nr argument*/ \
-       "movl   syscall_tbl, %eax\n" /* load start of syscall table */ \
-       "cmpl   $(11-1), %ecx\n"  /* FixMe: find a way to use NR_SYSCALLS macro here */ \
-       "ja     bad_syscall\n" \
-       "movl   (%eax, %ecx, 4), %eax\n" /* load the handler of the syscall*/ \
-       "test   %eax, %eax\n" /* test for null */ \
-       "je     bad_syscall\n" \
-       "popl   %ecx\n" \
-       "popl   %ebx\n" \
-       "sti    \n" \
-       "jmp    *%eax\n" \
-"bad_syscall: movl $0xffffffff, %eax\n" \
-       "popl   %ecx\n" \
-       "popl   %ebx\n" \
-       "ret");
-
-void __attribute__ ((regparm(0))) syscall_entry(void);
-
-
 asm ("irq_return:\n"
      "     addl  $4, %esp\n"
      "     popa\n"
@@ -483,7 +457,6 @@ int interrupt_init(void)
        set_vector(0x2e, irq_14);
        set_vector(0x2f, irq_15);
        /* vectors 0x30-0x3f are reserved for irq 16-31 */
-       set_vector(0x40, syscall_entry);
 
 
        /* Mask all interrupts */
index 12129deed1748750f574a8f2e30091a277f76475..59c6acf91deb05d6654f017ab6c013f7c8865233 100644 (file)
@@ -291,6 +291,11 @@ reset:
 relocate_code:
        move    sp, a0          /* Set new stack pointer                */
 
+       li      t0, CFG_MONITOR_BASE
+       la      t3, in_ram
+       lw      t2, -12(t3)     /* t2 <-- uboot_end_data        */
+       move    t1, a2
+
        /*
         * Fix GOT pointer:
         *
@@ -301,11 +306,6 @@ relocate_code:
        add     gp, a2                  /* gp now adjusted              */
        sub     t6, gp, t6              /* t6 <-- relocation offset     */
 
-       li      t0, CFG_MONITOR_BASE
-       la      t3, in_ram
-       lw      t2, -12(t3)     /* t2 <-- uboot_end_data        */
-       move    t1, a2
-
        /*
         * t0 = source address
         * t1 = target address
index 3b6d34495ace4eae1bd87d6152adfe6bbdce3149..548ec99e2c8499de2ea169486f55a5494f01b00f 100644 (file)
@@ -226,75 +226,7 @@ ProgramCheck:
        STD_EXCEPTION(0x900, Decrementer, timer_interrupt)
        STD_EXCEPTION(0xa00, Trap_0a, UnknownException)
        STD_EXCEPTION(0xb00, Trap_0b, UnknownException)
-
-       . = 0xc00
-/*
- * r0 - SYSCALL number
- * r3-... arguments
- */
-SystemCall:
-       addis   r11,r0,0                /* get functions table addr */
-       ori     r11,r11,0               /* Note: this code is patched in trap_init */
-       addis   r12,r0,0                /* get number of functions */
-       ori     r12,r12,0
-
-       cmplw   0, r0, r12
-       bge     1f
-
-       rlwinm  r0,r0,2,0,31            /* fn_addr = fn_tbl[r0] */
-       add     r11,r11,r0
-       lwz     r11,0(r11)
-
-       li      r20,0xd00-4             /* Get stack pointer */
-       lwz     r12,0(r20)
-       subi    r12,r12,12              /* Adjust stack pointer */
-       li      r0,0xc00+_end_back-SystemCall
-       cmplw   0, r0, r12              /* Check stack overflow */
-       bgt     1f
-       stw     r12,0(r20)
-
-       mflr    r0
-       stw     r0,0(r12)
-       mfspr   r0,SRR0
-       stw     r0,4(r12)
-       mfspr   r0,SRR1
-       stw     r0,8(r12)
-
-       li      r12,0xc00+_back-SystemCall
-       mtlr    r12
-       mtspr   SRR0,r11
-
-1:     SYNC
-       rfi
-
-_back:
-
-       mfmsr   r11                     /* Disable interrupts */
-       li      r12,0
-       ori     r12,r12,MSR_EE
-       andc    r11,r11,r12
-       SYNC                            /* Some chip revs need this... */
-       mtmsr   r11
-       SYNC
-
-       li      r12,0xd00-4             /* restore regs */
-       lwz     r12,0(r12)
-
-       lwz     r11,0(r12)
-       mtlr    r11
-       lwz     r11,4(r12)
-       mtspr   SRR0,r11
-       lwz     r11,8(r12)
-       mtspr   SRR1,r11
-
-       addi    r12,r12,12              /* Adjust stack pointer */
-       li      r20,0xd00-4
-       stw     r12,0(r20)
-
-       SYNC
-       rfi
-_end_back:
-
+       STD_EXCEPTION(0xc00, SystemCall, UnknownException)
        STD_EXCEPTION(0xd00, SingleStep, UnknownException)
 
        STD_EXCEPTION(0xe00, Trap_0e, UnknownException)
index 41454423ca014c4b21288955b977492d49d2467b..37448acba39195bf1b22edb48300ee821e62fc5a 100644 (file)
@@ -208,75 +208,7 @@ ProgramCheck:
 
        STD_EXCEPTION(0xa00, Trap_0a, UnknownException)
        STD_EXCEPTION(0xb00, Trap_0b, UnknownException)
-
-       . = 0xc00
-/*
- * r0 - SYSCALL number
- * r3-... arguments
- */
-SystemCall:
-       addis   r11,r0,0                /* get functions table addr */
-       ori     r11,r11,0               /* Note: this code is patched in trap_init */
-       addis   r12,r0,0                /* get number of functions */
-       ori     r12,r12,0
-
-       cmplw   0, r0, r12
-       bge     1f
-
-       rlwinm  r0,r0,2,0,31            /* fn_addr = fn_tbl[r0] */
-       add     r11,r11,r0
-       lwz     r11,0(r11)
-
-       li      r20,0xd00-4             /* Get stack pointer */
-       lwz     r12,0(r20)
-       subi    r12,r12,12              /* Adjust stack pointer */
-       li      r0,0xc00+_end_back-SystemCall
-       cmplw   0, r0, r12              /* Check stack overflow */
-       bgt     1f
-       stw     r12,0(r20)
-
-       mflr    r0
-       stw     r0,0(r12)
-       mfspr   r0,SRR0
-       stw     r0,4(r12)
-       mfspr   r0,SRR1
-       stw     r0,8(r12)
-
-       li      r12,0xc00+_back-SystemCall
-       mtlr    r12
-       mtspr   SRR0,r11
-
-1:     SYNC
-       rfi
-
-_back:
-
-       mfmsr   r11                     /* Disable interrupts */
-       li      r12,0
-       ori     r12,r12,MSR_EE
-       andc    r11,r11,r12
-       SYNC                            /* Some chip revs need this... */
-       mtmsr   r11
-       SYNC
-
-       li      r12,0xd00-4             /* restore regs */
-       lwz     r12,0(r12)
-
-       lwz     r11,0(r12)
-       mtlr    r11
-       lwz     r11,4(r12)
-       mtspr   SRR0,r11
-       lwz     r11,8(r12)
-       mtspr   SRR1,r11
-
-       addi    r12,r12,12              /* Adjust stack pointer */
-       li      r20,0xd00-4
-       stw     r12,0(r20)
-
-       SYNC
-       rfi
-_end_back:
-
+       STD_EXCEPTION(0xc00, SystemCall, UnknownException)
        STD_EXCEPTION(0xd00, SingleStep, UnknownException)
 
        STD_EXCEPTION(0xe00, Trap_0e, UnknownException)
index dc1c97ca0f631d4c8221bb0815505ddd65272692..94c671e5672dd2c1a9d000f8a52f20b43bcb4711 100644 (file)
@@ -1197,13 +1197,16 @@ int i2c_write (uchar chip, uint addr, int alen, uchar * buffer, int len)
        uchar *p;
        int i;
 
-       p = dummy_buffer;
        /* fill in address in big endian order */
-       for (i=0; i<alen; ++i)
-               *p++ = (addr >> (i * 8)) & 0xFF;
+       for (i=alen-1; i>=0; --i) {
+               buffer[i] = addr & 0xFF;
+               addr >>= 8;
+       }
        /* fill in data */
+       p = dummy_buffer + alen;
+
        for (i=0; i<len; ++i)
-               *p++ = *buffer;
+               *p++ = *buffer++;
 
        status = I2C_do_buffer (0, I2C_MASTER_XMIT, chip, alen + len,
                                dummy_buffer, I2C_STOP, 1, I2C_NO_RESTART);
index b1cdb8460d13c2e0feefed9f82f558b873af24cc..a22137ceb61078aaf45c1b792314f7964fa640c8 100644 (file)
@@ -259,74 +259,7 @@ ProgramCheck:
        STD_EXCEPTION(EXC_OFF_DECR, Decrementer, timer_interrupt)
        STD_EXCEPTION(0xa00, Trap_0a, UnknownException)
        STD_EXCEPTION(0xb00, Trap_0b, UnknownException)
-
-       . = 0xc00
-/*
- * r0 - SYSCALL number
- * r3-... arguments
- */
-SystemCall:
-       addis   r11,r0,0                /* get functions table addr */
-       ori     r11,r11,0               /* Note: this code is patched in trap_init */
-       addis   r12,r0,0                /* get number of functions */
-       ori     r12,r12,0
-
-       cmplw   0, r0, r12
-       bge     1f
-
-       rlwinm  r0,r0,2,0,31            /* fn_addr = fn_tbl[r0] */
-       add     r11,r11,r0
-       lwz     r11,0(r11)
-
-       li      r20,0xd00-4             /* Get stack pointer */
-       lwz     r12,0(r20)
-       subi    r12,r12,12              /* Adjust stack pointer */
-       li      r0,0xc00+_end_back-SystemCall
-       cmplw   0, r0, r12              /* Check stack overflow */
-       bgt     1f
-       stw     r12,0(r20)
-
-       mflr    r0
-       stw     r0,0(r12)
-       mfspr   r0,SRR0
-       stw     r0,4(r12)
-       mfspr   r0,SRR1
-       stw     r0,8(r12)
-
-       li      r12,0xc00+_back-SystemCall
-       mtlr    r12
-       mtspr   SRR0,r11
-
-1:     SYNC
-       rfi
-
-_back:
-
-       mfmsr   r11                     /* Disable interrupts */
-       li      r12,0
-       ori     r12,r12,MSR_EE
-       andc    r11,r11,r12
-       SYNC                            /* Some chip revs need this... */
-       mtmsr   r11
-       SYNC
-
-       li      r12,0xd00-4             /* restore regs */
-       lwz     r12,0(r12)
-
-       lwz     r11,0(r12)
-       mtlr    r11
-       lwz     r11,4(r12)
-       mtspr   SRR0,r11
-       lwz     r11,8(r12)
-       mtspr   SRR1,r11
-
-       addi    r12,r12,12              /* Adjust stack pointer */
-       li      r20,0xd00-4
-       stw     r12,0(r20)
-
-       SYNC
-       rfi
-_end_back:
+       STD_EXCEPTION(0xc00, SystemCall, UnknownException)
 
        STD_EXCEPTION(EXC_OFF_TRACE, SingleStep, UnknownException)
 
index d3fd8652dc873f635d40f3afbe6aefb654959199..a499bc1e9d2ac8123b18dfc35b1f6b2ebf03ff6b 100644 (file)
@@ -319,75 +319,7 @@ ProgramCheck:
 
        STD_EXCEPTION(0xa00, Trap_0a, UnknownException)
        STD_EXCEPTION(0xb00, Trap_0b, UnknownException)
-
-       . = 0xc00
-/*
- * r0 - SYSCALL number
- * r3-... arguments
- */
-SystemCall:
-       addis   r11,r0,0                /* get functions table addr */
-       ori     r11,r11,0               /* Note: this code is patched in trap_init */
-       addis   r12,r0,0                /* get number of functions */
-       ori     r12,r12,0
-
-       cmplw   0, r0, r12
-       bge     1f
-
-       rlwinm  r0,r0,2,0,31            /* fn_addr = fn_tbl[r0] */
-       add     r11,r11,r0
-       lwz     r11,0(r11)
-
-       li      r20,0xd00-4             /* Get stack pointer */
-       lwz     r12,0(r20)
-       subi    r12,r12,12              /* Adjust stack pointer */
-       li      r0,0xc00+_end_back-SystemCall
-       cmplw   0, r0, r12              /* Check stack overflow */
-       bgt     1f
-       stw     r12,0(r20)
-
-       mflr    r0
-       stw     r0,0(r12)
-       mfspr   r0,SRR0
-       stw     r0,4(r12)
-       mfspr   r0,SRR1
-       stw     r0,8(r12)
-
-       li      r12,0xc00+_back-SystemCall
-       mtlr    r12
-       mtspr   SRR0,r11
-
-1:     SYNC
-       rfi
-
-_back:
-
-       mfmsr   r11                     /* Disable interrupts */
-       li      r12,0
-       ori     r12,r12,MSR_EE
-       andc    r11,r11,r12
-       SYNC                            /* Some chip revs need this... */
-       mtmsr   r11
-       SYNC
-
-       li      r12,0xd00-4             /* restore regs */
-       lwz     r12,0(r12)
-
-       lwz     r11,0(r12)
-       mtlr    r11
-       lwz     r11,4(r12)
-       mtspr   SRR0,r11
-       lwz     r11,8(r12)
-       mtspr   SRR1,r11
-
-       addi    r12,r12,12              /* Adjust stack pointer */
-       li      r20,0xd00-4
-       stw     r12,0(r20)
-
-       SYNC
-       rfi
-_end_back:
-
+       STD_EXCEPTION(0xc00, SystemCall, UnknownException)
        STD_EXCEPTION(0xd00, SingleStep, UnknownException)
 
        STD_EXCEPTION(0xe00, Trap_0e, UnknownException)
index c1509284b0a8460a947f98089d6ee1c37973c94d..f2e404c4b971e4f023c10c6ca3b9aef3b7962dd6 100644 (file)
@@ -61,9 +61,9 @@
 /* ** BITMAP DISPLAY SUPPORT  -- should probably be moved elsewhere    */
 /************************************************************************/
 
-#if (CONFIG_COMMANDS & CFG_CMD_BMP)
+#if (CONFIG_COMMANDS & CFG_CMD_BMP) || defined(CONFIG_SPLASH_SCREEN)
 #include <bmp_layout.h>
-#endif /* (CONFIG_COMMANDS & CFG_CMD_BMP) */
+#endif /* (CONFIG_COMMANDS & CFG_CMD_BMP) || CONFIG_SPLASH_SCREEN */
 
 /************************************************************************/
 /* ** FONT AND LOGO DATA                                               */
@@ -1176,7 +1176,7 @@ static void bitmap_plot (int x, int y)
 }
 #endif /* CONFIG_LCD_LOGO */
 
-#if (CONFIG_COMMANDS & CFG_CMD_BMP)
+#if (CONFIG_COMMANDS & CFG_CMD_BMP) || defined(CONFIG_SPLASH_SCREEN)
 /*
  * Display the BMP file located at address bmp_image.
  * Only uncompressed
@@ -1273,7 +1273,7 @@ int lcd_display_bitmap(ulong bmp_image)
 
        return (0);
 }
-#endif /* (CONFIG_COMMANDS & CFG_CMD_BMP) */
+#endif /* (CONFIG_COMMANDS & CFG_CMD_BMP) || CONFIG_SPLASH_SCREEN */
 
 /*----------------------------------------------------------------------*/
 
index 81a4dc07c96ba9bec1b99d3b17242d05e387a5f6..893c0f810fa42a3465a014c3bc35c7db96f09b2b 100644 (file)
@@ -266,75 +266,7 @@ ProgramCheck:
        STD_EXCEPTION(0x900, Decrementer, timer_interrupt)
        STD_EXCEPTION(0xa00, Trap_0a, UnknownException)
        STD_EXCEPTION(0xb00, Trap_0b, UnknownException)
-
-       . = 0xc00
-/*
- * r0 - SYSCALL number
- * r3-... arguments
- */
-SystemCall:
-       addis   r11,r0,0                /* get functions table addr */
-       ori     r11,r11,0               /* Note: this code is patched in trap_init */
-       addis   r12,r0,0                /* get number of functions */
-       ori     r12,r12,0
-
-       cmplw   0, r0, r12
-       bge     1f
-
-       rlwinm  r0,r0,2,0,31            /* fn_addr = fn_tbl[r0] */
-       add     r11,r11,r0
-       lwz     r11,0(r11)
-
-       li      r20,0xd00-4             /* Get stack pointer */
-       lwz     r12,0(r20)
-       subi    r12,r12,12              /* Adjust stack pointer */
-       li      r0,0xc00+_end_back-SystemCall
-       cmplw   0, r0, r12              /* Check stack overflow */
-       bgt     1f
-       stw     r12,0(r20)
-
-       mflr    r0
-       stw     r0,0(r12)
-       mfspr   r0,SRR0
-       stw     r0,4(r12)
-       mfspr   r0,SRR1
-       stw     r0,8(r12)
-
-       li      r12,0xc00+_back-SystemCall
-       mtlr    r12
-       mtspr   SRR0,r11
-
-1:     SYNC
-       rfi
-
-_back:
-
-       mfmsr   r11                     /* Disable interrupts */
-       li      r12,0
-       ori     r12,r12,MSR_EE
-       andc    r11,r11,r12
-       SYNC                            /* Some chip revs need this... */
-       mtmsr   r11
-       SYNC
-
-       li      r12,0xd00-4             /* restore regs */
-       lwz     r12,0(r12)
-
-       lwz     r11,0(r12)
-       mtlr    r11
-       lwz     r11,4(r12)
-       mtspr   SRR0,r11
-       lwz     r11,8(r12)
-       mtspr   SRR1,r11
-
-       addi    r12,r12,12              /* Adjust stack pointer */
-       li      r20,0xd00-4
-       stw     r12,0(r20)
-
-       SYNC
-       rfi
-_end_back:
-
+       STD_EXCEPTION(0xc00, SystemCall, UnknownException)
        STD_EXCEPTION(0xd00, SingleStep, UnknownException)
 
        STD_EXCEPTION(0xe00, Trap_0e, UnknownException)
index aa857d030c87174d31667efb87a934b6bd5ba9fb..e3e92afa849611231e1cc174463ba6bcfb2a2835 100644 (file)
@@ -769,75 +769,7 @@ ProgramCheck:
        STD_EXCEPTION(0x900, Decrementer, timer_interrupt)
        STD_EXCEPTION(0xa00, Trap_0a, UnknownException)
        STD_EXCEPTION(0xb00, Trap_0b, UnknownException)
-
-       . = 0xc00
-/*
- * r0 - SYSCALL number
- * r3-... arguments
- */
-SystemCall:
-       addis   r11,r0,0                /* get functions table addr */
-       ori     r11,r11,0               /* Note: this code is patched in trap_init */
-       addis   r12,r0,0                /* get number of functions */
-       ori     r12,r12,0
-
-       cmplw   0, r0, r12
-       bge     1f
-
-       rlwinm  r0,r0,2,0,31            /* fn_addr = fn_tbl[r0] */
-       add     r11,r11,r0
-       lwz     r11,0(r11)
-
-       li      r20,0xd00-4             /* Get stack pointer */
-       lwz     r12,0(r20)
-       subi    r12,r12,12              /* Adjust stack pointer */
-       li      r0,0xc00+_end_back-SystemCall
-       cmplw   0, r0, r12              /* Check stack overflow */
-       bgt     1f
-       stw     r12,0(r20)
-
-       mflr    r0
-       stw     r0,0(r12)
-       mfspr   r0,SRR0
-       stw     r0,4(r12)
-       mfspr   r0,SRR1
-       stw     r0,8(r12)
-
-       li      r12,0xc00+_back-SystemCall
-       mtlr    r12
-       mtspr   SRR0,r11
-
-1:     SYNC
-       rfi
-
-_back:
-
-       mfmsr   r11                     /* Disable interrupts */
-       li      r12,0
-       ori     r12,r12,MSR_EE
-       andc    r11,r11,r12
-       SYNC                            /* Some chip revs need this... */
-       mtmsr   r11
-       SYNC
-
-       li      r12,0xd00-4             /* restore regs */
-       lwz     r12,0(r12)
-
-       lwz     r11,0(r12)
-       mtlr    r11
-       lwz     r11,4(r12)
-       mtspr   SRR0,r11
-       lwz     r11,8(r12)
-       mtspr   SRR1,r11
-
-       addi    r12,r12,12              /* Adjust stack pointer */
-       li      r20,0xd00-4
-       stw     r12,0(r20)
-
-       SYNC
-       rfi
-_end_back:
-
+       STD_EXCEPTION(0xc00, SystemCall, UnknownException)
        STD_EXCEPTION(0xd00, SingleStep, UnknownException)
 
        STD_EXCEPTION(0xe00, Trap_0e, UnknownException)
diff --git a/doc/README.standalone b/doc/README.standalone
new file mode 100644 (file)
index 0000000..a5992ab
--- /dev/null
@@ -0,0 +1,156 @@
+Design Notes on Exporting U-Boot Functions to Standalone Applications:
+======================================================================
+
+1. Add a field to the global_data structure, the pointer to a jump
+   table.
+
+2. Jump table itself is allocated and filled in the same way as the
+   syscall table is (allocated with malloc() after the code has been
+   relocated to RAM); a special function, fixed to the table element
+   number 0, will be added which returns the ABI version so
+   applications can check for compatibility issues.
+
+3. It is application's responsibility to check the ABI version and
+   act accordingly.
+
+4. Pointer to the global_data is passed to the application in the
+   dedicated register that is used in the U-Boot to hold this
+   pointer. This assumes that the application is built with the same
+   register- allocation flags as the U-Boot itself. (Actually, this
+   is a requirement even now, as the 'go' command does not perform
+   any actions to protect this register against being clobbered by
+   the application).
+
+   This approach won't work on the x86 architecture. See below.
+
+5. Application now calls standard library functions like printf()
+   instead of specially prefixed names like mon_printf() as it did
+   before. Present implementation of these functions (using the
+   system calls mechanism) will be replaced with jump stubs.
+
+6. To export additional functions, the following steps will have to be 
+   taken:
+
+   - Add the xxx() U-Boot function to the EXPORT_FUNC list
+   - Add initialization of the appropriate slot in the jump table
+
+7. To port to a new architecture, the appropriate stub code should be
+   provided. No other machine-dependent code is used. Once the stub
+   template is available, no additional coding is needed when
+   exporting new U-Boot functions. A pre-processor macro will be used
+   to automatically instantiate the stub definition for each exported
+   function.
+
+Note the following:
+
+- This approach uses a jump table with fixed slot allocation. That
+  said, to retain the ABI compatibility, no table reordering,
+  inserting new functions in the middle of the list or deleting
+  functions from the list is allowed. Any such action will break the
+  ABI compatibility.
+
+- The x86 architecture does not use a dedicated register to store the
+  pointer to the global_data structure. There are the following
+  approaches available:
+
+  * Pass the global_data pointer to the application in a register or
+    as an additional argument. This requires special machine-
+    dependent startup code to be compiled into the application.
+
+  * Make the x86 consistent with the rest of architectures and use a
+    dedicated register. This renders one register unusable in the
+    rest of the U-Boot code and thus increases the size of the U-Boot
+    binary and decreases it performance.
+
+The following changes will be made:
+
+- The syscall handling code will be removed.
+
+- The include/_exports.h file will be introduced, containing the list
+  of the exported functions in the following form:
+
+  EXPORT_FUNC(getc)
+  EXPORT_FUNC(tstc)
+  ...
+
+  This list will be used to assign the slot numbers in the jump
+  table, to determine the size of the jump table and to generate the
+  code for the stub functions.
+
+- The include/exports.h file will be introduced, containing the
+  prototypes of the exported functions and the assigned slot numbers.
+
+- The examples/stubs.c file will be introduced, containing the code
+  for the jump stubs for each of the exported functions.
+
+Implementation Notes on Exporting U-Boot Functions:
+===================================================
+
+1. The patch was applied against TOT as of 7/24 12:50 MEST; the
+   resulting images were tested on the following boards:
+
+   * lwmon (PowerPC)
+   * trab  (ARM)
+   * inca  (MIPS)
+
+   The hello_world application was loaded and executed then:
+
+   [lwmon]
+   => tftp 0x40000 /tftpboot/LWMON/hello_world.bin-avn
+   => go 0x40004
+
+   [trab]
+   TRAB # tftp 0xc100000 /tftpboot/TRAB/hello_world.bin-avn
+   TRAB # go 0xc100000
+
+   [inca]
+   INCA-IP # tftp 0x80200000 /tftpboot/INCA/hello_world.bin-avn
+   INCA-IP # go 0x80200000
+
+2. As neither of supported x86 boards can be built from the TOT
+   sources currently, the patch build was verified by manually
+   running the following command in the U-Boot top directory:
+
+   > make -C examples TOPDIR=`pwd` ARCH=i386 CROSS_COMPILE=
+
+   The rest of the code is mostly machine-independent and was not
+   verified.
+
+3. To test the x86 assembly code, a small standalone application was
+   written. It was built and run on the RedHat Linux 8.0 (x86). The
+   application performs a jump using a pointer to jump table and a
+   function's index in it.
+
+4. For the MIPS architecture, the linker script is also provided for
+   linking applications. The default linker script places the .text
+   and .data sections too far from each other so that the resulting
+   .bin files span about 256Mb in size.
+
+5. Several example applications required updating for the new API.
+   These applications relied upon the bd_t pointer being passed as
+   the 1st argument to the main function; this had changed when the
+   system calls were introduced, but apparently, these applications
+   weren't fixed at that moment. This is fixed now.
+
+6. GCC issues warnings for the 'sched' application. Since now the
+   mon_printf() function is renamed to printf(), GCC applies its
+   knowledge of the format specifiers to check the arguments,
+   complaining about ints passed as longs and vice versa. This is not
+   fixed yet.
+
+7. Only the hello_world example application was modified to make use
+   of the newly supplied get_version() function. The application now
+   prints two ABI versions, the one that the application was compiled
+   for and the other, actual ABI version.
+
+8. The following new files were added:
+   common/exports.c
+   examples/mips.lds
+   examples/stubs.c
+   include/_exports.h
+   include/exports.h
+   doc/README.standalone
+
+   The following files are no longer used and will be removed:
+   examples/syscall.S
+   include/syscall.h
index d66b3dd8e240706539f9fcda1b7580cff0cf950c..1a121d42874e771be1858e1432c817e3314f1b24 100644 (file)
@@ -22,7 +22,7 @@
 #define _LINUX_STRING_H_       /* avoid unnecessary str/mem functions */
 
 #include <common.h>
-#include <syscall.h>
+#include <exports.h>
 #include <asm/io.h>
 
 
@@ -96,7 +96,7 @@ static int do_eeprom_cmd(long ioaddr, int cmd, int cmd_len)
        long ee_addr = ioaddr + EE_OFFSET;
 
        if (debug > 1)
-               mon_printf(" EEPROM op 0x%x: ", cmd);
+               printf(" EEPROM op 0x%x: ", cmd);
 
        outw(EE_ENB | EE_SHIFT_CLK, ee_addr);
 
@@ -106,7 +106,7 @@ static int do_eeprom_cmd(long ioaddr, int cmd, int cmd_len)
                outw(dataval, ee_addr);
                eeprom_delay(ee_addr);
                if (debug > 2)
-                       mon_printf("%X", inw(ee_addr) & 15);
+                       printf("%X", inw(ee_addr) & 15);
                outw(dataval | EE_SHIFT_CLK, ee_addr);
                eeprom_delay(ee_addr);
                retval = (retval << 1) | ((inw(ee_addr) & EE_DATA_READ) ? 1 : 0);
@@ -117,7 +117,7 @@ static int do_eeprom_cmd(long ioaddr, int cmd, int cmd_len)
        /* Terminate the EEPROM access. */
        outw(EE_ENB & ~EE_CS, ee_addr);
        if (debug > 1)
-               mon_printf(" EEPROM result is 0x%5.5x.\n", retval);
+               printf(" EEPROM result is 0x%5.5x.\n", retval);
        return retval;
 }
 
@@ -143,7 +143,7 @@ static void write_eeprom(long ioaddr, int index, int value, int addr_len)
        /* Poll for write finished. */
        i = eeprom_busy_poll(ee_ioaddr);                        /* Typical 2000 ticks */
        if (debug)
-               mon_printf(" Write finished after %d ticks.\n", i);
+               printf(" Write finished after %d ticks.\n", i);
        /* Disable programming. This command is not instantaneous, so we check
           for busy before the next op. */
        do_eeprom_cmd(ioaddr, (0x40 << (addr_len-4)), 3 + addr_len);
@@ -156,7 +156,7 @@ static int reset_eeprom(unsigned long ioaddr, unsigned char *hwaddr)
        int size_test;
        int i;
 
-       mon_printf("Resetting i82559 EEPROM @ 0x%08x ... ", ioaddr);
+       printf("Resetting i82559 EEPROM @ 0x%08x ... ", ioaddr);
 
        size_test = do_eeprom_cmd(ioaddr, (EE_READ_CMD << 8) << 16, 27);
        eeprom_addr_size = (size_test & 0xffe0000) == 0xffe0000 ? 8 : 6;
@@ -177,11 +177,11 @@ static int reset_eeprom(unsigned long ioaddr, unsigned char *hwaddr)
 
        for (i = 0; i < eeprom_size; i++)
                if (read_eeprom(ioaddr, i, eeprom_addr_size) != eeprom[i]) {
-                       mon_printf("failed\n");
+                       printf("failed\n");
                        return 1;
                }
 
-       mon_printf("done\n");
+       printf("done\n");
        return 0;
 }
 
@@ -308,19 +308,20 @@ int main (int argc, char *argv[])
        char buf[6];
        int instance;
 
+       app_startup(argv);
        if (argc != 2) {
-               mon_printf ("call with base Ethernet address\n");
+               printf ("call with base Ethernet address\n");
                return 1;
        }
 
 
        eth_addr = gethwaddr(argv[1], buf);
        if (NULL == eth_addr) {
-               mon_printf ("Can not parse ethernet address\n");
+               printf ("Can not parse ethernet address\n");
                return 1;
        }
        if (eth_addr[5] & 0x01) {
-               mon_printf("Base Ethernet address must be even\n");
+               printf("Base Ethernet address must be even\n");
        }
 
 
@@ -329,22 +330,22 @@ int main (int argc, char *argv[])
                unsigned char mac[6];
                int bar1 = read_config_dword(0, 6+instance, 0, 0x14);
                if (! (bar1 & 1)) {
-                       mon_printf("ETH%d is disabled %x\n", instance, bar1);
+                       printf("ETH%d is disabled %x\n", instance, bar1);
                } else {
-                       mon_printf("ETH%d IO=0x%04x\n", instance, bar1 & ~3);
+                       printf("ETH%d IO=0x%04x\n", instance, bar1 & ~3);
                }
                io_addr = (bar1 & (~3L));
 
 
                write_config_word(0, 6+instance, 0, 4,
                                  read_config_word(0, 6+instance, 0, 4) | 1);
-               mon_printf("ETH%d CMD %04x\n", instance,
+               printf("ETH%d CMD %04x\n", instance,
                           read_config_word(0, 6+instance, 0, 4));
 
                memcpy(mac, eth_addr, 6);
                mac[5] += instance;
 
-               mon_printf("got io=%04x, ha=%02x:%02x:%02x:%02x:%02x:%02x\n",
+               printf("got io=%04x, ha=%02x:%02x:%02x:%02x:%02x:%02x\n",
                           io_addr, mac[0], mac[1], mac[2],
                           mac[3], mac[4], mac[5]);
                reset_eeprom(io_addr, mac);
index 9abff63f1aeceab52affef6fe20d1beb64cd3d53..7975df55caee04f4b48c1bf72fb1bf09142e6258 100644 (file)
 # MA 02111-1307 USA
 #
 
+ifeq ($(ARCH),ppc)
 LOAD_ADDR = 0x40000
+endif
+
+ifeq ($(ARCH),i386)
+LOAD_ADDR = 0x40000
+endif
+
+ifeq ($(ARCH),arm)
+LOAD_ADDR = 0xc100000
+endif
+
+ifeq ($(ARCH),mips)
+LOAD_ADDR = 0x80200000 -T mips.lds
+endif
 
 include $(TOPDIR)/config.mk
 
@@ -38,11 +52,6 @@ SREC   += sched.srec
 BIN    += sched.bin
 endif
 
-ifeq ($(ARCH),mips)
-SREC =
-BIN =
-endif
-
 # The following example is pretty 8xx specific...
 ifeq ($(CPU),mpc8xx)
 SREC   += timer.srec
@@ -62,12 +71,12 @@ endif
 
 OBJS   = $(SREC:.srec=.o)
 
-LIB    = libsyscall.a
-LIBAOBJS= syscall.o
+LIB    = libstubs.a
+LIBAOBJS=
 ifeq ($(ARCH),ppc)
 LIBAOBJS+= $(ARCH)_longjmp.o $(ARCH)_setjmp.o
 endif
-LIBCOBJS=
+LIBCOBJS= stubs.o
 LIBOBJS        = $(LIBAOBJS) $(LIBCOBJS)
 
 CPPFLAGS += -I..
index 23020037d3cfdc6c87353e3cd8e06c0f4d4b7bf2..60b937ef8de5092c7a6cc98d25af96d8d4bc8988 100644 (file)
 #define _LINUX_STRING_H_       /* avoid unnecessary str/mem functions */
 
 #include <common.h>
-#include <syscall.h>
+#include <exports.h>
 
 static int reset_eeprom(unsigned long ioaddr, unsigned char *hwaddr);
 
-int eepro100_eeprom(void)
+int eepro100_eeprom(int argc, char *argv[])
 {
        int ret = 0;
 
        unsigned char hwaddr1[6] = { 0x00, 0x00, 0x02, 0x03, 0x04, 0x05 };
        unsigned char hwaddr2[6] = { 0x00, 0x00, 0x02, 0x03, 0x04, 0x06 };
 
+       app_startup(argv);
+
 #if defined(CONFIG_OXC)
        ret |= reset_eeprom(0x80000000, hwaddr1);
        ret |= reset_eeprom(0x81000000, hwaddr2);
@@ -119,7 +121,7 @@ static int do_eeprom_cmd(long ioaddr, int cmd, int cmd_len)
        long ee_addr = ioaddr + EE_OFFSET;
 
        if (debug > 1)
-               mon_printf(" EEPROM op 0x%x: ", cmd);
+               printf(" EEPROM op 0x%x: ", cmd);
 
        outw(EE_ENB | EE_SHIFT_CLK, ee_addr);
 
@@ -129,7 +131,7 @@ static int do_eeprom_cmd(long ioaddr, int cmd, int cmd_len)
                outw(dataval, ee_addr);
                eeprom_delay(ee_addr);
                if (debug > 2)
-                       mon_printf("%X", inw(ee_addr) & 15);
+                       printf("%X", inw(ee_addr) & 15);
                outw(dataval | EE_SHIFT_CLK, ee_addr);
                eeprom_delay(ee_addr);
                retval = (retval << 1) | ((inw(ee_addr) & EE_DATA_READ) ? 1 : 0);
@@ -140,7 +142,7 @@ static int do_eeprom_cmd(long ioaddr, int cmd, int cmd_len)
        /* Terminate the EEPROM access. */
        outw(EE_ENB & ~EE_CS, ee_addr);
        if (debug > 1)
-               mon_printf(" EEPROM result is 0x%5.5x.\n", retval);
+               printf(" EEPROM result is 0x%5.5x.\n", retval);
        return retval;
 }
 
@@ -166,7 +168,7 @@ static void write_eeprom(long ioaddr, int index, int value, int addr_len)
        /* Poll for write finished. */
        i = eeprom_busy_poll(ee_ioaddr);                        /* Typical 2000 ticks */
        if (debug)
-               mon_printf(" Write finished after %d ticks.\n", i);
+               printf(" Write finished after %d ticks.\n", i);
        /* Disable programming. This command is not instantaneous, so we check
           for busy before the next op. */
        do_eeprom_cmd(ioaddr, (0x40 << (addr_len-4)), 3 + addr_len);
@@ -179,7 +181,7 @@ static int reset_eeprom(unsigned long ioaddr, unsigned char *hwaddr)
        int size_test;
        int i;
 
-       mon_printf("Resetting i82559 EEPROM @ 0x%08x ... ", ioaddr);
+       printf("Resetting i82559 EEPROM @ 0x%08lX ... ", ioaddr);
 
        size_test = do_eeprom_cmd(ioaddr, (EE_READ_CMD << 8) << 16, 27);
        eeprom_addr_size = (size_test & 0xffe0000) == 0xffe0000 ? 8 : 6;
@@ -200,10 +202,10 @@ static int reset_eeprom(unsigned long ioaddr, unsigned char *hwaddr)
 
        for (i = 0; i < eeprom_size; i++)
                if (read_eeprom(ioaddr, i, eeprom_addr_size) != eeprom[i]) {
-                       mon_printf("failed\n");
+                       printf("failed\n");
                        return 1;
                }
 
-       mon_printf("done\n");
+       printf("done\n");
        return 0;
 }
index 96204c45079fd71721ee57b9563b405c1d7ca4e1..9317f6d8c0b211077f7c2cc6bc2bd1d6702c7110 100644 (file)
  */
 
 #include <common.h>
-#include <syscall.h>
+#include <exports.h>
 
 int hello_world (int argc, char *argv[])
 {
        int i;
 
-       mon_printf ("Hello World\n");
+       /* Print the ABI version */
+       app_startup(argv);
+       printf ("Example expects ABI version %d\n", XF_VERSION);
+       printf ("Actual U-Boot ABI version %d\n", (int)get_version());
 
-       mon_printf ("argc = %d\n", argc);
+       printf ("Hello World\n");
+
+       printf ("argc = %d\n", argc);
 
        for (i=0; i<=argc; ++i) {
-               mon_printf ("argv[%d] = \"%s\"\n",
+               printf ("argv[%d] = \"%s\"\n",
                        i,
                        argv[i] ? argv[i] : "<NULL>");
        }
 
-       mon_printf ("Hit any key to exit ... ");
-       while (!mon_tstc())
+       printf ("Hit any key to exit ... ");
+       while (!tstc())
                ;
        /* consume input */
-       (void) mon_getc();
+       (void) getc();
 
-       mon_printf ("\n\n");
+       printf ("\n\n");
        return (0);
 }
index 3f0fd372b0f20e115f9735d89de5caba280eafe9..3a269c9082a588732605340ea16a42fec0293d4b 100644 (file)
@@ -28,7 +28,7 @@
 
 
 #include <common.h>
-#include <syscall.h>
+#include <exports.h>
 
 #define STANDALONE
 
 #include <command.h>
 #include <watchdog.h>
 #else                                  /* Standalone app of PPCBoot */
-#include <syscall.h>
-#define printf mon_printf
-#define tstc   mon_tstc
-#define getc   mon_getc
-#define putc   mon_putc
-#define udelay mon_udelay
-#define malloc mon_malloc
 #define WATCHDOG_RESET() {                                             \
                        *(ushort *)(CFG_IMMR + 0x1000E) = 0x556c;       \
                        *(ushort *)(CFG_IMMR + 0x1000E) = 0xaa39;       \
@@ -180,8 +173,8 @@ uint dpinit_done = 0;
 #ifdef STANDALONE
 int ctrlc (void)
 {
-       if (mon_tstc()) {
-               switch (mon_getc ()) {
+       if (tstc()) {
+               switch (getc ()) {
                case 0x03:              /* ^C - Control C */
                        return 1;
                default:
@@ -209,19 +202,20 @@ int memcmp(const void * cs,const void * ct,size_t count)
 #endif /* STANDALONE */
 
 #ifdef STANDALONE
-int mem_to_mem_idma2intr (bd_t * bd, int argc, char *argv[])
+int mem_to_mem_idma2intr (int argc, char *argv[])
 #else
 int do_idma (bd_t * bd, int argc, char *argv[])
 #endif /* STANDALONE */
 {
        int i;
 
+       app_startup(argv);
        dpinit_done = 0;
 
        idma_init ();
 
        DEBUG ("Installing dma handler\n");
-       mon_install_hdlr (7, dmadone_handler, (void *) bdf);
+       install_hdlr (7, dmadone_handler, (void *) bdf);
 
        memset ((void *) 0x100000, 'a', 512);
        memset ((void *) 0x200000, 'b', 512);
@@ -232,7 +226,7 @@ int do_idma (bd_t * bd, int argc, char *argv[])
        }
 
        DEBUG ("Uninstalling dma handler\n");
-       mon_free_hdlr (7);
+       free_hdlr (7);
 
        return 0;
 }
diff --git a/examples/mips.lds b/examples/mips.lds
new file mode 100644 (file)
index 0000000..8ed01c4
--- /dev/null
@@ -0,0 +1,56 @@
+/*
+ * (C) Copyright 2003
+ * Wolfgang Denk Engineering, <wd@denx.de>
+ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * 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., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ */
+
+/*
+OUTPUT_FORMAT("elf32-bigmips", "elf32-bigmips", "elf32-bigmips")
+*/
+OUTPUT_FORMAT("elf32-tradbigmips", "elf32-tradbigmips", "elf32-tradbigmips")
+OUTPUT_ARCH(mips)
+SECTIONS
+{
+       .text       :
+       {
+         *(.text)
+       }
+
+       . = ALIGN(4);
+       .rodata  : { *(.rodata) }
+
+       . = ALIGN(4);
+       .data  : { *(.data) }
+
+       . = ALIGN(4);
+       .sdata  : { *(.sdata) }
+
+       _gp = ALIGN(16);
+
+       __got_start = .;
+       .got  : { *(.got) }
+       __got_end = .;
+
+       .sdata  : { *(.sdata) }
+
+       . = ALIGN(4);
+       .sbss  : { *(.sbss) }
+       .bss  : { *(.bss) }
+}
index ceb5c1f08ecb23b08ea384b2bc24019ce964bbd5..6b78f69985c029f1f3b25d68fd450f4bbd220e7c 100644 (file)
@@ -16,7 +16,7 @@
  */
 
 #include <common.h>
-#include <syscall.h>
+#include <exports.h>
 
 /*
  * Author: Arun Dharankar <ADharankar@ATTBI.Com>
@@ -76,9 +76,9 @@ static uchar dbg = 0;
 
 #define PDEBUG(fmt, args...)    {                                      \
        if(dbg != 0) {                                                  \
-               mon_printf("[%s %d %s]: ",__FILE__,__LINE__,__FUNCTION__);\
-               mon_printf(fmt, ##args);                                \
-               mon_printf("\n");                                       \
+               printf("[%s %d %s]: ",__FILE__,__LINE__,__FUNCTION__);\
+               printf(fmt, ##args);                            \
+               printf("\n");                                   \
        }                                                               \
 }
 
@@ -97,41 +97,43 @@ static int thread_stop (int id);
 /* An example of schedular test */
 
 #define NUMTHREADS 7
-int sched (bd_t * bd, int ac, char *av[])
+int sched (int ac, char *av[])
 {
        int i, j;
        int tid[NUMTHREADS];
        int names[NUMTHREADS];
 
+       app_startup(av);
+
        sched_init ();
 
        for (i = 0; i < NUMTHREADS; i++) {
                names[i] = i;
                j = thread_create (testthread, (void *) &names[i]);
                if (j == RC_FAILURE)
-                       mon_printf ("schedtest: Failed to create thread %d\n", i);
+                       printf ("schedtest: Failed to create thread %d\n", i);
                if (j > 0) {
-                       mon_printf ("schedtest: Created thread with id %d, name %d\n",
+                       printf ("schedtest: Created thread with id %d, name %d\n",
                                                j, i);
                        tid[i] = j;
                }
        }
-       mon_printf ("schedtest: Threads created\n");
+       printf ("schedtest: Threads created\n");
 
-       mon_printf ("sched_test: function=0x%08x\n", testthread);
+       printf ("sched_test: function=0x%08x\n", (unsigned)testthread);
        for (i = 0; i < NUMTHREADS; i++) {
-               mon_printf ("schedtest: Setting thread %d runnable\n", tid[i]);
+               printf ("schedtest: Setting thread %d runnable\n", tid[i]);
                thread_start (tid[i]);
                thread_yield ();
        }
-       mon_printf ("schedtest: Started %d threads\n", NUMTHREADS);
+       printf ("schedtest: Started %d threads\n", NUMTHREADS);
 
        while (1) {
-               mon_printf ("schedtest: Waiting for threads to complete\n");
-               if (mon_tstc () && mon_getc () == 0x3) {
-                       mon_printf ("schedtest: Aborting threads...\n");
+               printf ("schedtest: Waiting for threads to complete\n");
+               if (tstc () && getc () == 0x3) {
+                       printf ("schedtest: Aborting threads...\n");
                        for (i = 0; i < NUMTHREADS; i++) {
-                               mon_printf ("schedtest: Deleting thread %d\n", tid[i]);
+                               printf ("schedtest: Deleting thread %d\n", tid[i]);
                                thread_delete (tid[i]);
                        }
                        return RC_SUCCESS;
@@ -139,11 +141,11 @@ int sched (bd_t * bd, int ac, char *av[])
                j = -1;
                i = thread_join (&j);
                if (i == RC_FAILURE) {
-                       mon_printf ("schedtest: No threads pending, "
+                       printf ("schedtest: No threads pending, "
                                                "exiting schedular test\n");
                        return RC_SUCCESS;
                }
-               mon_printf ("schedtest: thread is %d returned %d\n", i, j);
+               printf ("schedtest: thread is %d returned %d\n", i, j);
                thread_yield ();
        }
 
@@ -154,14 +156,14 @@ static int testthread (void *name)
 {
        int i;
 
-       mon_printf ("testthread: Begin executing thread, myname %d, &i=0x%08x\n",
-                        *(int *) name, &i);
+       printf ("testthread: Begin executing thread, myname %d, &i=0x%08x\n",
+               *(int *) name, (unsigned)&i);
 
-       mon_printf ("Thread %02d, i=%d\n", *(int *) name);
+       printf ("Thread %02d, i=%d\n", *(int *) name, i);
 
        for (i = 0; i < 0xffff * (*(int *) name + 1); i++) {
-               if (mon_tstc () && mon_getc () == 0x3) {
-                       mon_printf ("testthread: myname %d terminating.\n",
+               if (tstc () && getc () == 0x3) {
+                       printf ("testthread: myname %d terminating.\n",
                                                *(int *) name);
                        return *(int *) name + 1;
                }
@@ -170,7 +172,7 @@ static int testthread (void *name)
                        thread_yield ();
        }
 
-       mon_printf ("testthread: returning %d, i=0x%x\n",
+       printf ("testthread: returning %d, i=0x%x\n",
                                *(int *) name + 1, i);
 
        return *(int *) name + 1;
@@ -187,7 +189,7 @@ static void sched_init (void)
        current_tid = MASTER_THREAD;
        lthreads[current_tid].state = STATE_RUNNABLE;
        PDEBUG ("sched_init: master context = 0x%08x",
-                  lthreads[current_tid].context);
+               (unsigned)lthreads[current_tid].context);
        return;
 }
 
@@ -200,7 +202,8 @@ static void thread_yield (void)
 #define SWITCH(new)                                                    \
        if(lthreads[new].state == STATE_RUNNABLE) {                     \
                PDEBUG("thread_yield: %d match, ctx=0x%08x",            \
-                       new, lthreads[current_tid].context);            \
+                       new,                                            \
+                       (unsigned)lthreads[current_tid].context);       \
                if(setjmp(lthreads[current_tid].context) == 0) {        \
                        current_tid = new;                              \
                        PDEBUG("thread_yield: tid %d returns 0",        \
@@ -260,7 +263,7 @@ static int thread_delete (int id)
 static void thread_launcher (void)
 {
        PDEBUG ("thread_launcher: invoking func=0x%08x",
-                  lthreads[current_tid].func);
+                  (unsigned)lthreads[current_tid].func);
 
        lthreads[current_tid].retval =
                        lthreads[current_tid].func (lthreads[current_tid].arg);
@@ -269,7 +272,7 @@ static void thread_launcher (void)
 
        lthreads[current_tid].state = STATE_TERMINATED;
        thread_yield ();
-       mon_printf ("thread_launcher: should NEVER get here!\n");
+       printf ("thread_launcher: should NEVER get here!\n");
 
        return;
 }
@@ -287,7 +290,8 @@ static int thread_start (int id)
        if (setjmp (lthreads[current_tid].context) == 0) {
                lthreads[id].state = STATE_RUNNABLE;
                current_tid = id;
-               PDEBUG ("thread_start: to be stack=0%08x", lthreads[id].stack);
+               PDEBUG ("thread_start: to be stack=0%08x",
+                       (unsigned)lthreads[id].stack);
                setctxsp (&lthreads[id].stack[STK_SIZE]);
                thread_launcher ();
        }
@@ -297,7 +301,7 @@ static int thread_start (int id)
        return RC_SUCCESS;
 }
 
-#if 0                                                  /* not used so far */
+#if 0  /* not used so far */
 static int thread_stop (int id)
 {
        if (id <= MASTER_THREAD || id >= MAX_THREADS)
@@ -309,7 +313,7 @@ static int thread_stop (int id)
        lthreads[id].state = STATE_STOPPED;
        return RC_SUCCESS;
 }
-#endif                                                 /* not used so far */
+#endif /* not used so far */
 
 static int thread_join (int *ret)
 {
diff --git a/examples/stubs.c b/examples/stubs.c
new file mode 100644 (file)
index 0000000..c0ef650
--- /dev/null
@@ -0,0 +1,87 @@
+#include <exports.h>
+
+#if defined(CONFIG_I386)
+/*
+ * x86 does not have a dedicated register to store the pointer to
+ * the global_data. Thus the jump table address is stored in a
+ * global variable, but such approach does not allow for execution
+ * from flash memory. The global_data address is passed as argv[-1]
+ * to the application program.
+ */
+static void **jt;
+
+#define EXPORT_FUNC(x) \
+       asm volatile (                  \
+"      .globl " #x "\n"                \
+#x ":\n"                               \
+"      movl    %0, %%eax\n"            \
+"      movl    jt, %%ecx\n"            \
+"      jmp     *(%%ecx, %%eax)\n"      \
+       : : "i"(XF_ ## x * sizeof(void *)) : "eax", "ecx");
+#elif defined(CONFIG_PPC)
+/*
+ * r29 holds the pointer to the global_data, r11 is a call-clobbered
+ * register
+ */
+#define EXPORT_FUNC(x) \
+       asm volatile (                  \
+"      .globl " #x "\n"                \
+#x ":\n"                               \
+"      lwz     %%r11, %0(%%r29)\n"     \
+"      lwz     %%r11, %1(%%r11)\n"     \
+"      mtctr   %%r11\n"                \
+"      bctr\n"                         \
+       : : "i"(offsetof(gd_t, jt)), "i"(XF_ ## x * sizeof(void *)) : "r11");
+#elif defined(CONFIG_ARM)
+/*
+ * r8 holds the pointer to the global_data, ip is a call-clobbered
+ * register
+ */
+#define EXPORT_FUNC(x) \
+       asm volatile (                  \
+"      .globl " #x "\n"                \
+#x ":\n"                               \
+"      ldr     ip, [r8, %0]\n"         \
+"      ldr     pc, [ip, %1]\n"         \
+       : : "i"(offsetof(gd_t, jt)), "i"(XF_ ## x * sizeof(void *)) : "ip");
+#elif defined(CONFIG_MIPS)
+/*
+ * k0 ($26) holds the pointer to the global_data; t9 ($25) is a call-
+ * clobbered register that is also used to set gp ($26). Note that the
+ * jr instruction also executes the instruction immediately following
+ * it; however, GCC/mips generates an additional `nop' after each asm
+ * statement
+ */
+#define EXPORT_FUNC(x) \
+       asm volatile (                  \
+"      .globl " #x "\n"                \
+#x ":\n"                               \
+"      lw      $25, %0($26)\n"         \
+"      lw      $25, %1($25)\n"         \
+"      jr      $25\n"                  \
+       : : "i"(offsetof(gd_t, jt)), "i"(XF_ ## x * sizeof(void *)) : "t9");
+#else
+#error stubs definition missing for this architecture
+#endif
+
+/* This function is necessary to prevent the compiler from
+ * generating prologue/epilogue, preparing stack frame etc.
+ * The stub functions are special, they do not use the stack
+ * frame passed to them, but pass it intact to the actual
+ * implementation. On the other hand, asm() statements with
+ * arguments can be used only inside the functions (gcc limitation)
+ */
+static void __attribute__((unused)) dummy(void)
+{
+#include <_exports.h>
+}
+
+void app_startup(char **argv)
+{
+#if defined(CONFIG_I386)
+       /* x86 does not have a dedicated register for passing global_data */
+       jt = ((gd_t *)argv[-1])->jt;
+#endif
+}
+
+#undef EXPORT_FUNC
diff --git a/examples/syscall.S b/examples/syscall.S
deleted file mode 100644 (file)
index f319409..0000000
+++ /dev/null
@@ -1,114 +0,0 @@
-#include <ppc_asm.tmpl>
-#include <ppc_defs.h>
-#include <syscall.h>
-
-#ifdef CONFIG_ARM /* XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX */
-#warning ARM version not implemented yet /* XXXXXXXXXXXXXXXXXXXXXXXXXXXX */
-       .global mon_getc
-       .type   mon_getc,function
-mon_getc:
-       .global mon_tstc
-       .type   mon_tstc,function
-mon_tstc:
-       .global mon_putc
-       .type   mon_putc,function
-mon_putc:
-       .global mon_puts
-       .type   mon_puts,function
-mon_puts:
-       .global mon_printf
-       .type   mon_printf,function
-mon_printf:
-       .global mon_install_hdlr
-       .type   mon_install_hdlr,function
-mon_install_hdlr:
-       .global mon_free_hdlr
-       .type   mon_free_hdlr,function
-mon_free_hdlr:
-       .global mon_malloc
-       .type   mon_malloc,function
-mon_malloc:
-       .global mon_free
-       .type   mon_free,function
-mon_free:
-       @ args = 0, pretend = 0, frame = 0
-       @ frame_needed = 1, current_function_anonymous_args = 0
-       mov     ip, sp
-       stmfd   sp!, {fp, ip, lr, pc}
-       sub     fp, ip, #4
-       ldmea   fp, {fp, sp, pc}
-#elif defined(CONFIG_MIPS)/* XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX */
-#warning MIPS version not implemented yet
-       .global mon_getc
-       .type   mon_getc,function
-mon_getc:
-       .global mon_tstc
-       .type   mon_tstc,function
-mon_tstc:
-       .global mon_putc
-       .type   mon_putc,function
-mon_putc:
-       .global mon_puts
-       .type   mon_puts,function
-mon_puts:
-       .global mon_printf
-       .type   mon_printf,function
-mon_printf:
-       .global mon_install_hdlr
-       .type   mon_install_hdlr,function
-mon_install_hdlr:
-       .global mon_free_hdlr
-       .type   mon_free_hdlr,function
-mon_free_hdlr:
-       .global mon_malloc
-       .type   mon_malloc,function
-mon_malloc:
-       .global mon_free
-       .type   mon_free,function
-mon_free:
-
-#else
-
-#ifdef CONFIG_I386 /* XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX */
-#define SYMBOL_NAME(X)         X
-#define SYMBOL_NAME_LABEL(X)   X##:
-
-#define SYSCALL(name,n) \
-       .globl SYMBOL_NAME(name) ; \
-SYMBOL_NAME_LABEL(name)                 ; \
-       movl    $n, %eax ;\
-       pushl   %ebx; \
-       pushl   %ecx; \
-       int     $0x40 ;\
-
-
-#endif /* CONFIG_I386 */
-
-#ifdef CONFIG_PPC
-#define SYSCALL(name,n) \
-       .globl name             ; \
-name:                          ; \
-       li r0,n                 ; \
-       sc                      ; \
-       blr
-#endif /* CONFIG_PPC */
-
-       .text
-
-       /*
-        * Make sure these functions are in the same order as they
-        * appear in the "include/syscall.h" header file !!!
-        */
-
-       SYSCALL(mon_getc,SYSCALL_GETC)
-       SYSCALL(mon_tstc,SYSCALL_TSTC)
-       SYSCALL(mon_putc,SYSCALL_PUTC)
-       SYSCALL(mon_puts,SYSCALL_PUTS)
-       SYSCALL(mon_printf,SYSCALL_PRINTF)
-       SYSCALL(mon_install_hdlr,SYSCALL_INSTALL_HDLR)
-       SYSCALL(mon_free_hdlr,SYSCALL_FREE_HDLR)
-       SYSCALL(mon_malloc,SYSCALL_MALLOC)
-       SYSCALL(mon_free,SYSCALL_FREE)
-       SYSCALL(mon_udelay,SYSCALL_UDELAY)
-       SYSCALL(mon_get_timer,SYSCALL_GET_TIMER)
-#endif /* CONFIG_ARM XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX */
index bfe3d668d82c3361c77a8690d84f0acada515b67..037fdfdb3a811885987ffdb76c2dba285a046a60 100644 (file)
@@ -24,7 +24,7 @@
 #include <common.h>
 #include <commproc.h>
 #include <mpc8xx_irq.h>
-#include <syscall.h>
+#include <exports.h>
 
 #undef DEBUG
 
@@ -123,10 +123,12 @@ int timer (int argc, char *argv[])
        int c;
        int running;
 
+       app_startup(argv);
+
        /* Pointer to CPM Timer structure */
        cpmtimerp = &((immap_t *) gd->bd->bi_immr_base)->im_cpmtimer;
 
-       mon_printf ("TIMERS=0x%x\n", (unsigned) cpmtimerp);
+       printf ("TIMERS=0x%x\n", (unsigned) cpmtimerp);
 
        /* Initialize pointers depending on which timer we use */
        switch (TID_TIMER_ID) {
@@ -166,7 +168,7 @@ int timer (int argc, char *argv[])
 
        hwp->tgcrp = &cpmtimerp->cpmt_tgcr;
 
-       mon_printf ("Using timer %d\n"
+       printf ("Using timer %d\n"
                        "tgcr @ 0x%x, tmr @ 0x%x, trr @ 0x%x,"
                        " tcr @ 0x%x, tcn @ 0x%x, ter @ 0x%x\n",
                        TID_TIMER_ID + 1,
@@ -184,24 +186,24 @@ int timer (int argc, char *argv[])
        /* clear all events */
        *hwp->terp = (CPMT_EVENT_CAP | CPMT_EVENT_REF);
 
-       mon_printf (usage);
+       printf (usage);
        running = 0;
-       while ((c = mon_getc()) != 'q') {
+       while ((c = getc()) != 'q') {
            if (c == 'b') {
 
                setPeriod (hwp, TIMER_PERIOD);  /* Set period and start ticking */
 
                /* Install interrupt handler (enable timer in CIMR) */
-               mon_install_hdlr (hwp->cpm_vec, timer_handler, hwp);
+               install_hdlr (hwp->cpm_vec, timer_handler, hwp);
 
-               mon_printf ("Enabling timer\n");
+               printf ("Enabling timer\n");
 
                /* enable timer */
                *hwp->tgcrp |= (CPMT_GCR_RST << TID_TIMER_ID);
                running = 1;
 
 #ifdef DEBUG
-               mon_printf ("tgcr=0x%x, tmr=0x%x, trr=0x%x,"
+               printf ("tgcr=0x%x, tmr=0x%x, trr=0x%x,"
                        " tcr=0x%x, tcn=0x%x, ter=0x%x\n",
                                *hwp->tgcrp, *hwp->tmrp, *hwp->trrp,
                                *hwp->tcrp,  *hwp->tcnp, *hwp->terp
@@ -209,20 +211,20 @@ int timer (int argc, char *argv[])
 #endif
            } else if (c == 'e') {
 
-               mon_printf ("Stopping timer\n");
+               printf ("Stopping timer\n");
 
                *hwp->tgcrp &= ~(CPMT_GCR_MASK << TID_TIMER_ID);
                running = 0;
 
 #ifdef DEBUG
-               mon_printf ("tgcr=0x%x, tmr=0x%x, trr=0x%x,"
+               printf ("tgcr=0x%x, tmr=0x%x, trr=0x%x,"
                        " tcr=0x%x, tcn=0x%x, ter=0x%x\n",
                                *hwp->tgcrp, *hwp->tmrp, *hwp->trrp,
                                *hwp->tcrp,  *hwp->tcnp, *hwp->terp
                        );
 #endif
                /* Uninstall interrupt handler */
-               mon_free_hdlr (hwp->cpm_vec);
+               free_hdlr (hwp->cpm_vec);
 
            } else if (c == '?') {
 #ifdef DEBUG
@@ -230,13 +232,13 @@ int timer (int argc, char *argv[])
                sysconf8xx_t *siup = &((immap_t *) gd->bd->bi_immr_base)->im_siu_conf;
 #endif
 
-               mon_printf ("\ntgcr=0x%x, tmr=0x%x, trr=0x%x,"
+               printf ("\ntgcr=0x%x, tmr=0x%x, trr=0x%x,"
                        " tcr=0x%x, tcn=0x%x, ter=0x%x\n",
                                *hwp->tgcrp, *hwp->tmrp, *hwp->trrp,
                                *hwp->tcrp,  *hwp->tcnp, *hwp->terp
                        );
 #ifdef DEBUG
-               mon_printf ("SIUMCR=0x%08lx, SYPCR=0x%08lx,"
+               printf ("SIUMCR=0x%08lx, SYPCR=0x%08lx,"
                        " SIMASK=0x%08lx, SIPEND=0x%08lx\n",
                                siup->sc_siumcr,
                                siup->sc_sypcr,
@@ -244,21 +246,21 @@ int timer (int argc, char *argv[])
                                siup->sc_sipend
                        );
 
-               mon_printf ("CIMR=0x%08lx, CICR=0x%08lx, CIPR=0x%08lx\n",
+               printf ("CIMR=0x%08lx, CICR=0x%08lx, CIPR=0x%08lx\n",
                        cpm_icp->cpic_cimr,
                        cpm_icp->cpic_cicr,
                        cpm_icp->cpic_cipr
                        );
 #endif
            } else {
-               mon_printf ("\nEnter: q - quit, b - start timer, e - stop timer, ? - get status\n");
+               printf ("\nEnter: q - quit, b - start timer, e - stop timer, ? - get status\n");
            }
-           mon_printf (usage);
+           printf (usage);
        }
        if (running) {
-               mon_printf ("Stopping timer\n");
+               printf ("Stopping timer\n");
                *hwp->tgcrp &= ~(CPMT_GCR_MASK << TID_TIMER_ID);
-               mon_free_hdlr (hwp->cpm_vec);
+               free_hdlr (hwp->cpm_vec);
        }
 
        return (0);
@@ -274,11 +276,11 @@ void setPeriod (tid_8xx_cpmtimer_t *hwp, ulong interval)
        unsigned short prescaler;
        unsigned long ticks;
 
-       mon_printf ("Set interval %ld us\n", interval);
+       printf ("Set interval %ld us\n", interval);
 
        /* Warn if requesting longer period than possible */
        if (interval > CPMT_MAX_INTERVAL) {
-               mon_printf ("Truncate interval %ld to maximum (%d)\n",
+               printf ("Truncate interval %ld to maximum (%d)\n",
                                interval, CPMT_MAX_INTERVAL);
                interval = CPMT_MAX_INTERVAL;
        }
@@ -303,7 +305,7 @@ void setPeriod (tid_8xx_cpmtimer_t *hwp, ulong interval)
        }
 
 #ifdef DEBUG
-       mon_printf ("clock/%d, prescale factor %d, reference %ld, ticks %ld\n",
+       printf ("clock/%d, prescale factor %d, reference %ld, ticks %ld\n",
                        (ticks > CPMT_MAX_TICKS) ? CPMT_CLOCK_DIV : 1,
                        CPMT_PRESCALER,
                        (ticks / CPMT_PRESCALER),
@@ -321,7 +323,7 @@ void setPeriod (tid_8xx_cpmtimer_t *hwp, ulong interval)
        *hwp->trrp = (unsigned short) (ticks / CPMT_PRESCALER);
 
 #ifdef DEBUG
-       mon_printf ("tgcr=0x%x, tmr=0x%x, trr=0x%x,"
+       printf ("tgcr=0x%x, tmr=0x%x, trr=0x%x,"
                " tcr=0x%x, tcn=0x%x, ter=0x%x\n",
                        *hwp->tgcrp, *hwp->tmrp, *hwp->trrp,
                        *hwp->tcrp,  *hwp->tcnp, *hwp->terp
@@ -340,7 +342,7 @@ void timer_handler (void *arg)
        /* printf ("** TER1=%04x ** ", *hwp->terp); */
 
        /* just for demonstration */
-       mon_printf (".");
+       printf (".");
 
        /* clear all possible events: Ref. and Cap. */
        *hwp->terp = (CPMT_EVENT_CAP | CPMT_EVENT_REF);
diff --git a/include/_exports.h b/include/_exports.h
new file mode 100644 (file)
index 0000000..a4e1561
--- /dev/null
@@ -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)
index c804768d7a1a4e7bd9856ac967fe1dfd4144350f..b5878cae9a1583f230ea34ac57496bbf3f9f1bd2 100644 (file)
@@ -51,6 +51,7 @@ typedef       struct  global_data {
        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 @@ typedef       struct  global_data {
 #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 */
index 324b4357f88fe20c337518bfd4e74c87d8dec082..4ffbc074bc77922590248e24cd07a61cf3f5a46a 100644 (file)
@@ -45,6 +45,7 @@ typedef       struct {
        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;
 
 /*
index 72d0cb0749e30cc00585cb5523e6da5473790e4f..3ecf555501a8d61e477e23ff5db7bf5302236106 100644 (file)
@@ -45,6 +45,7 @@ typedef       struct  global_data {
        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 @@ typedef       struct  global_data {
 #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 */
index 4253020cb3fa1a7debedb4e97c4c6d40ec89907f..8ebaa17a29f88a1b7f2b8cee476ee330b0c4da26 100644 (file)
@@ -88,6 +88,7 @@ typedef       struct  global_data {
 #ifdef CONFIG_LWMON
        unsigned long kbd_status;
 #endif
+       void            **jt;           /* jump table */
 } gd_t;
 
 /*
@@ -97,7 +98,7 @@ typedef       struct  global_data {
 #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 \
index 9d90e7f39331eae6f7cf7186216bc3d77fc340ef..d823de910fb748019d6c415510ddb499a482cf68 100644 (file)
 #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_ */
index 577826c1cf55f3204fefff909f865bc8b2926362..8b8b0f58e7732a1c8b0f9af087f5d51ffd079f7c 100644 (file)
@@ -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                 */
 
index 03db8d7a40c028f7e7efa9b7bc4c2490e19f7640..5158f97ece3774105087e557a5919b387bfce289 100644 (file)
@@ -207,6 +207,9 @@ void    pciinfo       (int, int);
 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 (ulong, const unsigned char *, uint);
 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   */
index 8d7930765acaa14941945087d0d9dc5ffc997f33..49b830b86f025451d9950a274fde7ee2bd824b45 100644 (file)
@@ -67,6 +67,7 @@
                        CFG_CMD_DATE    | \
                        CFG_CMD_ELF     | \
                        CFG_CMD_MII     | \
+                       CFG_CMD_PING    | \
                        CFG_CMD_SAVES   | \
                        CFG_CMD_BSP     )
 
index 60e5a9ac7350de1574de03880c1329c520625acb..d9f8be8eed1c01318e38ca522e08a08f00d87ffa 100644 (file)
@@ -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) */
index 6c37208c058ab85a89c2c706748b30e200e4213c..c58e990a19d2eb9135ee8bb0c11825e254f85764 100644 (file)
 #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 |\
index c7a63e989b2630d372925982e2e06f53042501e2..be6e2f9d7179603f0961999a3e461b17af050bb7 100644 (file)
@@ -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           */
 
 #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>
index de82e3e48d7b2786650027fa2adbbdb93f970591..a84f0dd358281915b3e98a8ca230c89eabc3da91 100644 (file)
 
 /*
  * 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
  */
 
 /*
 #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     */
 
 
 /* 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
  */
 #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 (file)
index 0000000..b45a466
--- /dev/null
@@ -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
index 155617eba85f5ee9826837bffbd2647f96e00728..b93d1041f9fffbf105f43d2defcf0eb7513128cc 100644 (file)
@@ -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)
  * "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                */
index 0f6366868bb1b83dfe1bc7aa3871649256cbeadf..130e71554f7c3ff541c5c81c57728051cbf6feef 100644 (file)
@@ -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 @@ unsigned long post_time_ms (unsigned long base);
 
 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 (file)
index 9b9be0d..0000000
+++ /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
index 5192e649dd7f29555ab6faaaed39623efd5bdaa0..eebf5e40dd74250236d52dd289e94fe71891fd78 100644 (file)
@@ -29,7 +29,6 @@
 #include <command.h>
 #include <malloc.h>
 #include <devices.h>
-#include <syscall.h>
 #include <version.h>
 #include <net.h>
 
@@ -212,7 +211,7 @@ void start_armboot (void)
 
        /* Pointer is writable since we allocated a register for it */
        gd = &gd_data;
-       memset (gd, 0, sizeof (gd_t));
+       memset ((void *)gd, 0, sizeof (gd_t));
        gd->bd = &bd_data;
        memset (gd->bd, 0, sizeof (bd_t));
 
@@ -287,10 +286,7 @@ void start_armboot (void)
 
        devices_init ();      /* get the devices list going. */
 
-       /* Syscalls are not implemented for ARM. But allocating
-        * this allows the console_init routines to work without #ifdefs
-        */
-       syscall_tbl = (void **) malloc (NR_SYSCALLS * sizeof (void *));
+       jumptable_init ();
 
        console_init_r ();      /* fully init console as a device */
 
index a53fa991d004a3f04fcb67b28c66afaf69c74fa8..b26d3d5eb1155880e56edac9b7de7dffa3af7ab6 100644 (file)
@@ -34,7 +34,6 @@
 #include <devices.h>
 #include <version.h>
 #include <malloc.h>
-#include <syscall.h>
 #include <net.h>
 #include <ide.h>
 #include <asm/u-boot-i386.h>
@@ -129,16 +128,6 @@ char *strmhz (char *buf, long hz)
  * or dropped completely,
  * but let's get it working (again) first...
  */
-static void syscalls_init (void)
-{
-       syscall_tbl[SYSCALL_MALLOC] = (void *) malloc;
-       syscall_tbl[SYSCALL_FREE] = (void *) free;
-
-       syscall_tbl[SYSCALL_INSTALL_HDLR] = (void *) irq_install_handler;
-       syscall_tbl[SYSCALL_FREE_HDLR] = (void *) irq_free_handler;
-
-}
-
 static int init_baudrate (void)
 {
        DECLARE_GLOBAL_DATA_PTR;
@@ -316,13 +305,10 @@ void start_i386boot (void)
 
        devices_init ();
 
-       /* allocate syscalls table (console_init_r will fill it in */
-       syscall_tbl = (void **) malloc (NR_SYSCALLS * sizeof (void *));
-       memset(syscall_tbl, 0, NR_SYSCALLS * sizeof (void *));
+       jumptable_init ();
 
        /* Initialize the console (after the relocation and devices init) */
        console_init_r();
-       syscalls_init();
 
 #ifdef CONFIG_MISC_INIT_R
        /* miscellaneous platform dependent initialisations */
index 11e5011e70ce9f0f6be4624b47d70b70abb478fe..3c8a2d2d24287510d005e400708afce1b4c9f742 100644 (file)
@@ -25,7 +25,6 @@
 #include <command.h>
 #include <malloc.h>
 #include <devices.h>
-#include <syscall.h>
 #include <version.h>
 #include <net.h>
 #include <environment.h>
@@ -189,7 +188,7 @@ void board_init_f(ulong bootflag)
                /* Pointer is writable since we allocated a register for it.
                 */
        gd = &gd_data;
-       memset (gd, 0, sizeof (gd_t));
+       memset ((void *)gd, 0, sizeof (gd_t));
 
        for (init_fnc_ptr = init_sequence; *init_fnc_ptr; ++init_fnc_ptr) {
                if ((*init_fnc_ptr)() != 0) {
@@ -278,7 +277,7 @@ void board_init_f(ulong bootflag)
        bd->bi_memsize  = gd->ram_size;         /* size  of  DRAM memory in bytes */
        bd->bi_baudrate = gd->baudrate;         /* Console Baudrate */
 
-       memcpy (id, gd, sizeof (gd_t));
+       memcpy (id, (void *)gd, sizeof (gd_t));
 
        /* On the purple board we copy the code in a special way
         * in order to solve flash problems
@@ -393,8 +392,7 @@ void board_init_r (gd_t *id, ulong dest_addr)
        /* Initialize devices */
        devices_init ();
 
-       /* allocate syscalls table (console_init_r will fill it in */
-       syscall_tbl = (void **) malloc (NR_SYSCALLS * sizeof (void *));
+       jumptable_init ();
 
        /* Initialize the console (after the relocation and devices init) */
        console_init_r ();
index 278357d505534b2317219a6de0bbb9f3bfaf717b..977d03ec7b680c776385c010c1851d40957cba7d 100644 (file)
@@ -26,7 +26,6 @@
 #include <command.h>
 #include <malloc.h>
 #include <devices.h>
-#include <syscall.h>
 #ifdef CONFIG_8xx
 #include <mpc8xx.h>
 #endif
@@ -156,37 +155,6 @@ char *strmhz (char *buf, long hz)
        return (buf);
 }
 
-static void syscalls_init (void)
-{
-       ulong *addr;
-
-       syscall_tbl[SYSCALL_MALLOC] = (void *) malloc;
-       syscall_tbl[SYSCALL_FREE] = (void *) free;
-
-       syscall_tbl[SYSCALL_INSTALL_HDLR] = (void *) irq_install_handler;
-       syscall_tbl[SYSCALL_FREE_HDLR] = (void *) irq_free_handler;
-       syscall_tbl[SYSCALL_GET_TIMER] = (void *)get_timer;
-       syscall_tbl[SYSCALL_UDELAY] = (void *)udelay;
-
-       addr = (ulong *) 0xc00;         /* syscall ISR addr */
-
-       /* patch ISR code */
-       *addr++ |= (ulong) syscall_tbl >> 16;
-       *addr++ |= (ulong) syscall_tbl & 0xFFFF;
-       *addr++ |= NR_SYSCALLS >> 16;
-       *addr++ |= NR_SYSCALLS & 0xFFFF;
-
-#ifndef CONFIG_5XX
-       flush_cache (0x0C00, 0x10);
-#endif
-       /* Initialize syscalls stack pointer                                 */
-       addr = (ulong *) 0xCFC;
-       *addr = (ulong)addr;
-#ifndef CONFIG_5xx
-       flush_cache ((ulong)addr, 0x10);
-#endif
-}
-
 /*
  * All attempts to come up with a "common" initialization sequence
  * that works for all boards and architectures failed: some of the
@@ -543,7 +511,7 @@ void board_init_f (ulong bootflag)
 
        WATCHDOG_RESET();
 
-       memcpy (id, gd, sizeof (gd_t));
+       memcpy (id, (void *)gd, sizeof (gd_t));
 
        relocate_code (addr_sp, id, addr);
 
@@ -798,13 +766,11 @@ void board_init_r (gd_t *id, ulong dest_addr)
        /* Initialize devices */
        devices_init ();
 
-       /* allocate syscalls table (console_init_r will fill it in */
-       syscall_tbl = (void **) malloc (NR_SYSCALLS * sizeof (void *));
+       /* Initialize the jump table for applications */
+       jumptable_init ();
 
        /* Initialize the console (after the relocation and devices init) */
        console_init_r ();
-/** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** **/
-       syscalls_init ();
 
 #if defined(CONFIG_CCM)                || \
     defined(CONFIG_COGENT)     || \
index 0474f1f75b11e735f6aa6607e0525207583323c6..28dd5f79a5968ea774acd83e95c63e384b38fb6d 100644 (file)
@@ -64,18 +64,27 @@ void post_bootmode_init (void)
 {
        DECLARE_GLOBAL_DATA_PTR;
        int bootmode = post_bootmode_get (0);
-
-       if (post_hotkeys_pressed(gd) && !(bootmode & POST_POWERTEST)) {
-               bootmode = POST_SLOWTEST;
+       int newword;
+       
+       if (post_hotkeys_pressed() && !(bootmode & POST_POWERTEST)) {
+               newword = BOOTMODE_MAGIC | POST_SLOWTEST;
        } else if (bootmode == 0) {
-               bootmode = POST_POWERON;
+               newword = BOOTMODE_MAGIC | POST_POWERON;
        } else if (bootmode == POST_POWERON || bootmode == POST_SLOWTEST) {
-               bootmode = POST_NORMAL;
+               newword = BOOTMODE_MAGIC | POST_NORMAL;
        } else {
-               return;
+               /* Use old value */
+               newword = post_word_load () & ~POST_COLDBOOT;
        }
 
-       post_word_store (BOOTMODE_MAGIC | bootmode);
+       if (bootmode == 0)
+       {
+               /* We are booting after power-on */
+               newword |= POST_COLDBOOT;
+       }
+
+       post_word_store (newword);
+
        /* Reset activity record */
        gd->post_log_word = 0;
 }
@@ -89,7 +98,7 @@ int post_bootmode_get (unsigned int *last_test)
                return 0;
        }
 
-       bootmode = word & 0xFF;
+       bootmode = word & 0x7F;
 
        if (last_test && (bootmode & POST_POWERTEST)) {
                *last_test = (word >> 8) & 0xFF;
index 21b11ca409845d6f1f1dd86b2664bc3ecc3851c4..3fa1912416491084712d04da4e8c254cbfa2d3b2 100644 (file)
@@ -31,9 +31,9 @@ SRC     = update.c flash.c flash_hw.c utils.c cmd_flash.c string.c ctype.c dummy
 ASRC    = ppcstring.S
 OBJS   = $(SRC:.c=.o) $(ASRC:.S=.o)
 
-LIB    = $(TOPDIR)/examples/libsyscall.a
-LIBAOBJS= $(TOPDIR)/examples/syscall.o
-LIBCOBJS=
+LIB    = $(TOPDIR)/examples/libstubs.a
+LIBAOBJS=
+LIBCOBJS= $(TOPDIR)/examples/stubs.o
 LIBOBJS        = $(LIBAOBJS) $(LIBCOBJS)
 
 CPPFLAGS += -I$(TOPDIR) -I$(TOPDIR)/board/MAI/AmigaOneG3SE
index 573546dbe95970e4a0430137e0d2294cedf55a7d..c0e57729f7d280e43b9b5beef292c9cab4581d7b 100644 (file)
@@ -97,7 +97,7 @@ int do_flinfo (cmd_tbl_t *cmdtp, bd_t *bd, int flag, int argc, char *argv[])
 
        if (argc == 1) {        /* print info for all FLASH banks */
                for (bank=0; bank <CFG_MAX_FLASH_BANKS; ++bank) {
-                       mon_printf ("\nBank # %ld: ", bank+1);
+                       printf ("\nBank # %ld: ", bank+1);
 
                        flash_print_info (&flash_info[bank]);
                }
@@ -106,11 +106,11 @@ int do_flinfo (cmd_tbl_t *cmdtp, bd_t *bd, int flag, int argc, char *argv[])
 
        bank = simple_strtoul(argv[1], NULL, 16);
        if ((bank < 1) || (bank > CFG_MAX_FLASH_BANKS)) {
-               mon_printf ("Only FLASH Banks # 1 ... # %d supported\n",
+               printf ("Only FLASH Banks # 1 ... # %d supported\n",
                        CFG_MAX_FLASH_BANKS);
                return 1;
        }
-       mon_printf ("\nBank # %ld: ", bank);
+       printf ("\nBank # %ld: ", bank);
        flash_print_info (&flash_info[bank-1]);
        return 0;
 }
@@ -122,13 +122,13 @@ int do_flerase(cmd_tbl_t *cmdtp, bd_t *bd, int flag, int argc, char *argv[])
        int rcode = 0;
 
        if (argc < 2) {
-               mon_printf ("Usage:\n%s\n", cmdtp->usage);
+               printf ("Usage:\n%s\n", cmdtp->usage);
                return 1;
        }
 
        if (strcmp(argv[1], "all") == 0) {
                for (bank=1; bank<=CFG_MAX_FLASH_BANKS; ++bank) {
-                       mon_printf ("Erase Flash Bank # %ld ", bank);
+                       printf ("Erase Flash Bank # %ld ", bank);
                        info = &flash_info[bank-1];
                        rcode = flash_erase (info, 0, info->sector_count-1);
                }
@@ -137,28 +137,28 @@ int do_flerase(cmd_tbl_t *cmdtp, bd_t *bd, int flag, int argc, char *argv[])
 
        if ((n = abbrev_spec(argv[1], &info, &sect_first, &sect_last)) != 0) {
                if (n < 0) {
-                       mon_printf("Bad sector specification\n");
+                       printf("Bad sector specification\n");
                        return 1;
                }
-               mon_printf ("Erase Flash Sectors %d-%d in Bank # %d ",
+               printf ("Erase Flash Sectors %d-%d in Bank # %d ",
                        sect_first, sect_last, (info-flash_info)+1);
                rcode = flash_erase(info, sect_first, sect_last);
                return rcode;
        }
 
        if (argc != 3) {
-               mon_printf ("Usage:\n%s\n", cmdtp->usage);
+               printf ("Usage:\n%s\n", cmdtp->usage);
                return 1;
        }
 
        if (strcmp(argv[1], "bank") == 0) {
                bank = simple_strtoul(argv[2], NULL, 16);
                if ((bank < 1) || (bank > CFG_MAX_FLASH_BANKS)) {
-                       mon_printf ("Only FLASH Banks # 1 ... # %d supported\n",
+                       printf ("Only FLASH Banks # 1 ... # %d supported\n",
                                CFG_MAX_FLASH_BANKS);
                        return 1;
                }
-               mon_printf ("Erase Flash Bank # %ld ", bank);
+               printf ("Erase Flash Bank # %ld ", bank);
                info = &flash_info[bank-1];
                rcode = flash_erase (info, 0, info->sector_count-1);
                return rcode;
@@ -168,11 +168,11 @@ int do_flerase(cmd_tbl_t *cmdtp, bd_t *bd, int flag, int argc, char *argv[])
        addr_last  = simple_strtoul(argv[2], NULL, 16);
 
        if (addr_first >= addr_last) {
-               mon_printf ("Usage:\n%s\n", cmdtp->usage);
+               printf ("Usage:\n%s\n", cmdtp->usage);
                return 1;
        }
 
-       mon_printf ("Erase Flash from 0x%08lx to 0x%08lx ", addr_first, addr_last);
+       printf ("Erase Flash from 0x%08lx to 0x%08lx ", addr_first, addr_last);
        rcode = flash_sect_erase(addr_first, addr_last);
        return rcode;
 }
@@ -226,9 +226,9 @@ int flash_sect_erase (ulong addr_first, ulong addr_last)
                }
        }
        if (erased) {
-           /*  mon_printf ("Erased %d sectors\n", erased); */
+           /*  printf ("Erased %d sectors\n", erased); */
        } else {
-               mon_printf ("Error: start and/or end address"
+               printf ("Error: start and/or end address"
                        " not on sector boundary\n");
                rcode = 1;
        }
@@ -244,7 +244,7 @@ int do_protect(cmd_tbl_t *cmdtp, bd_t *bd, int flag, int argc, char *argv[])
        int rcode = 0;
 
        if (argc < 3) {
-               mon_printf ("Usage:\n%s\n", cmdtp->usage);
+               printf ("Usage:\n%s\n", cmdtp->usage);
                return 1;
        }
 
@@ -253,7 +253,7 @@ int do_protect(cmd_tbl_t *cmdtp, bd_t *bd, int flag, int argc, char *argv[])
        else if (strcmp(argv[1], "on") == 0)
                p = 1;
        else {
-               mon_printf ("Usage:\n%s\n", cmdtp->usage);
+               printf ("Usage:\n%s\n", cmdtp->usage);
                return 1;
        }
 
@@ -263,7 +263,7 @@ int do_protect(cmd_tbl_t *cmdtp, bd_t *bd, int flag, int argc, char *argv[])
                        if (info->flash_id == FLASH_UNKNOWN) {
                                continue;
                        }
-                       /*mon_printf ("%sProtect Flash Bank # %ld\n", */
+                       /*printf ("%sProtect Flash Bank # %ld\n", */
                        /*      p ? "" : "Un-", bank); */
 
                        for (i=0; i<info->sector_count; ++i) {
@@ -286,10 +286,10 @@ int do_protect(cmd_tbl_t *cmdtp, bd_t *bd, int flag, int argc, char *argv[])
 
        if ((n = abbrev_spec(argv[2], &info, &sect_first, &sect_last)) != 0) {
                if (n < 0) {
-                       mon_printf("Bad sector specification\n");
+                       printf("Bad sector specification\n");
                        return 1;
                }
-               /*mon_printf("%sProtect Flash Sectors %d-%d in Bank # %d\n", */
+               /*printf("%sProtect Flash Sectors %d-%d in Bank # %d\n", */
                /*      p ? "" : "Un-", sect_first, sect_last, */
                /*      (info-flash_info)+1); */
                for (i = sect_first; i <= sect_last; i++) {
@@ -310,23 +310,23 @@ int do_protect(cmd_tbl_t *cmdtp, bd_t *bd, int flag, int argc, char *argv[])
        }
 
        if (argc != 4) {
-               mon_printf ("Usage:\n%s\n", cmdtp->usage);
+               printf ("Usage:\n%s\n", cmdtp->usage);
                return 1;
        }
 
        if (strcmp(argv[2], "bank") == 0) {
                bank = simple_strtoul(argv[3], NULL, 16);
                if ((bank < 1) || (bank > CFG_MAX_FLASH_BANKS)) {
-                       mon_printf ("Only FLASH Banks # 1 ... # %d supported\n",
+                       printf ("Only FLASH Banks # 1 ... # %d supported\n",
                                CFG_MAX_FLASH_BANKS);
                        return 1;
                }
-               mon_printf ("%sProtect Flash Bank # %ld\n",
+               printf ("%sProtect Flash Bank # %ld\n",
                        p ? "" : "Un-", bank);
                info = &flash_info[bank-1];
 
                if (info->flash_id == FLASH_UNKNOWN) {
-                       mon_printf ("missing or unknown FLASH type\n");
+                       printf ("missing or unknown FLASH type\n");
                        return 1;
                }
                for (i=0; i<info->sector_count; ++i) {
@@ -350,7 +350,7 @@ int do_protect(cmd_tbl_t *cmdtp, bd_t *bd, int flag, int argc, char *argv[])
        addr_last  = simple_strtoul(argv[3], NULL, 16);
 
        if (addr_first >= addr_last) {
-               mon_printf ("Usage:\n%s\n", cmdtp->usage);
+               printf ("Usage:\n%s\n", cmdtp->usage);
                return 1;
        }
        rcode = flash_sect_protect (p, addr_first, addr_last);
@@ -417,10 +417,10 @@ int flash_sect_protect (int p, ulong addr_first, ulong addr_last)
 
        }
        if (protected) {
-           /*  mon_printf ("%sProtected %d sectors\n", */
+           /*  printf ("%sProtected %d sectors\n", */
            /*  p ? "" : "Un-", protected); */
        } else {
-           mon_printf ("Error: start and/or end address"
+           printf ("Error: start and/or end address"
                        " not on sector boundary\n");
                rcode = 1;
        }
index d2e11d21248f562d9ea8fccc94046ef266e326d5..99b17195e571d0f425773b57b0fc1e7127e867b1 100644 (file)
@@ -157,9 +157,9 @@ flash_write (uchar *src, ulong addr, ulong cnt)
                }
        }
 
-       mon_printf("\rWriting ");
-       for (j=0; j<20; j++) mon_putc(177);
-       mon_printf("\rWriting ");
+       printf("\rWriting ");
+       for (j=0; j<20; j++) putc(177);
+       printf("\rWriting ");
 
        /* finally write data to flash */
        for (info = info_first; info <= info_last && cnt>0; ++info) {
index 1d782c61e02e408dbd14dc5d783c4880c1ec3383..62d1083c4686eecf4e57c748c4613f0e27ab00b8 100644 (file)
@@ -33,7 +33,7 @@
 #undef DEBUG_FLASH
 
 #ifdef DEBUG_FLASH
-#define DEBUGF(fmt,args...) mon_printf(fmt ,##args)
+#define DEBUGF(fmt,args...) printf(fmt ,##args)
 #else
 #define DEBUGF(fmt,args...)
 #endif
@@ -132,7 +132,7 @@ unsigned long flash_init (void)
 #endif
 
        } else {
-               mon_printf ("Warning: the BOOT Flash is not initialised !");
+               printf ("Warning: the BOOT Flash is not initialised !");
        }
 
        flash_to_mem();
@@ -287,7 +287,7 @@ static ulong flash_get_size (ulong addr, flash_info_t *info)
        }
 
        if (info->sector_count > CFG_MAX_FLASH_SECT) {
-               mon_printf ("** ERROR: sector count %d > max (%d) **\n",
+               printf ("** ERROR: sector count %d > max (%d) **\n",
                        info->sector_count, CFG_MAX_FLASH_SECT);
                info->sector_count = CFG_MAX_FLASH_SECT;
        }
@@ -346,16 +346,16 @@ int flash_erase (flash_info_t *info, int s_first, int s_last)
 
        if (s_first < 0 || s_first > s_last) {
                if (info->flash_id == FLASH_UNKNOWN) {
-                       mon_printf ("- missing\n");
+                       printf ("- missing\n");
                } else {
-                       mon_printf ("- no sectors to erase\n");
+                       printf ("- no sectors to erase\n");
                }
                flash_to_mem();
                return 1;
        }
 
        if (info->flash_id == FLASH_UNKNOWN) {
-               mon_printf ("Can't erase unknown flash type %08lx - aborted\n",
+               printf ("Can't erase unknown flash type %08lx - aborted\n",
                        info->flash_id);
                flash_to_mem();
                return 1;
@@ -369,10 +369,10 @@ int flash_erase (flash_info_t *info, int s_first, int s_last)
        }
 
        if (prot) {
-               mon_printf ("- Warning: %d protected sectors will not be erased!\n",
+               printf ("- Warning: %d protected sectors will not be erased!\n",
                        prot);
        } else {
-               mon_printf ("");
+               printf ("");
        }
 
        l_sect = -1;
@@ -406,7 +406,7 @@ int flash_erase (flash_info_t *info, int s_first, int s_last)
                enable_interrupts();
 
        /* wait at least 80us - let's wait 1 ms */
-       mon_udelay (1000);
+       udelay (1000);
 
        /*
         * We wait for the last triggered sector
@@ -414,22 +414,22 @@ int flash_erase (flash_info_t *info, int s_first, int s_last)
        if (l_sect < 0)
                goto DONE;
 
-       start = mon_get_timer (0);
+       start = get_timer (0);
        last  = start;
        addr = info->start[l_sect];
 
        DEBUGF ("Start erase timeout: %d\n", CFG_FLASH_ERASE_TOUT);
 
        while ((in8(addr) & 0x80) != 0x80) {
-               if ((now = mon_get_timer(start)) > CFG_FLASH_ERASE_TOUT) {
-                       mon_printf ("Timeout\n");
+               if ((now = get_timer(start)) > CFG_FLASH_ERASE_TOUT) {
+                       printf ("Timeout\n");
                        flash_reset (info->start[0]);
                        flash_to_mem();
                        return 1;
                }
                /* show that we're waiting */
                if ((now - last) > 1000) {      /* every second */
-                       mon_putc ('.');
+                       putc ('.');
                        last = now;
                }
                iobarrier_rw();
@@ -440,7 +440,7 @@ DONE:
        flash_reset (info->start[0]);
        flash_to_mem();
 
-       mon_printf (" done\n");
+       printf (" done\n");
        return 0;
 }
 
@@ -484,7 +484,7 @@ int write_buff (flash_info_t *info, uchar *src, ulong addr, ulong cnt)
                wp += 4;
        }
 
-       mon_putc(219);
+       putc(219);
 
        /*
         * handle word aligned part
@@ -492,7 +492,7 @@ int write_buff (flash_info_t *info, uchar *src, ulong addr, ulong cnt)
        while (cnt >= 4) {
            if (out_cnt>26214)
            {
-               mon_putc(219);
+               putc(219);
                out_cnt = 0;
            }
            data = 0;
@@ -568,9 +568,9 @@ static int write_word (flash_info_t *info, ulong dest, ulong data)
                        enable_interrupts();
 
                /* data polling for D7 */
-               start = mon_get_timer (0);
+               start = get_timer (0);
                while ((in8(dest+i) & 0x80) != (data_ch[i] & 0x80)) {
-                       if (mon_get_timer(start) > CFG_FLASH_WRITE_TOUT) {
+                       if (get_timer(start) > CFG_FLASH_WRITE_TOUT) {
                                flash_reset (addr);
                                flash_to_mem();
                                return (1);
@@ -600,60 +600,60 @@ void flash_print_info (flash_info_t *info)
        int i;
 
        if (info->flash_id == FLASH_UNKNOWN) {
-               mon_printf ("missing or unknown FLASH type\n");
+               printf ("missing or unknown FLASH type\n");
                return;
        }
 
        switch (info->flash_id & FLASH_VENDMASK) {
-       case FLASH_MAN_AMD:     mon_printf ("AMD ");            break;
-       case FLASH_MAN_FUJ:     mon_printf ("FUJITSU ");                break;
-       case FLASH_MAN_BM:      mon_printf ("BRIGHT MICRO ");   break;
-       case FLASH_MAN_STM:     mon_printf ("SGS THOMSON ");    break;
-       default:                mon_printf ("Unknown Vendor "); break;
+       case FLASH_MAN_AMD:     printf ("AMD ");                break;
+       case FLASH_MAN_FUJ:     printf ("FUJITSU ");            break;
+       case FLASH_MAN_BM:      printf ("BRIGHT MICRO ");       break;
+       case FLASH_MAN_STM:     printf ("SGS THOMSON ");        break;
+       default:                printf ("Unknown Vendor ");     break;
        }
 
        switch (info->flash_id & FLASH_TYPEMASK) {
-       case FLASH_AM040:       mon_printf ("29F040 or 29LV040 (4 Mbit, uniform sectors)\n");
+       case FLASH_AM040:       printf ("29F040 or 29LV040 (4 Mbit, uniform sectors)\n");
                                break;
-       case FLASH_AM400B:      mon_printf ("AM29LV400B (4 Mbit, bottom boot sect)\n");
+       case FLASH_AM400B:      printf ("AM29LV400B (4 Mbit, bottom boot sect)\n");
                                break;
-       case FLASH_AM400T:      mon_printf ("AM29LV400T (4 Mbit, top boot sector)\n");
+       case FLASH_AM400T:      printf ("AM29LV400T (4 Mbit, top boot sector)\n");
                                break;
-       case FLASH_AM800B:      mon_printf ("AM29LV800B (8 Mbit, bottom boot sect)\n");
+       case FLASH_AM800B:      printf ("AM29LV800B (8 Mbit, bottom boot sect)\n");
                                break;
-       case FLASH_AM800T:      mon_printf ("AM29LV800T (8 Mbit, top boot sector)\n");
+       case FLASH_AM800T:      printf ("AM29LV800T (8 Mbit, top boot sector)\n");
                                break;
-       case FLASH_AM160B:      mon_printf ("AM29LV160B (16 Mbit, bottom boot sect)\n");
+       case FLASH_AM160B:      printf ("AM29LV160B (16 Mbit, bottom boot sect)\n");
                                break;
-       case FLASH_AM160T:      mon_printf ("AM29LV160T (16 Mbit, top boot sector)\n");
+       case FLASH_AM160T:      printf ("AM29LV160T (16 Mbit, top boot sector)\n");
                                break;
-       case FLASH_AM320B:      mon_printf ("AM29LV320B (32 Mbit, bottom boot sect)\n");
+       case FLASH_AM320B:      printf ("AM29LV320B (32 Mbit, bottom boot sect)\n");
                                break;
-       case FLASH_AM320T:      mon_printf ("AM29LV320T (32 Mbit, top boot sector)\n");
+       case FLASH_AM320T:      printf ("AM29LV320T (32 Mbit, top boot sector)\n");
                                break;
-       default:                mon_printf ("Unknown Chip Type\n");
+       default:                printf ("Unknown Chip Type\n");
                                break;
        }
 
        if (info->size % 0x100000 == 0) {
-               mon_printf ("  Size: %ld MB in %d Sectors\n",
+               printf ("  Size: %ld MB in %d Sectors\n",
                        info->size / 0x100000, info->sector_count);
        } else if (info->size % 0x400 == 0) {
-               mon_printf ("  Size: %ld KB in %d Sectors\n",
+               printf ("  Size: %ld KB in %d Sectors\n",
                        info->size / 0x400, info->sector_count);
        } else {
-               mon_printf ("  Size: %ld B in %d Sectors\n",
+               printf ("  Size: %ld B in %d Sectors\n",
                        info->size, info->sector_count);
        }
 
-       mon_printf ("  Sector Start Addresses:");
+       printf ("  Sector Start Addresses:");
        for (i=0; i<info->sector_count; ++i) {
                if ((i % 5) == 0)
-                       mon_printf ("\n   ");
-               mon_printf (" %08lX%s",
+                       printf ("\n   ");
+               printf (" %08lX%s",
                        info->start[i],
                        info->protect[i] ? " (RO)" : "     "
                );
        }
-       mon_printf ("\n");
+       printf ("\n");
 }
index 8a8edec5cf662b517dfea235d8a1534840684916..954fb01e209790f759e34494bcc176054cc5cc1e 100644 (file)
@@ -164,7 +164,7 @@ char * strdup(const char *s)
        char *new;
 
        if ((s == NULL) ||
-           ((new = mon_malloc (strlen(s) + 1)) == NULL) ) {
+           ((new = malloc (strlen(s) + 1)) == NULL) ) {
                return NULL;
        }
 
index 26204fb632512c2f2a961575882f52a69505c7d5..b6d50d5be070d6ba552315a21d7f58a02e0afd33 100644 (file)
@@ -1,5 +1,5 @@
 #include <common.h>
-#include <syscall.h>
+#include <exports.h>
 
 extern unsigned long __dummy;
 void do_reset (void);
@@ -8,14 +8,14 @@ void do_updater(void);
 void _main(void)
 {
     int i;
-    mon_printf("U-Boot Firmware Updater\n\n\n");
-    mon_printf("****************************************************\n"
+    printf("U-Boot Firmware Updater\n\n\n");
+    printf("****************************************************\n"
               "*  ATTENTION!! PLEASE READ THIS NOTICE CAREFULLY!  *\n"
               "****************************************************\n\n"
               "This program  will update your computer's  firmware.\n"
               "Do NOT  remove the disk,  reset the  machine,  or do\n"
               "anything that  might disrupt functionality.  If this\n");
-    mon_printf("Program fails, your computer  might be unusable, and\n"
+    printf("Program fails, your computer  might be unusable, and\n"
               "you will  need to return your  board for reflashing.\n"
               "If you find this too risky,  remove the diskette and\n"
               "switch off your  machine now.  Otherwise  press the \n"
@@ -23,8 +23,8 @@ void _main(void)
     do
     {
        char x;
-       while (!mon_tstc());
-       x = mon_getc();
+       while (!tstc());
+       x = getc();
        if (x == ' ') break;
     } while (1);
 
@@ -32,14 +32,14 @@ void _main(void)
 
     i = 5;
 
-    mon_printf("\nUpdate done. Please remove diskette.\n");
-    mon_printf("The machine will automatically reset in %d seconds\n", i);
-    mon_printf("You can switch off/reset now when the floppy is removed\n\n");
+    printf("\nUpdate done. Please remove diskette.\n");
+    printf("The machine will automatically reset in %d seconds\n", i);
+    printf("You can switch off/reset now when the floppy is removed\n\n");
 
     while (i)
     {
-       mon_printf("Resetting in %d\r", i);
-       mon_udelay(1000000);
+       printf("Resetting in %d\r", i);
+       udelay(1000000);
        i--;
     }
     do_reset();
@@ -57,11 +57,11 @@ void do_updater(void)
     int rc;
 
     flash_sect_protect(0, 0xFFF00000, 0xFFF7FFFF);
-    mon_printf("Erasing ");
+    printf("Erasing ");
     flash_sect_erase(0xFFF00000, 0xFFF7FFFF);
-    mon_printf("Writing ");
+    printf("Writing ");
     rc = flash_write((uchar *)addr, 0xFFF00000, 0x7FFFF);
-    if (rc != 0) mon_printf("\nFlashing failed due to error %d\n", rc);
-    else mon_printf("\ndone\n");
+    if (rc != 0) printf("\nFlashing failed due to error %d\n", rc);
+    else printf("\ndone\n");
     flash_sect_protect(1, 0xFFF00000, 0xFFF7FFFF);
 }