1*f702326eSkettenis /* $OpenBSD: ofw_power.h,v 1.2 2021/11/26 11:44:01 kettenis Exp $ */
21eacba6cSpatrick /*
31eacba6cSpatrick * Copyright (c) 2016 Mark Kettenis
41eacba6cSpatrick * Copyright (c) 2018 Patrick Wildt <patrick@blueri.se>
51eacba6cSpatrick *
61eacba6cSpatrick * Permission to use, copy, modify, and distribute this software for any
71eacba6cSpatrick * purpose with or without fee is hereby granted, provided that the above
81eacba6cSpatrick * copyright notice and this permission notice appear in all copies.
91eacba6cSpatrick *
101eacba6cSpatrick * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
111eacba6cSpatrick * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
121eacba6cSpatrick * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
131eacba6cSpatrick * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
141eacba6cSpatrick * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
151eacba6cSpatrick * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
161eacba6cSpatrick * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
171eacba6cSpatrick */
181eacba6cSpatrick
191eacba6cSpatrick #ifndef _DEV_OFW_POWER_H_
201eacba6cSpatrick #define _DEV_OFW_POWER_H_
211eacba6cSpatrick
221eacba6cSpatrick struct power_domain_device {
231eacba6cSpatrick int pd_node;
241eacba6cSpatrick void *pd_cookie;
251eacba6cSpatrick void (*pd_enable)(void *, uint32_t *, int);
261eacba6cSpatrick
271eacba6cSpatrick LIST_ENTRY(power_domain_device) pd_list;
281eacba6cSpatrick uint32_t pd_phandle;
291eacba6cSpatrick uint32_t pd_cells;
301eacba6cSpatrick };
311eacba6cSpatrick
321eacba6cSpatrick void power_domain_register(struct power_domain_device *);
331eacba6cSpatrick void power_domain_enable(int);
34*f702326eSkettenis void power_domain_enable_idx(int, int);
351eacba6cSpatrick void power_domain_disable(int);
36*f702326eSkettenis void power_domain_disable_idx(int, int);
37*f702326eSkettenis
38*f702326eSkettenis static inline void
power_domain_enable_all(int node)39*f702326eSkettenis power_domain_enable_all(int node)
40*f702326eSkettenis {
41*f702326eSkettenis power_domain_enable_idx(node, -1);
42*f702326eSkettenis }
43*f702326eSkettenis
44*f702326eSkettenis static inline void
power_domain_disable_all(int node)45*f702326eSkettenis power_domain_disable_all(int node)
46*f702326eSkettenis {
47*f702326eSkettenis power_domain_disable_idx(node, -1);
48*f702326eSkettenis }
491eacba6cSpatrick
501eacba6cSpatrick #endif /* _DEV_OFW_POWER_H_ */
51