From 5222b429c596a73e57aa4f1a0108d1ba7511485d Mon Sep 17 00:00:00 2001 From: TuxSH Date: Wed, 7 Nov 2018 01:04:20 +0100 Subject: [PATCH] Add KInterruptEvent skeleton; remove useless funcs --- .../include/mesosphere/core/KAutoObject.hpp | 16 ++++++++ .../include/mesosphere/interfaces/IClient.hpp | 5 --- .../include/mesosphere/interfaces/IServer.hpp | 5 --- .../mesosphere/interrupts/KInterruptEvent.hpp | 38 +++++++++++++++++++ .../include/mesosphere/processes/KEvent.hpp | 6 +-- .../mesosphere/processes/KReadableEvent.hpp | 1 - .../source/interrupts/KInterruptEvent.cpp | 25 ++++++++++++ mesosphere/source/test.cpp | 6 +-- 8 files changed, 83 insertions(+), 19 deletions(-) create mode 100644 mesosphere/include/mesosphere/interrupts/KInterruptEvent.hpp create mode 100644 mesosphere/source/interrupts/KInterruptEvent.cpp diff --git a/mesosphere/include/mesosphere/core/KAutoObject.hpp b/mesosphere/include/mesosphere/core/KAutoObject.hpp index 1bd8160cd..7d691004f 100644 --- a/mesosphere/include/mesosphere/core/KAutoObject.hpp +++ b/mesosphere/include/mesosphere/core/KAutoObject.hpp @@ -19,6 +19,10 @@ namespace mesosphere class KProcess; class KResourceLimit; class KThread; +class KEvent; +class KReadableEvent; +class KWritableEvent; +class KInterruptEvent; void intrusive_ptr_add_ref(KProcess *obj); void intrusive_ptr_release(KProcess *obj); @@ -26,6 +30,18 @@ void intrusive_ptr_release(KProcess *obj); void intrusive_ptr_add_ref(KResourceLimit *obj); void intrusive_ptr_release(KResourceLimit *obj); +void intrusive_ptr_add_ref(KEvent *obj); +void intrusive_ptr_release(KEvent *obj); + +void intrusive_ptr_add_ref(KReadableEvent *obj); +void intrusive_ptr_release(KReadableEvent *obj); + +void intrusive_ptr_add_ref(KWritableEvent *obj); +void intrusive_ptr_release(KWritableEvent *obj); + +void intrusive_ptr_add_ref(KInterruptEvent *obj); +void intrusive_ptr_release(KInterruptEvent *obj); + class KAutoObject { public: diff --git a/mesosphere/include/mesosphere/interfaces/IClient.hpp b/mesosphere/include/mesosphere/interfaces/IClient.hpp index ea86e9e94..c2339ea02 100644 --- a/mesosphere/include/mesosphere/interfaces/IClient.hpp +++ b/mesosphere/include/mesosphere/interfaces/IClient.hpp @@ -21,11 +21,6 @@ class IClient : public IClientTag { void *operator new(size_t sz) noexcept = delete; void operator delete(void *ptr) noexcept {} - ~IClient() - { - parent->HandleClientDestroyed(); - } - const SharedPtr& GetParent() const { return parent; } void SetParent(SharedPtr parent) diff --git a/mesosphere/include/mesosphere/interfaces/IServer.hpp b/mesosphere/include/mesosphere/interfaces/IServer.hpp index f367a7869..5b015351c 100644 --- a/mesosphere/include/mesosphere/interfaces/IServer.hpp +++ b/mesosphere/include/mesosphere/interfaces/IServer.hpp @@ -21,11 +21,6 @@ class IServer : public IServerTag { void *operator new(size_t sz) noexcept = delete; void operator delete(void *ptr) noexcept {}; - ~IServer() - { - parent->HandleServerDestroyed(); - } - const SharedPtr &GetParent() const { return parent; } void SetParentAndClient(SharedPtr parent, SharedPtr client) diff --git a/mesosphere/include/mesosphere/interrupts/KInterruptEvent.hpp b/mesosphere/include/mesosphere/interrupts/KInterruptEvent.hpp new file mode 100644 index 000000000..89798b18d --- /dev/null +++ b/mesosphere/include/mesosphere/interrupts/KInterruptEvent.hpp @@ -0,0 +1,38 @@ +#pragma once + +#include +#include + +namespace mesosphere +{ + +class KInterruptEvent final : public KReadableEvent, public ISetAllocated { + public: + MESOSPHERE_AUTO_OBJECT_TRAITS(ReadableEvent, InterruptEvent); + + void *operator new(size_t sz) noexcept { return ISetAllocated::operator new(sz); } + void operator delete(void *ptr) noexcept { ISetAllocated::operator delete(ptr); } + + virtual ~KInterruptEvent(); + Result Initialize(int irqId, u32 flags); + + // KAutoObject + virtual bool IsAlive() const override; + + private: + // TODO: receiver + int irqId = -1; + bool isInitialized = false; +}; + +inline void intrusive_ptr_add_ref(KInterruptEvent *obj) +{ + intrusive_ptr_add_ref((KAutoObject *)obj); +} + +inline void intrusive_ptr_release(KInterruptEvent *obj) +{ + intrusive_ptr_release((KAutoObject *)obj); +} + +} diff --git a/mesosphere/include/mesosphere/processes/KEvent.hpp b/mesosphere/include/mesosphere/processes/KEvent.hpp index 9c6d2636b..17bcbab5d 100644 --- a/mesosphere/include/mesosphere/processes/KEvent.hpp +++ b/mesosphere/include/mesosphere/processes/KEvent.hpp @@ -30,11 +30,7 @@ class KEvent final : /* KAutoObject */ virtual bool IsAlive() const override; - - /* IClientServerParent */ - void HandleServerDestroyed() { } - void HandleClientDestroyed() { } - + private: bool isInitialized = false; }; diff --git a/mesosphere/include/mesosphere/processes/KReadableEvent.hpp b/mesosphere/include/mesosphere/processes/KReadableEvent.hpp index d13e48116..20decd3f1 100644 --- a/mesosphere/include/mesosphere/processes/KReadableEvent.hpp +++ b/mesosphere/include/mesosphere/processes/KReadableEvent.hpp @@ -4,7 +4,6 @@ #include #include #include -#include #include namespace mesosphere diff --git a/mesosphere/source/interrupts/KInterruptEvent.cpp b/mesosphere/source/interrupts/KInterruptEvent.cpp new file mode 100644 index 000000000..b9fed1056 --- /dev/null +++ b/mesosphere/source/interrupts/KInterruptEvent.cpp @@ -0,0 +1,25 @@ +#include + +namespace mesosphere +{ + +KInterruptEvent::~KInterruptEvent() +{ + // delete receiver? +} + +Result KInterruptEvent::Initialize(int irqId, u32 flags) +{ + // TODO implement + (void)flags; + this->irqId = irqId; + isInitialized = true; + return ResultSuccess(); +} + +bool KInterruptEvent::IsAlive() const +{ + return isInitialized; +} + +} diff --git a/mesosphere/source/test.cpp b/mesosphere/source/test.cpp index ea250c8b8..b53ceb826 100644 --- a/mesosphere/source/test.cpp +++ b/mesosphere/source/test.cpp @@ -1,11 +1,11 @@ #include -#include +#include using namespace mesosphere; int main(void) { - auto [res, h1, h2] = MakeObjectWithHandle(); - (void)res; (void)h1; (void)h2; + auto [res, h1] = MakeObjectWithHandle(3, -1); + (void)res; (void)h1; //(void)h2; for(;;); return 0; }