diff options
Diffstat (limited to 'arch/powerpc/include/asm/nvram.h')
-rw-r--r-- | arch/powerpc/include/asm/nvram.h | 139 |
1 files changed, 139 insertions, 0 deletions
diff --git a/arch/powerpc/include/asm/nvram.h b/arch/powerpc/include/asm/nvram.h new file mode 100644 index 00000000000..efde5ac82f7 --- /dev/null +++ b/arch/powerpc/include/asm/nvram.h | |||
@@ -0,0 +1,139 @@ | |||
1 | /* | ||
2 | * NVRAM definitions and access functions. | ||
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 | */ | ||
9 | |||
10 | #ifndef _ASM_POWERPC_NVRAM_H | ||
11 | #define _ASM_POWERPC_NVRAM_H | ||
12 | |||
13 | #include <linux/errno.h> | ||
14 | |||
15 | #define NVRW_CNT 0x20 | ||
16 | #define NVRAM_HEADER_LEN 16 /* sizeof(struct nvram_header) */ | ||
17 | #define NVRAM_BLOCK_LEN 16 | ||
18 | #define NVRAM_MAX_REQ (2080/NVRAM_BLOCK_LEN) | ||
19 | #define NVRAM_MIN_REQ (1056/NVRAM_BLOCK_LEN) | ||
20 | |||
21 | #define NVRAM_AS0 0x74 | ||
22 | #define NVRAM_AS1 0x75 | ||
23 | #define NVRAM_DATA 0x77 | ||
24 | |||
25 | |||
26 | /* RTC Offsets */ | ||
27 | |||
28 | #define MOTO_RTC_SECONDS 0x1FF9 | ||
29 | #define MOTO_RTC_MINUTES 0x1FFA | ||
30 | #define MOTO_RTC_HOURS 0x1FFB | ||
31 | #define MOTO_RTC_DAY_OF_WEEK 0x1FFC | ||
32 | #define MOTO_RTC_DAY_OF_MONTH 0x1FFD | ||
33 | #define MOTO_RTC_MONTH 0x1FFE | ||
34 | #define MOTO_RTC_YEAR 0x1FFF | ||
35 | #define MOTO_RTC_CONTROLA 0x1FF8 | ||
36 | #define MOTO_RTC_CONTROLB 0x1FF9 | ||
37 | |||
38 | #define NVRAM_SIG_SP 0x02 /* support processor */ | ||
39 | #define NVRAM_SIG_OF 0x50 /* open firmware config */ | ||
40 | #define NVRAM_SIG_FW 0x51 /* general firmware */ | ||
41 | #define NVRAM_SIG_HW 0x52 /* hardware (VPD) */ | ||
42 | #define NVRAM_SIG_FLIP 0x5a /* Apple flip/flop header */ | ||
43 | #define NVRAM_SIG_APPL 0x5f /* Apple "system" (???) */ | ||
44 | #define NVRAM_SIG_SYS 0x70 /* system env vars */ | ||
45 | #define NVRAM_SIG_CFG 0x71 /* config data */ | ||
46 | #define NVRAM_SIG_ELOG 0x72 /* error log */ | ||
47 | #define NVRAM_SIG_VEND 0x7e /* vendor defined */ | ||
48 | #define NVRAM_SIG_FREE 0x7f /* Free space */ | ||
49 | #define NVRAM_SIG_OS 0xa0 /* OS defined */ | ||
50 | #define NVRAM_SIG_PANIC 0xa1 /* Apple OSX "panic" */ | ||
51 | |||
52 | /* If change this size, then change the size of NVNAME_LEN */ | ||
53 | struct nvram_header { | ||
54 | unsigned char signature; | ||
55 | unsigned char checksum; | ||
56 | unsigned short length; | ||
57 | char name[12]; | ||
58 | }; | ||
59 | |||
60 | #ifdef __KERNEL__ | ||
61 | |||
62 | #include <linux/list.h> | ||
63 | |||
64 | struct nvram_partition { | ||
65 | struct list_head partition; | ||
66 | struct nvram_header header; | ||
67 | unsigned int index; | ||
68 | }; | ||
69 | |||
70 | |||
71 | extern int nvram_write_error_log(char * buff, int length, | ||
72 | unsigned int err_type, unsigned int err_seq); | ||
73 | extern int nvram_read_error_log(char * buff, int length, | ||
74 | unsigned int * err_type, unsigned int *err_seq); | ||
75 | extern int nvram_clear_error_log(void); | ||
76 | extern struct nvram_partition *nvram_find_partition(int sig, const char *name); | ||
77 | |||
78 | extern int pSeries_nvram_init(void); | ||
79 | |||
80 | #ifdef CONFIG_MMIO_NVRAM | ||
81 | extern int mmio_nvram_init(void); | ||
82 | #else | ||
83 | static inline int mmio_nvram_init(void) | ||
84 | { | ||
85 | return -ENODEV; | ||
86 | } | ||
87 | #endif | ||
88 | |||
89 | #endif /* __KERNEL__ */ | ||
90 | |||
91 | /* PowerMac specific nvram stuffs */ | ||
92 | |||
93 | enum { | ||
94 | pmac_nvram_OF, /* Open Firmware partition */ | ||
95 | pmac_nvram_XPRAM, /* MacOS XPRAM partition */ | ||
96 | pmac_nvram_NR /* MacOS Name Registry partition */ | ||
97 | }; | ||
98 | |||
99 | #ifdef __KERNEL__ | ||
100 | /* Return partition offset in nvram */ | ||
101 | extern int pmac_get_partition(int partition); | ||
102 | |||
103 | /* Direct access to XPRAM on PowerMacs */ | ||
104 | extern u8 pmac_xpram_read(int xpaddr); | ||
105 | extern void pmac_xpram_write(int xpaddr, u8 data); | ||
106 | |||
107 | /* Synchronize NVRAM */ | ||
108 | extern void nvram_sync(void); | ||
109 | |||
110 | /* Normal access to NVRAM */ | ||
111 | extern unsigned char nvram_read_byte(int i); | ||
112 | extern void nvram_write_byte(unsigned char c, int i); | ||
113 | #endif | ||
114 | |||
115 | /* Some offsets in XPRAM */ | ||
116 | #define PMAC_XPRAM_MACHINE_LOC 0xe4 | ||
117 | #define PMAC_XPRAM_SOUND_VOLUME 0x08 | ||
118 | |||
119 | /* Machine location structure in PowerMac XPRAM */ | ||
120 | struct pmac_machine_location { | ||
121 | unsigned int latitude; /* 2+30 bit Fractional number */ | ||
122 | unsigned int longitude; /* 2+30 bit Fractional number */ | ||
123 | unsigned int delta; /* mix of GMT delta and DLS */ | ||
124 | }; | ||
125 | |||
126 | /* | ||
127 | * /dev/nvram ioctls | ||
128 | * | ||
129 | * Note that PMAC_NVRAM_GET_OFFSET is still supported, but is | ||
130 | * definitely obsolete. Do not use it if you can avoid it | ||
131 | */ | ||
132 | |||
133 | #define OBSOLETE_PMAC_NVRAM_GET_OFFSET \ | ||
134 | _IOWR('p', 0x40, int) | ||
135 | |||
136 | #define IOC_NVRAM_GET_OFFSET _IOWR('p', 0x42, int) /* Get NVRAM partition offset */ | ||
137 | #define IOC_NVRAM_SYNC _IO('p', 0x43) /* Sync NVRAM image */ | ||
138 | |||
139 | #endif /* _ASM_POWERPC_NVRAM_H */ | ||