/* * Copyright (c) 1999-2005 Mark D. Hill and David A. Wood * 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. */ // External Types // // **PLEASE NOTE!** When adding objects to this file you must also add a line // in the src/mem/ruby/SConscript file. Otherwise the external object's .hh // file will not be copied to the protocol directory and you will encounter a // undefined declaration error. // external_type(MessageBuffer, buffer="yes", inport="yes", outport="yes"); external_type(OutPort, primitive="yes"); external_type(InPort, primitive="yes") { bool isReady(); void dequeue(); int dequeue_getDelayCycles(); void recycle(); bool isEmpty(); } external_type(NodeID, default="0"); external_type(MachineID); MessageBuffer getMandatoryQueue(int core_id); external_type(Set, non_obj="yes") { void setSize(int); void add(NodeID); void addSet(Set); void remove(NodeID); void removeSet(Set); void broadcast(); void addRandom(); void clear(); int count(); bool isElement(NodeID); bool isEqual(Set); bool isSuperset(Set); bool intersectionIsEmpty(Set); NodeID smallestElement(); } external_type(NetDest, non_obj="yes") { void setSize(int); void setSize(int, int); void add(NodeID); void add(MachineID); void addSet(Set); void addNetDest(NetDest); void setNetDest(MachineType, Set); void remove(NodeID); void remove(MachineID); void removeSet(Set); void removeNetDest(NetDest); void broadcast(); void broadcast(MachineType); void addRandom(); void clear(); Set toSet(); int count(); bool isElement(NodeID); bool isElement(MachineID); bool isSuperset(Set); bool isSuperset(NetDest); bool isEmpty(); bool intersectionIsEmpty(Set); bool intersectionIsEmpty(NetDest); MachineID smallestElement(MachineType); } external_type(Sequencer) { void readCallback(Address, DataBlock); void readCallback(Address, GenericMachineType, DataBlock); void readCallback(Address, GenericMachineType, DataBlock, Time, Time, Time); void writeCallback(Address, DataBlock); void writeCallback(Address, GenericMachineType, DataBlock); void writeCallback(Address, GenericMachineType, DataBlock, Time, Time, Time); void checkCoherence(Address); void profileNack(Address, int, int, uint64); } external_type(AbstractEntry, primitive="yes"); external_type(DirectoryMemory) { AbstractEntry lookup(Address); bool isPresent(Address); void invalidateBlock(Address); } external_type(AbstractCacheEntry, primitive="yes"); external_type(CacheMemory) { bool cacheAvail(Address); Address cacheProbe(Address); void allocate(Address, AbstractCacheEntry); void deallocate(Address); AbstractCacheEntry lookup(Address); void changePermission(Address, AccessPermission); bool isTagPresent(Address); void profileMiss(CacheMsg); void profileGenericRequest(GenericRequestType, AccessModeType, PrefetchBit); void setMRU(Address); } external_type(MemoryControl, inport="yes", outport="yes") { } external_type(DMASequencer) { void ackCallback(); void dataCallback(DataBlock); } external_type(TimerTable, inport="yes") { bool isReady(); Address readyAddress(); void set(Address, int); void unset(Address); bool isSet(Address); } external_type(GenericBloomFilter) { void clear(int); void increment(Address, int); void decrement(Address, int); void set(Address, int); void unset(Address, int); bool isSet(Address, int); int getCount(Address, int); }