tport.cc revision 8914
12914Ssaidi@eecs.umich.edu/* 28856Sandreas.hansson@arm.com * Copyright (c) 2012 ARM Limited 38856Sandreas.hansson@arm.com * All rights reserved. 48856Sandreas.hansson@arm.com * 58856Sandreas.hansson@arm.com * The license below extends only to copyright in the software and shall 68856Sandreas.hansson@arm.com * not be construed as granting a license to any other intellectual 78856Sandreas.hansson@arm.com * property including but not limited to intellectual property relating 88856Sandreas.hansson@arm.com * to a hardware implementation of the functionality of the software 98856Sandreas.hansson@arm.com * licensed hereunder. You may use the software subject to the license 108856Sandreas.hansson@arm.com * terms below provided that you ensure that this notice is replicated 118856Sandreas.hansson@arm.com * unmodified and in its entirety in all distributions of the software, 128856Sandreas.hansson@arm.com * modified or unmodified, in source code or in binary form. 138856Sandreas.hansson@arm.com * 142914Ssaidi@eecs.umich.edu * Copyright (c) 2006 The Regents of The University of Michigan 152914Ssaidi@eecs.umich.edu * All rights reserved. 162914Ssaidi@eecs.umich.edu * 172914Ssaidi@eecs.umich.edu * Redistribution and use in source and binary forms, with or without 182914Ssaidi@eecs.umich.edu * modification, are permitted provided that the following conditions are 192914Ssaidi@eecs.umich.edu * met: redistributions of source code must retain the above copyright 202914Ssaidi@eecs.umich.edu * notice, this list of conditions and the following disclaimer; 212914Ssaidi@eecs.umich.edu * redistributions in binary form must reproduce the above copyright 222914Ssaidi@eecs.umich.edu * notice, this list of conditions and the following disclaimer in the 232914Ssaidi@eecs.umich.edu * documentation and/or other materials provided with the distribution; 242914Ssaidi@eecs.umich.edu * neither the name of the copyright holders nor the names of its 252914Ssaidi@eecs.umich.edu * contributors may be used to endorse or promote products derived from 262914Ssaidi@eecs.umich.edu * this software without specific prior written permission. 272914Ssaidi@eecs.umich.edu * 282914Ssaidi@eecs.umich.edu * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 292914Ssaidi@eecs.umich.edu * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 302914Ssaidi@eecs.umich.edu * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 312914Ssaidi@eecs.umich.edu * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 322914Ssaidi@eecs.umich.edu * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 332914Ssaidi@eecs.umich.edu * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 342914Ssaidi@eecs.umich.edu * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 352914Ssaidi@eecs.umich.edu * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 362914Ssaidi@eecs.umich.edu * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 372914Ssaidi@eecs.umich.edu * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 382914Ssaidi@eecs.umich.edu * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 392914Ssaidi@eecs.umich.edu * 402914Ssaidi@eecs.umich.edu * Authors: Ali Saidi 418856Sandreas.hansson@arm.com * Andreas Hansson 422914Ssaidi@eecs.umich.edu */ 432914Ssaidi@eecs.umich.edu 448708Sandreas.hansson@arm.com#include "mem/mem_object.hh" 452914Ssaidi@eecs.umich.edu#include "mem/tport.hh" 462914Ssaidi@eecs.umich.edu 478914Sandreas.hansson@arm.comSimpleTimingPort::SimpleTimingPort(const std::string& _name, 488914Sandreas.hansson@arm.com MemObject* _owner) : 498914Sandreas.hansson@arm.com QueuedPort(_name, _owner, queue), queue(*_owner, *this) 505740Snate@binkert.org{ 515740Snate@binkert.org} 525740Snate@binkert.org 534490Sstever@eecs.umich.eduvoid 544490Sstever@eecs.umich.eduSimpleTimingPort::recvFunctional(PacketPtr pkt) 554490Sstever@eecs.umich.edu{ 568914Sandreas.hansson@arm.com assert(pkt->isRequest()); 578914Sandreas.hansson@arm.com if (!queue.checkFunctional(pkt)) { 588914Sandreas.hansson@arm.com // do an atomic access and throw away the returned latency 593296Ssaidi@eecs.umich.edu recvAtomic(pkt); 604929Sstever@gmail.com } 613091Sstever@eecs.umich.edu} 623091Sstever@eecs.umich.edu 633091Sstever@eecs.umich.edubool 643349Sbinkertn@umich.eduSimpleTimingPort::recvTiming(PacketPtr pkt) 653091Sstever@eecs.umich.edu{ 664670Sstever@eecs.umich.edu if (pkt->memInhibitAsserted()) { 674670Sstever@eecs.umich.edu // snooper will supply based on copy of packet 684670Sstever@eecs.umich.edu // still target's responsibility to delete packet 694670Sstever@eecs.umich.edu delete pkt; 704670Sstever@eecs.umich.edu return true; 714670Sstever@eecs.umich.edu } 724670Sstever@eecs.umich.edu 734626Sstever@eecs.umich.edu bool needsResponse = pkt->needsResponse(); 743091Sstever@eecs.umich.edu Tick latency = recvAtomic(pkt); 753175Srdreslin@umich.edu // turn packet around to go back to requester if response expected 764626Sstever@eecs.umich.edu if (needsResponse) { 774670Sstever@eecs.umich.edu // recvAtomic() should already have turned packet into 784670Sstever@eecs.umich.edu // atomic response 794626Sstever@eecs.umich.edu assert(pkt->isResponse()); 808914Sandreas.hansson@arm.com queue.schedSendTiming(pkt, curTick() + latency); 814626Sstever@eecs.umich.edu } else { 824490Sstever@eecs.umich.edu delete pkt; 833309Srdreslin@umich.edu } 844670Sstever@eecs.umich.edu 853091Sstever@eecs.umich.edu return true; 863091Sstever@eecs.umich.edu} 87