/* * Copyright (c) 2015-2024, Arm Limited and Contributors. All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause * * Description: * System Control and Management Interface (SCMI) support. */ #ifndef INTERNAL_SCMI_SENSOR_H #define INTERNAL_SCMI_SENSOR_H #include #define SCMI_PROTOCOL_VERSION_SENSOR UINT32_C(0x10000) /* * PROTOCOL_ATTRIBUTES */ struct scmi_sensor_protocol_attributes_p2a { int32_t status; uint32_t attributes; uint32_t sensor_reg_address_low; uint32_t sensor_reg_address_high; uint32_t sensor_reg_len; }; /* * SENSOR_READING_GET */ #define SCMI_SENSOR_PROTOCOL_READING_GET_ASYNC_FLAG_MASK (1 << 0) struct scmi_sensor_protocol_reading_get_a2p { uint32_t sensor_id; uint32_t flags; }; struct scmi_sensor_protocol_reading_get_p2a { int32_t status; uint32_t sensor_value_low; uint32_t sensor_value_high; }; /* * SENSOR_DESCRIPTION_GET */ #define SCMI_SENSOR_DESCS_MAX(MAILBOX_SIZE) \ ((sizeof(struct scmi_sensor_protocol_description_get_p2a) < MAILBOX_SIZE) \ ? ((MAILBOX_SIZE - \ sizeof(struct scmi_sensor_protocol_description_get_p2a)) \ / sizeof(struct scmi_sensor_desc)) \ : 0) #define SCMI_SENSOR_DESC_ATTRS_HIGH_SENSOR_TYPE_POS 0 #define SCMI_SENSOR_DESC_ATTRS_HIGH_SENSOR_UNIT_MULTIPLIER_POS 11 #define SCMI_SENSOR_DESC_ATTRS_HIGH_SENSOR_UPDATE_MULTIPLIER_POS 22 #define SCMI_SENSOR_DESC_ATTRS_HIGH_SENSOR_UPDATE_INTERVAL_POS 27 #define SCMI_SENSOR_DESC_ATTRS_HIGH_SENSOR_TYPE_MASK \ (UINT32_C(0xFF) << SCMI_SENSOR_DESC_ATTRS_HIGH_SENSOR_TYPE_POS) #define SCMI_SENSOR_DESC_ATTRS_HIGH_SENSOR_UNIT_MULTIPLIER_MASK \ (UINT32_C(0x1F) << SCMI_SENSOR_DESC_ATTRS_HIGH_SENSOR_UNIT_MULTIPLIER_POS) #define SCMI_SENSOR_DESC_ATTRS_HIGH_SENSOR_UPDATE_MULTIPLIER_MASK \ (UINT32_C(0x1F) << \ SCMI_SENSOR_DESC_ATTRS_HIGH_SENSOR_UPDATE_MULTIPLIER_POS) #define SCMI_SENSOR_DESC_ATTRS_HIGH_SENSOR_UPDATE_INTERVAL_MASK \ (UINT32_C(0x1F) << SCMI_SENSOR_DESC_ATTRS_HIGH_SENSOR_UPDATE_INTERVAL_POS) #define SCMI_SENSOR_DESC_ATTRS_HIGH_SENSOR_UNIT_MULTIPLIER_MAX \ (int32_t)(SCMI_SENSOR_DESC_ATTRS_HIGH_SENSOR_UNIT_MULTIPLIER_MASK >> 1) #define SCMI_SENSOR_DESC_ATTRS_HIGH_SENSOR_UNIT_MULTIPLIER_MIN \ (-(SCMI_SENSOR_DESC_ATTRS_HIGH_SENSOR_UNIT_MULTIPLIER_MAX + 1)) #define SCMI_SENSOR_DESC_ATTRS_HIGH_SENSOR_UPDATE_MULTIPLIER_MAX \ (int32_t)(SCMI_SENSOR_DESC_ATTRS_HIGH_SENSOR_UPDATE_INTERVAL_MASK >> 1) #define SCMI_SENSOR_DESC_ATTRS_HIGH_SENSOR_UPDATE_MULTIPLIER_MIN \ (-(SCMI_SENSOR_DESC_ATTRS_HIGH_SENSOR_UPDATE_MULTIPLIER_MAX + 1)) #define SCMI_SENSOR_DESC_ATTRIBUTES_HIGH(SENSOR_TYPE, UNIT_MULTIPLIER, \ UPDATE_MULTIPLIER, UPDATE_INTERVAL) \ ( \ (((SENSOR_TYPE) << \ SCMI_SENSOR_DESC_ATTRS_HIGH_SENSOR_TYPE_POS) & \ SCMI_SENSOR_DESC_ATTRS_HIGH_SENSOR_TYPE_MASK) | \ (((UNIT_MULTIPLIER) << \ SCMI_SENSOR_DESC_ATTRS_HIGH_SENSOR_UNIT_MULTIPLIER_POS) & \ SCMI_SENSOR_DESC_ATTRS_HIGH_SENSOR_UNIT_MULTIPLIER_MASK) | \ (((UPDATE_MULTIPLIER) << \ SCMI_SENSOR_DESC_ATTRS_HIGH_SENSOR_UPDATE_MULTIPLIER_POS) & \ SCMI_SENSOR_DESC_ATTRS_HIGH_SENSOR_UPDATE_MULTIPLIER_MASK) | \ (((UPDATE_INTERVAL) << \ SCMI_SENSOR_DESC_ATTRS_HIGH_SENSOR_UPDATE_INTERVAL_POS) & \ SCMI_SENSOR_DESC_ATTRS_HIGH_SENSOR_UPDATE_INTERVAL_MASK) \ ) #define SCMI_SENSOR_NUM_SENSOR_FLAGS_NUM_DESCS_POS 0 #define SCMI_SENSOR_NUM_SENSOR_FLAGS_NUM_REMAINING_DESCS_POS 16 #define SCMI_SENSOR_NUM_SENSOR_FLAGS_NUM_DESCS_MASK \ (UINT32_C(0xFFF) << SCMI_SENSOR_NUM_SENSOR_FLAGS_NUM_DESCS_POS) #define SCMI_SENSOR_NUM_SENSOR_FLAGS_NUM_REMAINING_DESCS_MASK \ (UINT32_C(0xFFFF) << SCMI_SENSOR_NUM_SENSOR_FLAGS_NUM_REMAINING_DESCS_POS) #define SCMI_SENSOR_NUM_SENSOR_FLAGS(NUM_DESCS, NUM_REMAINING_DESCS) \ ( \ (((NUM_DESCS) << \ SCMI_SENSOR_NUM_SENSOR_FLAGS_NUM_DESCS_POS) & \ SCMI_SENSOR_NUM_SENSOR_FLAGS_NUM_DESCS_MASK) | \ (((NUM_REMAINING_DESCS) << \ SCMI_SENSOR_NUM_SENSOR_FLAGS_NUM_REMAINING_DESCS_POS) & \ SCMI_SENSOR_NUM_SENSOR_FLAGS_NUM_REMAINING_DESCS_MASK) \ ) #define SCMI_SENSOR_NAME_LEN 16 struct scmi_sensor_desc { uint32_t sensor_id; uint32_t sensor_attributes_low; uint32_t sensor_attributes_high; char sensor_name[SCMI_SENSOR_NAME_LEN]; }; struct scmi_sensor_protocol_description_get_a2p { uint32_t desc_index; }; struct scmi_sensor_protocol_description_get_p2a { int32_t status; uint32_t num_sensor_flags; struct scmi_sensor_desc sensor_desc[]; }; /* Event indices */ enum scmi_sensor_api_idx { SCMI_SENSOR_EVENT_IDX_REQUEST, SCMI_SENSOR_EVENT_IDX_COUNT, }; #endif /* INTERNAL_SCMI_SENSOR_H */