packet.cc revision 2592
113938Sodanrc@yahoo.com.br/* 213938Sodanrc@yahoo.com.br * Copyright (c) 2006 The Regents of The University of Michigan 313938Sodanrc@yahoo.com.br * All rights reserved. 413938Sodanrc@yahoo.com.br * 513938Sodanrc@yahoo.com.br * Redistribution and use in source and binary forms, with or without 613938Sodanrc@yahoo.com.br * modification, are permitted provided that the following conditions are 713938Sodanrc@yahoo.com.br * met: redistributions of source code must retain the above copyright 813938Sodanrc@yahoo.com.br * notice, this list of conditions and the following disclaimer; 913938Sodanrc@yahoo.com.br * redistributions in binary form must reproduce the above copyright 1013938Sodanrc@yahoo.com.br * notice, this list of conditions and the following disclaimer in the 1113938Sodanrc@yahoo.com.br * documentation and/or other materials provided with the distribution; 1213938Sodanrc@yahoo.com.br * neither the name of the copyright holders nor the names of its 1313938Sodanrc@yahoo.com.br * contributors may be used to endorse or promote products derived from 1413938Sodanrc@yahoo.com.br * this software without specific prior written permission. 1513938Sodanrc@yahoo.com.br * 1613938Sodanrc@yahoo.com.br * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 1713938Sodanrc@yahoo.com.br * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 1813938Sodanrc@yahoo.com.br * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 1913938Sodanrc@yahoo.com.br * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 2013938Sodanrc@yahoo.com.br * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 2113938Sodanrc@yahoo.com.br * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 2213938Sodanrc@yahoo.com.br * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 2313938Sodanrc@yahoo.com.br * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 2413938Sodanrc@yahoo.com.br * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 2513938Sodanrc@yahoo.com.br * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 2613938Sodanrc@yahoo.com.br * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 2713938Sodanrc@yahoo.com.br */ 2813938Sodanrc@yahoo.com.br 2913938Sodanrc@yahoo.com.br/** 3013938Sodanrc@yahoo.com.br * @file 3113938Sodanrc@yahoo.com.br * Definition of the Packet Class, a packet is a transaction occuring 3213938Sodanrc@yahoo.com.br * between a single level of the memory heirarchy (ie L1->L2). 3313938Sodanrc@yahoo.com.br */ 3413938Sodanrc@yahoo.com.br#include "base/misc.hh" 3513938Sodanrc@yahoo.com.br#include "mem/packet.hh" 3613938Sodanrc@yahoo.com.br 3713938Sodanrc@yahoo.com.br 3813946Sodanrc@yahoo.com.br/** delete the data pointed to in the data pointer. Ok to call to matter how 3913946Sodanrc@yahoo.com.br * data was allocted. */ 4013938Sodanrc@yahoo.com.brvoid 4113946Sodanrc@yahoo.com.brPacket::deleteData() { 4213938Sodanrc@yahoo.com.br assert(staticData || dynamicData); 4313945Sodanrc@yahoo.com.br if (staticData) 4413938Sodanrc@yahoo.com.br return; 4513938Sodanrc@yahoo.com.br 4613938Sodanrc@yahoo.com.br if (arrayData) 4713938Sodanrc@yahoo.com.br delete [] data; 4813938Sodanrc@yahoo.com.br else 4913938Sodanrc@yahoo.com.br delete data; 5013938Sodanrc@yahoo.com.br} 5113938Sodanrc@yahoo.com.br 5213938Sodanrc@yahoo.com.br/** If there isn't data in the packet, allocate some. */ 5313938Sodanrc@yahoo.com.brvoid 5413938Sodanrc@yahoo.com.brPacket::allocate() { 5513938Sodanrc@yahoo.com.br if (data) 5613938Sodanrc@yahoo.com.br return; 5713938Sodanrc@yahoo.com.br assert(!staticData); 5813938Sodanrc@yahoo.com.br dynamicData = true; 5913938Sodanrc@yahoo.com.br arrayData = true; 6013938Sodanrc@yahoo.com.br data = new uint8_t[size]; 6113938Sodanrc@yahoo.com.br} 6213938Sodanrc@yahoo.com.br 6313938Sodanrc@yahoo.com.br/** Do the packet modify the same addresses. */ 6413938Sodanrc@yahoo.com.brbool 6513938Sodanrc@yahoo.com.brPacket::intersect(Packet *p) { 6613947Sodanrc@yahoo.com.br Addr s1 = addr; 6713947Sodanrc@yahoo.com.br Addr e1 = addr + size; 6813947Sodanrc@yahoo.com.br Addr s2 = p->addr; 6913947Sodanrc@yahoo.com.br Addr e2 = p->addr + p->size; 7013938Sodanrc@yahoo.com.br 7113938Sodanrc@yahoo.com.br if (s1 >= s2 && s1 < e2) 7213938Sodanrc@yahoo.com.br return true; 7313938Sodanrc@yahoo.com.br if (e1 >= s2 && e1 < e2) 7413938Sodanrc@yahoo.com.br return true; 7513938Sodanrc@yahoo.com.br return false; 7613938Sodanrc@yahoo.com.br} 7713938Sodanrc@yahoo.com.br 7813938Sodanrc@yahoo.com.br/** Minimally reset a packet so something like simple cpu can reuse it. */ 7913938Sodanrc@yahoo.com.brvoid 8013938Sodanrc@yahoo.com.brPacket::reset() { 8113938Sodanrc@yahoo.com.br result = Unknown; 8213938Sodanrc@yahoo.com.br if (dynamicData) { 8313938Sodanrc@yahoo.com.br deleteData(); 8413938Sodanrc@yahoo.com.br dynamicData = false; 8513938Sodanrc@yahoo.com.br arrayData = false; 8613938Sodanrc@yahoo.com.br time = curTick; 8713938Sodanrc@yahoo.com.br } 8813938Sodanrc@yahoo.com.br} 8913938Sodanrc@yahoo.com.br 9013938Sodanrc@yahoo.com.br 9113938Sodanrc@yahoo.com.br 9213938Sodanrc@yahoo.com.br 9313938Sodanrc@yahoo.com.brbool fixPacket(Packet &func, Packet &timing) 9413938Sodanrc@yahoo.com.br{ panic("Need to implement!"); } 9513938Sodanrc@yahoo.com.br