From 280160139db49150becf60d5aeae8dda614a9fbd Mon Sep 17 00:00:00 2001 From: Michael Brown Date: Sun, 29 Apr 2007 02:03:58 +0000 Subject: Add seek() Dehyphenate "data-transfer". --- src/include/gpxe/open.h | 4 +-- src/include/gpxe/xfer.h | 70 +++++++++++++++++++++++++++++++++++++++---------- 2 files changed, 58 insertions(+), 16 deletions(-) (limited to 'src/include') diff --git a/src/include/gpxe/open.h b/src/include/gpxe/open.h index 8839dc28a..ad86d0951 100644 --- a/src/include/gpxe/open.h +++ b/src/include/gpxe/open.h @@ -41,7 +41,7 @@ struct uri_opener { const char *scheme; /** Open URI * - * @v xfer Data-transfer interface + * @v xfer Data transfer interface * @v uri URI * @ret rc Return status code * @@ -62,7 +62,7 @@ struct socket_opener { int type; /** Open socket * - * @v xfer Data-transfer interface + * @v xfer Data transfer interface * @v sa Socket address * @ret rc Return status code */ diff --git a/src/include/gpxe/xfer.h b/src/include/gpxe/xfer.h index 0b8bf4ce5..dfbde89d0 100644 --- a/src/include/gpxe/xfer.h +++ b/src/include/gpxe/xfer.h @@ -32,22 +32,29 @@ struct xfer_interface_operations { /** Close interface * - * @v xfer Data-transfer interface + * @v xfer Data transfer interface * @v rc Reason for close */ void ( * close ) ( struct xfer_interface *xfer, int rc ); /** Redirect to new location * - * @v xfer Data-transfer interface + * @v xfer Data transfer interface * @v type New location type * @v args Remaining arguments depend upon location type * @ret rc Return status code */ int ( * vredirect ) ( struct xfer_interface *xfer, int type, va_list args ); + /** Seek to position + * + * @v xfer Data transfer interface + * @v pos New position + * @ret rc Return status code + */ + int ( * seek ) ( struct xfer_interface *xfer, size_t pos ); /** Deliver datagram * - * @v xfer Data-transfer interface + * @v xfer Data transfer interface * @v iobuf Datagram I/O buffer * @ret rc Return status code * @@ -59,7 +66,7 @@ struct xfer_interface_operations { struct io_buffer *iobuf ); /** Deliver datagram as raw data * - * @v xfer Data-transfer interface + * @v xfer Data transfer interface * @v data Data buffer * @v len Length of data buffer * @ret rc Return status code @@ -83,32 +90,67 @@ struct xfer_interface { extern struct xfer_interface null_xfer; extern struct xfer_interface_operations null_xfer_ops; +extern void close ( struct xfer_interface *xfer, int rc ); +extern int seek ( struct xfer_interface *xfer, size_t pos ); extern int vredirect ( struct xfer_interface *xfer, int type, va_list args ); extern int redirect ( struct xfer_interface *xfer, int type, ... ); extern int deliver ( struct xfer_interface *xfer, struct io_buffer *iobuf ); extern int deliver_raw ( struct xfer_interface *xfer, const void *data, size_t len ); +extern void ignore_close ( struct xfer_interface *xfer, int rc ); +extern int ignore_vredirect ( struct xfer_interface *xfer, + int type, va_list args ); +extern int ignore_seek ( struct xfer_interface *xfer, size_t pos ); extern int deliver_as_raw ( struct xfer_interface *xfer, struct io_buffer *iobuf ); extern int deliver_as_iobuf ( struct xfer_interface *xfer, const void *data, size_t len ); +extern int ignore_deliver_raw ( struct xfer_interface *xfer, + const void *data __unused, size_t len ); + +/** + * Initialise a data transfer interface + * + * @v xfer Data transfer interface + * @v op Data transfer interface operations + * @v refcnt Data transfer interface reference counting method + */ +static inline void xfer_init ( struct xfer_interface *xfer, + struct xfer_interface_operations *op, + void ( * refcnt ) ( struct interface *intf, + int delta ) ) { + xfer->intf.dest = &null_xfer.intf; + xfer->intf.refcnt = refcnt; + xfer->op = op; +} + +/** + * Get data transfer interface from generic object communication interface + * + * @v intf Generic object communication interface + * @ret xfer Data transfer interface + */ +static inline struct xfer_interface * +intf_to_xfer ( struct interface *intf ) { + return container_of ( intf, struct xfer_interface, intf ); +} /** - * Get destination data-transfer interface + * Get destination data transfer interface * - * @v xfer Data-transfer interface + * @v xfer Data transfer interface * @ret dest Destination interface */ static inline struct xfer_interface * xfer_dest ( struct xfer_interface *xfer ) { - return container_of ( xfer->intf.dest, struct xfer_interface, intf ); + return intf_to_xfer ( xfer->intf.dest ); } /** - * Plug a data-transfer interface into a new destination interface + * Plug a data transfer interface into a new destination interface * - * @v xfer Data-transfer interface + * @v xfer Data transfer interface * @v dest New destination interface */ static inline void xfer_plug ( struct xfer_interface *xfer, @@ -117,23 +159,23 @@ static inline void xfer_plug ( struct xfer_interface *xfer, } /** - * Unplug a data-transfer interface + * Unplug a data transfer interface * - * @v xfer Data-transfer interface + * @v xfer Data transfer interface */ static inline void xfer_unplug ( struct xfer_interface *xfer ) { plug ( &xfer->intf, &null_xfer.intf ); } /** - * Terminate a data-transfer interface + * Stop using a data transfer interface * - * @v xfer Data-transfer interface + * @v xfer Data transfer interface * * After calling this method, no further messages will be received via * the interface. */ -static inline void xfer_terminate ( struct xfer_interface *xfer ) { +static inline void xfer_nullify ( struct xfer_interface *xfer ) { xfer->op = &null_xfer_ops; }; -- cgit v1.2.3-55-g7522