m1n1/src/proxy.h
Martin Povišer a40840f13c proxy: Expose usb_iodev_vuart_setup
Expose the usb_iodev_vuart_setup function in uartproxy. This opens
the secondary ACM pipe to new uses outside the hypervisor. E.g. it can
be set up as another stream for sending proxy requests.

Sample usage from proxyclient:

    p.usb_iodev_vuart_setup(p.iodev_whoami())
    p.iodev_set_usage(IODEV.USB_VUART, USAGE.UARTPROXY)
    # the second virtual serial now also serves proxy

Signed-off-by: Martin Povišer <povik@protonmail.com>
2021-11-26 15:31:21 +09:00

160 lines
2.8 KiB
C

/* SPDX-License-Identifier: MIT */
#ifndef __PROXY_H__
#define __PROXY_H__
#include "types.h"
typedef enum {
P_NOP = 0x000, // System functions
P_EXIT,
P_CALL,
P_GET_BOOTARGS,
P_GET_BASE,
P_SET_BAUD,
P_UDELAY,
P_SET_EXC_GUARD,
P_GET_EXC_COUNT,
P_EL0_CALL,
P_EL1_CALL,
P_VECTOR,
P_GL1_CALL,
P_GL2_CALL,
P_GET_SIMD_STATE,
P_PUT_SIMD_STATE,
P_REBOOT,
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,
P_WRITEREAD64,
P_WRITEREAD32,
P_WRITEREAD16,
P_WRITEREAD8,
P_MEMCPY64 = 0x200, // Memory block transfer functions
P_MEMCPY32,
P_MEMCPY16,
P_MEMCPY8,
P_MEMSET64,
P_MEMSET32,
P_MEMSET16,
P_MEMSET8,
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,
P_MMU_SHUTDOWN,
P_MMU_INIT,
P_MMU_DISABLE,
P_MMU_RESTORE,
P_MMU_INIT_SECONDARY,
P_XZDEC = 0x400, // Decompression and data processing ops
P_GZDEC,
P_SMP_START_SECONDARIES = 0x500, // SMP and system management ops
P_SMP_CALL,
P_SMP_CALL_SYNC,
P_SMP_WAIT,
P_HEAPBLOCK_ALLOC = 0x600, // Heap and memory management ops
P_MALLOC,
P_MEMALIGN,
P_FREE,
P_KBOOT_BOOT = 0x700, // Kernel boot ops
P_KBOOT_SET_BOOTARGS,
P_KBOOT_SET_INITRD,
P_KBOOT_PREPARE_DT,
P_PMGR_CLOCK_ENABLE = 0x800, // power/clock management ops
P_PMGR_CLOCK_DISABLE,
P_PMGR_ADT_CLOCKS_ENABLE,
P_PMGR_ADT_CLOCKS_DISABLE,
P_IODEV_SET_USAGE = 0x900,
P_IODEV_CAN_READ,
P_IODEV_CAN_WRITE,
P_IODEV_READ,
P_IODEV_WRITE,
P_IODEV_WHOAMI,
P_USB_IODEV_VUART_SETUP,
P_TUNABLES_APPLY_GLOBAL = 0xa00,
P_TUNABLES_APPLY_LOCAL,
P_TUNABLES_APPLY_LOCAL_ADDR,
P_DART_INIT = 0xb00,
P_DART_SHUTDOWN,
P_DART_MAP,
P_DART_UNMAP,
P_HV_INIT = 0xc00,
P_HV_MAP,
P_HV_START,
P_HV_TRANSLATE,
P_HV_PT_WALK,
P_HV_MAP_VUART,
P_HV_TRACE_IRQ,
P_HV_WDT_START,
P_HV_START_SECONDARY,
P_HV_SWITCH_CPU,
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,
P_FB_IMPROVE_LOGO,
P_PCIE_INIT = 0xe00,
P_PCIE_SHUTDOWN,
} ProxyOp;
#define S_OK 0
#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