]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - stand/efi/libefi/errno.c
MFC r325834,r325997,326502: Move sys/boot to stand/
[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 __FBSDID("$FreeBSD$");
29
30 #include <efi.h>
31 #include <efilib.h>
32
33 EFI_STATUS
34 errno_to_efi_status(int errno)
35 {
36         EFI_STATUS status;
37
38         switch (errno) {
39         case EPERM:
40                 status = EFI_ACCESS_DENIED;
41                 break;
42
43         case EOVERFLOW:
44                 status = EFI_BUFFER_TOO_SMALL;
45                 break;
46
47         case EIO:
48                 status = EFI_DEVICE_ERROR;
49                 break;
50
51         case EINVAL:
52                 status = EFI_INVALID_PARAMETER;
53                 break;
54
55         case ESTALE:
56                 status = EFI_MEDIA_CHANGED;
57                 break;
58
59         case ENXIO:
60                 status = EFI_NO_MEDIA;
61                 break;
62
63         case ENOENT:
64                 status = EFI_NOT_FOUND;
65                 break;
66
67         case ENOMEM:
68                 status = EFI_OUT_OF_RESOURCES;
69                 break;
70
71         case ENOTSUP:
72         case ENODEV:
73                 status = EFI_UNSUPPORTED;
74                 break;
75
76         case ENOSPC:
77                 status = EFI_VOLUME_FULL;
78                 break;
79
80         case EACCES:
81                 status = EFI_WRITE_PROTECTED;
82                 break;
83
84         case 0:
85                 status = EFI_SUCCESS;
86                 break;
87
88         default:
89                 status = EFI_DEVICE_ERROR;
90                 break;
91         }
92
93         return (status);
94 }
95
96 int
97 efi_status_to_errno(EFI_STATUS status)
98 {
99         int errno;
100
101         switch (status) {
102         case EFI_ACCESS_DENIED:
103                 errno = EPERM;
104                 break;
105
106         case EFI_BUFFER_TOO_SMALL:
107                 errno = EOVERFLOW;
108                 break;
109
110         case EFI_DEVICE_ERROR:
111         case EFI_VOLUME_CORRUPTED:
112                 errno = EIO;
113                 break;
114
115         case EFI_INVALID_PARAMETER:
116                 errno = EINVAL;
117                 break;
118
119         case EFI_MEDIA_CHANGED:
120                 errno = ESTALE;
121                 break;
122
123         case EFI_NO_MEDIA:
124                 errno = ENXIO;
125                 break;
126
127         case EFI_NOT_FOUND:
128                 errno = ENOENT;
129                 break;
130
131         case EFI_OUT_OF_RESOURCES:
132                 errno = ENOMEM;
133                 break;
134
135         case EFI_UNSUPPORTED:
136                 errno = ENODEV;
137                 break;
138
139         case EFI_VOLUME_FULL:
140                 errno = ENOSPC;
141                 break;
142
143         case EFI_WRITE_PROTECTED:
144                 errno = EACCES;
145                 break;
146
147         case 0:
148                 errno = 0;
149                 break;
150
151         default:
152                 errno = EDOOFUS;
153                 break;
154         }
155
156         return (errno);
157 }