diff options
Diffstat (limited to 'dev/sinic.hh')
-rw-r--r-- | dev/sinic.hh | 26 |
1 files changed, 17 insertions, 9 deletions
diff --git a/dev/sinic.hh b/dev/sinic.hh index b9089cd53..b3255b6c0 100644 --- a/dev/sinic.hh +++ b/dev/sinic.hh @@ -235,13 +235,6 @@ class Device : public Base Tick dmaWriteFactor; /** - * PIO parameters - */ - protected: - MemReqPtr rxPioRequest; - MemReqPtr txPioRequest; - -/** * Interrupt management */ protected: @@ -262,12 +255,26 @@ class Device : public Base virtual Fault read(MemReqPtr &req, uint8_t *data); virtual Fault write(MemReqPtr &req, const uint8_t *data); - void prepareRead(); - Fault iprRead(Addr daddr, uint64_t &result); + void prepareIO(int cpu); + void prepareRead(int cpu); + void prepareWrite(int cpu); + Fault iprRead(Addr daddr, int cpu, uint64_t &result); Fault readBar0(MemReqPtr &req, Addr daddr, uint8_t *data); Fault writeBar0(MemReqPtr &req, Addr daddr, const uint8_t *data); + void regWrite(Addr daddr, int cpu, const uint8_t *data); Tick cacheAccess(MemReqPtr &req); + protected: + struct RegWriteData { + Addr daddr; + uint64_t value; + RegWriteData(Addr da, uint64_t val) : daddr(da), value(val) {} + }; + + std::vector<std::list<RegWriteData> > writeQueue; + + bool pioDelayWrite; + /** * Statistics */ @@ -323,6 +330,7 @@ class Device : public Base Bus *header_bus; Bus *payload_bus; Tick pio_latency; + bool pio_delay_write; PhysicalMemory *physmem; IntrControl *intctrl; bool rx_filter; |