mirror of
https://github.com/zeldaret/ss
synced 2026-05-24 07:10:53 -04:00
26af4db82d
* update from dtk-template and start work towards using clangd * include <a> -> "a" * Update build.yml * remove/add non-trivial class in union warning
153 lines
4.1 KiB
C
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
|