/*
* Copyright (C) 2017 Amlogic, Inc. All rights reserved.
* *
This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
* *
This program is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
* more details.
* *
You should have received a copy of the GNU General Public License along
* with this program; if not, write to the Free Software Foundation, Inc.,
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
* *
Description:
*/

/***********************************************
*****Storage config of board, for ACS use.*****
***********************************************/

#ifndef __STORAGE_H
#define __STORAGE_H

#include <linux/types.h>
#include <asm/arch/romboot.h>
#ifndef __ASSEMBLY__

//Partition table defines
#define NAND_PART_SIZE_FULL		-1
#define MAX_PART_NUM			32
#define	 MAX_PART_NAME_LEN		16
//#define 	SZ_1M 					0x100000

#define STORE_CODE		1
#define	STORE_CACHE		(1<<1)
#define STORE_DATA		(1<<2)

#define SPI_BOOT_FLAG		0
#define NAND_BOOT_FLAG 		1
#define EMMC_BOOT_FLAG 		2
#define CARD_BOOT_FLAG 		3
#define SPI_NAND_FLAG		4
#define SPI_EMMC_FLAG		5

#define CARD_TYPE_SHIFT		4
#define CARD_TYPE_MASK		0xf
#define CARD_TYPE_UNKNOWN	0        /* unknown */
//#define CARD_TYPE_MMC		1        /* MMC card */
//#define CARD_TYPE_SD		2        /* SD card */
#define CARD_TYPE_SDIO		3        /* SDIO card */
#define CARD_TYPE_SD_COMBO	4        /* SD combo (IO+mem) card */
#define CARD_TYPE_NON_SDIO	5        /* NON sdio device (means SD/MMC card) */

#define AML_GET_CARD_TYPE(val, port)    ((val >> (port * CARD_TYPE_SHIFT)) & CARD_TYPE_MASK)
#define AML_SET_CARD_TYPE(val, port, type)   \
    (val |= ((type & CARD_TYPE_MASK) << (port * CARD_TYPE_SHIFT)))

/* storage device */
#define STORAGE_DEV_NOSET	(0)
#define STORAGE_DEV_EMMC	(1)
#define STORAGE_DEV_NAND	(2)
#define STORAGE_DEV_SPI		(3)
#define STORAGE_DEV_SDCARD	(4)
#define STORAGE_DEV_USB		(5)

struct partitions {
	char name[MAX_PART_NAME_LEN];			/* identifier string */
	uint64_t size;			/* partition size */
	uint64_t offset;		/* offset within the master space */
	unsigned mask_flags;		/* master flags to mask out for this partition */
	unsigned protect_flags; /*protect partition*/
};

struct config_nand {
	unsigned enable_slc;
	unsigned order_ce;
	unsigned reserved[2];
};

struct config_mmc {
	unsigned type;
	unsigned port;
	unsigned reserved[2];
};

struct store_config {
	unsigned  store_device_flag;			// indicate storage devices on each board
	struct config_nand  nand_configs;			// specital config for nand
	struct config_mmc  mmc_configs;			// specital config for mmc
};

#endif
#endif
