/** @file
  Defines Opal HII form ids, structures and values.

Copyright (c) 2016 - 2018, Intel Corporation. All rights reserved.<BR>
SPDX-License-Identifier: BSD-2-Clause-Patent

**/


#ifndef _OPAL_HII_FORM_VALUES_H_
#define _OPAL_HII_FORM_VALUES_H_

// ID's for various forms that will be used by HII
#define FORMID_VALUE_MAIN_MENU                             0x01
#define FORMID_VALUE_DISK_INFO_FORM_MAIN                   0x02

#pragma pack(1)
typedef struct {
  UINT16    Lock:1;
  UINT16    Unlock:1;
  UINT16    SetAdminPwd:1;
  UINT16    SetUserPwd:1;
  UINT16    SecureErase:1;
  UINT16    Revert:1;
  UINT16    PsidRevert:1;
  UINT16    DisableUser:1;
  UINT16    DisableFeature:1;
  UINT16    EnableFeature:1;
  UINT16    Reserved:5;
  UINT16    KeepUserData:1;
} OPAL_REQUEST;

typedef struct {
  UINT8           NumDisks;
  UINT8           SelectedDiskIndex;
  UINT16          SelectedDiskAvailableActions;
  UINT16          SupportedDisks;
  BOOLEAN         KeepUserDataForced;
  OPAL_REQUEST    OpalRequest;
  UINT8           EnableBlockSid;
} OPAL_HII_CONFIGURATION;

#pragma pack()

/* Action Flags */
#define HII_ACTION_NONE                                        0x0000
#define HII_ACTION_LOCK                                        0x0001
#define HII_ACTION_UNLOCK                                      0x0002
#define HII_ACTION_SET_ADMIN_PWD                               0x0004
#define HII_ACTION_SET_USER_PWD                                0x0008
#define HII_ACTION_SECURE_ERASE                                0x0010
#define HII_ACTION_REVERT                                      0x0020
#define HII_ACTION_PSID_REVERT                                 0x0040
#define HII_ACTION_DISABLE_USER                                0x0080
#define HII_ACTION_DISABLE_FEATURE                             0x0100
#define HII_ACTION_ENABLE_FEATURE                              0x0200

/* Number of bits allocated for each part of a unique key for an HII_ITEM
 * all bits together must be <= 16 (EFI_QUESTION_ID is UINT16)
 * 1   1   1   1   1   1   1   1   1   1   1   1   1   1   1   1
 * |   |-----------------------|   |---------------------------|
 * FLG INDEX                       ID
 */
#define HII_KEY_ID_BITS                                     8
#define HII_KEY_INDEX_BITS                                  7
#define HII_KEY_FLAG_BITS                                   1

#define HII_KEY_FLAG                                        0x8000 // bit 15 (zero based)

/***********/
/* Key IDs */
/***********/

#define HII_KEY_ID_GOTO_DISK_INFO                       1

#define HII_KEY_ID_VAR_SUPPORTED_DISKS                  2
#define HII_KEY_ID_VAR_SELECTED_DISK_AVAILABLE_ACTIONS  3

#define HII_KEY_ID_BLOCKSID                             4
#define HII_KEY_ID_SET_ADMIN_PWD                        5
#define HII_KEY_ID_SET_USER_PWD                         6
#define HII_KEY_ID_SECURE_ERASE                         7
#define HII_KEY_ID_REVERT                               8
#define HII_KEY_ID_KEEP_USER_DATA                       9
#define HII_KEY_ID_PSID_REVERT                          0xA
#define HII_KEY_ID_DISABLE_USER                         0xB
#define HII_KEY_ID_ENABLE_FEATURE                       0xC

#define HII_KEY_ID_MAX                                  0xC // !!Update each time a new ID is added!!

#define HII_KEY_WITH_INDEX(id, index) \
    ( \
        HII_KEY_FLAG | \
        (id) | \
        ((index) << HII_KEY_ID_BITS) \
    )

#define HII_KEY(id) HII_KEY_WITH_INDEX(id, 0)

#define PACKAGE_LIST_GUID { 0xf0308176, 0x9058, 0x4153, { 0x93, 0x3d, 0xda, 0x2f, 0xdc, 0xc8, 0x3e, 0x44 } }

/* {410483CF-F4F9-4ece-848A-1958FD31CEB7} */
#define SETUP_FORMSET_GUID { 0x410483cf, 0xf4f9, 0x4ece, { 0x84, 0x8a, 0x19, 0x58, 0xfd, 0x31, 0xce, 0xb7 } }

// {BBF1ACD2-28D8-44ea-A291-58A237FEDF1A}
#define SETUP_VARIABLE_GUID { 0xbbf1acd2, 0x28d8, 0x44ea, { 0xa2, 0x91, 0x58, 0xa2, 0x37, 0xfe, 0xdf, 0x1a } }

#endif //_HII_FORM_VALUES_H_

