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
2010-07-29 14:45:24 +10:00
/* Signatures for nvram partitions */
2005-04-16 15:20:36 -07:00
# define NVRAM_SIG_SP 0x02 /* support processor */
# define NVRAM_SIG_OF 0x50 /* open firmware config */
# define NVRAM_SIG_FW 0x51 /* general firmware */
# define NVRAM_SIG_HW 0x52 /* hardware (VPD) */
# define NVRAM_SIG_FLIP 0x5a /* Apple flip/flop header */
# define NVRAM_SIG_APPL 0x5f /* Apple "system" (???) */
# define NVRAM_SIG_SYS 0x70 /* system env vars */
# define NVRAM_SIG_CFG 0x71 /* config data */
# define NVRAM_SIG_ELOG 0x72 /* error log */
# define NVRAM_SIG_VEND 0x7e /* vendor defined */
# define NVRAM_SIG_FREE 0x7f /* Free space */
# define NVRAM_SIG_OS 0xa0 /* OS defined */
# define NVRAM_SIG_PANIC 0xa1 /* Apple OSX "panic" */
2005-12-16 22:43:46 +01:00
# ifdef __KERNEL__
2008-02-04 22:27:31 -08:00
2010-07-29 14:45:24 +10:00
# include <linux/errno.h>
2008-02-04 22:27:31 -08:00
# include <linux/list.h>
2010-08-02 11:18:09 +10:00
# ifdef CONFIG_PPC_PSERIES
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-12-16 22:43:46 +01:00
# endif /* __KERNEL__ */
2005-04-16 15:20:36 -07:00
/* PowerMac specific nvram stuffs */
enum {
pmac_nvram_OF , /* Open Firmware partition */
pmac_nvram_XPRAM , /* MacOS XPRAM partition */
pmac_nvram_NR /* MacOS Name Registry partition */
} ;
2005-12-16 22:43:46 +01:00
# ifdef __KERNEL__
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 ) ;
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 ) ;
2005-12-16 22:43:46 +01:00
# endif
2005-04-16 15:20:36 -07:00
/* Some offsets in XPRAM */
# define PMAC_XPRAM_MACHINE_LOC 0xe4
# define PMAC_XPRAM_SOUND_VOLUME 0x08
/* Machine location structure in PowerMac XPRAM */
struct pmac_machine_location {
unsigned int latitude ; /* 2+30 bit Fractional number */
unsigned int longitude ; /* 2+30 bit Fractional number */
unsigned int delta ; /* mix of GMT delta and DLS */
} ;
/*
* / dev / nvram ioctls
*
* Note that PMAC_NVRAM_GET_OFFSET is still supported , but is
* definitely obsolete . Do not use it if you can avoid it
*/
# define OBSOLETE_PMAC_NVRAM_GET_OFFSET \
_IOWR ( ' p ' , 0x40 , int )
# define IOC_NVRAM_GET_OFFSET _IOWR('p', 0x42, int) /* Get NVRAM partition offset */
2005-11-14 17:22:01 +11:00
# define IOC_NVRAM_SYNC _IO('p', 0x43) /* Sync NVRAM image */
2005-04-16 15:20:36 -07:00
2005-11-14 17:22:01 +11:00
# endif /* _ASM_POWERPC_NVRAM_H */