From 93f2f69657d0a2420a2c86b71505e6d27e6e2a38 Mon Sep 17 00:00:00 2001 From: Daniel Sanchez Date: Mon, 11 May 2009 10:38:46 -0700 Subject: ruby: Working M5 interface and updated Ruby interface. This changeset also includes a lot of work from Derek Hower RubyMemory is now both a driver for Ruby and a port for M5. Changed makeRequest/hitCallback interface. Brought packets (superficially) into the sequencer. Modified tester infrastructure to be packet based. and Ruby can be used together through the example ruby_se.py script. SPARC parallel applications work, and the timing *seems* right from combined M5/Ruby debug traces. To run, % build/ALPHA_SE/m5.debug configs/example/ruby_se.py -c tests/test-progs/hello/bin/alpha/linux/hello -n 4 -t --- src/mem/ruby/interfaces/mf_api.hh | 165 -------------------------------------- 1 file changed, 165 deletions(-) delete mode 100644 src/mem/ruby/interfaces/mf_api.hh (limited to 'src/mem/ruby/interfaces/mf_api.hh') diff --git a/src/mem/ruby/interfaces/mf_api.hh b/src/mem/ruby/interfaces/mf_api.hh deleted file mode 100644 index c04a39308..000000000 --- a/src/mem/ruby/interfaces/mf_api.hh +++ /dev/null @@ -1,165 +0,0 @@ - -/* - * Copyright (c) 1999-2008 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. - */ - -/*------------------------------------------------------------------------*/ -/* Includes */ -/*------------------------------------------------------------------------*/ - -/*------------------------------------------------------------------------*/ -/* Macro declarations */ -/*------------------------------------------------------------------------*/ - -#ifndef _MF_MEMORY_API_H_ -#define _MF_MEMORY_API_H_ - -#ifdef SIMICS30 -#ifndef pa_t -typedef physical_address_t pa_t; -typedef physical_address_t la_t; -#endif -#endif - -/** - * Defines types of memory requests - */ -typedef enum OpalMemop { - OPAL_LOAD, - OPAL_STORE, - OPAL_IFETCH, - OPAL_ATOMIC, -} OpalMemop_t; - -/*------------------------------------------------------------------------*/ -/* Class declaration(s) */ -/*------------------------------------------------------------------------*/ - -/** -* structure which provides an interface between ruby and opal. -*/ -typedef struct mf_opal_api { - /** - * @name Methods - */ - //@{ - /** - * notify processor model that data from address address is available at proc - */ - void (*hitCallback)( int cpuNumber, pa_t phys_address, OpalMemop_t type, int thread ); - - /** - * notify opal that ruby is loaded, or removed - */ - void (*notifyCallback)( int status ); - - /** - * query for the number of instructions executed on a given processor. - */ - integer_t (*getInstructionCount)( int cpuNumber ); - - // for printing out debug info on crash - void (*printDebug)(); - - /** query Opal for the current time */ - uint64 (*getOpalTime)(int cpuNumber); - - /** For WATTCH power stats */ - // Called whenever L2 is accessed - void (*incrementL2Access)(int cpuNumber); - // Called whenever prefetcher is accessed - void (*incrementPrefetcherAccess)(int cpuNumber, int num_prefetches, int isinstr); - - /* Called whenever there's an L2 miss */ - void (*notifyL2Miss)(int cpuNumber, physical_address_t physicalAddr, OpalMemop_t type, int tagexists); - - //@} -} mf_opal_api_t; - -typedef struct mf_ruby_api { - /** - * @name Methods - */ - //@{ - /** - * Check to see if the system is ready for more requests - */ - int (*isReady)( int cpuNumber, la_t logicalAddr, pa_t physicalAddr, OpalMemop_t typeOfRequest, int thread ); - - /** - * Make a 'mandatory' request to the memory hierarchy - */ - void (*makeRequest)( int cpuNumber, la_t logicalAddr, pa_t physicalAddr, - int requestSize, OpalMemop_t typeOfRequest, - la_t virtualPC, int isPriv, int thread); - - /** - * Make a prefetch request to the memory hierarchy - */ - void (*makePrefetch)( int cpuNumber, la_t logicalAddr, pa_t physicalAddr, - int requestSize, OpalMemop_t typeOfRequest, - la_t virtualPC, int isPriv, int thread); - - /** - * Ask the memory hierarchy for 'stale' data that can be used for speculation - * Returns true (1) if the tag matches, false (0) if not. - */ - int (*staleDataRequest)( int cpuNumber, pa_t physicalAddr, - int requestSize, int8 *buffer ); - - /** - * Advance ruby's cycle time one step - */ - void (*advanceTime)( void ); - - /** - * Get ruby's cycle time count. - */ - uint64 (*getTime)( void ); - - /** prints Ruby's outstanding request table */ - void (*printProgress)(int cpuNumber); - - /** - * notify ruby that opal is loaded, or removed - */ - void (*notifyCallback)( int status ); - - // Returns the number of outstanding request - int (*getNumberOutstanding)(int cpuNumber); - - // Returns the number of outstanding demand requests - int (*getNumberOutstandingDemand)(int cpuNumber ); - - // Returns the number of outstanding prefetch request - int (*getNumberOutstandingPrefetch)(int cpuNumber ); - - - //@} -} mf_ruby_api_t; - -#endif //_MF_MEMORY_API_H_ -- cgit v1.2.3