OpenCores
URL https://opencores.org/ocsvn/or1k/or1k/trunk

Subversion Repositories or1k

[/] [or1k/] [trunk/] [linux/] [linux-2.4/] [include/] [asm-ppc/] [prep_nvram.h] - Blame information for rev 1765

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 1276 phoenix
/*
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__ */

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.