RTEMS: bsps/powerpc/include/nvram.h Source File

| RTEMS 5.4-rc2

Loading...
Searching...
No Matches
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
63typedef 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
79typedef 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
102typedef enum _OSAREA_USAGE {
103 Empty = 0,
104 Used = 1
105} OSAREA_USAGE;
106
107typedef 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 */
160void init_prep_nvram(void);
161char *prep_nvram_get_var(const char *name);
162char *prep_nvram_first_var(void);
163char *prep_nvram_next_var(char *name);
164
165#endif /* ASM */
166
167#endif /* _PPC_NVRAM_H */
_ERROR_LOG
Definition: nvram.h:75
_HEADER
Definition: nvram.h:112
_NVRAM_MAP
Definition: nvram.h:152
_RESTART_BLOCK
Definition: nvram.h:91
_SECURITY
Definition: nvram.h:51