The Pedigree Project
0.1
src
system
kernel
core
processor
x86_common
Multiprocessor.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_PROCESSOR_X86_COMMON_MULTIPROCESSOR_H
21
#define KERNEL_PROCESSOR_X86_COMMON_MULTIPROCESSOR_H
22
#include "pedigree/kernel/Atomic.h"
23
#include "pedigree/kernel/compiler.h"
24
#include "pedigree/kernel/processor/types.h"
25
26
#include <config.h>
27
28
class
Spinlock
;
29
33
class
Multiprocessor
{
34
public
:
37
struct
ProcessorInformation
{
38
inline
ProcessorInformation
(uint8_t processorid, uint8_t apicid)
39
:
processorId
(processorid),
apicId
(apicid) {}
40
42
uint8_t
processorId
;
44
uint8_t
apicId
;
45
};
46
49
struct
IoApicInformation
{
50
inline
IoApicInformation
(uint8_t apicid, physical_uintptr_t Address, uint32_t base)
51
:
apicId
(apicid),
address
(Address),
gsiBase
(base) {}
52
54
uint8_t
apicId
;
56
physical_uintptr_t
address
;
58
uint32_t
gsiBase
;
59
};
60
63
static
size_t
initialise1
()
INITIALISATION_ONLY
;
65
static
void
initialise2
()
INITIALISATION_ONLY
;
66
67
private:
68
static
void
applicationProcessorStartup()
NORETURN
;
69
70
static
Atomic
<
bool
> m_ProcessorStarted INITIALISATION_ONLY_DATA;
71
static
Spinlock
m_ProcessorLock2 INITIALISATION_ONLY_DATA;
72
};
73
76
#endif
Atomic
Definition
Atomic.h:35
Multiprocessor
Definition
Multiprocessor.h:33
Multiprocessor::initialise1
static size_t initialise1() INITIALISATION_ONLY
Multiprocessor::initialise2
static void initialise2() INITIALISATION_ONLY
Spinlock
Definition
Spinlock.h:27
INITIALISATION_ONLY
#define INITIALISATION_ONLY
Definition
system/include/pedigree/kernel/compiler.h:116
NORETURN
#define NORETURN
Definition
system/include/pedigree/kernel/compiler.h:35
Multiprocessor::IoApicInformation
Definition
Multiprocessor.h:49
Multiprocessor::IoApicInformation::gsiBase
uint32_t gsiBase
Definition
Multiprocessor.h:58
Multiprocessor::IoApicInformation::apicId
uint8_t apicId
Definition
Multiprocessor.h:54
Multiprocessor::IoApicInformation::address
physical_uintptr_t address
Definition
Multiprocessor.h:56
Multiprocessor::ProcessorInformation
Definition
Multiprocessor.h:37
Multiprocessor::ProcessorInformation::apicId
uint8_t apicId
Definition
Multiprocessor.h:44
Multiprocessor::ProcessorInformation::processorId
uint8_t processorId
Definition
Multiprocessor.h:42
Generated on Fri Oct 2 2026 06:39:21 for The Pedigree Project by
1.9.8