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