diff options
author | Yang Chen <bjcyang@linux.vnet.ibm.com> | 2016-02-19 10:45:26 +0100 |
---|---|---|
committer | Cornelia Huck <cornelia.huck@de.ibm.com> | 2017-05-04 10:34:37 +0200 |
commit | b8476205409ace2140d734c04ba4ea7f649692cf (patch) | |
tree | bdcbf36e60ee1a2c3ff79e95ef703a8edba7c376 /hw | |
parent | ff20b0a3d8bc044405d750a346c7b48514ff5ddc (diff) |
s390x/3270: Add emulated terminal3270 device
This is a basic implementation of the emulated ccw-attached 3270
called x-terminal3270, which provides visibility of the device in
the qemu monitor and guest. The x prefix indicates that this is
just an experimental implementation for the current stage. This
device will not be compiled until the basic functions are available.
Signed-off-by: Yang Chen <bjcyang@linux.vnet.ibm.com>
Signed-off-by: Jing Liu <liujbjl@linux.vnet.ibm.com>
Reviewed-by: QingFeng Hao <haoqf@linux.vnet.ibm.com>
Reviewed-by: Dong Jia Shi <bjsdjshi@linux.vnet.ibm.com>
Signed-off-by: Cornelia Huck <cornelia.huck@de.ibm.com>
Diffstat (limited to 'hw')
-rw-r--r-- | hw/char/terminal3270.c | 54 |
1 files changed, 54 insertions, 0 deletions
diff --git a/hw/char/terminal3270.c b/hw/char/terminal3270.c new file mode 100644 index 0000000000..bef3812c18 --- /dev/null +++ b/hw/char/terminal3270.c @@ -0,0 +1,54 @@ +/* + * Terminal 3270 implementation + * + * Copyright 2017 IBM Corp. + * + * Authors: Yang Chen <bjcyang@linux.vnet.ibm.com> + * Jing Liu <liujbjl@linux.vnet.ibm.com> + * + * This work is licensed under the terms of the GNU GPL, version 2 or (at + * your option) any later version. See the COPYING file in the top-level + * directory. + */ + +#include "qemu/osdep.h" +#include "hw/s390x/3270-ccw.h" + +typedef struct Terminal3270 { + EmulatedCcw3270Device cdev; +} Terminal3270; + +#define TYPE_TERMINAL_3270 "x-terminal3270" + +static void terminal_init(EmulatedCcw3270Device *dev, Error **errp) +{ + static bool terminal_available; + + if (terminal_available) { + error_setg(errp, "Multiple 3270 terminals are not supported."); + return; + } + terminal_available = true; +} + +static void terminal_class_init(ObjectClass *klass, void *data) +{ + EmulatedCcw3270Class *ck = EMULATED_CCW_3270_CLASS(klass); + + ck->init = terminal_init; +} + +static const TypeInfo ccw_terminal_info = { + .name = TYPE_TERMINAL_3270, + .parent = TYPE_EMULATED_CCW_3270, + .instance_size = sizeof(Terminal3270), + .class_init = terminal_class_init, + .class_size = sizeof(EmulatedCcw3270Class), +}; + +static void register_types(void) +{ + type_register_static(&ccw_terminal_info); +} + +type_init(register_types) |