1 // 2 // Copyright (c) 2012-2014 Travis Geiselbrecht 3 // 4 // Use of this source code is governed by a MIT-style 5 // license that can be found in the LICENSE file or at 6 // https://opensource.org/licenses/MIT 7 // 8 #pragma once 9 10 #include <lk/compiler.h> 11 12 __BEGIN_CDECLS 13 14 #include <lk/debug.h> 15 16 // This file defines the kernel event log, which is a simple logging mechanism 17 // for kernel events. It is primarily used for debugging and performance analysis. 18 #if WITH_KERNEL_EVLOG 19 20 #include <lib/evlog.h> 21 22 #ifndef KERNEL_EVLOG_LEN 23 #define KERNEL_EVLOG_LEN 1024 24 #endif 25 26 void kernel_evlog_init(void); 27 28 void kernel_evlog_add(uintptr_t id, uintptr_t arg0, uintptr_t arg1); 29 void kernel_evlog_dump(void); 30 31 #else // !WITH_KERNEL_EVLOG 32 33 // Do-nothing versions. 34 static inline void kernel_evlog_init(void) {} 35 static inline void kernel_evlog_add(uintptr_t id, uintptr_t arg0, uintptr_t arg1) {} 36 static inline void kernel_evlog_dump(void) {} 37 38 #endif 39 40 enum { 41 KERNEL_EVLOG_NULL = 0, 42 KERNEL_EVLOG_CONTEXT_SWITCH, 43 KERNEL_EVLOG_PREEMPT, 44 KERNEL_EVLOG_TIMER_TICK, 45 KERNEL_EVLOG_TIMER_CALL, 46 KERNEL_EVLOG_IRQ_ENTER, 47 KERNEL_EVLOG_IRQ_EXIT, 48 }; 49 50 #define KEVLOG_THREAD_SWITCH(from, to) kernel_evlog_add(KERNEL_EVLOG_CONTEXT_SWITCH, (uintptr_t)(from), (uintptr_t)(to)) 51 #define KEVLOG_THREAD_PREEMPT(thread) kernel_evlog_add(KERNEL_EVLOG_PREEMPT, (uintptr_t)(thread), 0) 52 #define KEVLOG_TIMER_TICK() kernel_evlog_add(KERNEL_EVLOG_TIMER_TICK, 0, 0) 53 #define KEVLOG_TIMER_CALL(ptr, arg) kernel_evlog_add(KERNEL_EVLOG_TIMER_CALL, (uintptr_t)(ptr), (uintptr_t)(arg)) 54 #define KEVLOG_IRQ_ENTER(irqn) kernel_evlog_add(KERNEL_EVLOG_IRQ_ENTER, (uintptr_t)(irqn), 0) 55 #define KEVLOG_IRQ_EXIT(irqn) kernel_evlog_add(KERNEL_EVLOG_IRQ_EXIT, (uintptr_t)(irqn), 0) 56 57 __END_CDECLS 58