aboutsummaryrefslogtreecommitdiffstats
path: root/target/linux/ubicom32/files/arch/ubicom32/kernel/os_node.c
diff options
context:
space:
mode:
Diffstat (limited to 'target/linux/ubicom32/files/arch/ubicom32/kernel/os_node.c')
-rw-r--r--target/linux/ubicom32/files/arch/ubicom32/kernel/os_node.c88
1 files changed, 88 insertions, 0 deletions
diff --git a/target/linux/ubicom32/files/arch/ubicom32/kernel/os_node.c b/target/linux/ubicom32/files/arch/ubicom32/kernel/os_node.c
new file mode 100644
index 000000000..9e014d5cb
--- /dev/null
+++ b/target/linux/ubicom32/files/arch/ubicom32/kernel/os_node.c
@@ -0,0 +1,88 @@
+/*
+ * arch/ubicom32/kernel/os_node.c
+ * <TODO: Replace with short file description>
+ *
+ * (C) Copyright 2009, Ubicom, Inc.
+ *
+ * This file is part of the Ubicom32 Linux Kernel Port.
+ *
+ * The Ubicom32 Linux Kernel Port 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.
+ *
+ * The Ubicom32 Linux Kernel Port 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 the Ubicom32 Linux Kernel Port. If not,
+ * see <http://www.gnu.org/licenses/>.
+ *
+ */
+#include "linux/types.h"
+#include "linux/linkage.h"
+#include "linux/uts.h"
+#include "linux/utsrelease.h"
+#include "linux/version.h"
+#include <asm/ocm_size.h>
+#include <asm/devtree.h>
+#include <asm/ip5000.h>
+
+extern asmlinkage void *_start;
+
+/*
+ * This file provides static information to the boot code allowing it to decide
+ * if the os is compatible. Thus hopefully enabling the boot code to prevent
+ * accidentally booting a kernel that has no hope of running.
+ */
+struct os_node {
+ struct devtree_node node;
+ unsigned long version; /* Always 1 */
+ unsigned long entry_point;
+ const char os_name[32]; /* For diagnostic purposes only */
+ const char os_version_str[32];
+ unsigned long os_version_num;
+ unsigned long expected_ocm_code_start;/* OS Code */
+ unsigned long expected_ocm_data_end; /* OS Data */
+ unsigned long expected_ram_start;
+ unsigned long expected_ram_end;
+ unsigned long arch_version;
+ unsigned long expected_os_syscall_begin;
+ unsigned long expected_os_syscall_end;
+};
+
+
+extern void __os_syscall_begin;
+extern void __os_syscall_end;
+/*
+ * The os_node is only referenced by head.S and should never be modified at
+ * run-time.
+ */
+asmlinkage const struct os_node _os_node = {
+ .node = {
+ .next = NULL,
+ .name = { "OS" },
+ .magic = 0x10203040,
+ },
+ .version = 0x10002,
+ .entry_point = (unsigned long)&_start,
+#if APP_OCM_CODE_SIZE || APP_OCM_DATA_SIZE
+ .expected_ocm_code_start = OCMSTART + APP_OCM_CODE_SIZE,
+ .expected_ocm_data_end = OCMEND - APP_OCM_DATA_SIZE,
+#else
+ .expected_ocm_code_start = OCMEND,
+ .expected_ocm_data_end = OCMEND,
+#endif
+ .os_name = { UTS_SYSNAME },
+ .os_version_str = { UTS_RELEASE },
+ .os_version_num = LINUX_VERSION_CODE,
+ .expected_ram_start = KERNELSTART,
+ .expected_ram_end = SDRAMSTART + CONFIG_MIN_RAMSIZE,
+ .arch_version = UBICOM32_ARCH_VERSION,
+ .expected_os_syscall_begin = (unsigned long)&__os_syscall_begin,
+ .expected_os_syscall_end = (unsigned long)&__os_syscall_end,
+
+
+};