FROMLIST: gunyah: Common types and error codes for Gunyah hypercalls

Add architecture-independent standard error codes, types, and macros for
Gunyah hypercalls.

Reviewed-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
Change-Id: Ib4a98bf881639d0b7e11a9e667beaf54456eecc7
Signed-off-by: Elliot Berman <quic_eberman@quicinc.com>
Bug: 268234781
Link: https://lore.kernel.org/all/20230304010632.2127470-4-quic_eberman@quicinc.com/
This commit is contained in:
Elliot Berman
2022-08-10 21:53:52 -07:00
committed by Aleksei Vetrov
parent 1a54a27528
commit 256b469b57

83
include/linux/gunyah.h Normal file
View File

@@ -0,0 +1,83 @@
/* SPDX-License-Identifier: GPL-2.0-only */
/*
* Copyright (c) 2022-2023 Qualcomm Innovation Center, Inc. All rights reserved.
*/
#ifndef _LINUX_GUNYAH_H
#define _LINUX_GUNYAH_H
#include <linux/errno.h>
#include <linux/limits.h>
/******************************************************************************/
/* Common arch-independent definitions for Gunyah hypercalls */
#define GH_CAPID_INVAL U64_MAX
#define GH_VMID_ROOT_VM 0xff
enum gh_error {
GH_ERROR_OK = 0,
GH_ERROR_UNIMPLEMENTED = -1,
GH_ERROR_RETRY = -2,
GH_ERROR_ARG_INVAL = 1,
GH_ERROR_ARG_SIZE = 2,
GH_ERROR_ARG_ALIGN = 3,
GH_ERROR_NOMEM = 10,
GH_ERROR_ADDR_OVFL = 20,
GH_ERROR_ADDR_UNFL = 21,
GH_ERROR_ADDR_INVAL = 22,
GH_ERROR_DENIED = 30,
GH_ERROR_BUSY = 31,
GH_ERROR_IDLE = 32,
GH_ERROR_IRQ_BOUND = 40,
GH_ERROR_IRQ_UNBOUND = 41,
GH_ERROR_CSPACE_CAP_NULL = 50,
GH_ERROR_CSPACE_CAP_REVOKED = 51,
GH_ERROR_CSPACE_WRONG_OBJ_TYPE = 52,
GH_ERROR_CSPACE_INSUF_RIGHTS = 53,
GH_ERROR_CSPACE_FULL = 54,
GH_ERROR_MSGQUEUE_EMPTY = 60,
GH_ERROR_MSGQUEUE_FULL = 61,
};
/**
* gh_remap_error() - Remap Gunyah hypervisor errors into a Linux error code
* @gh_error: Gunyah hypercall return value
*/
static inline int gh_remap_error(enum gh_error gh_error)
{
switch (gh_error) {
case GH_ERROR_OK:
return 0;
case GH_ERROR_NOMEM:
return -ENOMEM;
case GH_ERROR_DENIED:
case GH_ERROR_CSPACE_CAP_NULL:
case GH_ERROR_CSPACE_CAP_REVOKED:
case GH_ERROR_CSPACE_WRONG_OBJ_TYPE:
case GH_ERROR_CSPACE_INSUF_RIGHTS:
case GH_ERROR_CSPACE_FULL:
return -EACCES;
case GH_ERROR_BUSY:
case GH_ERROR_IDLE:
return -EBUSY;
case GH_ERROR_IRQ_BOUND:
case GH_ERROR_IRQ_UNBOUND:
case GH_ERROR_MSGQUEUE_FULL:
case GH_ERROR_MSGQUEUE_EMPTY:
return -EIO;
case GH_ERROR_UNIMPLEMENTED:
case GH_ERROR_RETRY:
return -EOPNOTSUPP;
default:
return -EINVAL;
}
}
#endif