#ifndef __ASMARC_SETUP_H
#define __ASMARC_SETUP_H

#include<linux/types.h>

/*
 * The new way of passing information: a list of tagged entries
 */

/* The list ends with an ATAG_NONE node. */

/* Sameer: taking this value referring to its old definition in
           kernel/setup.c  */
#define COMMAND_LINE_SIZE 256

#define ATAG_NONE	0x00000000

struct tag_header {
	u32 size;
	u32 tag;
};

/* The list must start with an ATAG_CORE node */
#define ATAG_CORE	0x54410001

struct tag_core {
};

/* it is allowed to have multiple ATAG_MEM nodes */
#define ATAG_MEM	0x54410002

struct tag_mem32 {
	u32	size;
};


/* clock speed */
#define ATAG_CLK_SPEED  0x5441003

struct tag_clk_speed {
  u32 clk_speed_hz;
};
  


/* describes how the ramdisk will be used in kernel */
#define ATAG_RAMDISK	0x54410004

struct tag_ramdisk {
	u32 flags;	/* bit 0 = load, bit 1 = prompt */
	u32 size;	/* decompressed ramdisk size in _kilo_ bytes */
	u32 start;	/* starting block of floppy-based RAM disk image */
};

/* describes where the compressed ramdisk image lives (virtual address) */
/*
 * this one accidentally used virtual addresses - as such,
 * its depreciated.
 */
#define ATAG_INITRD	0x54410005

/* describes where the compressed ramdisk image lives (physical address) */
#define ATAG_INITRD2	0x54420005

struct tag_initrd {
	u32 start;	/* physical start address */
	u32 size;	/* size of compressed ramdisk image in bytes */
};


/* configuring cache */ 
#define ATAG_CACHE     0x54420006
struct tag_cache {
         u16 icache;
         u16 dcache;  
};



/* describes the configuration of serial controller */


#define ATAG_SERIAL 0x54420007
struct tag_serial {
       u32 serial_nr;
       u32 baudrate;
};

/* describes the configuration of vmac controller */

#define ATAG_VMAC 0x54420008
struct tag_vmac {
       u8 addr[8];
};



/* command line: \0 terminated string */
#define ATAG_CMDLINE	0x54410009

struct tag_cmdline {
	char	cmdline[1];	/* this is the minimum size */
};

/* Quantenna hw_config_id */
#define ATAG_HW_CONFIG_ID	0x54410100
struct tag_hwid {
	uint32_t hwid;
};

/* Quantenna spi flash protected mode */
#define ATAG_SPI_FLASH_PROTECT_MODE     0x5441000A
struct tag_spiflash {
        uint32_t spi_flash_protect_mode;
};

struct tag {
	struct tag_header hdr;
	union {
		struct tag_core		core;
		struct tag_mem32	mem;
		struct tag_ramdisk	ramdisk;
		struct tag_initrd	initrd;
		struct tag_cmdline	cmdline;
		struct tag_cache        cache;
		struct tag_clk_speed    clk_speed;
		struct tag_serial       serial;
		struct tag_vmac         vmac;
		struct tag_hwid		hwid;
		struct tag_spiflash     spi_flash_protect_mode;
	} u;
};



#define tag_next(t)	((struct tag *)((u32 *)(t) + (t)->hdr.size))
#define tag_size(type)	((sizeof(struct tag_header) + sizeof(struct type)) >> 2)

struct tagtable {
	u32 tag;
	int (*parse)(struct tag *);
};

#define __tag __used __attribute__((__section__(".taglist.init")))
#define __tagtable(tag, fn) \
static struct tagtable __tagtable_##fn __tag = { tag, fn }

#endif /* __ASMARC_SETUP_H */
