diff --git a/include/linux/haven/hh_common.h b/include/linux/haven/hh_common.h new file mode 100644 index 000000000000..90e8ea72fed1 --- /dev/null +++ b/include/linux/haven/hh_common.h @@ -0,0 +1,18 @@ +/* SPDX-License-Identifier: GPL-2.0-only */ +/* + * Copyright (c) 2020, The Linux Foundation. All rights reserved. + * + */ + +#ifndef __HH_COMMON_H +#define __HH_COMMON_H + +/* Common Haven types */ +typedef u16 hh_vmid_t; +typedef u32 hh_rm_msgid_t; +typedef u32 hh_virq_handle_t; +typedef u32 hh_label_t; +typedef u64 hh_capid_t; +typedef u64 hh_dbl_flags_t; + +#endif diff --git a/include/linux/haven/hh_errno.h b/include/linux/haven/hh_errno.h new file mode 100644 index 000000000000..3ac33b991d13 --- /dev/null +++ b/include/linux/haven/hh_errno.h @@ -0,0 +1,76 @@ +/* SPDX-License-Identifier: GPL-2.0-only */ +/* + * Copyright (c) 2020, The Linux Foundation. All rights reserved. + * + */ + +#ifndef __HH_ERRNO_H +#define __HH_ERRNO_H + +#include + +#define HH_ERROR_OK 0 +#define HH_ERROR_UNIMPLEMENTED -1 + +#define HH_ERROR_ARG_INVAL 1 +#define HH_ERROR_ARG_SIZE 2 +#define HH_ERROR_ARG_ALIGN 3 + +#define HH_ERROR_NOMEM 10 + +#define HH_ERROR_ADDR_OVFL 20 +#define HH_ERROR_ADDR_UNFL 21 +#define HH_ERROR_ADDR_INVAL 22 + +#define HH_ERROR_DENIED 30 +#define HH_ERROR_BUSY 31 +#define HH_ERROR_IDLE 32 + +#define HH_ERROR_IRQ_BOUND 40 +#define HH_ERROR_IRQ_UNBOUND 41 + +#define HH_ERROR_CSPACE_CAP_NULL 50 +#define HH_ERROR_CSPACE_CAP_REVOKED 51 +#define HH_ERROR_CSPACE_WRONG_OBJ_TYPE 52 +#define HH_ERROR_CSPACE_INSUF_RIGHTS 53 +#define HH_ERROR_CSPACE_FULL 54 + +/* TODO: Get the correct values for the MSGQ error codes */ +#define HH_ERROR_MSGQUEUE_FULL 60 +#define HH_ERROR_MSGQUEUE_EMPTY 61 + +static inline int hh_remap_error(int hh_error) +{ + switch (hh_error) { + case HH_ERROR_OK: + return 0; + case HH_ERROR_NOMEM: + return -ENOMEM; + case HH_ERROR_DENIED: + case HH_ERROR_CSPACE_CAP_NULL: + case HH_ERROR_CSPACE_CAP_REVOKED: + case HH_ERROR_CSPACE_WRONG_OBJ_TYPE: + case HH_ERROR_CSPACE_INSUF_RIGHTS: + case HH_ERROR_CSPACE_FULL: + return -EACCES; + case HH_ERROR_BUSY: + case HH_ERROR_IDLE: + return -EBUSY; + case HH_ERROR_IRQ_BOUND: + case HH_ERROR_IRQ_UNBOUND: + case HH_ERROR_MSGQUEUE_FULL: + case HH_ERROR_MSGQUEUE_EMPTY: + return -EPERM; + case HH_ERROR_UNIMPLEMENTED: + case HH_ERROR_ARG_INVAL: + case HH_ERROR_ARG_SIZE: + case HH_ERROR_ARG_ALIGN: + case HH_ERROR_ADDR_OVFL: + case HH_ERROR_ADDR_UNFL: + case HH_ERROR_ADDR_INVAL: + default: + return -EINVAL; + } +} + +#endif