diff options
Diffstat (limited to 'src/include')
| -rw-r--r-- | src/include/gpxe/xfer.h | 34 |
1 files changed, 33 insertions, 1 deletions
diff --git a/src/include/gpxe/xfer.h b/src/include/gpxe/xfer.h index 0e577e933..7a10b860b 100644 --- a/src/include/gpxe/xfer.h +++ b/src/include/gpxe/xfer.h @@ -18,13 +18,32 @@ struct xfer_interface_operations { /** Deliver datagram * * @v xfer Data-transfer interface - * @v src Source interface + * @v src Source interface * @v iobuf Datagram I/O buffer * @ret rc Return status code + * + * A data transfer interface that wishes to support only raw + * data delivery should set this method to + * deliver_as_raw(). */ int ( * deliver ) ( struct xfer_interface *xfer, struct xfer_interface *src, struct io_buffer *iobuf ); + /** Deliver datagram as raw data + * + * @v xfer Data-transfer interface + * @v src Source interface + * @v data Data buffer + * @v len Length of data buffer + * @ret rc Return status code + * + * A data transfer interface that wishes to support only I/O + * buffer delivery should set this method to + * deliver_as_iobuf(). + */ + int ( * deliver_raw ) ( struct xfer_interface *xfer, + struct xfer_interface *src, + const void *data, size_t len ); }; /** A data transfer interface */ @@ -38,6 +57,19 @@ struct xfer_interface { extern struct xfer_interface null_xfer; extern struct xfer_interface_operations null_xfer_ops; +extern int deliver_as_raw ( struct xfer_interface *xfer, + struct xfer_interface *src, + struct io_buffer *iobuf ); +extern int deliver_as_iobuf ( struct xfer_interface *xfer, + struct xfer_interface *src, + const void *data, size_t len ); + +/** + * Get destination 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 ); |
