NVServices: Make NVEvents Automatic according to documentation.
This commit is contained in:
		
				
					committed by
					
						 FernandoS27
						FernandoS27
					
				
			
			
				
	
			
			
			
						parent
						
							b6844bec60
						
					
				
				
					commit
					0335a25d1f
				
			| @@ -142,7 +142,6 @@ u32 nvhost_ctrl::IocCtrlEventRegister(const std::vector<u8>& input, std::vector< | ||||
|         return NvResult::BadParameter; | ||||
|     } | ||||
|     events_interface.RegisterEvent(event_id); | ||||
|     events_interface.events[event_id].writable->Signal(); | ||||
|     return NvResult::Success; | ||||
| } | ||||
|  | ||||
| @@ -171,8 +170,12 @@ u32 nvhost_ctrl::IocCtrlEventSignal(const std::vector<u8>& input, std::vector<u8 | ||||
|         return NvResult::BadParameter; | ||||
|     } | ||||
|     if (events_interface.status[event_id] == EventState::Waiting) { | ||||
|         auto& gpu = system.GPU(); | ||||
|         if (gpu.CancelSyncptInterrupt(events_interface.assigned_syncpt[event_id], | ||||
|                                       events_interface.assigned_value[event_id])) { | ||||
|             events_interface.LiberateEvent(event_id); | ||||
|         } | ||||
|     } | ||||
|     return NvResult::Success; | ||||
| } | ||||
|  | ||||
|   | ||||
| @@ -40,8 +40,8 @@ Module::Module(Core::System& system) { | ||||
|     auto& kernel = system.Kernel(); | ||||
|     for (u32 i = 0; i < MaxNvEvents; i++) { | ||||
|         std::string event_label = fmt::format("NVDRV::NvEvent_{}", i); | ||||
|         events_interface.events[i] = | ||||
|             Kernel::WritableEvent::CreateEventPair(kernel, Kernel::ResetType::Manual, event_label); | ||||
|         events_interface.events[i] = Kernel::WritableEvent::CreateEventPair( | ||||
|             kernel, Kernel::ResetType::Automatic, event_label); | ||||
|         events_interface.status[i] = EventState::Free; | ||||
|         events_interface.registered[i] = false; | ||||
|     } | ||||
|   | ||||
| @@ -97,15 +97,18 @@ void GPU::RegisterSyncptInterrupt(const u32 syncpoint_id, const u32 value) { | ||||
|     syncpt_interrupts[syncpoint_id].emplace_back(value); | ||||
| } | ||||
|  | ||||
| void GPU::CancelSyncptInterrupt(const u32 syncpoint_id, const u32 value) { | ||||
| bool GPU::CancelSyncptInterrupt(const u32 syncpoint_id, const u32 value) { | ||||
|     sync_mutex.lock(); | ||||
|     auto it = syncpt_interrupts[syncpoint_id].begin(); | ||||
|     while (it != syncpt_interrupts[syncpoint_id].end()) { | ||||
|         if (value == *it) { | ||||
|             it = syncpt_interrupts[syncpoint_id].erase(it); | ||||
|             return; | ||||
|             return true; | ||||
|         } | ||||
|         it++; | ||||
|     } | ||||
|     return false; | ||||
|     sync_mutex.unlock(); | ||||
| } | ||||
|  | ||||
| u32 RenderTargetBytesPerPixel(RenderTargetFormat format) { | ||||
|   | ||||
| @@ -174,7 +174,7 @@ public: | ||||
|  | ||||
|     void RegisterSyncptInterrupt(const u32 syncpoint_id, const u32 value); | ||||
|  | ||||
|     void CancelSyncptInterrupt(const u32 syncpoint_id, const u32 value); | ||||
|     bool CancelSyncptInterrupt(const u32 syncpoint_id, const u32 value); | ||||
|  | ||||
|     void Guard(bool guard_set) { | ||||
|         if (guard_set) { | ||||
|   | ||||
		Reference in New Issue
	
	Block a user