cachepc-qemu

Fork of AMDESE/qemu with changes for cachepc side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-qemu
Log | Files | Refs | Submodules | LICENSE | sfeed.txt

clock-vmstate.c (1485B)


      1/*
      2 * Clock migration structure
      3 *
      4 * Copyright GreenSocs 2019-2020
      5 *
      6 * Authors:
      7 *  Damien Hedde
      8 *
      9 * This work is licensed under the terms of the GNU GPL, version 2 or later.
     10 * See the COPYING file in the top-level directory.
     11 */
     12
     13#include "qemu/osdep.h"
     14#include "migration/vmstate.h"
     15#include "hw/clock.h"
     16
     17static bool muldiv_needed(void *opaque)
     18{
     19    Clock *clk = opaque;
     20
     21    return clk->multiplier != 1 || clk->divider != 1;
     22}
     23
     24static int clock_pre_load(void *opaque)
     25{
     26    Clock *clk = opaque;
     27    /*
     28     * The initial out-of-reset settings of the Clock might have been
     29     * configured by the device to be different from what we set
     30     * in clock_initfn(), so we must here set the default values to
     31     * be used if they are not in the inbound migration state.
     32     */
     33    clk->multiplier = 1;
     34    clk->divider = 1;
     35
     36    return 0;
     37}
     38
     39const VMStateDescription vmstate_muldiv = {
     40    .name = "clock/muldiv",
     41    .version_id = 1,
     42    .minimum_version_id = 1,
     43    .needed = muldiv_needed,
     44    .fields = (VMStateField[]) {
     45        VMSTATE_UINT32(multiplier, Clock),
     46        VMSTATE_UINT32(divider, Clock),
     47    },
     48};
     49
     50const VMStateDescription vmstate_clock = {
     51    .name = "clock",
     52    .version_id = 0,
     53    .minimum_version_id = 0,
     54    .pre_load = clock_pre_load,
     55    .fields = (VMStateField[]) {
     56        VMSTATE_UINT64(period, Clock),
     57        VMSTATE_END_OF_LIST()
     58    },
     59    .subsections = (const VMStateDescription*[]) {
     60        &vmstate_muldiv,
     61        NULL
     62    },
     63};