Skip to content
Snippets Groups Projects
Commit bf44f3f3 authored by Mike Frysinger's avatar Mike Frysinger Committed by Wolfgang Denk
Browse files

exports: rewrite jump table init


The current jump table init fails to initialize a bunch of exported
symbols (forceenv/do_reset/etc...).  Rather than fix just these few
missing pieces, rewrite the code to utilize the existing list of
exported symbols -- _exports.h.  Since every exported symbol has to
be listed in this header, it makes sense to use it so that we only
ever have one list that needs to be updated and things can't fall
out of sync again.

Signed-off-by: default avatarMike Frysinger <vapier@gentoo.org>
parent 57bf140a
No related branches found
No related tags found
No related merge requests found
...@@ -12,38 +12,34 @@ unsigned long get_version(void) ...@@ -12,38 +12,34 @@ unsigned long get_version(void)
return XF_VERSION; return XF_VERSION;
} }
void jumptable_init (void) /* Reuse _exports.h with a little trickery to avoid bitrot */
{ #define EXPORT_FUNC(sym) gd->jt[XF_##sym] = (void *)sym;
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; #if !defined(CONFIG_I386) && !defined(CONFIG_PPC)
gd->jt[XF_malloc] = (void *) malloc; # define install_hdlr dummy
gd->jt[XF_free] = (void *) free; # define free_hdlr dummy
gd->jt[XF_getenv] = (void *) getenv; #else /* kludge for non-standard function naming */
gd->jt[XF_setenv] = (void *) setenv; # define install_hdlr irq_install_handler
gd->jt[XF_get_timer] = (void *) get_timer; # define free_hdlr irq_free_handler
gd->jt[XF_simple_strtoul] = (void *) simple_strtoul; #endif
gd->jt[XF_udelay] = (void *) udelay; #ifndef CONFIG_CMD_I2C
gd->jt[XF_simple_strtol] = (void *) simple_strtol; # define i2c_write dummy
gd->jt[XF_strcmp] = (void *) strcmp; # define i2c_read dummy
#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 /* I386 || PPC */
#if defined(CONFIG_CMD_I2C)
gd->jt[XF_i2c_write] = (void *) i2c_write;
gd->jt[XF_i2c_read] = (void *) i2c_read;
#endif #endif
#ifdef CONFIG_CMD_SPI #ifndef CONFIG_CMD_SPI
gd->jt[XF_spi_init] = (void *) spi_init; # define spi_init dummy
gd->jt[XF_spi_setup_slave] = (void *) spi_setup_slave; # define spi_setup_slave dummy
gd->jt[XF_spi_free_slave] = (void *) spi_free_slave; # define spi_free_slave dummy
gd->jt[XF_spi_claim_bus] = (void *) spi_claim_bus; # define spi_claim_bus dummy
gd->jt[XF_spi_release_bus] = (void *) spi_release_bus; # define spi_release_bus dummy
gd->jt[XF_spi_xfer] = (void *) spi_xfer; # define spi_xfer dummy
#endif #endif
#ifndef CONFIG_HAS_UID
# define forceenv dummy
#endif
void jumptable_init(void)
{
gd->jt = malloc(XF_MAX * sizeof(void *));
#include <_exports.h>
} }
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment