/* 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 SYSVAR_INDEX_ERR    -16

#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_ */
