SouthBridge.py (5818:b47de42ec8b2) | SouthBridge.py (5827:ac2c268bf4f1) |
---|---|
1# Copyright (c) 2008 The Regents of The University of Michigan 2# All rights reserved. 3# 4# Redistribution and use in source and binary forms, with or without 5# modification, are permitted provided that the following conditions are 6# met: redistributions of source code must retain the above copyright 7# notice, this list of conditions and the following disclaimer; 8# redistributions in binary form must reproduce the above copyright --- 20 unchanged lines hidden (view full) --- 29from m5.params import * 30from m5.proxy import * 31from Cmos import Cmos 32from I82094AA import I82094AA 33from I8237 import I8237 34from I8254 import I8254 35from I8259 import I8259 36from PcSpeaker import PcSpeaker | 1# Copyright (c) 2008 The Regents of The University of Michigan 2# All rights reserved. 3# 4# Redistribution and use in source and binary forms, with or without 5# modification, are permitted provided that the following conditions are 6# met: redistributions of source code must retain the above copyright 7# notice, this list of conditions and the following disclaimer; 8# redistributions in binary form must reproduce the above copyright --- 20 unchanged lines hidden (view full) --- 29from m5.params import * 30from m5.proxy import * 31from Cmos import Cmos 32from I82094AA import I82094AA 33from I8237 import I8237 34from I8254 import I8254 35from I8259 import I8259 36from PcSpeaker import PcSpeaker |
37from X86IntPin import X86IntLine |
|
37from m5.SimObject import SimObject 38 39def x86IOAddress(port): 40 IO_address_space_base = 0x8000000000000000 41 return IO_address_space_base + port; 42 43class SouthBridge(SimObject): 44 type = 'SouthBridge' 45 pio_latency = Param.Latency('1ns', "Programmed IO latency in simticks") 46 platform = Param.Platform(Parent.any, "Platform this device is part of") 47 48 _pic1 = I8259(pio_addr=x86IOAddress(0x20), mode='I8259Master') 49 _pic2 = I8259(pio_addr=x86IOAddress(0xA0), mode='I8259Slave') 50 _cmos = Cmos(pio_addr=x86IOAddress(0x70)) 51 _dma1 = I8237(pio_addr=x86IOAddress(0x0)) 52 _pit = I8254(pio_addr=x86IOAddress(0x40)) 53 _speaker = PcSpeaker(pio_addr=x86IOAddress(0x61)) 54 _io_apic = I82094AA(pio_addr=0xFEC00000) | 38from m5.SimObject import SimObject 39 40def x86IOAddress(port): 41 IO_address_space_base = 0x8000000000000000 42 return IO_address_space_base + port; 43 44class SouthBridge(SimObject): 45 type = 'SouthBridge' 46 pio_latency = Param.Latency('1ns', "Programmed IO latency in simticks") 47 platform = Param.Platform(Parent.any, "Platform this device is part of") 48 49 _pic1 = I8259(pio_addr=x86IOAddress(0x20), mode='I8259Master') 50 _pic2 = I8259(pio_addr=x86IOAddress(0xA0), mode='I8259Slave') 51 _cmos = Cmos(pio_addr=x86IOAddress(0x70)) 52 _dma1 = I8237(pio_addr=x86IOAddress(0x0)) 53 _pit = I8254(pio_addr=x86IOAddress(0x40)) 54 _speaker = PcSpeaker(pio_addr=x86IOAddress(0x61)) 55 _io_apic = I82094AA(pio_addr=0xFEC00000) |
56 # This is to make sure the interrupt lines are instantiated. Don't use 57 # it for anything directly. 58 int_lines = VectorParam.X86IntLine([], "Interrupt lines") |
|
55 56 pic1 = Param.I8259(_pic1, "Master PIC") 57 pic2 = Param.I8259(_pic2, "Slave PIC") 58 cmos = Param.Cmos(_cmos, "CMOS memory and real time clock device") 59 dma1 = Param.I8237(_dma1, "The first dma controller") 60 pit = Param.I8254(_pit, "Programmable interval timer") 61 speaker = Param.PcSpeaker(_speaker, "PC speaker") 62 io_apic = Param.I82094AA(_io_apic, "I/O APIC") 63 | 59 60 pic1 = Param.I8259(_pic1, "Master PIC") 61 pic2 = Param.I8259(_pic2, "Slave PIC") 62 cmos = Param.Cmos(_cmos, "CMOS memory and real time clock device") 63 dma1 = Param.I8237(_dma1, "The first dma controller") 64 pit = Param.I8254(_pit, "Programmable interval timer") 65 speaker = Param.PcSpeaker(_speaker, "PC speaker") 66 io_apic = Param.I82094AA(_io_apic, "I/O APIC") 67 |
68 def connectPins(self, source, sink): 69 self.int_lines.append(X86IntLine(source=source, sink=sink)) 70 |
|
64 def attachIO(self, bus): | 71 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) | 72 # Route interupt signals 73 self.connectPins(self.pic1.output, self.io_apic.pin(0)) 74 self.connectPins(self.pic2.output, self.pic1.pin(2)) 75 self.connectPins(self.cmos.int_pin, self.pic2.pin(0)) 76 self.connectPins(self.pit.int_pin, self.pic1.pin(0)) 77 self.connectPins(self.pit.int_pin, self.io_apic.pin(2)) 78 # Tell the devices about each other 79 self.pic1.slave = self.pic2 |
70 self.speaker.i8254 = self.pit | 80 self.speaker.i8254 = self.pit |
81 self.io_apic.external_int_pic = self.pic1 |
|
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 | 82 # Connect to the bus 83 self.cmos.pio = bus.port 84 self.dma1.pio = bus.port 85 self.pic1.pio = bus.port 86 self.pic2.pio = bus.port 87 self.pit.pio = bus.port 88 self.speaker.pio = bus.port 89 self.io_apic.pio = bus.port 90 self.io_apic.int_port = bus.port |