2005-04-17 02:20:36 +04:00
/*
2005-11-14 09:22:01 +03:00
* NVRAM definitions and access functions .
2005-04-17 02:20:36 +04: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 09:22:01 +03:00
# ifndef _ASM_POWERPC_NVRAM_H
# define _ASM_POWERPC_NVRAM_H
2005-04-17 02:20:36 +04:00
# define NVRW_CNT 0x20
# define NVRAM_HEADER_LEN 16 /* sizeof(struct nvram_header) */
# define NVRAM_BLOCK_LEN 16
# define NVRAM_MAX_REQ (2080 / NVRAM_BLOCK_LEN)
# define NVRAM_MIN_REQ (1056 / NVRAM_BLOCK_LEN)
# define NVRAM_AS0 0x74
# define NVRAM_AS1 0x75
# define NVRAM_DATA 0x77
/* RTC Offsets */
# define MOTO_RTC_SECONDS 0x1FF9
# define MOTO_RTC_MINUTES 0x1FFA
# define MOTO_RTC_HOURS 0x1FFB
# define MOTO_RTC_DAY_OF_WEEK 0x1FFC
# define MOTO_RTC_DAY_OF_MONTH 0x1FFD
# define MOTO_RTC_MONTH 0x1FFE
# define MOTO_RTC_YEAR 0x1FFF
# define MOTO_RTC_CONTROLA 0x1FF8
# define MOTO_RTC_CONTROLB 0x1FF9
# 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" */
/* If change this size, then change the size of NVNAME_LEN */
struct nvram_header {
unsigned char signature ;
unsigned char checksum ;
unsigned short length ;
char name [ 12 ] ;
} ;
2005-12-17 00:43:46 +03:00
# ifdef __KERNEL__
2005-04-17 02:20:36 +04:00
struct nvram_partition {
struct list_head partition ;
struct nvram_header header ;
unsigned int index ;
} ;
extern int nvram_write_error_log ( char * buff , int length , unsigned int err_type ) ;
extern int nvram_read_error_log ( char * buff , int length , unsigned int * err_type ) ;
extern int nvram_clear_error_log ( void ) ;
extern struct nvram_partition * nvram_find_partition ( int sig , const char * name ) ;
extern int pSeries_nvram_init ( void ) ;
2005-11-01 04:08:37 +03:00
extern int mmio_nvram_init ( void ) ;
2005-12-17 00:43:46 +03:00
# endif /* __KERNEL__ */
2005-04-17 02:20:36 +04: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-17 00:43:46 +03:00
# ifdef __KERNEL__
2005-04-17 02:20:36 +04: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 09:22:01 +03:00
extern void nvram_sync ( void ) ;
/* Normal access to NVRAM */
extern unsigned char nvram_read_byte ( int i ) ;
extern void nvram_write_byte ( unsigned char c , int i ) ;
2005-12-17 00:43:46 +03:00
# endif
2005-04-17 02:20:36 +04: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 09:22:01 +03:00
# define IOC_NVRAM_SYNC _IO('p', 0x43) /* Sync NVRAM image */
2005-04-17 02:20:36 +04:00
2005-11-14 09:22:01 +03:00
# endif /* _ASM_POWERPC_NVRAM_H */