backdoor.hh revision 6216
1/* 2 * Copyright (c) 2001-2005 The Regents of The University of Michigan 3 * All rights reserved. 4 * 5 * Redistribution and use in source and binary forms, with or without 6 * modification, are permitted provided that the following conditions are 7 * met: redistributions of source code must retain the above copyright 8 * notice, this list of conditions and the following disclaimer; 9 * redistributions in binary form must reproduce the above copyright 10 * notice, this list of conditions and the following disclaimer in the 11 * documentation and/or other materials provided with the distribution; 12 * neither the name of the copyright holders nor the names of its 13 * contributors may be used to endorse or promote products derived from 14 * this software without specific prior written permission. 15 * 16 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 17 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 18 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 19 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 20 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 21 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 22 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 23 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 24 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 25 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 26 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 27 * 28 * Authors: Nathan Binkert 29 */ 30 31/** @file 32 * System Console Backdoor Interface 33 */ 34 35#ifndef __DEV_ALPHA_BACKDOOR_HH__ 36#define __DEV_ALPHA_BACKDOOR_HH__ 37 38#include "base/range.hh" 39#include "base/types.hh" 40#include "dev/alpha/access.h" 41#include "dev/io_device.hh" 42#include "params/AlphaBackdoor.hh" 43#include "sim/sim_object.hh" 44 45class BaseCPU; 46class Terminal; 47class AlphaSystem; 48class SimpleDisk; 49 50/** 51 * Memory mapped interface to the system console. This device 52 * represents a shared data region between the OS Kernel and the 53 * System Console Backdoor. 54 * 55 * The system console is a small standalone program that is initially 56 * run when the system boots. It contains the necessary code to 57 * access the boot disk, to read/write from the console, and to pass 58 * boot parameters to the kernel. 59 * 60 * This version of the system console is very different from the one 61 * that would be found in a real system. Many of the functions use 62 * some sort of backdoor to get their job done. For example, reading 63 * from the boot device on a real system would require a minimal 64 * device driver to access the disk controller, but since we have a 65 * simulator here, we are able to bypass the disk controller and 66 * access the disk image directly. There are also some things like 67 * reading the kernel off the disk image into memory that are normally 68 * taken care of by the console that are now taken care of by the 69 * simulator. 70 * 71 * These shortcuts are acceptable since the system console is 72 * primarily used doing boot before the kernel has loaded its device 73 * drivers. 74 */ 75class AlphaBackdoor : public BasicPioDevice 76{ 77 protected: 78 struct Access : public AlphaAccess 79 { 80 void serialize(std::ostream &os); 81 void unserialize(Checkpoint *cp, const std::string §ion); 82 }; 83 84 union { 85 Access *alphaAccess; 86 uint8_t *consoleData; 87 }; 88 89 /** the disk must be accessed from the console */ 90 SimpleDisk *disk; 91 92 /** the system console (the terminal) is accessable from the console */ 93 Terminal *terminal; 94 95 /** a pointer to the system we are running in */ 96 AlphaSystem *system; 97 98 /** a pointer to the CPU boot cpu */ 99 BaseCPU *cpu; 100 101 public: 102 typedef AlphaBackdoorParams Params; 103 AlphaBackdoor(const Params *p); 104 105 const Params * 106 params() const 107 { 108 return dynamic_cast<const Params *>(_params); 109 } 110 111 virtual void startup(); 112 113 /** 114 * memory mapped reads and writes 115 */ 116 virtual Tick read(PacketPtr pkt); 117 virtual Tick write(PacketPtr pkt); 118 119 /** 120 * standard serialization routines for checkpointing 121 */ 122 virtual void serialize(std::ostream &os); 123 virtual void unserialize(Checkpoint *cp, const std::string §ion); 124}; 125 126#endif // __DEV_ALPHA_BACKDOOR_HH__ 127