xref: /qemu/include/hw/s390x/storage-keys.h (revision a4538a5cc57dd493ed1545be98fa0ead0d391b8a)
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 
120efe406cSJason J. Herne #ifndef __S390_STORAGE_KEYS_H
130efe406cSJason J. Herne #define __S390_STORAGE_KEYS_H
140efe406cSJason J. Herne 
150efe406cSJason J. Herne #include <hw/qdev.h>
16*a4538a5cSJason J. Herne #include "monitor/monitor.h"
170efe406cSJason J. Herne 
180efe406cSJason J. Herne #define TYPE_S390_SKEYS "s390-skeys"
190efe406cSJason J. Herne #define S390_SKEYS(obj) \
200efe406cSJason J. Herne     OBJECT_CHECK(S390SKeysState, (obj), TYPE_S390_SKEYS)
210efe406cSJason J. Herne 
220efe406cSJason J. Herne typedef struct S390SKeysState {
230efe406cSJason J. Herne     DeviceState parent_obj;
240efe406cSJason J. Herne 
250efe406cSJason J. Herne } S390SKeysState;
260efe406cSJason J. Herne 
270efe406cSJason J. Herne #define S390_SKEYS_CLASS(klass) \
280efe406cSJason J. Herne     OBJECT_CLASS_CHECK(S390SKeysClass, (klass), TYPE_S390_SKEYS)
290efe406cSJason J. Herne #define S390_SKEYS_GET_CLASS(obj) \
300efe406cSJason J. Herne     OBJECT_GET_CLASS(S390SKeysClass, (obj), TYPE_S390_SKEYS)
310efe406cSJason J. Herne 
320efe406cSJason J. Herne typedef struct S390SKeysClass {
330efe406cSJason J. Herne     DeviceClass parent_class;
340efe406cSJason J. Herne     int (*skeys_enabled)(S390SKeysState *ks);
350efe406cSJason J. Herne     int (*get_skeys)(S390SKeysState *ks, uint64_t start_gfn, uint64_t count,
360efe406cSJason J. Herne                      uint8_t *keys);
370efe406cSJason J. Herne     int (*set_skeys)(S390SKeysState *ks, uint64_t start_gfn, uint64_t count,
380efe406cSJason J. Herne                      uint8_t *keys);
390efe406cSJason J. Herne } S390SKeysClass;
400efe406cSJason J. Herne 
410efe406cSJason J. Herne #define TYPE_KVM_S390_SKEYS "s390-skeys-kvm"
420efe406cSJason J. Herne #define TYPE_QEMU_S390_SKEYS "s390-skeys-qemu"
430efe406cSJason J. Herne #define QEMU_S390_SKEYS(obj) \
440efe406cSJason J. Herne     OBJECT_CHECK(QEMUS390SKeysState, (obj), TYPE_QEMU_S390_SKEYS)
450efe406cSJason J. Herne 
460efe406cSJason J. Herne typedef struct QEMUS390SKeysState {
470efe406cSJason J. Herne     S390SKeysState parent_obj;
480efe406cSJason J. Herne     uint8_t *keydata;
490efe406cSJason J. Herne     uint32_t key_count;
500efe406cSJason J. Herne } QEMUS390SKeysState;
510efe406cSJason J. Herne 
520efe406cSJason J. Herne void s390_skeys_init(void);
530efe406cSJason J. Herne 
540efe406cSJason J. Herne S390SKeysState *s390_get_skeys_device(void);
550efe406cSJason J. Herne 
56*a4538a5cSJason J. Herne void hmp_dump_skeys(Monitor *mon, const QDict *qdict);
570efe406cSJason J. Herne #endif /* __S390_STORAGE_KEYS_H */
58