/*
 * This file is part of the coreboot project.
 *
 * Copyright (C) 2000 AG Electronics Ltd.
 * Copyright (C) 2003-2004 Linux Networx
 * Copyright (C) 2004 Tyan
 *
 * 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.
 */

#ifndef SUPERIO_NSC_PC87417_H
#define SUPERIO_NSC_PC87417_H

#define PC87417_FDC  0x00 /* Floppy */
#define PC87417_PP   0x01 /* Parallel Port */
#define PC87417_SP2  0x02 /* Com2 */
#define PC87417_SP1  0x03 /* Com1 */
#define PC87417_SWC  0x04 /* System Wake-Up Controller (SWC) */
#define PC87417_KBCM 0x05 /* Mouse */
#define PC87417_KBCK 0x06 /* Keyboard */
#define PC87417_GPIO 0x07
#define PC87417_XBUS 0x0F
#define PC87417_RTC  0x10

#define PC87417_GPIO_DEV PNP_DEV(0x2e, PC87417_GPIO)
/* This is to get around a romcc bug */
/* #define PC87417_XBUS_DEV PNP_DEV(0x2e, PC87417_XBUS) */
#define PC87417_XBUS_DEV PNP_DEV(0x2e, 0x0f)

#define PC87417_GPSEL		0xf0
#define PC87417_GPCFG1		0xf1
#define PC87417_GPEVR		0xf2
#define PC87417_GPCFG2		0xf3
#define PC87417_EXTCFG		0xf4
#define PC87417_IOEXT1A		0xf5
#define PC87417_IOEXT1B		0xf6
#define PC87417_IOEXT2A		0xf7
#define PC87417_IOEXT2B		0xf8

#define PC87417_GPDO_0		0x00
#define PC87417_GPDI_0		0x01
#define PC87417_GPDO_1		0x02
#define PC87417_GPDI_1		0x03
#define PC87417_GPEVEN_1	0x04
#define PC87417_GPEVST_1	0x05
#define PC87417_GPDO_2		0x06
#define PC87417_GPDI_2		0x07
#define PC87417_GPDO_3		0x08
#define PC87417_GPDI_3		0x09
#define PC87417_GPDO_4		0x0a
#define PC87417_GPDI_4		0x0b
#define PC87417_GPEVEN_4	0x0c
#define PC87417_GPEVST_4	0x0d
#define PC87417_GPDO_5		0x0e
#define PC87417_GPDI_5		0x0f
#define PC87417_GPDO_6		0x10
#define PC87417_GPDO_7A		0x11
#define PC87417_GPDO_7B		0x12
#define PC87417_GPDO_7C		0x13
#define PC87417_GPDO_7D		0x14
#define PC87417_GPDI_7A		0x15
#define PC87417_GPDI_7B		0x16
#define PC87417_GPDI_7C		0x17
#define PC87417_GPDI_7D		0x18

#define PC87417_XIOCNF		0xf0
#define PC87417_XIOBA1H		0xf1
#define PC87417_XIOBA1L		0xf2
#define PC87417_XIOSIZE1	0xf3
#define PC87417_XIOBA2H		0xf4
#define PC87417_XIOBA2L		0xf5
#define PC87417_XIOSIZE2	0xf6
#define PC87417_XMEMCNF1	0xf7
#define PC87417_XMEMCNF2	0xf8
#define PC87417_XMEMBAH		0xf9
#define PC87417_XMEMBAL		0xfa
#define PC87417_XMEMSIZE	0xfb
#define PC87417_XIRQMAP1	0xfc
#define PC87417_XIRQMAP2	0xfd
#define PC87417_XBIMM		0xfe
#define PC87417_XBBSL		0xff

#define PC87417_XBCNF		0x00
#define PC87417_XZCNF0		0x01
#define PC87417_XZCNF1		0x02
#define PC87417_XIRQC0		0x04
#define PC87417_XIRQC1		0x05
#define PC87417_XIRQC2		0x06
#define PC87417_XIMA0		0x08
#define PC87417_XIMA1		0x09
#define PC87417_XIMA2		0x0a
#define PC87417_XIMA3		0x0b
#define PC87417_XIMD		0x0c
#define PC87417_XZCNF2		0x0d
#define PC87417_XZCNF3		0x0e
#define PC87417_XZM0		0x0f
#define PC87417_XZM1		0x10
#define PC87417_XZM2		0x11
#define PC87417_XZM3		0x12
#define PC87417_HAP0		0x13
#define PC87417_HAP1		0x14
#define PC87417_XSCNF		0x15
#define PC87417_XWBCNF		0x16

#include <arch/io.h>
#include <stdint.h>

void pc87417_enable_serial(pnp_devfn_t dev, u16 iobase);
void pc87417_disable_dev(pnp_devfn_t dev);
void pc87417_enable_dev(pnp_devfn_t dev);

void xbus_cfg(pnp_devfn_t dev);

#endif /* SUPERIO_NSC_PC87417_H */
