-
Notifications
You must be signed in to change notification settings - Fork 16
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Add resource_manager header file definitions for communication between Linux and the Cog Resource Manager. Change-Id: I9a12c5d3b72017ccd822ab4a8296f4199ab61d2a Git-repo: https://github.com/CogSystems/linux-msm.git Git-commit: bc6eebfc1860b624c282d57293fad8600c94aa9e Signed-off-by: Carl van Schaik <carl@cog.systems> Signed-off-by: Alok Pandey <akumarpa@codeaurora.org>
- Loading branch information
Showing
1 changed file
with
219 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,219 @@ | ||
/* | ||
* 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; | ||
}; | ||
}; |