SouthBridge.py revision 5818
14202Sbinkertn@umich.edu# Copyright (c) 2008 The Regents of The University of Michigan
24202Sbinkertn@umich.edu# All rights reserved.
34202Sbinkertn@umich.edu#
44202Sbinkertn@umich.edu# Redistribution and use in source and binary forms, with or without
54202Sbinkertn@umich.edu# modification, are permitted provided that the following conditions are
64202Sbinkertn@umich.edu# met: redistributions of source code must retain the above copyright
74202Sbinkertn@umich.edu# notice, this list of conditions and the following disclaimer;
84202Sbinkertn@umich.edu# redistributions in binary form must reproduce the above copyright
94202Sbinkertn@umich.edu# notice, this list of conditions and the following disclaimer in the
104202Sbinkertn@umich.edu# documentation and/or other materials provided with the distribution;
114202Sbinkertn@umich.edu# neither the name of the copyright holders nor the names of its
124202Sbinkertn@umich.edu# contributors may be used to endorse or promote products derived from
134202Sbinkertn@umich.edu# this software without specific prior written permission.
144202Sbinkertn@umich.edu#
154202Sbinkertn@umich.edu# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
164202Sbinkertn@umich.edu# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
174202Sbinkertn@umich.edu# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
184202Sbinkertn@umich.edu# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
194202Sbinkertn@umich.edu# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
204202Sbinkertn@umich.edu# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
214202Sbinkertn@umich.edu# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
224202Sbinkertn@umich.edu# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
234202Sbinkertn@umich.edu# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
244202Sbinkertn@umich.edu# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
254202Sbinkertn@umich.edu# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
264202Sbinkertn@umich.edu#
274202Sbinkertn@umich.edu# Authors: Gabe Black
284202Sbinkertn@umich.edu
294202Sbinkertn@umich.edufrom m5.params import *
304202Sbinkertn@umich.edufrom m5.proxy import *
314202Sbinkertn@umich.edufrom Cmos import Cmos
324202Sbinkertn@umich.edufrom I82094AA import I82094AA
334486Sbinkertn@umich.edufrom I8237 import I8237
344486Sbinkertn@umich.edufrom I8254 import I8254
354486Sbinkertn@umich.edufrom I8259 import I8259
364486Sbinkertn@umich.edufrom PcSpeaker import PcSpeaker
374486Sbinkertn@umich.edufrom m5.SimObject import SimObject
385400Ssaidi@eecs.umich.edu
395400Ssaidi@eecs.umich.edudef x86IOAddress(port):
405398Ssaidi@eecs.umich.edu    IO_address_space_base = 0x8000000000000000
415398Ssaidi@eecs.umich.edu    return IO_address_space_base + port;
424202Sbinkertn@umich.edu
434202Sbinkertn@umich.educlass SouthBridge(SimObject):
444202Sbinkertn@umich.edu    type = 'SouthBridge'
454202Sbinkertn@umich.edu    pio_latency = Param.Latency('1ns', "Programmed IO latency in simticks")
464202Sbinkertn@umich.edu    platform = Param.Platform(Parent.any, "Platform this device is part of")
474202Sbinkertn@umich.edu
484202Sbinkertn@umich.edu    _pic1 = I8259(pio_addr=x86IOAddress(0x20), mode='I8259Master')
494202Sbinkertn@umich.edu    _pic2 = I8259(pio_addr=x86IOAddress(0xA0), mode='I8259Slave')
504202Sbinkertn@umich.edu    _cmos = Cmos(pio_addr=x86IOAddress(0x70))
514202Sbinkertn@umich.edu    _dma1 = I8237(pio_addr=x86IOAddress(0x0))
524202Sbinkertn@umich.edu    _pit = I8254(pio_addr=x86IOAddress(0x40))
534202Sbinkertn@umich.edu    _speaker = PcSpeaker(pio_addr=x86IOAddress(0x61))
544202Sbinkertn@umich.edu    _io_apic = I82094AA(pio_addr=0xFEC00000)
554202Sbinkertn@umich.edu
565192Ssaidi@eecs.umich.edu    pic1 = Param.I8259(_pic1, "Master PIC")
575192Ssaidi@eecs.umich.edu    pic2 = Param.I8259(_pic2, "Slave PIC")
585192Ssaidi@eecs.umich.edu    cmos = Param.Cmos(_cmos, "CMOS memory and real time clock device")
595192Ssaidi@eecs.umich.edu    dma1 = Param.I8237(_dma1, "The first dma controller")
605192Ssaidi@eecs.umich.edu    pit = Param.I8254(_pit, "Programmable interval timer")
615192Ssaidi@eecs.umich.edu    speaker = Param.PcSpeaker(_speaker, "PC speaker")
625192Ssaidi@eecs.umich.edu    io_apic = Param.I82094AA(_io_apic, "I/O APIC")
63
64    def attachIO(self, bus):
65        # Make internal connections
66        self.pic1.output = self.io_apic.pin(0)
67        self.pic2.output = self.pic1.pin(2)
68        self.cmos.int_pin = self.pic2.pin(0)
69        self.pit.int_pin = self.pic1.pin(0)
70        self.speaker.i8254 = self.pit
71        # Connect to the bus
72        self.cmos.pio = bus.port
73        self.dma1.pio = bus.port
74        self.pic1.pio = bus.port
75        self.pic2.pio = bus.port
76        self.pit.pio = bus.port
77        self.speaker.pio = bus.port
78        self.io_apic.pio = bus.port
79        self.io_apic.int_port = bus.port
80