port_proxy.cc revision 12532
18853Sandreas.hansson@arm.com/* 212532Sandreas.sandberg@arm.com * Copyright (c) 2012, 2018 ARM Limited 38853Sandreas.hansson@arm.com * All rights reserved 48853Sandreas.hansson@arm.com * 58853Sandreas.hansson@arm.com * The license below extends only to copyright in the software and shall 68853Sandreas.hansson@arm.com * not be construed as granting a license to any other intellectual 78853Sandreas.hansson@arm.com * property including but not limited to intellectual property relating 88853Sandreas.hansson@arm.com * to a hardware implementation of the functionality of the software 98853Sandreas.hansson@arm.com * licensed hereunder. You may use the software subject to the license 108853Sandreas.hansson@arm.com * terms below provided that you ensure that this notice is replicated 118853Sandreas.hansson@arm.com * unmodified and in its entirety in all distributions of the software, 128853Sandreas.hansson@arm.com * modified or unmodified, in source code or in binary form. 138853Sandreas.hansson@arm.com * 148853Sandreas.hansson@arm.com * Redistribution and use in source and binary forms, with or without 158853Sandreas.hansson@arm.com * modification, are permitted provided that the following conditions are 168853Sandreas.hansson@arm.com * met: redistributions of source code must retain the above copyright 178853Sandreas.hansson@arm.com * notice, this list of conditions and the following disclaimer; 188853Sandreas.hansson@arm.com * redistributions in binary form must reproduce the above copyright 198853Sandreas.hansson@arm.com * notice, this list of conditions and the following disclaimer in the 208853Sandreas.hansson@arm.com * documentation and/or other materials provided with the distribution; 218853Sandreas.hansson@arm.com * neither the name of the copyright holders nor the names of its 228853Sandreas.hansson@arm.com * contributors may be used to endorse or promote products derived from 238853Sandreas.hansson@arm.com * this software without specific prior written permission. 248853Sandreas.hansson@arm.com * 258853Sandreas.hansson@arm.com * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 268853Sandreas.hansson@arm.com * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 278853Sandreas.hansson@arm.com * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 288853Sandreas.hansson@arm.com * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 298853Sandreas.hansson@arm.com * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 308853Sandreas.hansson@arm.com * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 318853Sandreas.hansson@arm.com * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 328853Sandreas.hansson@arm.com * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 338853Sandreas.hansson@arm.com * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 348853Sandreas.hansson@arm.com * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 358853Sandreas.hansson@arm.com * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 368853Sandreas.hansson@arm.com * 378853Sandreas.hansson@arm.com * Authors: Andreas Hansson 388853Sandreas.hansson@arm.com */ 398853Sandreas.hansson@arm.com 4011793Sbrandon.potter@amd.com#include "mem/port_proxy.hh" 4111793Sbrandon.potter@amd.com 428853Sandreas.hansson@arm.com#include "base/chunk_generator.hh" 438853Sandreas.hansson@arm.com 448853Sandreas.hansson@arm.comvoid 4512532Sandreas.sandberg@arm.comPortProxy::readBlobPhys(Addr addr, Request::Flags flags, 4612532Sandreas.sandberg@arm.com uint8_t *p, int size) const 478853Sandreas.hansson@arm.com{ 4810564Sandreas.hansson@arm.com for (ChunkGenerator gen(addr, size, _cacheLineSize); !gen.done(); 4910564Sandreas.hansson@arm.com gen.next()) { 5012532Sandreas.sandberg@arm.com Request req(gen.addr(), gen.size(), flags, Request::funcMasterId); 5110564Sandreas.hansson@arm.com Packet pkt(&req, MemCmd::ReadReq); 528853Sandreas.hansson@arm.com pkt.dataStatic(p); 538853Sandreas.hansson@arm.com _port.sendFunctional(&pkt); 548853Sandreas.hansson@arm.com p += gen.size(); 558853Sandreas.hansson@arm.com } 568853Sandreas.hansson@arm.com} 578853Sandreas.hansson@arm.com 588853Sandreas.hansson@arm.comvoid 5912532Sandreas.sandberg@arm.comPortProxy::writeBlobPhys(Addr addr, Request::Flags flags, 6012532Sandreas.sandberg@arm.com const uint8_t *p, int size) const 6110564Sandreas.hansson@arm.com{ 6210564Sandreas.hansson@arm.com for (ChunkGenerator gen(addr, size, _cacheLineSize); !gen.done(); 6310564Sandreas.hansson@arm.com gen.next()) { 6412532Sandreas.sandberg@arm.com Request req(gen.addr(), gen.size(), flags, Request::funcMasterId); 6510564Sandreas.hansson@arm.com Packet pkt(&req, MemCmd::WriteReq); 6610564Sandreas.hansson@arm.com pkt.dataStaticConst(p); 6710564Sandreas.hansson@arm.com _port.sendFunctional(&pkt); 6810564Sandreas.hansson@arm.com p += gen.size(); 6910564Sandreas.hansson@arm.com } 7010564Sandreas.hansson@arm.com} 7110564Sandreas.hansson@arm.com 7210564Sandreas.hansson@arm.comvoid 7312532Sandreas.sandberg@arm.comPortProxy::memsetBlobPhys(Addr addr, Request::Flags flags, 7412532Sandreas.sandberg@arm.com uint8_t v, int size) const 758853Sandreas.hansson@arm.com{ 768853Sandreas.hansson@arm.com // quick and dirty... 778853Sandreas.hansson@arm.com uint8_t *buf = new uint8_t[size]; 788853Sandreas.hansson@arm.com 798853Sandreas.hansson@arm.com std::memset(buf, v, size); 8012532Sandreas.sandberg@arm.com PortProxy::writeBlobPhys(addr, flags, buf, size); 818853Sandreas.hansson@arm.com 828853Sandreas.hansson@arm.com delete [] buf; 838853Sandreas.hansson@arm.com} 8412532Sandreas.sandberg@arm.com 8512532Sandreas.sandberg@arm.com 8612532Sandreas.sandberg@arm.comvoid 8712532Sandreas.sandberg@arm.comSecurePortProxy::readBlob(Addr addr, uint8_t *p, int size) const 8812532Sandreas.sandberg@arm.com{ 8912532Sandreas.sandberg@arm.com readBlobPhys(addr, Request::SECURE, p, size); 9012532Sandreas.sandberg@arm.com} 9112532Sandreas.sandberg@arm.com 9212532Sandreas.sandberg@arm.comvoid 9312532Sandreas.sandberg@arm.comSecurePortProxy::writeBlob(Addr addr, const uint8_t *p, int size) const 9412532Sandreas.sandberg@arm.com{ 9512532Sandreas.sandberg@arm.com writeBlobPhys(addr, Request::SECURE, p, size); 9612532Sandreas.sandberg@arm.com} 9712532Sandreas.sandberg@arm.com 9812532Sandreas.sandberg@arm.comvoid 9912532Sandreas.sandberg@arm.comSecurePortProxy::memsetBlob(Addr addr, uint8_t v, int size) const 10012532Sandreas.sandberg@arm.com{ 10112532Sandreas.sandberg@arm.com memsetBlobPhys(addr, Request::SECURE, v, size); 10212532Sandreas.sandberg@arm.com} 103