1*54fd6939SJiyong Park /* SPDX-License-Identifier: BSD-3-Clause */ 2*54fd6939SJiyong Park /* 3*54fd6939SJiyong Park * Copyright (c) 2015-2019, Arm Limited and Contributors. All rights reserved. 4*54fd6939SJiyong Park * Copyright (c) 2019-2020, Linaro Limited 5*54fd6939SJiyong Park */ 6*54fd6939SJiyong Park 7*54fd6939SJiyong Park #ifndef SCMI_MSG_BASE_H 8*54fd6939SJiyong Park #define SCMI_MSG_BASE_H 9*54fd6939SJiyong Park 10*54fd6939SJiyong Park #include <stdint.h> 11*54fd6939SJiyong Park 12*54fd6939SJiyong Park #define SCMI_PROTOCOL_VERSION_BASE 0x20000U 13*54fd6939SJiyong Park 14*54fd6939SJiyong Park #define SCMI_DEFAULT_STRING_LENGTH 16U 15*54fd6939SJiyong Park 16*54fd6939SJiyong Park enum scmi_base_message_id { 17*54fd6939SJiyong Park SCMI_BASE_DISCOVER_VENDOR = 0x003, 18*54fd6939SJiyong Park SCMI_BASE_DISCOVER_SUB_VENDOR = 0x004, 19*54fd6939SJiyong Park SCMI_BASE_DISCOVER_IMPLEMENTATION_VERSION = 0x005, 20*54fd6939SJiyong Park SCMI_BASE_DISCOVER_LIST_PROTOCOLS = 0x006, 21*54fd6939SJiyong Park SCMI_BASE_DISCOVER_AGENT = 0x007, 22*54fd6939SJiyong Park SCMI_BASE_NOTIFY_ERRORS = 0x008, 23*54fd6939SJiyong Park }; 24*54fd6939SJiyong Park 25*54fd6939SJiyong Park /* 26*54fd6939SJiyong Park * PROTOCOL_ATTRIBUTES 27*54fd6939SJiyong Park */ 28*54fd6939SJiyong Park 29*54fd6939SJiyong Park #define SCMI_BASE_PROTOCOL_ATTRS_NUM_PROTOCOLS_POS 0 30*54fd6939SJiyong Park #define SCMI_BASE_PROTOCOL_ATTRS_NUM_AGENTS_POS 8 31*54fd6939SJiyong Park 32*54fd6939SJiyong Park #define SCMI_BASE_PROTOCOL_ATTRS_NUM_PROTOCOLS_MASK 0xFFU 33*54fd6939SJiyong Park #define SCMI_BASE_PROTOCOL_ATTRS_NUM_AGENTS_MASK 0xFF00U 34*54fd6939SJiyong Park 35*54fd6939SJiyong Park #define SCMI_BASE_PROTOCOL_ATTRIBUTES(NUM_PROTOCOLS, NUM_AGENTS) \ 36*54fd6939SJiyong Park ((((NUM_PROTOCOLS) << SCMI_BASE_PROTOCOL_ATTRS_NUM_PROTOCOLS_POS) & \ 37*54fd6939SJiyong Park SCMI_BASE_PROTOCOL_ATTRS_NUM_PROTOCOLS_MASK) | \ 38*54fd6939SJiyong Park (((NUM_AGENTS) << SCMI_BASE_PROTOCOL_ATTRS_NUM_AGENTS_POS) & \ 39*54fd6939SJiyong Park SCMI_BASE_PROTOCOL_ATTRS_NUM_AGENTS_MASK)) 40*54fd6939SJiyong Park 41*54fd6939SJiyong Park /* 42*54fd6939SJiyong Park * BASE_DISCOVER_VENDOR 43*54fd6939SJiyong Park */ 44*54fd6939SJiyong Park struct scmi_base_discover_vendor_p2a { 45*54fd6939SJiyong Park int32_t status; 46*54fd6939SJiyong Park char vendor_identifier[SCMI_DEFAULT_STRING_LENGTH]; 47*54fd6939SJiyong Park }; 48*54fd6939SJiyong Park 49*54fd6939SJiyong Park /* 50*54fd6939SJiyong Park * BASE_DISCOVER_SUB_VENDOR 51*54fd6939SJiyong Park */ 52*54fd6939SJiyong Park struct scmi_base_discover_sub_vendor_p2a { 53*54fd6939SJiyong Park int32_t status; 54*54fd6939SJiyong Park char sub_vendor_identifier[SCMI_DEFAULT_STRING_LENGTH]; 55*54fd6939SJiyong Park }; 56*54fd6939SJiyong Park 57*54fd6939SJiyong Park /* 58*54fd6939SJiyong Park * BASE_DISCOVER_IMPLEMENTATION_VERSION 59*54fd6939SJiyong Park * No special structure right now, see protocol_version. 60*54fd6939SJiyong Park */ 61*54fd6939SJiyong Park 62*54fd6939SJiyong Park /* 63*54fd6939SJiyong Park * BASE_DISCOVER_LIST_PROTOCOLS 64*54fd6939SJiyong Park */ 65*54fd6939SJiyong Park struct scmi_base_discover_list_protocols_a2p { 66*54fd6939SJiyong Park uint32_t skip; 67*54fd6939SJiyong Park }; 68*54fd6939SJiyong Park 69*54fd6939SJiyong Park struct scmi_base_discover_list_protocols_p2a { 70*54fd6939SJiyong Park int32_t status; 71*54fd6939SJiyong Park uint32_t num_protocols; 72*54fd6939SJiyong Park uint32_t protocols[]; 73*54fd6939SJiyong Park }; 74*54fd6939SJiyong Park 75*54fd6939SJiyong Park #endif /* SCMI_MSG_BASE_H */ 76