2021-02-06 14:53:38 +09:00
|
|
|
/* SPDX-License-Identifier: MIT */
|
|
|
|
|
2021-01-14 18:18:07 +09:00
|
|
|
#ifndef __PROXY_H__
|
|
|
|
#define __PROXY_H__
|
|
|
|
|
|
|
|
#include "types.h"
|
|
|
|
|
|
|
|
typedef enum {
|
|
|
|
P_NOP = 0x000, // System functions
|
|
|
|
P_EXIT,
|
|
|
|
P_CALL,
|
|
|
|
P_GET_BOOTARGS,
|
2021-01-15 03:55:20 +09:00
|
|
|
P_GET_BASE,
|
|
|
|
P_SET_BAUD,
|
2021-01-23 22:31:15 +09:00
|
|
|
P_UDELAY,
|
2021-01-30 15:14:38 +09:00
|
|
|
P_SET_EXC_GUARD,
|
|
|
|
P_GET_EXC_COUNT,
|
2021-02-24 21:46:33 +09:00
|
|
|
P_EL0_CALL,
|
2021-03-04 21:28:07 +09:00
|
|
|
P_EL1_CALL,
|
2021-04-17 17:39:44 +09:00
|
|
|
P_VECTOR,
|
2021-05-08 14:54:07 +02:00
|
|
|
P_GL1_CALL,
|
|
|
|
P_GL2_CALL,
|
2021-05-27 22:57:25 +09:00
|
|
|
P_GET_SIMD_STATE,
|
|
|
|
P_PUT_SIMD_STATE,
|
2021-06-04 15:08:06 +09:00
|
|
|
P_REBOOT,
|
2023-04-19 02:34:59 +09:00
|
|
|
P_SLEEP,
|
2021-01-14 18:18:07 +09:00
|
|
|
|
|
|
|
P_WRITE64 = 0x100, // Generic register functions
|
|
|
|
P_WRITE32,
|
|
|
|
P_WRITE16,
|
|
|
|
P_WRITE8,
|
|
|
|
P_READ64,
|
|
|
|
P_READ32,
|
|
|
|
P_READ16,
|
|
|
|
P_READ8,
|
|
|
|
P_SET64,
|
|
|
|
P_SET32,
|
|
|
|
P_SET16,
|
|
|
|
P_SET8,
|
|
|
|
P_CLEAR64,
|
|
|
|
P_CLEAR32,
|
|
|
|
P_CLEAR16,
|
|
|
|
P_CLEAR8,
|
|
|
|
P_MASK64,
|
|
|
|
P_MASK32,
|
|
|
|
P_MASK16,
|
|
|
|
P_MASK8,
|
2021-02-17 21:34:25 +01:00
|
|
|
P_WRITEREAD64,
|
|
|
|
P_WRITEREAD32,
|
|
|
|
P_WRITEREAD16,
|
|
|
|
P_WRITEREAD8,
|
2021-01-14 18:18:07 +09:00
|
|
|
|
|
|
|
P_MEMCPY64 = 0x200, // Memory block transfer functions
|
|
|
|
P_MEMCPY32,
|
|
|
|
P_MEMCPY16,
|
|
|
|
P_MEMCPY8,
|
|
|
|
P_MEMSET64,
|
|
|
|
P_MEMSET32,
|
|
|
|
P_MEMSET16,
|
|
|
|
P_MEMSET8,
|
|
|
|
|
2021-01-17 00:45:10 +09:00
|
|
|
P_IC_IALLUIS = 0x300, // Cache and memory ops
|
|
|
|
P_IC_IALLU,
|
|
|
|
P_IC_IVAU,
|
|
|
|
P_DC_IVAC,
|
|
|
|
P_DC_ISW,
|
|
|
|
P_DC_CSW,
|
|
|
|
P_DC_CISW,
|
|
|
|
P_DC_ZVA,
|
|
|
|
P_DC_CVAC,
|
|
|
|
P_DC_CVAU,
|
|
|
|
P_DC_CIVAC,
|
2021-01-29 00:35:40 +09:00
|
|
|
P_MMU_SHUTDOWN,
|
2021-05-08 14:54:07 +02:00
|
|
|
P_MMU_INIT,
|
|
|
|
P_MMU_DISABLE,
|
|
|
|
P_MMU_RESTORE,
|
2021-10-15 23:41:24 +09:00
|
|
|
P_MMU_INIT_SECONDARY,
|
2021-01-14 18:18:07 +09:00
|
|
|
|
2021-01-29 00:25:40 +09:00
|
|
|
P_XZDEC = 0x400, // Decompression and data processing ops
|
2021-01-23 22:25:34 +09:00
|
|
|
P_GZDEC,
|
|
|
|
|
2021-01-29 00:25:40 +09:00
|
|
|
P_SMP_START_SECONDARIES = 0x500, // SMP and system management ops
|
|
|
|
P_SMP_CALL,
|
|
|
|
P_SMP_CALL_SYNC,
|
2021-09-17 15:25:34 +09:00
|
|
|
P_SMP_WAIT,
|
2022-03-07 23:58:11 +09:00
|
|
|
P_SMP_SET_WFE_MODE,
|
2023-03-22 17:32:32 +09:00
|
|
|
P_SMP_IS_ALIVE,
|
2023-04-19 02:36:34 +09:00
|
|
|
P_SMP_STOP_SECONDARIES,
|
2023-05-04 20:55:28 +09:00
|
|
|
P_SMP_CALL_EL1,
|
|
|
|
P_SMP_CALL_EL1_SYNC,
|
2024-04-09 09:17:56 +09:00
|
|
|
P_SMP_CALL_EL0,
|
|
|
|
P_SMP_CALL_EL0_SYNC,
|
2021-01-29 00:25:40 +09:00
|
|
|
|
2021-01-29 15:19:34 +09:00
|
|
|
P_HEAPBLOCK_ALLOC = 0x600, // Heap and memory management ops
|
|
|
|
P_MALLOC,
|
|
|
|
P_MEMALIGN,
|
|
|
|
P_FREE,
|
|
|
|
|
2021-01-30 01:36:45 +09:00
|
|
|
P_KBOOT_BOOT = 0x700, // Kernel boot ops
|
2022-03-09 20:35:20 +09:00
|
|
|
P_KBOOT_SET_CHOSEN,
|
2021-01-30 01:36:45 +09:00
|
|
|
P_KBOOT_SET_INITRD,
|
|
|
|
P_KBOOT_PREPARE_DT,
|
|
|
|
|
2022-01-10 18:16:57 +01:00
|
|
|
P_PMGR_POWER_ENABLE = 0x800, // power/clock management ops
|
|
|
|
P_PMGR_POWER_DISABLE,
|
|
|
|
P_PMGR_ADT_POWER_ENABLE,
|
|
|
|
P_PMGR_ADT_POWER_DISABLE,
|
2022-06-01 00:49:58 +09:00
|
|
|
P_PMGR_RESET,
|
2021-04-08 17:11:27 +02:00
|
|
|
|
2021-04-15 23:17:15 +09:00
|
|
|
P_IODEV_SET_USAGE = 0x900,
|
|
|
|
P_IODEV_CAN_READ,
|
|
|
|
P_IODEV_CAN_WRITE,
|
|
|
|
P_IODEV_READ,
|
|
|
|
P_IODEV_WRITE,
|
2021-05-03 21:03:28 +09:00
|
|
|
P_IODEV_WHOAMI,
|
2021-11-24 16:12:54 +01:00
|
|
|
P_USB_IODEV_VUART_SETUP,
|
2021-04-15 23:17:15 +09:00
|
|
|
|
2021-04-06 12:37:37 +02:00
|
|
|
P_TUNABLES_APPLY_GLOBAL = 0xa00,
|
|
|
|
P_TUNABLES_APPLY_LOCAL,
|
2021-04-07 22:39:43 +02:00
|
|
|
P_TUNABLES_APPLY_LOCAL_ADDR,
|
2021-04-06 12:37:37 +02:00
|
|
|
|
2021-04-14 16:58:38 +02:00
|
|
|
P_DART_INIT = 0xb00,
|
|
|
|
P_DART_SHUTDOWN,
|
|
|
|
P_DART_MAP,
|
|
|
|
P_DART_UNMAP,
|
|
|
|
|
2021-05-01 19:05:21 +09:00
|
|
|
P_HV_INIT = 0xc00,
|
2021-05-04 19:36:23 +09:00
|
|
|
P_HV_MAP,
|
|
|
|
P_HV_START,
|
2021-05-05 00:27:21 +09:00
|
|
|
P_HV_TRANSLATE,
|
2021-05-05 03:29:11 +09:00
|
|
|
P_HV_PT_WALK,
|
2021-05-05 03:30:07 +09:00
|
|
|
P_HV_MAP_VUART,
|
2021-06-05 22:05:17 +02:00
|
|
|
P_HV_TRACE_IRQ,
|
2021-09-15 22:08:35 +09:00
|
|
|
P_HV_WDT_START,
|
2021-09-15 23:31:33 +09:00
|
|
|
P_HV_START_SECONDARY,
|
2021-09-21 13:18:06 +09:00
|
|
|
P_HV_SWITCH_CPU,
|
2022-05-30 19:37:23 +09:00
|
|
|
P_HV_SET_TIME_STEALING,
|
2022-04-18 12:08:02 +09:00
|
|
|
P_HV_PIN_CPU,
|
2022-08-17 14:02:55 +09:00
|
|
|
P_HV_WRITE_HCR,
|
2022-06-27 16:38:32 +02:00
|
|
|
P_HV_MAP_VIRTIO,
|
|
|
|
P_VIRTIO_PUT_BUFFER,
|
2023-04-19 01:00:59 +09:00
|
|
|
P_HV_EXIT_CPU,
|
2023-04-26 00:45:31 +09:00
|
|
|
P_HV_ADD_TIME,
|
2021-05-01 19:05:21 +09:00
|
|
|
|
2021-05-08 03:42:21 +09:00
|
|
|
P_FB_INIT = 0xd00,
|
|
|
|
P_FB_SHUTDOWN,
|
|
|
|
P_FB_BLIT,
|
|
|
|
P_FB_UNBLIT,
|
|
|
|
P_FB_FILL,
|
|
|
|
P_FB_CLEAR,
|
|
|
|
P_FB_DISPLAY_LOGO,
|
|
|
|
P_FB_RESTORE_LOGO,
|
2021-05-08 03:44:16 +09:00
|
|
|
P_FB_IMPROVE_LOGO,
|
2021-05-08 03:42:21 +09:00
|
|
|
|
2021-11-22 16:04:35 +09:00
|
|
|
P_PCIE_INIT = 0xe00,
|
|
|
|
P_PCIE_SHUTDOWN,
|
|
|
|
|
2022-01-10 18:16:59 +01:00
|
|
|
P_NVME_INIT = 0xf00,
|
|
|
|
P_NVME_SHUTDOWN,
|
2022-01-21 17:24:24 +01:00
|
|
|
P_NVME_READ,
|
|
|
|
P_NVME_FLUSH,
|
2022-02-21 15:29:30 +09:00
|
|
|
|
2022-05-18 16:05:15 +09:00
|
|
|
P_MCC_GET_CARVEOUTS = 0x1000,
|
2022-06-01 00:49:40 +09:00
|
|
|
|
|
|
|
P_DISPLAY_INIT = 0x1100,
|
2022-07-03 23:27:30 +09:00
|
|
|
P_DISPLAY_CONFIGURE,
|
|
|
|
P_DISPLAY_SHUTDOWN,
|
2022-12-16 18:37:25 +09:00
|
|
|
P_DISPLAY_START_DCP,
|
|
|
|
P_DISPLAY_IS_EXTERNAL,
|
2022-07-03 23:27:30 +09:00
|
|
|
|
|
|
|
P_DAPF_INIT_ALL = 0x1200,
|
|
|
|
P_DAPF_INIT,
|
2022-06-01 00:49:40 +09:00
|
|
|
|
2023-06-04 15:56:42 +09:00
|
|
|
P_CPUFREQ_INIT = 0x1300,
|
2021-01-14 18:18:07 +09:00
|
|
|
} ProxyOp;
|
|
|
|
|
2021-01-28 15:27:35 +09:00
|
|
|
#define S_OK 0
|
2021-01-14 18:18:07 +09:00
|
|
|
#define S_BADCMD -1
|
|
|
|
|
|
|
|
typedef struct {
|
|
|
|
u64 opcode;
|
|
|
|
u64 args[6];
|
|
|
|
} ProxyRequest;
|
|
|
|
|
|
|
|
typedef struct {
|
|
|
|
u64 opcode;
|
|
|
|
s64 status;
|
|
|
|
u64 retval;
|
|
|
|
} ProxyReply;
|
|
|
|
|
|
|
|
int proxy_process(ProxyRequest *request, ProxyReply *reply);
|
|
|
|
|
|
|
|
#endif
|