-
Notifications
You must be signed in to change notification settings - Fork 44
/
status_codes.py
101 lines (87 loc) · 2.85 KB
/
status_codes.py
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
# @file
# Code to help convert an Int to StatusCode string
#
# Copyright (c) Microsoft Corporation
#
# SPDX-License-Identifier: BSD-2-Clause-Patent
##
"""Module for converting an Int to StatusCode string."""
class UefiStatusCode(object):
"""Object representing a UEFI Status Code from Appendix D of the UEFI spec."""
# high bit set
ErrorCodeStrings = [
"NOT VALID",
"Load Error",
"Invalid Parameter",
"Unsupported",
"Bad BufferSize",
"Buffer Too Small",
"Not Ready",
"Device Error",
"Write Protected",
"Out of Resources",
"Volume Corrupt",
"Volume Full",
"No Media",
"Media Changed",
"Not Found",
"Access Denied",
"No Response",
"No Mapping",
"Time Out",
"Not Started",
"Already Started",
"Aborted",
"ICMP Error",
"TFTP Error",
"Protocol Error",
"Incompatible Error",
"Security Violation",
"CRC Error",
"End of Media",
"Reserved(29)",
"Reserved(30)",
"End of File",
"Invalid Language",
"Compromised Data",
"IP Address Conflict",
"HTTP Error",
]
NonErrorCodeStrings = [
"Success",
"Unknown Glyph",
"Delete Failure",
"Write Failure",
"Buffer Too Small",
"Stale Data",
"File System",
"Reset Required",
]
def Convert32BitToString(self, value: int) -> str:
"""Convert 32 bit int to a friendly UEFI status code string value."""
StatusStrings = UefiStatusCode.NonErrorCodeStrings
if (value >> 31) & 1 == 1:
# error
StatusStrings = UefiStatusCode.ErrorCodeStrings
value = value & 0x7FFFFFFF # mask off upper bit
if value >= len(StatusStrings):
return "Undefined StatusCode"
return StatusStrings[value]
def Convert64BitToString(self, value: int) -> str:
"""Convert 64 bit int to a friendly UEFI status code string value."""
StatusStrings = UefiStatusCode.NonErrorCodeStrings
if (value >> 63) & 1 == 1:
# error
StatusStrings = UefiStatusCode.ErrorCodeStrings
value = value & 0x7FFFFFFFFFFFFFFF # mask off upper bit
if value >= len(StatusStrings):
return "Undefined StatusCode"
return StatusStrings[value]
def ConvertHexString64ToString(self, hexstring: str) -> str:
"""Convert 64 bit hexstring in 0x format to a UEFI status code."""
value = int(hexstring, 16)
return self.Convert64BitToString(value)
def ConvertHexString32ToString(self, hexstring: str) -> str:
"""Convert 32 bit hexstring in 0x format to a UEFI status code."""
value = int(hexstring, 16)
return self.Convert32BitToString(value)