source: rtems/bsps/powerpc/include/nvram.h @ 90232bc

Last change on this file since 90232bc was 2afb22b, checked in by Chris Johns <chrisj@…>, on Dec 23, 2017 at 7:18:56 AM

Remove make preinstall

A speciality of the RTEMS build system was the make preinstall step. It
copied header files from arbitrary locations into the build tree. The
header files were included via the -Bsome/build/tree/path GCC command
line option.

This has at least seven problems:

  • The make preinstall step itself needs time and disk space.
  • Errors in header files show up in the build tree copy. This makes it hard for editors to open the right file to fix the error.
  • There is no clear relationship between source and build tree header files. This makes an audit of the build process difficult.
  • The visibility of all header files in the build tree makes it difficult to enforce API barriers. For example it is discouraged to use BSP-specifics in the cpukit.
  • An introduction of a new build system is difficult.
  • Include paths specified by the -B option are system headers. This may suppress warnings.
  • The parallel build had sporadic failures on some hosts.

This patch removes the make preinstall step. All installed header
files are moved to dedicated include directories in the source tree.
Let @RTEMS_CPU@ be the target architecture, e.g. arm, powerpc, sparc,
etc. Let @RTEMS_BSP_FAMILIY@ be a BSP family base directory, e.g.
erc32, imx, qoriq, etc.

The new cpukit include directories are:

  • cpukit/include
  • cpukit/score/cpu/@RTEMS_CPU@/include
  • cpukit/libnetworking

The new BSP include directories are:

  • bsps/include
  • bsps/@RTEMS_CPU@/include
  • bsps/@RTEMS_CPU@/@RTEMS_BSP_FAMILIY@/include

There are build tree include directories for generated files.

The include directory order favours the most general header file, e.g.
it is not possible to override general header files via the include path
order.

The "bootstrap -p" option was removed. The new "bootstrap -H" option
should be used to regenerate the "headers.am" files.

Update #3254.

  • 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
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
51typedef 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
75typedef 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
91typedef 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
112typedef 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 */
152typedef 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 */
Note: See TracBrowser for help on using the repository browser.