Ali Saidi | 851f91f | 2006-07-20 19:03:47 -0400 | [diff] [blame] | 1 | /* |
Andreas Hansson | 0cd0a8f | 2012-02-24 11:52:49 -0500 | [diff] [blame] | 2 | * Copyright (c) 2012 ARM Limited |
| 3 | * All rights reserved. |
| 4 | * |
| 5 | * The license below extends only to copyright in the software and shall |
| 6 | * not be construed as granting a license to any other intellectual |
| 7 | * property including but not limited to intellectual property relating |
| 8 | * to a hardware implementation of the functionality of the software |
| 9 | * licensed hereunder. You may use the software subject to the license |
| 10 | * terms below provided that you ensure that this notice is replicated |
| 11 | * unmodified and in its entirety in all distributions of the software, |
| 12 | * modified or unmodified, in source code or in binary form. |
| 13 | * |
Ali Saidi | 851f91f | 2006-07-20 19:03:47 -0400 | [diff] [blame] | 14 | * Copyright (c) 2006 The Regents of The University of Michigan |
| 15 | * All rights reserved. |
| 16 | * |
| 17 | * Redistribution and use in source and binary forms, with or without |
| 18 | * modification, are permitted provided that the following conditions are |
| 19 | * met: redistributions of source code must retain the above copyright |
| 20 | * notice, this list of conditions and the following disclaimer; |
| 21 | * redistributions in binary form must reproduce the above copyright |
| 22 | * notice, this list of conditions and the following disclaimer in the |
| 23 | * documentation and/or other materials provided with the distribution; |
| 24 | * neither the name of the copyright holders nor the names of its |
| 25 | * contributors may be used to endorse or promote products derived from |
| 26 | * this software without specific prior written permission. |
| 27 | * |
| 28 | * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS |
| 29 | * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT |
| 30 | * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR |
| 31 | * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT |
| 32 | * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |
| 33 | * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT |
| 34 | * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
| 35 | * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
| 36 | * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
| 37 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
| 38 | * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
| 39 | * |
| 40 | * Authors: Ali Saidi |
Andreas Hansson | 0cd0a8f | 2012-02-24 11:52:49 -0500 | [diff] [blame] | 41 | * Andreas Hansson |
Ali Saidi | 851f91f | 2006-07-20 19:03:47 -0400 | [diff] [blame] | 42 | */ |
| 43 | |
| 44 | #include "mem/tport.hh" |
| 45 | |
Brandon Potter | 7a8dda4 | 2016-11-09 14:27:37 -0600 | [diff] [blame] | 46 | #include "mem/mem_object.hh" |
| 47 | |
Andreas Hansson | c2d2ea9 | 2012-03-22 06:36:27 -0400 | [diff] [blame] | 48 | SimpleTimingPort::SimpleTimingPort(const std::string& _name, |
| 49 | MemObject* _owner) : |
Andreas Hansson | 67e257f | 2012-07-09 12:35:42 -0400 | [diff] [blame] | 50 | QueuedSlavePort(_name, _owner, queueImpl), queueImpl(*_owner, *this) |
Nathan Binkert | c25d966 | 2008-11-10 11:51:18 -0800 | [diff] [blame] | 51 | { |
Nathan Binkert | c25d966 | 2008-11-10 11:51:18 -0800 | [diff] [blame] | 52 | } |
| 53 | |
Steve Reinhardt | 41f6cbc | 2007-05-28 08:11:43 -0700 | [diff] [blame] | 54 | void |
| 55 | SimpleTimingPort::recvFunctional(PacketPtr pkt) |
| 56 | { |
Robert Kovacsics | 2f17062 | 2018-07-19 18:56:06 +0100 | [diff] [blame] | 57 | if (!respQueue.trySatisfyFunctional(pkt)) { |
Andreas Hansson | c2d2ea9 | 2012-03-22 06:36:27 -0400 | [diff] [blame] | 58 | // do an atomic access and throw away the returned latency |
Ali Saidi | 3d2764a | 2006-10-12 15:30:30 -0400 | [diff] [blame] | 59 | recvAtomic(pkt); |
Steve Reinhardt | 2f93db6 | 2007-07-29 20:17:03 -0700 | [diff] [blame] | 60 | } |
Steve Reinhardt | f9ae0dc | 2006-08-30 16:24:26 -0700 | [diff] [blame] | 61 | } |
| 62 | |
| 63 | bool |
Andreas Hansson | 3fea59e | 2012-05-01 13:40:42 -0400 | [diff] [blame] | 64 | SimpleTimingPort::recvTimingReq(PacketPtr pkt) |
Steve Reinhardt | f9ae0dc | 2006-08-30 16:24:26 -0700 | [diff] [blame] | 65 | { |
Andreas Hansson | 9929e88 | 2013-04-22 13:20:33 -0400 | [diff] [blame] | 66 | // the SimpleTimingPort should not be used anywhere where there is |
Andreas Hansson | 0fcb376 | 2015-12-31 09:32:58 -0500 | [diff] [blame] | 67 | // a need to deal with snoop responses and their flow control |
| 68 | // requirements |
| 69 | if (pkt->cacheResponding()) |
| 70 | panic("SimpleTimingPort should never see packets with the " |
| 71 | "cacheResponding flag set\n"); |
Steve Reinhardt | 1b20df5 | 2007-06-26 22:23:10 -0700 | [diff] [blame] | 72 | |
Steve Reinhardt | 35cf19d | 2007-06-17 17:27:53 -0700 | [diff] [blame] | 73 | bool needsResponse = pkt->needsResponse(); |
Steve Reinhardt | f9ae0dc | 2006-08-30 16:24:26 -0700 | [diff] [blame] | 74 | Tick latency = recvAtomic(pkt); |
Ron Dreslinski | e65f0ce | 2006-10-08 19:05:48 -0400 | [diff] [blame] | 75 | // turn packet around to go back to requester if response expected |
Steve Reinhardt | 35cf19d | 2007-06-17 17:27:53 -0700 | [diff] [blame] | 76 | if (needsResponse) { |
Steve Reinhardt | 1b20df5 | 2007-06-26 22:23:10 -0700 | [diff] [blame] | 77 | // recvAtomic() should already have turned packet into |
| 78 | // atomic response |
Steve Reinhardt | 35cf19d | 2007-06-17 17:27:53 -0700 | [diff] [blame] | 79 | assert(pkt->isResponse()); |
Andreas Hansson | e317d8b | 2012-08-22 11:39:56 -0400 | [diff] [blame] | 80 | schedTimingResp(pkt, curTick() + latency); |
Steve Reinhardt | 35cf19d | 2007-06-17 17:27:53 -0700 | [diff] [blame] | 81 | } else { |
Andreas Hansson | ac1368d | 2015-11-06 03:26:21 -0500 | [diff] [blame] | 82 | // queue the packet for deletion |
| 83 | pendingDelete.reset(pkt); |
Ron Dreslinski | 4fff6d4 | 2006-10-17 16:47:22 -0400 | [diff] [blame] | 84 | } |
Steve Reinhardt | 1b20df5 | 2007-06-26 22:23:10 -0700 | [diff] [blame] | 85 | |
Steve Reinhardt | f9ae0dc | 2006-08-30 16:24:26 -0700 | [diff] [blame] | 86 | return true; |
| 87 | } |