summaryrefslogtreecommitdiff
path: root/Board/Flash/SPI/SpiFlash.h
blob: 9aca7079b1e679d4bd8137d77dbb4a1f7428b2ad (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
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
//*************************************************************************
//*************************************************************************
//**                                                                     **
//**        (C)Copyright 1985-2008, American Megatrends, Inc.            **
//**                                                                     **
//**                       All Rights Reserved.                          **
//**                                                                     **
//**      5555 Oakbrook Parkway, Suite 200, Norcross, GA 30093           **
//**                                                                     **
//**                       Phone: (770)-246-8600                         **
//**                                                                     **
//*************************************************************************
//*************************************************************************

//**********************************************************************
// $Header: /Alaska/Projects/Intel/Haswell/LynxPoint_SharkBay-DT_Crb_1AQQW/Board/Flash/SPI/SpiFlash.h 2     4/24/13 11:10p Thomaschen $
//
// $Revision: 2 $
//
// $Date: 4/24/13 11:10p $
//**********************************************************************
// Revision History
// ----------------
// $Log: /Alaska/Projects/Intel/Haswell/LynxPoint_SharkBay-DT_Crb_1AQQW/Board/Flash/SPI/SpiFlash.h $
// 
// 2     4/24/13 11:10p Thomaschen
// 
// 29    3/08/13 3:12a Calvinchen
// [TAG]  		EIP110515
// [Category]  	Bug Fix
// [Severity]  	Minor
// [Symptom]  	Microchip SST26VF064B & SST26VF064BA 8MB SPI Flash part
// support 
// [RootCause]  	Need "Global Block Protection Unlock" before programming.
// [Solution]  	Added "Global Block Protection Unlock" before programming.
// [Files]  		SpiFlash.h
// SpiIdentify.c
// SpiFlash.cif
// 
// 28    2/18/13 5:14a Calvinchen
// [TAG]  		EIP114488
// [Category]  	Improvement
// [Description]  	1. Added MXIC MX25U6435F SPI Flash part support
// 2. Added GigaDevice 25LQ series flash part.
// [Files]  		SpiFlash.h
// SpiIdentify.c
// 
// 27    1/14/13 5:40a Calvinchen
// [TAG]  		EIP110515
// [Category]  	Improvement
// [Description]  	Microchip SST26VF064B & SST26VF064BA 8MB SPI Flash part
// support
// [Files]  		SpiFlash.h
// SpiIdentify.c
// 
// 26    12/13/12 2:22a Calvinchen
// Added support for winbond W25Q F and W series Flash Parts.
// 
// 25    7/18/12 6:10a Calvinchen
// 1. Changed N25Q128 to 4K erase.
// 2. Added N25Q128A support.
// 
// 24    10/31/11 6:46a Calvinchen
// [TAG]  		EIP68872
// [Category]  	Improvement
// [Description]  	Added ESMT 25L64QA.
// [Files]  		SpiFlash.h
// SpiIdentify.c
// 
// 23    8/24/11 7:58a Calvinchen
// Improvement :
// Added Token "FAST_READ_SUPPORT" for switching the SPI
// Read(03)/FastRead(0B)/DualOutputFastRead(3B) command. To use the
// FastRead and the Dual Output Fast Read command MUST have Hardware SPI
// support. **Only validated with Intel Mahobay platform (Southbridge:
// PatherPoint)**
// 
// 22    7/21/11 5:07a Calvinchen
// [TAG]  		EIP65366
// [Category]  	Improvement
// [Description]  	New SPI Flash supports for EON 25QH and ESMT 25L PA
// flash part. 
// [Files]  		SpiFlash.h
// SpiIdentify.c
// 
// 21    4/08/11 3:05a Chunweitseng
// [TAG]  		EIP57327
// [Category]  	Improvement
// [Description]  	 Added Support for FIDELIX FM25Q32A/64A and AMIC
// 25LQ032.
// 
// [Files]  		SpiFlash.h, SpiIdentify.c
// 
// 20    2/10/11 5:43a Calvinchen
// [TAG]  		EIP53437
// [Category]  	Bug Fix
// [Severity]  	Minor
// [Symptom]  	Corrected Numonyx M25P128 Minimum Sector Size to 256K. 
// [RootCause]  	None.
// [Solution]  	None.
// [Files]  		SpiFlash.sdl
// SpiFlash.mak
// SpiFlash.h
// SpiIdentify.c
// SpiFlash.cif
// 
// 19    11/30/10 3:28a Calvinchen
// Added Numonyx N25Q Series.
// 
// 17    3/11/10 6:43a Calvinchen
// Improvement : Added SST AAIWordProgram SPI command to speed up the
// programming time.
// 
// 16    1/07/10 5:34a Calvinchen
// Addes support for Spansion S25FL128/129P.
// 
// 15    12/31/09 1:50a Klzhan
// Improvement : Support EON 25Q32/64.
// 
// 14    12/23/09 6:13a Calvinchen
// Improvement:1.Added FWH/LPC/STD Flash Device Number support.
// 
// 13    12/22/09 2:30a Calvinchen
// Added support for ATMEL 25DQ161.
// 
// 12    12/16/09 3:45a Calvinchen
// 
// 11    12/15/09 5:49a Calvinchen
// Improvement : 
// 1.Added support for GigaDevie 25Q80/16.
// 2.Added Flash Chip Name support.
// 
// 9     6/24/09 3:14a Calvinchen
// (EIP22177) Updated for Aptio Source Enhancement. 
//
// 8     5/11/09 7:21a Calvinchen
// Added support for SST 25VF064C and MXIC MX25L1635/3235/6435..
//
// 7     4/27/09 3:19a Calvinchen
// 1.Added support for Winbond 25Q128
// 2.(EIP20459) Added Multiple SPI CSP component support.
//
// 6     12/10/08 5:53a Calvinchen
// Added support for Winbond W25Q80/16 1M/2M SPI flash.
//
// 5     9/30/08 10:09a Calvinchen
// According to Intel ICH7/ICH8/ICH9/ICH10 - SPI Family Flash Programming
// Guide Application Note - Rev#2.4,
// Section#5.3 Software Sequencing Opcode Requirements and
// Recommendations,It is strongly recommended that the "9Fh" JEDEC ID be
// used instead of "90h" or "AB".
// Intel utilities such as the Flash Programming tool (Fprog.exe and
// fpt.exe) will incorrectly detect the flash part in the system and it
// may lead to undesired program operation.
//
// 4     9/11/08 2:30a Calvinchen
// Added support for EON 25F32.
//
// 3     8/26/08 2:54a Calvinchen
// 1.Added support for AMTME 25DF641.
// 2.Fixed Fail to un-protect ATMEL flash.
// 3.Fixed building failed if $(CFLAGS) = /W4.
//
// 2     5/09/08 3:35a Calvinchen
// Added support for STM M25PF32.
//
// 1     3/13/08 6:31a Calvinchen
//
// 12    3/05/08 9:11a Robert
//
// 11    2/13/08 6:14p Robert
//
// 2     2/13/08 6:03p Robert
// coding updates and addition of Intel SPI part
//
// 10    1/07/08 3:05p Robert
// updated for coding standard
//
// 9     1/02/08 12:04p Robert
// Added the MX25L1605 device ID
//
// 8     11/09/07 3:49p Alexp
// Added SPI opcode Read Index
//
// 7     10/24/07 4:23p Robert
// Needed to add a function prototype for SpiTransfer()
//
// 6     10/09/07 1:11p Robert
// added a new VID/DID and cleaned up other additions of parts
//
// 5     10/01/07 4:19a Klzhan
// Added support for AMIC A25L080 , MXIC 25L6405 25L3205 , ST 25P32 .
//
// 4     8/20/07 2:22p Robert
// Added support for Atmel AT26DF321 and for winbond w25x32 parts
//
// 3     8/02/07 2:51p Artems
// Added support Atmel 1MB
//
// 2     2/20/07 6:44p Robert
// removed some unneeded definitions and added a few new ones
//
// 1     12/18/06 3:39p Robert
// Initial Check in
//
// 2     11/16/06 6:27p Robert
// removed unused definition
//
// 1     10/31/06 2:30p Sivagarn
// Initial Checkin
//
//
//**********************************************************************
//<AMI_FHDR_START>
//
// Name:    SpiFlash.h
//
// Description: Contains Vendor IDs and Device IDs for ths supported
//      parts.  also contains the command values for each supported part
//
//<AMI_FHDR_END>
//**********************************************************************

#ifndef _SPIFlash_H_
#define _SPIFlash_H_


#include <token.h>
#include "Board\Sb\Sb.h"


VOID SpiFlashLock(UINT16 MfgDevId, BOOLEAN Lock);


//-------------------------------------------------------------------
// Supported SPI devices
// MFG and Device code
#define SST_25LF040A                0x44bf
#define SST_25LF040                 0x40bf
#define SST_25LF080A                0x80bf

#define SST_25VF040B                0x8dbf
#define SST_25VF080B                0x8ebf
#define SST_25VF016B                0x41bf
#define SST_25VF032B                0x4abf
#define SST_25VFxxx_ID              0x25bf
#define SST_26VFxxx_ID              0x26bf


//PMC 25LVxxx Device ID/Manufacturer ID
#define PMC_25LV040                 0x7e9d
#define PMC_25LVxxx_ID              0x9d7f

#define ATMEL_26DF041               0x441f
#define ATMEL_26DF081               0x451f
#define ATMEL_26DF161               0x461f
#define ATMEL_26DF321               0x471f  // ATMEL 26DF321 32Mbit
#define ATMEL_25DF641               0x481f  // ATMEL 25DF641 64Mbit
#define ATMEL_25DQ161               0x861f

//Winbond W25Xxx Device ID/Manufacturer ID
#define WINBOND_W25X10              0x10ef
#define WINBOND_W25X20              0x11ef
#define WINBOND_W25X40              0x12ef
#define WINBOND_W25X80              0x13ef
#define WINBOND_W25X16              0x14ef
#define WINBOND_25Xxx_ID            0x30ef
#define WINBOND_25Qxx_ID            0x40ef
#define WINBOND_25QxxW_ID           0x50ef
#define WINBOND_25QxxF_ID           0x60ef

// MXIC Device ID/Manufacturer ID
#define MX25L4005_DEVICE_ID         0x13c2
#define MX25L8005_DEVICE_ID         0x14c2
#define MX25L1605_DEVICE_ID         0x15c2
#define MX25L3205_DEVICE_ID         0x16c2
#define MX25L6405_DEVICE_ID         0x17c2
#define MXIC_25Lxxxx_ID             0x20c2
#define MXIC_25Lxx35_ID             0x24c2
#define MXIC_25Lxx36_ID             0x5ec2
#define MXIC_25Uxx35_ID             0x25c2

// Spansion S25FL008A Device ID/Manufacturer ID
#define SPANSION_25FL004A           0x1201
#define SPANSION_25FL008A           0x1301
#define SPANSION_25FLxxx_ID         0x0201
#define SPANSION_25FLxxxP_ID        0x2001

// ESMT F25L00xA Device ID/Manufacturer ID
#define ESMT_25L004A                0x128c
#define ESMT_25L008A                0x138c
#define ESMT_25L016A                0x148c
#define ESMT_25L032A                0x158c
#define ESMT_25LxxxT_ID             0x208c
#define ESMT_25LxxxB_ID             0x218c
#define ESMT_25Lxx_ID               0x408c
#define ESMT_25LxxQ_ID              0x418c

// ST Micro/Micron/Numonyx M25Pxx Device ID/Manufacturer ID
#define STM_M25P40                  0x1320
#define STM_M25P80                  0x1420
#define STM_M25P32                  0x2020
#define STM_25PExx_ID               0x8020
#define STM_25PXxx_ID               0x7120      // M25PX16/32
#define STM_25PFxx_ID               0x7020      // M25PF32
#define STM_25Pxx_ID                0x2020      // M25P16/32/64
#define Numonyx_25Qxx_ID            0xBA20      // N25Q16/32/64/128
#define Numonyx_25QxxA_ID           0xBB20      // N25Q16/32/64/128

// AMIC 25Lxx Device ID/Manufacturer ID
#define AMIC_25Lxx_ID               0x377f
#define AMIC_25Lxxx_ID              0x3037
#define AMIC_25LQxxx_ID             0x4037

// EON  25P/Fxx Device ID/Manufacturer ID
#define EON_25Fxx_ID                0x311c
#define EON_25Pxx_ID                0x201c
#define EON_25Qxx_ID                0x301c
#define EON_25QHxx_ID               0x701c

// INTEL 25Fxxx Device ID/Manufacturer ID
#define INTEL_25Fxxx_ID             0x8989
#define INTEL_25Fxxx_ID             0x8989

// Giga Device GD25Qxx Device ID/Manufacturer ID
#define GD_25Qxx_ID                 0x40C8
#define GD_25LQxx_ID                0x60C8

// FIDELIX Device FM_25Qxx Device ID/Manufacturer ID
#define FM_25Qxx_ID                 0x32F8

//-------------------------------------------------------------------
//  NOTE: Assuming that 8Mbit flash will only contain a 4Mbit binary.
//        Treating 4Mbit and 8Mbit devices the same.

//-------------------------------------------------------------------
// BIOS Base Address
#define BIOS_BASE_ADDRESS_4M 0xfff80000
#define BIOS_BASE_ADDRESS_8M 0xfff00000

//-------------------------------------------------------------------
// block and sector sizes
#define SECTOR_SIZE_256B    0x100       // 4kBytes sector size
#define SECTOR_SIZE_4KB     0x1000      // 4kBytes sector size
#define SECTOR_SIZE_8KB     0x2000      // 8kbytes sector size
#define SECTOR_SIZE_64KB    0x10000     // 64kBytes sector size
#define SECTOR_SIZE_256KB   0x40000     // 256kBytes sector size
#define BLOCK_SIZE_32KB     0x8000      // 32Kbytes block size

//-------------------------------------------------------------------
// Flash commands

// Commands for SST 25LFxx and 25VFxx parts
#define SPI_SST25LF_COMMAND_WRITE         0x02
#define SPI_SST25LF_COMMAND_READ          0x03
#if FAST_READ_SUPPORT == 0
#define SPI_SST25VF_COMMAND_READ          0x03        // Read Byte
#elif FAST_READ_SUPPORT == 1
#define SPI_SST25VF_COMMAND_READ          0x0B        // Fast Read
#elif FAST_READ_SUPPORT == 2
#define SPI_SST25VF_COMMAND_READ          0x3B        // Dual Output Fast Read
#endif
#define SPI_SST25LF_COMMAND_ERASE         0x20
#define SPI_SST25LF_COMMAND_WRITE_DISABLE 0x04
#define SPI_SST25LF_COMMAND_READ_STATUS   0x05
#define SPI_SST25LF_COMMAND_WRITE_ENABLE  0x06
//#define SPI_SST25LF_COMMAND_READ_ID       0xab
#define SPI_SST25LF_COMMAND_READ_ID       0x90
#define SPI_SST25VF_COMMAND_READ_ID       0x9f
#define SPI_SST25LF_COMMAND_WRITE_S_EN    0x50
#define SPI_SST25LF_COMMAND_WRITE_S       0x01

// PMC commands
#define SPI_PMC25LV_COMMAND_WRITE         0x02
#define SPI_PMC25LV_COMMAND_READ          0x03
#define SPI_PMC25LV_COMMAND_ERASE         0xd7
#define SPI_PMC25LV_COMMAND_WRITE_DISABLE 0x04
#define SPI_PMC25LV_COMMAND_READ_STATUS   0x05
#define SPI_PMC25LV_COMMAND_WRITE_ENABLE  0x06
#define SPI_PMC25LV_COMMAND_READ_ID       0xab
#define SPI_PMC25LV_COMMAND_WRITE_S_EN    0x06
#define SPI_PMC25LV_COMMAND_WRITE_S       0x01

// Atmel commands
#define SPI_AT26DF_COMMAND_WRITE         0x02
#if FAST_READ_SUPPORT == 0
#define SPI_AT26DF_COMMAND_READ          0x03        // Read Byte
#elif FAST_READ_SUPPORT == 1
#define SPI_AT26DF_COMMAND_READ          0x0B        // Fast Read
#elif FAST_READ_SUPPORT == 2
#define SPI_AT26DF_COMMAND_READ          0x3B        // Dual Output Fast Read
#endif
#define SPI_AT26DF_COMMAND_ERASE         0x20
#define SPI_AT26DF_COMMAND_WRITE_DISABLE 0x04
#define SPI_AT26DF_COMMAND_READ_STATUS   0x05
#define SPI_AT26DF_COMMAND_WRITE_ENABLE  0x06
#define SPI_AT26DF_COMMAND_READ_ID       0x9f
#define SPI_AT26DF_COMMAND_WRITE_S_EN    0x00
#define SPI_AT26DF_COMMAND_WRITE_S       0x01
// ATMEL 26DF321 32Mbit SPI Flash part support
#define SPI_AT26DF_COMMAND_PROTECT       0x36
#define SPI_AT26DF_COMMAND_UNPROTECT     0x39

// Winbond W25Xxx serial flash commands
#define SPI_WIN_W25X_COMMAND_WRITE         0x02     // page program
#define SPI_WIN_W25X_COMMAND_READ          0x03     // Read Byte
#define SPI_WIN_W25X_COMMAND_ERASE         0x20     // erase 4K sectors
#define SPI_WIN_W25X_COMMAND_WRITE_DISABLE 0x04     // Write Disable
#define SPI_WIN_W25X_COMMAND_READ_STATUS   0x05     // read Status Register
#define SPI_WIN_W25X_COMMAND_WRITE_ENABLE  0x06     // Write Enable
#define SPI_WIN_W25X_COMMAND_READ_ID       0x90     // Manufacturer/Device ID
#define SPI_WIN_W25X_COMMAND_WRITE_S       0x01     // Write Status register

// MXIC MX25Lx005 commands
#define SPI_MXIC_M25L_COMMAND_WRITE             0x02        // page program
#define SPI_MXIC_M25L_COMMAND_READ              0x03        // Read Byte
#define SPI_MXIC_M25L_COMMAND_ERASE             0x20        // erase 4K sectors
#define SPI_MXIC_M25L_COMMAND_WRITE_DISABLE     0x04        // Write Disable
#define SPI_MXIC_M25L_COMMAND_READ_STATUS       0x05        // read Status Register
#define SPI_MXIC_M25L_COMMAND_WRITE_ENABLE      0x06        // Write Enable
#define SPI_MXIC_M25L_COMMAND_READ_ID           0x9f        // Manufacturer/Device ID
#define SPI_MXIC_M25L_COMMAND_WRITE_S           0x01        // Write Status register

// Spansion S25FL00xA commands
#define SPI_S25FL00xA_COMMAND_WRITE             0x02        // page program
#define SPI_S25FL00xA_COMMAND_READ              0x03        // Read Byte
#define SPI_S25FL00xA_COMMAND_ERASE             0xd8        // erase 64K sectors
#define SPI_S25FL00xA_COMMAND_WRITE_DISABLE     0x04        // Write Disable
#define SPI_S25FL00xA_COMMAND_READ_STATUS       0x05        // read Status Register
#define SPI_S25FL00xA_COMMAND_WRITE_ENABLE      0x06        // Write Enable
#define SPI_S25FL00xA_COMMAND_READ_ID           0x9f        // Manufacturer/Device ID
#define SPI_S25FL00xA_COMMAND_WRITE_S           0x01        // Write Status register

// ESMT F25L00xA commands
#define SPI_ESMT_F25L00x_COMMAND_WRITE          0x02        // page program
#define SPI_ESMT_F25L00x_COMMAND_READ           0x03        // Read Byte
#define SPI_ESMT_F25L00x_COMMAND_ERASE          0x20        // erase 4K sectors
#define SPI_ESMT_F25L00x_COMMAND_WRITE_DISABLE  0x04        // Write Disable
#define SPI_ESMT_F25L00x_COMMAND_READ_STATUS    0x05        // read Status Register
#define SPI_ESMT_F25L00x_COMMAND_WRITE_ENABLE   0x06        // Write Enable
#define SPI_ESMT_F25L00x_COMMAND_READ_ID        0x90        // Manufacturer/Device ID
#define SPI_ESMT_F25L00x_COMMAND_WRITE_S_EN     0x50        // Write Status Enable register
#define SPI_ESMT_F25L00x_COMMAND_WRITE_S        0x01        // Write Status register

// ST Micro M25Pxx commands
#define SPI_M25Pxx_COMMAND_WRITE            0x02        // page program
#define SPI_M25Pxx_COMMAND_READ             0x03        // Read Byte
#define SPI_M25Pxx_COMMAND_ERASE            0xd8        // erase 64K sectors
#define SPI_M25Pxx_COMMAND_WRITE_DISABLE    0x04        // Write Disable
#define SPI_M25Pxx_COMMAND_READ_STATUS      0x05        // read Status Register
#define SPI_M25Pxx_COMMAND_WRITE_ENABLE     0x06        // Write Enable
#define SPI_M25Pxx_COMMAND_READ_ID          0x9f        // Manufacturer/Device ID
#define SPI_M25Pxx_COMMAND_WRITE_S          0x01        // Write Status register

// ST Micro M25Pxx commands
#define SPI_M25PExx_COMMAND_WRITE           0x02        // page program
#if FAST_READ_SUPPORT == 0
#define SPI_M25PExx_COMMAND_READ            0x03        // Read Byte
#elif FAST_READ_SUPPORT == 1
#define SPI_M25PExx_COMMAND_READ            0x0B        // Fast Read
#elif FAST_READ_SUPPORT == 2
#define SPI_M25PExx_COMMAND_READ            0x3B        //  Dual Output Fast Read
#endif
#define SPI_M25PExx_COMMAND_ERASE           0xD8        // erase 64K sectors
#define SPI_M25PExx_COMMAND_PAGE_ERASE      0xDB        // erase 256 byte pages
#define SPI_M25PExx_COMMAND_WRITE_DISABLE   0x04        // Write Disable
#define SPI_M25PExx_COMMAND_READ_STATUS     0x05        // read Status Register
#define SPI_M25PExx_COMMAND_WRITE_ENABLE    0x06        // Write Enable
#define SPI_M25PExx_COMMAND_READ_ID         0x9F        // Manufacturer/Device ID
#define SPI_M25PExx_COMMAND_WRITE_S         0x01        // Write Status register


//#define SECTOR_SIZE_4KB   0x1000  // Common 4kBytes sector size
//#define SECTOR_SIZE_64KB  0x10000  // Common 64kBytes sector size
#define BLOCK_SIZE_64KB     0x00010000  // Common 64kBytes block size
#define MAX_FWH_SIZE        0x00100000  // 8Mbit (Note that this can also be used for the 4Mbit )


extern const UINT8 SpiMaxTransfer;

// SPI default opcode slots
extern const UINT8 SpiOpcodeWriteIndex;
extern const UINT8 SpiOpcodeReadIndex;
extern const UINT8 SpiOpcodeEraseIndex;
extern const UINT8 SpiOpcodeWriteStatusIndex;

#endif

//<AMI_STHDR_START>
//============================================================================
// Structure:   EX_FLASH_PART
//
// Description: This structure contains variables that define the detals and
//              and command set of flash part.
//
// Fields:
//      FlashCommandMenu - FLASH_INFO - Defines the flash part command sets.
//      FlashCapacity - UINT32 - Defines the Capacity of flash part.
//      FlashVenDevId - UINT32 - Defines the Vendor and Device ID of flash part.
//      DeviceName - UINT8 * - Pointer to a buffer that can contain the part
//          number of flash part (Reserved for future used).
//
// Referral:
//      None
//============================================================================
//<AMI_STHDR_END>
#pragma pack(push, 1)

typedef struct _EX_FLASH_PART {
    FLASH_INFO                      FlashCommandMenu;
    UINT32                          FlashCapacity;
    UINT32                          FlashVenDevId;
    UINT8                           AAIWordProgram;
    UINT8                           GlobalBlockUnlock;
    UINT8                           bReserved[2];
} EX_FLASH_PART;

#pragma pack(pop)
//*************************************************************************
//*************************************************************************
//**                                                                     **
//**        (C)Copyright 1985-2008, American Megatrends, Inc.            **
//**                                                                     **
//**                       All Rights Reserved.                          **
//**                                                                     **
//**      5555 Oakbrook Parkway, Suite 200, Norcross, GA 30093           **
//**                                                                     **
//**                       Phone: (770)-246-8600                         **
//**                                                                     **
//*************************************************************************
//*************************************************************************