DirectoryMemory.hh revision 6285
15299Sgblack@eecs.umich.edu
25450Sgblack@eecs.umich.edu/*
35299Sgblack@eecs.umich.edu * Copyright (c) 1999-2008 Mark D. Hill and David A. Wood
45299Sgblack@eecs.umich.edu * All rights reserved.
57087Snate@binkert.org *
67087Snate@binkert.org * Redistribution and use in source and binary forms, with or without
77087Snate@binkert.org * modification, are permitted provided that the following conditions are
87087Snate@binkert.org * met: redistributions of source code must retain the above copyright
97087Snate@binkert.org * notice, this list of conditions and the following disclaimer;
107087Snate@binkert.org * redistributions in binary form must reproduce the above copyright
117087Snate@binkert.org * notice, this list of conditions and the following disclaimer in the
127087Snate@binkert.org * documentation and/or other materials provided with the distribution;
135299Sgblack@eecs.umich.edu * neither the name of the copyright holders nor the names of its
147087Snate@binkert.org * contributors may be used to endorse or promote products derived from
157087Snate@binkert.org * this software without specific prior written permission.
167087Snate@binkert.org *
177087Snate@binkert.org * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
187087Snate@binkert.org * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
197087Snate@binkert.org * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
207087Snate@binkert.org * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
217087Snate@binkert.org * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
225299Sgblack@eecs.umich.edu * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
237087Snate@binkert.org * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
245299Sgblack@eecs.umich.edu * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
255299Sgblack@eecs.umich.edu * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
265299Sgblack@eecs.umich.edu * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
275299Sgblack@eecs.umich.edu * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
285299Sgblack@eecs.umich.edu */
295299Sgblack@eecs.umich.edu
305299Sgblack@eecs.umich.edu/*
315299Sgblack@eecs.umich.edu * DirectoryMemory.hh
325299Sgblack@eecs.umich.edu *
335299Sgblack@eecs.umich.edu * Description:
345299Sgblack@eecs.umich.edu *
355299Sgblack@eecs.umich.edu * $Id$
365299Sgblack@eecs.umich.edu *
375299Sgblack@eecs.umich.edu */
385299Sgblack@eecs.umich.edu
395299Sgblack@eecs.umich.edu#ifndef DIRECTORYMEMORY_H
405299Sgblack@eecs.umich.edu#define DIRECTORYMEMORY_H
417629Sgblack@eecs.umich.edu
428229Snate@binkert.org#include "mem/ruby/common/Global.hh"
435299Sgblack@eecs.umich.edu#include "mem/ruby/common/Address.hh"
445299Sgblack@eecs.umich.edu#include "mem/ruby/system/MemoryVector.hh"
455303Sgblack@eecs.umich.edu#include "mem/protocol/Directory_Entry.hh"
465299Sgblack@eecs.umich.edu
475299Sgblack@eecs.umich.educlass AbstractController;
487737Sgblack@eecs.umich.edu
495299Sgblack@eecs.umich.educlass DirectoryMemory {
505299Sgblack@eecs.umich.edupublic:
515299Sgblack@eecs.umich.edu  // Constructors
525299Sgblack@eecs.umich.edu  DirectoryMemory(const string & name);
535299Sgblack@eecs.umich.edu  void init(const vector<string> & argv);
545450Sgblack@eecs.umich.edu  //  DirectoryMemory(int version);
555299Sgblack@eecs.umich.edu
565299Sgblack@eecs.umich.edu  // Destructor
575299Sgblack@eecs.umich.edu  ~DirectoryMemory();
585299Sgblack@eecs.umich.edu
595299Sgblack@eecs.umich.edu  int mapAddressToLocalIdx(PhysAddress address);
605299Sgblack@eecs.umich.edu  static int mapAddressToDirectoryVersion(PhysAddress address);
615299Sgblack@eecs.umich.edu
625299Sgblack@eecs.umich.edu  int getSize() { return m_size_bytes; }
637532Ssteve.reinhardt@amd.com
645299Sgblack@eecs.umich.edu  // Public Methods
657532Ssteve.reinhardt@amd.com  void printConfig(ostream& out) const;
665303Sgblack@eecs.umich.edu  static void printGlobalConfig(ostream & out);
675303Sgblack@eecs.umich.edu  bool isPresent(PhysAddress address);
685303Sgblack@eecs.umich.edu  Directory_Entry& lookup(PhysAddress address);
695303Sgblack@eecs.umich.edu
705303Sgblack@eecs.umich.edu  void invalidateBlock(PhysAddress address);
715303Sgblack@eecs.umich.edu
725303Sgblack@eecs.umich.edu  void print(ostream& out) const;
735303Sgblack@eecs.umich.edu
745303Sgblack@eecs.umich.eduprivate:
755303Sgblack@eecs.umich.edu  // Private Methods
765303Sgblack@eecs.umich.edu
775303Sgblack@eecs.umich.edu  // Private copy constructor and assignment operator
785303Sgblack@eecs.umich.edu  DirectoryMemory(const DirectoryMemory& obj);
795303Sgblack@eecs.umich.edu  DirectoryMemory& operator=(const DirectoryMemory& obj);
805303Sgblack@eecs.umich.edu
815303Sgblack@eecs.umich.eduprivate:
825303Sgblack@eecs.umich.edu  const string m_name;
835303Sgblack@eecs.umich.edu  AbstractController* m_controller;
845303Sgblack@eecs.umich.edu  // Data Members (m_ prefix)
855303Sgblack@eecs.umich.edu  Directory_Entry **m_entries;
865303Sgblack@eecs.umich.edu  //  int m_size;  // # of memory module blocks this directory is responsible for
875303Sgblack@eecs.umich.edu  uint32 m_size_bytes;
885303Sgblack@eecs.umich.edu  uint32 m_size_bits;
895303Sgblack@eecs.umich.edu  int m_num_entries;
905303Sgblack@eecs.umich.edu  int m_version;
915303Sgblack@eecs.umich.edu
925303Sgblack@eecs.umich.edu  static int m_num_directories;
935303Sgblack@eecs.umich.edu  static int m_num_directories_bits;
945303Sgblack@eecs.umich.edu  static int m_total_size_bytes;
955303Sgblack@eecs.umich.edu
965303Sgblack@eecs.umich.edu  MemoryVector* m_ram;
975303Sgblack@eecs.umich.edu};
985303Sgblack@eecs.umich.edu
995303Sgblack@eecs.umich.edu// Output operator declaration
1005303Sgblack@eecs.umich.eduostream& operator<<(ostream& out, const DirectoryMemory& obj);
1015303Sgblack@eecs.umich.edu
1025303Sgblack@eecs.umich.edu// ******************* Definitions *******************
1035303Sgblack@eecs.umich.edu
1045303Sgblack@eecs.umich.edu// Output operator definition
1055303Sgblack@eecs.umich.eduextern inline
1065303Sgblack@eecs.umich.eduostream& operator<<(ostream& out, const DirectoryMemory& obj)
1075303Sgblack@eecs.umich.edu{
1085303Sgblack@eecs.umich.edu  obj.print(out);
1095303Sgblack@eecs.umich.edu  out << flush;
1105303Sgblack@eecs.umich.edu  return out;
1115303Sgblack@eecs.umich.edu}
1125303Sgblack@eecs.umich.edu
1135303Sgblack@eecs.umich.edu#endif //DIRECTORYMEMORY_H
1145303Sgblack@eecs.umich.edu