176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#ifndef _PIFLASH64_H
276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define _PIFLASH64_H
376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/*++
576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
676d05dc695b06c4e987bb8078f78032441e1430cGreg HartmanCopyright (c) 1999  Intel Corporation
776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
876d05dc695b06c4e987bb8078f78032441e1430cGreg HartmanModule Name:
976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
1076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    PIflash64.h
1176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
1276d05dc695b06c4e987bb8078f78032441e1430cGreg HartmanAbstract:
1376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
1476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    Iflash64.efi protocol to abstract iflash from
1576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    the system.
1676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
1776d05dc695b06c4e987bb8078f78032441e1430cGreg HartmanRevision History
1876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
1976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman--*/
2076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
2176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman//
2276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman// Guid that identifies the IFLASH protocol
2376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman//
2476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IFLASH64_PROTOCOL_PROTOCOL \
2576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    { 0x65cba110, 0x74ab, 0x11d3, 0xbb, 0x89, 0x0, 0x80, 0xc7, 0x3c, 0x88, 0x81 };
2676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
2776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman//
2876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman// Unlock FLASH from StartAddress to EndAddress and return a LockKey
2976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman//
3076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmantypedef
3176d05dc695b06c4e987bb8078f78032441e1430cGreg HartmanEFI_STATUS
3276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman(EFIAPI *UNLOCK_FLASH_API)(
3376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    IN struct _IFLASH64_PROTOCOL_INTERFACE  *This
3476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    );
3576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
3676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman//
3776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman// Lock the flash represented by the LockKey
3876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman//
3976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmantypedef
4076d05dc695b06c4e987bb8078f78032441e1430cGreg HartmanEFI_STATUS
4176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman(EFIAPI *LOCK_FLASH_API)(
4276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    IN struct _IFLASH64_PROTOCOL_INTERFACE  *This
4376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    );
4476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
4576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman//
4676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman// Status callback for a utility like IFLASH64
4776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman//
4876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman//  Token would map to a list like Ted proposed. The utility has no idea what
4976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman//      happens on the other side.
5076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman//  ErrorStatus - Level of Error or success. Independent of Token. If you
5176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman//      don't know the token you will at least know pass or fail.
5276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman//  String - Optional extra information about the error. Could be used for
5376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman//      debug or future expansion
5476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman//
5576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman//  Attributes - Options screen attributes for String. Could allow the string to be different colors.
5676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman//
5776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmantypedef
5876d05dc695b06c4e987bb8078f78032441e1430cGreg HartmanEFI_STATUS
5976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman(EFIAPI *UTILITY_PROGRESS_API)(
6076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    IN struct _IFLASH64_PROTOCOL_INTERFACE  *This,
6176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    IN  UINTN                               Token,
6276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    IN  EFI_STATUS                          ErrorStatus,
6376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    IN  CHAR16                              *String,    OPTIONAL
6476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    IN  UINTN                               *Attributes OPTIONAL
6576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    );
6676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
6776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman//
6876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman// Token Values
6976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman//
7076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman// IFlash64 Token Codes
7176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IFLASH_TOKEN_IFLASHSTART    0xB0                // IFlash64 has started
7276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IFLASH_TOKEN_READINGFILE    0xB1                // Reading File
7376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IFLASH_TOKEN_INITVPP        0xB2                // Initializing Vpp
7476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IFLASH_TOKEN_DISABLEVPP     0x10                // Disable Vpp
7576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IFLASH_TOKEN_FLASHUNLOCK    0xB3                // Unlocking FLASH Devices
7676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IFLASH_TOKEN_FLASHERASE     0xB4                // Erasing FLASH Devices
7776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IFLASH_TOKEN_FLASHPROGRAM   0xB5                // Programming FLASH
7876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IFLASH_TOKEN_FLASHVERIFY    0xB6                // Verifying FLASH
7976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IFLASH_TOKEN_UPDATESUCCES   0xB7                // FLASH Updage Success!
8076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
8176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IFLASH_TOKEN_PROGRESS_READINGFILE   0x11        // % Reading File
8276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IFLASH_TOKEN_PROGRESS_FLASHUNLOCK   0x13        // % Unlocking FLASH Devices
8376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IFLASH_TOKEN_PROGRESS_FLASHERASE    0x14        // % Erasing FLASH Devices
8476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IFLASH_TOKEN_PROGRESS_FLASHPROGRAM  0x15        // % Programming FLASH
8576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IFLASH_TOKEN_PROGRESS_FLASHVERIFY   0x16        // % Verifying FLASH
8676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
8776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IFLASH_TOKEN_READINGFILE_ER 0xB8                // File Read Error
8876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IFLASH_TOKEN_INITVPP_ER     0xB9                // Initialization of IFB Error
8976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IFLASH_TOKEN_FLASHUNLOCK_ER 0xBA                // FLASH Unlock Error
9076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IFLASH_TOKEN_FLASHERASE_ER  0xBB                // FLASH Erase Error
9176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IFLASH_TOKEN_FLASHVERIFY_ER 0xBC                // FLASH Verify Error
9276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IFLASH_TOKEN_FLASHPROG_ER   0xBD                // FLASH Program Error
9376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
9476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IFLASH_TABLE_END            0x00
9576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
9676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman//
9776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman// If this number changes one of the existing API's has changes
9876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman//
9976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IFLASH_PI_MAJOR_VERSION 0x01
10076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
10176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman//
10276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman// This number changes when new APIs or data variables get added to the end
10376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman//  of the data structure
10476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman//
10576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IFLASH_PI_MINOR_VERSION 0x01
10676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
10776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmantypedef struct _IFLASH64_PROTOCOL_INTERFACE {
10876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    UINT32                  MajorVersion;
10976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    UINT32                  MinorVersion;
11076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    UNLOCK_FLASH_API        UnlockFlash;
11176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    LOCK_FLASH_API          LockFlash;
11276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    UTILITY_PROGRESS_API    Progress;
11376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
11476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    //
11576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    // Future expansion goes here
11676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    //
11776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
11876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman} IFLASH64_PROTOCOL_INTERFACE;
11976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
12076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
12176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#endif
122