1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22#ifndef _LINUX_PSTORE_H
23#define _LINUX_PSTORE_H
24
25
26enum pstore_type_id {
27 PSTORE_TYPE_DMESG = 0,
28 PSTORE_TYPE_MCE = 1,
29 PSTORE_TYPE_UNKNOWN = 255
30};
31
32struct pstore_info {
33 struct module *owner;
34 char *name;
35 spinlock_t buf_lock;
36 char *buf;
37 size_t bufsize;
38 struct mutex read_mutex;
39 int (*open)(struct pstore_info *psi);
40 int (*close)(struct pstore_info *psi);
41 ssize_t (*read)(u64 *id, enum pstore_type_id *type,
42 struct timespec *time, char **buf,
43 struct pstore_info *psi);
44 int (*write)(enum pstore_type_id type, u64 *id,
45 unsigned int part, size_t size, struct pstore_info *psi);
46 int (*erase)(enum pstore_type_id type, u64 id,
47 struct pstore_info *psi);
48 void *data;
49};
50
51#ifdef CONFIG_PSTORE
52extern int pstore_register(struct pstore_info *);
53extern int pstore_write(enum pstore_type_id type, char *buf, size_t size);
54#else
55static inline int
56pstore_register(struct pstore_info *psi)
57{
58 return -ENODEV;
59}
60static inline int
61pstore_write(enum pstore_type_id type, char *buf, size_t size)
62{
63 return -ENODEV;
64}
65#endif
66
67#endif
68