2005-04-16 15:20:36 -07:00
/*
2005-11-14 17:22:01 +11:00
* NVRAM definitions and access functions .
2005-04-16 15:20:36 -07:00
*
* This program is free software ; you can redistribute it and / or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation ; either version
* 2 of the License , or ( at your option ) any later version .
*/
2005-11-14 17:22:01 +11:00
# ifndef _ASM_POWERPC_NVRAM_H
# define _ASM_POWERPC_NVRAM_H
2005-04-16 15:20:36 -07:00
2015-02-06 01:06:04 +05:30
# include <linux/types.h>
2010-07-29 14:45:24 +10:00
# include <linux/errno.h>
2008-02-04 22:27:31 -08:00
# include <linux/list.h>
2012-10-09 09:47:26 +01:00
# include <uapi/asm/nvram.h>
2008-02-04 22:27:31 -08:00
2015-02-06 01:06:04 +05:30
/*
* Set oops header version to distinguish between old and new format header .
* lnx , oops - log partition max size is 4000 , header version > 4000 will
* help in identifying new header .
*/
# define OOPS_HDR_VERSION 5000
struct err_log_info {
__be32 error_type ;
__be32 seq_num ;
} ;
struct nvram_os_partition {
const char * name ;
int req_size ; /* desired size, in bytes */
int min_size ; /* minimum acceptable size (0 means req_size) */
long size ; /* size of data portion (excluding err_log_info) */
long index ; /* offset of data portion of partition */
bool os_partition ; /* partition initialized by OS, not FW */
} ;
struct oops_log_info {
__be16 version ;
__be16 report_length ;
__be64 timestamp ;
} __attribute__ ( ( packed ) ) ;
extern struct nvram_os_partition oops_log_partition ;
2010-08-02 11:18:09 +10:00
# ifdef CONFIG_PPC_PSERIES
2015-02-06 01:06:04 +05:30
extern struct nvram_os_partition rtas_log_partition ;
2007-08-10 06:56:41 +10:00
extern int nvram_write_error_log ( char * buff , int length ,
unsigned int err_type , unsigned int err_seq ) ;
extern int nvram_read_error_log ( char * buff , int length ,
unsigned int * err_type , unsigned int * err_seq ) ;
2005-04-16 15:20:36 -07:00
extern int nvram_clear_error_log ( void ) ;
extern int pSeries_nvram_init ( void ) ;
2010-08-02 11:18:09 +10:00
# endif /* CONFIG_PPC_PSERIES */
2007-12-13 21:11:36 +11:00
# ifdef CONFIG_MMIO_NVRAM
2005-10-31 20:08:37 -05:00
extern int mmio_nvram_init ( void ) ;
2007-12-13 21:11:36 +11:00
# else
static inline int mmio_nvram_init ( void )
{
return - ENODEV ;
}
# endif
2010-08-02 11:18:09 +10:00
extern int __init nvram_scan_partitions ( void ) ;
extern loff_t nvram_create_partition ( const char * name , int sig ,
int req_size , int min_size ) ;
2011-02-09 12:43:13 +00:00
extern int nvram_remove_partition ( const char * name , int sig ,
const char * exceptions [ ] ) ;
2010-08-02 11:18:09 +10:00
extern int nvram_get_partition_size ( loff_t data_index ) ;
extern loff_t nvram_find_partition ( const char * name , int sig , int * out_size ) ;
2005-04-16 15:20:36 -07:00
/* Return partition offset in nvram */
extern int pmac_get_partition ( int partition ) ;
/* Direct access to XPRAM on PowerMacs */
extern u8 pmac_xpram_read ( int xpaddr ) ;
extern void pmac_xpram_write ( int xpaddr , u8 data ) ;
/* Synchronize NVRAM */
2005-11-14 17:22:01 +11:00
extern void nvram_sync ( void ) ;
2015-02-06 01:06:04 +05:30
/* Initialize NVRAM OS partition */
extern int __init nvram_init_os_partition ( struct nvram_os_partition * part ) ;
/* Initialize NVRAM oops partition */
extern void __init nvram_init_oops_partition ( int rtas_partition_exists ) ;
/* Read a NVRAM partition */
extern int nvram_read_partition ( struct nvram_os_partition * part , char * buff ,
int length , unsigned int * err_type ,
unsigned int * error_log_cnt ) ;
/* Write to NVRAM OS partition */
extern int nvram_write_os_partition ( struct nvram_os_partition * part ,
char * buff , int length ,
unsigned int err_type ,
unsigned int error_log_cnt ) ;
2009-08-13 09:03:02 +01:00
/* Determine NVRAM size */
extern ssize_t nvram_get_size ( void ) ;
2005-11-14 17:22:01 +11:00
/* Normal access to NVRAM */
extern unsigned char nvram_read_byte ( int i ) ;
extern void nvram_write_byte ( unsigned char c , int i ) ;
# endif /* _ASM_POWERPC_NVRAM_H */