##
## This file is part of the coreboot project.
##
## Copyright (C) 2009 Uwe Hermann <uwe@hermann-uwe.de>
##
## 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.
##
## 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/i440bx		# Northbridge
  device cpu_cluster 0 on		# APIC cluster
    chip cpu/intel/slot_1		# CPU
      device lapic 0 on end		# APIC
    end
  end
  device domain 0 on		# PCI domain
    device pci 0.0 on end		# Host bridge
    device pci 1.0 on end		# PCI/AGP bridge
    chip southbridge/intel/i82371eb	# Southbridge
      device pci 7.0 on			# ISA bridge
        chip superio/winbond/w83977tf	# Super I/O
          device pnp 3f0.0 on		# Floppy
            io 0x60 = 0x3f0
            irq 0x70 = 6
            drq 0x74 = 2
          end
          device pnp 3f0.1 on		# Parallel port
            io 0x60 = 0x378
            irq 0x70 = 7
            drq 0x74 = 3
          end
          device pnp 3f0.2 on		# COM1
            io 0x60 = 0x3f8
            irq 0x70 = 4
          end
          device pnp 3f0.3 on		# COM2 / IR
            io 0x60 = 0x2f8
            irq 0x70 = 3
          end
          device pnp 3f0.5 on		# PS/2 keyboard
            io 0x60 = 0x60
            io 0x62 = 0x64
            irq 0x70 = 1		# PS/2 keyboard interrupt
            irq 0x72 = 12		# PS/2 mouse interrupt
          end
          device pnp 3f0.7 off		# GPIO 1
          end
          device pnp 3f0.8 off		# GPIO 2
          end
          device pnp 3f0.9 off		# GPIO 3
          end
          device pnp 3f0.a off		# ACPI
          end
        end
      end
      device pci 7.1 on end		# IDE
      device pci 7.2 on end		# USB
      device pci 7.3 on end		# ACPI
      device pci 14.0 on end		# Onboard audio (Ensoniq ES1371)
      register "ide0_enable" = "1"
      register "ide1_enable" = "1"
      register "ide_legacy_enable" = "1"
      # Enable UDMA/33 for higher speed if your IDE device(s) support it.
      register "ide0_drive0_udma33_enable" = "1"
      register "ide0_drive1_udma33_enable" = "1"
      register "ide1_drive0_udma33_enable" = "1"
      register "ide1_drive1_udma33_enable" = "1"
    end
  end
end
