Difference between revisions of "IOS/Resource request"
< IOS
Jump to navigation
Jump to search
(New page: struct ios_ressource_request { enum IOS_ressouce_cmd cmd; →... to be continued: }; enum IOS_ressouce_cmd { IOS_CMD_OPEN = 1, IOS_CMD_CLOSE = 2, IOS_CMD...) |
(ios actually uses a lot more of the data then we thought) |
||
(12 intermediate revisions by 6 users not shown) | |||
Line 1: | Line 1: | ||
− | + | <source lang="c"> | |
− | + | // For IPCCommandType, IOSOpenMode and SeekMode: | |
− | + | // Copyright 2008 Dolphin Emulator Project | |
− | + | // Licensed under GPLv2+ | |
+ | #include <stddef.h> | ||
− | + | typedef int32_t s32; | |
− | + | typedef uint32_t u32; | |
− | + | typedef uint16_t u16; | |
− | + | typedef uint8_t u8; | |
− | + | ||
− | + | enum IPCCommandType : u32 | |
− | + | { | |
− | + | IPC_CMD_OPEN = 1, | |
− | } | + | IPC_CMD_CLOSE = 2, |
+ | IPC_CMD_READ = 3, | ||
+ | IPC_CMD_WRITE = 4, | ||
+ | IPC_CMD_SEEK = 5, | ||
+ | IPC_CMD_IOCTL = 6, | ||
+ | IPC_CMD_IOCTLV = 7, | ||
+ | IPC_REPLY = 8, | ||
+ | IPC_INTERRUPT = 9, | ||
+ | }; | ||
+ | |||
+ | enum IOSOpenMode : s32 | ||
+ | { | ||
+ | IOS_OPEN_READ = 1, | ||
+ | IOS_OPEN_WRITE = 2, | ||
+ | IOS_OPEN_RW = (IOS_OPEN_READ | IOS_OPEN_WRITE) | ||
+ | }; | ||
+ | |||
+ | struct IOSResourceOpenRequest | ||
+ | { | ||
+ | const u8* path; | ||
+ | IOSOpenMode flags; | ||
+ | u32 uid; // some sort of ID (UID/PID?) | ||
+ | u16 gid; // probably gid based on the SetGid syscall | ||
+ | }; | ||
+ | |||
+ | struct IOSResourceCloseRequest | ||
+ | { | ||
+ | }; | ||
+ | |||
+ | struct IOSResourceReadWriteRequest | ||
+ | { | ||
+ | u8* data; | ||
+ | u32 length; | ||
+ | }; | ||
+ | |||
+ | enum SeekMode : u32 | ||
+ | { | ||
+ | IOS_SEEK_SET = 0, | ||
+ | IOS_SEEK_CUR = 1, | ||
+ | IOS_SEEK_END = 2, | ||
+ | }; | ||
+ | |||
+ | struct IOSResourceSeekRequest | ||
+ | { | ||
+ | u32 offset; | ||
+ | SeekMode mode; | ||
+ | }; | ||
+ | |||
+ | struct IOSResourceIOCtlRequest | ||
+ | { | ||
+ | u32 request; | ||
+ | u8* in; | ||
+ | u32 in_size; | ||
+ | u8* out; | ||
+ | u32 out_size; | ||
+ | }; | ||
+ | |||
+ | struct IOVector | ||
+ | { | ||
+ | u8* base; | ||
+ | u32 length; | ||
+ | }; | ||
+ | |||
+ | struct IOSResourceIOCtlVRequest | ||
+ | { | ||
+ | u32 request; | ||
+ | u32 in_count; | ||
+ | u32 io_count; | ||
+ | IOVector* vectors; | ||
+ | }; | ||
+ | |||
+ | union IOSResourceArgs | ||
+ | { | ||
+ | IOSResourceOpenRequest open; | ||
+ | IOSResourceCloseRequest close; | ||
+ | IOSResourceReadWriteRequest read; | ||
+ | IOSResourceReadWriteRequest write; | ||
+ | IOSResourceSeekRequest seek; | ||
+ | IOSResourceIOCtlRequest ioctl; | ||
+ | IOSResourceIOCtlVRequest ioctlv; | ||
+ | }; | ||
+ | |||
+ | struct IOSRequest | ||
+ | { | ||
+ | IPCCommandType cmd; | ||
+ | s32 ret; | ||
+ | u32 fd; | ||
+ | IOSResourceArgs args; | ||
+ | }; | ||
+ | |||
+ | |||
+ | struct IOSMessage | ||
+ | { | ||
+ | IOSRequest request; | ||
+ | void *callback; | ||
+ | u32 caller_data; | ||
+ | u32 relaunch; | ||
+ | }; | ||
+ | |||
+ | |||
+ | </source> | ||
+ | |||
+ | [[Category:IOS]] |
Latest revision as of 14:49, 16 January 2023
// For IPCCommandType, IOSOpenMode and SeekMode:
// Copyright 2008 Dolphin Emulator Project
// Licensed under GPLv2+
#include <stddef.h>
typedef int32_t s32;
typedef uint32_t u32;
typedef uint16_t u16;
typedef uint8_t u8;
enum IPCCommandType : u32
{
IPC_CMD_OPEN = 1,
IPC_CMD_CLOSE = 2,
IPC_CMD_READ = 3,
IPC_CMD_WRITE = 4,
IPC_CMD_SEEK = 5,
IPC_CMD_IOCTL = 6,
IPC_CMD_IOCTLV = 7,
IPC_REPLY = 8,
IPC_INTERRUPT = 9,
};
enum IOSOpenMode : s32
{
IOS_OPEN_READ = 1,
IOS_OPEN_WRITE = 2,
IOS_OPEN_RW = (IOS_OPEN_READ | IOS_OPEN_WRITE)
};
struct IOSResourceOpenRequest
{
const u8* path;
IOSOpenMode flags;
u32 uid; // some sort of ID (UID/PID?)
u16 gid; // probably gid based on the SetGid syscall
};
struct IOSResourceCloseRequest
{
};
struct IOSResourceReadWriteRequest
{
u8* data;
u32 length;
};
enum SeekMode : u32
{
IOS_SEEK_SET = 0,
IOS_SEEK_CUR = 1,
IOS_SEEK_END = 2,
};
struct IOSResourceSeekRequest
{
u32 offset;
SeekMode mode;
};
struct IOSResourceIOCtlRequest
{
u32 request;
u8* in;
u32 in_size;
u8* out;
u32 out_size;
};
struct IOVector
{
u8* base;
u32 length;
};
struct IOSResourceIOCtlVRequest
{
u32 request;
u32 in_count;
u32 io_count;
IOVector* vectors;
};
union IOSResourceArgs
{
IOSResourceOpenRequest open;
IOSResourceCloseRequest close;
IOSResourceReadWriteRequest read;
IOSResourceReadWriteRequest write;
IOSResourceSeekRequest seek;
IOSResourceIOCtlRequest ioctl;
IOSResourceIOCtlVRequest ioctlv;
};
struct IOSRequest
{
IPCCommandType cmd;
s32 ret;
u32 fd;
IOSResourceArgs args;
};
struct IOSMessage
{
IOSRequest request;
void *callback;
u32 caller_data;
u32 relaunch;
};