110994Sandreas.sandberg@arm.com/* 210994Sandreas.sandberg@arm.com * Copyright (c) 2015 ARM Limited 310994Sandreas.sandberg@arm.com * All rights reserved 410994Sandreas.sandberg@arm.com * 510994Sandreas.sandberg@arm.com * The license below extends only to copyright in the software and shall 610994Sandreas.sandberg@arm.com * not be construed as granting a license to any other intellectual 710994Sandreas.sandberg@arm.com * property including but not limited to intellectual property relating 810994Sandreas.sandberg@arm.com * to a hardware implementation of the functionality of the software 910994Sandreas.sandberg@arm.com * licensed hereunder. You may use the software subject to the license 1010994Sandreas.sandberg@arm.com * terms below provided that you ensure that this notice is replicated 1110994Sandreas.sandberg@arm.com * unmodified and in its entirety in all distributions of the software, 1210994Sandreas.sandberg@arm.com * modified or unmodified, in source code or in binary form. 1310994Sandreas.sandberg@arm.com * 1410994Sandreas.sandberg@arm.com * Redistribution and use in source and binary forms, with or without 1510994Sandreas.sandberg@arm.com * modification, are permitted provided that the following conditions are 1610994Sandreas.sandberg@arm.com * met: redistributions of source code must retain the above copyright 1710994Sandreas.sandberg@arm.com * notice, this list of conditions and the following disclaimer; 1810994Sandreas.sandberg@arm.com * redistributions in binary form must reproduce the above copyright 1910994Sandreas.sandberg@arm.com * notice, this list of conditions and the following disclaimer in the 2010994Sandreas.sandberg@arm.com * documentation and/or other materials provided with the distribution; 2110994Sandreas.sandberg@arm.com * neither the name of the copyright holders nor the names of its 2210994Sandreas.sandberg@arm.com * contributors may be used to endorse or promote products derived from 2310994Sandreas.sandberg@arm.com * this software without specific prior written permission. 2410994Sandreas.sandberg@arm.com * 2510994Sandreas.sandberg@arm.com * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 2610994Sandreas.sandberg@arm.com * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 2710994Sandreas.sandberg@arm.com * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 2810994Sandreas.sandberg@arm.com * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 2910994Sandreas.sandberg@arm.com * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 3010994Sandreas.sandberg@arm.com * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 3110994Sandreas.sandberg@arm.com * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 3210994Sandreas.sandberg@arm.com * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 3310994Sandreas.sandberg@arm.com * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 3410994Sandreas.sandberg@arm.com * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 3510994Sandreas.sandberg@arm.com * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 3610994Sandreas.sandberg@arm.com * 3710994Sandreas.sandberg@arm.com * Authors: Andreas Sandberg 3810994Sandreas.sandberg@arm.com */ 3910994Sandreas.sandberg@arm.com 4011001Sandreas.sandberg@arm.com#ifndef __MEM_PROBES_BASE_HH__ 4111001Sandreas.sandberg@arm.com#define __MEM_PROBES_BASE_HH__ 4210994Sandreas.sandberg@arm.com 4310994Sandreas.sandberg@arm.com#include <memory> 4410994Sandreas.sandberg@arm.com#include <vector> 4510994Sandreas.sandberg@arm.com 4611139Sandreas.hansson@arm.com#include "sim/probe/mem.hh" 4710994Sandreas.sandberg@arm.com#include "sim/sim_object.hh" 4810994Sandreas.sandberg@arm.com 4910994Sandreas.sandberg@arm.comstruct BaseMemProbeParams; 5010994Sandreas.sandberg@arm.com 5110994Sandreas.sandberg@arm.com/** 5210994Sandreas.sandberg@arm.com * Base class for memory system probes accepting Packet instances. 5310994Sandreas.sandberg@arm.com * 5410994Sandreas.sandberg@arm.com * This is a helper base class for memory system probes that 5510994Sandreas.sandberg@arm.com * instrument Packet handling. Unlike the ProbeListenerObject base 5610994Sandreas.sandberg@arm.com * class, this class supports instrumentation of multiple ProbeManager 5710994Sandreas.sandberg@arm.com * instances. However, it's limited to one probe point name. This 5810994Sandreas.sandberg@arm.com * enables features like tracing or stack distance analysis of packets 5910994Sandreas.sandberg@arm.com * from multiple components using the same probe. For example, a stack 6010994Sandreas.sandberg@arm.com * distance probe could be hooked up to multiple memories in a 6110994Sandreas.sandberg@arm.com * multi-channel configuration. 6210994Sandreas.sandberg@arm.com */ 6310994Sandreas.sandberg@arm.comclass BaseMemProbe : public SimObject 6410994Sandreas.sandberg@arm.com{ 6510994Sandreas.sandberg@arm.com public: 6610994Sandreas.sandberg@arm.com BaseMemProbe(BaseMemProbeParams *params); 6710994Sandreas.sandberg@arm.com 6811168Sandreas.hansson@arm.com void regProbeListeners() override; 6910994Sandreas.sandberg@arm.com 7010994Sandreas.sandberg@arm.com protected: 7110994Sandreas.sandberg@arm.com /** 7210994Sandreas.sandberg@arm.com * Callback to analyse intercepted Packets. 7310994Sandreas.sandberg@arm.com */ 7411139Sandreas.hansson@arm.com virtual void handleRequest(const ProbePoints::PacketInfo &pkt_info) = 0; 7510994Sandreas.sandberg@arm.com 7610994Sandreas.sandberg@arm.com private: 7711139Sandreas.hansson@arm.com class PacketListener : public ProbeListenerArgBase<ProbePoints::PacketInfo> 7810994Sandreas.sandberg@arm.com { 7910994Sandreas.sandberg@arm.com public: 8010994Sandreas.sandberg@arm.com PacketListener(BaseMemProbe &_parent, 8110994Sandreas.sandberg@arm.com ProbeManager *pm, const std::string &name) 8210994Sandreas.sandberg@arm.com : ProbeListenerArgBase(pm, name), 8310994Sandreas.sandberg@arm.com parent(_parent) {} 8410994Sandreas.sandberg@arm.com 8511168Sandreas.hansson@arm.com void notify(const ProbePoints::PacketInfo &pkt_info) override { 8611139Sandreas.hansson@arm.com parent.handleRequest(pkt_info); 8710994Sandreas.sandberg@arm.com } 8810994Sandreas.sandberg@arm.com 8910994Sandreas.sandberg@arm.com protected: 9010994Sandreas.sandberg@arm.com BaseMemProbe &parent; 9110994Sandreas.sandberg@arm.com }; 9210994Sandreas.sandberg@arm.com 9310994Sandreas.sandberg@arm.com std::vector<std::unique_ptr<PacketListener>> listeners; 9410994Sandreas.sandberg@arm.com}; 9510994Sandreas.sandberg@arm.com 9611001Sandreas.sandberg@arm.com#endif // __MEM_PROBES_BASE_HH__ 97