From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from [140.186.70.92] (port=57045 helo=eggs.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1Pcc7u-0001W7-PH for qemu-devel@nongnu.org; Tue, 11 Jan 2011 06:11:00 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1Pcc7t-00050a-16 for qemu-devel@nongnu.org; Tue, 11 Jan 2011 06:10:58 -0500 Received: from mx1.redhat.com ([209.132.183.28]:7753) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Pcc7s-00050N-QD for qemu-devel@nongnu.org; Tue, 11 Jan 2011 06:10:56 -0500 From: Amit Shah Date: Tue, 11 Jan 2011 16:40:32 +0530 Message-Id: <3b7fddd6f8538bfdcb01f46935f4fc0760296ea6.1294743490.git.amit.shah@redhat.com> In-Reply-To: References: In-Reply-To: References: Subject: [Qemu-devel] [PATCH 3/5] char: Add framework for a 'write unblocked' callback List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu list Cc: Amit Shah , Paul Brook , Gerd Hoffmann The char layer can let users know that the driver will block on further input. For users interested in not blocking, they can assign a function pointer that will be called back when the driver becomes writable. This patch just adds the function pointers to the CharDriverState structure, future patches will enable the nonblocking and callback functionality. Signed-off-by: Amit Shah --- qemu-char.c | 3 +++ qemu-char.h | 5 +++++ 2 files changed, 8 insertions(+), 0 deletions(-) diff --git a/qemu-char.c b/qemu-char.c index 2420b6b..9a132b6 100644 --- a/qemu-char.c +++ b/qemu-char.c @@ -202,11 +202,14 @@ void qemu_chr_add_handlers(CharDriverState *s, } s->chr_can_read = handlers->fd_can_read; s->chr_read = handlers->fd_read; + s->chr_write_unblocked = handlers->fd_write_unblocked; s->chr_event = handlers->fd_event; s->handler_opaque = opaque; if (s->chr_update_read_handler) s->chr_update_read_handler(s); + s->write_blocked = false; + /* We're connecting to an already opened device, so let's make sure we also get the open event */ if (s->opened) { diff --git a/qemu-char.h b/qemu-char.h index 8ed0ffd..0c2c445 100644 --- a/qemu-char.h +++ b/qemu-char.h @@ -60,6 +60,9 @@ struct CharDriverState { IOEventHandler *chr_event; IOCanReadHandler *chr_can_read; IOReadHandler *chr_read; + IOHandler *chr_write_unblocked; + void (*update_fd_handlers)(struct CharDriverState *chr, + bool poll_out); void *handler_opaque; void (*chr_send_event)(struct CharDriverState *chr, int event); void (*chr_close)(struct CharDriverState *chr); @@ -69,6 +72,8 @@ struct CharDriverState { char *label; char *filename; int opened; + /* Are we in a blocked state? */ + bool write_blocked; QTAILQ_ENTRY(CharDriverState) next; }; -- 1.7.3.4