The Pedigree Project 0.1
Pc.h
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#ifndef KERNEL_MACHINE_X86_COMMON_PC_H
21#define KERNEL_MACHINE_X86_COMMON_PC_H
22#include "pedigree/kernel/compiler.h"
23#include "pedigree/kernel/machine/Bus.h"
24#include "pedigree/kernel/machine/Controller.h"
25#include "pedigree/kernel/machine/Device.h"
26#include "pedigree/kernel/machine/Machine.h"
27#include "pedigree/kernel/processor/types.h"
28
29#include <config.h>
30
31#include "Keyboard.h"
32#include "LocalApic.h"
33#include "PcSchedulerTimerSelection.h"
34#include "Ps2Controller.h"
35#include "Serial.h"
36#include "Vga.h"
37
38class IrqManager;
39class Keyboard;
40class SchedulerTimer;
41class Serial;
42class Timer;
43class Vga;
44
48class Pc : public Machine {
49 public:
50 inline static Pc& instance() {
51 return m_Instance;
52 }
53
54 virtual void initialise() INITIALISATION_ONLY;
55 virtual void initialise3();
56 virtual void deinitialise();
57 bool supportsPowerOff() const override;
58 bool prepareShutdown(ShutdownType type) override;
59 void finalShutdown(ShutdownType type) override;
60
61#if MULTIPROCESSOR
62 void initialiseProcessor() INITIALISATION_ONLY;
63#endif
64
65 virtual void initialiseDeviceTree();
66
67 virtual Serial* getSerial(size_t n);
68 virtual size_t getNumSerial();
69 virtual Vga* getVga(size_t n);
70 virtual size_t getNumVga();
71 virtual IrqManager* getIrqManager();
73 virtual Timer* getTimer();
74 virtual Keyboard* getKeyboard();
75 virtual void setKeyboard(Keyboard* kb);
76
78 inline bool localApicAvailable() const {
79 return m_SchedulerTimerSelection.usesLocalApic();
80 }
81
82#if MULTIPROCESSOR
85 inline LocalApic& getLocalApic() {
86 return *m_LocalApic;
87 }
88#endif
89
90#if MULTIPROCESSOR
94#endif
95
96 private:
101 Pc(const Pc&);
102 Pc& operator=(const Pc&);
106 virtual ~Pc();
107
108 X86Serial* m_pSerial[4];
109 X86Vga* m_Vga;
110 Keyboard* m_pKeyboard;
111
112#if MULTIPROCESSOR
113 LocalApic* m_LocalApic;
114#endif
115
116 PcSchedulerTimerSelection m_SchedulerTimerSelection;
117
118 static Pc m_Instance;
119
120 // Hardware devices.
121 X86Keyboard* m_Keyboard;
122 Bus* m_IsaBus;
123 Controller* m_AtaMaster;
124 Controller* m_AtaSlave;
125 Ps2Controller* m_Ps2Controller;
126 Device* m_Watchdog;
127};
128
129#endif
Definition Bus.h:31
virtual MUST_USE_RESULT bool quiesceAllOtherProcessors()
Definition Machine.cc:129
virtual MUST_USE_RESULT bool resumeAllOtherProcessors()
Definition Machine.cc:136
virtual MUST_USE_RESULT bool stopAllOtherProcessors()
Definition Machine.cc:143
Definition Pc.h:48
virtual void initialise3()
Called after processor startup - for thread creation etc.
Definition Pc.cc:251
virtual void initialise() INITIALISATION_ONLY
Definition Pc.cc:161
Pc() INITIALISATION_ONLY
Definition Pc.cc:386
virtual Serial * getSerial(size_t n)
Definition Pc.cc:319
void finalShutdown(ShutdownType type) override
Definition Pc.cc:128
virtual Timer * getTimer()
Definition Pc.cc:348
virtual Vga * getVga(size_t n)
Definition Pc.cc:327
virtual SchedulerTimer * getSchedulerTimer()
Definition Pc.cc:339
virtual void initialiseDeviceTree()
Definition Pc.cc:264
bool prepareShutdown(ShutdownType type) override
Definition Pc.cc:120
virtual void deinitialise()
Definition Pc.cc:219
virtual size_t getNumSerial()
Definition Pc.cc:323
virtual void setKeyboard(Keyboard *kb)
Definition Pc.cc:356
virtual Keyboard * getKeyboard()
Definition Pc.cc:352
bool localApicAvailable() const
Definition Pc.h:78
virtual size_t getNumVga()
Definition Pc.cc:331