/******************************************************************************
 * Copyright (c) 2004, 2008 IBM Corporation
 * All rights reserved.
 * This program and the accompanying materials
 * are made available under the terms of the BSD License
 * which accompanies this distribution, and is available at
 * http://www.opensource.org/licenses/bsd-license.php
 *
 * Contributors:
 *     IBM Corporation - initial implementation
 *****************************************************************************/

#ifndef __NVRAM_H
#define __NVRAM_H 1

/* data structures */

typedef struct {
	unsigned long addr;
	long len;
} partition_t;

/* macros */

#define DEBUG(x...)
// #define DEBUG(x...) printf(x);

#ifndef ALIGN
#define ALIGN(x, a) (((x) + ((a) - 1)) & ~((a) - 1))
#endif

#define NULL ((void *)0)

#define PARTITION_HEADER_SIZE 16


/* exported functions */

#define nvram_access_proto(type,name)			\
	type nvram_read_##name(unsigned int offset);		\
	void nvram_write_##name(unsigned int offset, type data);

nvram_access_proto(uint8_t,  byte)
nvram_access_proto(uint16_t, word)
nvram_access_proto(uint32_t, dword)
nvram_access_proto(uint64_t, qword)

/* nvram.c */

char *get_nvram_buffer(int len);
void free_nvram_buffer(char *buffer);
int nvramlog_printf(const char* fmt, ...);
partition_t get_partition(unsigned int type, char *name);
partition_t get_partition_fs(char *name, int namelen);
void erase_nvram(int offset, int len);
int wipe_partition(partition_t partition, int header_only);
partition_t new_nvram_partition(int type, char *name, int len);
partition_t new_nvram_partition_fs(int type, char *name, int namelen, int len);
int increase_nvram_partition_size(partition_t partition, int newsize);
int clear_nvram_partition(partition_t part);
int delete_nvram_partition(partition_t part);
void reset_nvram(void);
void wipe_nvram(void);
void nvram_debug(void);
void nvram_init(uint32_t store_token, uint32_t fetch_token,
		long nv_size, void* nvram_addr);
unsigned int get_nvram_size(void);

/* envvar.c */
char *nvram_get_env(partition_t part, char *envvar, int evlen);
int nvram_add_env(partition_t part, char *envvar, int evlen, char *value, int vallen);
int nvram_del_env(partition_t part, char *envvar, int evlen);
int nvram_set_env(partition_t part, char *envvar, int evlen, char *val, int vlen);

#endif
