mirror of
https://gitlab.rtems.org/rtems/rtos/rtems.git
synced 2025-12-05 15:15:44 +00:00
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.
168 lines
4.8 KiB
C
168 lines
4.8 KiB
C
/*
|
|
* PreP compliant NVRAM access
|
|
*
|
|
* This file can be found in motorla or IBP PPC site.
|
|
*/
|
|
|
|
#ifndef _PPC_NVRAM_H
|
|
#define _PPC_NVRAM_H
|
|
|
|
#define NVRAM_AS0 0x74
|
|
#define NVRAM_AS1 0x75
|
|
#define NVRAM_DATA 0x77
|
|
|
|
/* RTC Offsets */
|
|
|
|
#define MOTO_RTC_SECONDS 0x1FF9
|
|
#define MOTO_RTC_MINUTES 0x1FFA
|
|
#define MOTO_RTC_HOURS 0x1FFB
|
|
#define MOTO_RTC_DAY_OF_WEEK 0x1FFC
|
|
#define MOTO_RTC_DAY_OF_MONTH 0x1FFD
|
|
#define MOTO_RTC_MONTH 0x1FFE
|
|
#define MOTO_RTC_YEAR 0x1FFF
|
|
#define MOTO_RTC_CONTROLA 0x1FF8
|
|
#define MOTO_RTC_CONTROLB 0x1FF9
|
|
|
|
#ifndef BCD_TO_BIN
|
|
#define BCD_TO_BIN(val) ((val)=((val)&15) + ((val)>>4)*10)
|
|
#endif
|
|
|
|
#ifndef BIN_TO_BCD
|
|
#define BIN_TO_BCD(val) ((val)=(((val)/10)<<4) + (val)%10)
|
|
#endif
|
|
|
|
/* Structure map for NVRAM on PowerPC Reference Platform */
|
|
/* All fields are either character/byte strings which are valid either
|
|
endian or they are big-endian numbers.
|
|
|
|
There are a number of Date and Time fields which are in RTC format,
|
|
big-endian. These are stored in UT (GMT).
|
|
|
|
For enum's: if given in hex then they are bit significant, i.e. only
|
|
one bit is on for each enum.
|
|
*/
|
|
|
|
#define NVSIZE 4096 /* size of NVRAM */
|
|
#define OSAREASIZE 512 /* size of OSArea space */
|
|
#define CONFSIZE 1024 /* guess at size of Configuration space */
|
|
|
|
#ifndef ASM
|
|
|
|
typedef struct _SECURITY {
|
|
unsigned long BootErrCnt; /* Count of boot password errors */
|
|
unsigned long ConfigErrCnt; /* Count of config password errors */
|
|
unsigned long BootErrorDT[2]; /* Date&Time from RTC of last error in pw */
|
|
unsigned long ConfigErrorDT[2]; /* Date&Time from RTC of last error in pw */
|
|
unsigned long BootCorrectDT[2]; /* Date&Time from RTC of last correct pw */
|
|
unsigned long ConfigCorrectDT[2]; /* Date&Time from RTC of last correct pw */
|
|
unsigned long BootSetDT[2]; /* Date&Time from RTC of last set of pw */
|
|
unsigned long ConfigSetDT[2]; /* Date&Time from RTC of last set of pw */
|
|
unsigned char Serial[16]; /* Box serial number */
|
|
} SECURITY;
|
|
|
|
typedef enum _OS_ID {
|
|
Unknown = 0,
|
|
Firmware = 1,
|
|
AIX = 2,
|
|
NT = 3,
|
|
MKOS2 = 4,
|
|
MKAIX = 5,
|
|
Taligent = 6,
|
|
Solaris = 7,
|
|
MK = 12
|
|
} OS_ID;
|
|
|
|
typedef struct _ERROR_LOG {
|
|
unsigned char ErrorLogEntry[40]; /* To be architected */
|
|
} ERROR_LOG;
|
|
|
|
typedef enum _BOOT_STATUS {
|
|
BootStarted = 0x01,
|
|
BootFinished = 0x02,
|
|
RestartStarted = 0x04,
|
|
RestartFinished = 0x08,
|
|
PowerFailStarted = 0x10,
|
|
PowerFailFinished = 0x20,
|
|
ProcessorReady = 0x40,
|
|
ProcessorRunning = 0x80,
|
|
ProcessorStart = 0x0100
|
|
} BOOT_STATUS;
|
|
|
|
typedef struct _RESTART_BLOCK {
|
|
unsigned short Version;
|
|
unsigned short Revision;
|
|
unsigned long ResumeReserve1[2];
|
|
volatile unsigned long BootStatus;
|
|
unsigned long CheckSum; /* Checksum of RESTART_BLOCK */
|
|
void* RestartAddress;
|
|
void* SaveAreaAddr;
|
|
unsigned long SaveAreaLength;
|
|
} RESTART_BLOCK;
|
|
|
|
typedef enum _OSAREA_USAGE {
|
|
Empty = 0,
|
|
Used = 1
|
|
} OSAREA_USAGE;
|
|
|
|
typedef enum _PM_MODE {
|
|
Suspend = 0x80, /* Part of state is in memory */
|
|
Normal = 0x00 /* No power management in effect */
|
|
} PMMode;
|
|
|
|
typedef struct _HEADER {
|
|
unsigned short Size; /* NVRAM size in K(1024) */
|
|
unsigned char Version; /* Structure map different */
|
|
unsigned char Revision; /* Structure map the same -may
|
|
be new values in old fields
|
|
in other words old code still works */
|
|
unsigned short Crc1; /* check sum from beginning of nvram to OSArea */
|
|
unsigned short Crc2; /* check sum of config */
|
|
unsigned char LastOS; /* OS_ID */
|
|
unsigned char Endian; /* B if big endian, L if little endian */
|
|
unsigned char OSAreaUsage;/* OSAREA_USAGE */
|
|
unsigned char PMMode; /* Shutdown mode */
|
|
RESTART_BLOCK RestartBlock;
|
|
SECURITY Security;
|
|
ERROR_LOG ErrorLog[2];
|
|
|
|
/* Global Environment information */
|
|
void* GEAddress;
|
|
unsigned long GELength;
|
|
|
|
/* Date&Time from RTC of last change to Global Environment */
|
|
unsigned long GELastWriteDT[2];
|
|
|
|
/* Configuration information */
|
|
void* ConfigAddress;
|
|
unsigned long ConfigLength;
|
|
|
|
/* Date&Time from RTC of last change to Configuration */
|
|
unsigned long ConfigLastWriteDT[2];
|
|
unsigned long ConfigCount; /* Count of entries in Configuration */
|
|
|
|
/* OS dependent temp area */
|
|
void* OSAreaAddress;
|
|
unsigned long OSAreaLength;
|
|
|
|
/* Date&Time from RTC of last change to OSArea */
|
|
unsigned long OSAreaLastWriteDT[2];
|
|
} HEADER;
|
|
|
|
/* Here is the whole map of the NVRAM */
|
|
typedef struct _NVRAM_MAP {
|
|
HEADER Header;
|
|
unsigned char GEArea[NVSIZE-CONFSIZE-OSAREASIZE-sizeof(HEADER)];
|
|
unsigned char OSArea[OSAREASIZE];
|
|
unsigned char ConfigArea[CONFSIZE];
|
|
} NVRAM_MAP;
|
|
|
|
/* Routines to manipulate the NVRAM */
|
|
void init_prep_nvram(void);
|
|
char *prep_nvram_get_var(const char *name);
|
|
char *prep_nvram_first_var(void);
|
|
char *prep_nvram_next_var(char *name);
|
|
|
|
#endif /* ASM */
|
|
|
|
#endif /* _PPC_NVRAM_H */
|