Files
gem5/src/proto/packet.proto
Gabe Black 10cd85c67c mem: Add a "map" of packet IDs to strings in probe traces.
This map is intended to map from request MasterIDs to master names. It could
be used to map to arbitrary strings in other situations, however.

The original idea to store this information was to add a new message type
which would store one ID and the string associated with it. This change stores
the IDs in the header instead so that they'll be easy to find and all
available before the packet data.

One downside of this approach is that it won't be possible to add new master
ID strings as they come up during a trace. If that becomes an issue, the two
approaches could be combined and messages could be added which would augment
the map in the header.

Also worth mentioning is that the proto2 version of the protobuf description
language does not support the "map" field type, and the protoc compiler on my
workstation doesn't support proto3. Because that's such an appropriate
representation for this data, the map is represented in an equivalent format
described in the proto3 documentation.

Change-Id: I137c8611c33d9ce6589e196d50c8638c1d88750c
Reviewed-on: https://gem5-review.googlesource.com/4782
Reviewed-by: Rahul Thakur <rjthakur@google.com>
Reviewed-by: Nikos Nikoleris <nikos.nikoleris@arm.com>
Maintainer: Nikos Nikoleris <nikos.nikoleris@arm.com>
2017-09-25 21:13:49 +00:00

81 lines
3.7 KiB
Protocol Buffer

// Copyright (c) 2012-2013,2017 ARM Limited
// All rights reserved
//
// The license below extends only to copyright in the software and shall
// not be construed as granting a license to any other intellectual
// property including but not limited to intellectual property relating
// to a hardware implementation of the functionality of the software
// licensed hereunder. You may use the software subject to the license
// terms below provided that you ensure that this notice is replicated
// unmodified and in its entirety in all distributions of the software,
// modified or unmodified, in source code or in binary form.
//
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions are
// met: redistributions of source code must retain the above copyright
// notice, this list of conditions and the following disclaimer;
// redistributions in binary form must reproduce the above copyright
// notice, this list of conditions and the following disclaimer in the
// documentation and/or other materials provided with the distribution;
// neither the name of the copyright holders nor the names of its
// contributors may be used to endorse or promote products derived from
// this software without specific prior written permission.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
//
// Authors: Andreas Hansson
syntax = "proto2";
// Put all the generated messages in a namespace
package ProtoMessage;
// Packet header with the identifier describing what object captured
// the trace, the version of this file format, and the tick frequency
// for all the packet time stamps.
message PacketHeader {
required string obj_id = 1;
optional uint32 ver = 2 [default = 0];
required uint64 tick_freq = 3;
// This is supposed to be wire equivalent to the "map" construct supported
// by the proto3 version of the protobuf description syntax. When that
// becomes widely available, this should be converted over to use it.
message IdStringEntry {
optional uint32 key = 1;
optional string value = 2;
}
repeated IdStringEntry id_strings = 4;
}
// Each packet in the trace contains a tick (which can be translated
// to absolute time using the frequency in the header), the command,
// the address, and the size in bytes. The optional flags are used to
// capture the request flags that convey information about
// cacheability, if the packet is an instruction fetch or prefetch or
// not, etc. An optional id field is added for generic use to identify
// the packet or the "owner" of the packet. An example of the latter
// is the sequential id of an instruction, or the master id etc.
// An optional field for PC of the instruction for which this request is made
// is provided.
message Packet {
required uint64 tick = 1;
required uint32 cmd = 2;
required uint64 addr = 3;
required uint32 size = 4;
optional uint32 flags = 5;
optional uint64 pkt_id = 6;
optional uint64 pc = 7;
}