1 | /* |
2 | * TOD (Time Of Day) clock |
3 | * |
4 | * Copyright 2018 Red Hat, Inc. |
5 | * Author(s): David Hildenbrand <david@redhat.com> |
6 | * |
7 | * This work is licensed under the terms of the GNU GPL, version 2 or later. |
8 | * See the COPYING file in the top-level directory. |
9 | */ |
10 | |
11 | #ifndef HW_S390_TOD_H |
12 | #define HW_S390_TOD_H |
13 | |
14 | #include "hw/qdev-core.h" |
15 | #include "target/s390x/s390-tod.h" |
16 | |
17 | typedef struct S390TOD { |
18 | uint8_t high; |
19 | uint64_t low; |
20 | } S390TOD; |
21 | |
22 | #define TYPE_S390_TOD "s390-tod" |
23 | #define S390_TOD(obj) OBJECT_CHECK(S390TODState, (obj), TYPE_S390_TOD) |
24 | #define S390_TOD_CLASS(oc) OBJECT_CLASS_CHECK(S390TODClass, (oc), \ |
25 | TYPE_S390_TOD) |
26 | #define S390_TOD_GET_CLASS(obj) OBJECT_GET_CLASS(S390TODClass, (obj), \ |
27 | TYPE_S390_TOD) |
28 | #define TYPE_KVM_S390_TOD TYPE_S390_TOD "-kvm" |
29 | #define TYPE_QEMU_S390_TOD TYPE_S390_TOD "-qemu" |
30 | |
31 | typedef struct S390TODState { |
32 | /* private */ |
33 | DeviceState parent_obj; |
34 | |
35 | /* |
36 | * Used by TCG to remember the time base. Used by KVM to backup the TOD |
37 | * while the TOD is stopped. |
38 | */ |
39 | S390TOD base; |
40 | /* Used by KVM to remember if the TOD is stopped and base is valid. */ |
41 | bool stopped; |
42 | } S390TODState; |
43 | |
44 | typedef struct S390TODClass { |
45 | /* private */ |
46 | DeviceClass parent_class; |
47 | void (*parent_realize)(DeviceState *dev, Error **errp); |
48 | |
49 | /* public */ |
50 | void (*get)(const S390TODState *td, S390TOD *tod, Error **errp); |
51 | void (*set)(S390TODState *td, const S390TOD *tod, Error **errp); |
52 | } S390TODClass; |
53 | |
54 | void s390_init_tod(void); |
55 | S390TODState *s390_get_todstate(void); |
56 | |
57 | #endif |
58 | |