1456b565cSSimon Kagstrom /* 2456b565cSSimon Kagstrom * linux/include/kmsg_dump.h 3456b565cSSimon Kagstrom * 4456b565cSSimon Kagstrom * Copyright (C) 2009 Net Insight AB 5456b565cSSimon Kagstrom * 6456b565cSSimon Kagstrom * Author: Simon Kagstrom <[email protected]> 7456b565cSSimon Kagstrom * 8456b565cSSimon Kagstrom * This file is subject to the terms and conditions of the GNU General Public 9456b565cSSimon Kagstrom * License. See the file COPYING in the main directory of this archive 10456b565cSSimon Kagstrom * for more details. 11456b565cSSimon Kagstrom */ 12456b565cSSimon Kagstrom #ifndef _LINUX_KMSG_DUMP_H 13456b565cSSimon Kagstrom #define _LINUX_KMSG_DUMP_H 14456b565cSSimon Kagstrom 15ac562241SRandy Dunlap #include <linux/errno.h> 16456b565cSSimon Kagstrom #include <linux/list.h> 17456b565cSSimon Kagstrom 18c22ab332SMatthew Garrett /* 19c22ab332SMatthew Garrett * Keep this list arranged in rough order of priority. Anything listed after 20c22ab332SMatthew Garrett * KMSG_DUMP_OOPS will not be logged by default unless printk.always_kmsg_dump 21c22ab332SMatthew Garrett * is passed to the kernel. 22c22ab332SMatthew Garrett */ 23456b565cSSimon Kagstrom enum kmsg_dump_reason { 24e2ae715dSKay Sievers KMSG_DUMP_UNDEF, 25456b565cSSimon Kagstrom KMSG_DUMP_PANIC, 26c22ab332SMatthew Garrett KMSG_DUMP_OOPS, 27c22ab332SMatthew Garrett KMSG_DUMP_EMERG, 2804c6862cSSeiji Aguchi KMSG_DUMP_RESTART, 2904c6862cSSeiji Aguchi KMSG_DUMP_HALT, 3004c6862cSSeiji Aguchi KMSG_DUMP_POWEROFF, 31456b565cSSimon Kagstrom }; 32456b565cSSimon Kagstrom 33456b565cSSimon Kagstrom /** 34456b565cSSimon Kagstrom * struct kmsg_dumper - kernel crash message dumper structure 35456b565cSSimon Kagstrom * @list: Entry in the dumper list (private) 36e2ae715dSKay Sievers * @dump: Call into dumping code which will retrieve the data with 37e2ae715dSKay Sievers * through the record iterator 38e2ae715dSKay Sievers * @max_reason: filter for highest reason number that should be dumped 39456b565cSSimon Kagstrom * @registered: Flag that specifies if this is already registered 40456b565cSSimon Kagstrom */ 41456b565cSSimon Kagstrom struct kmsg_dumper { 42456b565cSSimon Kagstrom struct list_head list; 43e2ae715dSKay Sievers void (*dump)(struct kmsg_dumper *dumper, enum kmsg_dump_reason reason); 44e2ae715dSKay Sievers enum kmsg_dump_reason max_reason; 45e2ae715dSKay Sievers bool active; 46e2ae715dSKay Sievers bool registered; 47e2ae715dSKay Sievers 48e2ae715dSKay Sievers /* private state of the kmsg iterator */ 49e2ae715dSKay Sievers u32 cur_idx; 50e2ae715dSKay Sievers u32 next_idx; 51e2ae715dSKay Sievers u64 cur_seq; 52e2ae715dSKay Sievers u64 next_seq; 53456b565cSSimon Kagstrom }; 54456b565cSSimon Kagstrom 55595dd3d8SRandy Dunlap #ifdef CONFIG_PRINTK 56456b565cSSimon Kagstrom void kmsg_dump(enum kmsg_dump_reason reason); 57456b565cSSimon Kagstrom 58e2ae715dSKay Sievers bool kmsg_dump_get_line(struct kmsg_dumper *dumper, bool syslog, 59e2ae715dSKay Sievers char *line, size_t size, size_t *len); 60e2ae715dSKay Sievers 61e2ae715dSKay Sievers bool kmsg_dump_get_buffer(struct kmsg_dumper *dumper, bool syslog, 62e2ae715dSKay Sievers char *buf, size_t size, size_t *len); 63e2ae715dSKay Sievers 64e2ae715dSKay Sievers void kmsg_dump_rewind(struct kmsg_dumper *dumper); 65e2ae715dSKay Sievers 66456b565cSSimon Kagstrom int kmsg_dump_register(struct kmsg_dumper *dumper); 67456b565cSSimon Kagstrom 68456b565cSSimon Kagstrom int kmsg_dump_unregister(struct kmsg_dumper *dumper); 69595dd3d8SRandy Dunlap #else 70595dd3d8SRandy Dunlap static inline void kmsg_dump(enum kmsg_dump_reason reason) 71595dd3d8SRandy Dunlap { 72595dd3d8SRandy Dunlap } 73595dd3d8SRandy Dunlap 74*246f6f2fSKay Sievers static inline bool kmsg_dump_get_line(struct kmsg_dumper *dumper, bool syslog, 75e2ae715dSKay Sievers const char *line, size_t size, size_t *len) 76e2ae715dSKay Sievers { 77e2ae715dSKay Sievers return false; 78e2ae715dSKay Sievers } 79e2ae715dSKay Sievers 80*246f6f2fSKay Sievers static inline bool kmsg_dump_get_buffer(struct kmsg_dumper *dumper, bool syslog, 81e2ae715dSKay Sievers char *buf, size_t size, size_t *len) 82e2ae715dSKay Sievers { 83e2ae715dSKay Sievers return false; 84e2ae715dSKay Sievers } 85e2ae715dSKay Sievers 86*246f6f2fSKay Sievers static inline void kmsg_dump_rewind(struct kmsg_dumper *dumper) 87e2ae715dSKay Sievers { 88e2ae715dSKay Sievers } 89e2ae715dSKay Sievers 90595dd3d8SRandy Dunlap static inline int kmsg_dump_register(struct kmsg_dumper *dumper) 91595dd3d8SRandy Dunlap { 92595dd3d8SRandy Dunlap return -EINVAL; 93595dd3d8SRandy Dunlap } 94595dd3d8SRandy Dunlap 95595dd3d8SRandy Dunlap static inline int kmsg_dump_unregister(struct kmsg_dumper *dumper) 96595dd3d8SRandy Dunlap { 97595dd3d8SRandy Dunlap return -EINVAL; 98595dd3d8SRandy Dunlap } 99595dd3d8SRandy Dunlap #endif 100456b565cSSimon Kagstrom 101456b565cSSimon Kagstrom #endif /* _LINUX_KMSG_DUMP_H */ 102