Files
Elijah Thomas 26af4db82d update from dtk-template - clangd :) (#66)
* update from dtk-template and start work towards using clangd

* include <a> -> "a"

* Update build.yml

* remove/add non-trivial class in union warning
2024-10-16 15:36:02 -04:00

153 lines
4.1 KiB
C

#ifndef RVL_SDK_IPC_CLT_H
#define RVL_SDK_IPC_CLT_H
#include "common.h"
#include "rvl/OS.h" // IWYU pragma: export
#ifdef __cplusplus
extern "C" {
#endif
/**
* Documentation from:
* https://wiibrew.org/wiki/IOS
* https://wiibrew.org/wiki/IOS/Resource_request
* http://wiibrew.org/wiki/IPC_(SDK)
*/
typedef enum {
IPC_RESULT_FATAL_ERROR = -119,
IPC_RESULT_BUSY,
IPC_RESULT_NOTEMPTY = -115,
IPC_RESULT_ECC_CRIT,
IPC_RESULT_OPENFD = -111,
IPC_RESULT_MAXFD = -109,
IPC_RESULT_MAXBLOCKS,
IPC_RESULT_MAXFILES,
IPC_RESULT_NOEXISTS,
IPC_RESULT_EXISTS,
IPC_RESULT_CORRUPT = -103,
IPC_RESULT_ACCESS,
IPC_RESULT_INVALID,
IPC_RESULT_ALLOC_FAILED = -22,
IPC_RESULT_ECC_CRIT_INTERNAL = -12,
IPC_RESULT_BUSY_INTERNAL = -8,
IPC_RESULT_NOEXISTS_INTERNAL = -6,
IPC_RESULT_CONN_MAX_INTERNAL = -5,
IPC_RESULT_INVALID_INTERNAL = -4,
IPC_RESULT_EXISTS_INTERNAL = -2,
IPC_RESULT_ACCESS_INTERNAL = -1,
IPC_RESULT_OK = 0
} IPCResult;
typedef enum {
IPC_REQ_NONE,
IPC_REQ_OPEN,
IPC_REQ_CLOSE,
IPC_REQ_READ,
IPC_REQ_WRITE,
IPC_REQ_SEEK,
IPC_REQ_IOCTL,
IPC_REQ_IOCTLV
} IPCRequestType;
typedef enum {
IPC_OPEN_NONE = 0,
IPC_OPEN_READ = (1 << 0),
IPC_OPEN_WRITE = (1 << 1),
IPC_OPEN_RW = IPC_OPEN_READ | IPC_OPEN_WRITE
} IPCOpenMode;
typedef enum {
IPC_SEEK_BEG,
IPC_SEEK_CUR,
IPC_SEEK_END,
} IPCSeekMode;
typedef s32 (*IPCAsyncCallback)(s32 result, void *arg);
typedef struct IPCIOVector {
void *base; // at 0x0
u32 length; // at 0x4
} IPCIOVector;
typedef struct IPCOpenArgs {
const char *path; // at 0x0
IPCOpenMode mode; // at 0x4
} IPCOpenArgs;
typedef struct IPCReadWriteArgs {
void *data; // at 0x0
u32 length; // at 0x4
} IPCReadWriteArgs;
typedef struct IPCSeekArgs {
s32 offset; // at 0x0
IPCSeekMode mode; // at 0x4
} IPCSeekArgs;
typedef struct IPCIoctlArgs {
s32 type; // at 0x0
void *in; // at 0x4
s32 inSize; // at 0x8
void *out; // at 0xC
s32 outSize; // at 0x10
} IPCIoctlArgs;
typedef struct IPCIoctlvArgs {
s32 type; // at 0x0
u32 inCount; // at 0x4
u32 outCount; // at 0x8
IPCIOVector *vectors; // at 0xC
} IPCIoctlvArgs;
typedef struct IPCRequest {
IPCRequestType type; // at 0x0
s32 ret; // at 0x4
s32 fd; // at 0x8
union {
IPCOpenArgs open;
IPCReadWriteArgs rw;
IPCSeekArgs seek;
IPCIoctlArgs ioctl;
IPCIoctlvArgs ioctlv;
}; // at 0xC
} IPCRequest;
typedef struct IPCRequestEx {
IPCRequest base; // at 0x0
IPCAsyncCallback callback; // at 0x20
void *callbackArg; // at 0x24
BOOL reboot; // at 0x28
OSThreadQueue queue; // at 0x2C
char padding[64 - 0x34];
} IPCRequestEx;
s32 IPCCltInit(void);
s32 IOS_OpenAsync(const char *path, IPCOpenMode mode, IPCAsyncCallback callback, void *callbackArg);
s32 IOS_Open(const char *path, IPCOpenMode mode);
s32 IOS_CloseAsync(s32 fd, IPCAsyncCallback callback, void *callbackArg);
s32 IOS_Close(s32 fd);
s32 IOS_ReadAsync(s32 fd, void *buf, s32 len, IPCAsyncCallback callback, void *callbackArg);
s32 IOS_Read(s32 fd, void *buf, s32 len);
s32 IOS_WriteAsync(s32 fd, const void *buf, s32 len, IPCAsyncCallback callback, void *callbackArg);
s32 IOS_Write(s32 fd, const void *buf, s32 len);
s32 IOS_SeekAsync(s32 fd, s32 offset, IPCSeekMode mode, IPCAsyncCallback callback, void *callbackArg);
s32 IOS_Seek(s32 fd, s32 offset, IPCSeekMode mode);
s32 IOS_IoctlAsync(
s32 fd, s32 type, void *in, s32 inSize, void *out, s32 outSize, IPCAsyncCallback callback, void *callbackArg
);
s32 IOS_Ioctl(s32 fd, s32 type, void *in, s32 inSize, void *out, s32 outSize);
s32 IOS_IoctlvAsync(
s32 fd, s32 type, s32 inCount, s32 outCount, IPCIOVector *vectors, IPCAsyncCallback callback, void *callbackArg
);
s32 IOS_Ioctlv(s32 fd, s32 type, s32 inCount, s32 outCount, IPCIOVector *vectors);
s32 IOS_IoctlvReboot(s32 fd, s32 type, s32 inCount, s32 outCount, IPCIOVector *vectors);
#ifdef __cplusplus
}
#endif
#endif