| 
									
										
										
										
											2022-04-23 04:59:50 -04:00
										 |  |  | // SPDX-FileCopyrightText: Copyright 2021 yuzu Emulator Project
 | 
					
						
							|  |  |  | // SPDX-License-Identifier: GPL-2.0-or-later
 | 
					
						
							| 
									
										
										
										
											2021-01-31 01:37:41 -08:00
										 |  |  | 
 | 
					
						
							|  |  |  | #pragma once
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-04-10 02:34:26 -07:00
										 |  |  | #include "core/hle/kernel/k_readable_event.h"
 | 
					
						
							|  |  |  | #include "core/hle/kernel/k_writable_event.h"
 | 
					
						
							| 
									
										
										
										
											2021-04-04 00:56:09 -07:00
										 |  |  | #include "core/hle/kernel/slab_helpers.h"
 | 
					
						
							| 
									
										
										
										
											2021-01-31 01:37:41 -08:00
										 |  |  | 
 | 
					
						
							|  |  |  | namespace Kernel { | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class KernelCore; | 
					
						
							|  |  |  | class KReadableEvent; | 
					
						
							|  |  |  | class KWritableEvent; | 
					
						
							| 
									
										
										
										
											2021-04-23 22:04:28 -07:00
										 |  |  | class KProcess; | 
					
						
							| 
									
										
										
										
											2021-04-04 00:56:09 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  | class KEvent final : public KAutoObjectWithSlabHeapAndContainer<KEvent, KAutoObjectWithList> { | 
					
						
							|  |  |  |     KERNEL_AUTOOBJECT_TRAITS(KEvent, KAutoObject); | 
					
						
							| 
									
										
										
										
											2021-01-31 01:37:41 -08:00
										 |  |  | 
 | 
					
						
							|  |  |  | public: | 
					
						
							| 
									
										
										
										
											2021-05-08 12:11:36 -04:00
										 |  |  |     explicit KEvent(KernelCore& kernel_); | 
					
						
							| 
									
										
										
										
											2021-05-29 02:49:07 -04:00
										 |  |  |     ~KEvent() override; | 
					
						
							| 
									
										
										
										
											2021-01-31 01:37:41 -08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-02-21 12:31:23 -08:00
										 |  |  |     void Initialize(std::string&& name, KProcess* owner_); | 
					
						
							| 
									
										
										
										
											2021-04-04 00:56:09 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-05-29 02:49:07 -04:00
										 |  |  |     void Finalize() override; | 
					
						
							| 
									
										
										
										
											2021-01-31 01:37:41 -08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-05-29 02:49:07 -04:00
										 |  |  |     bool IsInitialized() const override { | 
					
						
							| 
									
										
										
										
											2021-04-04 00:56:09 -07:00
										 |  |  |         return initialized; | 
					
						
							|  |  |  |     } | 
					
						
							| 
									
										
										
										
											2021-04-10 02:34:26 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-05-29 02:49:07 -04:00
										 |  |  |     uintptr_t GetPostDestroyArgument() const override { | 
					
						
							| 
									
										
										
										
											2021-04-04 00:56:09 -07:00
										 |  |  |         return reinterpret_cast<uintptr_t>(owner); | 
					
						
							|  |  |  |     } | 
					
						
							| 
									
										
										
										
											2021-01-31 01:37:41 -08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-05-29 02:49:07 -04:00
										 |  |  |     KProcess* GetOwner() const override { | 
					
						
							| 
									
										
										
										
											2021-04-10 02:34:26 -07:00
										 |  |  |         return owner; | 
					
						
							| 
									
										
										
										
											2021-01-31 01:37:41 -08:00
										 |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-04-10 02:34:26 -07:00
										 |  |  |     KReadableEvent& GetReadableEvent() { | 
					
						
							|  |  |  |         return readable_event; | 
					
						
							| 
									
										
										
										
											2021-01-31 01:37:41 -08:00
										 |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-04-10 02:34:26 -07:00
										 |  |  |     KWritableEvent& GetWritableEvent() { | 
					
						
							| 
									
										
										
										
											2021-01-31 01:37:41 -08:00
										 |  |  |         return writable_event; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-05-29 02:49:07 -04:00
										 |  |  |     static void PostDestroy(uintptr_t arg); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-01-31 01:37:41 -08:00
										 |  |  | private: | 
					
						
							| 
									
										
										
										
											2021-04-10 02:34:26 -07:00
										 |  |  |     KReadableEvent readable_event; | 
					
						
							|  |  |  |     KWritableEvent writable_event; | 
					
						
							| 
									
										
										
										
											2021-04-23 22:04:28 -07:00
										 |  |  |     KProcess* owner{}; | 
					
						
							| 
									
										
										
										
											2021-01-31 01:37:41 -08:00
										 |  |  |     bool initialized{}; | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | } // namespace Kernel
 |