Lines Matching +full:clock +full:- +full:frequency

2  * Device's clock input and output
4 * Copyright GreenSocs 2016-2020
11 * See the COPYING file in the top-level directory.
15 #include "qemu/error-report.h"
16 #include "hw/qdev-clock.h"
17 #include "hw/qdev-core.h"
22 * Add a new clock in a device
25 bool alias, bool output, Clock *clk) in qdev_init_clocklist()
30 * Clock must be added before realize() so that we can compute the in qdev_init_clocklist()
31 * clock's canonical path during device_realize(). in qdev_init_clocklist()
33 assert(!dev->realized); in qdev_init_clocklist()
40 ncl->name = g_strdup(name); in qdev_init_clocklist()
41 ncl->alias = alias; in qdev_init_clocklist()
42 ncl->output = output; in qdev_init_clocklist()
43 ncl->clock = clk; in qdev_init_clocklist()
45 QLIST_INSERT_HEAD(&dev->clocks, ncl, node); in qdev_init_clocklist()
54 QLIST_FOREACH_SAFE(ncl, &dev->clocks, node, ncl_next) { in qdev_finalize_clocklist()
56 if (!ncl->alias) { in qdev_finalize_clocklist()
58 * We kept a reference on the input clock to ensure it lives up to in qdev_finalize_clocklist()
59 * this point; it is used by the monitor to show the frequency. in qdev_finalize_clocklist()
61 object_unref(OBJECT(ncl->clock)); in qdev_finalize_clocklist()
63 g_free(ncl->name); in qdev_finalize_clocklist()
68 Clock *qdev_init_clock_out(DeviceState *dev, const char *name) in qdev_init_clock_out()
70 Clock *clk = CLOCK(object_new(TYPE_CLOCK)); in qdev_init_clock_out()
77 Clock *qdev_init_clock_in(DeviceState *dev, const char *name, in qdev_init_clock_in()
81 Clock *clk = CLOCK(object_new(TYPE_CLOCK)); in qdev_init_clock_in()
95 for (elem = &clocks[0]; elem->name != NULL; elem++) { in qdev_init_clocks()
96 Clock **clkp; in qdev_init_clocks()
98 assert(elem->offset > sizeof(DeviceState)); in qdev_init_clocks()
99 clkp = ((void *)dev) + elem->offset; in qdev_init_clocks()
100 if (elem->is_output) { in qdev_init_clocks()
101 *clkp = qdev_init_clock_out(dev, elem->name); in qdev_init_clocks()
103 *clkp = qdev_init_clock_in(dev, elem->name, elem->callback, dev, in qdev_init_clocks()
104 elem->callback_events); in qdev_init_clocks()
113 QLIST_FOREACH(ncl, &dev->clocks, node) { in qdev_get_clocklist()
114 if (strcmp(name, ncl->name) == 0) { in qdev_get_clocklist()
122 Clock *qdev_get_clock_in(DeviceState *dev, const char *name) in qdev_get_clock_in()
130 error_report("Can not find clock-in '%s' for device type '%s'", in qdev_get_clock_in()
134 assert(!ncl->output); in qdev_get_clock_in()
136 return ncl->clock; in qdev_get_clock_in()
139 Clock *qdev_get_clock_out(DeviceState *dev, const char *name) in qdev_get_clock_out()
147 error_report("Can not find clock-out '%s' for device type '%s'", in qdev_get_clock_out()
151 assert(ncl->output); in qdev_get_clock_out()
153 return ncl->clock; in qdev_get_clock_out()
156 Clock *qdev_alias_clock(DeviceState *dev, const char *name, in qdev_alias_clock()
160 Clock *clk = ncl->clock; in qdev_alias_clock()
162 ncl = qdev_init_clocklist(alias_dev, alias_name, true, ncl->output, clk); in qdev_alias_clock()
166 (Object **) &ncl->clock, in qdev_alias_clock()
173 * aliased clock stays alive during this device life-time. in qdev_alias_clock()
180 void qdev_connect_clock_in(DeviceState *dev, const char *name, Clock *source) in qdev_connect_clock_in()
182 assert(!dev->realized); in qdev_connect_clock_in()