aboutsummaryrefslogtreecommitdiffstats
path: root/arch/arm/mach-exynos/include/mach/sec_debug.h
diff options
context:
space:
mode:
Diffstat (limited to 'arch/arm/mach-exynos/include/mach/sec_debug.h')
-rw-r--r--arch/arm/mach-exynos/include/mach/sec_debug.h213
1 files changed, 213 insertions, 0 deletions
diff --git a/arch/arm/mach-exynos/include/mach/sec_debug.h b/arch/arm/mach-exynos/include/mach/sec_debug.h
new file mode 100644
index 0000000..1beb973
--- /dev/null
+++ b/arch/arm/mach-exynos/include/mach/sec_debug.h
@@ -0,0 +1,213 @@
+#ifndef SEC_DEBUG_H
+#define SEC_DEBUG_H
+
+#include <linux/sched.h>
+#include <linux/semaphore.h>
+
+#ifdef CONFIG_SEC_DEBUG
+
+union sec_debug_level_t {
+ struct {
+ u16 kernel_fault;
+ u16 user_fault;
+ } en;
+ u32 uint_val;
+};
+
+extern union sec_debug_level_t sec_debug_level;
+
+extern int sec_debug_init(void);
+
+extern int sec_debug_magic_init(void);
+
+extern void sec_debug_check_crash_key(unsigned int code, int value);
+
+extern void sec_getlog_supply_fbinfo(void *p_fb, u32 res_x, u32 res_y, u32 bpp,
+ u32 frames);
+extern void sec_getlog_supply_loggerinfo(void *p_main, void *p_radio,
+ void *p_events, void *p_system);
+extern void sec_getlog_supply_kloginfo(void *klog_buf);
+
+extern void sec_gaf_supply_rqinfo(unsigned short curr_offset,
+ unsigned short rq_offset);
+#else
+static inline int sec_debug_init(void)
+{
+ return 0;
+}
+
+static inline int sec_debug_magic_init(void)
+{
+ return 0;
+}
+
+static inline void sec_debug_check_crash_key(unsigned int code, int value)
+{
+}
+
+static inline void sec_getlog_supply_fbinfo(void *p_fb, u32 res_x, u32 res_y,
+ u32 bpp, u32 frames)
+{
+}
+
+static inline void sec_getlog_supply_meminfo(u32 size0, u32 addr0, u32 size1,
+ u32 addr1)
+{
+}
+
+static inline void sec_getlog_supply_loggerinfo(void *p_main,
+ void *p_radio, void *p_events,
+ void *p_system)
+{
+}
+
+static inline void sec_getlog_supply_kloginfo(void *klog_buf)
+{
+}
+
+static inline void sec_gaf_supply_rqinfo(unsigned short curr_offset,
+ unsigned short rq_offset)
+{
+}
+
+#endif
+
+struct worker;
+struct work_struct;
+
+#ifdef CONFIG_SEC_DEBUG_SCHED_LOG
+extern void __sec_debug_task_log(int cpu, struct task_struct *task);
+extern void __sec_debug_irq_log(unsigned int irq, void *fn, int en);
+extern void __sec_debug_work_log(struct worker *worker,
+ struct work_struct *work, work_func_t f);
+extern void __sec_debug_hrtimer_log(struct hrtimer *timer,
+ enum hrtimer_restart (*fn) (struct hrtimer *), int en);
+
+static inline void sec_debug_task_log(int cpu, struct task_struct *task)
+{
+ if (unlikely(sec_debug_level.en.kernel_fault))
+ __sec_debug_task_log(cpu, task);
+}
+
+static inline void sec_debug_irq_log(unsigned int irq, void *fn, int en)
+{
+ if (unlikely(sec_debug_level.en.kernel_fault))
+ __sec_debug_irq_log(irq, fn, en);
+}
+
+static inline void sec_debug_work_log(struct worker *worker,
+ struct work_struct *work, work_func_t f)
+{
+ if (unlikely(sec_debug_level.en.kernel_fault))
+ __sec_debug_work_log(worker, work, f);
+}
+
+static inline void sec_debug_hrtimer_log(struct hrtimer *timer,
+ enum hrtimer_restart (*fn) (struct hrtimer *), int en)
+{
+#ifdef CONFIG_SEC_DEBUG_HRTIMER_LOG
+ if (unlikely(sec_debug_level.en.kernel_fault))
+ __sec_debug_hrtimer_log(timer, fn, en);
+#endif
+}
+
+static inline void sec_debug_softirq_log(unsigned int irq, void *fn, int en)
+{
+#ifdef CONFIG_SEC_DEBUG_SOFTIRQ_LOG
+ if (unlikely(sec_debug_level.en.kernel_fault))
+ __sec_debug_irq_log(irq, fn, en);
+#endif
+}
+
+#else
+
+static inline void sec_debug_task_log(int cpu, struct task_struct *task)
+{
+}
+
+static inline void sec_debug_irq_log(unsigned int irq, void *fn, int en)
+{
+}
+
+static inline void sec_debug_work_log(struct worker *worker,
+ struct work_struct *work, work_func_t f)
+{
+}
+
+static inline void sec_debug_hrtimer_log(struct hrtimer *timer,
+ enum hrtimer_restart (*fn) (struct hrtimer *), int en)
+{
+}
+
+static inline void sec_debug_softirq_log(unsigned int irq, void *fn, int en)
+{
+}
+#endif
+
+#ifdef CONFIG_SEC_DEBUG_IRQ_EXIT_LOG
+extern void sec_debug_irq_last_exit_log(void);
+#else
+static inline void sec_debug_irq_last_exit_log(void)
+{
+}
+#endif
+
+#ifdef CONFIG_SEC_DEBUG_SEMAPHORE_LOG
+extern void debug_semaphore_init(void);
+extern void debug_semaphore_down_log(struct semaphore *sem);
+extern void debug_semaphore_up_log(struct semaphore *sem);
+extern void debug_rwsemaphore_init(void);
+extern void debug_rwsemaphore_down_log(struct rw_semaphore *sem, int dir);
+extern void debug_rwsemaphore_up_log(struct rw_semaphore *sem);
+#define debug_rwsemaphore_down_read_log(x) \
+ debug_rwsemaphore_down_log(x,READ_SEM)
+#define debug_rwsemaphore_down_write_log(x) \
+ debug_rwsemaphore_down_log(x,WRITE_SEM)
+#else
+static inline void debug_semaphore_init(void)
+{
+}
+
+static inline void debug_semaphore_down_log(struct semaphore *sem)
+{
+}
+
+static inline void debug_semaphore_up_log(struct semaphore *sem)
+{
+}
+
+static inline void debug_rwsemaphore_init(void)
+{
+}
+
+static inline void debug_rwsemaphore_down_read_log(struct rw_semaphore *sem)
+{
+}
+
+static inline void debug_rwsemaphore_down_write_log(struct rw_semaphore *sem)
+{
+}
+
+static inline void debug_rwsemaphore_up_log(struct rw_semaphore *sem)
+{
+}
+#endif
+
+enum sec_debug_aux_log_idx {
+ SEC_DEBUG_AUXLOG_CPU_BUS_CLOCK_CHANGE,
+ SEC_DEBUG_AUXLOG_ITEM_MAX,
+};
+
+#ifdef CONFIG_SEC_DEBUG_AUXILIARY_LOG
+extern void sec_debug_aux_log(int idx, char *fmt, ...);
+#else
+#define sec_debug_aux_log(idx, ...) do { } while (0)
+#endif
+
+#if defined(CONFIG_MACH_Q1_BD)
+extern int sec_debug_panic_handler_safe(void *buf);
+#endif
+
+extern void read_lcd_register(void);
+
+#endif /* SEC_DEBUG_H */