summaryrefslogtreecommitdiff
path: root/cpu/arm920t/wmt/sdc.h
blob: b42dee52c0df6dbec6d2d2becb4f75af3b852a8c (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
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
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
/*++ 
Copyright (c) 2010 WonderMedia Technologies, Inc.

This program is free software: you can redistribute it and/or modify it under
the terms of the GNU General Public License as published by the Free Software 
Foundation, either version 2 of the License, or (at your option) any later version.

This program is distributed in the hope that it will be useful, but WITHOUT ANY
WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
PARTICULAR PURPOSE.  See the GNU General Public License for more details. You
should have received a copy of the GNU General Public License along with this
program. If not, see http://www.gnu.org/licenses/>.

WonderMedia Technologies, Inc.
10F, 529, Chung-Cheng Road, Hsin-Tien, Taipei 231, R.O.C.
--*/

#ifndef __SDC_H__
#define __SDC_H__

#define SD_FALSE  	0
#define SD_TRUE   	1

//SD command definition

#define		GO_IDLE_STATE           	0
#define		SEND_OP_COND            	1 		//for MMC
#define		ALL_SEND_CID            	2
#define		SEND_RELATIVE_ADDR      	3
#define		SET_RELATIVE_ADDR			3 		//for MMC1
#define		SET_DSR						4
#define		SELECT_DESELECT_CARD    	7
#define		SEND_IF_COND				8		//for SD2.0 2006/01/20 janshiue
#define		SEND_EXT_CSD				8		//for MMC
#define		SEND_CSD                	9
#define		SEND_CID                	10
//#define READ_DAT_UNTIL_STOP     11
#define		STOP_TRANSMISSION       	12
#define		SEND_STATUS             	13
//#define SET_BUS_WIDTH_REGISTER  14
#define		GO_INACTIVE_STATE       	15
#define		SET_BLOCKLEN            	16
#define		READ_SINGLE_BLOCK      		17
#define		READ_MULTIPLE_BLOCK     	18
//#define WRITE_DAT_UNTIL_STOP    20
#define		WRITE_SINGLE_BLOCK      	24
#define		WRITE_MULTIPLE_BLOCK    	25
//#define PROGRAM_CID             26
#define		PROGRAM_CSD            		27
#define		SET_WRITE_PROT         		28
#define		CLR_WRITE_PROT         		29
#define		SEND_WRITE_PROT        		30
#define		ERASE_START             	32
#define		ERASE_END					33
//#define UNTAG_SECTOR            34
//#define TAG_ERASE_GROUP_START   35
//#define TAG_ERASE_GROUP_END     36
//#define UNTAG_ERASE_GROUP       37
#define		ERASE_GO                	38
//for SPI mode
#define		READ_OCR                	58 //for SPI
#define		CRC_ON_OFF              	59
#define		APP_CMD                 	55
//APP command
#define		SET_BUS_WIDTH           	6
#define		SD_STATUS               	13
#define		SD_NUM_WR_BLOCKS        	22
#define		SD_WR_BLK_ERASE_COUNT   	23
#define		SD_APP_OP_COND          	41
#define		SD_SET_CLR_CARD_DETECT  	42
#define		SD_SEND_SCR             	51

#define		SWITCH_MMC					6
// SD Response types
#define		R0	0         	// NONE response
#define		R1 	1         	// Basic response format
#define		R2	2         	// R2 response. Used by ALL_SEND_CID(CMD2),
                    		// SEND_CID(CMD10) and SEND_CSD(CMD9)
#define    	R3	3         	// R3 response. Used by SEND_APP_OP_COND(ACMD41)
#define    	R6	6         	// R6 response. Used by SEND_RELATIVE_ADDR(CMD3)
#define    	R1b	9

//bit definition for SD controller register

// 0x0 Control register
#define		FIFO_RESET		0x08
#define		CMD_START		0x01
#define		CMD_READ		0x00
#define		CMD_WRITE		0x04
#define		CMD_SWRITE		0x10
#define		CMD_SREAD		0x20
#define		CMD_MWRITE		0x30
#define		CMD_MREAD		0x40

//0x08 BusMode register
#define		SOFT_RESET		0x80
#define		SD_POWER	  	0x40
#define		SPI_CS		  	0x20
#define		SD_OFF			0x10
#define		FOURBIT_MODE	0x02
#define   	ONEBIT_MODE   	0xFD
#define 	SPI_MODE		0x01
#define   	SD_MODE       	0x00
#define   	EIGHTBIT_MODE	0x04

//0x0C BlkLen
#define		INT_ENABLE		0x80
#define		DATA3_CD	  	0x40
#define		GPI_CD		  	0x20
#define   	CD_POL_HIGH   	0x10
#define		CRCERR_ABORT	0x08 //abort multiple-blk-transfer when CRC-Err


//0x24 IntMask0
#define 		DI_INT_EN             	0x80
#define 		CD_INT_EN				0x40
#define 		BLK_TRAN_DONE_INT_EN  	0x20
#define 		MBLK_TRAN_DONE_INT_EN 	0x10

//0x25 IntMask0
#define 		WCRC_ERR_INT_EN            	0x80
#define 		RCRC_ERR_INT_EN            	0x40
#define 		RESCRC_ERR_INT_EN          	0x20
#define 		DATA_TOUT_INT_EN           	0x10
#define 		MBLK_AUTO_STOP_INT_EN		0x08
#define 		CMD_RES_TOUT_INT_EN        	0x04
#define 		CMD_RES_TRAN_DONE_INT_EN	0x02

//0x28 Status0 register
#define		DEVICE_INS		0x80
#define		CARD_DETECT		0x40
#define		BLK_DONE		0x20
#define		MBLK_DONE		0x10
#define		CD_GPI			0x08
#define		CD_DATA3		0x04
#define		Write_Protect	0x02


//0x29 Status1 register
#define		WCRC_ERR		0x80
#define		RCRC_ERR		0x40
#define		RSP_CRC_ERR		0x20
#define		DATA_TIMEOUT	0x10
#define		AUTOSTOP_DONE	0x08
#define		RSP_TIMEOUT		0x04
#define		CMDRSP_DONE		0x02
#define		SDIO_INT		0x01

//0x2A Status2 register
#define		DIS_FORCECLK	0x80
#define		DATARSP_BUSY	0x20
#define   	CMD_RES_BUSY  	0x10

//0x30 Clock register
#define		Clk_375			0x00
#define		Clk_10			0x01
#define		Clk_12			0x02
#define		Clk_15			0x03
#define		Clk_20			0x04
#define		Clk_24			0x05
#define		Clk_30			0x06
#define		Clk_40			0x07
#define		Clk_48			0x08

#define SD_Clk_Auto				0
#define SD_Clk_15MHz			1
#define SD_Clk_20MHz			2
#define SD_Clk_25MHz			3
#define SD_Clk_33MHz			4
#define SD_Clk_40MHz			5
#define SD_Clk_44MHz			6
#define SD_Clk_50MHz			7
#define SD_Clk_400KHz			8


//0x34 Extension Control register
#define		ArgShift			0x02
#define		AutoStop			0x01

//return sdstatus
#define 	CMD_OK				0x00
#define		CMDRSP_TOUT			0x01
#define		RSP_CRCERR			0x02
#define 	APPCMD_FAIL			0x03
#define		DATA_TOUT			0x04
#define		WRITE_CRCERR		0x05
#define		READ_CRCERR			0x06
#define		TYPE_UNKNOWN		0x07
#define		NOCARD_INSERT		0x08
#define		POWER_FAIL			0x09
#define		READ_CID_ERR		0x0a
#define		READ_RCA_ERR		0x0b
#define		SET_RCA_ERR			0x0c
#define		READ_CSD_ERR		0x0d
#define		SELECT_CARD_ERR		0x0e
#define		READ_SCR_ERR		0x0f
#define		SET_BUSWIDTH_ERR	0x10
#define		SET_BLKLEN_ERR		0x11
#define		STOP_FAIL			0x12
#define		MBLK_FAIL			0x13
#define   	TURE_T       		0x14
#define   	FALSE_F      		0x15

#define	SWITCH_ERR      		0x14
#define	SD1_0					0x00
#define	SD1_1					0x01
#define	SD2_0					0x02

#define	MMC1_12					0x00
#define	MMC1_4					0x01
#define	MMC2_02					0x02
#define	MMC3_123				0x03
#define	MMC4_01					0x04

#define	HostCapacitySupport		0x40
#define	StandardCapacity		0x00
#define	HighCapacity			0x01

#define MMC_BLOCK_SIZE			512
#define CFG_MMC_BASE		0xF0000000

//SD DMA channel control registers -- CTR

/* Reserved [07:05] */
#define SD_DMA_CTR_SW_REQ_EN                     	0x10            /* [04:04] */
#define SD_DMA_CTR_SW_REQ_DIS                    	0x00

/* Reserved [03:01] */
#define SD_DMA_CTR_CH_EN                          	0x01            /* [00:00] */
#define SD_DMA_CTR_CH_DIS                         	0x00            /* [00:00] */

//SD DMA channel status registers -- CSR
#define SD_DMA_CSR_DMA_REQ                        	0x80            /* [07:07] */
/* Reserved [06:04] */
#define SD_DMA_CSR_FIFO_EMPTY_INT          			0x08            /* [03:03] */
#define SD_DMA_CSR_FIFO_EMPTY_INT_WRITE_CLEAR     	0x08            /* [03:03] */
#define SD_DMA_CSR_AHB_BUS_ERR                    	0x04            /* [02:02] */
#define SD_DMA_CSR_AHB_BUS_ERR_WRITE_CLEAR        	0x04            /* [02:02] */
/* For USB use [01:01] */
#define SD_DMA_CSR_TC                             	0x01            /* [00:00] */
#define SD_DMA_CSR_TC_WRITE_CLEAR            		0x01

#define SD_DMA_CSR_ALL_SET_CLEAR               		0x0F

//SD DMA global control registers -- GCR

/* Reserved [31:25] */
#define SD_DMA_GCR_MANUAL_FLUSH_EN            		0x01000000      /* [24:24] */
#define SD_DMA_GCR_MANUAL_FLUAH_DIS            		0x00000000      /* [24:24] */
/* Reserved [23:17] */
#define SD_DMA_GCR_FLUSH_FIFO                  		0x00010000      /* [16:16] */
#define SD_DMA_GCR__FLUSH_SELF_CLEAR           		0x00000000      /* [16:16] */
/* Reserved [15:9] */
#define SD_DMA_GCR_GINT_EN                     		0x00000100      /* [08:08] */
#define SD_DMA_GCR_GINT_DIS                    		0x00000000      /* [08:08] */
/* Reserved [07:01] */
#define SD_DMA_GCR_GDMA_EN                     		0x00000001      /* [00:00] */
#define SD_DMA_GCR_GDMA_DIS                    		0x00000000      /* [00:00] */

/*
 *	SD PDMA
 */
#define SD_PDMA_BASE_ADDR 0xD800A100
#define SD_DESC_BASE_ADDR 0x00d00000
struct _SD_PDMA_REG_ {
	volatile unsigned long DMA_GCR;		/*	Rx00	*/
	volatile unsigned long DMA_IER;		/*	Rx04	*/
	volatile unsigned long DMA_ISR;		/*	Rx08	*/
	volatile unsigned long *DMA_DESPR;	/*	Rx0C	*/
	volatile unsigned long DMA_RBR;		/*	Rx10	*/
	volatile unsigned long DMA_DAR;		/*	Rx14	*/
	volatile unsigned long DMA_BAR;		/*	Rx18	*/
	volatile unsigned long DMA_CPR;		/*	Rx1C	*/
	volatile unsigned long DMA_CCR;		/*	RX20	*/
	volatile unsigned long resv[5];    	/*	RX2C-3C	*/
};	
//} SD_PDMA_REG, *PSD_PDMA_REG;

/*
 *	SD PDMA - DMA_GCR : DMA Global Control Register
 */
#define SD_PDMA_GCR_DMA_EN			0x00000001      /* [0] -- DMA controller enable */
#define SD_PDMA_GCR_SOFTRESET		0x00000100      /* [8] -- Software rest */

/*
 *	SD PDMA - DMA_IER : DMA Interrupt Enable Register
 */
#define SD_PDMA_IER_INT_EN			0x00000001      /* [0] -- DMA interrupt enable */
/*
 *	SD PDMA - DMA_ISR : DMA Interrupt Status Register
 */
#define SD_PDMA_IER_INT_STS			0x00000001      /* [0] -- DMA interrupt status */
/*
 *	SD PDMA - DMA_DESPR : DMA Descriptor base address Pointer Register
 */

/*
 *	SD PDMA - DMA_RBR : DMA Residual Bytes Register
 */
#define SD_PDMA_RBR_End				0x80000000      /* [0] -- DMA interrupt status */
#define SD_PDMA_RBR_Format			0x40000000      /* [0] -- DMA interrupt status */
/*
 *	SD PDMA - DMA_DAR : DMA Data Address Register
 */

/*
 *	SD PDMA - DMA_BAR : DMA Rbanch Address Register
 */

/*
 *	SD PDMA - DMA_CPR : DMA Command Pointer Register
 */

/*
 *	SD PDMA - DMA_CCR : DMAContext Control Register for Channel 0
 */
#define SD_PDMA_READ					0x00
#define SD_PDMA_WRITE					0x01
#define SD_PDMA_CCR_RUN					0x00000080
#define SD_PDMA_CCR_IF_to_peripheral	0x00000000
#define SD_PDMA_CCR_peripheral_to_IF	0x00400000
#define SD_PDMA_CCR_EvtCode				0x0000000f
#define SD_PDMA_CCR_Evt_no_status		0x00000000
#define SD_PDMA_CCR_Evt_ff_underrun		0x00000001
#define SD_PDMA_CCR_Evt_ff_overrun		0x00000002
#define SD_PDMA_CCR_Evt_desp_read		0x00000003
#define SD_PDMA_CCR_Evt_data_rw			0x00000004
#define SD_PDMA_CCR_Evt_early_end		0x00000005
#define SD_PDMA_CCR_Evt_success			0x0000000f

/*
 *	PDMA Descriptor short
 */
struct _SD_PDMA_DESC_S{
	unsigned long volatile ReqCount:16;		/* bit 0 -15 -Request count             */
	unsigned long volatile i:1;				/* bit 16    -interrupt                 */
	unsigned long volatile reserve:13;		/* bit 17-29 -reserved                  */
	unsigned long volatile format:1;		/* bit 30    -The descriptor format     */
	unsigned long volatile end:1;			/* bit 31    -End flag of descriptor list*/
	unsigned long volatile *DataBufferAddr;	/* bit 31    -Data Buffer address       */
};//__attribute__((packed)); /*mvl tool chain can't uas __attribute__((packed))*/

/*
 *	PDMA Descriptor long
 */
struct _SD_PDMA_DESC_L{
	unsigned long volatile ReqCount:16;		/* bit 0 -15 -Request count             */
	unsigned long volatile i:1;				/* bit 16    -interrupt                 */
	unsigned long volatile reserve:13;		/* bit 17-29 -reserved                  */
	unsigned long volatile format:1;		/* bit 30    -The descriptor format     */
	unsigned long volatile end:1;			/* bit 31    -End flag of descriptor list*/
	unsigned long volatile *DataBufferAddr;	/* bit 31-0  -Data Buffer address       */
	unsigned long volatile *BranchAddr;		/* bit 31-2  -Descriptor Branch address	*/
	unsigned long volatile reserve0;		/* bit 31-0  -reserved					*/
};//__attribute__((packed)); 

//SD card related information
typedef struct sd_info_s {
	unsigned char	RCAHi;
	unsigned char	RCALo;
	unsigned long	SDCard_Size;
	unsigned char	MMC_Card;
	unsigned char	SD_Card;
  	unsigned char 	SD_IO_Card;
	unsigned char	InitOK;
	unsigned char	CardStateChange;
	unsigned char	CardInsert;
	unsigned char	CardRemove;
	unsigned char 	SDVersion;
	unsigned char 	CardCapacityStatus;
	unsigned char	MMCMaxClockRate;
	unsigned char 	HighSpeedSupport;
  	unsigned char	MMCVersion;
	unsigned char	ocr[4];
	unsigned char	cid[16];
	unsigned char	csd[16];
	unsigned char	ext_csd[512];
	unsigned char   scr[8];
	unsigned char	CtrlID;
	unsigned long	RCA;
	unsigned long	strapping;
} sd_info_t;

/*SDMMC control registers.*/
typedef struct{
    volatile unsigned char      ctlr;           /*Control Register*/
    volatile unsigned char      cmdi;           /*Command Index Register*/
    volatile unsigned char      respt;          /*Response Type Register*/
    volatile unsigned char      Reserved1;      /*Reserved1*/
    volatile unsigned char      cmdarg0;        /*Command Argument Register 0x03*/
    volatile unsigned char      cmdarg1;        /*Command Argument Register 0x04*/
    volatile unsigned char      cmdarg2;        /*Command Argument Register 0x05*/
    volatile unsigned char      cmdarg3;        /*Command Argument Register 0x06*/
    volatile unsigned char      busm;           /*Bus Mode Register*/
    volatile unsigned char      Reserved2[3];   /*Reserved2*/
    volatile unsigned short     blklen;         /*Block Length Register*/
    volatile unsigned short     blkcnt;         /*Block Count Register*/
    volatile unsigned char      resr[16];       /*Response Register*/
    volatile unsigned short     cbc;            /*Current Block Count*/
    volatile unsigned short     Reserved3;      /*Reserved3*/
    volatile unsigned char      imr0;           /*Interrupt Mask Register 0*/
    volatile unsigned char      imr1;           /*Interrupt Mask Register 1*/
    volatile unsigned char      Reserved4[2];   /*Reserved3*/
    volatile unsigned char      str0;           /*SD Status Register 0*/
    volatile unsigned char      str1;           /*SD Status Register 1*/
    volatile unsigned char      str2;           /*SD Status Register 2*/
    volatile unsigned char      str3;           /*SD Status Register 3 (SPI Data Error)*/
    volatile unsigned char      rtor;           /*Response Time Out Register*/
    volatile unsigned char      Reserved5[3];   /*Reserved4*/
    volatile unsigned long      Reserved6;      /*Reserved5*/
    volatile unsigned char      extctl;         /*Extend Control Register*/
    volatile unsigned char      Reserved7[3];   /*Reserved6*/
    volatile unsigned short     sblklen;       /*Shadowed Block Length Register*/
    volatile unsigned short     Reserved8;     /*Reserved7*/
    volatile unsigned short     timeval;       /*Timer Value Register*/
}
WMT_SDMMC_REG, *PWMT_SDMMC_REG;



/*GPIO*/
typedef struct _GPIO_REG_
{
  volatile unsigned long CTRL_KPAD_MPGTS_ROM;   // [Rx00] GPIO Enable Control Register for Kpad, Mpeg-TS, CEN_SEEROM
  volatile unsigned long CTRL_DVI;        // [Rx04] GPIO Enable Control Register for DVI Signal
  volatile unsigned long CTRL_CF;         // [Rx08] GPIO Enable Control Register for CF
  volatile unsigned long CTRL_NF;         // [Rx0C] GPIO Enable Control Register for NF
  volatile unsigned long CTRL_PCIAD;        // [Rx10] GPIO Enable Control for PCI AD BUS
  volatile unsigned long CTRL_PCI;        // [Rx14] GPIO Eanble Control for Non PCI AD BUS
  volatile unsigned long CTRL_LCD_SPDIF;      // [Rx18] GPIO Enable Control for LCD, SPDIF
  volatile unsigned long RESV_1C;         // [Rx1C]

  volatile unsigned long OC_KPAD_MPGTS_ROM;   // [Rx20] GPIO Output Control Register for Kpad, Mpeg-TS, CEN_SEEROM
  volatile unsigned long OC_DVI;          // [Rx24] GPIO Output Control Register for DVI Signal
  volatile unsigned long OC_CF;         // [Rx28] GPIO Output Control Register for CF
  volatile unsigned long OC_NF;         // [Rx2C] GPIO Output Control Register for NF
  volatile unsigned long OC_PCIAD;        // [Rx30] GPIO Output Control Register for PCI AD BUS
  volatile unsigned long OC_PCI;          // [Rx34] GPIO Output Control Register for Non PCI AD BUS
  volatile unsigned long OC_LCD_SPDIF;      // [Rx38] GPIO Output Control Register for LCD, SPDIF
  volatile unsigned long RESV_3C;         // [Rx3C]

  volatile unsigned long OD_KPAD_MPGTS_ROM;   // [Rx40] GPIO Output Data Register for Kpad, Mpeg-TS, CEN_SEEROM
  volatile unsigned long OD_DVI;          // [Rx44] GPIO Output Data Register for DVI Signal
  volatile unsigned long OD_CF;         // [Rx44] GPIO Output Data Register for CF
  volatile unsigned long OD_NF;         // [Rx4C] GPIO Output Data Register for NF
  volatile unsigned long OD_PCIAD;        // [Rx50] GPIO Output Data Register for PCIAD
  volatile unsigned long OD_PCI;          // [Rx54] GPIO Output Data Register for Non PCI AD BUS
  volatile unsigned long OD_LCD_SPDIF;      // [Rx58] GPIO Output Data Register for LCD, SPDIF
  volatile unsigned long RESV_5C;         // [Rx5C]

  volatile unsigned long ID_KPAD_MPGTS_ROM;   // [Rx60] GPIO Input Data Register for Kpad, Mpeg-TS, CEN_SEEROM
  volatile unsigned long ID_DVI;          // [Rx64] GPIO Input Data Register for DVI Signal
  volatile unsigned long ID_CF;         // [Rx68] GPIO Input Data Register for CF
  volatile unsigned long ID_NF;         // [Rx6C] GPIO Input Data Register for NF
  volatile unsigned long ID_PCIAD;        // [Rx70] GPIO Input Data Register for PCIAD
  volatile unsigned long ID_PCI;          // [Rx74] GPIO Input Data Register for Non PCI AD BUS
  volatile unsigned long ID_LCD_SPDIF;      // [Rx78] GPIO Input Data Register for LCD, SPDIF
  volatile unsigned long RESV_7C;         // [Rx7C]

  volatile unsigned long RESV_80[0x20];     // [Rx80-RxFF]

  volatile unsigned long STRAP_STS1;        // [Rx100] Strapping Option Status Register1
  volatile unsigned long STRAP_STS2;        // [Rx104] Strapping Option Status Register2
  volatile unsigned long AHB_CTRL;        // [Rx108] AHB Control Register
  volatile unsigned long RESV_10C[0x3D];      // [Rx10C-Rx1FF]

  volatile unsigned long PIN_MULTI;       // [Rx200] Pin Multiplexing
  volatile unsigned long RESV_204[0x3];     // [Rx204-Rx20F]
  volatile unsigned long PCI_DELAY_TEST;      // [Rx210]
  volatile unsigned long PCI_RESET;       // [Rx214]
  volatile unsigned long RESV_218[2];       // [Rx218 - Rx21F]
  volatile unsigned long PCI_1X_DELAY;      // [Rx220]
  volatile unsigned long PCI_2X_DELAY;      // [Rx224]
  volatile unsigned long PCI_2X_RELAY_INVERT; // [Rx228]
  volatile unsigned long RESV_22C[0x35];      // [Rx22C - Rx2FF]

  volatile unsigned long INT_REQ_TYPE;      // [Rx300] GPIO Interrupt Request Type Register
  volatile unsigned long INT_REQ_STS;       // [Rx304] GPIO Interrupt Request Status Register
  volatile unsigned long RESV_308[0x3E];      // [Rx308-Rx3FF]

  volatile unsigned long IDE_IO_DRV;        // [Rx400] IDE I/O Drive Strength Register
  volatile unsigned long MS_IO_DRV;       // [Rx404] MS I/O Drive Strength and Slew Rate Register
  volatile unsigned long PCI_IO_DRV;        // [Rx408] PCI Bus I/O Drive Strength and Slew Rate Register
  volatile unsigned long SD_IO_DRV;       // [Rx40C] SD I/O Drive Strength and Slwe Rate Register
  volatile unsigned long VID_IO_DRV;        // [Rx410] VID Clock I/O Drive Strength and Slew Rate Register
  volatile unsigned long SPI_IO_DRV;        // [Rx414] SPI I/O Drive Strength and Slew Rate Register
  volatile unsigned long CF_IO_DRV;       // [Rx418] CF I/O Drive Strength and Slew Rate Register
  volatile unsigned long LPC_IO_DRV;        // [Rx41C] LPC I/O Drive Strength and Slew Rate Register
  volatile unsigned long NF_IO_DRV;       // [Rx420] NAND I/O Drive Strength and Slew Rate Register
  volatile unsigned long MISC_IO_DRV;       // [Rx424] MISC I/O Drive Strength and Slew Rate Register
}GPIO_REG, * PGPIO_REG;


typedef struct root_dir {
	char MagicHeader[32];
	char filename1[16];
	unsigned int filesize1;
	char resv1[12];
	char filename2[16];
	unsigned int filesize2;
	char resv2[12];
	char filename3[16];
	unsigned int filesize3;
	char resv3[12];
} root_dir;


#endif