/* Copyright 2012 Google Inc. All Rights Reserved.
 * Author: weixiaofeng@google.com (Xiaofeng Wei)
 */

#ifndef _SYSVAR_H_
#define _SYSVAR_H_

#define SYSVAR_UBOOT
#ifndef SYSVAR_UBOOT
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdbool.h>
#else
typedef enum _bool{false, true} bool;
#endif
#include <malloc.h>

#define SYSVAR_WC32         4
#define SYSVAR_CRC32        4
#define SYSVAR_HEAD         (SYSVAR_WC32 + SYSVAR_CRC32)
#define SYSVAR_NAME         32
#define SYSVAR_MESSAGE      -1

#define SYSVAR_STR_TO_BUF   0x00
#define SYSVAR_BUF_TO_STR   0xff

#define SYSVAR_BLOCK_SIZE   0x00010000  /* size of system variables (64K) */

#define SYSVAR_SPI_BLOCK    4           /* number of SPI flash blocks */
#define SYSVAR_RW_OFFSET0   0x00060000  /* location of system variables(RW) */
#define SYSVAR_RW_OFFSET1   0x00080000  /* location of system variables(RW backup) */
#define SYSVAR_RO_OFFSET0   0x000A0000  /* location of system variables(RO) */
#define SYSVAR_RO_OFFSET1   0x000C0000  /* location of system variables(RO backup) */

#define SYSVAR_MTD_DEVICE   4           /* number of MTD devices */
#define SYSVAR_RW_NAME0     "/dev/mtd2" /* MTD device of system variables(RW) */
#define SYSVAR_RW_NAME1     "/dev/mtd3" /* MTD device of system variables(RW backup) */
#define SYSVAR_RO_NAME0     "/dev/mtd4" /* MTD device of system variables(RO) */
#define SYSVAR_RO_NAME1     "/dev/mtd5" /* MTD device of system variables(RO backup) */

#define SYSVAR_RW_DATA0     0
#define SYSVAR_RW_DATA1     1
#define SYSVAR_RO_DATA0     2
#define SYSVAR_RO_DATA1     3

#define SYSVAR_RW_BUF       0
#define SYSVAR_RO_BUF       2

#define SYSVAR_GET_MODE     0
#define SYSVAR_SET_MODE     1
#define SYSVAR_LOAD_MODE    2
#define SYSVAR_SAVE_MODE    3

#define SYSVAR_SUCCESS      0
#define SYSVAR_MEMORY_ERR   -1
#define SYSVAR_OPEN_ERR     -2
#define SYSVAR_READ_ERR     -3
#define SYSVAR_WRITE_ERR    -4
#define SYSVAR_ERASE_ERR    -5
#define SYSVAR_LOAD_ERR     -6
#define SYSVAR_SAVE_ERR     -7
#define SYSVAR_GET_ERR      -8
#define SYSVAR_SET_ERR      -9
#define SYSVAR_DELETE_ERR   -10
#define SYSVAR_PARAM_ERR    -11
#define SYSVAR_CRC_ERR      -12
#define SYSVAR_READONLY_ERR -13
#define SYSVAR_EXISTED_ERR  -14
#define SYSVAR_DEBUG_ERR    -15

#define PAGE_SIZE           256
#define SYSVAR_VALUE        2048

#define SYSVAR_RO_MEM       0x00000100
#define SYSVAR_RW_MEM       SYSVAR_RO_MEM + SYSVAR_BLOCK_SIZE

struct sysvar_list {
  char name[SYSVAR_NAME + 1]; /* name of system variable */
  char *value;                /* value of system variable */
  int len;                    /* length of system variable */

  struct sysvar_list *next;
};

struct sysvar_buf {
  unsigned char *data;  /* data buffer to store system variables */
  int data_len;         /* buffer size */

  int total_len;        /* total space = buffer size - buffer header */
  int free_len;         /* free space in data buffer */
  int used_len;         /* total bytes of variables */

  bool loaded;          /* data buffer has been loaded from SPI flash */
  bool modified;        /* data modified in the data buffer */
  bool readonly;        /* read only system variables */
  bool failed[2];       /* failed to read data from SPI flash */

  struct sysvar_list *list;
};

extern unsigned long get_wc32(struct sysvar_buf *buf);
extern void set_wc32(struct sysvar_buf *buf);
extern unsigned long get_crc32(struct sysvar_buf *buf);
extern void set_crc32(struct sysvar_buf *buf);

extern int load_var(struct sysvar_buf *buf);
extern int save_var(struct sysvar_buf *buf);
extern int get_var(struct sysvar_list *var, char *name, char *value, int len);
extern int set_var(struct sysvar_buf *buf, char *name, char *value);
extern int delete_var(struct sysvar_buf *buf, struct sysvar_list *var);
extern int clear_var(struct sysvar_buf *buf);
extern struct sysvar_list *find_var(struct sysvar_buf *buf, char *name);
extern int check_var(struct sysvar_buf *buf, int mode);
extern void print_var(struct sysvar_buf *buf);

extern void clear_buf(struct sysvar_buf *buf);
extern void dump_buf(struct sysvar_buf *buf, int start, int len);

#endif  /* _SYSVAR_H_ */
