blob: 79431dab87a1cfbaf5eb4de3c864d371395200af [file] [log] [blame]
Greg Kroah-Hartmanb2441312017-11-01 15:07:57 +01001/* SPDX-License-Identifier: GPL-2.0 */
Linus Torvalds1da177e2005-04-16 15:20:36 -07002#ifndef _LINUX_NVRAM_H
3#define _LINUX_NVRAM_H
4
Finn Thain1278cf62019-01-15 15:18:56 +11005#include <linux/errno.h>
David Howells607ca462012-10-13 10:46:48 +01006#include <uapi/linux/nvram.h>
Linus Torvalds1da177e2005-04-16 15:20:36 -07007
Finn Thaina084dbf2019-01-15 15:18:56 +11008struct nvram_ops {
9 ssize_t (*get_size)(void);
10 ssize_t (*read)(char *, size_t, loff_t *);
11 ssize_t (*write)(char *, size_t, loff_t *);
12};
13
14extern const struct nvram_ops arch_nvram_ops;
15
Finn Thain1278cf62019-01-15 15:18:56 +110016static inline ssize_t nvram_get_size(void)
17{
Finn Thaina156c7b2019-01-15 15:18:56 +110018#ifdef CONFIG_PPC
19#else
Finn Thaina084dbf2019-01-15 15:18:56 +110020 if (arch_nvram_ops.get_size)
21 return arch_nvram_ops.get_size();
Finn Thaina156c7b2019-01-15 15:18:56 +110022#endif
Finn Thain1278cf62019-01-15 15:18:56 +110023 return -ENODEV;
24}
25
26static inline unsigned char nvram_read_byte(int addr)
27{
28 return 0xFF;
29}
30
31static inline void nvram_write_byte(unsigned char val, int addr)
32{
33}
34
35static inline ssize_t nvram_read(char *buf, size_t count, loff_t *ppos)
36{
Finn Thaina084dbf2019-01-15 15:18:56 +110037 if (arch_nvram_ops.read)
38 return arch_nvram_ops.read(buf, count, ppos);
Finn Thain1278cf62019-01-15 15:18:56 +110039 return -ENODEV;
40}
41
42static inline ssize_t nvram_write(char *buf, size_t count, loff_t *ppos)
43{
Finn Thaina084dbf2019-01-15 15:18:56 +110044 if (arch_nvram_ops.write)
45 return arch_nvram_ops.write(buf, count, ppos);
Finn Thain1278cf62019-01-15 15:18:56 +110046 return -ENODEV;
47}
48
Linus Torvalds1da177e2005-04-16 15:20:36 -070049#endif /* _LINUX_NVRAM_H */