| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 1 | /* | 
| Paul Mackerras | c55377e | 2005-11-14 17:22:01 +1100 | [diff] [blame] | 2 | * NVRAM definitions and access functions. | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 3 | * | 
|  | 4 | * This program is free software; you can redistribute it and/or | 
|  | 5 | * modify it under the terms of the GNU General Public License | 
|  | 6 | * as published by the Free Software Foundation; either version | 
|  | 7 | * 2 of the License, or (at your option) any later version. | 
|  | 8 | */ | 
| Paul Mackerras | c55377e | 2005-11-14 17:22:01 +1100 | [diff] [blame] | 9 | #ifndef _ASM_POWERPC_NVRAM_H | 
|  | 10 | #define _ASM_POWERPC_NVRAM_H | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 11 |  | 
| Hari Bathini | 78989f0 | 2015-02-06 01:06:04 +0530 | [diff] [blame] | 12 | #include <linux/types.h> | 
| Benjamin Herrenschmidt | 74d51d0 | 2010-07-29 14:45:24 +1000 | [diff] [blame] | 13 | #include <linux/errno.h> | 
| Andrew Morton | 134d495 | 2008-02-04 22:27:31 -0800 | [diff] [blame] | 14 | #include <linux/list.h> | 
| David Howells | c3617f7 | 2012-10-09 09:47:26 +0100 | [diff] [blame] | 15 | #include <uapi/asm/nvram.h> | 
| Andrew Morton | 134d495 | 2008-02-04 22:27:31 -0800 | [diff] [blame] | 16 |  | 
| Hari Bathini | 78989f0 | 2015-02-06 01:06:04 +0530 | [diff] [blame] | 17 | /* | 
|  | 18 | * Set oops header version to distinguish between old and new format header. | 
|  | 19 | * lnx,oops-log partition max size is 4000, header version > 4000 will | 
|  | 20 | * help in identifying new header. | 
|  | 21 | */ | 
|  | 22 | #define OOPS_HDR_VERSION 5000 | 
|  | 23 |  | 
|  | 24 | struct err_log_info { | 
|  | 25 | __be32 error_type; | 
|  | 26 | __be32 seq_num; | 
|  | 27 | }; | 
|  | 28 |  | 
|  | 29 | struct nvram_os_partition { | 
|  | 30 | const char *name; | 
|  | 31 | int req_size;	/* desired size, in bytes */ | 
|  | 32 | int min_size;	/* minimum acceptable size (0 means req_size) */ | 
|  | 33 | long size;	/* size of data portion (excluding err_log_info) */ | 
|  | 34 | long index;	/* offset of data portion of partition */ | 
|  | 35 | bool os_partition; /* partition initialized by OS, not FW */ | 
|  | 36 | }; | 
|  | 37 |  | 
|  | 38 | struct oops_log_info { | 
|  | 39 | __be16 version; | 
|  | 40 | __be16 report_length; | 
|  | 41 | __be64 timestamp; | 
|  | 42 | } __attribute__((packed)); | 
|  | 43 |  | 
|  | 44 | extern struct nvram_os_partition oops_log_partition; | 
|  | 45 |  | 
| Benjamin Herrenschmidt | edc79a2 | 2010-08-02 11:18:09 +1000 | [diff] [blame] | 46 | #ifdef CONFIG_PPC_PSERIES | 
| Hari Bathini | 78989f0 | 2015-02-06 01:06:04 +0530 | [diff] [blame] | 47 | extern struct nvram_os_partition rtas_log_partition; | 
|  | 48 |  | 
| Linas Vepstas | 0f2342c | 2007-08-10 06:56:41 +1000 | [diff] [blame] | 49 | extern int nvram_write_error_log(char * buff, int length, | 
|  | 50 | unsigned int err_type, unsigned int err_seq); | 
|  | 51 | extern int nvram_read_error_log(char * buff, int length, | 
|  | 52 | unsigned int * err_type, unsigned int *err_seq); | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 53 | extern int nvram_clear_error_log(void); | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 54 | extern int pSeries_nvram_init(void); | 
| Benjamin Herrenschmidt | edc79a2 | 2010-08-02 11:18:09 +1000 | [diff] [blame] | 55 | #endif /* CONFIG_PPC_PSERIES */ | 
| Ishizaki Kou | 4751505 | 2007-12-13 21:11:36 +1100 | [diff] [blame] | 56 |  | 
|  | 57 | #ifdef CONFIG_MMIO_NVRAM | 
| Arnd Bergmann | f3f66f5 | 2005-10-31 20:08:37 -0500 | [diff] [blame] | 58 | extern int mmio_nvram_init(void); | 
| Ishizaki Kou | 4751505 | 2007-12-13 21:11:36 +1100 | [diff] [blame] | 59 | #else | 
|  | 60 | static inline int mmio_nvram_init(void) | 
|  | 61 | { | 
|  | 62 | return -ENODEV; | 
|  | 63 | } | 
|  | 64 | #endif | 
|  | 65 |  | 
| Benjamin Herrenschmidt | edc79a2 | 2010-08-02 11:18:09 +1000 | [diff] [blame] | 66 | extern int __init nvram_scan_partitions(void); | 
|  | 67 | extern loff_t nvram_create_partition(const char *name, int sig, | 
|  | 68 | int req_size, int min_size); | 
| Jim Keniston | 0f4ac13 | 2011-02-09 12:43:13 +0000 | [diff] [blame] | 69 | extern int nvram_remove_partition(const char *name, int sig, | 
|  | 70 | const char *exceptions[]); | 
| Benjamin Herrenschmidt | edc79a2 | 2010-08-02 11:18:09 +1000 | [diff] [blame] | 71 | extern int nvram_get_partition_size(loff_t data_index); | 
|  | 72 | extern loff_t nvram_find_partition(const char *name, int sig, int *out_size); | 
|  | 73 |  | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 74 | /* Return partition offset in nvram */ | 
|  | 75 | extern int	pmac_get_partition(int partition); | 
|  | 76 |  | 
|  | 77 | /* Direct access to XPRAM on PowerMacs */ | 
|  | 78 | extern u8	pmac_xpram_read(int xpaddr); | 
|  | 79 | extern void	pmac_xpram_write(int xpaddr, u8 data); | 
|  | 80 |  | 
|  | 81 | /* Synchronize NVRAM */ | 
| Paul Mackerras | c55377e | 2005-11-14 17:22:01 +1100 | [diff] [blame] | 82 | extern void	nvram_sync(void); | 
|  | 83 |  | 
| Hari Bathini | 78989f0 | 2015-02-06 01:06:04 +0530 | [diff] [blame] | 84 | /* Initialize NVRAM OS partition */ | 
|  | 85 | extern int __init nvram_init_os_partition(struct nvram_os_partition *part); | 
|  | 86 |  | 
|  | 87 | /* Initialize NVRAM oops partition */ | 
|  | 88 | extern void __init nvram_init_oops_partition(int rtas_partition_exists); | 
|  | 89 |  | 
|  | 90 | /* Read a NVRAM partition */ | 
|  | 91 | extern int nvram_read_partition(struct nvram_os_partition *part, char *buff, | 
|  | 92 | int length, unsigned int *err_type, | 
|  | 93 | unsigned int *error_log_cnt); | 
|  | 94 |  | 
|  | 95 | /* Write to NVRAM OS partition */ | 
|  | 96 | extern int nvram_write_os_partition(struct nvram_os_partition *part, | 
|  | 97 | char *buff, int length, | 
|  | 98 | unsigned int err_type, | 
|  | 99 | unsigned int error_log_cnt); | 
|  | 100 |  | 
| Martyn Welch | d331d83 | 2009-08-13 09:03:02 +0100 | [diff] [blame] | 101 | /* Determine NVRAM size */ | 
|  | 102 | extern ssize_t nvram_get_size(void); | 
|  | 103 |  | 
| Paul Mackerras | c55377e | 2005-11-14 17:22:01 +1100 | [diff] [blame] | 104 | /* Normal access to NVRAM */ | 
|  | 105 | extern unsigned char nvram_read_byte(int i); | 
|  | 106 | extern void nvram_write_byte(unsigned char c, int i); | 
| Paul Mackerras | c55377e | 2005-11-14 17:22:01 +1100 | [diff] [blame] | 107 | #endif /* _ASM_POWERPC_NVRAM_H */ |