[PATCH] Fix relocation problem with "new" get_dev() function
authorStefan Roese <sr@denx.de>
Tue, 20 Feb 2007 12:21:57 +0000 (13:21 +0100)
committerStefan Roese <sr@denx.de>
Tue, 20 Feb 2007 12:21:57 +0000 (13:21 +0100)
This patch enables the "new" get_dev() function for block devices
introduced by Grant Likely to be used on systems that still suffer
from the relocation problems (manual relocation neede because of
problems with linker script).

Hopefully we can resolve this relocation issue soon for all platform
so we don't need this additional code anymore.

Signed-off-by: Stefan Roese <sr@denx.de>
disk/part.c

index f1026c5ef21987cdada20db52fcf15b3268173e4..37bba77dd39e8dcc45a7f499bb76e7d9cb88eef8 100644 (file)
@@ -64,13 +64,25 @@ static const struct block_drvr block_drvr[] = {
        { },
 };
 
+#ifndef CFG_FIXUP_RELOCATION
+DECLARE_GLOBAL_DATA_PTR;
+#endif
+
 block_dev_desc_t *get_dev(char* ifname, int dev)
 {
        const struct block_drvr *drvr = block_drvr;
 
        while (drvr->name) {
+#ifndef CFG_FIXUP_RELOCATION
+               block_dev_desc_t* (*reloc_get_dev)(int dev);
+
+               reloc_get_dev = drvr->get_dev + gd->reloc_off;
+               if (strncmp(ifname, drvr->name, strlen(drvr->name)) == 0)
+                       return reloc_get_dev(dev);
+#else
                if (strncmp(ifname, drvr->name, strlen(drvr->name)) == 0)
                        return drvr->get_dev(dev);
+#endif
                drvr++;
        }
        return NULL;