1 /*
2 * SPDX-License-Identifier: BSD-2-Clause
3 *
4 * Copyright (c) 2025-2026 The FreeBSD Foundation
5 * Copyright (c) 2025-2026 Jean-Sébastien Pédron <dumbbell@FreeBSD.org>
6 *
7 * This software was developed by Jean-Sébastien Pédron under sponsorship
8 * from the FreeBSD Foundation.
9 */
10
11 #ifndef _LINUXKPI_LINUX_KMSG_DUMP_H_
12 #define _LINUXKPI_LINUX_KMSG_DUMP_H_
13
14 #include <linux/errno.h>
15 #include <linux/list.h>
16
17 #include <linux/kernel.h> /* For pr_debug() */
18
19 enum kmsg_dump_reason {
20 KMSG_DUMP_UNDEF,
21 KMSG_DUMP_PANIC,
22 KMSG_DUMP_OOPS,
23 KMSG_DUMP_EMERG,
24 KMSG_DUMP_SHUTDOWN,
25 KMSG_DUMP_MAX
26 };
27
28 struct kmsg_dump_iter {
29 uint64_t cur_seq;
30 uint64_t next_seq;
31 };
32
33 struct kmsg_dump_detail {
34 enum kmsg_dump_reason reason;
35 const char *description;
36 };
37
38 struct kmsg_dumper {
39 struct list_head list;
40 #if defined(LINUXKPI_VERSION) && LINUXKPI_VERSION < 61200
41 void (*dump)(struct kmsg_dumper *dumper, enum kmsg_dump_reason reason);
42 #else
43 void (*dump)(struct kmsg_dumper *dumper, struct kmsg_dump_detail *detail);
44 #endif
45 enum kmsg_dump_reason max_reason;
46 bool registered;
47 };
48
49 static inline void
kmsg_dump(enum kmsg_dump_reason reason)50 kmsg_dump(enum kmsg_dump_reason reason)
51 {
52 pr_debug("TODO");
53 }
54
55 static inline bool
kmsg_dump_get_line(struct kmsg_dump_iter * iter,bool syslog,const char * line,size_t size,size_t * len)56 kmsg_dump_get_line(struct kmsg_dump_iter *iter, bool syslog,
57 const char *line, size_t size, size_t *len)
58 {
59 pr_debug("TODO");
60
61 return (false);
62 }
63
64 static inline bool
kmsg_dump_get_buffer(struct kmsg_dump_iter * iter,bool syslog,char * buf,size_t size,size_t * len)65 kmsg_dump_get_buffer(struct kmsg_dump_iter *iter, bool syslog,
66 char *buf, size_t size, size_t *len)
67 {
68 pr_debug("TODO");
69
70 return (false);
71 }
72
73 static inline void
kmsg_dump_rewind(struct kmsg_dump_iter * iter)74 kmsg_dump_rewind(struct kmsg_dump_iter *iter)
75 {
76 pr_debug("TODO");
77 }
78
79 static inline int
kmsg_dump_register(struct kmsg_dumper * dumper)80 kmsg_dump_register(struct kmsg_dumper *dumper)
81 {
82 pr_debug("TODO");
83
84 return (-EINVAL);
85 }
86
87 static inline int
kmsg_dump_unregister(struct kmsg_dumper * dumper)88 kmsg_dump_unregister(struct kmsg_dumper *dumper)
89 {
90 pr_debug("TODO");
91
92 return (-EINVAL);
93 }
94
95 static inline const char *
kmsg_dump_reason_str(enum kmsg_dump_reason reason)96 kmsg_dump_reason_str(enum kmsg_dump_reason reason)
97 {
98 pr_debug("TODO");
99
100 return ("Unknown");
101 }
102 #endif
103