1 /* $OpenBSD: ofw_clock.h,v 1.7 2022/02/04 22:24:09 kettenis Exp $ */ 2 /* 3 * Copyright (c) 2016 Mark Kettenis 4 * 5 * Permission to use, copy, modify, and distribute this software for any 6 * purpose with or without fee is hereby granted, provided that the above 7 * copyright notice and this permission notice appear in all copies. 8 * 9 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES 10 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 11 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR 12 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 13 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 14 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF 15 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 16 */ 17 18 #ifndef _DEV_OFW_CLOCK_H_ 19 #define _DEV_OFW_CLOCK_H_ 20 21 struct clock_device { 22 int cd_node; 23 void *cd_cookie; 24 uint32_t (*cd_get_frequency)(void *, uint32_t *); 25 int (*cd_set_frequency)(void *, uint32_t *, uint32_t); 26 int (*cd_set_parent)(void *, uint32_t *, uint32_t *); 27 void (*cd_enable)(void *, uint32_t *, int); 28 29 LIST_ENTRY(clock_device) cd_list; 30 uint32_t cd_phandle; 31 uint32_t cd_cells; 32 }; 33 34 void clock_register(struct clock_device *); 35 36 uint32_t clock_get_frequency(int, const char *); 37 uint32_t clock_get_frequency_idx(int, int); 38 int clock_set_frequency(int, const char *, uint32_t); 39 int clock_set_frequency_idx(int, int idx, uint32_t); 40 void clock_set_assigned(int); 41 void clock_enable(int, const char *); 42 void clock_enable_idx(int, int); 43 void clock_disable(int, const char *); 44 void clock_disable_idx(int, int); 45 46 static inline void 47 clock_enable_all(int node) 48 { 49 clock_enable_idx(node, -1); 50 } 51 52 static inline void 53 clock_disable_all(int node) 54 { 55 clock_disable_idx(node, -1); 56 } 57 58 struct reset_device { 59 int rd_node; 60 void *rd_cookie; 61 void (*rd_reset)(void *, uint32_t *, int); 62 63 LIST_ENTRY(reset_device) rd_list; 64 uint32_t rd_phandle; 65 uint32_t rd_cells; 66 }; 67 68 void reset_register(struct reset_device *); 69 70 void reset_assert(int, const char *); 71 void reset_assert_idx(int, int); 72 void reset_deassert(int, const char *); 73 void reset_deassert_idx(int, int); 74 75 static inline void 76 reset_assert_all(int node) 77 { 78 reset_assert_idx(node, -1); 79 } 80 81 static inline void 82 reset_deassert_all(int node) 83 { 84 reset_deassert_idx(node, -1); 85 } 86 87 #endif /* _DEV_OFW_CLOCK_H_ */ 88