mirror of
				https://git.zaroz.cloud/nintendo-back-up/yuzu/yuzu-mainline.git
				synced 2025-03-21 01:53:15 +00:00 
			
		
		
		
	Addressed issues
This commit is contained in:
		
							parent
							
								
									31c12de0fe
								
							
						
					
					
						commit
						fc4d692c50
					
				| @ -24,10 +24,35 @@ public: | |||||||
|     explicit nvdevice(Core::System& system) : system{system} {} |     explicit nvdevice(Core::System& system) : system{system} {} | ||||||
|     virtual ~nvdevice() = default; |     virtual ~nvdevice() = default; | ||||||
| 
 | 
 | ||||||
|  |     /**
 | ||||||
|  |      * Handles an ioctl1 request. | ||||||
|  |      * @param command The ioctl command id. | ||||||
|  |      * @param input A buffer containing the input data for the ioctl. | ||||||
|  |      * @param output A buffer where the output data will be written to. | ||||||
|  |      * @returns The result code of the ioctl. | ||||||
|  |      */ | ||||||
|     virtual NvResult Ioctl1(Ioctl command, const std::vector<u8>& input, |     virtual NvResult Ioctl1(Ioctl command, const std::vector<u8>& input, | ||||||
|                             std::vector<u8>& output) = 0; |                             std::vector<u8>& output) = 0; | ||||||
|  | 
 | ||||||
|  |     /**
 | ||||||
|  |      * Handles an ioctl2 request. | ||||||
|  |      * @param command The ioctl command id. | ||||||
|  |      * @param input A buffer containing the input data for the ioctl. | ||||||
|  |      * @param inline_input A buffer containing the input data for the ioctl which has been inlined. | ||||||
|  |      * @param output A buffer where the output data will be written to. | ||||||
|  |      * @returns The result code of the ioctl. | ||||||
|  |      */ | ||||||
|     virtual NvResult Ioctl2(Ioctl command, const std::vector<u8>& input, |     virtual NvResult Ioctl2(Ioctl command, const std::vector<u8>& input, | ||||||
|                             const std::vector<u8>& inline_input, std::vector<u8>& output) = 0; |                             const std::vector<u8>& inline_input, std::vector<u8>& output) = 0; | ||||||
|  | 
 | ||||||
|  |     /**
 | ||||||
|  |      * Handles an ioctl3 request. | ||||||
|  |      * @param command The ioctl command id. | ||||||
|  |      * @param input A buffer containing the input data for the ioctl. | ||||||
|  |      * @param output A buffer where the output data will be written to. | ||||||
|  |      * @param inline_output A buffer where the inlined output data will be written to. | ||||||
|  |      * @returns The result code of the ioctl. | ||||||
|  |      */ | ||||||
|     virtual NvResult Ioctl3(Ioctl command, const std::vector<u8>& input, std::vector<u8>& output, |     virtual NvResult Ioctl3(Ioctl command, const std::vector<u8>& input, std::vector<u8>& output, | ||||||
|                             std::vector<u8>& inline_output) = 0; |                             std::vector<u8>& inline_output) = 0; | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -42,6 +42,8 @@ NvResult nvhost_as_gpu::Ioctl1(Ioctl command, const std::vector<u8>& input, | |||||||
|             return InitalizeEx(input, output); |             return InitalizeEx(input, output); | ||||||
|         case 0x14: |         case 0x14: | ||||||
|             return Remap(input, output); |             return Remap(input, output); | ||||||
|  |         default: | ||||||
|  |             break; | ||||||
|         } |         } | ||||||
|         break; |         break; | ||||||
|     default: |     default: | ||||||
| @ -65,7 +67,12 @@ NvResult nvhost_as_gpu::Ioctl3(Ioctl command, const std::vector<u8>& input, std: | |||||||
|         switch (command.cmd) { |         switch (command.cmd) { | ||||||
|         case 0x8: |         case 0x8: | ||||||
|             return GetVARegions(input, output, inline_output); |             return GetVARegions(input, output, inline_output); | ||||||
|  |         default: | ||||||
|  |             break; | ||||||
|         } |         } | ||||||
|  |         break; | ||||||
|  |     default: | ||||||
|  |         break; | ||||||
|     } |     } | ||||||
|     UNIMPLEMENTED_MSG("Unimplemented ioctl={:08X}", command.raw); |     UNIMPLEMENTED_MSG("Unimplemented ioctl={:08X}", command.raw); | ||||||
|     return NvResult::NotImplemented; |     return NvResult::NotImplemented; | ||||||
|  | |||||||
| @ -18,10 +18,35 @@ public: | |||||||
|     explicit nvhost_nvdec_common(Core::System& system, std::shared_ptr<nvmap> nvmap_dev); |     explicit nvhost_nvdec_common(Core::System& system, std::shared_ptr<nvmap> nvmap_dev); | ||||||
|     ~nvhost_nvdec_common() override; |     ~nvhost_nvdec_common() override; | ||||||
| 
 | 
 | ||||||
|  |     /**
 | ||||||
|  |      * Handles an ioctl1 request. | ||||||
|  |      * @param command The ioctl command id. | ||||||
|  |      * @param input A buffer containing the input data for the ioctl. | ||||||
|  |      * @param output A buffer where the output data will be written to. | ||||||
|  |      * @returns The result code of the ioctl. | ||||||
|  |      */ | ||||||
|     virtual NvResult Ioctl1(Ioctl command, const std::vector<u8>& input, |     virtual NvResult Ioctl1(Ioctl command, const std::vector<u8>& input, | ||||||
|                             std::vector<u8>& output) = 0; |                             std::vector<u8>& output) = 0; | ||||||
|  | 
 | ||||||
|  |     /**
 | ||||||
|  |      * Handles an ioctl2 request. | ||||||
|  |      * @param command The ioctl command id. | ||||||
|  |      * @param input A buffer containing the input data for the ioctl. | ||||||
|  |      * @param inline_input A buffer containing the input data for the ioctl which has been inlined. | ||||||
|  |      * @param output A buffer where the output data will be written to. | ||||||
|  |      * @returns The result code of the ioctl. | ||||||
|  |      */ | ||||||
|     virtual NvResult Ioctl2(Ioctl command, const std::vector<u8>& input, |     virtual NvResult Ioctl2(Ioctl command, const std::vector<u8>& input, | ||||||
|                             const std::vector<u8>& inline_input, std::vector<u8>& output) = 0; |                             const std::vector<u8>& inline_input, std::vector<u8>& output) = 0; | ||||||
|  | 
 | ||||||
|  |     /**
 | ||||||
|  |      * Handles an ioctl3 request. | ||||||
|  |      * @param command The ioctl command id. | ||||||
|  |      * @param input A buffer containing the input data for the ioctl. | ||||||
|  |      * @param output A buffer where the output data will be written to. | ||||||
|  |      * @param inline_output A buffer where the inlined output data will be written to. | ||||||
|  |      * @returns The result code of the ioctl. | ||||||
|  |      */ | ||||||
|     virtual NvResult Ioctl3(Ioctl command, const std::vector<u8>& input, std::vector<u8>& output, |     virtual NvResult Ioctl3(Ioctl command, const std::vector<u8>& input, std::vector<u8>& output, | ||||||
|                             std::vector<u8>& inline_output) = 0; |                             std::vector<u8>& inline_output) = 0; | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -15,7 +15,6 @@ nvhost_nvjpg::~nvhost_nvjpg() = default; | |||||||
| 
 | 
 | ||||||
| NvResult nvhost_nvjpg::Ioctl1(Ioctl command, const std::vector<u8>& input, | NvResult nvhost_nvjpg::Ioctl1(Ioctl command, const std::vector<u8>& input, | ||||||
|                               std::vector<u8>& output) { |                               std::vector<u8>& output) { | ||||||
| 
 |  | ||||||
|     switch (command.group) { |     switch (command.group) { | ||||||
|     case 'H': |     case 'H': | ||||||
|         switch (command.cmd) { |         switch (command.cmd) { | ||||||
| @ -25,6 +24,8 @@ NvResult nvhost_nvjpg::Ioctl1(Ioctl command, const std::vector<u8>& input, | |||||||
|             break; |             break; | ||||||
|         } |         } | ||||||
|         break; |         break; | ||||||
|  |     default: | ||||||
|  |         break; | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     UNIMPLEMENTED_MSG("Unimplemented ioctl={:08X}", command.raw); |     UNIMPLEMENTED_MSG("Unimplemented ioctl={:08X}", command.raw); | ||||||
|  | |||||||
| @ -29,13 +29,20 @@ NvResult nvhost_vic::Ioctl1(Ioctl command, const std::vector<u8>& input, std::ve | |||||||
|             return MapBuffer(input, output); |             return MapBuffer(input, output); | ||||||
|         case 0xa: |         case 0xa: | ||||||
|             return UnmapBuffer(input, output); |             return UnmapBuffer(input, output); | ||||||
|  |         default: | ||||||
|  |             break; | ||||||
|         } |         } | ||||||
|  |         break; | ||||||
|     case 'H': |     case 'H': | ||||||
|         switch (command.cmd) { |         switch (command.cmd) { | ||||||
|         case 0x1: |         case 0x1: | ||||||
|             return SetNVMAPfd(input); |             return SetNVMAPfd(input); | ||||||
|  |         default: | ||||||
|  |             break; | ||||||
|         } |         } | ||||||
|         break; |         break; | ||||||
|  |     default: | ||||||
|  |         break; | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     UNIMPLEMENTED_MSG("Unimplemented ioctl={:08X}", command.raw); |     UNIMPLEMENTED_MSG("Unimplemented ioctl={:08X}", command.raw); | ||||||
|  | |||||||
| @ -35,7 +35,12 @@ NvResult nvmap::Ioctl1(Ioctl command, const std::vector<u8>& input, std::vector< | |||||||
|             return IocParam(input, output); |             return IocParam(input, output); | ||||||
|         case 0xe: |         case 0xe: | ||||||
|             return IocGetId(input, output); |             return IocGetId(input, output); | ||||||
|  |         default: | ||||||
|  |             break; | ||||||
|         } |         } | ||||||
|  |         break; | ||||||
|  |     default: | ||||||
|  |         break; | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     UNIMPLEMENTED_MSG("Unimplemented ioctl={:08X}", command.raw); |     UNIMPLEMENTED_MSG("Unimplemented ioctl={:08X}", command.raw); | ||||||
|  | |||||||
| @ -23,7 +23,7 @@ void NVDRV::SignalGPUInterruptSyncpt(const u32 syncpoint_id, const u32 value) { | |||||||
| void NVDRV::Open(Kernel::HLERequestContext& ctx) { | void NVDRV::Open(Kernel::HLERequestContext& ctx) { | ||||||
|     LOG_DEBUG(Service_NVDRV, "called"); |     LOG_DEBUG(Service_NVDRV, "called"); | ||||||
| 
 | 
 | ||||||
|     if (!initialized) { |     if (!is_initialized) { | ||||||
|         ServiceError(ctx, NvResult::NotInitialized); |         ServiceError(ctx, NvResult::NotInitialized); | ||||||
|         LOG_ERROR(Service_NVDRV, "NvServices is not initalized!"); |         LOG_ERROR(Service_NVDRV, "NvServices is not initalized!"); | ||||||
|         return; |         return; | ||||||
| @ -51,7 +51,7 @@ void NVDRV::Ioctl1(Kernel::HLERequestContext& ctx) { | |||||||
|     const auto command = rp.PopRaw<Ioctl>(); |     const auto command = rp.PopRaw<Ioctl>(); | ||||||
|     LOG_DEBUG(Service_NVDRV, "called fd={}, ioctl=0x{:08X}", fd, command.raw); |     LOG_DEBUG(Service_NVDRV, "called fd={}, ioctl=0x{:08X}", fd, command.raw); | ||||||
| 
 | 
 | ||||||
|     if (!initialized) { |     if (!is_initialized) { | ||||||
|         ServiceError(ctx, NvResult::NotInitialized); |         ServiceError(ctx, NvResult::NotInitialized); | ||||||
|         LOG_ERROR(Service_NVDRV, "NvServices is not initalized!"); |         LOG_ERROR(Service_NVDRV, "NvServices is not initalized!"); | ||||||
|         return; |         return; | ||||||
| @ -78,7 +78,7 @@ void NVDRV::Ioctl2(Kernel::HLERequestContext& ctx) { | |||||||
|     const auto command = rp.PopRaw<Ioctl>(); |     const auto command = rp.PopRaw<Ioctl>(); | ||||||
|     LOG_DEBUG(Service_NVDRV, "called fd={}, ioctl=0x{:08X}", fd, command.raw); |     LOG_DEBUG(Service_NVDRV, "called fd={}, ioctl=0x{:08X}", fd, command.raw); | ||||||
| 
 | 
 | ||||||
|     if (!initialized) { |     if (!is_initialized) { | ||||||
|         ServiceError(ctx, NvResult::NotInitialized); |         ServiceError(ctx, NvResult::NotInitialized); | ||||||
|         LOG_ERROR(Service_NVDRV, "NvServices is not initalized!"); |         LOG_ERROR(Service_NVDRV, "NvServices is not initalized!"); | ||||||
|         return; |         return; | ||||||
| @ -106,7 +106,7 @@ void NVDRV::Ioctl3(Kernel::HLERequestContext& ctx) { | |||||||
|     const auto command = rp.PopRaw<Ioctl>(); |     const auto command = rp.PopRaw<Ioctl>(); | ||||||
|     LOG_DEBUG(Service_NVDRV, "called fd={}, ioctl=0x{:08X}", fd, command.raw); |     LOG_DEBUG(Service_NVDRV, "called fd={}, ioctl=0x{:08X}", fd, command.raw); | ||||||
| 
 | 
 | ||||||
|     if (!initialized) { |     if (!is_initialized) { | ||||||
|         ServiceError(ctx, NvResult::NotInitialized); |         ServiceError(ctx, NvResult::NotInitialized); | ||||||
|         LOG_ERROR(Service_NVDRV, "NvServices is not initalized!"); |         LOG_ERROR(Service_NVDRV, "NvServices is not initalized!"); | ||||||
|         return; |         return; | ||||||
| @ -132,7 +132,7 @@ void NVDRV::Ioctl3(Kernel::HLERequestContext& ctx) { | |||||||
| void NVDRV::Close(Kernel::HLERequestContext& ctx) { | void NVDRV::Close(Kernel::HLERequestContext& ctx) { | ||||||
|     LOG_DEBUG(Service_NVDRV, "called"); |     LOG_DEBUG(Service_NVDRV, "called"); | ||||||
| 
 | 
 | ||||||
|     if (!initialized) { |     if (!is_initialized) { | ||||||
|         ServiceError(ctx, NvResult::NotInitialized); |         ServiceError(ctx, NvResult::NotInitialized); | ||||||
|         LOG_ERROR(Service_NVDRV, "NvServices is not initalized!"); |         LOG_ERROR(Service_NVDRV, "NvServices is not initalized!"); | ||||||
|         return; |         return; | ||||||
| @ -150,7 +150,7 @@ void NVDRV::Close(Kernel::HLERequestContext& ctx) { | |||||||
| void NVDRV::Initialize(Kernel::HLERequestContext& ctx) { | void NVDRV::Initialize(Kernel::HLERequestContext& ctx) { | ||||||
|     LOG_WARNING(Service_NVDRV, "(STUBBED) called"); |     LOG_WARNING(Service_NVDRV, "(STUBBED) called"); | ||||||
| 
 | 
 | ||||||
|     initialized = true; |     is_initialized = true; | ||||||
| 
 | 
 | ||||||
|     IPC::ResponseBuilder rb{ctx, 3}; |     IPC::ResponseBuilder rb{ctx, 3}; | ||||||
|     rb.Push(RESULT_SUCCESS); |     rb.Push(RESULT_SUCCESS); | ||||||
| @ -163,14 +163,13 @@ void NVDRV::QueryEvent(Kernel::HLERequestContext& ctx) { | |||||||
|     const auto event_id = rp.Pop<u32>() & 0x00FF; |     const auto event_id = rp.Pop<u32>() & 0x00FF; | ||||||
|     LOG_WARNING(Service_NVDRV, "(STUBBED) called, fd={:X}, event_id={:X}", fd, event_id); |     LOG_WARNING(Service_NVDRV, "(STUBBED) called, fd={:X}, event_id={:X}", fd, event_id); | ||||||
| 
 | 
 | ||||||
|     if (!initialized) { |     if (!is_initialized) { | ||||||
|         ServiceError(ctx, NvResult::NotInitialized); |         ServiceError(ctx, NvResult::NotInitialized); | ||||||
|         LOG_ERROR(Service_NVDRV, "NvServices is not initalized!"); |         LOG_ERROR(Service_NVDRV, "NvServices is not initalized!"); | ||||||
|         return; |         return; | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     auto nv_result = nvdrv->VerifyFd(fd); |     const auto nv_result = nvdrv->VerifyFD(fd); | ||||||
| 
 |  | ||||||
|     if (nv_result != NvResult::Success) { |     if (nv_result != NvResult::Success) { | ||||||
|         LOG_ERROR(Service_NVDRV, "Invalid FD specified DeviceFD={}!", fd); |         LOG_ERROR(Service_NVDRV, "Invalid FD specified DeviceFD={}!", fd); | ||||||
|         ServiceError(ctx, nv_result); |         ServiceError(ctx, nv_result); | ||||||
|  | |||||||
| @ -39,7 +39,7 @@ private: | |||||||
|     std::shared_ptr<Module> nvdrv; |     std::shared_ptr<Module> nvdrv; | ||||||
| 
 | 
 | ||||||
|     u64 pid{}; |     u64 pid{}; | ||||||
|     bool initialized{}; |     bool is_initialized{}; | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| } // namespace Service::Nvidia
 | } // namespace Service::Nvidia
 | ||||||
|  | |||||||
| @ -62,7 +62,7 @@ Module::Module(Core::System& system) : syncpoint_manager{system.GPU()} { | |||||||
| 
 | 
 | ||||||
| Module::~Module() = default; | Module::~Module() = default; | ||||||
| 
 | 
 | ||||||
| NvResult Module::VerifyFd(DeviceFD fd) const { | NvResult Module::VerifyFD(DeviceFD fd) const { | ||||||
|     if (fd < 0) { |     if (fd < 0) { | ||||||
|         LOG_ERROR(Service_NVDRV, "Invalid DeviceFD={}!", fd); |         LOG_ERROR(Service_NVDRV, "Invalid DeviceFD={}!", fd); | ||||||
|         return NvResult::InvalidState; |         return NvResult::InvalidState; | ||||||
| @ -97,7 +97,7 @@ NvResult Module::Ioctl1(DeviceFD fd, Ioctl command, const std::vector<u8>& input | |||||||
|         return NvResult::InvalidState; |         return NvResult::InvalidState; | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     auto itr = open_files.find(fd); |     const auto itr = open_files.find(fd); | ||||||
| 
 | 
 | ||||||
|     if (itr == open_files.end()) { |     if (itr == open_files.end()) { | ||||||
|         LOG_ERROR(Service_NVDRV, "Could not find DeviceFD={}!", fd); |         LOG_ERROR(Service_NVDRV, "Could not find DeviceFD={}!", fd); | ||||||
| @ -114,7 +114,7 @@ NvResult Module::Ioctl2(DeviceFD fd, Ioctl command, const std::vector<u8>& input | |||||||
|         return NvResult::InvalidState; |         return NvResult::InvalidState; | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     auto itr = open_files.find(fd); |     const auto itr = open_files.find(fd); | ||||||
| 
 | 
 | ||||||
|     if (itr == open_files.end()) { |     if (itr == open_files.end()) { | ||||||
|         LOG_ERROR(Service_NVDRV, "Could not find DeviceFD={}!", fd); |         LOG_ERROR(Service_NVDRV, "Could not find DeviceFD={}!", fd); | ||||||
| @ -131,7 +131,7 @@ NvResult Module::Ioctl3(DeviceFD fd, Ioctl command, const std::vector<u8>& input | |||||||
|         return NvResult::InvalidState; |         return NvResult::InvalidState; | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     auto itr = open_files.find(fd); |     const auto itr = open_files.find(fd); | ||||||
| 
 | 
 | ||||||
|     if (itr == open_files.end()) { |     if (itr == open_files.end()) { | ||||||
|         LOG_ERROR(Service_NVDRV, "Could not find DeviceFD={}!", fd); |         LOG_ERROR(Service_NVDRV, "Could not find DeviceFD={}!", fd); | ||||||
| @ -147,7 +147,7 @@ NvResult Module::Close(DeviceFD fd) { | |||||||
|         return NvResult::InvalidState; |         return NvResult::InvalidState; | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     auto itr = open_files.find(fd); |     const auto itr = open_files.find(fd); | ||||||
| 
 | 
 | ||||||
|     if (itr == open_files.end()) { |     if (itr == open_files.end()) { | ||||||
|         LOG_ERROR(Service_NVDRV, "Could not find DeviceFD={}!", fd); |         LOG_ERROR(Service_NVDRV, "Could not find DeviceFD={}!", fd); | ||||||
|  | |||||||
| @ -112,7 +112,7 @@ public: | |||||||
|         return std::static_pointer_cast<T>(itr->second); |         return std::static_pointer_cast<T>(itr->second); | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     NvResult VerifyFd(DeviceFD fd) const; |     NvResult VerifyFD(DeviceFD fd) const; | ||||||
| 
 | 
 | ||||||
|     /// Opens a device node and returns a file descriptor to it.
 |     /// Opens a device node and returns a file descriptor to it.
 | ||||||
|     DeviceFD Open(const std::string& device_name); |     DeviceFD Open(const std::string& device_name); | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user
	 Chloe Marcec
						Chloe Marcec