1*fcd41e86SJacky Bai /* 2*fcd41e86SJacky Bai * Copyright (c) 2015-2024, Arm Limited and Contributors. All rights reserved. 3*fcd41e86SJacky Bai * 4*fcd41e86SJacky Bai * SPDX-License-Identifier: BSD-3-Clause 5*fcd41e86SJacky Bai * 6*fcd41e86SJacky Bai * Description: 7*fcd41e86SJacky Bai * System Control and Management Interface (SCMI) support. 8*fcd41e86SJacky Bai */ 9*fcd41e86SJacky Bai 10*fcd41e86SJacky Bai #ifndef INTERNAL_SCMI_SENSOR_H 11*fcd41e86SJacky Bai #define INTERNAL_SCMI_SENSOR_H 12*fcd41e86SJacky Bai 13*fcd41e86SJacky Bai #include <stdint.h> 14*fcd41e86SJacky Bai 15*fcd41e86SJacky Bai #define SCMI_PROTOCOL_VERSION_SENSOR UINT32_C(0x10000) 16*fcd41e86SJacky Bai 17*fcd41e86SJacky Bai /* 18*fcd41e86SJacky Bai * PROTOCOL_ATTRIBUTES 19*fcd41e86SJacky Bai */ 20*fcd41e86SJacky Bai struct scmi_sensor_protocol_attributes_p2a { 21*fcd41e86SJacky Bai int32_t status; 22*fcd41e86SJacky Bai uint32_t attributes; 23*fcd41e86SJacky Bai uint32_t sensor_reg_address_low; 24*fcd41e86SJacky Bai uint32_t sensor_reg_address_high; 25*fcd41e86SJacky Bai uint32_t sensor_reg_len; 26*fcd41e86SJacky Bai }; 27*fcd41e86SJacky Bai 28*fcd41e86SJacky Bai /* 29*fcd41e86SJacky Bai * SENSOR_READING_GET 30*fcd41e86SJacky Bai */ 31*fcd41e86SJacky Bai #define SCMI_SENSOR_PROTOCOL_READING_GET_ASYNC_FLAG_MASK (1 << 0) 32*fcd41e86SJacky Bai 33*fcd41e86SJacky Bai struct scmi_sensor_protocol_reading_get_a2p { 34*fcd41e86SJacky Bai uint32_t sensor_id; 35*fcd41e86SJacky Bai uint32_t flags; 36*fcd41e86SJacky Bai }; 37*fcd41e86SJacky Bai 38*fcd41e86SJacky Bai struct scmi_sensor_protocol_reading_get_p2a { 39*fcd41e86SJacky Bai int32_t status; 40*fcd41e86SJacky Bai uint32_t sensor_value_low; 41*fcd41e86SJacky Bai uint32_t sensor_value_high; 42*fcd41e86SJacky Bai }; 43*fcd41e86SJacky Bai 44*fcd41e86SJacky Bai /* 45*fcd41e86SJacky Bai * SENSOR_DESCRIPTION_GET 46*fcd41e86SJacky Bai */ 47*fcd41e86SJacky Bai #define SCMI_SENSOR_DESCS_MAX(MAILBOX_SIZE) \ 48*fcd41e86SJacky Bai ((sizeof(struct scmi_sensor_protocol_description_get_p2a) < MAILBOX_SIZE) \ 49*fcd41e86SJacky Bai ? ((MAILBOX_SIZE - \ 50*fcd41e86SJacky Bai sizeof(struct scmi_sensor_protocol_description_get_p2a)) \ 51*fcd41e86SJacky Bai / sizeof(struct scmi_sensor_desc)) \ 52*fcd41e86SJacky Bai : 0) 53*fcd41e86SJacky Bai 54*fcd41e86SJacky Bai #define SCMI_SENSOR_DESC_ATTRS_HIGH_SENSOR_TYPE_POS 0 55*fcd41e86SJacky Bai #define SCMI_SENSOR_DESC_ATTRS_HIGH_SENSOR_UNIT_MULTIPLIER_POS 11 56*fcd41e86SJacky Bai #define SCMI_SENSOR_DESC_ATTRS_HIGH_SENSOR_UPDATE_MULTIPLIER_POS 22 57*fcd41e86SJacky Bai #define SCMI_SENSOR_DESC_ATTRS_HIGH_SENSOR_UPDATE_INTERVAL_POS 27 58*fcd41e86SJacky Bai 59*fcd41e86SJacky Bai #define SCMI_SENSOR_DESC_ATTRS_HIGH_SENSOR_TYPE_MASK \ 60*fcd41e86SJacky Bai (UINT32_C(0xFF) << SCMI_SENSOR_DESC_ATTRS_HIGH_SENSOR_TYPE_POS) 61*fcd41e86SJacky Bai #define SCMI_SENSOR_DESC_ATTRS_HIGH_SENSOR_UNIT_MULTIPLIER_MASK \ 62*fcd41e86SJacky Bai (UINT32_C(0x1F) << SCMI_SENSOR_DESC_ATTRS_HIGH_SENSOR_UNIT_MULTIPLIER_POS) 63*fcd41e86SJacky Bai #define SCMI_SENSOR_DESC_ATTRS_HIGH_SENSOR_UPDATE_MULTIPLIER_MASK \ 64*fcd41e86SJacky Bai (UINT32_C(0x1F) << \ 65*fcd41e86SJacky Bai SCMI_SENSOR_DESC_ATTRS_HIGH_SENSOR_UPDATE_MULTIPLIER_POS) 66*fcd41e86SJacky Bai #define SCMI_SENSOR_DESC_ATTRS_HIGH_SENSOR_UPDATE_INTERVAL_MASK \ 67*fcd41e86SJacky Bai (UINT32_C(0x1F) << SCMI_SENSOR_DESC_ATTRS_HIGH_SENSOR_UPDATE_INTERVAL_POS) 68*fcd41e86SJacky Bai 69*fcd41e86SJacky Bai #define SCMI_SENSOR_DESC_ATTRS_HIGH_SENSOR_UNIT_MULTIPLIER_MAX \ 70*fcd41e86SJacky Bai (int32_t)(SCMI_SENSOR_DESC_ATTRS_HIGH_SENSOR_UNIT_MULTIPLIER_MASK >> 1) 71*fcd41e86SJacky Bai #define SCMI_SENSOR_DESC_ATTRS_HIGH_SENSOR_UNIT_MULTIPLIER_MIN \ 72*fcd41e86SJacky Bai (-(SCMI_SENSOR_DESC_ATTRS_HIGH_SENSOR_UNIT_MULTIPLIER_MAX + 1)) 73*fcd41e86SJacky Bai 74*fcd41e86SJacky Bai #define SCMI_SENSOR_DESC_ATTRS_HIGH_SENSOR_UPDATE_MULTIPLIER_MAX \ 75*fcd41e86SJacky Bai (int32_t)(SCMI_SENSOR_DESC_ATTRS_HIGH_SENSOR_UPDATE_INTERVAL_MASK >> 1) 76*fcd41e86SJacky Bai #define SCMI_SENSOR_DESC_ATTRS_HIGH_SENSOR_UPDATE_MULTIPLIER_MIN \ 77*fcd41e86SJacky Bai (-(SCMI_SENSOR_DESC_ATTRS_HIGH_SENSOR_UPDATE_MULTIPLIER_MAX + 1)) 78*fcd41e86SJacky Bai 79*fcd41e86SJacky Bai #define SCMI_SENSOR_DESC_ATTRIBUTES_HIGH(SENSOR_TYPE, UNIT_MULTIPLIER, \ 80*fcd41e86SJacky Bai UPDATE_MULTIPLIER, UPDATE_INTERVAL) \ 81*fcd41e86SJacky Bai ( \ 82*fcd41e86SJacky Bai (((SENSOR_TYPE) << \ 83*fcd41e86SJacky Bai SCMI_SENSOR_DESC_ATTRS_HIGH_SENSOR_TYPE_POS) & \ 84*fcd41e86SJacky Bai SCMI_SENSOR_DESC_ATTRS_HIGH_SENSOR_TYPE_MASK) | \ 85*fcd41e86SJacky Bai (((UNIT_MULTIPLIER) << \ 86*fcd41e86SJacky Bai SCMI_SENSOR_DESC_ATTRS_HIGH_SENSOR_UNIT_MULTIPLIER_POS) & \ 87*fcd41e86SJacky Bai SCMI_SENSOR_DESC_ATTRS_HIGH_SENSOR_UNIT_MULTIPLIER_MASK) | \ 88*fcd41e86SJacky Bai (((UPDATE_MULTIPLIER) << \ 89*fcd41e86SJacky Bai SCMI_SENSOR_DESC_ATTRS_HIGH_SENSOR_UPDATE_MULTIPLIER_POS) & \ 90*fcd41e86SJacky Bai SCMI_SENSOR_DESC_ATTRS_HIGH_SENSOR_UPDATE_MULTIPLIER_MASK) | \ 91*fcd41e86SJacky Bai (((UPDATE_INTERVAL) << \ 92*fcd41e86SJacky Bai SCMI_SENSOR_DESC_ATTRS_HIGH_SENSOR_UPDATE_INTERVAL_POS) & \ 93*fcd41e86SJacky Bai SCMI_SENSOR_DESC_ATTRS_HIGH_SENSOR_UPDATE_INTERVAL_MASK) \ 94*fcd41e86SJacky Bai ) 95*fcd41e86SJacky Bai 96*fcd41e86SJacky Bai #define SCMI_SENSOR_NUM_SENSOR_FLAGS_NUM_DESCS_POS 0 97*fcd41e86SJacky Bai #define SCMI_SENSOR_NUM_SENSOR_FLAGS_NUM_REMAINING_DESCS_POS 16 98*fcd41e86SJacky Bai 99*fcd41e86SJacky Bai #define SCMI_SENSOR_NUM_SENSOR_FLAGS_NUM_DESCS_MASK \ 100*fcd41e86SJacky Bai (UINT32_C(0xFFF) << SCMI_SENSOR_NUM_SENSOR_FLAGS_NUM_DESCS_POS) 101*fcd41e86SJacky Bai #define SCMI_SENSOR_NUM_SENSOR_FLAGS_NUM_REMAINING_DESCS_MASK \ 102*fcd41e86SJacky Bai (UINT32_C(0xFFFF) << SCMI_SENSOR_NUM_SENSOR_FLAGS_NUM_REMAINING_DESCS_POS) 103*fcd41e86SJacky Bai 104*fcd41e86SJacky Bai #define SCMI_SENSOR_NUM_SENSOR_FLAGS(NUM_DESCS, NUM_REMAINING_DESCS) \ 105*fcd41e86SJacky Bai ( \ 106*fcd41e86SJacky Bai (((NUM_DESCS) << \ 107*fcd41e86SJacky Bai SCMI_SENSOR_NUM_SENSOR_FLAGS_NUM_DESCS_POS) & \ 108*fcd41e86SJacky Bai SCMI_SENSOR_NUM_SENSOR_FLAGS_NUM_DESCS_MASK) | \ 109*fcd41e86SJacky Bai (((NUM_REMAINING_DESCS) << \ 110*fcd41e86SJacky Bai SCMI_SENSOR_NUM_SENSOR_FLAGS_NUM_REMAINING_DESCS_POS) & \ 111*fcd41e86SJacky Bai SCMI_SENSOR_NUM_SENSOR_FLAGS_NUM_REMAINING_DESCS_MASK) \ 112*fcd41e86SJacky Bai ) 113*fcd41e86SJacky Bai 114*fcd41e86SJacky Bai #define SCMI_SENSOR_NAME_LEN 16 115*fcd41e86SJacky Bai 116*fcd41e86SJacky Bai struct scmi_sensor_desc { 117*fcd41e86SJacky Bai uint32_t sensor_id; 118*fcd41e86SJacky Bai uint32_t sensor_attributes_low; 119*fcd41e86SJacky Bai uint32_t sensor_attributes_high; 120*fcd41e86SJacky Bai char sensor_name[SCMI_SENSOR_NAME_LEN]; 121*fcd41e86SJacky Bai }; 122*fcd41e86SJacky Bai 123*fcd41e86SJacky Bai struct scmi_sensor_protocol_description_get_a2p { 124*fcd41e86SJacky Bai uint32_t desc_index; 125*fcd41e86SJacky Bai }; 126*fcd41e86SJacky Bai 127*fcd41e86SJacky Bai struct scmi_sensor_protocol_description_get_p2a { 128*fcd41e86SJacky Bai int32_t status; 129*fcd41e86SJacky Bai uint32_t num_sensor_flags; 130*fcd41e86SJacky Bai struct scmi_sensor_desc sensor_desc[]; 131*fcd41e86SJacky Bai }; 132*fcd41e86SJacky Bai 133*fcd41e86SJacky Bai /* Event indices */ 134*fcd41e86SJacky Bai enum scmi_sensor_api_idx { 135*fcd41e86SJacky Bai SCMI_SENSOR_EVENT_IDX_REQUEST, 136*fcd41e86SJacky Bai SCMI_SENSOR_EVENT_IDX_COUNT, 137*fcd41e86SJacky Bai }; 138*fcd41e86SJacky Bai 139*fcd41e86SJacky Bai #endif /* INTERNAL_SCMI_SENSOR_H */ 140