summaryrefslogtreecommitdiffstats
path: root/uClinux-2.4.20-uc1/arch/armnommu/kernel/compat.c
diff options
context:
space:
mode:
Diffstat (limited to 'uClinux-2.4.20-uc1/arch/armnommu/kernel/compat.c')
-rw-r--r--uClinux-2.4.20-uc1/arch/armnommu/kernel/compat.c68
1 files changed, 37 insertions, 31 deletions
diff --git a/uClinux-2.4.20-uc1/arch/armnommu/kernel/compat.c b/uClinux-2.4.20-uc1/arch/armnommu/kernel/compat.c
index a23932c..23c085d 100644
--- a/uClinux-2.4.20-uc1/arch/armnommu/kernel/compat.c
+++ b/uClinux-2.4.20-uc1/arch/armnommu/kernel/compat.c
@@ -8,7 +8,7 @@
* published by the Free Software Foundation.
*
* We keep the old params compatibility cruft in one place (here)
- * so we don't end up with lots of
+ * so we don't end up with lots of mess around other places.
*/
#include <linux/config.h>
#include <linux/types.h>
@@ -33,18 +33,18 @@ static struct tag * __init memtag(struct tag *tag, unsigned long start, unsigned
return tag;
}
-static void __init build_tag_list(struct param_struct *params, void *taglist, int mem_init)
+static void __init build_tag_list(struct param_struct *params, void *taglist)
{
struct tag *tag = taglist;
- printk(KERN_DEBUG "Converting old-style param struct to taglist\n");
-
if (params->u1.s.page_size != PAGE_SIZE) {
printk(KERN_WARNING "Warning: bad configuration page, "
"trying to continue\n");
return;
}
+ printk(KERN_DEBUG "Converting old-style param struct to taglist\n");
+
tag->hdr.tag = ATAG_CORE;
tag->hdr.size = tag_size(tag_core);
tag->u.core.flags = params->u1.s.flags & FLAG_READONLY;
@@ -76,35 +76,33 @@ static void __init build_tag_list(struct param_struct *params, void *taglist, in
tag->hdr.size = tag_size(tag_revision);
tag->u.revision.rev = params->u1.s.system_rev;
- if (mem_init) {
#ifdef CONFIG_ARCH_ACORN
- if (machine_is_riscpc()) {
- int i;
- for (i = 0; i < 4; i++)
- tag = memtag(tag, PHYS_OFFSET + (i << 26),
- params->u1.s.pages_in_bank[i] * PAGE_SIZE);
- } else
+ if (machine_is_riscpc()) {
+ int i;
+ for (i = 0; i < 4; i++)
+ tag = memtag(tag, PHYS_OFFSET + (i << 26),
+ params->u1.s.pages_in_bank[i] * PAGE_SIZE);
+ } else
#endif
-#ifdef CONFIG_ARCH_SHARK
- if (machine_is_shark()) {
- int i;
- for (i = 0; i < 4; i++) {
- unsigned int val = params->u1.s.pages_in_bank[i];
- if (!val)
- continue;
- tag = memtag(tag, val & 0xffff0000,
- (val & 0xffff) * PAGE_SIZE);
- }
+ if (machine_is_shark()) {
+ int i;
+ for (i = 0; i < 4; i++) {
+ unsigned int val = params->u1.s.pages_in_bank[i];
+ if (!val)
+ continue;
+ tag = memtag(tag, val & 0xffff0000,
+ (val & 0xffff) * PAGE_SIZE);
}
-#endif
- tag = memtag(tag, PHYS_OFFSET, params->u1.s.nr_pages * PAGE_SIZE);
- }
+ } else
+ tag = memtag(tag, PHYS_OFFSET, params->u1.s.nr_pages * PAGE_SIZE);
#ifdef CONFIG_FOOTBRIDGE
- tag = tag_next(tag);
- tag->hdr.tag = ATAG_MEMCLK;
- tag->hdr.size = tag_size(tag_memclk);
- tag->u.memclk.fmemclk = params->u1.s.mem_fclk_21285;
+ if (params->u1.s.mem_fclk_21285) {
+ tag = tag_next(tag);
+ tag->hdr.tag = ATAG_MEMCLK;
+ tag->hdr.size = tag_size(tag_memclk);
+ tag->u.memclk.fmemclk = params->u1.s.mem_fclk_21285;
+ }
#endif
#ifdef CONFIG_ARCH_ACORN
@@ -124,14 +122,22 @@ static void __init build_tag_list(struct param_struct *params, void *taglist, in
strcpy(tag->u.cmdline.cmdline, params->commandline);
tag = tag_next(tag);
- tag->hdr.tag = 0;
+ tag->hdr.tag = ATAG_NONE;
tag->hdr.size = 0;
memmove(params, taglist, ((int)tag) - ((int)taglist) +
sizeof(struct tag_header));
}
-void __init convert_to_tag_list(struct param_struct *params, int mem_init)
+void __init convert_to_tag_list(struct tag *tags)
+{
+ struct param_struct *params = (struct param_struct *)tags;
+ build_tag_list(params, &params->u2);
+}
+
+void __init squash_mem_tags(struct tag *tag)
{
- build_tag_list(params, &params->u2, mem_init);
+ for (; tag->hdr.size; tag = tag_next(tag))
+ if (tag->hdr.tag == ATAG_MEM)
+ tag->hdr.tag = ATAG_NONE;
}