diff options
| author | Michael Brown | 2007-04-27 02:02:23 +0200 |
|---|---|---|
| committer | Michael Brown | 2007-04-27 02:02:23 +0200 |
| commit | 1c765b39888c290551c2a4294199db1190164857 (patch) | |
| tree | a66ce7e4df3a6d0871527b88a770ea7e0147e248 /src/include/gpxe | |
| parent | Initial sketch for the generic data-transfer interface. (diff) | |
| download | ipxe-1c765b39888c290551c2a4294199db1190164857.tar.gz ipxe-1c765b39888c290551c2a4294199db1190164857.tar.xz ipxe-1c765b39888c290551c2a4294199db1190164857.zip | |
Added deliver-as-iobuf/deliver-as-raw concepts.
Diffstat (limited to 'src/include/gpxe')
| -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 ); |
