diff options
Diffstat (limited to 'mem/packet.hh')
-rw-r--r-- | mem/packet.hh | 194 |
1 files changed, 0 insertions, 194 deletions
diff --git a/mem/packet.hh b/mem/packet.hh deleted file mode 100644 index e8a7b0c73..000000000 --- a/mem/packet.hh +++ /dev/null @@ -1,194 +0,0 @@ -/* - * Copyright (c) 2006 The Regents of The University of Michigan - * All rights reserved. - * - * 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. - */ - -/** - * @file - * Declaration of the Packet Class, a packet is a transaction occuring - * between a single level of the memory heirarchy (ie L1->L2). - */ - -#ifndef __MEM_PACKET_HH__ -#define __MEM_PACKET_HH__ - -#include "mem/request.hh" -#include "arch/isa_traits.hh" -#include "sim/root.hh" - -struct Packet; -typedef Packet* PacketPtr; -typedef uint8_t* PacketDataPtr; - -/** List of all commands associated with a packet. */ -enum Command -{ - Read, - Write -}; - -/** The result of a particular pakets request. */ -enum PacketResult -{ - Success, - BadAddress, - Unknown -}; - -class SenderState{}; -class Coherence{}; - -/** - * A Packet is the structure to handle requests between two levels - * of the memory system. The Request is a global object that trancends - * all of the memory heirarchy, but at each levels interface a packet - * is created to transfer data/requests. For example, a request would - * be used to initiate a request to go to memory/IOdevices, as the request - * passes through the memory system several packets will be created. One - * will be created to go between the L1 and L2 caches and another to go to - * the next level and so forth. - * - * Packets are assumed to be returned in the case of a single response. If - * the transaction has no response, then the consumer will delete the packet. - */ -struct Packet -{ - private: - /** A pointer to the data being transfered. It can be differnt sizes - at each level of the heirarchy so it belongs in the packet, - not request. This may or may not be populated when a responder recieves - the packet. If not populated it memory should be allocated. - */ - PacketDataPtr data; - - /** Is the data pointer set to a value that shouldn't be freed when the - * packet is destroyed? */ - bool staticData; - /** The data pointer points to a value that should be freed when the packet - * is destroyed. */ - bool dynamicData; - /** the data pointer points to an array (thus delete [] ) needs to be called - * on it rather than simply delete.*/ - bool arrayData; - - - public: - /** The address of the request, could be virtual or physical (depending on - cache configurations). */ - Addr addr; - - /** Flag structure to hold flags for this particular packet */ - uint64_t flags; - - /** A pointer to the overall request. */ - RequestPtr req; - - /** A virtual base opaque structure used to hold - coherence status messages. */ - Coherence *coherence; // virtual base opaque, - // assert(dynamic_cast<Foo>) etc. - - /** A virtual base opaque structure used to hold the senders state. */ - void *senderState; // virtual base opaque, - // assert(dynamic_cast<Foo>) etc. - - /** Indicates the size of the request. */ - int size; - - /** A index of the source of the transaction. */ - short src; - - static const short Broadcast = -1; - - /** A index to the destination of the transaction. */ - short dest; - - /** The command of the transaction. */ - Command cmd; - - /** The time this request was responded to. Used to calculate latencies. */ - Tick time; - - /** The result of the packet transaction. */ - PacketResult result; - - /** Accessor function that returns the source index of the packet. */ - short getSrc() const { return src; } - - /** Accessor function that returns the destination index of - the packet. */ - short getDest() const { return dest; } - - Packet() - : data(NULL), staticData(false), dynamicData(false), arrayData(false), - time(curTick), result(Unknown) - {} - - ~Packet() - { deleteData(); } - - - /** Minimally reset a packet so something like simple cpu can reuse it. */ - void reset(); - - /** Set the data pointer to the following value that should not be freed. */ - template <typename T> - void dataStatic(T *p); - - /** Set the data pointer to a value that should have delete [] called on it. - */ - template <typename T> - void dataDynamicArray(T *p); - - /** set the data pointer to a value that should have delete called on it. */ - template <typename T> - void dataDynamic(T *p); - - /** return the value of what is pointed to in the packet. */ - template <typename T> - T get(); - - /** get a pointer to the data ptr. */ - template <typename T> - T* getPtr(); - - /** set the value in the data pointer to v. */ - template <typename T> - void set(T v); - - /** delete the data pointed to in the data pointer. Ok to call to matter how - * data was allocted. */ - void deleteData(); - - /** If there isn't data in the packet, allocate some. */ - void allocate(); - - /** Do the packet modify the same addresses. */ - bool intersect(Packet *p); -}; - -bool fixPacket(Packet *func, Packet *timing); -#endif //__MEM_PACKET_HH |