mirror of
				https://github.com/acidanthera/audk.git
				synced 2025-10-28 17:53:53 +01:00 
			
		
		
		
	https://bugzilla.tianocore.org/show_bug.cgi?id=1373 Replace BSD 2-Clause License with BSD+Patent License. This change is based on the following emails: https://lists.01.org/pipermail/edk2-devel/2019-February/036260.html https://lists.01.org/pipermail/edk2-devel/2018-October/030385.html RFCs with detailed process for the license change: V3: https://lists.01.org/pipermail/edk2-devel/2019-March/038116.html V2: https://lists.01.org/pipermail/edk2-devel/2019-March/037669.html V1: https://lists.01.org/pipermail/edk2-devel/2019-March/037500.html Contributed-under: TianoCore Contribution Agreement 1.1 Signed-off-by: Michael D Kinney <michael.d.kinney@intel.com> Reviewed-by: Leif Lindholm <leif.lindholm@linaro.org>
		
			
				
	
	
		
			169 lines
		
	
	
		
			5.1 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			169 lines
		
	
	
		
			5.1 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /** @file
 | |
| 
 | |
|   Copyright (c) 2017-2018, Arm Limited. All rights reserved.
 | |
| 
 | |
|   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 {
 | |
|   SCMI_PROTOCOL_ID_BASE         = 0x10,
 | |
|   SCMI_PROTOCOL_ID_POWER_DOMAIN = 0x11,
 | |
|   SCMI_PROTOCOL_ID_SYSTEM_POWER = 0x12,
 | |
|   SCMI_PROTOCOL_ID_PERFORMANCE  = 0x13,
 | |
|   SCMI_PROTOCOL_ID_CLOCK        = 0x14,
 | |
|   SCMI_PROTOCOL_ID_SENSOR       = 0x15
 | |
| } SCMI_PROTOCOL_ID;
 | |
| 
 | |
| // SCMI message types.
 | |
| typedef enum {
 | |
|   SCMI_MESSAGE_TYPE_COMMAND          = 0,
 | |
|   SCMI_MESSAGE_TYPE_DELAYED_RESPONSE = 2, // Skipping 1 is deliberate.
 | |
|   SCMI_MESSAGE_TYPE_NOTIFICATION     = 3
 | |
| } SCMI_MESSAGE_TYPE;
 | |
| 
 | |
| // SCMI response error codes.
 | |
| typedef enum {
 | |
|   SCMI_SUCCESS            =  0,
 | |
|   SCMI_NOT_SUPPORTED      = -1,
 | |
|   SCMI_INVALID_PARAMETERS = -2,
 | |
|   SCMI_DENIED             = -3,
 | |
|   SCMI_NOT_FOUND          = -4,
 | |
|   SCMI_OUT_OF_RANGE       = -5,
 | |
|   SCMI_BUSY               = -6,
 | |
|   SCMI_COMMS_ERROR        = -7,
 | |
|   SCMI_GENERIC_ERROR      = -8,
 | |
|   SCMI_HARDWARE_ERROR     = -9,
 | |
|   SCMI_PROTOCOL_ERROR     = -10
 | |
| } SCMI_STATUS;
 | |
| 
 | |
| // SCMI message IDs common to all protocols.
 | |
| typedef enum {
 | |
|   SCMI_MESSAGE_ID_PROTOCOL_VERSION            = 0x0,
 | |
|   SCMI_MESSAGE_ID_PROTOCOL_ATTRIBUTES         = 0x1,
 | |
|   SCMI_MESSAGE_ID_PROTOCOL_MESSAGE_ATTRIBUTES = 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_ */
 |