hdd_internal.h
3.2 KB
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
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
/*---------------------------------------------------------------------*
Copyright (C) 1998 Nintendo.
$RCSfile: hdd_internal.h,v $
$Revision: 1.1.1.1 $
$Date: 2002/05/02 03:27:30 $
*---------------------------------------------------------------------*/
/*
* DD 用 標準処理シーケンス
*/
/* pre-process */
#include <ultra64.h>
#include <PR/leo.h>
#include "sysassigned.h"
#include "hdd.h"
/* declarerations */
typedef struct{
s32 target;
s32 cnt;
s32 errno;
} THookError;
/*ALHeap dd_heap; /* heap structur */
/*u8 dd_heap_buf[READWRITE_BYTESIZE]; /* heap buffer */
THookError _hook={0};
OSPiHandle *HANDLE_DD;
s32 dd_errbuf[ERRBUF_SIZE+1]={0};
static u8 *_rwbuf;
static s32 _rwbuf_size;
static OSMesg LeoMessages[NUM_LEO_MESGS];
static TDDStatus dd_stat;
static OSMesgQueue diskMsgQ,diskQ,frozenQ,ddfirstQ;
OSMesgQueue ddflushQ;
static OSMesg diskMsgBuf[DISK_MSG_NUM],diskQBuf[1],ddflushQBuf[1]
,frozenQBuf[1],ddfirstQBuf[1];
static s32 _CA = 0;
static OSMesgQueue recDiskMsgQ;
static OSMesg recDiskMsgBuf[1];
static s32 not_initialized = 1;
LEODiskID _diskID ,_savedID;
static LEODiskTime _rtc;
static LEOCmd _cmdBlk;
static s32 error;
static s32 _save_id = 1;
static TMessage4dd dd_firstMsg = {0};
/* local functions */
static void dd_closeDialog(s32 mask);
static s32 dd_openDialog(s32 mes);
static s32 dd_init( void );
static s32 dd_read(s32 start_adr , s32 size ,s16 flag_convert );
static s32 dd_lbaWrite(s32 start_adr ,s32 size);
static s32 dd_seek( s32 adr , s32 flag_convert );
static s32 dd_rezero( void );
static s32 dd_setMotorTime( u32 standby , u32 sleep );
static s32 dd_calmDown( s16 flag );
static s32 dd_activate( s16 flag );
static s32 dd_readRTC(void);
static s32 dd_setRTC(LEODiskTime *rtcp);
static s32 dd_testUnit(LEOStatus *status);
static s32 dd_checkEject( void );
static s32 dd_checkInsert( void);
static void coreObjectOfdd( void * );
void dd_wait(void);
static void _setBuffer(u8 *buf);
static s32 dd_checkSum(void);
static s32 dd_makeSum(void);
static s32 dd_restoreData(void);
enum leofunc_t
{
TLeoCreateLeoManager,
TLeoResetClear,
TLeoReadDiskID,
TLeoReadWrite,
TLeoSeek,
TLeoRezero,
TLeoTestUnitReady,
TLeoModeSelectAsync,
TLeoSpdlMotor,
TLeoReadRTC,
TLeoSetRTC
};
/*
public func
void dd_create(void);
s32 dd_exec( TMessage4dd * msg );
s32 dd_checkGate( TMessage4dd * msg );
*/
#if 0
/*
考察
dd_stat.modeの説明
DDSTAT_GOOD : 正常終了
DDSTAT_IDLE : コマンド待機状態
DDSTAT_BUSY : ディスク処理実行中
DDSTAT_KILLED : LeoClearQueue による強制終了 (CMD_TERMINATED)など。
復帰を行うかどうかはアプリケーションによる。
DDSTAT_DEAD : 異常終了、復帰は行わない。
オプションマクロ
DEBUG : デバッグ時のみ有効
START_FROM_CASSETTE : カセット起動用
NO_USE_RTC : RTCを利用しない
NEED_DISK : ディスクがない場合イニシャライズ
を完了させない。(カセット起動時のみ)
*/
#endif