Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 87e0e7a4 authored by Linux Build Service Account's avatar Linux Build Service Account Committed by Gerrit - the friendly Code Review server
Browse files

Merge "microvisor: add resource_manager.h"

parents cdeb7902 4e39ee12
Loading
Loading
Loading
Loading
+219 −0
Original line number Original line Diff line number Diff line
/*
 * Copyright (c) 2018 Cog Systems Pty Ltd
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License version 2 as
 * published by the Free Software Foundation.
 *
 * Header file for communication with resource manager.
 *
 */

/*
 * Core API
 */
#define ERROR_REPLY 0x8000ffff

/*
 * Boot manager API
 */
#define BOOT_MGR_PROTOCOL_ID 'B'

/* start_client: Unmap the client (ML VM) memory and start Linux */
#define BOOT_MGR_START_CLIENT 0x00420001
/* msg_payload: struct boot_mgr_start_params */

struct boot_mgr_start_params {
    uint64_t entry_addr; /* Physical load address / entry point of Linux */
    uint64_t dtb_addr; /* Physical address of DTB */
    bool is_64bit; /* True to reset VM to AArch64 mode, false for AArch32 */
};

/* start_client_reply: Response to BOOT_MGR_START_CLIENT */
#define BOOT_MGR_START_CLIENT_REPLY 0x80420001
/* msg_payload: bool success */

/* start_self: Reset the caller and start the loaded HLOS image */
#define BOOT_MGR_START_SELF 0x00420002
/* msg_payload: struct boot_mgr_start_params */

/*
 * start_self_reply: Response to BOOT_MGR_START_CLIENT; sent only on
 * failure as the caller will be reset if this call succeeds
 */
#define BOOT_MGR_START_SELF_REPLY 0x80420002
/* msg_payload: bool success */


/*
 * Secure Camera Server API (for HLOS)
 */
#define RES_MGR_SECURECAM_SERVER_PROTOCOL_ID 'q'

/*
 * get_handle: Given a buffer sg list, return an SC handle.
 *
 * This is sent by the HLOS to the resource manager to obtain the SC handle
 * to be used to refer to a specific camera buffer.
 *
 * The message payload is a list of IPA ranges in the HLOS VM's stage 2
 * address space. These ranges must have previously been passed to a TZ secure
 * camera map call that has been intercepted by the hypervisor and forwarded
 * to both TZ and the resource manager.
 *
 * Payload: struct res_mgr_sglist securecam.sglist
 * Note: The payload ends with a variable-length array.
 */
#define RES_MGR_SECURECAM_GET_HANDLE 0x00710001

struct res_mgr_region {
    uint64_t address_ipa;
    uint64_t size;
};

struct res_mgr_sglist {
    uint32_t region_count;
    struct res_mgr_region regions[];
};

/*
 * get_handle_reply: Response to a get_handle request.
 *
 * This is sent by the resource manager to the HLOS to return the SC handle to
 * be used to refer to the specified buffer.
 *
 * If the specified sglist did not match a secure camera buffer known to the
 * resource manager, the value 0xffffffff is returned. This value is never
 * a valid SC handle.
 *
 * Payload: uint32_t securecam.handle
 */
#define RES_MGR_SECURECAM_GET_HANDLE_REPLY 0x80710001

/*
 * destroy_handles: Destroy all SC handles and unmap their buffers.
 *
 * This is sent by the HLOS to the resource manager to ask it to unmap all
 * secure camera buffers from the ML VM and return the memory to the HLOS.
 *
 * Under normal operation, this message will be received by the resource
 * manager after the ML VM has indicated that its application is complete by
 * sending a DONE message. If this is not the case, the resource manager will
 * wait until both this message and the DONE message have been received before
 * destroying the buffers.
 *
 * Payload: void
 */
#define RES_MGR_SECURECAM_DESTROY_HANDLES 0x00710002

/*
 * destroy_handles_reply: Indicate that all SC handles have been destroyed.
 *
 * This is sent by the resource manager to the HLOS to inform it that all
 * secure camera buffers have been unmapped from the ML VM and returned to the
 * HLOS.
 *
 * Payload: void
 */
#define RES_MGR_SECURECAM_DESTROY_HANDLES_REPLY 0x80710002


/*
 * Secure Camera Client API (for ML VM)
 */
#define RES_MGR_SECURECAM_CLIENT_PROTOCOL_ID 'Q'

/*
 * notify_start: Tell the client that the first camera buffer has been mapped.
 *
 * This is sent by the resource manager to the ML VM after the first instance
 * of a TZ map call for a secure camera buffer being intercepted.
 *
 * Payload: void
 */
#define RES_MGR_SECURECAM_NOTIFY_START 0x80510001

/*
 * ack_start: Acknowledge a notify_start message
 *
 * This is sent by the ML VM to the resource manager to acknowledge receipt
 * of a notify_start message.
 *
 * Payload: void
 */
#define RES_MGR_SECURECAM_ACK_START 0x00510001

/*
 * done: Indicate that the secure camera application has terminated.
 *
 * This is sent by the ML VM when access to the secure camera buffers is no
 * longer required. The resource manager will delay unmapping the buffers
 * until this message is received.
 *
 * Payload: void
 */
#define RES_MGR_SECURECAM_DONE 0x00510002

/*
 * lookup_handle: Request physical addresses for a secure camera handle.
 *
 * This is sent by the ML VM when userspace code attempts to register a secure
 * camera buffer handle.
 *
 * Payload: uint32_t securecam.handle
 */
#define RES_MGR_LOOKUP_HANDLE 0x00510003

/*
 * lookup_handle_reply: Response to lookup_handle.
 *
 * When the resource manager receives a lookup_handle message containing a
 * handle that is valid and has already been mapped into the ML VM stage 2,
 * this message is returned containing the list of IPA ranges that have been
 * assigned to the buffer in the ML VM's address space.
 *
 * If the handle is unknown, or corresponds to a buffer that is not currently
 * mapped into the ML VM stage 2, the region_count field of the result will be
 * set to 0.
 *
 * Payload: struct res_mgr_sglist securecam.sglist
 * Note: The payload ends with a variable-length array.
 */
#define RES_MGR_LOOKUP_HANDLE_REPLY 0x80510003

/*
 * notify_start: Tell the client that the camera buffers will be unmapped.
 *
 * This is sent by the resource manager to the ML VM after the first instance
 * of a TZ unprotect call for a secure camera buffer being intercepted.
 *
 * Payload: void
 */
#define RES_MGR_SECURECAM_NOTIFY_STOP 0x80510004

/*
 * ack_start: Acknowledge a notify_stop message
 *
 * This is sent by the ML VM to the resource manager to acknowledge receipt
 * of a notify_stop message.
 *
 * Payload: void
 */
#define RES_MGR_SECURECAM_ACK_STOP 0x00510004

/*
 * Top-level message structure
 */
struct res_mgr_msg {
    uint32_t msg_id;
    union {
        bool success;
        struct {
            struct boot_mgr_start_params start_params;
        } boot_mgr;
        struct {
            uint32_t handle;
            struct res_mgr_sglist sglist;
        } securecam;
    };
};