summaryrefslogtreecommitdiff
path: root/src/mem/ruby/interfaces/mf_api.hh
diff options
context:
space:
mode:
Diffstat (limited to 'src/mem/ruby/interfaces/mf_api.hh')
-rw-r--r--src/mem/ruby/interfaces/mf_api.hh165
1 files changed, 165 insertions, 0 deletions
diff --git a/src/mem/ruby/interfaces/mf_api.hh b/src/mem/ruby/interfaces/mf_api.hh
new file mode 100644
index 000000000..c04a39308
--- /dev/null
+++ b/src/mem/ruby/interfaces/mf_api.hh
@@ -0,0 +1,165 @@
+
+/*
+ * 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_