1 /*
2  * Copyright (c) 2013-2015, ARM Limited and Contributors. All rights reserved.
3  *
4  * SPDX-License-Identifier: BSD-3-Clause
5  */
6 
7 #ifndef _PM_API_SYS_H_
8 #define _PM_API_SYS_H_
9 
10 #include <stdint.h>
11 #include "pm_defs.h"
12 
13 /**********************************************************
14  * System-level API function declarations
15  **********************************************************/
16 enum pm_ret_status pm_req_suspend(enum pm_node_id nid,
17 				  enum pm_request_ack ack,
18 				  unsigned int latency,
19 				  unsigned int state);
20 
21 enum pm_ret_status pm_self_suspend(enum pm_node_id nid,
22 				   unsigned int latency,
23 				   unsigned int state,
24 				   uintptr_t address);
25 
26 enum pm_ret_status pm_force_powerdown(enum pm_node_id nid,
27 				      enum pm_request_ack ack);
28 
29 enum pm_ret_status pm_abort_suspend(enum pm_abort_reason reason);
30 
31 enum pm_ret_status pm_req_wakeup(enum pm_node_id nid,
32 				 unsigned int set_address,
33 				 uintptr_t address,
34 				 enum pm_request_ack ack);
35 
36 enum pm_ret_status pm_set_wakeup_source(enum pm_node_id target,
37 					enum pm_node_id wkup_node,
38 					unsigned int enable);
39 
40 enum pm_ret_status pm_system_shutdown(unsigned int type, unsigned int subtype);
41 
42 enum pm_ret_status pm_init_suspend_cb(enum pm_suspend_reason reason,
43 				      unsigned int latency,
44 				      unsigned int state,
45 				      unsigned int timeout);
46 
47 /* API functions for managing PM Slaves */
48 enum pm_ret_status pm_req_node(enum pm_node_id nid,
49 			       unsigned int capabilities,
50 			       unsigned int qos,
51 			       enum pm_request_ack ack);
52 enum pm_ret_status pm_release_node(enum pm_node_id nid);
53 
54 enum pm_ret_status pm_set_requirement(enum pm_node_id nid,
55 				      unsigned int capabilities,
56 				      unsigned int qos,
57 				      enum pm_request_ack ack);
58 enum pm_ret_status pm_set_max_latency(enum pm_node_id nid,
59 				      unsigned int latency);
60 
61 /* Miscellaneous API functions */
62 enum pm_ret_status pm_get_api_version(unsigned int *version);
63 enum pm_ret_status pm_set_configuration(unsigned int phys_addr);
64 enum pm_ret_status pm_get_node_status(enum pm_node_id node);
65 enum pm_ret_status pm_register_notifier(enum pm_node_id nid,
66 					unsigned int event,
67 					unsigned int wake,
68 					unsigned int enable);
69 enum pm_ret_status pm_get_op_characteristic(enum pm_node_id nid,
70 					    enum pm_opchar_type type,
71 					    uint32_t *result);
72 enum pm_ret_status pm_acknowledge_cb(enum pm_node_id nid,
73 				     enum pm_ret_status status,
74 				     unsigned int oppoint);
75 enum pm_ret_status pm_notify_cb(enum pm_node_id nid,
76 				unsigned int event,
77 				unsigned int oppoint);
78 
79 /* Direct-Control API functions */
80 enum pm_ret_status pm_reset_assert(unsigned int reset_id,
81 				   unsigned int assert);
82 enum pm_ret_status pm_reset_get_status(unsigned int reset_id,
83 				       unsigned int *reset_status);
84 enum pm_ret_status pm_mmio_write(uintptr_t address,
85 				 unsigned int mask,
86 				 unsigned int value);
87 enum pm_ret_status pm_mmio_read(uintptr_t address, unsigned int *value);
88 enum pm_ret_status pm_fpga_load(uint32_t address_low,
89 				uint32_t address_high,
90 				uint32_t size,
91 				uint32_t flags);
92 enum pm_ret_status pm_fpga_get_status(unsigned int *value);
93 
94 enum pm_ret_status pm_get_chipid(uint32_t *value);
95 void pm_get_callbackdata(uint32_t *data, size_t count);
96 
97 #endif /* _PM_API_SYS_H_ */
98