aboutsummaryrefslogtreecommitdiffstats
path: root/arch/arm/kernel/atags.c
diff options
context:
space:
mode:
authorNicolas Pitre <nicolas.pitre@linaro.org>2012-09-01 03:00:15 +0100
committerRussell King <rmk+kernel@arm.linux.org.uk>2012-09-03 22:55:56 +0100
commitaa783b6fd60b3844e199b1c2d2f4068f3caa1358 (patch)
tree393501d8ef825c12a18314981ca20f75120c79c3 /arch/arm/kernel/atags.c
parentLinux 3.6-rc4 (diff)
downloadlinux-dev-aa783b6fd60b3844e199b1c2d2f4068f3caa1358.tar.xz
linux-dev-aa783b6fd60b3844e199b1c2d2f4068f3caa1358.zip
ARM: 7505/1: split out ATAGS parsing
Make ATAGS parsing into a source file of its own, namely atags_parse.c. Also rename compat.c to atags_compat.c to make it clearer what it is about. Same for atags.c which is now atags_proc.c. Gather all the atags function declarations into a common atags.h. Signed-off-by: Nicolas Pitre <nicolas.pitre@linaro.org> Tested-by: Linus Walleij <linus.walleij@linaro.org> Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
Diffstat (limited to 'arch/arm/kernel/atags.c')
-rw-r--r--arch/arm/kernel/atags.c83
1 files changed, 0 insertions, 83 deletions
diff --git a/arch/arm/kernel/atags.c b/arch/arm/kernel/atags.c
deleted file mode 100644
index 42a1a1415fa6..000000000000
--- a/arch/arm/kernel/atags.c
+++ /dev/null
@@ -1,83 +0,0 @@
-#include <linux/slab.h>
-#include <linux/proc_fs.h>
-#include <asm/setup.h>
-#include <asm/types.h>
-#include <asm/page.h>
-
-struct buffer {
- size_t size;
- char data[];
-};
-
-static int
-read_buffer(char* page, char** start, off_t off, int count,
- int* eof, void* data)
-{
- struct buffer *buffer = (struct buffer *)data;
-
- if (off >= buffer->size) {
- *eof = 1;
- return 0;
- }
-
- count = min((int) (buffer->size - off), count);
-
- memcpy(page, &buffer->data[off], count);
-
- return count;
-}
-
-#define BOOT_PARAMS_SIZE 1536
-static char __initdata atags_copy[BOOT_PARAMS_SIZE];
-
-void __init save_atags(const struct tag *tags)
-{
- memcpy(atags_copy, tags, sizeof(atags_copy));
-}
-
-static int __init init_atags_procfs(void)
-{
- /*
- * This cannot go into save_atags() because kmalloc and proc don't work
- * yet when it is called.
- */
- struct proc_dir_entry *tags_entry;
- struct tag *tag = (struct tag *)atags_copy;
- struct buffer *b;
- size_t size;
-
- if (tag->hdr.tag != ATAG_CORE) {
- printk(KERN_INFO "No ATAGs?");
- return -EINVAL;
- }
-
- for (; tag->hdr.size; tag = tag_next(tag))
- ;
-
- /* include the terminating ATAG_NONE */
- size = (char *)tag - atags_copy + sizeof(struct tag_header);
-
- WARN_ON(tag->hdr.tag != ATAG_NONE);
-
- b = kmalloc(sizeof(*b) + size, GFP_KERNEL);
- if (!b)
- goto nomem;
-
- b->size = size;
- memcpy(b->data, atags_copy, size);
-
- tags_entry = create_proc_read_entry("atags", 0400,
- NULL, read_buffer, b);
-
- if (!tags_entry)
- goto nomem;
-
- return 0;
-
-nomem:
- kfree(b);
- printk(KERN_ERR "Exporting ATAGs: not enough memory\n");
-
- return -ENOMEM;
-}
-arch_initcall(init_atags_procfs);