/** @file | |
Copyright (c) 2017-2021, Arm Limited. All rights reserved.<BR> | |
SPDX-License-Identifier: BSD-2-Clause-Patent | |
System Control and Management Interface V1.0 | |
http://infocenter.arm.com/help/topic/com.arm.doc.den0056a/ | |
DEN0056A_System_Control_and_Management_Interface.pdf | |
**/ | |
#ifndef SCMI_PRIVATE_H_ | |
#define SCMI_PRIVATE_H_ | |
// SCMI protocol IDs. | |
typedef enum { | |
ScmiProtocolIdBase = 0x10, | |
ScmiProtocolIdPowerDomain = 0x11, | |
ScmiProtocolIdSystemPower = 0x12, | |
ScmiProtocolIdPerformance = 0x13, | |
ScmiProtocolIdClock = 0x14, | |
ScmiProtocolIdSensor = 0x15 | |
} SCMI_PROTOCOL_ID; | |
// SCMI message types. | |
typedef enum { | |
ScmiMessageTypeCommand = 0, | |
ScmiMessageTypeDelayedResponse = 2, // Skipping 1 is deliberate. | |
ScmiMessageTypeNotification = 3 | |
} SCMI_MESSAGE_TYPE; | |
// SCMI response error codes. | |
typedef enum { | |
ScmiSuccess = 0, | |
ScmiNotSupported = -1, | |
ScmiInvalidParameters = -2, | |
ScmiDenied = -3, | |
ScmiNotFound = -4, | |
ScmiOutOfRange = -5, | |
ScmiBusy = -6, | |
ScmiCommsError = -7, | |
ScmiGenericError = -8, | |
ScmiHardwareError = -9, | |
ScmiProtocolError = -10 | |
} SCMI_STATUS; | |
// SCMI message IDs common to all protocols. | |
typedef enum { | |
ScmiMessageIdProtocolVersion = 0x0, | |
ScmiMessageIdProtocolAttributes = 0x1, | |
ScmiMessageIdProtocolMessageAttributes = 0x2 | |
} SCMI_MESSAGE_ID; | |
// Not defined in SCMI specification but will help to identify a message. | |
typedef struct { | |
SCMI_PROTOCOL_ID ProtocolId; | |
UINT32 MessageId; | |
} SCMI_COMMAND; | |
#pragma pack(1) | |
// Response to a SCMI command. | |
typedef struct { | |
INT32 Status; | |
UINT32 ReturnValues[]; | |
} SCMI_MESSAGE_RESPONSE; | |
// Message header. MsgId[7:0], MsgType[9:8], ProtocolId[17:10] | |
#define MESSAGE_TYPE_SHIFT 8 | |
#define PROTOCOL_ID_SHIFT 10 | |
#define SCMI_MESSAGE_HEADER(MsgId, MsgType, ProtocolId) ( \ | |
MsgType << MESSAGE_TYPE_SHIFT | \ | |
ProtocolId << PROTOCOL_ID_SHIFT | \ | |
MsgId \ | |
) | |
// SCMI message header. | |
typedef struct { | |
UINT32 MessageHeader; | |
} SCMI_MESSAGE_HEADER; | |
#pragma pack() | |
/** Return a pointer to the message payload. | |
@param[out] Payload Holds pointer to the message payload. | |
@retval EFI_SUCCESS Payload holds a valid message payload pointer. | |
@retval EFI_TIMEOUT Time out error if MTL channel is busy. | |
@retval EFI_UNSUPPORTED If MTL channel is unsupported. | |
**/ | |
EFI_STATUS | |
ScmiCommandGetPayload ( | |
OUT UINT32 **Payload | |
); | |
/** Execute a SCMI command and receive a response. | |
This function uses a MTL channel to transfer message to SCP | |
and waits for a response. | |
@param[in] Command Pointer to the SCMI command (Protocol ID | |
and Message ID) | |
@param[in,out] PayloadLength SCMI command message length. | |
@param[out] OPTIONAL ReturnValues Pointer to SCMI response. | |
@retval OUT EFI_SUCCESS Command sent and message received successfully. | |
@retval OUT EFI_UNSUPPORTED Channel not supported. | |
@retval OUT EFI_TIMEOUT Timeout on the channel. | |
@retval OUT EFI_DEVICE_ERROR Channel not ready. | |
@retval OUT EFI_DEVICE_ERROR Message Header corrupted. | |
@retval OUT EFI_DEVICE_ERROR SCMI error. | |
**/ | |
EFI_STATUS | |
ScmiCommandExecute ( | |
IN SCMI_COMMAND *Command, | |
IN OUT UINT32 *PayloadLength, | |
OUT UINT32 **ReturnValues OPTIONAL | |
); | |
/** Return protocol version from SCP for a given protocol ID. | |
@param[in] Protocol ID Protocol ID. | |
@param[out] Version Pointer to version of the protocol. | |
@retval EFI_SUCCESS Version holds a valid version received | |
from the SCP. | |
@retval EFI_DEVICE_ERROR SCMI error. | |
@retval !(EFI_SUCCESS) Other errors. | |
**/ | |
EFI_STATUS | |
ScmiGetProtocolVersion ( | |
IN SCMI_PROTOCOL_ID ProtocolId, | |
OUT UINT32 *Version | |
); | |
/** Return protocol attributes from SCP for a given protocol ID. | |
@param[in] Protocol ID Protocol ID. | |
@param[out] ReturnValues Pointer to attributes of the protocol. | |
@retval EFI_SUCCESS ReturnValues points to protocol attributes. | |
@retval EFI_DEVICE_ERROR SCMI error. | |
@retval !(EFI_SUCCESS) Other errors. | |
**/ | |
EFI_STATUS | |
ScmiGetProtocolAttributes ( | |
IN SCMI_PROTOCOL_ID ProtocolId, | |
OUT UINT32 **ReturnValues | |
); | |
/** Return protocol message attributes from SCP for a given protocol ID. | |
@param[in] Protocol ID Protocol ID. | |
@param[out] Attributes Pointer to attributes of the protocol. | |
@retval EFI_SUCCESS ReturnValues points to protocol message attributes. | |
@retval EFI_DEVICE_ERROR SCMI error. | |
@retval !(EFI_SUCCESS) Other errors. | |
**/ | |
EFI_STATUS | |
ScmiGetProtocolMessageAttributes ( | |
IN SCMI_PROTOCOL_ID ProtocolId, | |
OUT UINT32 **ReturnValues | |
); | |
#endif /* SCMI_PRIVATE_H_ */ |