packet_access.hh revision 13347
13348Sbinkertn@umich.edu/* 211013Sandreas.sandberg@arm.com * Copyright (c) 2015 ARM Limited 311013Sandreas.sandberg@arm.com * All rights reserved 411013Sandreas.sandberg@arm.com * 511013Sandreas.sandberg@arm.com * The license below extends only to copyright in the software and shall 611013Sandreas.sandberg@arm.com * not be construed as granting a license to any other intellectual 711013Sandreas.sandberg@arm.com * property including but not limited to intellectual property relating 811013Sandreas.sandberg@arm.com * to a hardware implementation of the functionality of the software 911013Sandreas.sandberg@arm.com * licensed hereunder. You may use the software subject to the license 1011013Sandreas.sandberg@arm.com * terms below provided that you ensure that this notice is replicated 1111013Sandreas.sandberg@arm.com * unmodified and in its entirety in all distributions of the software, 1211013Sandreas.sandberg@arm.com * modified or unmodified, in source code or in binary form. 1311013Sandreas.sandberg@arm.com * 143348Sbinkertn@umich.edu * Copyright (c) 2006 The Regents of The University of Michigan 153348Sbinkertn@umich.edu * All rights reserved. 163348Sbinkertn@umich.edu * 173348Sbinkertn@umich.edu * Redistribution and use in source and binary forms, with or without 183348Sbinkertn@umich.edu * modification, are permitted provided that the following conditions are 193348Sbinkertn@umich.edu * met: redistributions of source code must retain the above copyright 203348Sbinkertn@umich.edu * notice, this list of conditions and the following disclaimer; 213348Sbinkertn@umich.edu * redistributions in binary form must reproduce the above copyright 223348Sbinkertn@umich.edu * notice, this list of conditions and the following disclaimer in the 233348Sbinkertn@umich.edu * documentation and/or other materials provided with the distribution; 243348Sbinkertn@umich.edu * neither the name of the copyright holders nor the names of its 253348Sbinkertn@umich.edu * contributors may be used to endorse or promote products derived from 263348Sbinkertn@umich.edu * this software without specific prior written permission. 273348Sbinkertn@umich.edu * 283348Sbinkertn@umich.edu * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 293348Sbinkertn@umich.edu * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 303348Sbinkertn@umich.edu * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 313348Sbinkertn@umich.edu * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 323348Sbinkertn@umich.edu * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 333348Sbinkertn@umich.edu * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 343348Sbinkertn@umich.edu * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 353348Sbinkertn@umich.edu * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 363348Sbinkertn@umich.edu * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 373348Sbinkertn@umich.edu * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 383348Sbinkertn@umich.edu * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 393348Sbinkertn@umich.edu * 403348Sbinkertn@umich.edu * Authors: Ali Saidi 413348Sbinkertn@umich.edu * Nathan Binkert 4211013Sandreas.sandberg@arm.com * Andreas Sandberg 433348Sbinkertn@umich.edu */ 443348Sbinkertn@umich.edu 453348Sbinkertn@umich.edu#include "arch/isa_traits.hh" 463348Sbinkertn@umich.edu#include "mem/packet.hh" 473348Sbinkertn@umich.edu#include "sim/byteswap.hh" 483348Sbinkertn@umich.edu 493348Sbinkertn@umich.edu#ifndef __MEM_PACKET_ACCESS_HH__ 503348Sbinkertn@umich.edu#define __MEM_PACKET_ACCESS_HH__ 513348Sbinkertn@umich.edu 523348Sbinkertn@umich.edutemplate <typename T> 533348Sbinkertn@umich.eduinline T 5411013Sandreas.sandberg@arm.comPacket::getRaw() const 553348Sbinkertn@umich.edu{ 565764Snate@binkert.org assert(flags.isSet(STATIC_DATA|DYNAMIC_DATA)); 573348Sbinkertn@umich.edu assert(sizeof(T) <= size); 5811013Sandreas.sandberg@arm.com return *(T*)data; 593348Sbinkertn@umich.edu} 603348Sbinkertn@umich.edu 613348Sbinkertn@umich.edutemplate <typename T> 623348Sbinkertn@umich.eduinline void 6311013Sandreas.sandberg@arm.comPacket::setRaw(T v) 643348Sbinkertn@umich.edu{ 655764Snate@binkert.org assert(flags.isSet(STATIC_DATA|DYNAMIC_DATA)); 663348Sbinkertn@umich.edu assert(sizeof(T) <= size); 6711295Sstever@gmail.com *(T*)data = v; 683348Sbinkertn@umich.edu} 693348Sbinkertn@umich.edu 7011013Sandreas.sandberg@arm.com 7111013Sandreas.sandberg@arm.comtemplate <typename T> 7211013Sandreas.sandberg@arm.cominline T 7311013Sandreas.sandberg@arm.comPacket::getBE() const 7411013Sandreas.sandberg@arm.com{ 7511013Sandreas.sandberg@arm.com return betoh(getRaw<T>()); 7611013Sandreas.sandberg@arm.com} 7711013Sandreas.sandberg@arm.com 7811013Sandreas.sandberg@arm.comtemplate <typename T> 7911013Sandreas.sandberg@arm.cominline T 8011013Sandreas.sandberg@arm.comPacket::getLE() const 8111013Sandreas.sandberg@arm.com{ 8211013Sandreas.sandberg@arm.com return letoh(getRaw<T>()); 8311013Sandreas.sandberg@arm.com} 8411013Sandreas.sandberg@arm.com 8511013Sandreas.sandberg@arm.comtemplate <typename T> 8611013Sandreas.sandberg@arm.cominline T 8711013Sandreas.sandberg@arm.comPacket::get(ByteOrder endian) const 8811013Sandreas.sandberg@arm.com{ 8911013Sandreas.sandberg@arm.com switch (endian) { 9011013Sandreas.sandberg@arm.com case BigEndianByteOrder: 9111013Sandreas.sandberg@arm.com return getBE<T>(); 9211013Sandreas.sandberg@arm.com 9311013Sandreas.sandberg@arm.com case LittleEndianByteOrder: 9411013Sandreas.sandberg@arm.com return getLE<T>(); 9511013Sandreas.sandberg@arm.com 9611013Sandreas.sandberg@arm.com default: 9711013Sandreas.sandberg@arm.com panic("Illegal byte order in Packet::get()\n"); 9811013Sandreas.sandberg@arm.com }; 9911013Sandreas.sandberg@arm.com} 10011013Sandreas.sandberg@arm.com 10113347Sgabeblack@google.com#if THE_ISA != NULL_ISA 10211013Sandreas.sandberg@arm.comtemplate <typename T> 10311013Sandreas.sandberg@arm.cominline T 10411013Sandreas.sandberg@arm.comPacket::get() const 10511013Sandreas.sandberg@arm.com{ 10611013Sandreas.sandberg@arm.com return TheISA::gtoh(getRaw<T>()); 10711013Sandreas.sandberg@arm.com} 10813347Sgabeblack@google.com#endif 10911013Sandreas.sandberg@arm.com 11011013Sandreas.sandberg@arm.comtemplate <typename T> 11111013Sandreas.sandberg@arm.cominline void 11211013Sandreas.sandberg@arm.comPacket::setBE(T v) 11311013Sandreas.sandberg@arm.com{ 11411013Sandreas.sandberg@arm.com setRaw(htobe(v)); 11511013Sandreas.sandberg@arm.com} 11611013Sandreas.sandberg@arm.com 11711013Sandreas.sandberg@arm.comtemplate <typename T> 11811013Sandreas.sandberg@arm.cominline void 11911013Sandreas.sandberg@arm.comPacket::setLE(T v) 12011013Sandreas.sandberg@arm.com{ 12111013Sandreas.sandberg@arm.com setRaw(htole(v)); 12211013Sandreas.sandberg@arm.com} 12311013Sandreas.sandberg@arm.com 12411013Sandreas.sandberg@arm.comtemplate <typename T> 12511013Sandreas.sandberg@arm.cominline void 12611013Sandreas.sandberg@arm.comPacket::set(T v, ByteOrder endian) 12711013Sandreas.sandberg@arm.com{ 12811013Sandreas.sandberg@arm.com switch (endian) { 12911013Sandreas.sandberg@arm.com case BigEndianByteOrder: 13011013Sandreas.sandberg@arm.com return setBE<T>(v); 13111013Sandreas.sandberg@arm.com 13211013Sandreas.sandberg@arm.com case LittleEndianByteOrder: 13311013Sandreas.sandberg@arm.com return setLE<T>(v); 13411013Sandreas.sandberg@arm.com 13511013Sandreas.sandberg@arm.com default: 13611013Sandreas.sandberg@arm.com panic("Illegal byte order in Packet::set()\n"); 13711013Sandreas.sandberg@arm.com }; 13811013Sandreas.sandberg@arm.com} 13911013Sandreas.sandberg@arm.com 14013347Sgabeblack@google.com#if THE_ISA != NULL_ISA 14111013Sandreas.sandberg@arm.comtemplate <typename T> 14211013Sandreas.sandberg@arm.cominline void 14311013Sandreas.sandberg@arm.comPacket::set(T v) 14411013Sandreas.sandberg@arm.com{ 14511013Sandreas.sandberg@arm.com setRaw(TheISA::htog(v)); 14611013Sandreas.sandberg@arm.com} 14713347Sgabeblack@google.com#endif 14811013Sandreas.sandberg@arm.com 1493348Sbinkertn@umich.edu#endif //__MEM_PACKET_ACCESS_HH__ 150