diff options
Diffstat (limited to 'include/asm-ppc/prep_nvram.h')
-rw-r--r-- | include/asm-ppc/prep_nvram.h | 153 |
1 files changed, 153 insertions, 0 deletions
diff --git a/include/asm-ppc/prep_nvram.h b/include/asm-ppc/prep_nvram.h new file mode 100644 index 000000000000..6dbc36a84df2 --- /dev/null +++ b/include/asm-ppc/prep_nvram.h | |||
@@ -0,0 +1,153 @@ | |||
1 | /* | ||
2 | * PreP compliant NVRAM access | ||
3 | */ | ||
4 | |||
5 | /* Corey Minyard (minyard@acm.org) - Stolen from PReP book. Per the | ||
6 | license I must say: | ||
7 | (C) Copyright (Corey Minyard), (1998). All rights reserved | ||
8 | */ | ||
9 | |||
10 | /* Structure map for NVRAM on PowerPC Reference Platform */ | ||
11 | /* All fields are either character/byte strings which are valid either | ||
12 | endian or they are big-endian numbers. | ||
13 | |||
14 | There are a number of Date and Time fields which are in RTC format, | ||
15 | big-endian. These are stored in UT (GMT). | ||
16 | |||
17 | For enum's: if given in hex then they are bit significant, i.e. only | ||
18 | one bit is on for each enum. | ||
19 | */ | ||
20 | #ifdef __KERNEL__ | ||
21 | #ifndef _PPC_PREP_NVRAM_H | ||
22 | #define _PPC_PREP_NVRAM_H | ||
23 | |||
24 | #define MAX_PREP_NVRAM 0x8000 | ||
25 | #define PREP_NVRAM_AS0 0x74 | ||
26 | #define PREP_NVRAM_AS1 0x75 | ||
27 | #define PREP_NVRAM_DATA 0x77 | ||
28 | |||
29 | #define NVSIZE 4096 /* size of NVRAM */ | ||
30 | #define OSAREASIZE 512 /* size of OSArea space */ | ||
31 | #define CONFSIZE 1024 /* guess at size of Configuration space */ | ||
32 | |||
33 | typedef struct _SECURITY { | ||
34 | unsigned long BootErrCnt; /* Count of boot password errors */ | ||
35 | unsigned long ConfigErrCnt; /* Count of config password errors */ | ||
36 | unsigned long BootErrorDT[2]; /* Date&Time from RTC of last error in pw */ | ||
37 | unsigned long ConfigErrorDT[2]; /* Date&Time from RTC of last error in pw */ | ||
38 | unsigned long BootCorrectDT[2]; /* Date&Time from RTC of last correct pw */ | ||
39 | unsigned long ConfigCorrectDT[2]; /* Date&Time from RTC of last correct pw */ | ||
40 | unsigned long BootSetDT[2]; /* Date&Time from RTC of last set of pw */ | ||
41 | unsigned long ConfigSetDT[2]; /* Date&Time from RTC of last set of pw */ | ||
42 | unsigned char Serial[16]; /* Box serial number */ | ||
43 | } SECURITY; | ||
44 | |||
45 | typedef enum _OS_ID { | ||
46 | Unknown = 0, | ||
47 | Firmware = 1, | ||
48 | AIX = 2, | ||
49 | NT = 3, | ||
50 | MKOS2 = 4, | ||
51 | MKAIX = 5, | ||
52 | Taligent = 6, | ||
53 | Solaris = 7, | ||
54 | MK = 12 | ||
55 | } OS_ID; | ||
56 | |||
57 | typedef struct _ERROR_LOG { | ||
58 | unsigned char ErrorLogEntry[40]; /* To be architected */ | ||
59 | } ERROR_LOG; | ||
60 | |||
61 | typedef enum _BOOT_STATUS { | ||
62 | BootStarted = 0x01, | ||
63 | BootFinished = 0x02, | ||
64 | RestartStarted = 0x04, | ||
65 | RestartFinished = 0x08, | ||
66 | PowerFailStarted = 0x10, | ||
67 | PowerFailFinished = 0x20, | ||
68 | ProcessorReady = 0x40, | ||
69 | ProcessorRunning = 0x80, | ||
70 | ProcessorStart = 0x0100 | ||
71 | } BOOT_STATUS; | ||
72 | |||
73 | typedef struct _RESTART_BLOCK { | ||
74 | unsigned short Version; | ||
75 | unsigned short Revision; | ||
76 | unsigned long ResumeReserve1[2]; | ||
77 | volatile unsigned long BootStatus; | ||
78 | unsigned long CheckSum; /* Checksum of RESTART_BLOCK */ | ||
79 | void * RestartAddress; | ||
80 | void * SaveAreaAddr; | ||
81 | unsigned long SaveAreaLength; | ||
82 | } RESTART_BLOCK; | ||
83 | |||
84 | typedef enum _OSAREA_USAGE { | ||
85 | Empty = 0, | ||
86 | Used = 1 | ||
87 | } OSAREA_USAGE; | ||
88 | |||
89 | typedef enum _PM_MODE { | ||
90 | Suspend = 0x80, /* Part of state is in memory */ | ||
91 | Normal = 0x00 /* No power management in effect */ | ||
92 | } PMMODE; | ||
93 | |||
94 | typedef struct _HEADER { | ||
95 | unsigned short Size; /* NVRAM size in K(1024) */ | ||
96 | unsigned char Version; /* Structure map different */ | ||
97 | unsigned char Revision; /* Structure map the same -may | ||
98 | be new values in old fields | ||
99 | in other words old code still works */ | ||
100 | unsigned short Crc1; /* check sum from beginning of nvram to OSArea */ | ||
101 | unsigned short Crc2; /* check sum of config */ | ||
102 | unsigned char LastOS; /* OS_ID */ | ||
103 | unsigned char Endian; /* B if big endian, L if little endian */ | ||
104 | unsigned char OSAreaUsage; /* OSAREA_USAGE */ | ||
105 | unsigned char PMMode; /* Shutdown mode */ | ||
106 | RESTART_BLOCK RestartBlock; | ||
107 | SECURITY Security; | ||
108 | ERROR_LOG ErrorLog[2]; | ||
109 | |||
110 | /* Global Environment information */ | ||
111 | void * GEAddress; | ||
112 | unsigned long GELength; | ||
113 | |||
114 | /* Date&Time from RTC of last change to Global Environment */ | ||
115 | unsigned long GELastWriteDT[2]; | ||
116 | |||
117 | /* Configuration information */ | ||
118 | void * ConfigAddress; | ||
119 | unsigned long ConfigLength; | ||
120 | |||
121 | /* Date&Time from RTC of last change to Configuration */ | ||
122 | unsigned long ConfigLastWriteDT[2]; | ||
123 | unsigned long ConfigCount; /* Count of entries in Configuration */ | ||
124 | |||
125 | /* OS dependent temp area */ | ||
126 | void * OSAreaAddress; | ||
127 | unsigned long OSAreaLength; | ||
128 | |||
129 | /* Date&Time from RTC of last change to OSAreaArea */ | ||
130 | unsigned long OSAreaLastWriteDT[2]; | ||
131 | } HEADER; | ||
132 | |||
133 | /* Here is the whole map of the NVRAM */ | ||
134 | typedef struct _NVRAM_MAP { | ||
135 | HEADER Header; | ||
136 | unsigned char GEArea[NVSIZE-CONFSIZE-OSAREASIZE-sizeof(HEADER)]; | ||
137 | unsigned char OSArea[OSAREASIZE]; | ||
138 | unsigned char ConfigArea[CONFSIZE]; | ||
139 | } NVRAM_MAP; | ||
140 | |||
141 | /* Routines to manipulate the NVRAM */ | ||
142 | void init_prep_nvram(void); | ||
143 | char *prep_nvram_get_var(const char *name); | ||
144 | char *prep_nvram_first_var(void); | ||
145 | char *prep_nvram_next_var(char *name); | ||
146 | |||
147 | /* Routines to read and write directly to the NVRAM */ | ||
148 | unsigned char prep_nvram_read_val(int addr); | ||
149 | void prep_nvram_write_val(int addr, | ||
150 | unsigned char val); | ||
151 | |||
152 | #endif /* _PPC_PREP_NVRAM_H */ | ||
153 | #endif /* __KERNEL__ */ | ||