blob: 379a8219bc8749d60e86f9a0c7127502da91309c [file] [log] [blame]
Dan Handley9df48042015-03-19 18:58:55 +00001/*
Sandrine Bailleux04b66d82015-03-18 14:52:53 +00002 * Copyright (c) 2014-2015, ARM Limited and Contributors. All rights reserved.
Dan Handley9df48042015-03-19 18:58:55 +00003 *
4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions are met:
6 *
7 * Redistributions of source code must retain the above copyright notice, this
8 * list of conditions and the following disclaimer.
9 *
10 * Redistributions in binary form must reproduce the above copyright notice,
11 * this list of conditions and the following disclaimer in the documentation
12 * and/or other materials provided with the distribution.
13 *
14 * Neither the name of ARM nor the names of its contributors may be used
15 * to endorse or promote products derived from this software without specific
16 * prior written permission.
17 *
18 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
19 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
20 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
21 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
22 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
23 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
24 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
25 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
26 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
27 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
28 * POSSIBILITY OF SUCH DAMAGE.
29 */
30
31#ifndef __CSS_SCPI_H__
32#define __CSS_SCPI_H__
33
34#include <stddef.h>
35#include <stdint.h>
36
Sandrine Bailleux04b66d82015-03-18 14:52:53 +000037/*
38 * An SCPI command consists of a header and a payload.
39 * The following structure describes the header. It is 64-bit long.
40 */
41typedef struct {
42 /* Command ID */
43 uint32_t id : 7;
44 /* Set ID. Identifies whether this is a standard or extended command. */
45 uint32_t set : 1;
46 /* Sender ID to match a reply. The value is sender specific. */
47 uint32_t sender : 8;
48 /* Size of the payload in bytes (0 – 511) */
49 uint32_t size : 9;
50 uint32_t reserved : 7;
51 /*
52 * Status indicating the success of a command.
53 * See the enum below.
54 */
55 uint32_t status;
56} scpi_cmd_t;
Dan Handley9df48042015-03-19 18:58:55 +000057
Sandrine Bailleux04b66d82015-03-18 14:52:53 +000058typedef enum {
59 SCPI_SET_NORMAL = 0, /* Normal SCPI commands */
60 SCPI_SET_EXTENDED /* Extended SCPI commands */
61} scpi_set_t;
Dan Handley9df48042015-03-19 18:58:55 +000062
63enum {
64 SCP_OK = 0, /* Success */
65 SCP_E_PARAM, /* Invalid parameter(s) */
66 SCP_E_ALIGN, /* Invalid alignment */
67 SCP_E_SIZE, /* Invalid size */
68 SCP_E_HANDLER, /* Invalid handler or callback */
69 SCP_E_ACCESS, /* Invalid access or permission denied */
70 SCP_E_RANGE, /* Value out of range */
71 SCP_E_TIMEOUT, /* Time out has ocurred */
72 SCP_E_NOMEM, /* Invalid memory area or pointer */
73 SCP_E_PWRSTATE, /* Invalid power state */
74 SCP_E_SUPPORT, /* Feature not supported or disabled */
Sandrine Bailleux04b66d82015-03-18 14:52:53 +000075 SCPI_E_DEVICE, /* Device error */
76 SCPI_E_BUSY, /* Device is busy */
Dan Handley9df48042015-03-19 18:58:55 +000077};
78
79typedef uint32_t scpi_status_t;
80
81typedef enum {
82 SCPI_CMD_SCP_READY = 0x01,
Sandrine Bailleux04b66d82015-03-18 14:52:53 +000083 SCPI_CMD_SET_CSS_POWER_STATE = 0x03,
84 SCPI_CMD_SYS_POWER_STATE = 0x05
Dan Handley9df48042015-03-19 18:58:55 +000085} scpi_command_t;
86
87typedef enum {
88 scpi_power_on = 0,
89 scpi_power_retention = 1,
90 scpi_power_off = 3,
91} scpi_power_state_t;
92
93typedef enum {
94 scpi_system_shutdown = 0,
95 scpi_system_reboot = 1,
96 scpi_system_reset = 2
97} scpi_system_state_t;
98
99extern int scpi_wait_ready(void);
100extern void scpi_set_css_power_state(unsigned mpidr,
101 scpi_power_state_t cpu_state,
102 scpi_power_state_t cluster_state,
103 scpi_power_state_t css_state);
104uint32_t scpi_sys_power_state(scpi_system_state_t system_state);
105
106
107#endif /* __CSS_SCPI_H__ */