skyline/app/src/main/cpp/skyline/services/nvdrv/types.h

91 lines
2.6 KiB
C++

// SPDX-License-Identifier: MIT OR MPL-2.0
// Copyright © 2021 Skyline Team and Contributors (https://github.com/skyline-emu/)
#pragma once
#include <common.h>
namespace skyline::service::nvdrv {
using FileDescriptor = i32;
constexpr FileDescriptor InvalidFileDescriptor{-1};
struct SessionPermissions {
bool AccessGpu;
bool AccessGpuDebug;
bool AccessGpuSchedule;
bool AccessVic;
bool AccessVideoEncoder;
bool AccessVideoDecoder;
bool AccessTsec;
bool AccessJpeg;
bool AccessDisplay;
bool AccessImportMemory;
bool NoCheckedAruid;
bool ModifyGraphicsMargin;
bool DuplicateNvMapHandles;
bool ExportNvMapHandles;
};
struct SessionContext {
SessionPermissions perms;
bool internalSession;
};
/**
* @brief Permissions that applications have when using the 'nvdrv' service
*/
static constexpr SessionPermissions ApplicationSessionPermissions {
.AccessGpu = true,
.AccessGpuDebug = true,
.AccessVic = true,
.AccessVideoDecoder = true,
.ModifyGraphicsMargin = true
};
/**
* @brief A bitfield struct that unpacks an ioctl number, used as an alternative to Linux's macros
*/
union IoctlDescriptor {
struct {
u8 function; //!< The function number corresponding to a specific call in the driver
i8 magic; //!< Unique to each driver
u16 size : 14; //!< Size of the argument buffer
bool in : 1; //!< Guest is writing, we are reading
bool out : 1; //!< Guest is reading, we are writing
};
u32 raw;
};
static_assert(sizeof(IoctlDescriptor) == sizeof(u32));
/**
* @brief NvRm result codes that are translated from the POSIX error codes used internally
* @url https://switchbrew.org/wiki/NV_services#NvError
*/
enum class NvResult : i32 {
Success = 0x0,
NotImplemented = 0x1,
NotSupported = 0x2,
NotInitialized = 0x3,
BadParameter = 0x4,
Timeout = 0x5,
InsufficientMemory = 0x6,
ReadOnlyAttribute = 0x7,
InvalidState = 0x8,
InvalidAddress = 0x9,
InvalidSize = 0xA,
BadValue = 0xB,
AlreadyAllocated = 0xD,
Busy = 0xE,
ResourceError = 0xF,
CountMismatch = 0x10,
Overflow = 0x11,
FileOperationFailed = 0x30003,
AccessDenied = 0x30010,
IoctlFailed = 0x3000F
};
template<typename ValueType>
using NvResultValue = ResultValue<ValueType, NvResult>;
}