mirror of
				https://git.suyu.dev/suyu/suyu
				synced 2025-10-31 16:09:03 -05:00 
			
		
		
		
	Services/nvdrv: add '/dev/nvhost-nvdec' device
This commit is contained in:
		
							
								
								
									
										32
									
								
								src/core/hle/service/nvdrv/devices/nvhost_nvdec.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										32
									
								
								src/core/hle/service/nvdrv/devices/nvhost_nvdec.cpp
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,32 @@ | ||||
| // Copyright 2018 yuzu emulator team | ||||
| // Licensed under GPLv2 or any later version | ||||
| // Refer to the license.txt file included. | ||||
|  | ||||
| #include "common/assert.h" | ||||
| #include "common/logging/log.h" | ||||
| #include "core/hle/service/nvdrv/devices/nvhost_nvdec.h" | ||||
|  | ||||
| namespace Service::Nvidia::Devices { | ||||
|  | ||||
| u32 nvhost_nvdec::ioctl(Ioctl command, const std::vector<u8>& input, std::vector<u8>& output) { | ||||
|     NGLOG_DEBUG(Service_NVDRV, "called, command=0x{:08X}, input_size=0x{:X}, output_size=0x{:X}", | ||||
|                 command.raw, input.size(), output.size()); | ||||
|  | ||||
|     switch (static_cast<IoctlCommand>(command.raw)) { | ||||
|     case IoctlCommand::IocSetNVMAPfdCommand: | ||||
|         return SetNVMAPfd(input, output); | ||||
|     } | ||||
|  | ||||
|     UNIMPLEMENTED_MSG("Unimplemented ioctl"); | ||||
|     return 0; | ||||
| } | ||||
|  | ||||
| u32 nvhost_nvdec::SetNVMAPfd(const std::vector<u8>& input, std::vector<u8>& output) { | ||||
|     IoctlSetNvmapFD params{}; | ||||
|     std::memcpy(¶ms, input.data(), input.size()); | ||||
|     NGLOG_DEBUG(Service_NVDRV, "called, fd={}", params.nvmap_fd); | ||||
|     nvmap_fd = params.nvmap_fd; | ||||
|     return 0; | ||||
| } | ||||
|  | ||||
| } // namespace Service::Nvidia::Devices | ||||
							
								
								
									
										38
									
								
								src/core/hle/service/nvdrv/devices/nvhost_nvdec.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										38
									
								
								src/core/hle/service/nvdrv/devices/nvhost_nvdec.h
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,38 @@ | ||||
| // Copyright 2018 yuzu emulator team | ||||
| // Licensed under GPLv2 or any later version | ||||
| // Refer to the license.txt file included. | ||||
|  | ||||
| #pragma once | ||||
|  | ||||
| #include <array> | ||||
| #include <cstdlib> | ||||
| #include <cstring> | ||||
| #include <vector> | ||||
| #include "common/common_types.h" | ||||
| #include "core/hle/service/nvdrv/devices/nvdevice.h" | ||||
|  | ||||
| namespace Service::Nvidia::Devices { | ||||
|  | ||||
| class nvhost_nvdec final : public nvdevice { | ||||
| public: | ||||
|     nvhost_nvdec() = default; | ||||
|     ~nvhost_nvdec() override = default; | ||||
|  | ||||
|     u32 ioctl(Ioctl command, const std::vector<u8>& input, std::vector<u8>& output) override; | ||||
|  | ||||
| private: | ||||
|     enum class IoctlCommand : u32_le { | ||||
|         IocSetNVMAPfdCommand = 0x40044801, | ||||
|     }; | ||||
|  | ||||
|     struct IoctlSetNvmapFD { | ||||
|         u32_le nvmap_fd; | ||||
|     }; | ||||
|     static_assert(sizeof(IoctlSetNvmapFD) == 4, "IoctlSetNvmapFD is incorrect size"); | ||||
|  | ||||
|     u32_le nvmap_fd{}; | ||||
|  | ||||
|     u32 SetNVMAPfd(const std::vector<u8>& input, std::vector<u8>& output); | ||||
| }; | ||||
|  | ||||
| } // namespace Service::Nvidia::Devices | ||||
| @@ -9,6 +9,7 @@ | ||||
| #include "core/hle/service/nvdrv/devices/nvhost_ctrl.h" | ||||
| #include "core/hle/service/nvdrv/devices/nvhost_ctrl_gpu.h" | ||||
| #include "core/hle/service/nvdrv/devices/nvhost_gpu.h" | ||||
| #include "core/hle/service/nvdrv/devices/nvhost_nvdec.h" | ||||
| #include "core/hle/service/nvdrv/devices/nvmap.h" | ||||
| #include "core/hle/service/nvdrv/interface.h" | ||||
| #include "core/hle/service/nvdrv/nvdrv.h" | ||||
| @@ -36,6 +37,7 @@ Module::Module() { | ||||
|     devices["/dev/nvmap"] = nvmap_dev; | ||||
|     devices["/dev/nvdisp_disp0"] = std::make_shared<Devices::nvdisp_disp0>(nvmap_dev); | ||||
|     devices["/dev/nvhost-ctrl"] = std::make_shared<Devices::nvhost_ctrl>(); | ||||
|     devices["/dev/nvhost-nvdec"] = std::make_shared<Devices::nvhost_nvdec>(); | ||||
| } | ||||
|  | ||||
| u32 Module::Open(std::string device_name) { | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 mailwl
					mailwl