| 
									
										
										
										
											2022-04-23 04:59:50 -04:00
										 |  |  | // SPDX-FileCopyrightText: Copyright 2018 yuzu Emulator Project
 | 
					
						
							|  |  |  | // SPDX-License-Identifier: GPL-2.0-or-later
 | 
					
						
							| 
									
										
										
										
											2018-07-03 14:28:46 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  | #pragma once
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-01-26 10:28:23 -04:00
										 |  |  | #include <memory>
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-07-03 14:28:46 +01:00
										 |  |  | #include "common/common_types.h"
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-03-31 15:10:44 -04:00
										 |  |  | namespace Core::Memory { | 
					
						
							| 
									
										
										
										
											2020-01-26 10:28:23 -04:00
										 |  |  | class Memory; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-08-24 21:43:32 -04:00
										 |  |  | namespace Core { | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-07-03 14:28:46 +01:00
										 |  |  | class ExclusiveMonitor { | 
					
						
							|  |  |  | public: | 
					
						
							|  |  |  |     virtual ~ExclusiveMonitor(); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-03-15 15:54:40 -04:00
										 |  |  |     virtual u8 ExclusiveRead8(std::size_t core_index, VAddr addr) = 0; | 
					
						
							|  |  |  |     virtual u16 ExclusiveRead16(std::size_t core_index, VAddr addr) = 0; | 
					
						
							|  |  |  |     virtual u32 ExclusiveRead32(std::size_t core_index, VAddr addr) = 0; | 
					
						
							|  |  |  |     virtual u64 ExclusiveRead64(std::size_t core_index, VAddr addr) = 0; | 
					
						
							|  |  |  |     virtual u128 ExclusiveRead128(std::size_t core_index, VAddr addr) = 0; | 
					
						
							| 
									
										
										
										
											2022-02-27 19:40:05 +00:00
										 |  |  |     virtual void ClearExclusive(std::size_t core_index) = 0; | 
					
						
							| 
									
										
										
										
											2018-07-03 14:28:46 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-09-15 15:21:06 +02:00
										 |  |  |     virtual bool ExclusiveWrite8(std::size_t core_index, VAddr vaddr, u8 value) = 0; | 
					
						
							|  |  |  |     virtual bool ExclusiveWrite16(std::size_t core_index, VAddr vaddr, u16 value) = 0; | 
					
						
							|  |  |  |     virtual bool ExclusiveWrite32(std::size_t core_index, VAddr vaddr, u32 value) = 0; | 
					
						
							|  |  |  |     virtual bool ExclusiveWrite64(std::size_t core_index, VAddr vaddr, u64 value) = 0; | 
					
						
							|  |  |  |     virtual bool ExclusiveWrite128(std::size_t core_index, VAddr vaddr, u128 value) = 0; | 
					
						
							| 
									
										
										
										
											2018-07-03 14:28:46 +01:00
										 |  |  | }; | 
					
						
							| 
									
										
										
										
											2018-08-24 21:43:32 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-01-26 16:14:18 -04:00
										 |  |  | std::unique_ptr<Core::ExclusiveMonitor> MakeExclusiveMonitor(Memory::Memory& memory, | 
					
						
							|  |  |  |                                                              std::size_t num_cores); | 
					
						
							| 
									
										
										
										
											2020-01-26 10:28:23 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-08-24 21:43:32 -04:00
										 |  |  | } // namespace Core
 |