summaryrefslogtreecommitdiff
path: root/include/m_Do/m_Do_dvd_thread.h
blob: 8922ca7f36b1ed905eaa8b70ee88f12b9e14a3ea (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
#ifndef M_DO_M_DO_DVD_THREAD_H
#define M_DO_M_DO_DVD_THREAD_H

#include "JSystem/JKernel/JKRArchive.h"
#include "dolphin/os/OSMessage.h"
#include "dolphin/os/OSMutex.h"
#include "f_pc/f_pc_node.h"

class JKRHeap;
class JKRMemArchive;

typedef void* (*mDoDvdThd_callback_func)(void*);

class mDoDvdThd_command_c : public node_class {
public:
    /* 0x0C */ bool mIsDone;
    /* 0x10  vtable*/
public:
    /* 800158FC */ virtual ~mDoDvdThd_command_c();
    /* 80015B74 */ mDoDvdThd_command_c();
    inline s32 sync() { return mIsDone; }
    inline void destroy() { delete this; }
    virtual s32 execute() = 0;
};  // Size = 0x14

class mDoDvdThd_toMainRam_c : public mDoDvdThd_command_c {
public:
    /* 80016338 */ mDoDvdThd_toMainRam_c(u8);
    /* 80016394 */ static mDoDvdThd_toMainRam_c* create(char const*, u8, JKRHeap*);
    /* 8001645C */ virtual ~mDoDvdThd_toMainRam_c();
    /* 800164BC */ virtual s32 execute();

    void* getMemAddress() const { return mData; }

private:
    /* 0x14 */ u8 mMountDirection;
    /* 0x18 */ s32 mEntryNum;
    /* 0x1C */ void* mData;
    /* 0x20 */ s32 mDataSize;
    /* 0x24 */ JKRHeap* mHeap;
};  // Size = 0x28

class mDoDvdThd_param_c {
public:
    /* 80015944 */ mDoDvdThd_param_c();
    /* 8001598C */ void kick();
    /* 800159B4 */ s32 waitForKick();
    /* 800159DC */ mDoDvdThd_command_c* getFirstCommand();
    /* 800159E4 */ void addition(mDoDvdThd_command_c*);
    /* 80015A3C */ void cut(mDoDvdThd_command_c*);
    /* 80015AD8 */ void mainLoop();

private:
    /* 0x00 */ OSMessageQueue mMessageQueue;
    /* 0x20 */ void* mMessageQueueMessages;
    /* 0x24 */ node_list_class mNodeList;
    /* 0x30 */ OSMutex mMutext;
};  // Size = 0x48

class mDoDvdThd_mountXArchive_c : public mDoDvdThd_command_c {
public:
    /* 80016108 */ virtual ~mDoDvdThd_mountXArchive_c();
    /* 80016168 */ mDoDvdThd_mountXArchive_c(u8 mountDirection, JKRArchive::EMountMode mountMode);
    /* 800161E0 */ static mDoDvdThd_mountXArchive_c* create(char const*, u8, JKRArchive::EMountMode,
                                                            JKRHeap*);
    /* 800162B0 */ virtual s32 execute();

    JKRArchive* getArchive() const { return mArchive; }

private:
    /* 0x14 */ u8 mMountDirection;
    /* 0x18 */ s32 mEntryNum;
    /* 0x1C */ JKRArchive* mArchive;
    /* 0x20 */ JKRArchive::EMountMode mMountMode;
    /* 0x24 */ JKRHeap* mHeap;
};  // Size = 0x28

class mDoDvdThd_mountArchive_c : public mDoDvdThd_command_c {
public:
    /* 80015D44 */ virtual ~mDoDvdThd_mountArchive_c();
    /* 80015DA4 */ mDoDvdThd_mountArchive_c(u8);
    /* 80015E14 */ static mDoDvdThd_mountArchive_c* create(char const*, u8, JKRHeap*);
    /* 80015EDC */ virtual s32 execute();

    JKRMemArchive* getArchive() const { return mArchive; }
    JKRHeap* getHeap() const { return mHeap; }

private:
    /* 0x14 */ u8 mMountDirection;
    /* 0x18 */ s32 mEntryNumber;
    /* 0x1C */ JKRMemArchive* mArchive;
    /* 0x20 */ JKRHeap* mHeap;
};  // Size = 0x24

class mDoDvdThd_callback_c : public mDoDvdThd_command_c {
public:
    /* 80015BB8 */ virtual ~mDoDvdThd_callback_c();
    /* 80015C18 */ mDoDvdThd_callback_c(mDoDvdThd_callback_func, void*);
    /* 80015C74 */ static mDoDvdThd_callback_c* create(mDoDvdThd_callback_func, void*);
    /* 80015CF0 */ virtual s32 execute();

private:
    /* 0x14 */ mDoDvdThd_callback_func mFunction;
    /* 0x18 */ void* mData;
    /* 0x1C */ void* mResult;
};

struct mDoDvdThdStack {
    u8 stack[4096];
} __attribute__((aligned(16)));

struct mDoDvdThd {
    /* 800157FC */ static s32 main(void*);
    /* 80015858 */ static void create(s32);
    /* 800158B4 */ static void suspend();

    static OSThread l_thread;
    static mDoDvdThdStack l_threadStack;
    static mDoDvdThd_param_c l_param;
};

#endif /* M_DO_M_DO_DVD_THREAD_H */