Re: [PATCH v2 04/11] gunyah: Common types and error codes for Gunyah hypercalls

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 





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@xxxxxxxxxxx>
---
  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@xxxxxxxxxx>
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





[Index of Archives]     [Kernel Newbies]     [Security]     [Netfilter]     [Bugtraq]     [Linux FS]     [Yosemite Forum]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Samba]     [Video 4 Linux]     [Device Mapper]     [Linux Resources]

  Powered by Linux