blob: 20e855cbfdb6da6fc601bae7a680cf48e5ae9da2 [file]
/*
* Copyright (C) 2023 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
/* This file needs to be kept in-sync with its counterpart on Trusty side */
#pragma once
#include <stdint.h>
#include <trusty/line-coverage/uuid.h>
#define LINE_COVERAGE_CLIENT_PORT "com.android.trusty.linecoverage.client"
/**
* enum line_coverage_client_cmd - command identifiers for coverage client interface
* @LINE_COVERAGE_CLIENT_CMD_RESP_BIT: response bit set as part of response
* @LINE_COVERAGE_CLIENT_CMD_SHIFT: number of bits used by response bit
* @LINE_COVERAGE_CLIENT_CMD_OPEN: command to open coverage record
* @LINE_COVERAGE_CLIENT_CMD_SHARE_RECORD: command to register a shared memory region
* where coverage record will be written to
*/
enum line_coverage_client_cmd {
LINE_COVERAGE_CLIENT_CMD_RESP_BIT = 1U,
LINE_COVERAGE_CLIENT_CMD_SHIFT = 1U,
LINE_COVERAGE_CLIENT_CMD_OPEN = (1U << LINE_COVERAGE_CLIENT_CMD_SHIFT),
LINE_COVERAGE_CLIENT_CMD_SHARE_RECORD = (2U << LINE_COVERAGE_CLIENT_CMD_SHIFT),
LINE_COVERAGE_CLIENT_CMD_SEND_LIST = (3U << LINE_COVERAGE_CLIENT_CMD_SHIFT),
};
/**
* struct line_coverage_client_hdr - header for coverage client messages
* @cmd: command identifier
*
* Note that no messages return a status code. Any error on the server side
* results in the connection being closed. So, operations can be assumed to be
* successful if they return a response.
*/
struct line_coverage_client_hdr {
uint32_t cmd;
};
/**
* struct line_coverage_client_open_req - arguments for request to open coverage
* record
* @uuid: UUID of target TA
*
* There is one coverage record per TA. @uuid is used to identify both the TA
* and corresponding coverage record.
*/
struct line_coverage_client_open_req {
struct uuid uuid;
};
/**
* struct line_coverage_client_open_resp - arguments for response to open coverage
* record
* @record_len: length of coverage record that will be emitted by target TA
*
* Shared memory allocated for this coverage record must larger than
* @record_len.
*/
struct line_coverage_client_open_resp {
uint32_t record_len;
};
/**
* struct line_coverage_client_send_list_resp - arguments for response to send list
* record
* @uuid: UUID of TA that connected to aggregator
*/
struct line_coverage_client_send_list_resp {
struct uuid uuid;
};
/**
* struct line_coverage_client_send_list_resp - arguments for response to send list
* record
* @index: index of the list being requested
*/
struct line_coverage_client_send_list_req {
uint32_t index;
};
/**
* struct line_coverage_client_share_record_req - arguments for request to share
* memory for coverage record
* @shm_len: length of memory region being shared
*
* A handle to a memory region must be sent along with this message. This memory
* is used to store coverage record.
*
* Upon success, this memory region can be assumed to be shared between the
* client and target TA.
*/
struct line_coverage_client_share_record_req {
uint32_t shm_len;
};
/**
* struct line_coverage_client_req - structure for a coverage client request
* @hdr: message header
* @open_args: arguments for %COVERAGE_CLIENT_CMD_OPEN request
* @share_record_args: arguments for %COVERAGE_CLIENT_CMD_SHARE_RECORD request
* @index: arguments for %COVERAGE_CLIENT_CMD_SHARE_RECORD request
*/
struct line_coverage_client_req {
struct line_coverage_client_hdr hdr;
union {
struct line_coverage_client_open_req open_args;
struct line_coverage_client_share_record_req share_record_args;
struct line_coverage_client_send_list_req send_list_args;
};
};
/**
* struct line_coverage_client_resp - structure for a coverage client response
* @hdr: message header
* @open_args: arguments for %COVERAGE_CLIENT_CMD_OPEN response
* @send_list_args: arguments for %COVERAGE_CLIENT_CMD_SHARE_RECORD response
*/
struct line_coverage_client_resp {
struct line_coverage_client_hdr hdr;
union {
struct line_coverage_client_open_resp open_args;
struct line_coverage_client_send_list_resp send_list_args;
};
};