then EFI_INVALID_PARAMETER is returned.\r
@param VendorGuid A unique identifier for the vendor.\r
@param Attributes Attributes bitmask to set for the variable.\r
- @param DataSize The size in bytes of the Data buffer. A size of zero causes the\r
- variable to be deleted.\r
+ @param DataSize The size in bytes of the Data buffer. Unless the EFI_VARIABLE_APPEND_WRITE, \r
+ EFI_VARIABLE_AUTHENTICATED_WRITE_ACCESS, or \r
+ EFI_VARIABLE_TIME_BASED_AUTHENTICATED_WRITE_ACCESS attribute is set, a size of zero \r
+ causes the variable to be deleted. When the EFI_VARIABLE_APPEND_WRITE attribute is \r
+ set, then a SetVariable() call with a DataSize of zero will not cause any change to \r
+ the variable value (the timestamp associated with the variable may be updated however \r
+ even if no new data value is provided,see the description of the \r
+ EFI_VARIABLE_AUTHENTICATION_2 descriptor below. In this case the DataSize will not \r
+ be zero since the EFI_VARIABLE_AUTHENTICATION_2 descriptor will be populated). \r
@param Data The contents for the variable.\r
\r
@retval EFI_SUCCESS The firmware has successfully stored the variable and its data as\r
@retval EFI_DEVICE_ERROR The variable could not be retrieved due to a hardware error.\r
@retval EFI_WRITE_PROTECTED The variable in question is read-only.\r
@retval EFI_WRITE_PROTECTED The variable in question cannot be deleted.\r
- @retval EFI_SECURITY_VIOLATION The variable could not be written due to EFI_VARIABLE_AUTHENTICATED_WRITE_ACCESS\r
- set but the AuthInfo does NOT pass the validation check carried out\r
- by the firmware.\r
+ @retval EFI_SECURITY_VIOLATION The variable could not be written due to EFI_VARIABLE_AUTHENTICATED_WRITE_ACCESS \r
+ or EFI_VARIABLE_TIME_BASED_AUTHENTICATED_WRITE_ACESS being set, but the AuthInfo \r
+ does NOT pass the validation check carried out by the firmware.\r
+ \r
@retval EFI_NOT_FOUND The variable trying to be updated or deleted was not found.\r
\r
**/\r
/// state. If the system does not support this reset type, then when the system\r
/// is rebooted, it should exhibit the EfiResetCold attributes.\r
///\r
- EfiResetShutdown\r
+ EfiResetShutdown,\r
+ ///\r
+ /// Used to induce a system-wide reset. The exact type of the reset is defined by\r
+ /// the EFI_GUID that follows the Null-terminated Unicode string passed into\r
+ /// ResetData. If the platform does not recognize the EFI_GUID in ResetData the \r
+ /// platform must pick a supported reset type to perform. The platform may\r
+ /// optionally log the parameters from any non-normal reset that occurs.\r
+ ///\r
+ EfiResetPlatformSpecific\r
} EFI_RESET_TYPE;\r
\r
/**\r
@retval EFI_INVALID_PARAMETER CapsuleCount is 0.\r
@retval EFI_DEVICE_ERROR The capsule update was started, but failed due to a device error.\r
@retval EFI_UNSUPPORTED The capsule type is not supported on this platform.\r
- @retval EFI_OUT_OF_RESOURCES There were insufficient resources to process the capsule.\r
+ @retval EFI_OUT_OF_RESOURCES When ExitBootServices() has been previously called this error indicates the capsule \r
+ is compatible with this platform but is not capable of being submitted or processed \r
+ in runtime. The caller may resubmit the capsule prior to ExitBootServices().\r
+ @retval EFI_OUT_OF_RESOURCES When ExitBootServices() has not been previously called then this error indicates \r
+ the capsule is compatible with this platform but there are insufficient resources to process.\r
\r
**/\r
typedef\r
@retval EFI_UNSUPPORTED The capsule type is not supported on this platform, and\r
MaximumCapsuleSize and ResetType are undefined.\r
@retval EFI_INVALID_PARAMETER MaximumCapsuleSize is NULL.\r
- @retval EFI_OUT_OF_RESOURCES There were insufficient resources to process the query request.\r
+ @retval EFI_OUT_OF_RESOURCES When ExitBootServices() has been previously called this error indicates the capsule \r
+ is compatible with this platform but is not capable of being submitted or processed \r
+ in runtime. The caller may resubmit the capsule prior to ExitBootServices().\r
+ @retval EFI_OUT_OF_RESOURCES When ExitBootServices() has not been previously called then this error indicates \r
+ the capsule is compatible with this platform but there are insufficient resources to process.\r
\r
**/\r
typedef\r
//\r
// Firmware should stop at a firmware user interface on next boot\r
//\r
-#define EFI_OS_INDICATIONS_BOOT_TO_FW_UI 0x0000000000000001\r
+#define EFI_OS_INDICATIONS_BOOT_TO_FW_UI 0x0000000000000001\r
+#define EFI_OS_INDICATIONS_TIMESTAMP_REVOCATION 0x0000000000000002\r
+#define EFI_OS_INDICATIONS_FILE_CAPSULE_DELIVERY_SUPPORTED 0x0000000000000004\r
+#define EFI_OS_INDICATIONS_FMP_CAPSULE_SUPPORTED 0x0000000000000008\r
+#define EFI_OS_INDICATIONS_CAPSULE_RESULT_VAR_SUPPORTED 0x0000000000000010\r
\r
//\r
// EFI Runtime Services Table\r
#define EFI_2_00_SYSTEM_TABLE_REVISION ((2 << 16) | (00))\r
#define EFI_1_10_SYSTEM_TABLE_REVISION ((1 << 16) | (10))\r
#define EFI_1_02_SYSTEM_TABLE_REVISION ((1 << 16) | (02))\r
-#define EFI_SYSTEM_TABLE_REVISION EFI_2_31_SYSTEM_TABLE_REVISION\r
+#define EFI_SYSTEM_TABLE_REVISION EFI_2_40_SYSTEM_TABLE_REVISION\r
+#define EFI_SPECIFICATION_VERSION EFI_SYSTEM_TABLE_REVISION\r
\r
#define EFI_RUNTIME_SERVICES_SIGNATURE SIGNATURE_64 ('R','U','N','T','S','E','R','V')\r
-#define EFI_RUNTIME_SERVICES_REVISION EFI_2_31_SYSTEM_TABLE_REVISION\r
+#define EFI_RUNTIME_SERVICES_REVISION EFI_SPECIFICATION_VERSION\r
\r
///\r
/// EFI Runtime Services Table.\r
\r
\r
#define EFI_BOOT_SERVICES_SIGNATURE SIGNATURE_64 ('B','O','O','T','S','E','R','V')\r
-#define EFI_BOOT_SERVICES_REVISION EFI_2_31_SYSTEM_TABLE_REVISION\r
+#define EFI_BOOT_SERVICES_REVISION EFI_SPECIFICATION_VERSION\r
\r
///\r
/// EFI Boot Services Table.\r
///\r
/// EFI Boot Key Data\r
///\r
-typedef UINT32 EFI_BOOT_KEY_DATA;\r
-///\r
-/// Indicates the revision of the EFI_KEY_OPTION structure. This revision level should be 0.\r
-///\r
-#define EFI_KEY_OPTION_REVISION_MASK 0x000000FF\r
-///\r
-/// Either the left or right Shift keys must be pressed (1) or must not be pressed (0).\r
-///\r
-#define EFI_KEY_OPTION_SHIFT_PRESSED_MASK BIT8\r
-///\r
-/// Either the left or right Control keys must be pressed (1) or must not be pressed (0).\r
-///\r
-#define EFI_KEY_OPTION_CONTROL_PRESSED_MASK BIT9\r
-///\r
-/// Either the left or right Alt keys must be pressed (1) or must not be pressed (0).\r
-///\r
-#define EFI_KEY_OPTION_ALT_PRESSED_MASK BIT10\r
-///\r
-/// Either the left or right Logo keys must be pressed (1) or must not be pressed (0).\r
-///\r
-#define EFI_KEY_OPTION_LOGO_PRESSED_MASK BIT11\r
-///\r
-/// The Menu key must be pressed (1) or must not be pressed (0).\r
-///\r
-#define EFI_KEY_OPTION_MENU_PRESSED_MASK BIT12\r
-///\r
-/// The SysReq key must be pressed (1) or must not be pressed (0).\r
-///\r
-#define EFI_KEY_OPTION_SYS_REQ_PRESSED_MASK BIT13\r
-///\r
-/// Specifies the actual number of entries in EFI_KEY_OPTION.Keys, from 0-3. If\r
-/// zero, then only the shift state is considered. If more than one, then the boot option will\r
-/// only be launched if all of the specified keys are pressed with the same shift state.\r
-///\r
-#define EFI_KEY_OPTION_INPUT_KEY_COUNT_MASK (BIT30 | BIT31)\r
+typedef union {\r
+ struct {\r
+ ///\r
+ /// Indicates the revision of the EFI_KEY_OPTION structure. This revision level should be 0.\r
+ ///\r
+ UINT32 Revision : 8;\r
+ ///\r
+ /// Either the left or right Shift keys must be pressed (1) or must not be pressed (0).\r
+ ///\r
+ UINT32 ShiftPressed : 1;\r
+ ///\r
+ /// Either the left or right Control keys must be pressed (1) or must not be pressed (0).\r
+ ///\r
+ UINT32 ControlPressed : 1;\r
+ ///\r
+ /// Either the left or right Alt keys must be pressed (1) or must not be pressed (0).\r
+ ///\r
+ UINT32 AltPressed : 1;\r
+ ///\r
+ /// Either the left or right Logo keys must be pressed (1) or must not be pressed (0).\r
+ ///\r
+ UINT32 LogoPressed : 1;\r
+ ///\r
+ /// The Menu key must be pressed (1) or must not be pressed (0).\r
+ ///\r
+ UINT32 MenuPressed : 1;\r
+ ///\r
+ /// The SysReq key must be pressed (1) or must not be pressed (0).\r
+ ///\r
+ UINT32 SysReqPressed : 1;\r
+ UINT32 Reserved : 16;\r
+ ///\r
+ /// Specifies the actual number of entries in EFI_KEY_OPTION.Keys, from 0-3. If\r
+ /// zero, then only the shift state is considered. If more than one, then the boot option will\r
+ /// only be launched if all of the specified keys are pressed with the same shift state.\r
+ ///\r
+ UINT32 InputKeyCount : 2;\r
+ } Options;\r
+ UINT32 PackedValue;\r
+} EFI_BOOT_KEY_DATA;\r
\r
///\r
/// EFI Key Option.\r