blob: 5d553bbeff3ae532bc40016194ba4981d2f28bc0 [file] [log] [blame]
/*
* 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;
};
};