summaryrefslogtreecommitdiff
path: root/python/m5/objects/Device.py
blob: d7ca014a95d6e760c2989c4e20f7c24f54a95a3a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
from m5 import *
from FunctionalMemory import FunctionalMemory

# This device exists only because there are some devices that I don't
# want to have a Platform parameter because it would cause a cycle in
# the C++ that cannot be easily solved.
#
# The real solution to this problem is to pass the ParamXXX structure
# to the constructor, but with the express condition that SimObject
# parameter values are not to be available at construction time.  If
# some further configuration must be done, it must be done during the
# initialization phase at which point all SimObject pointers will be
# valid.
class FooPioDevice(FunctionalMemory):
    type = 'PioDevice'
    abstract = True
    addr = Param.Addr("Device Address")
    mmu = Param.MemoryController(Parent.any, "Memory Controller")
    pio_bus = Param.Bus(NULL, "Bus to attach to for PIO")
    pio_latency = Param.Tick(1, "Programmed IO latency in bus cycles")

class FooDmaDevice(FooPioDevice):
    type = 'DmaDevice'
    abstract = True
    dma_bus = Param.Bus(Self.pio_bus, "Bus to attach to for DMA")

class PioDevice(FooPioDevice):
    type = 'PioDevice'
    abstract = True
    platform = Param.Platform(Parent.any, "Platform")

class DmaDevice(PioDevice):
    type = 'DmaDevice'
    abstract = True
    dma_bus = Param.Bus(Self.pio_bus, "Bus to attach to for DMA")