RubyRequest.hh revision 9466:23e13ad7091f
12810Srdreslin@umich.edu/*
212345Snikos.nikoleris@arm.com * Copyright (c) 2009 Mark D. Hill and David A. Wood
38702Sandreas.hansson@arm.com * All rights reserved.
48702Sandreas.hansson@arm.com *
58702Sandreas.hansson@arm.com * Redistribution and use in source and binary forms, with or without
68702Sandreas.hansson@arm.com * modification, are permitted provided that the following conditions are
78702Sandreas.hansson@arm.com * met: redistributions of source code must retain the above copyright
88702Sandreas.hansson@arm.com * notice, this list of conditions and the following disclaimer;
98702Sandreas.hansson@arm.com * redistributions in binary form must reproduce the above copyright
108702Sandreas.hansson@arm.com * notice, this list of conditions and the following disclaimer in the
118702Sandreas.hansson@arm.com * documentation and/or other materials provided with the distribution;
128702Sandreas.hansson@arm.com * neither the name of the copyright holders nor the names of its
138702Sandreas.hansson@arm.com * contributors may be used to endorse or promote products derived from
142810Srdreslin@umich.edu * this software without specific prior written permission.
152810Srdreslin@umich.edu *
162810Srdreslin@umich.edu * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
172810Srdreslin@umich.edu * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
182810Srdreslin@umich.edu * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
192810Srdreslin@umich.edu * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
202810Srdreslin@umich.edu * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
212810Srdreslin@umich.edu * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
222810Srdreslin@umich.edu * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
232810Srdreslin@umich.edu * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
242810Srdreslin@umich.edu * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
252810Srdreslin@umich.edu * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
262810Srdreslin@umich.edu * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
272810Srdreslin@umich.edu */
282810Srdreslin@umich.edu
292810Srdreslin@umich.edu#ifndef __MEM_RUBY_SLICC_INTERFACE_RUBY_REQUEST_HH__
302810Srdreslin@umich.edu#define __MEM_RUBY_SLICC_INTERFACE_RUBY_REQUEST_HH__
312810Srdreslin@umich.edu
322810Srdreslin@umich.edu#include <ostream>
332810Srdreslin@umich.edu
342810Srdreslin@umich.edu#include "mem/protocol/Message.hh"
352810Srdreslin@umich.edu#include "mem/protocol/PrefetchBit.hh"
362810Srdreslin@umich.edu#include "mem/protocol/RubyAccessMode.hh"
372810Srdreslin@umich.edu#include "mem/protocol/RubyRequestType.hh"
382810Srdreslin@umich.edu#include "mem/ruby/common/Address.hh"
392810Srdreslin@umich.edu
402810Srdreslin@umich.educlass RubyRequest : public Message
412810Srdreslin@umich.edu{
422810Srdreslin@umich.edu  public:
434458Sstever@eecs.umich.edu    Address m_PhysicalAddress;
448856Sandreas.hansson@arm.com    Address m_LineAddress;
452810Srdreslin@umich.edu    RubyRequestType m_Type;
462810Srdreslin@umich.edu    Address m_ProgramCounter;
472810Srdreslin@umich.edu    RubyAccessMode m_AccessMode;
482810Srdreslin@umich.edu    int m_Size;
492810Srdreslin@umich.edu    PrefetchBit m_Prefetch;
502810Srdreslin@umich.edu    uint8_t* data;
512810Srdreslin@umich.edu    PacketPtr pkt;
5211051Sandreas.hansson@arm.com    unsigned m_contextId;
5311051Sandreas.hansson@arm.com
542810Srdreslin@umich.edu    RubyRequest(Time curTime, uint64_t _paddr, uint8_t* _data, int _len,
5511859Sandreas.hansson@arm.com        uint64_t _pc, RubyRequestType _type, RubyAccessMode _access_mode,
5611859Sandreas.hansson@arm.com        PacketPtr _pkt, PrefetchBit _pb = PrefetchBit_No,
5712334Sgabeblack@google.com        unsigned _proc_id = 100)
5811197Sandreas.hansson@arm.com        : Message(curTime),
595338Sstever@gmail.com          m_PhysicalAddress(_paddr),
605338Sstever@gmail.com          m_Type(_type),
615338Sstever@gmail.com          m_ProgramCounter(_pc),
6210815Sdavid.guillen@arm.com          m_AccessMode(_access_mode),
6311053Sandreas.hansson@arm.com          m_Size(_len),
644458Sstever@eecs.umich.edu          m_Prefetch(_pb),
654458Sstever@eecs.umich.edu          data(_data),
662813Srdreslin@umich.edu          pkt(_pkt),
673861Sstever@eecs.umich.edu          m_contextId(_proc_id)
682810Srdreslin@umich.edu    {
692810Srdreslin@umich.edu      m_LineAddress = m_PhysicalAddress;
702810Srdreslin@umich.edu      m_LineAddress.makeLineAddress();
712810Srdreslin@umich.edu    }
729264Sdjordje.kovacevic@arm.com
732810Srdreslin@umich.edu    RubyRequest(Time curTime) : Message(curTime)
742810Srdreslin@umich.edu    {
752810Srdreslin@umich.edu    }
762810Srdreslin@umich.edu
772810Srdreslin@umich.edu    RubyRequest*
788856Sandreas.hansson@arm.com    clone() const
798856Sandreas.hansson@arm.com    {
808856Sandreas.hansson@arm.com        return new RubyRequest(*this);
818856Sandreas.hansson@arm.com    }
828856Sandreas.hansson@arm.com
833738Sstever@eecs.umich.edu    const Address&
848856Sandreas.hansson@arm.com    getLineAddress() const
853738Sstever@eecs.umich.edu    {
868856Sandreas.hansson@arm.com        return m_LineAddress;
8710815Sdavid.guillen@arm.com    }
883738Sstever@eecs.umich.edu
898856Sandreas.hansson@arm.com    const Address&
904478Sstever@eecs.umich.edu    getPhysicalAddress() const
918975Sandreas.hansson@arm.com    {
928948Sandreas.hansson@arm.com        return m_PhysicalAddress;
9312343Snikos.nikoleris@arm.com    }
9412343Snikos.nikoleris@arm.com
958975Sandreas.hansson@arm.com    const RubyRequestType&
963738Sstever@eecs.umich.edu    getType() const
973738Sstever@eecs.umich.edu    {
983738Sstever@eecs.umich.edu        return m_Type;
993738Sstever@eecs.umich.edu    }
1008856Sandreas.hansson@arm.com
1019090Sandreas.hansson@arm.com    const Address&
1028856Sandreas.hansson@arm.com    getProgramCounter() const
1038856Sandreas.hansson@arm.com    {
1048856Sandreas.hansson@arm.com        return m_ProgramCounter;
10510815Sdavid.guillen@arm.com    }
1068856Sandreas.hansson@arm.com
1078856Sandreas.hansson@arm.com    const RubyAccessMode&
1083738Sstever@eecs.umich.edu    getAccessMode() const
1093738Sstever@eecs.umich.edu    {
1108856Sandreas.hansson@arm.com      return m_AccessMode;
1118914Sandreas.hansson@arm.com    }
1128914Sandreas.hansson@arm.com
1138914Sandreas.hansson@arm.com    const int&
1148914Sandreas.hansson@arm.com    getSize() const
1158914Sandreas.hansson@arm.com    {
11610713Sandreas.hansson@arm.com      return m_Size;
1178914Sandreas.hansson@arm.com    }
1188914Sandreas.hansson@arm.com
1198914Sandreas.hansson@arm.com    const PrefetchBit&
1208914Sandreas.hansson@arm.com    getPrefetch() const
12110815Sdavid.guillen@arm.com    {
12210713Sandreas.hansson@arm.com      return m_Prefetch;
1238914Sandreas.hansson@arm.com    }
1248914Sandreas.hansson@arm.com
1258914Sandreas.hansson@arm.com    void print(std::ostream& out) const;
12610815Sdavid.guillen@arm.com
12710713Sandreas.hansson@arm.com    bool functionalRead(Packet *pkt);
12810713Sandreas.hansson@arm.com    bool functionalWrite(Packet *pkt);
12910713Sandreas.hansson@arm.com};
13010713Sandreas.hansson@arm.com
1318914Sandreas.hansson@arm.cominline std::ostream&
1328914Sandreas.hansson@arm.comoperator<<(std::ostream& out, const RubyRequest& obj)
1338914Sandreas.hansson@arm.com{
1348914Sandreas.hansson@arm.com  obj.print(out);
1358914Sandreas.hansson@arm.com  out << std::flush;
1368914Sandreas.hansson@arm.com  return out;
1378914Sandreas.hansson@arm.com}
1388914Sandreas.hansson@arm.com
13911375Sandreas.hansson@arm.com#endif
14011375Sandreas.hansson@arm.com