/* SPDX-License-Identifier: (GPL-2.0+ OR MIT) */
/*
 * MMC-based transactional key-value store
 *
 * Copyright (C) 2010 Google, Inc.
 *
 * This software is licensed under the terms of the GNU General Public
 * License version 2, as published by the Free Software Foundation, and
 * may be copied, distributed, and modified under those terms.
 *
 */
#ifndef _LINUX_MMC_TS_H_
#define _LINUX_MMC_TS_H_

#include <asm/ioctl.h>
#include <asm/types.h>
#include <linux/mmc/card.h>

#define MAX_MMC_GPT_PART_NUM 128
#define MMC_TS_MAX_KEY_SIZE 64
#define MMC_TS_MAX_VAL_SIZE 2048

#define MAX_PART_NAME_LEN 16
#define DEFAULT_FTS_OFFSET 0x7c00000
#define DEFAULT_FTS_SIZE 0x400000

struct mmc_ts_io_req {
	char key[MMC_TS_MAX_KEY_SIZE];
	char val[MMC_TS_MAX_VAL_SIZE];
};

struct partitions {
	/* identifier string */
	char name[MAX_PART_NAME_LEN];
	/* partition size, byte unit */
	u64 size;
	u64 offset;
	/* master flags to mask out for this partition */
	unsigned int mask_flags;
};

struct mmc_gpt_partitions_fmt {
	char magic[4];
	unsigned char version[12];
	int part_num;
	int checksum;
	struct partitions partitions[MAX_MMC_GPT_PART_NUM];
};

/*mmc info data struct*/
struct fts_mmc_info {
	int bit;
	int blk_size; /* size of a block */
	struct mutex lock;
};

#define MMC_TS_IO_MAGIC   0xFE
#define MMC_TS_IO_SET     _IOW(MMC_TS_IO_MAGIC, 0, struct mmc_ts_io_req)
#define MMC_TS_IO_GET     _IOWR(MMC_TS_IO_MAGIC, 1, struct mmc_ts_io_req)
#define MMC_TS_IO_REINIT  _IOR(MMC_TS_IO_MAGIC, 2, struct mmc_ts_io_req)
#define MMC_TS_IO_CHECK   _IOR(MMC_TS_IO_MAGIC, 3, struct mmc_ts_io_req)

//void get_mmc_card(struct fts_mmc_info **fts_mi, struct mmc_card **card);
int mmc_ts_init(void);
void get_mmc_card(struct fts_mmc_info **mmc_info, struct mmc_card **dest);

#endif  /* _LINUX_MMC_TS_H_ */
