#ifndef _FW_CFG_H
#define _FW_CFG_H 1

// List of QEMU fw_cfg entries.  DO NOT ADD MORE.  (All new content
// should be passed via the fw_cfg "file" interface.)
#define FW_CFG_SIGNATURE              0x00
#define FW_CFG_ID                     0x01
#define FW_CFG_UUID                   0x02
#define FW_CFG_RAM_SIZE               0x03
#define FW_CFG_NOGRAPHIC              0x04
#define FW_CFG_NB_CPUS                0x05
#define FW_CFG_MACHINE_ID             0x06
#define FW_CFG_KERNEL_ADDR            0x07
#define FW_CFG_KERNEL_SIZE            0x08
#define FW_CFG_KERNEL_CMDLINE         0x09
#define FW_CFG_INITRD_ADDR            0x0a
#define FW_CFG_INITRD_SIZE            0x0b
#define FW_CFG_BOOT_DEVICE            0x0c
#define FW_CFG_NUMA                   0x0d
#define FW_CFG_BOOT_MENU              0x0e
#define FW_CFG_MAX_CPUS               0x0f
#define FW_CFG_KERNEL_ENTRY           0x10
#define FW_CFG_KERNEL_DATA            0x11
#define FW_CFG_INITRD_DATA            0x12
#define FW_CFG_CMDLINE_ADDR           0x13
#define FW_CFG_CMDLINE_SIZE           0x14
#define FW_CFG_CMDLINE_DATA           0x15
#define FW_CFG_SETUP_ADDR             0x16
#define FW_CFG_SETUP_SIZE             0x17
#define FW_CFG_SETUP_DATA             0x18
#define FW_CFG_FILE_DIR               0x19
#define FW_CFG_FILE_FIRST             0x20
#define FW_CFG_ARCH_LOCAL             0x8000
#define FW_CFG_ACPI_TABLES            (FW_CFG_ARCH_LOCAL + 0)
#define FW_CFG_SMBIOS_ENTRIES         (FW_CFG_ARCH_LOCAL + 1)
#define FW_CFG_IRQ0_OVERRIDE          (FW_CFG_ARCH_LOCAL + 2)
#define FW_CFG_E820_TABLE             (FW_CFG_ARCH_LOCAL + 3)

#define FW_CFG_CTL			0x510
#define FW_CFG_DATA			0x511

static inline void fw_cfg_select(uint16_t f)
{
	outw(FW_CFG_CTL, f);
}

static inline uint32_t fw_cfg_readb(void)
{
	return inb(FW_CFG_DATA);
}

static inline uint32_t fw_cfg_readw_be(void)
{
	uint32_t val;
	
	val = inb(FW_CFG_DATA);
	val = (val << 8) | inb(FW_CFG_DATA);
	return val;
}

static inline uint32_t fw_cfg_readw_le(void)
{
	uint32_t val;

	val = inb(FW_CFG_DATA);
	val = (inb(FW_CFG_DATA) << 8) | val;
	return val;
}

static inline uint32_t fw_cfg_readl_be(void)
{
	uint32_t val;
	
	val = inb(FW_CFG_DATA);
	val = (val << 8) | inb(FW_CFG_DATA);
	val = (val << 8) | inb(FW_CFG_DATA);
	val = (val << 8) | inb(FW_CFG_DATA);
	return val;
}

static inline uint32_t fw_cfg_readl_le(void)
{
	uint32_t val;

	val = inb(FW_CFG_DATA);
	val = (inb(FW_CFG_DATA) << 8) | val;
	val = (inb(FW_CFG_DATA) << 16) | val;
	val = (inb(FW_CFG_DATA) << 24) | val;
	return val;
}

static inline void fw_cfg_read(void *buf, int len)
{
	insb(buf, FW_CFG_DATA, len);
}

static inline void fw_cfg_skip(int len)
{
	while (len--)
		inb(FW_CFG_DATA);
}

static inline void
fw_cfg_read_entry(void *buf, int e, int len)
{
	fw_cfg_select(e);
	fw_cfg_read(buf, len);
}

void fw_cfg_setup(void);
int fw_cfg_file_id(char *name);
uint32_t fw_cfg_file_size(int id);
void fw_cfg_file_select(int id);

#endif
