source: rtems/c/src/lib/libbsp/powerpc/motorola_powerpc/include/nvram.h @ fcee56c0

4.104.114.84.95
Last change on this file since fcee56c0 was fcee56c0, checked in by Joel Sherrill <joel.sherrill@…>, on 07/01/99 at 23:39:13

Patch from Eric Valette <valette@…> to clean up the
previous submission.

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