#if !defined( __BOOTVARS )
#define __BOOTVARS

#include <stddef.h>

#if defined __cplusplus
extern "C" {
#endif

#define NVADRS	((volatile char *)0xF301D000)
#define NVDATA	((volatile char *)0xF301F000)
#define NVSTART	0x1800
#define NVSIZE	0x800

#define NVDATA_OHARE    ((volatile unsigned char *)0xF3060000)


struct nvram {
	unsigned short magic;		/* 0x1275 */
	unsigned char  char2;
	unsigned char  char3;
	unsigned short cksum;
	unsigned short end_vals;
	unsigned short start_strs;
	unsigned short word5;
	unsigned long  bits;
	unsigned long  vals[1];
};

typedef union {
	struct nvram nv;
	unsigned char c[NVSIZE];
	unsigned short s[NVSIZE/2];
} buffer;

extern short *item_vars;
extern int nvitems;
extern int file_io;
extern int config_file;
extern short fsRefNum;
extern char reboot;
extern buffer nvbuf;

enum nvtype {
	boolean,
	word,
	string
};
typedef struct nvvar {
	char *name;
	enum nvtype type;
} nvvar;

typedef struct nvval {
	unsigned int word_val;
	unsigned char *str_val;
} nvval;

extern nvvar nvvars[];
extern nvval nvvals[];



extern unsigned char nvstrbuf[NVSIZE];
extern int nvstr_used;


asm void eieio();
int  nvreadb(unsigned adr);
void nvwriteb(unsigned adr, int v);
void nvinit(void);
int  nvcsum();
int  nvload();
void nvstore();
void nvunpack();
void nvpack();

size_t getNumNVVars();
void error_dial( int err, unsigned char *str );

#if defined __cplusplus
}
#endif

#endif