RTEMS  5.1
nvram.h
1 /*
2  * PreP compliant NVRAM access
3  *
4  * This file can be found in motorla or IBP PPC site.
5  */
6 
7 #ifndef _PPC_NVRAM_H
8 #define _PPC_NVRAM_H
9 
10 #define NVRAM_AS0 0x74
11 #define NVRAM_AS1 0x75
12 #define NVRAM_DATA 0x77
13 
14 /* RTC Offsets */
15 
16 #define MOTO_RTC_SECONDS 0x1FF9
17 #define MOTO_RTC_MINUTES 0x1FFA
18 #define MOTO_RTC_HOURS 0x1FFB
19 #define MOTO_RTC_DAY_OF_WEEK 0x1FFC
20 #define MOTO_RTC_DAY_OF_MONTH 0x1FFD
21 #define MOTO_RTC_MONTH 0x1FFE
22 #define MOTO_RTC_YEAR 0x1FFF
23 #define MOTO_RTC_CONTROLA 0x1FF8
24 #define MOTO_RTC_CONTROLB 0x1FF9
25 
26 #ifndef BCD_TO_BIN
27 #define BCD_TO_BIN(val) ((val)=((val)&15) + ((val)>>4)*10)
28 #endif
29 
30 #ifndef BIN_TO_BCD
31 #define BIN_TO_BCD(val) ((val)=(((val)/10)<<4) + (val)%10)
32 #endif
33 
34 /* Structure map for NVRAM on PowerPC Reference Platform */
35 /* All fields are either character/byte strings which are valid either
36  endian or they are big-endian numbers.
37 
38  There are a number of Date and Time fields which are in RTC format,
39  big-endian. These are stored in UT (GMT).
40 
41  For enum's: if given in hex then they are bit significant, i.e. only
42  one bit is on for each enum.
43 */
44 
45 #define NVSIZE 4096 /* size of NVRAM */
46 #define OSAREASIZE 512 /* size of OSArea space */
47 #define CONFSIZE 1024 /* guess at size of Configuration space */
48 
49 #ifndef ASM
50 
51 typedef struct _SECURITY {
52  unsigned long BootErrCnt; /* Count of boot password errors */
53  unsigned long ConfigErrCnt; /* Count of config password errors */
54  unsigned long BootErrorDT[2]; /* Date&Time from RTC of last error in pw */
55  unsigned long ConfigErrorDT[2]; /* Date&Time from RTC of last error in pw */
56  unsigned long BootCorrectDT[2]; /* Date&Time from RTC of last correct pw */
57  unsigned long ConfigCorrectDT[2]; /* Date&Time from RTC of last correct pw */
58  unsigned long BootSetDT[2]; /* Date&Time from RTC of last set of pw */
59  unsigned long ConfigSetDT[2]; /* Date&Time from RTC of last set of pw */
60  unsigned char Serial[16]; /* Box serial number */
61 } SECURITY;
62 
63 typedef enum _OS_ID {
64  Unknown = 0,
65  Firmware = 1,
66  AIX = 2,
67  NT = 3,
68  MKOS2 = 4,
69  MKAIX = 5,
70  Taligent = 6,
71  Solaris = 7,
72  MK = 12
73 } OS_ID;
74 
75 typedef struct _ERROR_LOG {
76  unsigned char ErrorLogEntry[40]; /* To be architected */
77 } ERROR_LOG;
78 
79 typedef enum _BOOT_STATUS {
80  BootStarted = 0x01,
81  BootFinished = 0x02,
82  RestartStarted = 0x04,
83  RestartFinished = 0x08,
84  PowerFailStarted = 0x10,
85  PowerFailFinished = 0x20,
86  ProcessorReady = 0x40,
87  ProcessorRunning = 0x80,
88  ProcessorStart = 0x0100
89 } BOOT_STATUS;
90 
91 typedef struct _RESTART_BLOCK {
92  unsigned short Version;
93  unsigned short Revision;
94  unsigned long ResumeReserve1[2];
95  volatile unsigned long BootStatus;
96  unsigned long CheckSum; /* Checksum of RESTART_BLOCK */
97  void* RestartAddress;
98  void* SaveAreaAddr;
99  unsigned long SaveAreaLength;
100 } RESTART_BLOCK;
101 
102 typedef enum _OSAREA_USAGE {
103  Empty = 0,
104  Used = 1
105 } OSAREA_USAGE;
106 
107 typedef enum _PM_MODE {
108  Suspend = 0x80, /* Part of state is in memory */
109  Normal = 0x00 /* No power management in effect */
110 } PMMode;
111 
112 typedef struct _HEADER {
113  unsigned short Size; /* NVRAM size in K(1024) */
114  unsigned char Version; /* Structure map different */
115  unsigned char Revision; /* Structure map the same -may
116  be new values in old fields
117  in other words old code still works */
118  unsigned short Crc1; /* check sum from beginning of nvram to OSArea */
119  unsigned short Crc2; /* check sum of config */
120  unsigned char LastOS; /* OS_ID */
121  unsigned char Endian; /* B if big endian, L if little endian */
122  unsigned char OSAreaUsage;/* OSAREA_USAGE */
123  unsigned char PMMode; /* Shutdown mode */
124  RESTART_BLOCK RestartBlock;
125  SECURITY Security;
126  ERROR_LOG ErrorLog[2];
127 
128  /* Global Environment information */
129  void* GEAddress;
130  unsigned long GELength;
131 
132  /* Date&Time from RTC of last change to Global Environment */
133  unsigned long GELastWriteDT[2];
134 
135  /* Configuration information */
136  void* ConfigAddress;
137  unsigned long ConfigLength;
138 
139  /* Date&Time from RTC of last change to Configuration */
140  unsigned long ConfigLastWriteDT[2];
141  unsigned long ConfigCount; /* Count of entries in Configuration */
142 
143  /* OS dependent temp area */
144  void* OSAreaAddress;
145  unsigned long OSAreaLength;
146 
147  /* Date&Time from RTC of last change to OSArea */
148  unsigned long OSAreaLastWriteDT[2];
149 } HEADER;
150 
151 /* Here is the whole map of the NVRAM */
152 typedef struct _NVRAM_MAP {
153  HEADER Header;
154  unsigned char GEArea[NVSIZE-CONFSIZE-OSAREASIZE-sizeof(HEADER)];
155  unsigned char OSArea[OSAREASIZE];
156  unsigned char ConfigArea[CONFSIZE];
157 } NVRAM_MAP;
158 
159 /* Routines to manipulate the NVRAM */
160 void init_prep_nvram(void);
161 char *prep_nvram_get_var(const char *name);
162 char *prep_nvram_first_var(void);
163 char *prep_nvram_next_var(char *name);
164 
165 #endif /* ASM */
166 
167 #endif /* _PPC_NVRAM_H */
Definition: nvram.h:51
Definition: nvram.h:91
Definition: nvram.h:75
Definition: nvram.h:152
Definition: nvram.h:112