The Pedigree Project 0.1
hosted/Machine.cc
1/*
2 * Copyright (c) 2008-2014, Pedigree Developers
3 *
4 * Please see the CONTRIB file in the root of the source tree for a full
5 * list of contributors.
6 *
7 * Permission to use, copy, modify, and distribute this software for any
8 * purpose with or without fee is hereby granted, provided that the above
9 * copyright notice and this permission notice appear in all copies.
10 *
11 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
12 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
13 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
14 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
15 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
16 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
17 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
18 */
19
20#include "Machine.h"
21#include "pedigree/kernel/Log.h"
22#include "pedigree/kernel/machine/Bus.h"
23#include "pedigree/kernel/machine/Controller.h"
24#include "pedigree/kernel/machine/Device.h"
25#include "pedigree/kernel/machine/Disk.h"
26#include "pedigree/kernel/panic.h"
27
28#include "../../core/processor/hosted/InterruptManager.h"
29
30HostedMachine HostedMachine::m_Instance;
31
32Machine& Machine::instance() {
33 return HostedMachine::instance();
34}
35
37 HostedIrqManager::instance().initialise();
38 m_Serial[0].setBase(0);
39 m_Serial[1].setBase(1);
40 m_Vga.initialise();
41 if (!HostedTimer::instance().initialise1()) {
42 panic("HostedMachine: timer preparation failed");
43 }
45 panic("HostedMachine: scheduler timer initialisation failed");
46 }
47 m_Keyboard = new HostedKeyboard();
48 m_Keyboard->initialise();
49 m_bInitialised = true;
50}
51
53
55 if (!HostedTimer::instance().initialise3()) {
56 panic("HostedMachine: timer bottom-half initialisation failed");
57 }
58}
59
61 if (!m_bInitialised) {
62 return;
63 }
64
65 HostedTimer::instance().uninitialise();
69
70 NOTICE("HOSTED-SHUTDOWN: timers and signals quiesced");
71}
72
74 return &m_Serial[n];
75}
76
78 return 2;
79}
80
82 return &m_Vga;
83}
84
86 return 1;
87}
88
89IrqManager* HostedMachine::getIrqManager() {
90 return &HostedIrqManager::instance();
91}
92
96
98 return &HostedTimer::instance();
99}
100
102 return m_Keyboard;
103}
104
106 m_Keyboard = kb;
107}
108
110 return true;
111}
112
114 return true;
115}
116
118 return true;
119}
120
122
HostedMachine() INITIALISATION_ONLY
virtual void setKeyboard(Keyboard *kb)
virtual void initialiseDeviceTree()
virtual void initialise3()
Called after processor startup - for thread creation etc.
MUST_USE_RESULT bool quiesceAllOtherProcessors() override
virtual size_t getNumSerial()
MUST_USE_RESULT bool resumeAllOtherProcessors() override
virtual Keyboard * getKeyboard()
virtual Timer * getTimer()
MUST_USE_RESULT bool stopAllOtherProcessors() override
virtual void deinitialise()
virtual Vga * getVga(size_t n)
virtual Serial * getSerial(size_t n)
virtual ~HostedMachine()
virtual size_t getNumVga()
virtual SchedulerTimer * getSchedulerTimer()
virtual void initialise() INITIALISATION_ONLY
static HostedSchedulerTimer & instance()
virtual void setBase(uintptr_t nBaseAddr)
void uninitialise()
virtual void initialise()=0
void EXPORTED_PUBLIC panic(const char *msg) NORETURN
Definition panic.cc:117