xref: /openbmc/libpldm/src/api.h (revision 890d37a3)
1 // SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later
2 #ifndef LIBPLDM_SRC_API_H
3 #define LIBPLDM_SRC_API_H
4 
5 #include <libpldm/base.h>
6 
7 #include <assert.h>
8 #include <errno.h>
9 
10 /**
11  * @brief Translate a negative errno value to a PLDM completion code
12  *
13  * Existing stable APIs often return errors in the form of PLDM completion
14  * codes, which confuses the problems of the protocol with the problems of
15  * the implementation. We're shifting to using negative errno values to signal
16  * implementation errors. However, for existing stable APIs, provide a means to
17  * translate between the two.
18  *
19  * @param[in] err - The negative errno to translate to a completion code
20  *
21  * @return An equivalent PLDM completion code for @p err
22  */
23 static inline enum pldm_completion_codes pldm_xlate_errno(int err)
24 {
25 	enum pldm_completion_codes rc;
26 
27 	assert(err < 0);
28 	switch (err) {
29 	case -EINVAL:
30 		rc = PLDM_ERROR_INVALID_DATA;
31 		break;
32 	case -ENOMSG:
33 		rc = PLDM_ERROR_INVALID_PLDM_TYPE;
34 		break;
35 	case -EBADMSG:
36 	case -EOVERFLOW:
37 		rc = PLDM_ERROR_INVALID_LENGTH;
38 		break;
39 	default:
40 		assert(false);
41 		rc = PLDM_ERROR;
42 		break;
43 	}
44 
45 	assert(rc > 0);
46 	return rc;
47 }
48 
49 #endif
50