xref: /qemu/include/hw/s390x/storage-keys.h (revision db1015e92e04835c9eb50c29625fe566d1202dbd)
10efe406cSJason J. Herne /*
20efe406cSJason J. Herne  * s390 storage key device
30efe406cSJason J. Herne  *
40efe406cSJason J. Herne  * Copyright 2015 IBM Corp.
50efe406cSJason J. Herne  * Author(s): Jason J. Herne <jjherne@linux.vnet.ibm.com>
60efe406cSJason J. Herne  *
70efe406cSJason J. Herne  * This work is licensed under the terms of the GNU GPL, version 2 or (at
80efe406cSJason J. Herne  * your option) any later version. See the COPYING file in the top-level
90efe406cSJason J. Herne  * directory.
100efe406cSJason J. Herne  */
110efe406cSJason J. Herne 
122a6a4076SMarkus Armbruster #ifndef S390_STORAGE_KEYS_H
132a6a4076SMarkus Armbruster #define S390_STORAGE_KEYS_H
140efe406cSJason J. Herne 
15a27bd6c7SMarkus Armbruster #include "hw/qdev-core.h"
16a4538a5cSJason J. Herne #include "monitor/monitor.h"
17*db1015e9SEduardo Habkost #include "qom/object.h"
180efe406cSJason J. Herne 
190efe406cSJason J. Herne #define TYPE_S390_SKEYS "s390-skeys"
20*db1015e9SEduardo Habkost typedef struct S390SKeysClass S390SKeysClass;
21*db1015e9SEduardo Habkost typedef struct S390SKeysState S390SKeysState;
220efe406cSJason J. Herne #define S390_SKEYS(obj) \
230efe406cSJason J. Herne     OBJECT_CHECK(S390SKeysState, (obj), TYPE_S390_SKEYS)
240efe406cSJason J. Herne 
25*db1015e9SEduardo Habkost struct S390SKeysState {
260efe406cSJason J. Herne     DeviceState parent_obj;
279ef40173SJason J. Herne     bool migration_enabled;
280efe406cSJason J. Herne 
29*db1015e9SEduardo Habkost };
300efe406cSJason J. Herne 
310efe406cSJason J. Herne #define S390_SKEYS_CLASS(klass) \
320efe406cSJason J. Herne     OBJECT_CLASS_CHECK(S390SKeysClass, (klass), TYPE_S390_SKEYS)
330efe406cSJason J. Herne #define S390_SKEYS_GET_CLASS(obj) \
340efe406cSJason J. Herne     OBJECT_GET_CLASS(S390SKeysClass, (obj), TYPE_S390_SKEYS)
350efe406cSJason J. Herne 
36*db1015e9SEduardo Habkost struct S390SKeysClass {
370efe406cSJason J. Herne     DeviceClass parent_class;
380efe406cSJason J. Herne     int (*skeys_enabled)(S390SKeysState *ks);
390efe406cSJason J. Herne     int (*get_skeys)(S390SKeysState *ks, uint64_t start_gfn, uint64_t count,
400efe406cSJason J. Herne                      uint8_t *keys);
410efe406cSJason J. Herne     int (*set_skeys)(S390SKeysState *ks, uint64_t start_gfn, uint64_t count,
420efe406cSJason J. Herne                      uint8_t *keys);
43*db1015e9SEduardo Habkost };
440efe406cSJason J. Herne 
450efe406cSJason J. Herne #define TYPE_KVM_S390_SKEYS "s390-skeys-kvm"
460efe406cSJason J. Herne #define TYPE_QEMU_S390_SKEYS "s390-skeys-qemu"
47*db1015e9SEduardo Habkost typedef struct QEMUS390SKeysState QEMUS390SKeysState;
480efe406cSJason J. Herne #define QEMU_S390_SKEYS(obj) \
490efe406cSJason J. Herne     OBJECT_CHECK(QEMUS390SKeysState, (obj), TYPE_QEMU_S390_SKEYS)
500efe406cSJason J. Herne 
51*db1015e9SEduardo Habkost struct QEMUS390SKeysState {
520efe406cSJason J. Herne     S390SKeysState parent_obj;
530efe406cSJason J. Herne     uint8_t *keydata;
540efe406cSJason J. Herne     uint32_t key_count;
55*db1015e9SEduardo Habkost };
560efe406cSJason J. Herne 
570efe406cSJason J. Herne void s390_skeys_init(void);
580efe406cSJason J. Herne 
590efe406cSJason J. Herne S390SKeysState *s390_get_skeys_device(void);
600efe406cSJason J. Herne 
61a4538a5cSJason J. Herne void hmp_dump_skeys(Monitor *mon, const QDict *qdict);
62a08f0081SJason J. Herne void hmp_info_skeys(Monitor *mon, const QDict *qdict);
63a08f0081SJason J. Herne 
642a6a4076SMarkus Armbruster #endif /* S390_STORAGE_KEYS_H */
65