Changeset View
Changeset View
Standalone View
Standalone View
sys/amd64/vmm/io/vrtc.c
Show All 23 Lines | |||||
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF | ||||
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||||
*/ | */ | ||||
#include <sys/cdefs.h> | #include <sys/cdefs.h> | ||||
__FBSDID("$FreeBSD$"); | __FBSDID("$FreeBSD$"); | ||||
#include "opt_bhyve_snapshot.h" | |||||
#include <sys/param.h> | #include <sys/param.h> | ||||
#include <sys/systm.h> | #include <sys/systm.h> | ||||
#include <sys/queue.h> | #include <sys/queue.h> | ||||
#include <sys/kernel.h> | #include <sys/kernel.h> | ||||
#include <sys/malloc.h> | #include <sys/malloc.h> | ||||
#include <sys/lock.h> | #include <sys/lock.h> | ||||
#include <sys/mutex.h> | #include <sys/mutex.h> | ||||
#include <sys/clock.h> | #include <sys/clock.h> | ||||
#include <sys/sysctl.h> | #include <sys/sysctl.h> | ||||
#include <machine/vmm.h> | #include <machine/vmm.h> | ||||
#include <machine/vmm_snapshot.h> | |||||
#include <isa/rtc.h> | #include <isa/rtc.h> | ||||
#include "vmm_ktr.h" | #include "vmm_ktr.h" | ||||
#include "vatpic.h" | #include "vatpic.h" | ||||
#include "vioapic.h" | #include "vioapic.h" | ||||
#include "vrtc.h" | #include "vrtc.h" | ||||
▲ Show 20 Lines • Show All 964 Lines • ▼ Show 20 Lines | |||||
void | void | ||||
vrtc_cleanup(struct vrtc *vrtc) | vrtc_cleanup(struct vrtc *vrtc) | ||||
{ | { | ||||
callout_drain(&vrtc->callout); | callout_drain(&vrtc->callout); | ||||
free(vrtc, M_VRTC); | free(vrtc, M_VRTC); | ||||
} | } | ||||
#ifdef BHYVE_SNAPSHOT | |||||
int | |||||
vrtc_snapshot(struct vrtc *vrtc, struct vm_snapshot_meta *meta) | |||||
{ | |||||
int ret; | |||||
VRTC_LOCK(vrtc); | |||||
SNAPSHOT_VAR_OR_LEAVE(vrtc->addr, meta, ret, done); | |||||
if (meta->op == VM_SNAPSHOT_RESTORE) | |||||
vrtc->base_uptime = sbinuptime(); | |||||
SNAPSHOT_VAR_OR_LEAVE(vrtc->base_rtctime, meta, ret, done); | |||||
SNAPSHOT_VAR_OR_LEAVE(vrtc->rtcdev.sec, meta, ret, done); | |||||
SNAPSHOT_VAR_OR_LEAVE(vrtc->rtcdev.alarm_sec, meta, ret, done); | |||||
SNAPSHOT_VAR_OR_LEAVE(vrtc->rtcdev.min, meta, ret, done); | |||||
SNAPSHOT_VAR_OR_LEAVE(vrtc->rtcdev.alarm_min, meta, ret, done); | |||||
SNAPSHOT_VAR_OR_LEAVE(vrtc->rtcdev.hour, meta, ret, done); | |||||
SNAPSHOT_VAR_OR_LEAVE(vrtc->rtcdev.alarm_hour, meta, ret, done); | |||||
SNAPSHOT_VAR_OR_LEAVE(vrtc->rtcdev.day_of_week, meta, ret, done); | |||||
SNAPSHOT_VAR_OR_LEAVE(vrtc->rtcdev.day_of_month, meta, ret, done); | |||||
SNAPSHOT_VAR_OR_LEAVE(vrtc->rtcdev.month, meta, ret, done); | |||||
SNAPSHOT_VAR_OR_LEAVE(vrtc->rtcdev.year, meta, ret, done); | |||||
SNAPSHOT_VAR_OR_LEAVE(vrtc->rtcdev.reg_a, meta, ret, done); | |||||
SNAPSHOT_VAR_OR_LEAVE(vrtc->rtcdev.reg_b, meta, ret, done); | |||||
SNAPSHOT_VAR_OR_LEAVE(vrtc->rtcdev.reg_c, meta, ret, done); | |||||
SNAPSHOT_VAR_OR_LEAVE(vrtc->rtcdev.reg_d, meta, ret, done); | |||||
SNAPSHOT_BUF_OR_LEAVE(vrtc->rtcdev.nvram, sizeof(vrtc->rtcdev.nvram), | |||||
meta, ret, done); | |||||
SNAPSHOT_VAR_OR_LEAVE(vrtc->rtcdev.century, meta, ret, done); | |||||
SNAPSHOT_BUF_OR_LEAVE(vrtc->rtcdev.nvram2, sizeof(vrtc->rtcdev.nvram2), | |||||
meta, ret, done); | |||||
vrtc_callout_reset(vrtc, vrtc_freq(vrtc)); | |||||
VRTC_UNLOCK(vrtc); | |||||
done: | |||||
return (ret); | |||||
} | |||||
#endif |