mirror of
https://github.com/skyline-emu/skyline.git
synced 2024-11-26 08:04:19 +01:00
s/Host1X/Host1x/ as per Nvidia naming
This commit is contained in:
parent
dbfb1cfe20
commit
ad900aba7a
@ -59,7 +59,7 @@ namespace skyline::service::hosbinder {
|
||||
/**
|
||||
* @brief Wait on all native fences in this Android fence till they're signalled
|
||||
*/
|
||||
void Wait(soc::host1x::Host1X &host1x) const {
|
||||
void Wait(soc::host1x::Host1x &host1x) const {
|
||||
if (fenceCount > fences.size())
|
||||
throw exception("Wait has larger fence count ({}) than storage size ({})", fenceCount, fences.size());
|
||||
for (auto it{fences.begin()}, end{fences.begin() + fenceCount}; it < end; it++)
|
||||
|
@ -17,12 +17,12 @@ namespace skyline::service::nvdrv::device::nvhost {
|
||||
state = State::Signalled;
|
||||
}
|
||||
|
||||
void Ctrl::SyncpointEvent::Cancel(soc::host1x::Host1X &host1x) {
|
||||
void Ctrl::SyncpointEvent::Cancel(soc::host1x::Host1x &host1x) {
|
||||
host1x.syncpoints.at(fence.id).DeregisterWaiter(waiterHandle);
|
||||
waiterHandle = {};
|
||||
}
|
||||
|
||||
void Ctrl::SyncpointEvent::RegisterWaiter(soc::host1x::Host1X &host1x, const Fence &pFence) {
|
||||
void Ctrl::SyncpointEvent::RegisterWaiter(soc::host1x::Host1x &host1x, const Fence &pFence) {
|
||||
fence = pFence;
|
||||
state = State::Waiting;
|
||||
waiterHandle = host1x.syncpoints.at(fence.id).RegisterWaiter(fence.threshold, [this] { Signal(); });
|
||||
|
@ -63,13 +63,13 @@ namespace skyline::service::nvdrv::device::nvhost {
|
||||
* @brief Removes any wait requests on a syncpoint event and resets its state
|
||||
* @note Accesses to this function for a specific event should be locked
|
||||
*/
|
||||
void Cancel(soc::host1x::Host1X &host1x);
|
||||
void Cancel(soc::host1x::Host1x &host1x);
|
||||
|
||||
/**
|
||||
* @brief Asynchronously waits on a syncpoint event using the given fence
|
||||
* @note Accesses to this function for a specific event should be locked
|
||||
*/
|
||||
void RegisterWaiter(soc::host1x::Host1X &host1x, const Fence &fence);
|
||||
void RegisterWaiter(soc::host1x::Host1x &host1x, const Fence &fence);
|
||||
|
||||
bool IsInUse();
|
||||
};
|
||||
|
@ -6,7 +6,7 @@
|
||||
#include "host1x_channel.h"
|
||||
|
||||
namespace skyline::service::nvdrv::device::nvhost {
|
||||
Host1XChannel::Host1XChannel(const DeviceState &state,
|
||||
Host1xChannel::Host1xChannel(const DeviceState &state,
|
||||
Driver &driver,
|
||||
Core &core,
|
||||
const SessionContext &ctx,
|
||||
@ -16,12 +16,12 @@ namespace skyline::service::nvdrv::device::nvhost {
|
||||
state.soc->host1x.channels[static_cast<size_t>(channelType)].Start();
|
||||
}
|
||||
|
||||
PosixResult Host1XChannel::SetNvmapFd(In<FileDescriptor> fd) {
|
||||
PosixResult Host1xChannel::SetNvmapFd(In<FileDescriptor> fd) {
|
||||
state.logger->Debug("fd: {}", fd);
|
||||
return PosixResult::Success;
|
||||
}
|
||||
|
||||
PosixResult Host1XChannel::Submit(span<SubmitCmdBuf> cmdBufs,
|
||||
PosixResult Host1xChannel::Submit(span<SubmitCmdBuf> cmdBufs,
|
||||
span<SubmitReloc> relocs, span<u32> relocShifts,
|
||||
span<SubmitSyncpointIncr> syncpointIncrs, span<u32> fenceThresholds) {
|
||||
state.logger->Debug("numCmdBufs: {}, numRelocs: {}, numSyncpointIncrs: {}, numFenceThresholds: {}",
|
||||
@ -58,7 +58,7 @@ namespace skyline::service::nvdrv::device::nvhost {
|
||||
return PosixResult::Success;
|
||||
}
|
||||
|
||||
PosixResult Host1XChannel::GetSyncpoint(In<u32> channelSyncpointIdx, Out<u32> syncpointId) {
|
||||
PosixResult Host1xChannel::GetSyncpoint(In<u32> channelSyncpointIdx, Out<u32> syncpointId) {
|
||||
state.logger->Debug("channelSyncpointIdx: {}", channelSyncpointIdx);
|
||||
|
||||
if (channelSyncpointIdx > 0)
|
||||
@ -73,18 +73,18 @@ namespace skyline::service::nvdrv::device::nvhost {
|
||||
return PosixResult::Success;
|
||||
}
|
||||
|
||||
PosixResult Host1XChannel::GetWaitBase(In<core::ChannelType> pChannelType, Out<u32> waitBase) {
|
||||
PosixResult Host1xChannel::GetWaitBase(In<core::ChannelType> pChannelType, Out<u32> waitBase) {
|
||||
state.logger->Debug("channelType: {}", static_cast<u32>(pChannelType));
|
||||
waitBase = 0;
|
||||
return PosixResult::Success;
|
||||
}
|
||||
|
||||
PosixResult Host1XChannel::SetSubmitTimeout(In<u32> timeout) {
|
||||
PosixResult Host1xChannel::SetSubmitTimeout(In<u32> timeout) {
|
||||
state.logger->Debug("timeout: {}", timeout);
|
||||
return PosixResult::Success;
|
||||
}
|
||||
|
||||
PosixResult Host1XChannel::MapBuffer(u8 compressed, span<BufferHandle> handles) {
|
||||
PosixResult Host1xChannel::MapBuffer(u8 compressed, span<BufferHandle> handles) {
|
||||
state.logger->Debug("compressed: {}", compressed);
|
||||
|
||||
for (auto &bufferHandle : handles) {
|
||||
@ -95,7 +95,7 @@ namespace skyline::service::nvdrv::device::nvhost {
|
||||
return PosixResult::Success;
|
||||
}
|
||||
|
||||
PosixResult Host1XChannel::UnmapBuffer(u8 compressed, span<BufferHandle> handles) {
|
||||
PosixResult Host1xChannel::UnmapBuffer(u8 compressed, span<BufferHandle> handles) {
|
||||
state.logger->Debug("compressed: {}", compressed);
|
||||
|
||||
for (auto &bufferHandle : handles) {
|
||||
@ -106,27 +106,27 @@ namespace skyline::service::nvdrv::device::nvhost {
|
||||
return PosixResult::Success;
|
||||
}
|
||||
#include <services/nvdrv/devices/deserialisation/macro_def.inc>
|
||||
static constexpr u32 Host1XChannelMagic{0x00};
|
||||
static constexpr u32 Host1xChannelMagic{0x00};
|
||||
static constexpr u32 GpuChannelMagic{0x48}; //!< Used for SetNvmapFd which is needed in both GPU and host1x channels
|
||||
|
||||
VARIABLE_IOCTL_HANDLER_FUNC(Host1XChannel, ({
|
||||
VARIABLE_IOCTL_HANDLER_FUNC(Host1xChannel, ({
|
||||
IOCTL_CASE_ARGS(IN, SIZE(0x4), MAGIC(GpuChannelMagic), FUNC(0x1),
|
||||
SetNvmapFd, ARGS(In<FileDescriptor>))
|
||||
IOCTL_CASE_ARGS(INOUT, SIZE(0x8), MAGIC(Host1XChannelMagic), FUNC(0x2),
|
||||
IOCTL_CASE_ARGS(INOUT, SIZE(0x8), MAGIC(Host1xChannelMagic), FUNC(0x2),
|
||||
GetSyncpoint, ARGS(In<u32>, Out<u32>))
|
||||
IOCTL_CASE_ARGS(INOUT, SIZE(0x8), MAGIC(Host1XChannelMagic), FUNC(0x3),
|
||||
IOCTL_CASE_ARGS(INOUT, SIZE(0x8), MAGIC(Host1xChannelMagic), FUNC(0x3),
|
||||
GetWaitBase, ARGS(In<core::ChannelType>, Out<u32>))
|
||||
IOCTL_CASE_ARGS(IN, SIZE(0x4), MAGIC(Host1XChannelMagic), FUNC(0x7),
|
||||
IOCTL_CASE_ARGS(IN, SIZE(0x4), MAGIC(Host1xChannelMagic), FUNC(0x7),
|
||||
SetSubmitTimeout, ARGS(In<u32>))
|
||||
}), ({
|
||||
VARIABLE_IOCTL_CASE_ARGS(INOUT, MAGIC(Host1XChannelMagic), FUNC(0x1),
|
||||
VARIABLE_IOCTL_CASE_ARGS(INOUT, MAGIC(Host1xChannelMagic), FUNC(0x1),
|
||||
Submit, ARGS(Save<u32, 0>, Save<u32, 1>, Save<u32, 2>, Save<u32, 3>,
|
||||
SlotSizeSpan<SubmitCmdBuf, 0>,
|
||||
SlotSizeSpan<SubmitReloc, 1>, SlotSizeSpan<u32, 1>,
|
||||
SlotSizeSpan<SubmitSyncpointIncr, 2>, SlotSizeSpan<u32, 3>))
|
||||
VARIABLE_IOCTL_CASE_ARGS(INOUT, MAGIC(Host1XChannelMagic), FUNC(0x9),
|
||||
VARIABLE_IOCTL_CASE_ARGS(INOUT, MAGIC(Host1xChannelMagic), FUNC(0x9),
|
||||
MapBuffer, ARGS(Save<u32, 0>, Pad<u32>, In<u8>, Pad<u8, 3>, SlotSizeSpan<BufferHandle, 0>))
|
||||
VARIABLE_IOCTL_CASE_ARGS(INOUT, MAGIC(Host1XChannelMagic), FUNC(0xA),
|
||||
VARIABLE_IOCTL_CASE_ARGS(INOUT, MAGIC(Host1xChannelMagic), FUNC(0xA),
|
||||
UnmapBuffer, ARGS(Save<u32, 0>, Pad<u32>, In<u8>, Pad<u8, 3>, SlotSizeSpan<BufferHandle, 0>))
|
||||
}))
|
||||
#include <services/nvdrv/devices/deserialisation/macro_undef.inc>
|
||||
|
@ -9,10 +9,10 @@
|
||||
|
||||
namespace skyline::service::nvdrv::device::nvhost {
|
||||
/**
|
||||
* @brief nvhost::Host1XChannel is used by applications to interface with host1x channels, such as VIC and NVDEC
|
||||
* @brief nvhost::Host1xChannel is used by applications to interface with host1x channels, such as VIC and NVDEC
|
||||
* @url https://switchbrew.org/wiki/NV_services#Channels
|
||||
*/
|
||||
class Host1XChannel : public NvDevice {
|
||||
class Host1xChannel : public NvDevice {
|
||||
private:
|
||||
core::ChannelType channelType; //!< The specific host1x channel that this instance refers to
|
||||
std::mutex channelMutex; //!< Synchronises submit operations
|
||||
@ -55,7 +55,7 @@ namespace skyline::service::nvdrv::device::nvhost {
|
||||
u32 address; //!< The output IOVA that the handle was pinned too
|
||||
};
|
||||
|
||||
Host1XChannel(const DeviceState &state,
|
||||
Host1xChannel(const DeviceState &state,
|
||||
Driver &driver,
|
||||
Core &core,
|
||||
const SessionContext &ctx,
|
||||
|
@ -45,13 +45,13 @@ namespace skyline::service::nvdrv {
|
||||
}
|
||||
|
||||
if (ctx.perms.AccessJpeg)
|
||||
DEVICE_SWITCH(DEVICE_CASE("/dev/nvhost-nvjpg", nvhost::Host1XChannel, core::ChannelType::NvJpg))
|
||||
DEVICE_SWITCH(DEVICE_CASE("/dev/nvhost-nvjpg", nvhost::Host1xChannel, core::ChannelType::NvJpg))
|
||||
|
||||
if (ctx.perms.AccessVic)
|
||||
DEVICE_SWITCH(DEVICE_CASE("/dev/nvhost-vic", nvhost::Host1XChannel, core::ChannelType::Vic))
|
||||
DEVICE_SWITCH(DEVICE_CASE("/dev/nvhost-vic", nvhost::Host1xChannel, core::ChannelType::Vic))
|
||||
|
||||
if (ctx.perms.AccessVideoDecoder)
|
||||
DEVICE_SWITCH(DEVICE_CASE("/dev/nvhost-nvdec", nvhost::Host1XChannel, core::ChannelType::NvDec))
|
||||
DEVICE_SWITCH(DEVICE_CASE("/dev/nvhost-nvdec", nvhost::Host1xChannel, core::ChannelType::NvDec))
|
||||
|
||||
#undef DEVICE_CASE
|
||||
#undef DEVICE_SWITCH
|
||||
|
@ -15,7 +15,7 @@ namespace skyline::soc {
|
||||
class SOC {
|
||||
public:
|
||||
SMMU smmu;
|
||||
host1x::Host1X host1x;
|
||||
host1x::Host1x host1x;
|
||||
|
||||
SOC(const DeviceState &state) : host1x(state) {}
|
||||
};
|
||||
|
@ -13,11 +13,11 @@ namespace skyline::soc::host1x {
|
||||
* @brief An abstraction for the graphics host, this handles DMA on behalf of the CPU when communicating to it's clients alongside handling syncpts
|
||||
* @note This is different from the GM20B Host, it serves a similar function and has an interface for accessing host1x syncpts
|
||||
*/
|
||||
class Host1X {
|
||||
class Host1x {
|
||||
public:
|
||||
SyncpointSet syncpoints;
|
||||
std::array<ChannelCommandFifo, ChannelCount> channels;
|
||||
|
||||
Host1X(const DeviceState &state) : channels{util::MakeFilledArray<ChannelCommandFifo, ChannelCount>(state, syncpoints)} {}
|
||||
Host1x(const DeviceState &state) : channels{util::MakeFilledArray<ChannelCommandFifo, ChannelCount>(state, syncpoints)} {}
|
||||
};
|
||||
}
|
||||
|
@ -6,9 +6,9 @@
|
||||
#include "host1x.h"
|
||||
|
||||
namespace skyline::soc::host1x {
|
||||
Host1XClass::Host1XClass(const DeviceState &state, SyncpointSet &syncpoints) : state(state), syncpoints(syncpoints) {}
|
||||
Host1xClass::Host1xClass(const DeviceState &state, SyncpointSet &syncpoints) : state(state), syncpoints(syncpoints) {}
|
||||
|
||||
void Host1XClass::CallMethod(u32 method, u32 argument) {
|
||||
void Host1xClass::CallMethod(u32 method, u32 argument) {
|
||||
constexpr static u32 LoadSyncpointPayload32MethodId{0x4E}; //!< See '14.3.2.12 32-Bit Sync Point Comparison Methods' in TRM
|
||||
constexpr static u32 WaitSyncpoint32MethodId{0x50}; //!< As above
|
||||
|
||||
|
@ -10,14 +10,14 @@ namespace skyline::soc::host1x {
|
||||
/**
|
||||
* @brief A class internal to Host1x, used for performing syncpoint waits and other general operations
|
||||
*/
|
||||
class Host1XClass {
|
||||
class Host1xClass {
|
||||
private:
|
||||
const DeviceState &state;
|
||||
SyncpointSet &syncpoints;
|
||||
u32 syncpointPayload{}; //!< Holds the current payload for the 32-bit syncpoint comparison methods
|
||||
|
||||
public:
|
||||
Host1XClass(const DeviceState &state, SyncpointSet &syncpoints);
|
||||
Host1xClass(const DeviceState &state, SyncpointSet &syncpoints);
|
||||
|
||||
void CallMethod(u32 method, u32 argument);
|
||||
};
|
||||
|
@ -26,7 +26,7 @@ namespace skyline::soc::host1x {
|
||||
std::thread thread; //!< The thread that manages processing of pushbuffers within gathers
|
||||
std::mutex threadStartMutex; //!< Protects the thread from being started multiple times
|
||||
|
||||
Host1XClass host1XClass; //!< The internal Host1x class, used for performing syncpoint waits and other general operations
|
||||
Host1xClass host1XClass; //!< The internal Host1x class, used for performing syncpoint waits and other general operations
|
||||
TegraHostInterface<NvDecClass> nvDecClass; //!< The THI wrapped NVDEC class for video decoding
|
||||
TegraHostInterface<VicClass> vicClass; //!< The THI wrapped VIC class for acceleration of image operations
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user