/* SPDX-License-Identifier: GPL-2.0+ */
/*
 * Copyright (C) 2015, Bin Meng <bmeng.cn@gmail.com>
 */

#ifndef _ARCH_QEMU_H_
#define _ARCH_QEMU_H_

/* Programmable Attribute Map (PAM) Registers */
#define I440FX_PAM		0x59
#define Q35_PAM			0x90
#define PAM_NUM			7
#define PAM_RW			0x33

/* X-Bus Chip Select Register */
#define XBCS			0x4e
#define APIC_EN			(1 << 8)

/* IDE Timing Register */
#define IDE0_TIM		0x40
#define IDE1_TIM		0x42
#define IDE_DECODE_EN		(1 << 15)

/* PCIe ECAM Base Address Register */
#define PCIEX_BAR		0x60
#define BAR_EN			(1 << 0)

/* I/O Ports */
#define CMOS_ADDR_PORT		0x70
#define CMOS_DATA_PORT		0x71

#define LOW_RAM_ADDR		0x34
#define HIGH_RAM_ADDR		0x35

#define LOW_HIGHRAM_ADDR	0x5b
#define MID_HIGHRAM_ADDR	0x5c
#define HIGH_HIGHRAM_ADDR	0x5d

/* PM registers */
#define PMBA		0x40
#define PMREGMISC	0x80
#define PMIOSE		(1 << 0)

/**
 * qemu_get_low_memory_size() - Get low memory size
 *
 * @return:	size of memory below 4GiB
 */
u32 qemu_get_low_memory_size(void);

/**
 * qemu_get_high_memory_size() - Get high memory size
 *
 * @return:	size of memory above 4GiB
 */
u64 qemu_get_high_memory_size(void);

#endif /* _ARCH_QEMU_H_ */