xref: /qemu/include/system/reset.h (revision 32cad1ffb81dcecf6f4a8af56d6e5892682839b1)
19f1c70a2SPeter Maydell /*
29f1c70a2SPeter Maydell  *  Reset handlers.
39f1c70a2SPeter Maydell  *
49f1c70a2SPeter Maydell  * Copyright (c) 2003-2008 Fabrice Bellard
59f1c70a2SPeter Maydell  * Copyright (c) 2016 Red Hat, Inc.
69f1c70a2SPeter Maydell  * Copyright (c) 2024 Linaro, Ltd.
79f1c70a2SPeter Maydell  *
89f1c70a2SPeter Maydell  * Permission is hereby granted, free of charge, to any person obtaining a copy
99f1c70a2SPeter Maydell  * of this software and associated documentation files (the "Software"), to deal
109f1c70a2SPeter Maydell  * in the Software without restriction, including without limitation the rights
119f1c70a2SPeter Maydell  * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
129f1c70a2SPeter Maydell  * copies of the Software, and to permit persons to whom the Software is
139f1c70a2SPeter Maydell  * furnished to do so, subject to the following conditions:
149f1c70a2SPeter Maydell  *
159f1c70a2SPeter Maydell  * The above copyright notice and this permission notice shall be included in
169f1c70a2SPeter Maydell  * all copies or substantial portions of the Software.
179f1c70a2SPeter Maydell  *
189f1c70a2SPeter Maydell  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
199f1c70a2SPeter Maydell  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
209f1c70a2SPeter Maydell  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
219f1c70a2SPeter Maydell  * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
229f1c70a2SPeter Maydell  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
239f1c70a2SPeter Maydell  * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
249f1c70a2SPeter Maydell  * THE SOFTWARE.
259f1c70a2SPeter Maydell  */
269f1c70a2SPeter Maydell 
27*32cad1ffSPhilippe Mathieu-Daudé #ifndef QEMU_SYSTEM_RESET_H
28*32cad1ffSPhilippe Mathieu-Daudé #define QEMU_SYSTEM_RESET_H
292f7b92a0SPaolo Bonzini 
301b063fe2SJuraj Marcin #include "hw/resettable.h"
317966d70fSJason A. Donenfeld #include "qapi/qapi-events-run-state.h"
327966d70fSJason A. Donenfeld 
332f7b92a0SPaolo Bonzini typedef void QEMUResetHandler(void *opaque);
342f7b92a0SPaolo Bonzini 
359f1c70a2SPeter Maydell /**
3686fae16eSPeter Maydell  * qemu_register_resettable: Register an object to be reset
3786fae16eSPeter Maydell  * @obj: object to be reset: it must implement the Resettable interface
3886fae16eSPeter Maydell  *
3986fae16eSPeter Maydell  * Register @obj on the list of objects which will be reset when the
4086fae16eSPeter Maydell  * simulation is reset. These objects will be reset in the order
4186fae16eSPeter Maydell  * they were added, using the three-phase Resettable protocol,
4286fae16eSPeter Maydell  * so first all objects go through the enter phase, then all objects
4386fae16eSPeter Maydell  * go through the hold phase, and then finally all go through the
4486fae16eSPeter Maydell  * exit phase.
4586fae16eSPeter Maydell  *
4686fae16eSPeter Maydell  * It is not permitted to register or unregister reset functions or
4786fae16eSPeter Maydell  * resettable objects from within any of the reset phase methods of @obj.
4886fae16eSPeter Maydell  *
4986fae16eSPeter Maydell  * We assume that the caller holds the BQL.
5086fae16eSPeter Maydell  */
5186fae16eSPeter Maydell void qemu_register_resettable(Object *obj);
5286fae16eSPeter Maydell 
5386fae16eSPeter Maydell /**
5486fae16eSPeter Maydell  * qemu_unregister_resettable: Unregister an object to be reset
5586fae16eSPeter Maydell  * @obj: object to unregister
5686fae16eSPeter Maydell  *
5786fae16eSPeter Maydell  * Remove @obj from the list of objects which are reset when the
5886fae16eSPeter Maydell  * simulation is reset. It must have been previously added to
5986fae16eSPeter Maydell  * the list via qemu_register_resettable().
6086fae16eSPeter Maydell  *
6186fae16eSPeter Maydell  * We assume that the caller holds the BQL.
6286fae16eSPeter Maydell  */
6386fae16eSPeter Maydell void qemu_unregister_resettable(Object *obj);
6486fae16eSPeter Maydell 
6586fae16eSPeter Maydell /**
669f1c70a2SPeter Maydell  * qemu_register_reset: Register a callback for system reset
679f1c70a2SPeter Maydell  * @func: function to call
689f1c70a2SPeter Maydell  * @opaque: opaque data to pass to @func
699f1c70a2SPeter Maydell  *
709f1c70a2SPeter Maydell  * Register @func on the list of functions which are called when the
7171b3ea37SPeter Maydell  * entire system is reset. Functions registered with this API and
7271b3ea37SPeter Maydell  * Resettable objects registered with qemu_register_resettable() are
7371b3ea37SPeter Maydell  * handled together, in the order in which they were registered.
7471b3ea37SPeter Maydell  * Functions registered with this API are called in the 'hold' phase
7571b3ea37SPeter Maydell  * of the 3-phase reset.
769f1c70a2SPeter Maydell  *
779f1c70a2SPeter Maydell  * In general this function should not be used in new code where possible;
789f1c70a2SPeter Maydell  * for instance, device model reset is better accomplished using the
799f1c70a2SPeter Maydell  * methods on DeviceState.
809f1c70a2SPeter Maydell  *
8186fae16eSPeter Maydell  * It is not permitted to register or unregister reset functions or
8286fae16eSPeter Maydell  * resettable objects from within the @func callback.
839f1c70a2SPeter Maydell  *
849f1c70a2SPeter Maydell  * We assume that the caller holds the BQL.
859f1c70a2SPeter Maydell  */
862f7b92a0SPaolo Bonzini void qemu_register_reset(QEMUResetHandler *func, void *opaque);
879f1c70a2SPeter Maydell 
889f1c70a2SPeter Maydell /**
899f1c70a2SPeter Maydell  * qemu_register_reset_nosnapshotload: Register a callback for system reset
909f1c70a2SPeter Maydell  * @func: function to call
919f1c70a2SPeter Maydell  * @opaque: opaque data to pass to @func
929f1c70a2SPeter Maydell  *
939f1c70a2SPeter Maydell  * This is the same as qemu_register_reset(), except that @func is
949f1c70a2SPeter Maydell  * not called if the reason that the system is being reset is to
959f1c70a2SPeter Maydell  * put it into a clean state prior to loading a snapshot (i.e. for
969f1c70a2SPeter Maydell  * SHUTDOWN_CAUSE_SNAPSHOT_LOAD).
979f1c70a2SPeter Maydell  */
987966d70fSJason A. Donenfeld void qemu_register_reset_nosnapshotload(QEMUResetHandler *func, void *opaque);
999f1c70a2SPeter Maydell 
1009f1c70a2SPeter Maydell /**
1019f1c70a2SPeter Maydell  * qemu_unregister_reset: Unregister a system reset callback
1029f1c70a2SPeter Maydell  * @func: function registered with qemu_register_reset()
1039f1c70a2SPeter Maydell  * @opaque: the same opaque data that was passed to qemu_register_reset()
1049f1c70a2SPeter Maydell  *
1059f1c70a2SPeter Maydell  * Undo the effects of a qemu_register_reset(). The @func and @opaque
1069f1c70a2SPeter Maydell  * must both match the arguments originally used with qemu_register_reset().
1079f1c70a2SPeter Maydell  *
1089f1c70a2SPeter Maydell  * We assume that the caller holds the BQL.
1099f1c70a2SPeter Maydell  */
1102f7b92a0SPaolo Bonzini void qemu_unregister_reset(QEMUResetHandler *func, void *opaque);
1119f1c70a2SPeter Maydell 
1129f1c70a2SPeter Maydell /**
1139f1c70a2SPeter Maydell  * qemu_devices_reset: Perform a complete system reset
1141b063fe2SJuraj Marcin  * @reason: type of the reset
1159f1c70a2SPeter Maydell  *
1169f1c70a2SPeter Maydell  * This function performs the low-level work needed to do a complete reset
1179f1c70a2SPeter Maydell  * of the system (calling all the callbacks registered with
11886fae16eSPeter Maydell  * qemu_register_reset() and resetting all the Resettable objects registered
11986fae16eSPeter Maydell  * with qemu_register_resettable()). It should only be called by the code in a
1209f1c70a2SPeter Maydell  * MachineClass reset method.
1219f1c70a2SPeter Maydell  *
1229f1c70a2SPeter Maydell  * If you want to trigger a system reset from, for instance, a device
1239f1c70a2SPeter Maydell  * model, don't use this function. Use qemu_system_reset_request().
1249f1c70a2SPeter Maydell  */
1251b063fe2SJuraj Marcin void qemu_devices_reset(ResetType type);
1262f7b92a0SPaolo Bonzini 
1272f7b92a0SPaolo Bonzini #endif
128