RubyRequest.hh revision 8092
111986Sandreas.sandberg@arm.com/* 211986Sandreas.sandberg@arm.com * Copyright (c) 2009 Mark D. Hill and David A. Wood 311986Sandreas.sandberg@arm.com * All rights reserved. 411986Sandreas.sandberg@arm.com * 511986Sandreas.sandberg@arm.com * Redistribution and use in source and binary forms, with or without 611986Sandreas.sandberg@arm.com * modification, are permitted provided that the following conditions are 711986Sandreas.sandberg@arm.com * met: redistributions of source code must retain the above copyright 811986Sandreas.sandberg@arm.com * notice, this list of conditions and the following disclaimer; 911986Sandreas.sandberg@arm.com * redistributions in binary form must reproduce the above copyright 1011986Sandreas.sandberg@arm.com * notice, this list of conditions and the following disclaimer in the 1111986Sandreas.sandberg@arm.com * documentation and/or other materials provided with the distribution; 1211986Sandreas.sandberg@arm.com * neither the name of the copyright holders nor the names of its 1311986Sandreas.sandberg@arm.com * contributors may be used to endorse or promote products derived from 1411986Sandreas.sandberg@arm.com * this software without specific prior written permission. 1511986Sandreas.sandberg@arm.com * 1611986Sandreas.sandberg@arm.com * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 1711986Sandreas.sandberg@arm.com * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 1811986Sandreas.sandberg@arm.com * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 1911986Sandreas.sandberg@arm.com * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 2011986Sandreas.sandberg@arm.com * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 2111986Sandreas.sandberg@arm.com * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 2211986Sandreas.sandberg@arm.com * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 2311986Sandreas.sandberg@arm.com * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 2411986Sandreas.sandberg@arm.com * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 2511986Sandreas.sandberg@arm.com * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 2611986Sandreas.sandberg@arm.com * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 2711986Sandreas.sandberg@arm.com */ 2811986Sandreas.sandberg@arm.com 2911986Sandreas.sandberg@arm.com#ifndef __MEM_RUBY_SLICC_INTERFACE_RUBY_REQUEST_HH__ 3011986Sandreas.sandberg@arm.com#define __MEM_RUBY_SLICC_INTERFACE_RUBY_REQUEST_HH__ 3111986Sandreas.sandberg@arm.com 3211986Sandreas.sandberg@arm.com#include <ostream> 3311986Sandreas.sandberg@arm.com 3411986Sandreas.sandberg@arm.com#include "mem/packet.hh" 3511986Sandreas.sandberg@arm.com#include "mem/protocol/AccessModeType.hh" 3611986Sandreas.sandberg@arm.com#include "mem/protocol/CacheRequestType.hh" 3711986Sandreas.sandberg@arm.com#include "mem/protocol/Message.hh" 3811986Sandreas.sandberg@arm.com#include "mem/protocol/PrefetchBit.hh" 3911986Sandreas.sandberg@arm.com#include "mem/ruby/common/Address.hh" 4011986Sandreas.sandberg@arm.com 4111986Sandreas.sandberg@arm.comtypedef void* RubyPortHandle; 4211986Sandreas.sandberg@arm.comenum RubyRequestType { 4311986Sandreas.sandberg@arm.com RubyRequestType_NULL, 4411986Sandreas.sandberg@arm.com RubyRequestType_IFETCH, 4511986Sandreas.sandberg@arm.com RubyRequestType_LD, 4611986Sandreas.sandberg@arm.com RubyRequestType_ST, 4711986Sandreas.sandberg@arm.com RubyRequestType_Load_Linked, 4811986Sandreas.sandberg@arm.com RubyRequestType_Store_Conditional, 4911986Sandreas.sandberg@arm.com RubyRequestType_RMW_Read, 5011986Sandreas.sandberg@arm.com RubyRequestType_RMW_Write, 5111986Sandreas.sandberg@arm.com RubyRequestType_Locked_RMW_Read, 5211986Sandreas.sandberg@arm.com RubyRequestType_Locked_RMW_Write, 5311986Sandreas.sandberg@arm.com RubyRequestType_NUM 5411986Sandreas.sandberg@arm.com}; 5511986Sandreas.sandberg@arm.com 5611986Sandreas.sandberg@arm.comenum RubyAccessMode { 5711986Sandreas.sandberg@arm.com RubyAccessMode_User, 5811986Sandreas.sandberg@arm.com RubyAccessMode_Supervisor, 5912391Sjason@lowepower.com RubyAccessMode_Device 6011986Sandreas.sandberg@arm.com}; 6111986Sandreas.sandberg@arm.com 6211986Sandreas.sandberg@arm.comclass RubyRequest 6311986Sandreas.sandberg@arm.com{ 6411986Sandreas.sandberg@arm.com public: 6511986Sandreas.sandberg@arm.com uint64_t paddr; 6611986Sandreas.sandberg@arm.com uint8_t* data; 6711986Sandreas.sandberg@arm.com int len; 6811986Sandreas.sandberg@arm.com uint64_t pc; 6911986Sandreas.sandberg@arm.com RubyRequestType type; 7011986Sandreas.sandberg@arm.com RubyAccessMode access_mode; 7111986Sandreas.sandberg@arm.com PacketPtr pkt; 7211986Sandreas.sandberg@arm.com unsigned proc_id; 7311986Sandreas.sandberg@arm.com 7411986Sandreas.sandberg@arm.com RubyRequest() {} 7511986Sandreas.sandberg@arm.com RubyRequest(uint64_t _paddr, 7611986Sandreas.sandberg@arm.com uint8_t* _data, 7711986Sandreas.sandberg@arm.com int _len, 7811986Sandreas.sandberg@arm.com uint64_t _pc, 7911986Sandreas.sandberg@arm.com RubyRequestType _type, 8011986Sandreas.sandberg@arm.com RubyAccessMode _access_mode, 8111986Sandreas.sandberg@arm.com PacketPtr _pkt, 8211986Sandreas.sandberg@arm.com unsigned _proc_id = 100) 8311986Sandreas.sandberg@arm.com : paddr(_paddr), 8411986Sandreas.sandberg@arm.com data(_data), 8511986Sandreas.sandberg@arm.com len(_len), 8611986Sandreas.sandberg@arm.com pc(_pc), 8711986Sandreas.sandberg@arm.com type(_type), 8811986Sandreas.sandberg@arm.com access_mode(_access_mode), 8911986Sandreas.sandberg@arm.com pkt(_pkt), 9011986Sandreas.sandberg@arm.com proc_id(_proc_id) 9111986Sandreas.sandberg@arm.com {} 9211986Sandreas.sandberg@arm.com 9311986Sandreas.sandberg@arm.com void print(std::ostream& out) const; 9411986Sandreas.sandberg@arm.com}; 9511986Sandreas.sandberg@arm.com 9611986Sandreas.sandberg@arm.comstd::string RubyRequestType_to_string(const RubyRequestType& obj); 9711986Sandreas.sandberg@arm.comRubyRequestType string_to_RubyRequestType(std::string); 9811986Sandreas.sandberg@arm.comstd::ostream& operator<<(std::ostream& out, const RubyRequestType& obj); 9911986Sandreas.sandberg@arm.comstd::ostream& operator<<(std::ostream& out, const RubyRequest& obj); 10011986Sandreas.sandberg@arm.com 10111986Sandreas.sandberg@arm.com#endif 10211986Sandreas.sandberg@arm.com