/*
 * the definition file of cs5536 Virtual Support Module(VSM).
 * pci configuration space can be accessed through the VSM, so
 * there is no need of the MSR read/write now, except the spec.
 * MSR registers which are not implemented yet.
 *
 * Copyright (C) 2007 Lemote Inc.
 * Author : jlliu, liujl@lemote.com
 */

#ifndef _CS5536_PCI_H
#define _CS5536_PCI_H

#include <linux/types.h>
#include <linux/pci_regs.h>

extern void cs5536_pci_conf_write4(int function, int reg, u32 value);
extern u32 cs5536_pci_conf_read4(int function, int reg);

#define CS5536_ACC_INTR		9
#define CS5536_IDE_INTR		14
#define CS5536_USB_INTR		11
#define CS5536_MFGPT_INTR	5
#define CS5536_UART1_INTR	4
#define CS5536_UART2_INTR	3

/************** PCI BUS DEVICE FUNCTION ***************/

/*
 * PCI bus device function
 */
#define PCI_BUS_CS5536		0
#define PCI_IDSEL_CS5536	14

/********** STANDARD PCI-2.2 EXPANSION ****************/

/*
 * PCI configuration space
 * we have to virtualize the PCI configure space head, so we should
 * define the necessary IDs and some others.
 */

/* CONFIG of PCI VENDOR ID*/
#define CFG_PCI_VENDOR_ID(mod_dev_id, sys_vendor_id) \
	(((mod_dev_id) << 16) | (sys_vendor_id))

/* VENDOR ID */
#define CS5536_VENDOR_ID	0x1022

/* DEVICE ID */
#define CS5536_ISA_DEVICE_ID		0x2090
#define CS5536_IDE_DEVICE_ID		0x209a
#define CS5536_ACC_DEVICE_ID		0x2093
#define CS5536_OHCI_DEVICE_ID		0x2094
#define CS5536_EHCI_DEVICE_ID		0x2095

/* CLASS CODE : CLASS SUB-CLASS INTERFACE */
#define CS5536_ISA_CLASS_CODE		0x060100
#define CS5536_IDE_CLASS_CODE		0x010180
#define CS5536_ACC_CLASS_CODE		0x040100
#define CS5536_OHCI_CLASS_CODE		0x0C0310
#define CS5536_EHCI_CLASS_CODE		0x0C0320

/* BHLC : BIST HEADER-TYPE LATENCY-TIMER CACHE-LINE-SIZE */

#define CFG_PCI_CACHE_LINE_SIZE(header_type, latency_timer)	\
	((PCI_NONE_BIST << 24) | ((header_type) << 16) \
		| ((latency_timer) << 8) | PCI_NORMAL_CACHE_LINE_SIZE);

#define PCI_NONE_BIST			0x00	/* RO not implemented yet. */
#define PCI_BRIDGE_HEADER_TYPE		0x80	/* RO */
#define PCI_NORMAL_HEADER_TYPE		0x00
#define PCI_NORMAL_LATENCY_TIMER	0x00
#define PCI_NORMAL_CACHE_LINE_SIZE	0x08	/* RW */

/* BAR */
#define PCI_BAR0_REG			0x10
#define PCI_BAR1_REG			0x14
#define PCI_BAR2_REG			0x18
#define PCI_BAR3_REG			0x1c
#define PCI_BAR4_REG			0x20
#define PCI_BAR5_REG			0x24
#define PCI_BAR_COUNT			6
#define PCI_BAR_RANGE_MASK		0xFFFFFFFF

/* CARDBUS CIS POINTER */
#define PCI_CARDBUS_CIS_POINTER		0x00000000

/* SUBSYSTEM VENDOR ID	*/
#define CS5536_SUB_VENDOR_ID		CS5536_VENDOR_ID

/* SUBSYSTEM ID */
#define CS5536_ISA_SUB_ID		CS5536_ISA_DEVICE_ID
#define CS5536_IDE_SUB_ID		CS5536_IDE_DEVICE_ID
#define CS5536_ACC_SUB_ID		CS5536_ACC_DEVICE_ID
#define CS5536_OHCI_SUB_ID		CS5536_OHCI_DEVICE_ID
#define CS5536_EHCI_SUB_ID		CS5536_EHCI_DEVICE_ID

/* EXPANSION ROM BAR */
#define PCI_EXPANSION_ROM_BAR		0x00000000

/* CAPABILITIES POINTER */
#define PCI_CAPLIST_POINTER		0x00000000
#define PCI_CAPLIST_USB_POINTER		0x40
/* INTERRUPT */

#define CFG_PCI_INTERRUPT_LINE(pin, mod_intr) \
	((PCI_MAX_LATENCY << 24) | (PCI_MIN_GRANT << 16) | \
		((pin) << 8) | (mod_intr))

#define PCI_MAX_LATENCY			0x40
#define PCI_MIN_GRANT			0x00
#define PCI_DEFAULT_PIN			0x01

/*********** EXPANSION PCI REG ************************/

/*
 * ISA EXPANSION
 */
#define PCI_UART1_INT_REG	0x50
#define PCI_UART2_INT_REG	0x54
#define PCI_ISA_FIXUP_REG	0x58

/*
 * IDE EXPANSION
 */
#define PCI_IDE_CFG_REG		0x40
#define CS5536_IDE_FLASH_SIGNATURE	0xDEADBEEF
#define PCI_IDE_DTC_REG		0x48
#define PCI_IDE_CAST_REG	0x4C
#define PCI_IDE_ETC_REG		0x50
#define PCI_IDE_PM_REG		0x54
#define PCI_IDE_INT_REG		0x60

/*
 * ACC EXPANSION
 */
#define PCI_ACC_INT_REG		0x50

/*
 * OHCI EXPANSION : INTTERUPT IS IMPLEMENTED BY THE OHCI
 */
#define PCI_OHCI_PM_REG		0x40
#define PCI_OHCI_INT_REG	0x50

/*
 * EHCI EXPANSION
 */
#define PCI_EHCI_LEGSMIEN_REG	0x50
#define PCI_EHCI_LEGSMISTS_REG	0x54
#define PCI_EHCI_FLADJ_REG	0x60

#endif				/* _CS5536_PCI_H_ */
