gem5/src/dev
Andreas Hansson 3fea59e162 MEM: Separate requests and responses for timing accesses
This patch moves send/recvTiming and send/recvTimingSnoop from the
Port base class to the MasterPort and SlavePort, and also splits them
into separate member functions for requests and responses:
send/recvTimingReq, send/recvTimingResp, and send/recvTimingSnoopReq,
send/recvTimingSnoopResp. A master port sends requests and receives
responses, and also receives snoop requests and sends snoop
responses. A slave port has the reciprocal behaviour as it receives
requests and sends responses, and sends snoop requests and receives
snoop responses.

For all MemObjects that have only master ports or slave ports (but not
both), e.g. a CPU, or a PIO device, this patch merely adds more
clarity to what kind of access is taking place. For example, a CPU
port used to call sendTiming, and will now call
sendTimingReq. Similarly, a response previously came back through
recvTiming, which is now recvTimingResp. For the modules that have
both master and slave ports, e.g. the bus, the behaviour was
previously relying on branches based on pkt->isRequest(), and this is
now replaced with a direct call to the apprioriate member function
depending on the type of access. Please note that send/recvRetry is
still shared by all the timing accessors and remains in the Port base
class for now (to maintain the current bus functionality and avoid
changing the statistics of all regressions).

The packet queue is split into a MasterPort and SlavePort version to
facilitate the use of the new timing accessors. All uses of the
PacketQueue are updated accordingly.

With this patch, the type of packet (request or response) is now well
defined for each type of access, and asserts on pkt->isRequest() and
pkt->isResponse() are now moved to the appropriate send member
functions. It is also worth noting that sendTimingSnoopReq no longer
returns a boolean, as the semantics do not alow snoop requests to be
rejected or stalled. All these assumptions are now excplicitly part of
the port interface itself.
2012-05-01 13:40:42 -04:00
..
alpha MEM: Enable multiple distributed generalized memories 2012-04-06 13:46:31 -04:00
arm MEM: Enable multiple distributed generalized memories 2012-04-06 13:46:31 -04:00
mips MEM: Move all read/write blob functions from Port to PortProxy 2012-02-24 11:46:39 -05:00
sparc MEM: Fix residual bus ports and make them master/slave 2012-02-14 14:15:30 -05:00
x86 Config: corrects the way Ruby attaches to the DMA ports 2012-04-05 11:09:19 -05:00
baddev.cc SE/FS: Put platform pointers in fewer objects. 2011-10-04 02:26:03 -07:00
baddev.hh Major changes to how SimObjects are created and initialized. Almost all 2007-07-23 21:51:38 -07:00
BadDevice.py Move SimObject python files alongside the C++ and fix 2007-05-27 19:21:17 -07:00
copy_engine.cc MEM: Introduce the master/slave port sub-classes in C++ 2012-03-30 09:40:11 -04:00
copy_engine.hh MEM: Introduce the master/slave port sub-classes in C++ 2012-03-30 09:40:11 -04:00
copy_engine_defs.hh Make commenting on close namespace brackets consistent. 2011-01-03 14:35:43 -08:00
CopyEngine.py MEM: Explicit ports and Python binding on CopyEngine 2012-02-13 06:46:43 -05:00
Device.py MEM: Introduce the master/slave port roles in the Python classes 2012-02-13 06:43:09 -05:00
disk_image.cc clang: Enable compiling gem5 using clang 2.9 and 3.0 2012-01-31 12:05:52 -05:00
disk_image.hh clang: Enable compiling gem5 using clang 2.9 and 3.0 2012-01-31 12:05:52 -05:00
DiskImage.py Config: Cause a fatal() when a parameter without a default value isn't set(FS #315). 2009-01-30 19:08:13 -05:00
etherbus.cc trace: reimplement the DTRACE function so it doesn't use a vector 2011-04-15 10:44:32 -07:00
etherbus.hh includes: sort all includes 2011-04-15 10:44:06 -07:00
etherdevice.cc stats: only consider a formula initialized if there is a formula 2010-06-15 01:18:36 -07:00
etherdevice.hh stats: Fix all stats usages to deal with template fixes 2009-03-05 19:09:53 -08:00
etherdump.cc Replace curTick global variable with accessor functions. 2011-01-07 21:50:29 -08:00
etherdump.hh includes: sort all includes 2011-04-15 10:44:06 -07:00
etherint.cc includes: sort all includes 2011-04-15 10:44:06 -07:00
etherint.hh Devices: Make EtherInts connect in the same way memory ports currently do. 2007-08-16 16:49:02 -04:00
etherlink.cc event: minor cleanup 2011-09-22 18:59:55 -07:00
etherlink.hh includes: sort all includes 2011-04-15 10:44:06 -07:00
Ethernet.py MEM: Introduce the master/slave port roles in the Python classes 2012-02-13 06:43:09 -05:00
etherobject.hh Devices: Make EtherInts connect in the same way memory ports currently do. 2007-08-16 16:49:02 -04:00
etherpkt.cc PacketFifo: Get slack out of the EthPacketData structure. This allows 2008-06-17 21:34:27 -07:00
etherpkt.hh types: clean up types, especially signed vs unsigned 2009-06-04 23:21:12 -07:00
ethertap.cc trace: reimplement the DTRACE function so it doesn't use a vector 2011-04-15 10:44:32 -07:00
ethertap.hh includes: sort all includes 2011-04-15 10:44:06 -07:00
i8254xGBe.cc MEM: Move port creation to the memory object(s) construction 2012-02-24 11:43:53 -05:00
i8254xGBe.hh gcc: Clean-up of non-C++0x compliant code, first steps 2012-03-19 06:36:09 -04:00
i8254xGBe_defs.hh Make commenting on close namespace brackets consistent. 2011-01-03 14:35:43 -08:00
Ide.py ARM: Add support for a dumb IDE controller 2010-11-15 14:04:03 -06:00
ide_atareg.h gcc: Clean-up of non-C++0x compliant code, first steps 2012-03-19 06:36:09 -04:00
ide_ctrl.cc clang: Enable compiling gem5 using clang 2.9 and 3.0 2012-01-31 12:05:52 -05:00
ide_ctrl.hh includes: sort all includes 2011-04-15 10:44:06 -07:00
ide_disk.cc IDE: Fix issues with new PIIX kernel driver and our model. 2011-08-19 15:08:08 -05:00
ide_disk.hh MEM: Enable multiple distributed generalized memories 2012-04-06 13:46:31 -04:00
ide_wdcreg.h copyright: clean up copyright blocks 2011-06-02 14:36:35 -07:00
intel_8254_timer.cc trace: reimplement the DTRACE function so it doesn't use a vector 2011-04-15 10:44:32 -07:00
intel_8254_timer.hh trace: reimplement the DTRACE function so it doesn't use a vector 2011-04-15 10:44:32 -07:00
io_device.cc MEM: Separate requests and responses for timing accesses 2012-05-01 13:40:42 -04:00
io_device.hh MEM: Separate requests and responses for timing accesses 2012-05-01 13:40:42 -04:00
isa_fake.cc IO: Handle case where ISA Fake device is being used as a fake memory. 2011-07-10 12:56:08 -05:00
isa_fake.hh includes: sort all includes 2011-04-15 10:44:06 -07:00
mc146818.cc ARM: Add RTC device for ARM platforms. 2012-03-01 17:26:31 -06:00
mc146818.hh Replace curTick global variable with accessor functions. 2011-01-07 21:50:29 -08:00
ns_gige.cc clang: Enable compiling gem5 using clang 2.9 and 3.0 2012-01-31 12:05:52 -05:00
ns_gige.hh style: Remove non-leading tabs everywhere they shouldn't be. Developers should configure their editors to not insert tabs 2008-09-10 14:26:15 -04:00
ns_gige_reg.h X86: Get X86_FS to compile. 2007-09-24 17:39:56 -07:00
Pci.py MEM: Introduce the master/slave port roles in the Python classes 2012-02-13 06:43:09 -05:00
pciconfigall.cc clang: Enable compiling gem5 using clang 2.9 and 3.0 2012-01-31 12:05:52 -05:00
pciconfigall.hh MEM: Separate queries for snooping and address ranges 2012-01-17 12:55:09 -06:00
pcidev.cc MEM: Move port creation to the memory object(s) construction 2012-02-24 11:43:53 -05:00
pcidev.hh MEM: Introduce the master/slave port sub-classes in C++ 2012-03-30 09:40:11 -04:00
pcireg.h style: Remove non-leading tabs everywhere they shouldn't be. Developers should configure their editors to not insert tabs 2008-09-10 14:26:15 -04:00
pktfifo.cc types: clean up types, especially signed vs unsigned 2009-06-04 23:21:12 -07:00
pktfifo.hh types: clean up types, especially signed vs unsigned 2009-06-04 23:21:12 -07:00
platform.cc Includes: Don't include isa_traits.hh and use the TheISA namespace unless really needed. 2011-02-23 15:10:49 -06:00
platform.hh SE/FS: Remove System::platform and Platform::intrFrequency. 2011-09-30 00:29:07 -07:00
Platform.py Move SimObject python files alongside the C++ and fix 2007-05-27 19:21:17 -07:00
ps2.cc includes: sort all includes 2011-04-15 10:44:06 -07:00
ps2.hh VNC/ARM: Use VNC server and add support to boot into X11 2011-02-11 18:29:36 -06:00
rtcreg.h X86: Turn #defines into consts. 2008-03-25 02:09:18 -04:00
SConscript SE/FS: Build the devices in SE mode. 2011-09-30 00:28:33 -07:00
simple_disk.cc MEM: Make port proxies use references rather than pointers 2012-02-24 11:45:30 -05:00
simple_disk.hh includes: sort all includes 2011-04-15 10:44:06 -07:00
SimpleDisk.py Fix miscellaneous small typos. 2007-08-30 15:16:59 -04:00
sinic.cc MEM: Move port creation to the memory object(s) construction 2012-02-24 11:43:53 -05:00
sinic.hh Make commenting on close namespace brackets consistent. 2011-01-03 14:35:43 -08:00
sinicreg.hh gcc: Clean-up of non-C++0x compliant code, first steps 2012-03-19 06:36:09 -04:00
terminal.cc gcc: fix unused variable warnings from GCC 4.6.1 2011-12-13 11:49:27 -08:00
terminal.hh includes: sort all includes 2011-04-15 10:44:06 -07:00
Terminal.py Change the default output filename for the terminal so it's more obvious. 2008-06-17 20:30:37 -07:00
uart.cc Rename SimConsole to Terminal since it makes more sense 2008-06-17 20:29:06 -07:00
uart.hh Rename SimConsole to Terminal since it makes more sense 2008-06-17 20:29:06 -07:00
Uart.py SE/FS: Put platform pointers in fewer objects. 2011-10-04 02:26:03 -07:00
uart8250.cc MEM: Separate queries for snooping and address ranges 2012-01-17 12:55:09 -06:00
uart8250.hh MEM: Separate queries for snooping and address ranges 2012-01-17 12:55:09 -06:00