FreeNOS
|
Represents a single Core in a Central Processing Unit (CPU). More...
#include <IntelCoreServer.h>
Public Member Functions | |
IntelCoreServer () | |
Class constructor function. More... | |
virtual Result | initialize () |
Initialize the server. More... | |
virtual Core::Result | bootCore (uint coreId, CoreInfo *info) |
Boot a processor core. More... | |
virtual Core::Result | discoverCores () |
Discover processor cores. More... | |
virtual void | waitIPI () const |
Wait for Inter-Processor-Interrupt. More... | |
virtual Core::Result | sendIPI (uint coreId) |
Send Inter-Processor-Interrupt. More... | |
Public Member Functions inherited from CoreServer | |
CoreServer () | |
Class constructor function. More... | |
Core::Result | test () |
Run a ping-pong test. More... | |
int | runCore () |
Routine for the slave processor core. More... | |
Public Member Functions inherited from ChannelServer< CoreServer, CoreMessage > | |
ChannelServer (CoreServer *inst) | |
Constructor function. More... | |
virtual | ~ChannelServer () |
Destructor function. More... | |
int | run () |
Enters an infinite loop, serving incoming requests. More... | |
void | setTimeout (const uint msec) |
Set a sleep timeout. More... | |
Private Attributes | |
IntelAPIC | m_apic |
IntelMP | m_mp |
IntelACPI | m_acpi |
Static Private Attributes | |
static const uint | IPIVector = 50 |
Inter-Processor-Interrupt vector number. More... | |
Additional Inherited Members | |
Public Types inherited from ChannelServer< CoreServer, CoreMessage > | |
enum | Result |
Result codes. More... | |
Static Public Member Functions inherited from AbstractFactory< CoreServer > | |
static CoreServer * | create () |
Abstract function to create an instance of T. More... | |
Protected Types inherited from ChannelServer< CoreServer, CoreMessage > | |
typedef void(CoreServer ::* | IPCHandlerFunction) (CoreMessage *) |
Member function pointer inside Base, to handle IPC messages. More... | |
typedef void(CoreServer ::* | IRQHandlerFunction) (Size) |
Member function pointer inside Base, to handle interrupts. More... | |
Protected Member Functions inherited from ChannelServer< CoreServer, CoreMessage > | |
void | addIPCHandler (const Size slot, IPCHandlerFunction h, const bool sendReply=true) |
Register a new IPC message action handler. More... | |
void | addIRQHandler (const Size slot, IRQHandlerFunction h) |
Register a new IRQ message vector handler. More... | |
virtual void | timeout () |
Called when sleep timeout is reached. More... | |
virtual bool | retryRequests () |
Retry any pending requests. More... | |
virtual void | onProcessTerminated (const ProcessID pid) |
Called whenever another Process is terminated. More... | |
void | retryAllRequests () |
Keep retrying requests until all served. More... | |
Protected Attributes inherited from CoreServer | |
CoreManager * | m_cores |
Protected Attributes inherited from ChannelServer< CoreServer, CoreMessage > | |
CoreServer * | m_instance |
Server object instance. More... | |
ChannelClient * | m_client |
Client for sending replies. More... | |
ChannelRegistry & | m_registry |
Contains registered channels. More... | |
MemoryChannel | m_kernelEvent |
Kernel event channel. More... | |
Index< MessageHandler< IPCHandlerFunction >, MaximumHandlerCount > | m_ipcHandlers |
IPC handler functions. More... | |
Index< MessageHandler< IRQHandlerFunction >, MaximumHandlerCount > | m_irqHandlers |
IRQ handler functions. More... | |
ProcessID | m_self |
ProcessID of ourselves. More... | |
Timer::Info | m_time |
System timer value. More... | |
Timer::Info | m_expiry |
System timer expiration value. More... | |
Represents a single Core in a Central Processing Unit (CPU).
Each core in a system will run its own instance of CoreServer. CoreServers will communicate and collaborate together to implement functionality.
Definition at line 42 of file IntelCoreServer.h.
IntelCoreServer::IntelCoreServer | ( | ) |
Class constructor function.
Definition at line 29 of file IntelCoreServer.cpp.
|
virtual |
Boot a processor core.
Implements CoreServer.
Definition at line 49 of file IntelCoreServer.cpp.
References IntelMP::boot(), Core::BootError, coreId, ERROR, m_mp, NOTICE, CoreManager::Success, and Core::Success.
|
virtual |
Discover processor cores.
Implements CoreServer.
Definition at line 62 of file IntelCoreServer.cpp.
References IntelMP::discover(), IntelACPI::discover(), ERROR, IntelMP::initialize(), IntelACPI::initialize(), m_acpi, CoreServer::m_cores, m_mp, Core::NotFound, NOTICE, CoreManager::Success, and Core::Success.
|
virtual |
Initialize the server.
Reimplemented from CoreServer.
Definition at line 35 of file IntelCoreServer.cpp.
References ERROR, CoreServer::initialize(), ChannelServer< CoreServer, CoreMessage >::IOError, IPIVector, ProcessCtl(), SELF, API::Success, and WatchIRQ.
|
virtual |
Send Inter-Processor-Interrupt.
coreId | Core identifier number |
Implements CoreServer.
Definition at line 93 of file IntelCoreServer.cpp.
References coreId, ERROR, Core::IOError, IPIVector, m_apic, IntelAPIC::sendIPI(), IntController::Success, and Core::Success.
|
virtual |
Wait for Inter-Processor-Interrupt.
Implements CoreServer.
Definition at line 86 of file IntelCoreServer.cpp.
References EnableIRQ, EnterSleep, IPIVector, ProcessCtl(), and SELF.
|
staticprivate |
Inter-Processor-Interrupt vector number.
Definition at line 47 of file IntelCoreServer.h.
Referenced by initialize(), sendIPI(), and waitIPI().
|
private |
Definition at line 98 of file IntelCoreServer.h.
Referenced by discoverCores().
|
private |
Definition at line 96 of file IntelCoreServer.h.
Referenced by sendIPI().
|
private |
Definition at line 97 of file IntelCoreServer.h.
Referenced by bootCore(), and discoverCores().