/* SPDX-License-Identifier: GPL-2.0+ */
/*
 * Header file of amlogic reserve manager
 *
 * Copyright (C) 2018 Amlogic Corporation
 *
 * Licensed under the GPL-2 or later.
 *
 */

#ifndef __MESON_RSV_H_
#define __MESON_RSV_H_

#define NAND_RSV_BLOCK_NUM 48

#define NAND_GAP_BLOCK_NUM 4
#define NAND_BBT_BLOCK_NUM 4
#define NAND_ENV_BLOCK_NUM 8
#define NAND_KEY_BLOCK_NUM 8
#define NAND_DTB_BLOCK_NUM 4

#define BBT_NAND_MAGIC	"nbbt"
#define ENV_NAND_MAGIC	"nenv"
#define KEY_NAND_MAGIC	"nkey"
#define SEC_NAND_MAGIC	"nsec"
#define DTB_NAND_MAGIC	"ndtb"

/*define abnormal state for reserved area*/
#define POWER_ABNORMAL_FLAG	0x01
#define ECC_ABNORMAL_FLAG	0x02


struct meson_rsv_info_t {
	struct mtd_info *mtd;
	struct valid_node_t *nvalid;
	struct free_node_t *nfree;
	unsigned int start;
	unsigned int end;
	unsigned int size;
	char name[8];
	u_char valid;
	u_char init;
	void *handler;
};

struct valid_node_t {
	s16 ec;
	s16	blk_addr;
	s16	page_addr;
	int timestamp;
	s16 status;
};

struct free_node_t {
	unsigned int index;
	s16 ec;
	s16	blk_addr;
	int dirty_flag;
	struct free_node_t *next;
};

struct oobinfo_t {
	char name[4];
	s16 ec;
	unsigned timestamp:15;
	unsigned status_page:1;
};

struct meson_rsv_handler_t {
	struct mtd_info *mtd;
	unsigned long long fn_bitmask;
	struct free_node_t *free_node[NAND_RSV_BLOCK_NUM];
	struct meson_rsv_info_t *bbt;
#ifndef CONFIG_ENV_IS_IN_NAND
	struct meson_rsv_info_t *env;
#endif
	struct meson_rsv_info_t *key;
	struct meson_rsv_info_t *dtb;
	void *priv;
};

int meson_rsv_bbt_read(u_char *dest, size_t size);
int meson_rsv_key_read(u_char *dest, size_t size);
int meson_rsv_env_read(u_char *dest, size_t size);
int meson_rsv_dtb_read(u_char *dest, size_t size);
/* do not provide bbt write operates */
int meson_rsv_key_write(u_char *source, size_t size);
int meson_rsv_env_write(u_char *source, size_t size);
int meson_rsv_dtb_write(u_char *source, size_t size);
uint32_t meson_rsv_bbt_size(void);
uint32_t meson_rsv_key_size(void);
uint32_t meson_rsv_env_size(void);
uint32_t meson_rsv_dtb_size(void);
/* do not provide bbt erase operates */
int meson_rsv_key_erase(void);
int meson_rsv_env_erase(void);
int meson_rsv_dtb_erase(void);
int meson_rsv_check(struct meson_rsv_info_t *rsv_info);
int meson_rsv_init(struct mtd_info *mtd, struct meson_rsv_handler_t *handler);
int meson_rsv_scan(struct meson_rsv_info_t *rsv_info);
int meson_rsv_read(struct meson_rsv_info_t *rsv_info, u_char *buf);
int meson_rsv_save(struct meson_rsv_info_t *rsv_info, u_char *buf);
int meson_rsv_write(struct meson_rsv_info_t *rsv_info, u_char *buf);
int meson_rsv_erase_protect(struct meson_rsv_handler_t *handler,
uint32_t block_addr);
#endif/* __MESON_RSV_H_ */
