diff options
author | Michael Brown | 2007-07-08 15:11:07 +0200 |
---|---|---|
committer | Michael Brown | 2007-07-08 15:11:07 +0200 |
commit | b34d4d044978714abe771ca8d7d07153ad048d82 (patch) | |
tree | 017d6c4e37f0bc49df6ae461074a41691e08013f /src/core/xfer.c | |
parent | Kill off unused request() method in data-xfer interface. (diff) | |
download | ipxe-b34d4d044978714abe771ca8d7d07153ad048d82.tar.gz ipxe-b34d4d044978714abe771ca8d7d07153ad048d82.tar.xz ipxe-b34d4d044978714abe771ca8d7d07153ad048d82.zip |
Separate the "is data ready" function of xfer_seek() into an
xfer_window() function, which can return a scalar rather than a
boolean.
Diffstat (limited to 'src/core/xfer.c')
-rw-r--r-- | src/core/xfer.c | 43 |
1 files changed, 43 insertions, 0 deletions
diff --git a/src/core/xfer.c b/src/core/xfer.c index 3e55ebaf..3e6b7eb6 100644 --- a/src/core/xfer.c +++ b/src/core/xfer.c @@ -111,6 +111,22 @@ int xfer_seek ( struct xfer_interface *xfer, off_t offset, int whence ) { } /** + * Check flow control window + * + * @v xfer Data transfer interface + * @ret len Length of window + */ +size_t xfer_window ( struct xfer_interface *xfer ) { + struct xfer_interface *dest = xfer_get_dest ( xfer ); + size_t len; + + len = dest->op->window ( dest ); + + xfer_put ( dest ); + return len; +} + +/** * Test to see if interface is ready to accept data * * @v xfer Data transfer interface @@ -298,6 +314,32 @@ int ignore_xfer_seek ( struct xfer_interface *xfer __unused, } /** + * Unlimited flow control window + * + * @v xfer Data transfer interface + * @ret len Length of window + * + * This handler indicates that the interface is always ready to accept + * data. + */ +size_t unlimited_xfer_window ( struct xfer_interface *xfer __unused ) { + return ~( ( size_t ) 0 ); +} + +/** + * No flow control window + * + * @v xfer Data transfer interface + * @ret len Length of window + * + * This handler indicates that the interface is never ready to accept + * data. + */ +size_t no_xfer_window ( struct xfer_interface *xfer __unused ) { + return 0; +} + +/** * Allocate I/O buffer * * @v xfer Data transfer interface @@ -374,6 +416,7 @@ struct xfer_interface_operations null_xfer_ops = { .close = ignore_xfer_close, .vredirect = ignore_xfer_vredirect, .seek = ignore_xfer_seek, + .window = unlimited_xfer_window, .alloc_iob = default_xfer_alloc_iob, .deliver_iob = xfer_deliver_as_raw, .deliver_raw = ignore_xfer_deliver_raw, |