FSSim_def.h
11.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
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
/*****************************************************************************
* Copyright Statement:
* --------------------
* This software is protected by Copyright and the information contained
* herein is confidential. The software may not be copied and the information
* contained herein may not be used or disclosed except with the written
* permission of MediaTek Inc. (C) 2005
*
* BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
* THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
* RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO BUYER ON
* AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL WARRANTIES,
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NONINFRINGEMENT.
* NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH RESPECT TO THE
* SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY, INCORPORATED IN, OR
* SUPPLIED WITH THE MEDIATEK SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH
* THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO
* NOT BE RESPONSIBLE FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S
* SPECIFICATION OR TO CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM.
*
* BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE
* LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL BE,
* AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT ISSUE,
* OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY BUYER TO
* MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE.
*
* THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE
* WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT OF
* LAWS PRINCIPLES. ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING THEREOF AND
* RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN FRANCISCO, CA, UNDER
* THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE (ICC).
*
*****************************************************************************/
/*****************************************************************************
*
* Filename:
* ---------
* FSSim_def.h
*
* Project:
* --------
* FSSIM
*
* Description:
* ------------
* This file defines type, data structure, constant of File System Simulation.
*
* Author:
* -------
* -------
*
*============================================================================
* HISTORY
* Below this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
*------------------------------------------------------------------------------
* removed!
*
* removed!
* removed!
* removed!
*
* removed!
* removed!
* removed!
*
* removed!
* removed!
* removed!
*
* removed!
* removed!
* removed!
*
* removed!
* removed!
* removed!
*
* removed!
* removed!
*
*
* removed!
* removed!
*
*
* removed!
* removed!
*
*
* removed!
* removed!
*
*
* removed!
* removed!
*
*
* removed!
* removed!
* removed!
*
* removed!
* removed!
* removed!
*
* removed!
* removed!
* removed!
*
* removed!
* removed!
*
*
* removed!
* removed!
*
*
* removed!
* removed!
*
*
* removed!
* removed!
*
*
* removed!
* removed!
*
*
* removed!
* removed!
*
*
* removed!
* removed!
*
*
* removed!
* removed!
*
*
* removed!
* removed!
*
*
* removed!
* removed!
*
*
* removed!
* removed!
*
*
* removed!
* removed!
* removed!
*
*------------------------------------------------------------------------------
* Upper this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
*============================================================================
****************************************************************************/
#ifndef __FSSIM_DEF_H
#define __FSSIM_DEF_H
#ifndef _WINDOWS_
#error "windows.h must be included before FSSim_def.h"
#endif
#ifndef UNICODE
#error "UNICODE must be defined"
#endif
/* SECTION FOR Environment Switch
* NOTE: MoDIS will *NOT* define __MTK_TARGET__ global option.
*/
#if defined(__MTK_TARGET__)
#error "__MTK_TARGET__ defined, wrong environment!"
#endif
/*
* Constant defitions
*/
/* max number of file handles */
#define FSSIM_MAX_FILE 24
#define FSSIM_MAX_THREAD 100
/* number of NOR flash */
#define FSSIM_NORFLASH_CNT 1
/* number of NAND flash */
#define FSSIM_NANDFLASH_CNT 1
#ifdef __FS_CARD2_SUPPORT__
#define FSSIM_MEMCARD_CNT 2 // number of Memory Card
#define FSSIM_MAX_DRIVE 4 // max number of drives
#else // !__FS_CARD2_SUPPORT__
#define FSSIM_MEMCARD_CNT 1 // number of Memory Card
#define FSSIM_MAX_DRIVE 3 // max number of drives
#endif // __FS_CARD2_SUPPORT__
/* bytes per sector */
#define FSSIM_BYTES_PER_SECTOR 512
/* sectors per cluster */
#define FSSIM_SECTORS_PER_CLUSER 4
/* Determine Local Path to be mapped as File System Simulator pre-fix path */
/* WAY 1 -------- Relative to Execution Binary (Recommanded and Offical) */
#define FSSIM_RELATIVE_PATH_FOR_ROOT_DIR L"..\\..\\WIN32FS\\"
/* WAY 2 -------- Proper Setting on INI file */
#define FSSIM_INI_FILENAME L"MoDIS.ini"
#define FSSIM_INI_SECTION L"FileSystem"
#define FSSIM_INI_KEY L"Local_Map_Path"
/* directory names to simulate drives (C:\ = DRIVE_C\, D:\ = DRIVE_D\ */
#define FSSIM_DRIVE_DIR L"DRIVE_X\\"
#define FSSIM_DRIVE_DIR_PREFIX L"DRIVE_"
/* system drive name */
#define FSSIM_SYSTEM_DRIVE L'C'
/* system remapped drive name */
#define FSSIM_REMAP_SYSTEM_DRIVE L'Z'
/* the format of drive name specified in FS_GeneralFormat */
#define FSSIM_DRIVE_FORMAT L"\\\\.\\"
typedef enum { STATE_FREE = 0, STATE_INUSE = 1 };
// Device Enumerations
typedef enum {
FSSIM_DEV_NOR=1,
FSSIM_DEV_NAND=2,
FSSIM_DEV_CARD1=3,
FSSIM_DEV_CARD2=4,
FSSIM_DEV_EXTERNAL=5,
FSSIM_DEV_EMMC=6,
};
#define FSSIM_BUFF_SIZE 512
#define FSSIM_BEFORE_RECURSIVE 1
#define FSSIM_AFTER_RECURSIVE 2
#define MT_MAX_FILE_NUM 20000
#define FSSIM_SFN_LEN (8 + 3 + 1 + 1)
/* default value returned by FS_QmGetFree */
#define FSSIM_QUOTA_SIZE (10 * 1024 * 1024)
#define FSSIM_VFN_SIZE_IN_WCHAR (FS_GenVFN_SIZE / sizeof(TCHAR))
#define FSSIM_DIRCACHE_NUM (8)
#define FSSIM_SORTING_SIGNATURE "FSST"
/*
* Macro definitions
*/
#define fssim_printf(s) printf s
/*
* Type definitions
*/
typedef struct
{
void * task_id;
fs_job_id current_job;
kal_bool aborted;
} fssim_tls_struct;
typedef struct FSSIM_FILE_STRUCT
{
HANDLE handle;
DWORD flags;
void *taskid;
unsigned int unique;
unsigned short state;
unsigned short isabort; /* 1: abort; 0: not abort */
union {
int (*copy_progress)(int Action, UINT Total, UINT Completed, UINT Info);
void (*format_progress)(const char *DriveName, int Action, UINT Total, UINT Completed);
} progress;
unsigned short findattr1;
unsigned short findattr2;
unsigned int drive; /* index of fssim_drvinfo of locating drive */
FS_DOSDirEntry DirEntry;
TCHAR filename[MAX_PATH];
TCHAR shortfilename[MAX_PATH];
fs_job_id job;
} FSSIM_FILE_T;
#define copyprogress progress.copy_progress
#define formatprogress progress.format_progress
typedef struct FSSIM_DRVINFO_STRUCT
{
TCHAR drive; /* drive name (single character) */
TCHAR remap_drive; /* remapped drive name */
unsigned int is_current;
unsigned int dev;
unsigned int bytespersector;
unsigned int sectorspercluser;
unsigned int totalclusters; /* assign value for disk total space */
unsigned int takenclusters; /* don't assign value, for pseudo disk free space */
TCHAR dir_name[MAX_PATH]; /* the current directory in the drive (Real Path) */
TCHAR volume_label[MAX_PATH];
} FSSIM_DRVINFO_T;
typedef struct FSSIM_COPYDIR_PARAM_STRUCT
{
TCHAR path[MAX_PATH];
DWORD total;
DWORD completed;
int fh; /* file handle */
} FSSIM_COPYDIR_PARAM_T;
typedef struct FSSIM_SORT_STRUCT
{
TCHAR filename[MAX_PATH];
FS_DOSDirEntry fileinfo;
void *pPrivate;
} FSSIM_SORT_T;
typedef struct FSSIM_SORTING_DATA_STRUCT
{
unsigned char Signature[4];
FSSIM_SORT_T *SortingBuffer;
unsigned int SortingCount;
} FSSIM_SORTING_DATA;
typedef struct FSSIM_DRVMAP_STRCUT
{
TCHAR original;
TCHAR mapped;
} FSSIM_DRVMAP_T;
typedef struct FSSIM_FORMAT_PARAM_STRUCT
{
TCHAR *drive;
DWORD total;
DWORD completed;
int level;
int fh;
} FSSIM_FORMAT_PARAM_T;
typedef struct FSSIM_SUM_SIZE_PARAM_STRUCT
{
struct FSSIM_SUM_SIZE_PARAM_STRUCT *next;
unsigned int directory_entry_cnt;
unsigned int allocated_cluster_cnt;
unsigned int size_of_cluster_unit;
} FSSIM_SUM_SIZE_PARAM_T;
typedef struct FSSIM_HW_DEVICE_STRUCT
{
unsigned int mount_state;
unsigned int busy_status;
unsigned int flag;
unsigned int type;
} FSSIM_HW_DEVICE_STRUCT_T;
typedef struct FSSIM_VIRTUAL_FILENAME_STRUCT
{
TCHAR name_once[FSSIM_VFN_SIZE_IN_WCHAR];
unsigned int vf_size;
unsigned int vf_offset;
unsigned int vf_gen_fh_unique;
} FSSIM_VIRTUAL_FILENAME_T;
typedef struct FSSIM_VFTABLE_STRUCT
{ unsigned int allocat_size;
unsigned int usage_size;
FSSIM_VIRTUAL_FILENAME_T *data;
unsigned int link[FSSIM_MAX_FILE+1];
unsigned int pos[FSSIM_MAX_FILE+1];
unsigned int bias[FSSIM_MAX_FILE+1];
unsigned int link_unique[FSSIM_MAX_FILE+1];
} FSSIM_VFTABLE_T;
/* Directory Associated Cache Value, store run-time cache
* Design to get faster respone for browsing application, especially on Large Directory case
*/
typedef struct FSSIM_DIRASSOCIATEDCACHE_STRUCT
{
TCHAR filename[MAX_PATH];
kal_uint32 value;
HANDLE Handle;
kal_bool Lock;
kal_uint32 Time;
} FSSIM_DIRASSOCIATEDCACHE_T;
typedef struct FSSIM_DIRASSOCIATEDCACHEPARAM_STRUCT
{
HANDLE handle;
TCHAR filename[MAX_PATH];
} FSSIM_DIRASSOCIATEDCACHEPARAM_T;
typedef struct FSSIM_MUTEX_STRUCT
{
kal_mutexid rtf_sem;
DWORD rtf_sem_owner;
kal_uint32 rtf_lock_count;
} FSSIM_MUTEX_T;
typedef int (*fssim_search_callbak)(TCHAR *fullname, TCHAR *filename, void *param, int order);
/*
* Declaration of exported global variables. ATTRIBUTE --- build-time , run-time constant
*/
extern fssim_tls_struct _fssim_tls[];
extern TCHAR fssim_root_dir[];
extern void *fssim_mutex;
extern void *fssim_sort_mutex;
extern void *fssim_disk_space_mutex;
extern const TCHAR fssim_vfname_prefix[];
extern const TCHAR fssim_nvram_path[];
extern FS_QuotaStruct gFS_ExtQuotaSet[];
extern const UINT FS_MAX_QSET;
extern const FS_PartitionRecord fssim_partition[];
extern FSSIM_HW_DEVICE_STRUCT_T fssim_device[];
extern int fssim_public_drive_existence;
/*
* Declaration of exported global variables. ATTRIBUTE --- run-time update frequently
*/
extern FSSIM_FILE_T fssim_file[];
extern FSSIM_VFTABLE_T fssim_vfgen;
extern FSSIM_DRVMAP_T fssim_drvmap;
extern FSSIM_DRVINFO_T fssim_drvinfo[];
extern FS_InternQStruct gFS_IntQuotaSet[];
extern FSSIM_SORT_T fssim_sort[];
extern int fssim_sort_cnt;
extern FSSIM_DIRASSOCIATEDCACHE_T fssim_DirCacheArray[];
/*
* Declaration of internal functions.
*/
void *fssim_create_mutex();
void fssim_take_mutex(void *mutex);
void fssim_give_mutex(void *mutex);
void *fssim_get_task_self_id();
void fssim_print_str(const TCHAR *str);
#endif /* __FSSIM_DEF_H */