blob: b44a1839b911c51e8158156b0f79ee43e74bf3e3 [file] [log] [blame]
/*
* Copyright (C) 2020 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.
*/
#pragma once
#include <stdint.h>
#define SYSTEM_STATE_PORT "com.android.trusty.system-state"
#define SYSTEM_STATE_MAX_MESSAGE_SIZE 32
/**
* enum system_state_cmd - command identifiers for system_state functions
* @SYSTEM_STATE_CMD_RESP_BIT: Message is a response.
* @SYSTEM_STATE_CMD_REQ_SHIFT: Number of bits used by @SYSTEM_STATE_RESP_BIT.
*
*/
enum system_state_cmd {
SYSTEM_STATE_CMD_RESP_BIT = 1,
SYSTEM_STATE_CMD_REQ_SHIFT = 1,
/** @SYSTEM_STATE_CMD_GET_FLAG: Command to read a system state flag. */
SYSTEM_STATE_CMD_GET_FLAG = (1 << SYSTEM_STATE_CMD_REQ_SHIFT),
};
/**
* enum system_state_flag - flag identifiers for %SYSTEM_STATE_GET_FLAG
*/
enum system_state_flag {
/**
* @SYSTEM_STATE_FLAG_PROVISIONING_ALLOWED:
* Flag used to restrict when provisoning is allowed.
*/
SYSTEM_STATE_FLAG_PROVISIONING_ALLOWED = 1,
/**
* @SYSTEM_STATE_FLAG_APP_LOADING_UNLOCKED:
* Flag used to indicate that loading apps signed with insecure dev keys
* is allowed.
*/
SYSTEM_STATE_FLAG_APP_LOADING_UNLOCKED = 2,
/**
* @SYSTEM_STATE_FLAG_APP_LOADING_VERSION_CHECK:
* Flag used to permit skipping of app version checks or rollback
* version updates. Contains a value of type enum
* system_state_flag_app_loading_version_check.
*/
SYSTEM_STATE_FLAG_APP_LOADING_VERSION_CHECK = 3,
};
/**
* enum system_state_flag_provisioning_allowed - Provisioning allowed states
* @SYSTEM_STATE_FLAG_PROVISIONING_ALLOWED_VALUE_NOT_ALLOWED:
* Provisoning is not currently allowed.
* @SYSTEM_STATE_FLAG_PROVISIONING_ALLOWED_VALUE_ALLOWED:
* Provisoning is currently allowed.
* @SYSTEM_STATE_FLAG_PROVISIONING_ALLOWED_VALUE_ALLOWED_AT_BOOT:
* Provisoning is currently allowed if the client is in a boot stage.
* For backward compatibility. Not recommened for new systems.
*/
enum system_state_flag_provisioning_allowed {
SYSTEM_STATE_FLAG_PROVISIONING_ALLOWED_VALUE_NOT_ALLOWED = 0,
SYSTEM_STATE_FLAG_PROVISIONING_ALLOWED_VALUE_ALLOWED = 1,
SYSTEM_STATE_FLAG_PROVISIONING_ALLOWED_VALUE_ALLOWED_AT_BOOT = 2,
};
/**
* enum system_state_flag_app_loading_version_check - App loading version check
* states
* @SYSTEM_STATE_FLAG_APP_LOADING_VERSION_CHECK_VALUE_REQUIRED
* Rollback version check and updating is required
* @SYSTEM_STATE_FLAG_APP_LOADING_VERSION_CHECK_VALUE_SKIP_UPDATE
* Rollback version check is required, but the rollback version will not be
* updated.
* @SYSTEM_STATE_FLAG_APP_LOADING_VERSION_CHECK_VALUE_SKIP_CHECK
* Rollback version check should be skipped (rollback version will not be
* updated)
*/
enum system_state_flag_app_loading_version_check {
SYSTEM_STATE_FLAG_APP_LOADING_VERSION_CHECK_VALUE_REQUIRED = 0,
SYSTEM_STATE_FLAG_APP_LOADING_VERSION_CHECK_VALUE_SKIP_UPDATE = 1,
SYSTEM_STATE_FLAG_APP_LOADING_VERSION_CHECK_VALUE_SKIP_CHECK = 2,
};
/**
* struct system_state_req - common request structure for system_state
* @cmd: Command identifier.
* @reserved: Reserved, must be 0.
* @payload: Payload buffer, meaning determined by @cmd.
*/
struct system_state_req {
uint32_t cmd;
uint32_t reserved;
uint8_t payload[0];
};
/**
* struct system_state_resp - common response structure for system_state
* @cmd: Command identifier.
* @result: If non-0, an lk error code.
* @payload: Payload buffer, meaning determined by @cmd.
*/
struct system_state_resp {
uint32_t cmd;
int32_t result;
uint8_t payload[0];
};
/**
* struct system_state_get_flag_req - payload for get-flag request
* @flag: One of @enum system_state_flag.
*/
struct system_state_get_flag_req {
uint32_t flag;
};
/**
* struct system_state_get_flag_resp - payload for get-flag response
* @flag: One of @enum system_state_flag.
* @reserved: Reserved, must be 0.
* @value: Current value of flag @flag.
*/
struct system_state_get_flag_resp {
uint32_t flag;
uint32_t reserved;
uint64_t value;
};