SouthBridge.py (5827:ac2c268bf4f1) | SouthBridge.py (5831:ee307cca6d31) |
---|---|
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 --- 15 unchanged lines hidden (view full) --- 24# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 25# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 26# 27# Authors: Gabe Black 28 29from m5.params import * 30from m5.proxy import * 31from Cmos import Cmos | 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 --- 15 unchanged lines hidden (view full) --- 24# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 25# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 26# 27# Authors: Gabe Black 28 29from m5.params import * 30from m5.proxy import * 31from Cmos import Cmos |
32from I8042 import I8042 |
|
32from I82094AA import I82094AA 33from I8237 import I8237 34from I8254 import I8254 35from I8259 import I8259 36from PcSpeaker import PcSpeaker 37from X86IntPin import X86IntLine 38from m5.SimObject import SimObject 39 --- 5 unchanged lines hidden (view full) --- 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)) | 33from I82094AA import I82094AA 34from I8237 import I8237 35from I8254 import I8254 36from I8259 import I8259 37from PcSpeaker import PcSpeaker 38from X86IntPin import X86IntLine 39from m5.SimObject import SimObject 40 --- 5 unchanged lines hidden (view full) --- 46 type = 'SouthBridge' 47 pio_latency = Param.Latency('1ns', "Programmed IO latency in simticks") 48 platform = Param.Platform(Parent.any, "Platform this device is part of") 49 50 _pic1 = I8259(pio_addr=x86IOAddress(0x20), mode='I8259Master') 51 _pic2 = I8259(pio_addr=x86IOAddress(0xA0), mode='I8259Slave') 52 _cmos = Cmos(pio_addr=x86IOAddress(0x70)) 53 _dma1 = I8237(pio_addr=x86IOAddress(0x0)) |
54 _keyboard = I8042(data_port=x86IOAddress(0x60), \ 55 command_port=x86IOAddress(0x64)) |
|
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") 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") | 56 _pit = I8254(pio_addr=x86IOAddress(0x40)) 57 _speaker = PcSpeaker(pio_addr=x86IOAddress(0x61)) 58 _io_apic = I82094AA(pio_addr=0xFEC00000) 59 # This is to make sure the interrupt lines are instantiated. Don't use 60 # it for anything directly. 61 int_lines = VectorParam.X86IntLine([], "Interrupt lines") 62 63 pic1 = Param.I8259(_pic1, "Master PIC") 64 pic2 = Param.I8259(_pic2, "Slave PIC") 65 cmos = Param.Cmos(_cmos, "CMOS memory and real time clock device") 66 dma1 = Param.I8237(_dma1, "The first dma controller") |
67 keyboard = Param.I8042(_keyboard, "The keyboard 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 71 def attachIO(self, bus): 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)) | 68 pit = Param.I8254(_pit, "Programmable interval timer") 69 speaker = Param.PcSpeaker(_speaker, "PC speaker") 70 io_apic = Param.I82094AA(_io_apic, "I/O APIC") 71 72 def connectPins(self, source, sink): 73 self.int_lines.append(X86IntLine(source=source, sink=sink)) 74 75 def attachIO(self, bus): 76 # Route interupt signals 77 self.connectPins(self.pic1.output, self.io_apic.pin(0)) 78 self.connectPins(self.pic2.output, self.pic1.pin(2)) 79 self.connectPins(self.cmos.int_pin, self.pic2.pin(0)) 80 self.connectPins(self.pit.int_pin, self.pic1.pin(0)) 81 self.connectPins(self.pit.int_pin, self.io_apic.pin(2)) |
82# self.connectPins(self.keyboard.keyboard_int_pin, 83# self.pic1.pin(1)) 84 self.connectPins(self.keyboard.keyboard_int_pin, 85 self.io_apic.pin(1)) 86# self.connectPins(self.keyboard.mouse_int_pin, 87# self.pic2.pin(4)) 88 self.connectPins(self.keyboard.mouse_int_pin, 89 self.io_apic.pin(12)) |
|
78 # Tell the devices about each other 79 self.pic1.slave = self.pic2 80 self.speaker.i8254 = self.pit 81 self.io_apic.external_int_pic = self.pic1 82 # Connect to the bus 83 self.cmos.pio = bus.port 84 self.dma1.pio = bus.port | 90 # Tell the devices about each other 91 self.pic1.slave = self.pic2 92 self.speaker.i8254 = self.pit 93 self.io_apic.external_int_pic = self.pic1 94 # Connect to the bus 95 self.cmos.pio = bus.port 96 self.dma1.pio = bus.port |
97 self.keyboard.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 | 98 self.pic1.pio = bus.port 99 self.pic2.pio = bus.port 100 self.pit.pio = bus.port 101 self.speaker.pio = bus.port 102 self.io_apic.pio = bus.port 103 self.io_apic.int_port = bus.port |