[PATCH v2 04/11] gunyah: Common types and error codes for Gunyah hypercalls
Elliot Berman
quic_eberman at quicinc.com
Wed Aug 3 14:16:06 PDT 2022
On 8/2/2022 12:33 AM, Dmitry Baryshkov wrote:
> On 02/08/2022 00:12, Elliot Berman wrote:
>> Add architecture-independent standard error codes, types, and macros for
>> Gunyah hypercalls.
>>
>> Signed-off-by: Elliot Berman <quic_eberman at quicinc.com>
>> ---
>> MAINTAINERS | 1 +
>> include/linux/gunyah.h | 75 ++++++++++++++++++++++++++++++++++++++++++
>> 2 files changed, 76 insertions(+)
>> create mode 100644 include/linux/gunyah.h
>>
>> diff --git a/MAINTAINERS b/MAINTAINERS
>> index 02f97ac90cdf..2e4f1d9ed47b 100644
>> --- a/MAINTAINERS
>> +++ b/MAINTAINERS
>> @@ -8744,6 +8744,7 @@ S: Maintained
>> F: Documentation/devicetree/bindings/firmware/gunyah-hypervisor.yaml
>> F: Documentation/virt/gunyah/
>> F: arch/arm64/include/asm/gunyah.h
>> +F: include/linux/gunyah.h
>> HABANALABS PCI DRIVER
>> M: Oded Gabbay <ogabbay at kernel.org>
>> diff --git a/include/linux/gunyah.h b/include/linux/gunyah.h
>> new file mode 100644
>> index 000000000000..69931a0f5736
>> --- /dev/null
>> +++ b/include/linux/gunyah.h
>> @@ -0,0 +1,75 @@
>> +/* SPDX-License-Identifier: GPL-2.0-only */
>> +/*
>> + * Copyright (c) 2022 Qualcomm Innovation Center, Inc. All rights
>> reserved.
>> + */
>> +
>> +#ifndef _GUNYAH_H
>> +#define _GUNYAH_H
>> +
>> +#include <linux/types.h>
>> +#include <linux/errno.h>
>> +#include <asm/gunyah.h>
>> +
>> +typedef u64 gh_capid_t;
>> +
>> +/* Common Gunyah macros */
>> +#define GH_CAPID_INVAL U64_MAX
>> +
>> +#define GH_ERROR_OK 0
>
> Is there any semantic difference between GH_ERROR_foo < 0 and
> GH_ERROR_bar > 0 ?
>
GH_ERROR_foo < 0 comes from Gunyah's plumbing for handling hypercalls.
GH_ERROR_bar > 0 comes from the hypercall itself.
>> +#define GH_ERROR_UNIMPLEMENTED -1
>> +#define GH_ERROR_RETRY -2
>> +
>> +#define GH_ERROR_ARG_INVAL 1
>> +#define GH_ERROR_ARG_SIZE 2
>> +#define GH_ERROR_ARG_ALIGN 3
>> +
>> +#define GH_ERROR_NOMEM 10
>> +
>> +#define GH_ERROR_ADDR_OVFL 20
>> +#define GH_ERROR_ADDR_UNFL 21
>> +#define GH_ERROR_ADDR_INVAL 22
>> +
>> +#define GH_ERROR_DENIED 30
>> +#define GH_ERROR_BUSY 31
>> +#define GH_ERROR_IDLE 32
>> +
>> +#define GH_ERROR_IRQ_BOUND 40
>> +#define GH_ERROR_IRQ_UNBOUND 41
>> +
>> +#define GH_ERROR_CSPACE_CAP_NULL 50
>> +#define GH_ERROR_CSPACE_CAP_REVOKED 51
>> +#define GH_ERROR_CSPACE_WRONG_OBJ_TYPE 52
>> +#define GH_ERROR_CSPACE_INSUF_RIGHTS 53
>> +#define GH_ERROR_CSPACE_FULL 54
>> +
>> +#define GH_ERROR_MSGQUEUE_EMPTY 60
>> +#define GH_ERROR_MSGQUEUE_FULL 61
>> +
>> +static inline int gh_remap_error(int 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 -EPERM;
>> + default:
>> + return -EINVAL;
>> + }
>> +}
>> +
>> +#endif
>
>
More information about the linux-arm-kernel
mailing list