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

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

Bug: 338347082
Link: https://lore.kernel.org/all/20240222-gunyah-v17-3-1e9da6763d38@quicinc.com/
Change-Id: I82d22491fa84ff667e8c680305f4b498b894b1ad
Reviewed-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
Reviewed-by: Srinivas Kandagatla <srinivas.kandagatla@linaro.org>
Reviewed-by: Alex Elder <elder@linaro.org>
Signed-off-by: Elliot Berman <quic_eberman@quicinc.com>
Signed-off-by: Elliot Berman <elliot.berman@oss.qualcomm.com>
This commit is contained in:
Elliot Berman
2024-02-22 15:16:26 -08:00
committed by Treehugger Robot
parent 2d42c50572
commit fb4f92c918
+106
View File
@@ -0,0 +1,106 @@
/* SPDX-License-Identifier: GPL-2.0-only */
/*
* Copyright (c) 2022-2024 Qualcomm Innovation Center, Inc. All rights reserved.
*/
#ifndef _LINUX_GUNYAH_H
#define _LINUX_GUNYAH_H
#include <linux/errno.h>
#include <linux/interrupt.h>
#include <linux/limits.h>
/* Matches resource manager's resource types for VM_GET_HYP_RESOURCES RPC */
enum gunyah_resource_type {
/* clang-format off */
GUNYAH_RESOURCE_TYPE_BELL_TX = 0,
GUNYAH_RESOURCE_TYPE_BELL_RX = 1,
GUNYAH_RESOURCE_TYPE_MSGQ_TX = 2,
GUNYAH_RESOURCE_TYPE_MSGQ_RX = 3,
GUNYAH_RESOURCE_TYPE_VCPU = 4,
GUNYAH_RESOURCE_TYPE_MEM_EXTENT = 9,
GUNYAH_RESOURCE_TYPE_ADDR_SPACE = 10,
/* clang-format on */
};
struct gunyah_resource {
enum gunyah_resource_type type;
u64 capid;
unsigned int irq;
};
/******************************************************************************/
/* Common arch-independent definitions for Gunyah hypercalls */
#define GUNYAH_CAPID_INVAL U64_MAX
#define GUNYAH_VMID_ROOT_VM 0xff
enum gunyah_error {
/* clang-format off */
GUNYAH_ERROR_OK = 0,
GUNYAH_ERROR_UNIMPLEMENTED = -1,
GUNYAH_ERROR_RETRY = -2,
GUNYAH_ERROR_ARG_INVAL = 1,
GUNYAH_ERROR_ARG_SIZE = 2,
GUNYAH_ERROR_ARG_ALIGN = 3,
GUNYAH_ERROR_NOMEM = 10,
GUNYAH_ERROR_ADDR_OVFL = 20,
GUNYAH_ERROR_ADDR_UNFL = 21,
GUNYAH_ERROR_ADDR_INVAL = 22,
GUNYAH_ERROR_DENIED = 30,
GUNYAH_ERROR_BUSY = 31,
GUNYAH_ERROR_IDLE = 32,
GUNYAH_ERROR_IRQ_BOUND = 40,
GUNYAH_ERROR_IRQ_UNBOUND = 41,
GUNYAH_ERROR_CSPACE_CAP_NULL = 50,
GUNYAH_ERROR_CSPACE_CAP_REVOKED = 51,
GUNYAH_ERROR_CSPACE_WRONG_OBJ_TYPE = 52,
GUNYAH_ERROR_CSPACE_INSUF_RIGHTS = 53,
GUNYAH_ERROR_CSPACE_FULL = 54,
GUNYAH_ERROR_MSGQUEUE_EMPTY = 60,
GUNYAH_ERROR_MSGQUEUE_FULL = 61,
/* clang-format on */
};
/**
* gunyah_error_remap() - Remap Gunyah hypervisor errors into a Linux error code
* @gunyah_error: Gunyah hypercall return value
*/
static inline int gunyah_error_remap(enum gunyah_error gunyah_error)
{
switch (gunyah_error) {
case GUNYAH_ERROR_OK:
return 0;
case GUNYAH_ERROR_NOMEM:
return -ENOMEM;
case GUNYAH_ERROR_DENIED:
case GUNYAH_ERROR_CSPACE_CAP_NULL:
case GUNYAH_ERROR_CSPACE_CAP_REVOKED:
case GUNYAH_ERROR_CSPACE_WRONG_OBJ_TYPE:
case GUNYAH_ERROR_CSPACE_INSUF_RIGHTS:
return -EACCES;
case GUNYAH_ERROR_CSPACE_FULL:
case GUNYAH_ERROR_BUSY:
case GUNYAH_ERROR_IDLE:
return -EBUSY;
case GUNYAH_ERROR_IRQ_BOUND:
case GUNYAH_ERROR_IRQ_UNBOUND:
case GUNYAH_ERROR_MSGQUEUE_FULL:
case GUNYAH_ERROR_MSGQUEUE_EMPTY:
return -EIO;
case GUNYAH_ERROR_UNIMPLEMENTED:
return -EOPNOTSUPP;
case GUNYAH_ERROR_RETRY:
return -EAGAIN;
default:
return -EINVAL;
}
}
#endif