// Copyright 2018 yuzu emulator team // Licensed under GPLv2 or any later version // Refer to the license.txt file included. #pragma once #include #include "common/bit_field.h" #include "common/common_types.h" #include "common/swap.h" #include "core/hle/service/nvdrv/nvdata.h" #include "core/hle/service/service.h" namespace Core { class System; } namespace Service::Nvidia::Devices { /// Represents an abstract nvidia device node. It is to be subclassed by concrete device nodes to /// implement the ioctl interface. class nvdevice { public: explicit nvdevice(Core::System& system) : system{system} {} 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& input, std::vector& 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& input, const std::vector& inline_input, std::vector& 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& input, std::vector& output, std::vector& inline_output) = 0; protected: Core::System& system; }; } // namespace Service::Nvidia::Devices