SouthBridge.py (6432:550f76603d41) | SouthBridge.py (8323:fd20dcf1a9aa) |
---|---|
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 --- 43 unchanged lines hidden (view full) --- 52 _pic2 = I8259(pio_addr=x86IOAddress(0xA0), mode='I8259Slave') 53 _cmos = Cmos(pio_addr=x86IOAddress(0x70)) 54 _dma1 = I8237(pio_addr=x86IOAddress(0x0)) 55 _keyboard = I8042(data_port=x86IOAddress(0x60), \ 56 command_port=x86IOAddress(0x64)) 57 _pit = I8254(pio_addr=x86IOAddress(0x40)) 58 _speaker = PcSpeaker(pio_addr=x86IOAddress(0x61)) 59 _io_apic = I82094AA(pio_addr=0xFEC00000) | 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 --- 43 unchanged lines hidden (view full) --- 52 _pic2 = I8259(pio_addr=x86IOAddress(0xA0), mode='I8259Slave') 53 _cmos = Cmos(pio_addr=x86IOAddress(0x70)) 54 _dma1 = I8237(pio_addr=x86IOAddress(0x0)) 55 _keyboard = I8042(data_port=x86IOAddress(0x60), \ 56 command_port=x86IOAddress(0x64)) 57 _pit = I8254(pio_addr=x86IOAddress(0x40)) 58 _speaker = PcSpeaker(pio_addr=x86IOAddress(0x61)) 59 _io_apic = I82094AA(pio_addr=0xFEC00000) |
60 # This is to make sure the interrupt lines are instantiated. Don't use 61 # it for anything directly. 62 int_lines = VectorParam.X86IntLine([], "Interrupt lines") | |
63 64 pic1 = Param.I8259(_pic1, "Master PIC") 65 pic2 = Param.I8259(_pic2, "Slave PIC") 66 cmos = Param.Cmos(_cmos, "CMOS memory and real time clock device") 67 dma1 = Param.I8237(_dma1, "The first dma controller") 68 keyboard = Param.I8042(_keyboard, "The keyboard controller") 69 pit = Param.I8254(_pit, "Programmable interval timer") 70 speaker = Param.PcSpeaker(_speaker, "PC speaker") 71 io_apic = Param.I82094AA(_io_apic, "I/O APIC") 72 | 60 61 pic1 = Param.I8259(_pic1, "Master PIC") 62 pic2 = Param.I8259(_pic2, "Slave PIC") 63 cmos = Param.Cmos(_cmos, "CMOS memory and real time clock device") 64 dma1 = Param.I8237(_dma1, "The first dma controller") 65 keyboard = Param.I8042(_keyboard, "The keyboard controller") 66 pit = Param.I8254(_pit, "Programmable interval timer") 67 speaker = Param.PcSpeaker(_speaker, "PC speaker") 68 io_apic = Param.I82094AA(_io_apic, "I/O APIC") 69 |
73 def connectPins(self, source, sink): 74 self.int_lines.append(X86IntLine(source=source, sink=sink)) 75 | |
76 # IDE controller 77 ide = IdeController(disks=[], pci_func=0, pci_dev=4, pci_bus=0) 78 ide.BAR0 = 0x1f0 79 ide.BAR0LegacyIO = True 80 ide.BAR1 = 0x3f4 81 ide.BAR1Size = '3B' 82 ide.BAR1LegacyIO = True 83 ide.BAR2 = 0x170 --- 4 unchanged lines hidden (view full) --- 88 ide.BAR4 = 1 89 ide.Command = 0 90 ide.ProgIF = 0x80 91 ide.InterruptLine = 14 92 ide.InterruptPin = 1 93 94 def attachIO(self, bus): 95 # Route interupt signals | 70 # IDE controller 71 ide = IdeController(disks=[], pci_func=0, pci_dev=4, pci_bus=0) 72 ide.BAR0 = 0x1f0 73 ide.BAR0LegacyIO = True 74 ide.BAR1 = 0x3f4 75 ide.BAR1Size = '3B' 76 ide.BAR1LegacyIO = True 77 ide.BAR2 = 0x170 --- 4 unchanged lines hidden (view full) --- 82 ide.BAR4 = 1 83 ide.Command = 0 84 ide.ProgIF = 0x80 85 ide.InterruptLine = 14 86 ide.InterruptPin = 1 87 88 def attachIO(self, bus): 89 # Route interupt signals |
96 self.connectPins(self.pic1.output, self.io_apic.pin(0)) 97 self.connectPins(self.pic2.output, self.pic1.pin(2)) 98 self.connectPins(self.cmos.int_pin, self.pic2.pin(0)) 99 self.connectPins(self.pit.int_pin, self.pic1.pin(0)) 100 self.connectPins(self.pit.int_pin, self.io_apic.pin(2)) 101# self.connectPins(self.keyboard.keyboard_int_pin, 102# self.pic1.pin(1)) 103 self.connectPins(self.keyboard.keyboard_int_pin, 104 self.io_apic.pin(1)) 105# self.connectPins(self.keyboard.mouse_int_pin, 106# self.pic2.pin(4)) 107 self.connectPins(self.keyboard.mouse_int_pin, 108 self.io_apic.pin(12)) | 90 self.int_lines = \ 91 [X86IntLine(source=self.pic1.output, sink=self.io_apic.pin(0)), 92 X86IntLine(source=self.pic2.output, sink=self.pic1.pin(2)), 93 X86IntLine(source=self.cmos.int_pin, sink=self.pic2.pin(0)), 94 X86IntLine(source=self.pit.int_pin, sink=self.pic1.pin(0)), 95 X86IntLine(source=self.pit.int_pin, sink=self.io_apic.pin(2)), 96 X86IntLine(source=self.keyboard.keyboard_int_pin, 97 sink=self.io_apic.pin(1)), 98 X86IntLine(source=self.keyboard.mouse_int_pin, 99 sink=self.io_apic.pin(12))] |
109 # Tell the devices about each other 110 self.pic1.slave = self.pic2 111 self.speaker.i8254 = self.pit 112 self.io_apic.external_int_pic = self.pic1 113 # Connect to the bus 114 self.cmos.pio = bus.port 115 self.dma1.pio = bus.port 116 self.ide.pio = bus.port 117 self.keyboard.pio = bus.port 118 self.pic1.pio = bus.port 119 self.pic2.pio = bus.port 120 self.pit.pio = bus.port 121 self.speaker.pio = bus.port 122 self.io_apic.pio = bus.port 123 self.io_apic.int_port = bus.port | 100 # Tell the devices about each other 101 self.pic1.slave = self.pic2 102 self.speaker.i8254 = self.pit 103 self.io_apic.external_int_pic = self.pic1 104 # Connect to the bus 105 self.cmos.pio = bus.port 106 self.dma1.pio = bus.port 107 self.ide.pio = bus.port 108 self.keyboard.pio = bus.port 109 self.pic1.pio = bus.port 110 self.pic2.pio = bus.port 111 self.pit.pio = bus.port 112 self.speaker.pio = bus.port 113 self.io_apic.pio = bus.port 114 self.io_apic.int_port = bus.port |