diff options
| author | Peter Maydell <peter.maydell@linaro.org> | 2017-01-30 10:23:20 +0000 |
|---|---|---|
| committer | Peter Maydell <peter.maydell@linaro.org> | 2017-01-30 10:23:20 +0000 |
| commit | a0def594286d9110a6035e02eef558cf3cf5d847 (patch) | |
| tree | 32275a1bfdd6c17682788f2b2e018a15c3b30214 /backends/testdev.c | |
| parent | 3aca12f841fcd6f3a7477076dad0d564360500de (diff) | |
| parent | 6da67de6803e93cbb7e93ac3497865832f8c00ea (diff) | |
| download | focaccia-qemu-a0def594286d9110a6035e02eef558cf3cf5d847.tar.gz focaccia-qemu-a0def594286d9110a6035e02eef558cf3cf5d847.zip | |
Merge remote-tracking branch 'remotes/bonzini/tags/for-upstream' into staging
* SCSI max_transfer support for scsi-generic (Eric) * x86 SMI broadcast (Laszlo) * Character device QOMification (Marc-André) * Record/replay improvements (Pavel) * iscsi fixes (Peter L.) * "info mtree -f" command (Peter Xu) * TSC clock rate reporting (Phil) * DEVICE_CATEGORY_CPU (Thomas) * Memory sign-extension fix (Ladi) # gpg: Signature made Fri 27 Jan 2017 17:08:51 GMT # gpg: using RSA key 0xBFFBD25F78C7AE83 # gpg: Good signature from "Paolo Bonzini <bonzini@gnu.org>" # gpg: aka "Paolo Bonzini <pbonzini@redhat.com>" # Primary key fingerprint: 46F5 9FBD 57D6 12E7 BFD4 E2F7 7E15 100C CD36 69B1 # Subkey fingerprint: F133 3857 4B66 2389 866C 7682 BFFB D25F 78C7 AE83 * remotes/bonzini/tags/for-upstream: (41 commits) memory: don't sign-extend 32-bit writes chardev: qom-ify vc: use a common prefix for chr callbacks baum: use a common prefix for chr callbacks gtk: overwrite the console.c char driver char: use error_report() spice-char: improve error reporting char: rename TCPChardev and NetChardev char: rename CharDriverState Chardev bt: use qemu_chr_alloc() char: allocate CharDriverState as a single object char: use a feature bit for replay char: introduce generic qemu_chr_get_kind() char: fold single-user functions in caller char: move callbacks in CharDriver char: use a static array for backends char: use a const CharDriver doc: fix spelling char: add qemu_chr_fe_add_watch() Returns description qemu-options: stdio is available on win32 ... Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
Diffstat (limited to 'backends/testdev.c')
| -rw-r--r-- | backends/testdev.c | 53 |
1 files changed, 25 insertions, 28 deletions
diff --git a/backends/testdev.c b/backends/testdev.c index 60156e320e..ea15143713 100644 --- a/backends/testdev.c +++ b/backends/testdev.c @@ -30,13 +30,18 @@ #define BUF_SIZE 32 typedef struct { - CharDriverState *chr; + Chardev parent; + uint8_t in_buf[32]; int in_buf_used; -} TestdevCharState; +} TestdevChardev; + +#define TYPE_CHARDEV_TESTDEV "chardev-testdev" +#define TESTDEV_CHARDEV(obj) \ + OBJECT_CHECK(TestdevChardev, (obj), TYPE_CHARDEV_TESTDEV) /* Try to interpret a whole incoming packet */ -static int testdev_eat_packet(TestdevCharState *testdev) +static int testdev_eat_packet(TestdevChardev *testdev) { const uint8_t *cur = testdev->in_buf; int len = testdev->in_buf_used; @@ -77,9 +82,9 @@ static int testdev_eat_packet(TestdevCharState *testdev) } /* The other end is writing some data. Store it and try to interpret */ -static int testdev_write(CharDriverState *chr, const uint8_t *buf, int len) +static int testdev_chr_write(Chardev *chr, const uint8_t *buf, int len) { - TestdevCharState *testdev = chr->opaque; + TestdevChardev *testdev = TESTDEV_CHARDEV(chr); int tocopy, eaten, orig_len = len; while (len) { @@ -102,36 +107,28 @@ static int testdev_write(CharDriverState *chr, const uint8_t *buf, int len) return orig_len; } -static void testdev_free(struct CharDriverState *chr) +static void char_testdev_class_init(ObjectClass *oc, void *data) { - TestdevCharState *testdev = chr->opaque; + ChardevClass *cc = CHARDEV_CLASS(oc); - g_free(testdev); + cc->chr_write = testdev_chr_write; } -static CharDriverState *chr_testdev_init(const char *id, - ChardevBackend *backend, - ChardevReturn *ret, - bool *be_opened, - Error **errp) -{ - TestdevCharState *testdev; - CharDriverState *chr; - - testdev = g_new0(TestdevCharState, 1); - testdev->chr = chr = g_new0(CharDriverState, 1); - - chr->opaque = testdev; - chr->chr_write = testdev_write; - chr->chr_free = testdev_free; - - return chr; -} +static const TypeInfo char_testdev_type_info = { + .name = TYPE_CHARDEV_TESTDEV, + .parent = TYPE_CHARDEV, + .instance_size = sizeof(TestdevChardev), + .class_init = char_testdev_class_init, +}; static void register_types(void) { - register_char_driver("testdev", CHARDEV_BACKEND_KIND_TESTDEV, NULL, - chr_testdev_init); + static const CharDriver driver = { + .kind = CHARDEV_BACKEND_KIND_TESTDEV, + }; + + register_char_driver(&driver); + type_register_static(&char_testdev_type_info); } type_init(register_types); |