libnx/nx/include/switch/ipc.h

44 lines
1.0 KiB
C

typedef struct {
size_t NumSend; // A
size_t NumRecv; // B
size_t NumStaticSend; // X
size_t NumStaticRecv; // C
void* Buffers[8];
size_t Sizes[8];
u8 Flags[8];
bool SendPid;
size_t NumHandles;
Handle Handles[8];
} IpcCommand;
static inline void ipcInitialize(IpcCommand* cmd) {
cmd->NumSend = 0;
cmd->NumRecv = 0;
cmd->NumStaticSend = 0;
cmd->NumStaticRecv = 0;
cmd->SendPid = false;
cmd->NumHandles = 0;
}
static inline void ipcAddSendBuffer(IpcCommand* cmd, void* buffer, size_t size, u8 Flags) {
size_t off = cmd->NumSend;
cmd->Buffers[off] = buffer;
cmd->Sizes[off] = size;
cmd->Flags[off] = flags;
cmd->NumSend++;
}
static inline void ipcAddRecvBuffer(IpcCommand* cmd, void* buffer, size_t size, u8 Flags) {
size_t off = cmd->NumSend + cmd->NumRecv;
cmd->Buffers[off] = buffer;
cmd->Sizes[off] = size;
cmd->Flags[off] = flags;
cmd->NumRecv++;
}
static inline void ipcSendPid(IpcCommand* cmd) {
cmd->SendPid = true;
}