aboutsummaryrefslogtreecommitdiffstats
path: root/arch/arm/mach-exynos/sec_getlog.c
diff options
context:
space:
mode:
Diffstat (limited to 'arch/arm/mach-exynos/sec_getlog.c')
-rw-r--r--arch/arm/mach-exynos/sec_getlog.c126
1 files changed, 126 insertions, 0 deletions
diff --git a/arch/arm/mach-exynos/sec_getlog.c b/arch/arm/mach-exynos/sec_getlog.c
new file mode 100644
index 0000000..06a0be6
--- /dev/null
+++ b/arch/arm/mach-exynos/sec_getlog.c
@@ -0,0 +1,126 @@
+/*
+ * sec_getlog.c
+ *
+ */
+
+#include <linux/module.h>
+#include <linux/errno.h>
+#include <asm/setup.h>
+
+static struct {
+ u32 special_mark_1;
+ u32 special_mark_2;
+ u32 special_mark_3;
+ u32 special_mark_4;
+ void *p_fb; /* it must be physical address */
+ u32 xres;
+ u32 yres;
+ u32 bpp; /* color depth : 16 or 24 */
+ u32 frames; /* frame buffer count : 2 */
+} frame_buf_mark = {
+ .special_mark_1 = (('*' << 24) | ('^' << 16) | ('^' << 8) | ('*' << 0)),
+ .special_mark_2 = (('I' << 24) | ('n' << 16) | ('f' << 8) | ('o' << 0)),
+ .special_mark_3 = (('H' << 24) | ('e' << 16) | ('r' << 8) | ('e' << 0)),
+ .special_mark_4 = (('f' << 24) | ('b' << 16) | ('u' << 8) | ('f' << 0)),
+};
+
+void sec_getlog_supply_fbinfo(void *p_fb, u32 xres, u32 yres, u32 bpp,
+ u32 frames)
+{
+ if (p_fb) {
+ pr_info("%s: 0x%p %d %d %d %d\n", __func__, p_fb, xres, yres,
+ bpp, frames);
+ frame_buf_mark.p_fb = p_fb;
+ frame_buf_mark.xres = xres;
+ frame_buf_mark.yres = yres;
+ frame_buf_mark.bpp = bpp;
+ frame_buf_mark.frames = frames;
+ }
+}
+EXPORT_SYMBOL(sec_getlog_supply_fbinfo);
+
+static struct {
+ u32 special_mark_1;
+ u32 special_mark_2;
+ u32 special_mark_3;
+ u32 special_mark_4;
+ u32 log_mark_version;
+ u32 framebuffer_mark_version;
+ void *this; /* this is used for addressing
+ log buffer in 2 dump files */
+ struct {
+ u32 size; /* memory block's size */
+ u32 addr; /* memory block'sPhysical address */
+ } mem[2];
+} marks_ver_mark = {
+ .special_mark_1 = (('*' << 24) | ('^' << 16) | ('^' << 8) | ('*' << 0)),
+ .special_mark_2 = (('I' << 24) | ('n' << 16) | ('f' << 8) | ('o' << 0)),
+ .special_mark_3 = (('H' << 24) | ('e' << 16) | ('r' << 8) | ('e' << 0)),
+ .special_mark_4 = (('v' << 24) | ('e' << 16) | ('r' << 8) | ('s' << 0)),
+ .log_mark_version = 1,
+ .framebuffer_mark_version = 1,
+ .this = &marks_ver_mark,
+};
+
+/* mark for GetLog extraction */
+static struct {
+ u32 special_mark_1;
+ u32 special_mark_2;
+ u32 special_mark_3;
+ u32 special_mark_4;
+ void *p_main;
+ void *p_radio;
+ void *p_events;
+ void *p_system;
+} plat_log_mark = {
+ .special_mark_1 = (('*' << 24) | ('^' << 16) | ('^' << 8) | ('*' << 0)),
+ .special_mark_2 = (('I' << 24) | ('n' << 16) | ('f' << 8) | ('o' << 0)),
+ .special_mark_3 = (('H' << 24) | ('e' << 16) | ('r' << 8) | ('e' << 0)),
+ .special_mark_4 = (('p' << 24) | ('l' << 16) | ('o' << 8) | ('g' << 0)),
+};
+
+void sec_getlog_supply_loggerinfo(void *p_main,
+ void *p_radio, void *p_events, void *p_system)
+{
+ pr_info("%s: 0x%p 0x%p 0x%p 0x%p\n", __func__, p_main, p_radio,
+ p_events, p_system);
+ plat_log_mark.p_main = p_main;
+ plat_log_mark.p_radio = p_radio;
+ plat_log_mark.p_events = p_events;
+ plat_log_mark.p_system = p_system;
+}
+EXPORT_SYMBOL(sec_getlog_supply_loggerinfo);
+
+static struct {
+ u32 special_mark_1;
+ u32 special_mark_2;
+ u32 special_mark_3;
+ u32 special_mark_4;
+ void *klog_buf;
+} kernel_log_mark = {
+ .special_mark_1 = (('*' << 24) | ('^' << 16) | ('^' << 8) | ('*' << 0)),
+ .special_mark_2 = (('I' << 24) | ('n' << 16) | ('f' << 8) | ('o' << 0)),
+ .special_mark_3 = (('H' << 24) | ('e' << 16) | ('r' << 8) | ('e' << 0)),
+ .special_mark_4 = (('k' << 24) | ('l' << 16) | ('o' << 8) | ('g' << 0)),
+};
+
+void sec_getlog_supply_kloginfo(void *klog_buf)
+{
+ pr_info("%s: 0x%p\n", __func__, klog_buf);
+ kernel_log_mark.klog_buf = klog_buf;
+}
+EXPORT_SYMBOL(sec_getlog_supply_kloginfo);
+
+static int __init sec_getlog_init(void)
+{
+ marks_ver_mark.mem[0].size =
+ meminfo.bank[0].size + meminfo.bank[1].size;
+ marks_ver_mark.mem[0].addr = meminfo.bank[0].start;
+ marks_ver_mark.mem[1].size =
+ meminfo.bank[2].size + meminfo.bank[3].size;
+ marks_ver_mark.mem[1].addr = meminfo.bank[2].start;
+
+ return 0;
+}
+
+core_initcall(sec_getlog_init);