mirror of
https://github.com/tinygo-org/tinygo.git
synced 2026-08-20 12:29:03 +00:00
add device/uefi and device/amd64
This commit is contained in:
@@ -0,0 +1,111 @@
|
||||
package uefi
|
||||
|
||||
const (
|
||||
uintnSize = 32 << (^uintptr(0) >> 63)
|
||||
errorMask = 1 << uintptr(uintnSize-1)
|
||||
)
|
||||
|
||||
const (
|
||||
EFI_SUCCESS EFI_STATUS = 0
|
||||
EFI_LOAD_ERROR EFI_STATUS = errorMask | 1
|
||||
EFI_INVALID_PARAMETER EFI_STATUS = errorMask | 2
|
||||
EFI_UNSUPPORTED EFI_STATUS = errorMask | 3
|
||||
EFI_BAD_BUFFER_SIZE EFI_STATUS = errorMask | 4
|
||||
EFI_BUFFER_TOO_SMALL EFI_STATUS = errorMask | 5
|
||||
EFI_NOT_READY EFI_STATUS = errorMask | 6
|
||||
EFI_DEVICE_ERROR EFI_STATUS = errorMask | 7
|
||||
EFI_WRITE_PROTECTED EFI_STATUS = errorMask | 8
|
||||
EFI_OUT_OF_RESOURCES EFI_STATUS = errorMask | 9
|
||||
EFI_VOLUME_CORRUPTED EFI_STATUS = errorMask | 10
|
||||
EFI_VOLUME_FULL EFI_STATUS = errorMask | 11
|
||||
EFI_NO_MEDIA EFI_STATUS = errorMask | 12
|
||||
EFI_MEDIA_CHANGED EFI_STATUS = errorMask | 13
|
||||
EFI_NOT_FOUND EFI_STATUS = errorMask | 14
|
||||
EFI_ACCESS_DENIED EFI_STATUS = errorMask | 15
|
||||
EFI_NO_RESPONSE EFI_STATUS = errorMask | 16
|
||||
EFI_NO_MAPPING EFI_STATUS = errorMask | 17
|
||||
EFI_TIMEOUT EFI_STATUS = errorMask | 18
|
||||
EFI_NOT_STARTED EFI_STATUS = errorMask | 19
|
||||
EFI_ALREADY_STARTED EFI_STATUS = errorMask | 20
|
||||
EFI_ABORTED EFI_STATUS = errorMask | 21
|
||||
EFI_ICMP_ERROR EFI_STATUS = errorMask | 22
|
||||
EFI_TFTP_ERROR EFI_STATUS = errorMask | 23
|
||||
EFI_PROTOCOL_ERROR EFI_STATUS = errorMask | 24
|
||||
EFI_INCOMPATIBLE_VERSION EFI_STATUS = errorMask | 25
|
||||
EFI_SECURITY_VIOLATION EFI_STATUS = errorMask | 26
|
||||
EFI_CRC_ERROR EFI_STATUS = errorMask | 27
|
||||
EFI_END_OF_MEDIA EFI_STATUS = errorMask | 28
|
||||
EFI_END_OF_FILE EFI_STATUS = errorMask | 31
|
||||
EFI_INVALID_LANGUAGE EFI_STATUS = errorMask | 32
|
||||
EFI_COMPROMISED_DATA EFI_STATUS = errorMask | 33
|
||||
EFI_IP_ADDRESS_CONFLICT EFI_STATUS = errorMask | 34
|
||||
EFI_HTTP_ERROR EFI_STATUS = errorMask | 35
|
||||
)
|
||||
|
||||
var errMap = map[EFI_STATUS]*Error{}
|
||||
|
||||
var (
|
||||
ErrLoadError = newError(EFI_LOAD_ERROR, "image failed to load")
|
||||
ErrInvalidParameter = newError(EFI_INVALID_PARAMETER, "a parameter was incorrect")
|
||||
ErrUnsupported = newError(EFI_UNSUPPORTED, "operation not supported")
|
||||
ErrBadBufferSize = newError(EFI_BAD_BUFFER_SIZE, "buffer size incorrect for request")
|
||||
ErrBufferTooSmall = newError(EFI_BUFFER_TOO_SMALL, "buffer too small; size returned in parameter")
|
||||
ErrNotReady = newError(EFI_NOT_READY, "no data pending")
|
||||
ErrDeviceError = newError(EFI_DEVICE_ERROR, "physical device reported an error")
|
||||
ErrWriteProtected = newError(EFI_WRITE_PROTECTED, "device is write-protected")
|
||||
ErrOutOfResources = newError(EFI_OUT_OF_RESOURCES, "out of resources")
|
||||
ErrVolumeCorrupted = newError(EFI_VOLUME_CORRUPTED, "filesystem inconsistency detected")
|
||||
ErrVolumeFull = newError(EFI_VOLUME_FULL, "no more space on filesystem")
|
||||
ErrNoMedia = newError(EFI_NO_MEDIA, "device contains no medium")
|
||||
ErrMediaChanged = newError(EFI_MEDIA_CHANGED, "medium changed since last access")
|
||||
ErrNotFound = newError(EFI_NOT_FOUND, "item not found")
|
||||
ErrAccessDenied = newError(EFI_ACCESS_DENIED, "access denied")
|
||||
ErrNoResponse = newError(EFI_NO_RESPONSE, "server not found or no response")
|
||||
ErrNoMapping = newError(EFI_NO_MAPPING, "no device mapping exists")
|
||||
ErrTimeout = newError(EFI_TIMEOUT, "timeout expired")
|
||||
ErrNotStarted = newError(EFI_NOT_STARTED, "protocol not started")
|
||||
ErrAlreadyStarted = newError(EFI_ALREADY_STARTED, "protocol already started")
|
||||
ErrAborted = newError(EFI_ABORTED, "operation aborted")
|
||||
ErrICMPError = newError(EFI_ICMP_ERROR, "ICMP error during network operation")
|
||||
ErrTFTPError = newError(EFI_TFTP_ERROR, "TFTP error during network operation")
|
||||
ErrProtocolError = newError(EFI_PROTOCOL_ERROR, "protocol error during network operation")
|
||||
ErrIncompatibleVersion = newError(EFI_INCOMPATIBLE_VERSION, "requested version incompatible")
|
||||
ErrSecurityViolation = newError(EFI_SECURITY_VIOLATION, "security violation")
|
||||
ErrCRCError = newError(EFI_CRC_ERROR, "CRC error detected")
|
||||
ErrEndOfMedia = newError(EFI_END_OF_MEDIA, "beginning or end of media reached")
|
||||
ErrEndOfFile = newError(EFI_END_OF_FILE, "end of file reached")
|
||||
ErrInvalidLanguage = newError(EFI_INVALID_LANGUAGE, "invalid language specified")
|
||||
ErrCompromisedData = newError(EFI_COMPROMISED_DATA, "data security status unknown or compromised")
|
||||
ErrIPAddressConflict = newError(EFI_IP_ADDRESS_CONFLICT, "IP address conflict detected")
|
||||
ErrHTTPError = newError(EFI_HTTP_ERROR, "HTTP error during network operation")
|
||||
)
|
||||
|
||||
type Error struct {
|
||||
code EFI_STATUS
|
||||
msg string
|
||||
}
|
||||
|
||||
func newError(code EFI_STATUS, msg string) *Error {
|
||||
err := &Error{code: code, msg: msg}
|
||||
errMap[code] = err
|
||||
return err
|
||||
}
|
||||
|
||||
func (e *Error) Error() string {
|
||||
return e.msg
|
||||
}
|
||||
|
||||
func (e *Error) Status() EFI_STATUS {
|
||||
return e.code
|
||||
}
|
||||
|
||||
func StatusError(status EFI_STATUS) *Error {
|
||||
if status == EFI_SUCCESS {
|
||||
return nil
|
||||
}
|
||||
err, ok := errMap[status]
|
||||
if !ok {
|
||||
return newError(status, "unknown EFI error")
|
||||
}
|
||||
return err
|
||||
}
|
||||
Reference in New Issue
Block a user