libnx/nx/source/nvidia/channel.c

48 lines
904 B
C

#include "types.h"
#include "result.h"
#include "kernel/svc.h"
#include "services/nv.h"
#include "nvidia/ioctl.h"
#include "nvidia/map.h"
#include "nvidia/channel.h"
Result nvChannelCreate(NvChannel* c, const char* dev)
{
Result rc;
c->has_init = true;
rc = nvOpen(&c->fd, dev);
if (R_FAILED(rc))
c->fd = -1;
if (R_SUCCEEDED(rc))
rc = nvioctlChannel_SetNvmapFd(c->fd, nvMapGetFd());
if (R_FAILED(rc))
nvChannelClose(c);
return rc;
}
void nvChannelClose(NvChannel* c)
{
if (!c->has_init)
return;
if (c->fd != -1) {
nvClose(c->fd);
c->fd = -1;
}
c->has_init = false;
}
Result nvChannelSetPriority(NvChannel* c, NvChannelPriority prio) {
return nvioctlChannel_SetPriority(c->fd, prio);
}
Result nvChannelSetTimeout(NvChannel* c, u32 timeout) {
return nvioctlChannel_SetTimeout(c->fd, timeout);
}