##
## This file is part of the coreboot project.
##
## Copyright (C) 2010 Joseph Smith <joe@settoplinux.org>
##
## 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/i82810           # Northbridge
  device cpu_cluster 0 on              # APIC cluster
    chip cpu/intel/socket_FC_PGA370      # CPU
      device lapic 0 on end              # APIC
    end
  end
  device domain 0 on                # PCI domain
    device pci 0.0 on end               # Graphics Memory Controller Hub (GMCH)
    device pci 1.0 on end		# Chipset Graphics Controller (CGC)
    chip southbridge/intel/i82801bx     # Southbridge
      register "pirqa_routing" = "0x05"
      register "pirqb_routing" = "0x06"
      register "pirqc_routing" = "0x07"
      register "pirqd_routing" = "0x09"
      register "pirqe_routing" = "0x0a"
      register "pirqf_routing" = "0x80"
      register "pirqg_routing" = "0x80"
      register "pirqh_routing" = "0x0b"

      register "ide0_enable" = "1"
      register "ide1_enable" = "1"

      device pci 1e.0 on end		# PCI bridge
      device pci 1f.0 on                # ISA bridge
        chip superio/smsc/smscsuperio   # Super I/O (SMSC LPC47M102)
          device pnp 4e.0 on            # Floppy
            io 0x60 = 0x3f0
            irq 0x70 = 6
            drq 0x74 = 2
          end
          device pnp 4e.3 on            # Parallel port
            io 0x60 = 0x378
            irq 0x70 = 7
            drq 0x74 = 4
          end
          device pnp 4e.4 on            # COM1
            io 0x60 = 0x3f8
            irq 0x70 = 4
          end
          device pnp 4e.5 off end       # COM2
          device pnp 4e.7 on            # PS/2 keyboard / mouse
            io 0x60 = 0x60
            io 0x62 = 0x64
            irq 0x70 = 1                # PS/2 keyboard interrupt
            irq 0x72 = 12               # PS/2 mouse interrupt
          end
          device pnp 4e.9 off end       # Game port
          device pnp 4e.a on            # Runtime registers
            io 0x60 = 0x800
          end
          device pnp 4e.b off end       # MPU-401
        end
      end
      device pci 1f.1 on end            # IDE
      device pci 1f.2 on end            # USB
      device pci 1f.3 on end            # SMbus
      device pci 1f.4 on end            # USB
      device pci 1f.5 on end            # Audio controller
      device pci 1f.6 off end           # Modem controller
    end
  end
end
