]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - stand/efi/libefi/errno.c
Merge llvm-project release/17.x llvmorg-17.0.6-0-g6009708b4367
[FreeBSD/FreeBSD.git] / stand / efi / libefi / errno.c
1 /*-
2  * Copyright (c) 2006 Marcel Moolenaar
3  * All rights reserved.
4  *
5  * Redistribution and use in source and binary forms, with or without
6  * modification, are permitted provided that the following conditions
7  * are met:
8  *
9  * 1. Redistributions of source code must retain the above copyright
10  *    notice, this list of conditions and the following disclaimer.
11  * 2. Redistributions in binary form must reproduce the above copyright
12  *    notice, this list of conditions and the following disclaimer in the
13  *    documentation and/or other materials provided with the distribution.
14  *
15  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
16  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
17  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
18  * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
19  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
20  * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
21  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
22  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
23  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
24  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
25  */
26
27 #include <sys/cdefs.h>
28 #include <efi.h>
29 #include <efilib.h>
30
31 EFI_STATUS
32 errno_to_efi_status(int errno)
33 {
34         EFI_STATUS status;
35
36         switch (errno) {
37         case EPERM:
38                 status = EFI_ACCESS_DENIED;
39                 break;
40
41         case EOVERFLOW:
42                 status = EFI_BUFFER_TOO_SMALL;
43                 break;
44
45         case EIO:
46                 status = EFI_DEVICE_ERROR;
47                 break;
48
49         case EINVAL:
50                 status = EFI_INVALID_PARAMETER;
51                 break;
52
53         case ESTALE:
54                 status = EFI_MEDIA_CHANGED;
55                 break;
56
57         case ENXIO:
58                 status = EFI_NO_MEDIA;
59                 break;
60
61         case ENOENT:
62                 status = EFI_NOT_FOUND;
63                 break;
64
65         case ENOMEM:
66                 status = EFI_OUT_OF_RESOURCES;
67                 break;
68
69         case ENOTSUP:
70         case ENODEV:
71                 status = EFI_UNSUPPORTED;
72                 break;
73
74         case ENOSPC:
75                 status = EFI_VOLUME_FULL;
76                 break;
77
78         case EACCES:
79                 status = EFI_WRITE_PROTECTED;
80                 break;
81
82         case 0:
83                 status = EFI_SUCCESS;
84                 break;
85
86         default:
87                 status = EFI_DEVICE_ERROR;
88                 break;
89         }
90
91         return (status);
92 }
93
94 int
95 efi_status_to_errno(EFI_STATUS status)
96 {
97         int errno;
98
99         switch (status) {
100         case EFI_ACCESS_DENIED:
101                 errno = EPERM;
102                 break;
103
104         case EFI_BUFFER_TOO_SMALL:
105                 errno = EOVERFLOW;
106                 break;
107
108         case EFI_DEVICE_ERROR:
109         case EFI_VOLUME_CORRUPTED:
110                 errno = EIO;
111                 break;
112
113         case EFI_INVALID_PARAMETER:
114                 errno = EINVAL;
115                 break;
116
117         case EFI_MEDIA_CHANGED:
118                 errno = ESTALE;
119                 break;
120
121         case EFI_NO_MEDIA:
122                 errno = ENXIO;
123                 break;
124
125         case EFI_NOT_FOUND:
126                 errno = ENOENT;
127                 break;
128
129         case EFI_OUT_OF_RESOURCES:
130                 errno = ENOMEM;
131                 break;
132
133         case EFI_UNSUPPORTED:
134                 errno = ENODEV;
135                 break;
136
137         case EFI_VOLUME_FULL:
138                 errno = ENOSPC;
139                 break;
140
141         case EFI_WRITE_PROTECTED:
142                 errno = EACCES;
143                 break;
144
145         case 0:
146                 errno = 0;
147                 break;
148
149         default:
150                 errno = EDOOFUS;
151                 break;
152         }
153
154         return (errno);
155 }