Linus TorvaldsLinux-2.6.12-rc21da177e21 years agoHistory
153 lines · 4.6 KB · C
RawDownload
/* * PreP compliant NVRAM access */ /* Corey Minyard (minyard@acm.org) - Stolen from PReP book.   Per the   license I must say:     (C) Copyright (Corey Minyard), (1998).  All rights reserved */ /* 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.*/#ifdef __KERNEL__#ifndef _PPC_PREP_NVRAM_H#define _PPC_PREP_NVRAM_H #define MAX_PREP_NVRAM 0x8000#define PREP_NVRAM_AS0	0x74#define PREP_NVRAM_AS1	0x75#define PREP_NVRAM_DATA	0x77 #define NVSIZE 4096	/* size of NVRAM */#define OSAREASIZE 512	/* size of OSArea space */#define CONFSIZE 1024	/* guess at size of Configuration space */ 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 OSAreaArea */  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); /* Routines to read and write directly to the NVRAM */unsigned char prep_nvram_read_val(int addr);void prep_nvram_write_val(int           addr,			  unsigned char val); #endif /* _PPC_PREP_NVRAM_H */#endif /* __KERNEL__ */

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t