1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16#ifndef QEMU_PC_DIMM_H
17#define QEMU_PC_DIMM_H
18
19#include "exec/memory.h"
20#include "sysemu/hostmem.h"
21#include "hw/qdev.h"
22#include "hw/boards.h"
23
24#define TYPE_PC_DIMM "pc-dimm"
25#define PC_DIMM(obj) \
26 OBJECT_CHECK(PCDIMMDevice, (obj), TYPE_PC_DIMM)
27#define PC_DIMM_CLASS(oc) \
28 OBJECT_CLASS_CHECK(PCDIMMDeviceClass, (oc), TYPE_PC_DIMM)
29#define PC_DIMM_GET_CLASS(obj) \
30 OBJECT_GET_CLASS(PCDIMMDeviceClass, (obj), TYPE_PC_DIMM)
31
32#define PC_DIMM_ADDR_PROP "addr"
33#define PC_DIMM_SLOT_PROP "slot"
34#define PC_DIMM_NODE_PROP "node"
35#define PC_DIMM_SIZE_PROP "size"
36#define PC_DIMM_MEMDEV_PROP "memdev"
37
38#define PC_DIMM_UNASSIGNED_SLOT -1
39
40
41
42
43
44
45
46
47
48
49typedef struct PCDIMMDevice {
50
51 DeviceState parent_obj;
52
53
54 uint64_t addr;
55 uint32_t node;
56 int32_t slot;
57 HostMemoryBackend *hostmem;
58} PCDIMMDevice;
59
60
61
62
63
64
65
66
67
68typedef struct PCDIMMDeviceClass {
69
70 DeviceClass parent_class;
71
72
73 void (*realize)(PCDIMMDevice *dimm, Error **errp);
74 MemoryRegion *(*get_vmstate_memory_region)(PCDIMMDevice *dimm,
75 Error **errp);
76} PCDIMMDeviceClass;
77
78void pc_dimm_pre_plug(PCDIMMDevice *dimm, MachineState *machine,
79 const uint64_t *legacy_align, Error **errp);
80void pc_dimm_plug(PCDIMMDevice *dimm, MachineState *machine, Error **errp);
81void pc_dimm_unplug(PCDIMMDevice *dimm, MachineState *machine);
82#endif
83