xref: /qemu/include/hw/mem/pc-dimm.h (revision 3e35960b)
110b7e74bSVasilis Liaskovitis /*
210b7e74bSVasilis Liaskovitis  * PC DIMM device
310b7e74bSVasilis Liaskovitis  *
410b7e74bSVasilis Liaskovitis  * Copyright ProfitBricks GmbH 2012
510b7e74bSVasilis Liaskovitis  * Copyright (C) 2013-2014 Red Hat Inc
610b7e74bSVasilis Liaskovitis  *
710b7e74bSVasilis Liaskovitis  * Authors:
810b7e74bSVasilis Liaskovitis  *  Vasilis Liaskovitis <vasilis.liaskovitis@profitbricks.com>
910b7e74bSVasilis Liaskovitis  *  Igor Mammedov <imammedo@redhat.com>
1010b7e74bSVasilis Liaskovitis  *
1110b7e74bSVasilis Liaskovitis  * This work is licensed under the terms of the GNU GPL, version 2 or later.
1210b7e74bSVasilis Liaskovitis  * See the COPYING file in the top-level directory.
1310b7e74bSVasilis Liaskovitis  *
1410b7e74bSVasilis Liaskovitis  */
1510b7e74bSVasilis Liaskovitis 
1610b7e74bSVasilis Liaskovitis #ifndef QEMU_PC_DIMM_H
1710b7e74bSVasilis Liaskovitis #define QEMU_PC_DIMM_H
1810b7e74bSVasilis Liaskovitis 
1910b7e74bSVasilis Liaskovitis #include "exec/memory.h"
20a27bd6c7SMarkus Armbruster #include "hw/qdev-core.h"
21db1015e9SEduardo Habkost #include "qom/object.h"
2210b7e74bSVasilis Liaskovitis 
2310b7e74bSVasilis Liaskovitis #define TYPE_PC_DIMM "pc-dimm"
24c821774aSEduardo Habkost OBJECT_DECLARE_TYPE(PCDIMMDevice, PCDIMMDeviceClass,
2530b5707cSEduardo Habkost                     PC_DIMM)
2610b7e74bSVasilis Liaskovitis 
2710b7e74bSVasilis Liaskovitis #define PC_DIMM_ADDR_PROP "addr"
2810b7e74bSVasilis Liaskovitis #define PC_DIMM_SLOT_PROP "slot"
2910b7e74bSVasilis Liaskovitis #define PC_DIMM_NODE_PROP "node"
3010b7e74bSVasilis Liaskovitis #define PC_DIMM_SIZE_PROP "size"
3110b7e74bSVasilis Liaskovitis #define PC_DIMM_MEMDEV_PROP "memdev"
3210b7e74bSVasilis Liaskovitis 
3310b7e74bSVasilis Liaskovitis #define PC_DIMM_UNASSIGNED_SLOT -1
3410b7e74bSVasilis Liaskovitis 
3510b7e74bSVasilis Liaskovitis /**
3610b7e74bSVasilis Liaskovitis  * PCDIMMDevice:
3710b7e74bSVasilis Liaskovitis  * @addr: starting guest physical address, where @PCDIMMDevice is mapped.
3810b7e74bSVasilis Liaskovitis  *         Default value: 0, means that address is auto-allocated.
3910b7e74bSVasilis Liaskovitis  * @node: numa node to which @PCDIMMDevice is attached.
4010b7e74bSVasilis Liaskovitis  * @slot: slot number into which @PCDIMMDevice is plugged in.
4110b7e74bSVasilis Liaskovitis  *        Default value: -1, means that slot is auto-allocated.
4210b7e74bSVasilis Liaskovitis  * @hostmem: host memory backend providing memory for @PCDIMMDevice
4310b7e74bSVasilis Liaskovitis  */
44db1015e9SEduardo Habkost struct PCDIMMDevice {
4510b7e74bSVasilis Liaskovitis     /* private */
4610b7e74bSVasilis Liaskovitis     DeviceState parent_obj;
4710b7e74bSVasilis Liaskovitis 
4810b7e74bSVasilis Liaskovitis     /* public */
4910b7e74bSVasilis Liaskovitis     uint64_t addr;
5010b7e74bSVasilis Liaskovitis     uint32_t node;
5110b7e74bSVasilis Liaskovitis     int32_t slot;
5210b7e74bSVasilis Liaskovitis     HostMemoryBackend *hostmem;
53db1015e9SEduardo Habkost };
5410b7e74bSVasilis Liaskovitis 
5510b7e74bSVasilis Liaskovitis /**
5610b7e74bSVasilis Liaskovitis  * PCDIMMDeviceClass:
579f318f8fSXiao Guangrong  * @realize: called after common dimm is realized so that the dimm based
589f318f8fSXiao Guangrong  * devices get the chance to do specified operations.
5910b7e74bSVasilis Liaskovitis  */
60db1015e9SEduardo Habkost struct PCDIMMDeviceClass {
6110b7e74bSVasilis Liaskovitis     /* private */
6210b7e74bSVasilis Liaskovitis     DeviceClass parent_class;
6310b7e74bSVasilis Liaskovitis 
6410b7e74bSVasilis Liaskovitis     /* public */
659f318f8fSXiao Guangrong     void (*realize)(PCDIMMDevice *dimm, Error **errp);
66*3e35960bSShivaprasad G Bhat     void (*unrealize)(PCDIMMDevice *dimm);
67db1015e9SEduardo Habkost };
6810b7e74bSVasilis Liaskovitis 
69fd3416f5SDavid Hildenbrand void pc_dimm_pre_plug(PCDIMMDevice *dimm, MachineState *machine,
70b0e62443SDavid Hildenbrand                       const uint64_t *legacy_align, Error **errp);
7184fd5496SGreg Kurz void pc_dimm_plug(PCDIMMDevice *dimm, MachineState *machine);
72fd3416f5SDavid Hildenbrand void pc_dimm_unplug(PCDIMMDevice *dimm, MachineState *machine);
7310b7e74bSVasilis Liaskovitis #endif
74