diff options
| author | TakaRikka <38417346+TakaRikka@users.noreply.github.com> | 2025-12-08 02:44:29 -0800 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-12-08 12:44:29 +0200 |
| commit | 353721578d0ec7b49a4d7b56b0641acce8d8a52f (patch) | |
| tree | 6ad8854c362ef65d04d62ced28ec040e7a2135e1 /include | |
| parent | 251d49c6f14151b842b7ceb9f2dfc5e0a0e69fc5 (diff) | |
shieldD revolution dvd/nand mostly done (#2922)
* shieldD revo dvd mostly done
* shieldD revo nand mostly done
* shieldD revo fs mostly done
* shieldD revo ipc mostly done
* shieldD revo sdk pad done
Diffstat (limited to 'include')
| -rw-r--r-- | include/revolution/dvd.h | 111 | ||||
| -rw-r--r-- | include/revolution/fs.h | 100 | ||||
| -rw-r--r-- | include/revolution/ipc.h | 24 | ||||
| -rw-r--r-- | include/revolution/ipc/ipcProfile.h | 19 | ||||
| -rw-r--r-- | include/revolution/ipc/ipcclt.h | 37 | ||||
| -rw-r--r-- | include/revolution/ipc/memory.h | 18 | ||||
| -rw-r--r-- | include/revolution/nand.h | 91 | ||||
| -rw-r--r-- | include/revolution/os.h | 20 | ||||
| -rw-r--r-- | include/revolution/os/OSNet.h | 29 | ||||
| -rw-r--r-- | include/revolution/os/OSPlayRecord.h | 8 | ||||
| -rw-r--r-- | include/revolution/os/OSReset.h | 4 | ||||
| -rw-r--r-- | include/revolution/private/iosresclt.h | 9 | ||||
| -rw-r--r-- | include/revolution/private/iosrestypes.h | 14 |
13 files changed, 414 insertions, 70 deletions
diff --git a/include/revolution/dvd.h b/include/revolution/dvd.h index 3ab240ec37..5dc9067cd8 100644 --- a/include/revolution/dvd.h +++ b/include/revolution/dvd.h @@ -66,6 +66,8 @@ extern "C" { #define DVD_COMMAND_BS_CHANGE_DISK 15 #define DVD_COMMAND_UNK_16 16 +#define DVD_RESETCOVER_TIMELAG_TICKS2 OSMillisecondsToTicks(100) + typedef struct DVDDiskID { char gameName[4]; char company[2]; @@ -137,6 +139,29 @@ typedef struct DVDDriveInfo { /* 0x08 */ u8 padding[24]; } DVDDriveInfo; +typedef struct DVDCommandInfo DVDCommandInfo; +struct DVDCommandInfo { + u32 command; + u32 offset; + u32 length; + u32 intType; + u32 tick; +}; + +typedef struct DVDErrorInfo DVDErrorInfo; +struct DVDErrorInfo { + char gameName[4]; + u8 diskNumber; + u8 gameVersion; + u8 reserved0[2]; + u32 error; + u32 dateTime; + u32 status; + u32 unk_0x14; + u32 nextOffset; + DVDCommandInfo lastCommand[5]; +}; + typedef struct DVDGamePartition { ESTicket ticket; u32 tmdSize; @@ -157,25 +182,50 @@ typedef struct DVDGameTOC { DVDPartitionInfo* partitionInfos; } DVDGameTOC; +#define ROUND(n, a) (((u32)(n) + (a)-1) & ~((a)-1)) + +typedef struct DVDPartitionParams DVDPartitionParams; + +struct DVDPartitionParams { + ESTicket ticket; + u8 padding0[ROUND(sizeof(ESTicket), 32) - sizeof(ESTicket)]; + ESTicketView ticketView; + u8 padding1[ROUND(sizeof(ESTicketView), 32) - sizeof(ESTicketView)]; + u32 numTmdBytes; + u8 padding2[28]; + ESTitleMeta tmd; + u8 padding3[ROUND(sizeof(ESTitleMeta), 32) - sizeof(ESTitleMeta)]; + u32 numCertBytes; + u8 padding4[28]; + u8 certificates[4096]; + u32 dataWordOffset; + u8 padding5[28]; + u8 h3Hash[98304]; +}; + +typedef struct diRegVals { + u32 ImmRegVal; + u32 CoverRegVal; + u32 pad[6]; +} diRegVals_t; + +typedef struct diCommand { + u8 theCommand; + u8 pad1[3]; + u32 arg[5]; + u32 pad2[2]; +} diCommand_t; + +typedef struct DVDVideoReportKey { + u8 data[32]; +} DVDVideoReportKey; + // DVD void DVDInit(void); int DVDReadAbsAsyncPrio(DVDCommandBlock* block, void* addr, s32 length, s32 offset, DVDCBCallback callback, s32 prio); int DVDSeekAbsAsyncPrio(DVDCommandBlock* block, s32 offset, DVDCBCallback callback, s32 prio); int DVDReadAbsAsyncForBS(DVDCommandBlock* block, void* addr, s32 length, s32 offset, DVDCBCallback callback); int DVDReadDiskID(DVDCommandBlock* block, DVDDiskID* diskID, DVDCBCallback callback); -int DVDPrepareStreamAbsAsync(DVDCommandBlock* block, u32 length, u32 offset, DVDCBCallback callback); -int DVDCancelStreamAsync(DVDCommandBlock* block, DVDCBCallback callback); -s32 DVDCancelStream(DVDCommandBlock* block); -int DVDStopStreamAtEndAsync(DVDCommandBlock* block, DVDCBCallback callback); -s32 DVDStopStreamAtEnd(DVDCommandBlock* block); -int DVDGetStreamErrorStatusAsync(DVDCommandBlock* block, DVDCBCallback callback); -s32 DVDGetStreamErrorStatus(DVDCommandBlock* block); -int DVDGetStreamPlayAddrAsync(DVDCommandBlock* block, DVDCBCallback callback); -s32 DVDGetStreamPlayAddr(DVDCommandBlock* block); -int DVDGetStreamStartAddrAsync(DVDCommandBlock* block, DVDCBCallback callback); -s32 DVDGetStreamStartAddr(DVDCommandBlock* block); -int DVDGetStreamLengthAsync(DVDCommandBlock* block, DVDCBCallback callback); -s32 DVDGetStreamLength(DVDCommandBlock* block); int DVDChangeDiskAsyncForBS(DVDCommandBlock* block, DVDCBCallback callback); int DVDChangeDiskAsync(DVDCommandBlock* block, DVDDiskID* id, DVDCBCallback callback); s32 DVDChangeDisk(DVDCommandBlock* block, DVDDiskID* id); @@ -191,7 +241,7 @@ BOOL DVDSetAutoInvalidation(BOOL autoInval); void DVDPause(void); void DVDResume(void); int DVDCancelAsync(DVDCommandBlock* block, DVDCBCallback callback); -s32 DVDCancel(volatile DVDCommandBlock* block); +s32 DVDCancel(DVDCommandBlock* block); int DVDCancelAllAsync(DVDCBCallback callback); s32 DVDCancelAll(void); DVDDiskID* DVDGetCurrentDiskID(void); @@ -199,6 +249,7 @@ BOOL DVDCheckDisk(void); // DVD FATAL int DVDSetAutoFatalMessaging(BOOL enable); +BOOL __DVDGetAutoFatalMessaging(void); // DVD FS s32 DVDConvertPathToEntrynum(const char* pathPtr); @@ -218,9 +269,6 @@ int DVDOpenDir(const char* dirName, DVDDir* dir); int DVDReadDir(DVDDir* dir, DVDDirEntry* dirent); int DVDCloseDir(DVDDir* dir); void DVDRewindDir(DVDDir* dir); -void* DVDGetFSTLocation(void); -BOOL DVDPrepareStreamAsync(DVDFileInfo* fileInfo, u32 length, u32 offset, DVDCallback callback); -s32 DVDPrepareStream(DVDFileInfo* fileInfo, u32 length, u32 offset); s32 DVDGetTransferredSize(DVDFileInfo* fileinfo); #define DVDReadAsync(fileInfo, addr, length, offset, callback) \ @@ -233,16 +281,11 @@ DVDDiskID* DVDGenerateDiskID(DVDDiskID* id, const char* game, const char* compan // DVD LOW BOOL DVDLowRead(void* addr, u32 length, u32 offset, DVDLowCallback callback); BOOL DVDLowSeek(u32 offset, DVDLowCallback callback); -BOOL DVDLowWaitCoverClose(DVDLowCallback callback); BOOL DVDLowReadDiskID(DVDDiskID* diskID, DVDLowCallback callback); -BOOL DVDLowStopMotor(DVDLowCallback callback); BOOL DVDLowRequestError(DVDLowCallback callback); BOOL DVDLowInquiry(DVDDriveInfo* info, DVDLowCallback callback); -BOOL DVDLowAudioStream(u32 subcmd, u32 length, u32 offset, DVDLowCallback callback); -BOOL DVDLowRequestAudioStatus(u32 subcmd, DVDLowCallback callback); -BOOL DVDLowAudioBufferConfig(BOOL enable, u32 size, DVDLowCallback callback); -void DVDLowReset(void); -DVDLowCallback DVDLowSetResetCoverCallback(DVDLowCallback callback); +BOOL DVDLowAudioBufferConfig(u8 enable, u32 size, DVDLowCallback callback); +BOOL DVDLowReset(DVDLowCallback callback); BOOL DVDLowBreak(void); DVDLowCallback DVDLowClearCallback(void); u32 DVDLowGetCoverStatus(void); @@ -250,8 +293,24 @@ u32 DVDLowGetCoverStatus(void); // DVD QUEUE void DVDDumpWaitingQueue(void); - -// unsorted revo +// DVD BROADWAY +BOOL DVDLowFinalize(void); +BOOL DVDLowInit(void); +BOOL DVDLowUnmaskStatusInterrupts(void); +BOOL DVDLowMaskCoverInterrupt(void); +BOOL DVDLowClearCoverInterrupt(DVDLowCallback callback); +BOOL DVDLowSetSpinupFlag(u32 spinUp); +u32 DVDLowGetImmBufferReg(void); +BOOL DVDLowSetMaximumRotation(u32 subcmd, DVDLowCallback callback); +u32 DVDLowGetCoverRegister(void); +BOOL DVDLowPrepareCoverRegister(DVDLowCallback callback); +BOOL DVDLowGetNoDiscBufferSizes(const u32 partitionWordOffset, u32* numTmdBytes, u32* numCertBytes, DVDLowCallback callback); +BOOL DVDLowGetNoDiscOpenPartitionParams(const u32 partitionWordOffset, ESTicket* eTicket, u32* numTmdBytes, ESTitleMeta* tmd, u32* numCertBytes, u8* certificates, u32* dataWordOffset, u8* h3HashPtr, DVDLowCallback callback); +BOOL DVDLowReportKey(DVDVideoReportKey* reportKey, u32 format, u32 lsn, DVDLowCallback callback); +u32 DVDLowGetControlRegister(void); +u32 DVDLowGetStatusRegister(void); +BOOL DVDLowPrepareControlRegister(DVDLowCallback callback); +BOOL DVDLowPrepareStatusRegister(DVDLowCallback callback); BOOL DVDLowUnencryptedRead(void*, u32, u32, DVDLowCallback); BOOL DVDLowClosePartition(DVDLowCallback); BOOL DVDLowOpenPartitionWithTmdAndTicketView(const u32, const ESTicketView* const, const u32, const ESTitleMeta* const, const u32, const u8* const, DVDLowCallback); diff --git a/include/revolution/fs.h b/include/revolution/fs.h new file mode 100644 index 0000000000..b6019c9743 --- /dev/null +++ b/include/revolution/fs.h @@ -0,0 +1,100 @@ +#ifndef _REVOLUTION_FS_H_ +#define _REVOLUTION_FS_H_ + +#include <revolution/types.h> +#include <revolution/private/iostypes.h> +#include <revolution/private/iosrestypes.h> + +#ifdef __cplusplus +extern "C" { +#endif + +#define ISFS_ERROR_OK 0 +#define ISFS_ERROR_INVALID -101 +#define ISFS_ERROR_ACCESS -102 +#define ISFS_ERROR_CORRUPT -103 +#define ISFS_ERROR_NOTREADY -104 +#define ISFS_ERROR_EXISTS -105 +#define ISFS_ERROR_NOEXISTS -106 +#define ISFS_ERROR_MAXFILES -107 +#define ISFS_ERROR_MAXBLOCKS -108 +#define ISFS_ERROR_MAXFD -109 +#define ISFS_ERROR_MAXDEPTH -110 +#define ISFS_ERROR_OPENFD -111 +#define ISFS_ERROR_BADBLOCK -112 +#define ISFS_ERROR_ECC -113 +#define ISFS_ERROR_ECC_CRIT -114 +#define ISFS_ERROR_NOTEMPTY -115 +#define ISFS_ERROR_HMAC -116 +#define ISFS_ERROR_UNKNOWN -117 +#define ISFS_ERROR_BUSY -118 +#define ISFS_ERROR_SHUTDOWN -119 + +#define ISFS_INODE_NAMELEN 12 + +typedef s32 ISFSError; +typedef void (*ISFSCallback) (ISFSError, void *ctxt); + +typedef struct { + u32 blockSize; + u32 freeBlocks; + u32 occupiedBlcocks; + u32 badBlocks; + u32 reservedBlocks; + u32 freeInodes; + u32 occupedInodes; +} ISFSStats; + +typedef struct { + u32 size; + u32 offset; +} ISFSFileStats; + +typedef struct { + IOSUid ownerId; + IOSGid groupId; + u8 path[64]; + u8 ownerAccess; + u8 groupAccess; + u8 othersAccess; + u8 attr; +} ISFSPathAttrArgs; + +typedef struct { + u8 path1[64]; + u8 path2[64]; +} ISFSPathsArgs; + +ISFSError ISFS_OpenLib(void); +s32 ISFS_CreateDir(const u8* dname, u32 dirAttr, u32 ownerAcc, u32 groupAcc, u32 othersAcc); +s32 ISFS_CreateDirAsync(const u8* dname, u32 dirAttr, u32 ownerAcc, u32 groupAcc, u32 othersAcc, ISFSCallback cb, void* fsCtxt); +s32 ISFS_ReadDir(const u8* dname, u8* nameList, u32* num); +s32 ISFS_ReadDirAsync(const u8* dname, u8* nameList, u32* num, ISFSCallback cb, void* fsCtxt); +s32 ISFS_GetAttr(const u8* name, IOSUid* ownerId, IOSGid* groupId, u32* attr, u32* ownerAcc, u32* groupAcc, u32* othersAcc); +s32 ISFS_GetAttrAsync(const u8* name, IOSUid* ownerId, IOSGid* groupId, u32* attr, u32* ownerAcc, u32* groupAcc, u32* othersAcc, ISFSCallback cb, void* fsCtxt); +s32 ISFS_Delete(const u8* name); +s32 ISFS_DeleteAsync(const u8* name, ISFSCallback cb, void* fsCtxt); +s32 ISFS_Rename(const u8* oldName, const u8* newName); +s32 ISFS_RenameAsync(const u8* oldName, const u8* newName, ISFSCallback cb, void* fsCtxt); +s32 ISFS_GetUsage(const u8* dname, u32* nblocks, u32* ninodes); +s32 ISFS_CreateFile(const u8* fname, u32 fileAttr, u32 ownerAcc, u32 groupAcc, u32 othersAcc); +s32 ISFS_CreateFileAsync(const u8* fname, u32 fileAttr, u32 ownerAcc, u32 groupAcc, u32 othersAcc, ISFSCallback cb, void* fsCtxt); +IOSFd ISFS_Open(const u8* fname, u32 access); +IOSFd ISFS_OpenAsync(const u8* fname, u32 access, ISFSCallback cb, void* fsCtxt); +s32 ISFS_GetFileStats(IOSFd fd, ISFSFileStats* stats); +s32 ISFS_GetFileStatsAsync(IOSFd fd, ISFSFileStats* stats, ISFSCallback cb, void* fsCtxt); +s32 ISFS_Seek(IOSFd fd, s32 offset, u32 whence); +s32 ISFS_SeekAsync(IOSFd fd, s32 offset, u32 whence, ISFSCallback cb, void* fsCtxt); +s32 ISFS_Read(s32 fd, u8* pBuffer, u32 bufSize); +s32 ISFS_ReadAsync(IOSFd fd, u8* buf, u32 size, ISFSCallback cb, void* fsCtxt); +s32 ISFS_Write(IOSFd fd, const u8* buf, u32 size); +s32 ISFS_WriteAsync(IOSFd fd, const u8* buf, u32 size, ISFSCallback cb, void* fsCtxt); +s32 ISFS_Close(IOSFd fd); +s32 ISFS_CloseAsync(IOSFd fd, ISFSCallback cb, void* fsCtxt); +s32 ISFS_ShutdownAsync(ISFSCallback cb, void* fsCtxt); + +#ifdef __cplusplus +} +#endif + +#endif // _REVOLUTION_FS_H_ diff --git a/include/revolution/ipc.h b/include/revolution/ipc.h new file mode 100644 index 0000000000..6c2ddf798d --- /dev/null +++ b/include/revolution/ipc.h @@ -0,0 +1,24 @@ +#ifndef _REVOLUTION_IPC_H_ +#define _REVOLUTION_IPC_H_ + +#include <revolution/ipc/ipcclt.h> +#include <revolution/ipc/ipcProfile.h> +#include <revolution/ipc/memory.h> + +#ifdef __cplusplus +extern "C" { +#endif + +void IPCInit(void); +void IPCReInit(void); +u32 IPCReadReg(u32 regIdx); +void IPCWriteReg(u32 regIdx, u32 data); +void* IPCGetBufferHi(void); +void* IPCGetBufferLo(void); +void IPCSetBufferLo(void* newLo); + +#ifdef __cplusplus +} +#endif + +#endif // _REVOLUTION_IPC_H_ diff --git a/include/revolution/ipc/ipcProfile.h b/include/revolution/ipc/ipcProfile.h new file mode 100644 index 0000000000..75e851bc41 --- /dev/null +++ b/include/revolution/ipc/ipcProfile.h @@ -0,0 +1,19 @@ +#ifndef _REVOLUTION_IPCPROFILE_H_ +#define _REVOLUTION_IPCPROFILE_H_ + +#ifdef __cplusplus +extern "C" { +#endif + +#include <revolution/types.h> + +void IPCiProfInit(void); +void IPCiProfQueueReq(void* req, s32 handle); +void IPCiProfReply(void* req, s32 handle); +void IPCiProfAck(void); + +#ifdef __cplusplus +} +#endif + +#endif // _REVOLUTION_IPCPROFILE_H_ diff --git a/include/revolution/ipc/ipcclt.h b/include/revolution/ipc/ipcclt.h new file mode 100644 index 0000000000..673cfcd688 --- /dev/null +++ b/include/revolution/ipc/ipcclt.h @@ -0,0 +1,37 @@ +#ifndef _REVOLUTION_IPCCLT_H_ +#define _REVOLUTION_IPCCLT_H_ + +#ifdef __cplusplus +extern "C" { +#endif + +#include <revolution/types.h> +#include <revolution/private/iosrestypes.h> +#include <revolution/private/iostypes.h> + +typedef IOSError (*IOSIpcCb)(IOSError, void*); + +IOSError IPCCltInit(void); +IOSError IPCCltReInit(void); + +IOSError IOS_OpenAsync(const char* pPath, u32 flags, IOSIpcCb cb, void* callback_arg); +IOSError IOS_Open(const char* path, u32 flags); +IOSError IOS_CloseAsync(IOSFd fd, IOSIpcCb cb, void* cbArg); +IOSError IOS_Close(IOSFd fd); +IOSError IOS_ReadAsync(IOSFd fd, void* buf, u32 len, IOSIpcCb cb, void* cbArg); +IOSError IOS_Read(IOSFd fd, void* buf, u32 len); +IOSError IOS_WriteAsync(IOSFd fd, void* buf, u32 len, IOSIpcCb cb, void* cbArg); +IOSError IOS_Write(IOSFd fd, void* buf, u32 len); +IOSError IOS_SeekAsync(IOSFd fd, s32 offset, u32 whence, IOSIpcCb cb, void* cbArg); +IOSError IOS_Seek(IOSFd fd, s32 offset, u32 whence); +IOSError IOS_IoctlAsync(IOSFd fd, s32 cmd, void* input, u32 inputLen, void* output, u32 outputLen, IOSIpcCb cb, void* cbArg); +IOSError IOS_Ioctl(IOSFd fd, s32 cmd, void* input, u32 inputLen, void* output, u32 outputLen); +IOSError IOS_IoctlvAsync(IOSFd fd, s32 cmd, u32 readCount, u32 writeCount, IOSIoVector* vect, IOSIpcCb cb, void* cbArg); +IOSError IOS_Ioctlv(IOSFd fd, s32 cmd, u32 readCount, u32 writeCount, IOSIoVector* vect); +IOSError IOS_IoctlvReboot(IOSFd fd, s32 cmd, u32 readCount, u32 writeCount, IOSIoVector* vect); + +#ifdef __cplusplus +} +#endif + +#endif // _REVOLUTION_IPCCLT_H_ diff --git a/include/revolution/ipc/memory.h b/include/revolution/ipc/memory.h new file mode 100644 index 0000000000..8bf1e35505 --- /dev/null +++ b/include/revolution/ipc/memory.h @@ -0,0 +1,18 @@ +#ifndef _REVOLUTION_IPCMEMORY_H_ +#define _REVOLUTION_IPCMEMORY_H_ + +#include <revolution/private/iostypes.h> + +#ifdef __cplusplus +extern "C" { +#endif + +IOSError iosFree(IOSHeapId id, void* ptr); +void* iosAllocAligned(IOSHeapId id, u32 size, u32 alignment); +IOSHeapId iosCreateHeap(void* ptr, u32 size); + +#ifdef __cplusplus +} +#endif + +#endif // _REVOLUTION_IPCMEMORY_H_ diff --git a/include/revolution/nand.h b/include/revolution/nand.h index 0f095e14ab..cafe72b054 100644 --- a/include/revolution/nand.h +++ b/include/revolution/nand.h @@ -2,6 +2,7 @@ #define _REVOLUTION_NAND_H_ #include <revolution/types.h> +#include <revolution/fs.h> #ifdef __cplusplus extern "C" { @@ -122,43 +123,87 @@ typedef struct { typedef void (*NANDCallback)(s32, NANDCommandBlock*); typedef void (*NANDAsyncCallback)(s32 result, struct NANDCommandBlock* block); -s32 NANDInit(void); +typedef void (*NANDLoggingCallback)(BOOL, s32); -s32 NANDCreate(const char*, u8, u8); -s32 NANDPrivateCreate(const char*, u8, u8); +// NAND +s32 NANDCreate(const char* path, const u8 perm, const u8 attr); +s32 NANDPrivateCreate(const char* path, u8 perm, u8 attr); +s32 NANDPrivateCreateAsync(const char *path, u8 perm, u8 attr, NANDCallback cb, NANDCommandBlock* block); -s32 NANDOpen(const char*, NANDFileInfo*, u8); -s32 NANDPrivateOpen(const char*, NANDFileInfo*, u8); -s32 NANDOpenAsync(const char*, NANDFileInfo*, u8, NANDCallback, NANDCommandBlock*); -s32 NANDPrivateOpenAsync(const char*, NANDFileInfo*, const u8, NANDCallback, NANDCommandBlock*); +s32 NANDDelete(const char* path); +s32 NANDPrivateDelete(const char* path); +s32 NANDPrivateDeleteAsync(const char* path, NANDCallback cb, NANDCommandBlock* block); -s32 NANDClose(NANDFileInfo*); -s32 NANDCloseAsync(NANDFileInfo*, NANDCallback, NANDCommandBlock*); -s32 NANDRead(NANDFileInfo*, void*, u32); -s32 NANDReadAsync(NANDFileInfo*, void*, u32, NANDCallback, NANDCommandBlock*); +s32 NANDRead(NANDFileInfo* info, void* buf, const u32 length); +s32 NANDReadAsync(NANDFileInfo* info, void* buf, const u32 length, + NANDCallback cb, NANDCommandBlock* block); -s32 NANDGetLength(NANDFileInfo*, u32*); +s32 NANDWrite(NANDFileInfo* info, const void* buf, const u32 length); +s32 NANDWriteAsync(NANDFileInfo* info, const void* buf, const u32 length, + NANDCallback cb, NANDCommandBlock* block); -s32 NANDDelete(const char*); +s32 NANDSeek(NANDFileInfo* info, const s32 offset, const s32 whence); +s32 NANDSeekAsync(NANDFileInfo* info, const s32 offset, const s32 whence, + NANDCallback cb, NANDCommandBlock* block); -s32 NANDMove(const char*, const char*); +s32 NANDPrivateCreateDir(const char* path, u8 perm, u8 attr); +s32 NANDPrivateCreateDirAsync(const char *path, u8 perm, u8 attr, NANDCallback cb, NANDCommandBlock *block); -s32 NANDCheck(u32, u32, u32*); +s32 NANDMove(const char* path, const char* destDir); -s32 NANDWrite(NANDFileInfo*, const void*, u32); -s32 NANDWriteAsync(NANDFileInfo*, const void*, u32, NANDCallback, NANDCommandBlock*); +s32 NANDGetLength(NANDFileInfo* info, u32* length); +s32 NANDGetLengthAsync(NANDFileInfo* info, u32* length, NANDCallback cb, + NANDCommandBlock* block); -s32 NANDSeekAsync(NANDFileInfo*, s32, s32, NANDCallback, NANDCommandBlock*); +s32 NANDGetStatus(const char* path, NANDStatus* stat); +s32 NANDPrivateGetStatus(const char* path, NANDStatus* stat); +s32 NANDPrivateGetStatusAsync(const char* path, NANDStatus* stat, + NANDCallback cb, NANDCommandBlock* block); -s32 NANDPrivateGetStatus(const char*, NANDStatus*); -s32 NANDPrivateDelete(const char*); -s32 NANDPrivateCreate(const char*, u8, u8); +void NANDSetUserData(NANDCommandBlock* block, void* data); +void* NANDGetUserData(const NANDCommandBlock* block); +// NANDCore +s32 NANDInit(void); s32 NANDGetHomeDir(char[NAND_MAX_PATH]); +s32 NANDPrivateGetTypeAsync(const char* path, u8* type, NANDCallback cb, NANDCommandBlock* block); +void NANDInitBanner(NANDBanner* bnr, u32 const flag, const u16* title, const u16* comment); -s32 NANDGetStatus(const char*, NANDStatus*); +// NANDCheck +s32 NANDCheck(const u32 fsBlock, const u32 inode, u32* answer); + +// NANDOpenClose +s32 NANDOpen(const char*, NANDFileInfo*, u8); +s32 NANDPrivateOpen(const char*, NANDFileInfo*, u8); +s32 NANDOpenAsync(const char*, NANDFileInfo*, u8, NANDCallback, NANDCommandBlock*); +s32 NANDPrivateOpenAsync(const char*, NANDFileInfo*, const u8, NANDCallback, NANDCommandBlock*); + +s32 NANDClose(NANDFileInfo*); +s32 NANDCloseAsync(NANDFileInfo*, NANDCallback, NANDCommandBlock*); -s32 NANDSecretGetUsage(const char*, u32*, u32*); +s32 NANDSimpleSafeOpen(const char* path, NANDFileInfo* info, const u8 accType, void* buf, const u32 length); +s32 NANDSimpleSafeClose(NANDFileInfo* info); +s32 NANDPrivateSafeOpenAsync(const char* path, NANDFileInfo* info, const u8 accType, void* buf, const u32 length, NANDCallback cb, NANDCommandBlock* block); +s32 NANDSafeCloseAsync(NANDFileInfo* info, NANDCallback cb, NANDCommandBlock* block); + +// NANDLogging +BOOL NANDLoggingAddMessageAsync(NANDLoggingCallback cb, s32 errorCode, const char* fmt, ...); + +// NANDErrorMessage +BOOL NANDSetAutoErrorMessaging(BOOL show); +void __NANDPrintErrorMessage(s32 errorCode); + + +const char* nandGetHomeDir(); +void nandGenerateAbsPath(char* absPath, const char* path); +BOOL nandIsPrivatePath(const char* path); +BOOL nandIsInitialized(void); +s32 nandConvertErrorCode(const ISFSError err); +void nandGetRelativeName(char* name, const char* path); +BOOL nandIsUnderPrivatePath(const char* path); +BOOL nandIsRelativePath(const char* path); +void nandGetParentDirectory(char* parentDir, const char* absPath); +BOOL nandIsAbsolutePath(const char* path); #ifdef __cplusplus } diff --git a/include/revolution/os.h b/include/revolution/os.h index 2ae31d5c5c..62603a97aa 100644 --- a/include/revolution/os.h +++ b/include/revolution/os.h @@ -46,6 +46,7 @@ typedef u32 OSTick; #include <revolution/os/OSStateFlags.h> #include <revolution/os/OSIpc.h> #include <revolution/os/OSNandbootInfo.h> +#include <revolution/os/OSNet.h> // private macro, maybe shouldn't be defined here? #define OFFSET(addr, align) (((u32)(addr) & ((align)-1))) @@ -68,16 +69,29 @@ OSThread* __OSCurrentThread AT_ADDRESS(OS_BASE_CACHED | 0x00E4); u32 __OSSimulatedMemSize AT_ADDRESS(OS_BASE_CACHED | 0x00F0); u32 __OSBusClock AT_ADDRESS(OS_BASE_CACHED | 0x00F8); u32 __OSCoreClock AT_ADDRESS(OS_BASE_CACHED | 0x00FC); -volatile u16 __OSDeviceCode AT_ADDRESS(OS_BASE_CACHED | 0x30E6); +vu16 __OSDeviceCode AT_ADDRESS(OS_BASE_CACHED | 0x30E6); +vu8 __OSLockedFlag AT_ADDRESS(OS_BASE_CACHED | 0x3187); u16 __OSWirelessPadFixMode AT_ADDRESS(OS_BASE_CACHED | 0x30E0); +vu32 __OSLaunchPartitionType AT_ADDRESS(OS_BASE_CACHED | 0x3194); +vu8 __OSDeviceCheckCode AT_ADDRESS(OS_BASE_CACHED | 0x319C); // unknowns OSThread* __gUnkThread1 AT_ADDRESS(OS_BASE_CACHED | 0x00D8); int __gUnknown800030C0[2] AT_ADDRESS(OS_BASE_CACHED | 0x30C0); u8 __gUnknown800030E3 AT_ADDRESS(OS_BASE_CACHED | 0x30E3); #else -#define __OSBusClock (*(u32 *)(OS_BASE_CACHED | 0x00F8)) -#define __OSCoreClock (*(u32 *)(OS_BASE_CACHED | 0x00FC)) +#define __OSPhysicalMemSize (*(u32*)(OS_BASE_CACHED | 0x0028)) +#define __OSTVMode (*(volatile int*)(OS_BASE_CACHED | 0x00CC)) +#define __OSActiveThreadQueue (*(OSThreadQueue*)(OS_BASE_CACHED | 0x00DC)) +#define __OSCurrentThread ((OSThread*)(OS_BASE_CACHED | 0x00E4)) +#define __OSSimulatedMemSize (*(u32*)(OS_BASE_CACHED | 0x00F0)) +#define __OSBusClock (*(u32*)(OS_BASE_CACHED | 0x00F8)) +#define __OSCoreClock (*(u32*)(OS_BASE_CACHED | 0x00FC)) +#define __OSDeviceCode (*(vu16*)(OS_BASE_CACHED | 0x30E6)) +#define __OSLockedFlag (*(vu8*)(OS_BASE_CACHED | 0x3187)) +#define __OSWirelessPadFixMode (*(u16*)(OS_BASE_CACHED | 0x30E0)) +#define __OSLaunchPartitionType (*(vu32*)(OS_BASE_CACHED | 0x3194)) +#define __OSDeviceCheckCode (*(vu8*)(OS_BASE_CACHED | 0x319C)) #endif #define OS_BUS_CLOCK __OSBusClock diff --git a/include/revolution/os/OSNet.h b/include/revolution/os/OSNet.h new file mode 100644 index 0000000000..685d82696b --- /dev/null +++ b/include/revolution/os/OSNet.h @@ -0,0 +1,29 @@ +#ifndef _REVOLUTION_OSNET_H_ +#define _REVOLUTION_OSNET_H_ + +#include <revolution/ipc.h> + +#ifdef __cplusplus +extern "C" { +#endif + +typedef enum NWC24Err { + NWC24_OK = 0, +} NWC24Err; + +NWC24Err NWC24iPrepareShutdown(void); +NWC24Err NWC24iSynchronizeRtcCounter(BOOL); +NWC24Err NWC24iOpenResourceManager_(const char* callerName, const char* path, IOSFd* fd, u32 flags); +NWC24Err NWC24SuspendScheduler(void); +NWC24Err NWC24iSetRtcCounter_(int rtc, BOOL); +NWC24Err NWC24iIoctlResourceManager_(const char* callerName, IOSFd fd, s32 cmd, void* input, u32 inputLen, void* output, u32 outputLen); +NWC24Err NWC24iCloseResourceManager_(const char* callerName, IOSFd); +NWC24Err NWC24iRequestShutdown(u32 event, s32* result); +NWC24Err NWC24iIoctlResourceManagerAsync_(const char* callerName, IOSFd fd, s32 cmd, void* input, u32 inputLen, void* output, u32 outputLen, void* cbArg); +BOOL NWC24iIsAsyncRequestPending_(void); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/include/revolution/os/OSPlayRecord.h b/include/revolution/os/OSPlayRecord.h index 1cbfb15ee5..90ffde13df 100644 --- a/include/revolution/os/OSPlayRecord.h +++ b/include/revolution/os/OSPlayRecord.h @@ -3,6 +3,10 @@ #include <revolution/os.h> +#ifdef __cplusplus +extern "C" { +#endif + typedef struct { u32 checkSum; u16 titleName[2][21]; @@ -16,4 +20,8 @@ typedef struct { void __OSStartPlayRecord(void); void __OSStopPlayRecord(void); +#ifdef __cplusplus +} +#endif + #endif // OSPLAYRECORD_H diff --git a/include/revolution/os/OSReset.h b/include/revolution/os/OSReset.h index 2964bb8638..5ac53552bb 100644 --- a/include/revolution/os/OSReset.h +++ b/include/revolution/os/OSReset.h @@ -17,10 +17,10 @@ typedef struct OSShutdownFunctionQueue { OSShutdownFunctionInfo* tail; } OSShutdownFunctionQueue; -typedef BOOL (*OSResetFunction)(BOOL, u32); +typedef BOOL (*OSShutdownFunction)(BOOL, u32); struct OSShutdownFunctionInfo { - OSResetFunction func; + OSShutdownFunction func; u32 priority; OSShutdownFunctionInfo* next; OSShutdownFunctionInfo* prev; diff --git a/include/revolution/private/iosresclt.h b/include/revolution/private/iosresclt.h deleted file mode 100644 index d9fbb621c1..0000000000 --- a/include/revolution/private/iosresclt.h +++ /dev/null @@ -1,9 +0,0 @@ -#pragma once - -#include <revolution/private/iosrestypes.h> -#include <revolution/private/iostypes.h> -#include <revolution/types.h> - -typedef IOSError (*IOSIpcCb) (IOSError, void *); - -s32 IOS_Read(s32, void*, u32); diff --git a/include/revolution/private/iosrestypes.h b/include/revolution/private/iosrestypes.h index 679ed63cf7..9f7502bd1b 100644 --- a/include/revolution/private/iosrestypes.h +++ b/include/revolution/private/iosrestypes.h @@ -33,19 +33,19 @@ typedef u32 IOSResourceHandle; #define IOS_ERROR_INVALID_SIZE -23 typedef struct { - u8 *path; + u8* path; u32 flags; IOSUid uid; IOSGid gid; } IOSResourceOpen; typedef struct { - u8 *outPtr; + u8* outPtr; u32 outLen; } IOSResourceRead; typedef struct { - u8 *inPtr; + u8* inPtr; u32 inLen; } IOSResourceWrite; @@ -56,14 +56,14 @@ typedef struct { typedef struct { u32 cmd; - u8 *inPtr; + u8* inPtr; u32 inLen; - u8 *outPtr; + u8* outPtr; u32 outLen; } IOSResourceIoctl; typedef struct { - u8 *base; + u8* base; u32 length; } IOSIoVector; @@ -71,7 +71,7 @@ typedef struct { u32 cmd; u32 readCount; u32 writeCount; - IOSIoVector *vector; + IOSIoVector* vector; } IOSResourceIoctlv; typedef struct { |
