From 69f5b2e8dc2bd756cc0aac21969b2bf683e94302 Mon Sep 17 00:00:00 2001 From: Michael Brown Date: Fri, 24 Jun 2011 19:14:13 +0100 Subject: [PATCH] [int13] Provide a permanently closed window via the control interface Allow objects to support both streaming and block device protocols, by starting streaming data only when the data transfer window opens. Signed-off-by: Michael Brown --- src/arch/i386/interface/pcbios/int13.c | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/src/arch/i386/interface/pcbios/int13.c b/src/arch/i386/interface/pcbios/int13.c index b099958c..8ce77ada 100644 --- a/src/arch/i386/interface/pcbios/int13.c +++ b/src/arch/i386/interface/pcbios/int13.c @@ -1333,6 +1333,20 @@ static void int13_unhook_vector ( void ) { &int13_vector ); } +/** + * Check INT13 emulated drive flow control window + * + * @v int13 Emulated drive + */ +static size_t int13_block_window ( struct int13_drive *int13 __unused ) { + + /* We are never ready to receive data via this interface. + * This prevents objects that support both block and stream + * interfaces from attempting to send us stream data. + */ + return 0; +} + /** * Handle INT 13 emulated drive underlying block device closing * @@ -1357,6 +1371,7 @@ static void int13_block_close ( struct int13_drive *int13, int rc ) { /** INT 13 drive interface operations */ static struct interface_operation int13_block_op[] = { + INTF_OP ( xfer_window, struct int13_drive *, int13_block_window ), INTF_OP ( intf_close, struct int13_drive *, int13_block_close ), };