summaryrefslogtreecommitdiff
path: root/include/dolphin/CARDPriv.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/dolphin/CARDPriv.h')
-rw-r--r--include/dolphin/CARDPriv.h132
1 files changed, 132 insertions, 0 deletions
diff --git a/include/dolphin/CARDPriv.h b/include/dolphin/CARDPriv.h
new file mode 100644
index 0000000..ca28f6e
--- /dev/null
+++ b/include/dolphin/CARDPriv.h
@@ -0,0 +1,132 @@
+#ifndef _DOLPHIN_CARDPRIV
+#define _DOLPHIN_CARDPRIV
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define CARD_FAT_AVAIL 0x0000u
+#define CARD_FAT_CHECKSUM 0x0000u
+#define CARD_FAT_CHECKSUMINV 0x0001u
+#define CARD_FAT_CHECKCODE 0x0002u
+#define CARD_FAT_FREEBLOCKS 0x0003u
+#define CARD_FAT_LASTSLOT 0x0004u
+
+#define CARD_PAGE_SIZE 128u
+#define CARD_SEG_SIZE 512u
+
+#define CARD_NUM_SYSTEM_BLOCK 5
+#define CARD_SYSTEM_BLOCK_SIZE (8 * 1024u)
+
+#define CARD_MAX_MOUNT_STEP (CARD_NUM_SYSTEM_BLOCK + 2)
+
+typedef struct CARDDir {
+ u8 gameName[4];
+ u8 company[2];
+ u8 _padding0;
+ u8 bannerFormat;
+ u8 fileName[CARD_FILENAME_MAX];
+ u32 time; // seconds since 01/01/2000 midnight
+
+ u32 iconAddr; // 0xffffffff if not used
+ u16 iconFormat;
+ u16 iconSpeed;
+
+ u8 permission;
+ u8 copyTimes;
+ u16 startBlock;
+ u16 length;
+ u8 _padding1[2];
+
+ u32 commentAddr; // 0xffffffff if not used
+} CARDDir;
+
+typedef struct CARDDirCheck {
+ u8 padding0[64 - 2 * 4];
+ u16 padding1;
+ s16 checkCode;
+ u16 checkSum;
+ u16 checkSumInv;
+} CARDDirCheck;
+
+typedef struct CARDControl {
+ BOOL attached;
+ s32 result;
+ u16 size;
+ u16 pageSize;
+ s32 sectorSize;
+ u16 cBlock;
+ u16 vendorID;
+ s32 latency;
+ u8 id[12];
+ int mountStep;
+ int formatStep;
+ u32 scramble;
+ DSPTaskInfo task;
+ void* workArea;
+ CARDDir* currentDir;
+ u16* currentFat;
+ OSThreadQueue threadQueue;
+ u8 cmd[9];
+ s32 cmdlen;
+ vu32 mode;
+ int retry;
+ int repeat;
+ u32 addr;
+ void* buffer;
+ s32 xferred;
+ u16 freeNo;
+ u16 startBlock;
+ CARDFileInfo* fileInfo;
+ CARDCallback extCallback;
+ CARDCallback txCallback;
+ CARDCallback exiCallback;
+ CARDCallback apiCallback;
+ CARDCallback xferCallback;
+ CARDCallback eraseCallback;
+ CARDCallback unlockCallback;
+ OSAlarm alarm;
+ u32 cid;
+ const DVDDiskID* diskID;
+} CARDControl;
+
+typedef struct CARDID {
+ u8 serial[32]; // flashID[12] + timebase[8] + counterBias[4] + language[4] + XXX[4]
+ u16 deviceID;
+ u16 size;
+ u16 encode; // character set -- 0: S-JIS, 1: ANSI
+
+ u8 padding[512 - 32 - 5 * 2];
+
+ u16 checkSum;
+ u16 checkSumInv;
+} CARDID;
+
+void __CARDDefaultApiCallback(s32 chan, s32 result);
+
+#define CARDIsValidBlockNo(card, iBlock) \
+ (CARD_NUM_SYSTEM_BLOCK <= (iBlock) && (iBlock) < (card)->cBlock)
+#define __CARDGetDirCheck(dir) ((CARDDirCheck*)&(dir)[CARD_MAX_FILE])
+
+CARDDir* __CARDGetDirBlock(CARDControl* card);
+u16* __CARDGetFatBlock(CARDControl* card);
+s32 __CARDUpdateFatBlock(s32 chan, u16* fat, CARDCallback callback);
+void __CARDCheckSum(void* ptr, int length, u16* checkSum, u16* checkSumInv);
+u16 __CARDGetFontEncode();
+void __CARDExiHandler(s32 chan, OSContext* context);
+void __CARDExtHandler(s32 chan, OSContext* context);
+void __CARDUnlockedHandler(s32 chan, OSContext* context);
+s32 __CARDAccess(CARDControl* card, CARDDir* ent);
+BOOL __CARDIsWritable(CARDDir* ent);
+
+#define TRUNC(n, a) (((u32)(n)) & ~((a)-1))
+#define OFFSET(n, a) (((u32)(n)) & ((a)-1))
+
+extern CARDControl __CARDBlock[2];
+extern DVDDiskID __CARDDiskNone;
+extern u16 __CARDVendorID;
+
+#ifdef __cplusplus
+}
+#endif
+#endif // _DOLPHIN_CARDPRIV