##
## This file is part of the coreboot project.
##
## Copyright (C) 2007-2009 coresystems GmbH
##
## 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; version 2 of
## the License.
##
## 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.
##
## You should have received a copy of the GNU General Public License
## along with this program; if not, write to the Free Software
## Foundation, Inc., 51 Franklin St, Fifth Floor, Boston,
## MA 02110-1301 USA
##

chip northbridge/intel/i945

        device cpu_cluster 0 on
                chip cpu/intel/socket_mFCPGA478
                        device lapic 0 on end
                end
        end

        device domain 0 on
                device pci 00.0 on end # host bridge
		# autodetect:
		#device pci 01.0 off end # i945 PCIe root port
		#device pci 02.0 on end # vga controller
		#device pci 02.1 on end # display controller

                chip southbridge/intel/i82801gx
			register "pirqa_routing" = "0x0a"
			register "pirqb_routing" = "0x0a"
			register "pirqc_routing" = "0x0a"
			register "pirqd_routing" = "0x0a"
			register "pirqe_routing" = "0x80"
			register "pirqf_routing" = "0x80"
			register "pirqg_routing" = "0x0a"
			register "pirqh_routing" = "0x0a"

			# GPI routing
			#  0 No effect (default)
			#  1 SMI# (if corresponding ALT_GPI_SMI_EN bit is also set)
			#  2 SCI (if corresponding GPIO_EN bit is also set)
			register "gpi8_routing" = "1" # EXTSMI low active
			register "gpi7_routing" = "2" # ECSCI  low active

			# GPE0 Enables
			register "gpe0_en" = "0x00800106"
			register "alt_gp_smi_en" = "0x0100"

                        register "ide_legacy_combined" = "0x1"
                        register "ide_enable_primary" = "0x1"
                        register "ide_enable_secondary" = "0x0"
                        register "sata_ahci" = "0x0"

                	device pci 1b.0 on end # High Definition Audio
                	device pci 1c.0 on end # PCIe port 1
                	device pci 1c.1 on end # PCIe port 2
                	device pci 1c.2 on end # PCIe port 3
			device pci 1c.3 on end # PCIe port 4
			#device pci 1c.4 off end # PCIe port 5
			#device pci 1c.5 off end # PCIe port 6
                	device pci 1d.0 on end # USB UHCI
                	device pci 1d.1 on end # USB UHCI
                	device pci 1d.2 on end # USB UHCI
                	device pci 1d.3 on end # USB UHCI
                	device pci 1d.7 on end # USB2 EHCI
                	device pci 1e.0 on
				chip southbridge/ti/pcixx12

				end
			end # PCI bridge
			#device pci 1e.2 off end # AC'97 Audio
			#device pci 1e.3 off end # AC'97 Modem
                        device pci 1f.0 on # LPC bridge
                                chip superio/smsc/fdc37n972
					device pnp 2e.0 off		# Floppy
					end
					device pnp 2e.1 off		# ACPI PM
					end
					# 2e.2 does not exist
					device pnp 2e.3 on		# Parallel port
						 io 0x60 = 0x378
						irq 0x70 = 5
					end
					device pnp 2e.4 on		# COM1
                                                 io 0x60 = 0x3f8
                                                irq 0x70 = 4
					end
                                        device pnp 2e.5 off
                                        end
					#device pnp 2e.6 on		# RTC
					#	 io 0x60 = 0x70
					#	 io 0x62 = 0x74
					#end
					device pnp 2e.7 off		# Keyboard
					end
					device pnp 2e.8 off		# EC
						io 0x60 = 0x62
					end
					#device pnp 2e.9 on		# Mailbox
					#end
                                end
                                chip superio/smsc/sio10n268
                                        device pnp 4e.0 off		# Floppy
					end
					device pnp 4e.1 off		# Parport
					end
					#device pnp 4e.2 on		# COM3
					#         io 0x60 = 0x3e8
					#        irq 0x70 = 11
					#end
					#device pnp 4e.3 on		# COM4
					#         io 0x60 = 0x2e8
					#        irq 0x70 = 10
					#end
					device pnp 4e.5 on		# Keyboard
						io 0x60 = 0x60
						io 0x62 = 0x64
					end
					device pnp 4e.7 off		# GPIO1, GAME, MIDI
					end
					device pnp 4e.8 off		# GPIO2
					end
					device pnp 4e.9 off		# GPIO3/4
					end
					device pnp 4e.a off		# ACPI
					end
					device pnp 4e.b off		# HWM
					end
					chip ec/acpi
					end
                                end

                        end
			device pci 1f.1 on end  # IDE
                        device pci 1f.2 on end  # SATA
                        device pci 1f.3 on end  # SMBus
                end
        end
end
