386 lines
12 KiB
C
386 lines
12 KiB
C
/** @file
|
|
Definitions of hard disk password variable
|
|
|
|
;******************************************************************************
|
|
;* Copyright (c) 2012 - 2020, Insyde Software Corp. All Rights Reserved.
|
|
;*
|
|
;* You may not reproduce, distribute, publish, display, perform, modify, adapt,
|
|
;* transmit, broadcast, present, recite, release, license or otherwise exploit
|
|
;* any part of this publication in any form, by any means, without the prior
|
|
;* written permission of Insyde Software Corporation.
|
|
;*
|
|
;******************************************************************************
|
|
*/
|
|
|
|
#ifndef _EFI_HDD_PASSWORD_SERVICE_PROTOCOL_H
|
|
#define _EFI_HDD_PASSWORD_SERVICE_PROTOCOL_H
|
|
|
|
#include <IndustryStandard/Atapi.h>
|
|
|
|
#define EFI_HDD_PASSWORD_SERVICE_PROTOCOL_GUID \
|
|
{ \
|
|
0x9c28be0c, 0xee32, 0x43d8, 0xa2, 0x23, 0xe7, 0xc1, 0x61, 0x4e, 0xf7, 0xca \
|
|
}
|
|
|
|
#define EFI_HDD_PASSWORD_DIALOG_PROTOCOL_GUID \
|
|
{ \
|
|
0x9c0c75ab, 0x0fa5, 0x436c, 0x85, 0x0c, 0xf0, 0x73, 0xcd, 0x8e, 0x1b, 0x17 \
|
|
}
|
|
|
|
typedef struct _EFI_HDD_PASSWORD_SERVICE_PROTOCOL EFI_HDD_PASSWORD_SERVICE_PROTOCOL;
|
|
|
|
typedef struct _EFI_HDD_PASSWORD_DIALOG_PROTOCOL EFI_HDD_PASSWORD_DIALOG_PROTOCOL;
|
|
|
|
#define HDD_PASSWORD_CONNECT_CONTROLLER_NOTIFY_TPL H2O_CP_MEDIUM_LOW
|
|
|
|
#define HDD_PASSWORD_MAX_NUMBER 32
|
|
#define DEFAULT_RETRY_COUNT 10
|
|
|
|
#define ATA_IDE_MODE 0
|
|
#define ATA_AHCI_MODE 1
|
|
#define ATA_RAID_MODE 2
|
|
#define ATA_IDER_MODE 3
|
|
#define NVMe_MODE 4
|
|
#define eMMC_MODE 5
|
|
|
|
|
|
#ifndef ATA_CMD_SECURITY_SET_PASSWORD
|
|
#define ATA_CMD_SECURITY_SET_PASSWORD 0xF1
|
|
#endif
|
|
|
|
#ifndef ATA_CMD_SECURITY_UNLOCK
|
|
#define ATA_CMD_SECURITY_UNLOCK 0xF2
|
|
#endif
|
|
|
|
#ifndef ATA_CMD_SECURITY_ERASE_PREPARE
|
|
#define ATA_CMD_SECURITY_ERASE_PREPARE 0xF3
|
|
#endif
|
|
|
|
#ifndef ATA_CMD_SECURITY_ERASE_UNIT
|
|
#define ATA_CMD_SECURITY_ERASE_UNIT 0xF4
|
|
#endif
|
|
|
|
#ifndef ATA_CMD_SECURITY_FREEZE_LOCK
|
|
#define ATA_CMD_SECURITY_FREEZE_LOCK 0xF5
|
|
#endif
|
|
|
|
#ifndef ATA_CMD_SECURITY_DISABLE_PASSWORD
|
|
#define ATA_CMD_SECURITY_DISABLE_PASSWORD 0xF6
|
|
#endif
|
|
|
|
#define H2O_HDD_PASSWORD_CMD_COMRESET 0xFE
|
|
|
|
#define H2O_HDD_PASSWORD_TCG_PSID_REVERT 0xEE
|
|
|
|
#define HDD_SUPPORT_BIT BIT0
|
|
#define HDD_ENABLE_BIT BIT1
|
|
#define HDD_LOCKED_BIT BIT2
|
|
#define HDD_FROZEN_BIT BIT3
|
|
#define HDD_EXPIRED_BIT BIT4
|
|
#define HDD_MASTER_CAPABILITY BIT8
|
|
|
|
#define TIMEOUT_IDENTIFY_DEVICE_INDEX 0
|
|
#define TIMEOUT_SECURITY_SET_PASSWORD_INDEX 1
|
|
#define TIMEOUT_SECURITY_UNLOCK_INDEX 2
|
|
#define TIMEOUT_SECURITY_ERASE_PREPARE_INDEX 3
|
|
#define TIMEOUT_SECURITY_ERASE_UNIT_INDEX 4
|
|
#define TIMEOUT_SECURITY_FREEZE_LOCK_INDEX 5
|
|
#define TIMEOUT_SECURITY_DISABLE_PASSWORD_INDEX 6
|
|
#define TIMEOUT_SECURITY_RESET_STATUS_INDEX 7
|
|
|
|
#define DEFAULT_MASTER_PASSWORD_IDENTIFIER 0xFFFE
|
|
|
|
#define USER_PSW 0
|
|
#define MASTER_PSW 1
|
|
|
|
//
|
|
// The length "40" is defined from ATA idenfity table
|
|
//
|
|
#define DEVICE_MODEL_NAME_STRING_LENGTH 40
|
|
#define DEVICE_MODEL_NAME_STRING_SIZE 80
|
|
|
|
typedef struct _ITEM_INFO_IN_DIALOG {
|
|
CHAR16 ItemInfoString[80];
|
|
} ITEM_INFO_IN_DIALOG;
|
|
|
|
typedef struct {
|
|
UINT16 HddSecurityStatus;
|
|
CHAR16 HddModelString[DEVICE_MODEL_NAME_STRING_LENGTH];
|
|
UINT16 MasterPasswordIdentifier;
|
|
UINT8 ControllerMode;
|
|
UINT16 ControllerNumber;
|
|
UINT16 PortNumber;
|
|
UINT16 PortMulNumber;
|
|
UINT16 MappedPort;
|
|
UINTN PciSeg;
|
|
UINTN PciBus;
|
|
UINTN PciDevice;
|
|
UINTN PciFunction;
|
|
EFI_HANDLE DeviceHandleInDxe;
|
|
EFI_HANDLE DeviceHandleInSmm;
|
|
UINT8 MaxPasswordLengthSupport;
|
|
|
|
//
|
|
// TCG Stoage Security Supported
|
|
//
|
|
BOOLEAN StorageTcgSecuritySupported;
|
|
|
|
VOID *HddInfoExtPtr;
|
|
} HDD_PASSWORD_HDD_INFO;
|
|
|
|
typedef struct {
|
|
CHAR16 DisableInputString[HDD_PASSWORD_MAX_NUMBER + 1];
|
|
UINTN DisableStringLength;
|
|
UINT8 DisableAllType;
|
|
CHAR16 DisableAllInputString[HDD_PASSWORD_MAX_NUMBER + 1];
|
|
CHAR16 MasterInputString[HDD_PASSWORD_MAX_NUMBER + 1];
|
|
UINTN MasterFlag;
|
|
UINTN Flag;
|
|
CHAR16 InputString[HDD_PASSWORD_MAX_NUMBER + 1];
|
|
UINTN StringLength;
|
|
HDD_PASSWORD_HDD_INFO *HddInfo;
|
|
UINTN NumOfEntry;
|
|
UINTN LabelIndex;
|
|
VOID *ScuDataExtPtr;
|
|
} HDD_PASSWORD_SCU_DATA;
|
|
|
|
typedef struct {
|
|
UINT8 PasswordType;
|
|
CHAR16 PasswordStr[HDD_PASSWORD_MAX_NUMBER + 1];
|
|
} PASSWORD_INFORMATION;
|
|
|
|
|
|
//
|
|
// String Token
|
|
//
|
|
#define STR_HDD_ESC_SKIP_MSG_INDEX 0
|
|
#define STR_HDD_TITLE_MSG_INDEX 1
|
|
#define STR_HDD_DIALOG_THREE_ERRORS_INDEX 2
|
|
#define STR_HDD_DIALOG_CONTINUE_MSG_INDEX 3
|
|
#define STR_HDD_DIALOG_ENTER_MSG_INDEX 4
|
|
#define STR_HDD_DIALOG_ERROR_STATUS_INDEX 5
|
|
#define STR_HDD_ENTER_MANY_ERRORS_INDEX 6
|
|
#define STR_SECURITY_COUNT_EXPIRED_INDEX 7
|
|
#define STR_HDD_DIALOG_COLDBOOT_MSG_INDEX 8
|
|
#define STR_HDD_DIALOG_HELP_TITLE_INDEX 9
|
|
|
|
typedef
|
|
EFI_STATUS
|
|
(EFIAPI *EFI_SET_HDD_PASSWROD) (
|
|
IN EFI_HDD_PASSWORD_SERVICE_PROTOCOL *This,
|
|
IN HDD_PASSWORD_HDD_INFO *HddInfo,
|
|
IN BOOLEAN UserOrMaster,
|
|
IN UINT8 *PasswordBuffer,
|
|
IN UINTN PassLength
|
|
);
|
|
|
|
typedef
|
|
EFI_STATUS
|
|
(EFIAPI *EFI_UNLOCK_HDD_PASSWORD) (
|
|
IN EFI_HDD_PASSWORD_SERVICE_PROTOCOL *This,
|
|
IN HDD_PASSWORD_HDD_INFO *HddInfo,
|
|
IN BOOLEAN UserOrMaster,
|
|
IN UINT8 *PasswordBuffer,
|
|
IN UINTN PassLength
|
|
);
|
|
|
|
typedef
|
|
EFI_STATUS
|
|
(EFIAPI *EFI_DISABLE_HDD_PASSWORD) (
|
|
IN EFI_HDD_PASSWORD_SERVICE_PROTOCOL *This,
|
|
IN HDD_PASSWORD_HDD_INFO *HddInfo,
|
|
IN BOOLEAN UserOrMaster,
|
|
IN UINT8 *PasswordPtr,
|
|
IN UINTN PassLength
|
|
);
|
|
|
|
typedef
|
|
EFI_STATUS
|
|
(EFIAPI *EFI_HDD_IDENTIFY) (
|
|
IN EFI_HDD_PASSWORD_SERVICE_PROTOCOL *This,
|
|
IN HDD_PASSWORD_HDD_INFO *HddInfo,
|
|
IN OUT UINT16 *IdentifyData
|
|
);
|
|
|
|
typedef
|
|
EFI_STATUS
|
|
(EFIAPI *EFI_GET_HDD_INFO) (
|
|
IN EFI_HDD_PASSWORD_SERVICE_PROTOCOL *This,
|
|
OUT HDD_PASSWORD_HDD_INFO **HddInfoArray,
|
|
IN OUT UINTN *NumOfHdd
|
|
);
|
|
|
|
typedef
|
|
EFI_STATUS
|
|
(EFIAPI *EFI_SET_FEATURES_CMD) (
|
|
IN EFI_HDD_PASSWORD_SERVICE_PROTOCOL *This,
|
|
IN HDD_PASSWORD_HDD_INFO *HddInfo,
|
|
IN UINT8 AtaFeatures,
|
|
IN UINT8 AtaSectorCount
|
|
);
|
|
|
|
typedef
|
|
EFI_STATUS
|
|
(EFIAPI *EFI_UNLOCK_ALL_HDD) (
|
|
IN EFI_HDD_PASSWORD_SERVICE_PROTOCOL *This
|
|
);
|
|
|
|
typedef
|
|
EFI_STATUS
|
|
(EFIAPI *EFI_HDD_FREEZE) (
|
|
IN EFI_HDD_PASSWORD_SERVICE_PROTOCOL *This,
|
|
IN HDD_PASSWORD_HDD_INFO *HddInfo
|
|
);
|
|
|
|
typedef
|
|
EFI_STATUS
|
|
(EFIAPI *EFI_SEND_HDD_SECURITY_CMD) (
|
|
IN EFI_HDD_PASSWORD_SERVICE_PROTOCOL *This,
|
|
IN UINT8 CmdOpCode,
|
|
IN HDD_PASSWORD_HDD_INFO *HddInfo,
|
|
IN BOOLEAN UserOrMaster,
|
|
IN UINT8 *PasswordBuffer,
|
|
IN UINTN PasswordLength
|
|
);
|
|
|
|
typedef
|
|
EFI_STATUS
|
|
(EFIAPI *EFI_RESET_SECURITY_STATUS) (
|
|
IN EFI_HDD_PASSWORD_SERVICE_PROTOCOL *This,
|
|
IN HDD_PASSWORD_HDD_INFO *HddInfo
|
|
);
|
|
|
|
typedef
|
|
EFI_STATUS
|
|
(EFIAPI *EFI_PASSWORD_STRING_PROCESS) (
|
|
IN EFI_HDD_PASSWORD_SERVICE_PROTOCOL *This,
|
|
IN UINT8 PasswordType,
|
|
IN VOID *RawPasswordPtr,
|
|
IN UINTN RawPasswordLength,
|
|
OUT VOID **PasswordToHdd,
|
|
OUT UINTN *PasswordToHddLength
|
|
);
|
|
|
|
typedef
|
|
EFI_STATUS
|
|
(EFIAPI *EFI_DISABLED_LOCKED_HDD) (
|
|
IN EFI_HDD_PASSWORD_SERVICE_PROTOCOL *This,
|
|
IN HDD_PASSWORD_HDD_INFO *HddInfo
|
|
);
|
|
|
|
struct _EFI_HDD_PASSWORD_SERVICE_PROTOCOL {
|
|
EFI_SET_HDD_PASSWROD SetHddPassword;
|
|
EFI_UNLOCK_HDD_PASSWORD UnlockHddPassword;
|
|
EFI_DISABLE_HDD_PASSWORD DisableHddPassword;
|
|
EFI_HDD_IDENTIFY HddIdentify;
|
|
EFI_GET_HDD_INFO GetHddInfo;
|
|
EFI_UNLOCK_ALL_HDD UnlockAllHdd;
|
|
EFI_HDD_FREEZE HddFreeze;
|
|
EFI_SEND_HDD_SECURITY_CMD SendHddSecurityCmd;
|
|
EFI_RESET_SECURITY_STATUS ResetSecurityStatus;
|
|
EFI_PASSWORD_STRING_PROCESS PasswordStringProcess;
|
|
EFI_DISABLED_LOCKED_HDD DisabledLockedHdd;
|
|
};
|
|
|
|
typedef
|
|
EFI_STATUS
|
|
(EFIAPI *EFI_GET_STRING_TOKEN_ARRAY) (
|
|
IN EFI_HDD_PASSWORD_DIALOG_PROTOCOL *This,
|
|
OUT CHAR16 **StrTokenArray
|
|
);
|
|
|
|
typedef
|
|
EFI_STATUS
|
|
(EFIAPI *EFI_CHECK_SKIP_DIALOG_KEY) (
|
|
IN EFI_HDD_PASSWORD_DIALOG_PROTOCOL *This,
|
|
IN VOID *SkipDialogKey
|
|
);
|
|
|
|
typedef
|
|
EFI_STATUS
|
|
(EFIAPI *EFI_RESET_ALL_SECURITY_STATUS) (
|
|
IN EFI_HDD_PASSWORD_DIALOG_PROTOCOL *This,
|
|
IN HDD_PASSWORD_HDD_INFO *HddInfoArray,
|
|
IN UINTN NumOfHdd
|
|
);
|
|
|
|
typedef
|
|
BOOLEAN
|
|
(EFIAPI *EFI_CHECK_HDD_LOCK) (
|
|
IN EFI_HDD_PASSWORD_DIALOG_PROTOCOL *This,
|
|
IN HDD_PASSWORD_HDD_INFO *HddInfoArray,
|
|
IN UINTN NumOfHdd
|
|
);
|
|
|
|
typedef
|
|
BOOLEAN
|
|
(EFIAPI *EFI_CHECK_HDD_SECURITY_ENABLE) (
|
|
IN EFI_HDD_PASSWORD_DIALOG_PROTOCOL *This,
|
|
IN HDD_PASSWORD_HDD_INFO *HddInfoArray,
|
|
IN UINTN NumOfHdd
|
|
);
|
|
|
|
typedef
|
|
EFI_STATUS
|
|
(EFIAPI *EFI_PREPARE_HDD_DIALOG_ITEMS) (
|
|
IN EFI_HDD_PASSWORD_DIALOG_PROTOCOL *This,
|
|
IN HDD_PASSWORD_HDD_INFO *HddInfoArray,
|
|
IN UINTN NumOfHdd,
|
|
OUT ITEM_INFO_IN_DIALOG *HddDialogItemInfoString
|
|
);
|
|
|
|
typedef
|
|
EFI_STATUS
|
|
(EFIAPI *EFI_GET_MODEL_NUMBER) (
|
|
IN EFI_HDD_PASSWORD_DIALOG_PROTOCOL *This,
|
|
IN VOID *DescBufferPtr,
|
|
IN VOID *SourceBufferPtr
|
|
);
|
|
|
|
typedef
|
|
EFI_STATUS
|
|
(EFIAPI *EFI_UNLOCK_SELECTED_HDD) (
|
|
IN EFI_HDD_PASSWORD_DIALOG_PROTOCOL *This,
|
|
IN HDD_PASSWORD_HDD_INFO *HddInfo,
|
|
OUT PASSWORD_INFORMATION *PasswordInfo
|
|
);
|
|
|
|
typedef
|
|
EFI_STATUS
|
|
(EFIAPI *EFI_SELECTED_HDD_PREPARE_TITLE_STRING) (
|
|
IN EFI_HDD_PASSWORD_DIALOG_PROTOCOL *This,
|
|
IN HDD_PASSWORD_HDD_INFO *HddInfo,
|
|
OUT CHAR16 **HddTitleString
|
|
);
|
|
|
|
typedef
|
|
EFI_STATUS
|
|
(EFIAPI *EFI_HDD_PASSWORD_UNLOCKED) (
|
|
IN EFI_HDD_PASSWORD_DIALOG_PROTOCOL *This
|
|
);
|
|
|
|
typedef
|
|
BOOLEAN
|
|
(EFIAPI *EFI_IS_ADMI_SECURE_BOOT_RESET) (
|
|
IN EFI_HDD_PASSWORD_DIALOG_PROTOCOL *This
|
|
);
|
|
|
|
struct _EFI_HDD_PASSWORD_DIALOG_PROTOCOL {
|
|
EFI_GET_STRING_TOKEN_ARRAY GetStringTokenArray;
|
|
EFI_CHECK_SKIP_DIALOG_KEY CheckSkipDialogKey;
|
|
EFI_RESET_ALL_SECURITY_STATUS ResetAllSecurityStatus;
|
|
EFI_CHECK_HDD_LOCK CheckHddLock;
|
|
EFI_CHECK_HDD_SECURITY_ENABLE CheckHddSecurityEnable;
|
|
EFI_PREPARE_HDD_DIALOG_ITEMS PrepareHddDialogItems;
|
|
EFI_GET_MODEL_NUMBER GetModelNumber;
|
|
EFI_UNLOCK_SELECTED_HDD UnlockSelectedHdd;
|
|
EFI_SELECTED_HDD_PREPARE_TITLE_STRING SelectedHddPrepareTitleString;
|
|
EFI_IS_ADMI_SECURE_BOOT_RESET IsAdmiSecureBootReset;
|
|
EFI_HDD_PASSWORD_UNLOCKED HddPasswordUnlocked;
|
|
};
|
|
|
|
extern EFI_GUID gEfiHddPasswordServiceProtocolGuid;
|
|
extern EFI_GUID gEfiHddPasswordDialogProtocolGuid;
|
|
|
|
#endif
|