packet.cc revision 2592
112855Sgabeblack@google.com/* 212855Sgabeblack@google.com * Copyright (c) 2006 The Regents of The University of Michigan 312855Sgabeblack@google.com * All rights reserved. 412855Sgabeblack@google.com * 512855Sgabeblack@google.com * Redistribution and use in source and binary forms, with or without 612855Sgabeblack@google.com * modification, are permitted provided that the following conditions are 712855Sgabeblack@google.com * met: redistributions of source code must retain the above copyright 812855Sgabeblack@google.com * notice, this list of conditions and the following disclaimer; 912855Sgabeblack@google.com * redistributions in binary form must reproduce the above copyright 1012855Sgabeblack@google.com * notice, this list of conditions and the following disclaimer in the 1112855Sgabeblack@google.com * documentation and/or other materials provided with the distribution; 1212855Sgabeblack@google.com * neither the name of the copyright holders nor the names of its 1312855Sgabeblack@google.com * contributors may be used to endorse or promote products derived from 1412855Sgabeblack@google.com * this software without specific prior written permission. 1512855Sgabeblack@google.com * 1612855Sgabeblack@google.com * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 1712855Sgabeblack@google.com * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 1812855Sgabeblack@google.com * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 1912855Sgabeblack@google.com * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 2012855Sgabeblack@google.com * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 2112855Sgabeblack@google.com * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 2212855Sgabeblack@google.com * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 2312855Sgabeblack@google.com * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 2412855Sgabeblack@google.com * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 2512855Sgabeblack@google.com * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 2612855Sgabeblack@google.com * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 2712855Sgabeblack@google.com */ 2812855Sgabeblack@google.com 2912855Sgabeblack@google.com/** 3012855Sgabeblack@google.com * @file 3112855Sgabeblack@google.com * Definition of the Packet Class, a packet is a transaction occuring 3212855Sgabeblack@google.com * between a single level of the memory heirarchy (ie L1->L2). 3312855Sgabeblack@google.com */ 3412855Sgabeblack@google.com#include "base/misc.hh" 3512855Sgabeblack@google.com#include "mem/packet.hh" 3612855Sgabeblack@google.com 3712855Sgabeblack@google.com 3812855Sgabeblack@google.com/** delete the data pointed to in the data pointer. Ok to call to matter how 3912855Sgabeblack@google.com * data was allocted. */ 4012855Sgabeblack@google.comvoid 4112855Sgabeblack@google.comPacket::deleteData() { 4212855Sgabeblack@google.com assert(staticData || dynamicData); 4312855Sgabeblack@google.com if (staticData) 4412855Sgabeblack@google.com return; 4512855Sgabeblack@google.com 4612855Sgabeblack@google.com if (arrayData) 4712855Sgabeblack@google.com delete [] data; 4812855Sgabeblack@google.com else 4912855Sgabeblack@google.com delete data; 5012855Sgabeblack@google.com} 5112855Sgabeblack@google.com 5212855Sgabeblack@google.com/** If there isn't data in the packet, allocate some. */ 5312855Sgabeblack@google.comvoid 5412855Sgabeblack@google.comPacket::allocate() { 5512855Sgabeblack@google.com if (data) 5612855Sgabeblack@google.com return; 5712855Sgabeblack@google.com assert(!staticData); 5812855Sgabeblack@google.com dynamicData = true; 5912855Sgabeblack@google.com arrayData = true; 6012855Sgabeblack@google.com data = new uint8_t[size]; 6112855Sgabeblack@google.com} 6212855Sgabeblack@google.com 6312855Sgabeblack@google.com/** Do the packet modify the same addresses. */ 6412855Sgabeblack@google.combool 6512855Sgabeblack@google.comPacket::intersect(Packet *p) { 6612855Sgabeblack@google.com Addr s1 = addr; 6712855Sgabeblack@google.com Addr e1 = addr + size; 6812855Sgabeblack@google.com Addr s2 = p->addr; 6912855Sgabeblack@google.com Addr e2 = p->addr + p->size; 7012855Sgabeblack@google.com 7112855Sgabeblack@google.com if (s1 >= s2 && s1 < e2) 7212855Sgabeblack@google.com return true; 7312855Sgabeblack@google.com if (e1 >= s2 && e1 < e2) 7412855Sgabeblack@google.com return true; 7512855Sgabeblack@google.com return false; 7612855Sgabeblack@google.com} 7712855Sgabeblack@google.com 7812855Sgabeblack@google.com/** Minimally reset a packet so something like simple cpu can reuse it. */ 7912855Sgabeblack@google.comvoid 8012855Sgabeblack@google.comPacket::reset() { 8112855Sgabeblack@google.com result = Unknown; 8212855Sgabeblack@google.com if (dynamicData) { 8312855Sgabeblack@google.com deleteData(); 8412855Sgabeblack@google.com dynamicData = false; 8512855Sgabeblack@google.com arrayData = false; 8612855Sgabeblack@google.com time = curTick; 8712855Sgabeblack@google.com } 8812855Sgabeblack@google.com} 8912855Sgabeblack@google.com 9012855Sgabeblack@google.com 9112855Sgabeblack@google.com 9212855Sgabeblack@google.com 9312855Sgabeblack@google.combool fixPacket(Packet &func, Packet &timing) 9412855Sgabeblack@google.com{ panic("Need to implement!"); } 9512855Sgabeblack@google.com