|
iPXE
|
Data transfer buffers. More...
Go to the source code of this file.
Data Structures | |
| struct | xfer_buffer |
| A data transfer buffer. More... | |
| struct | xfer_buffer_operations |
| Data transfer buffer operations. More... | |
Macros | |
| #define | xfer_buffer_TYPE(object_type) |
Functions | |
| FILE_LICENCE (GPL2_OR_LATER_OR_UBDL) | |
| FILE_SECBOOT (PERMITTED) | |
| static void | xferbuf_malloc_init (struct xfer_buffer *xferbuf) |
| Initialise malloc()-based data transfer buffer. | |
| static void | xferbuf_umalloc_init (struct xfer_buffer *xferbuf) |
| Initialise umalloc()-based data transfer buffer. | |
| static void | xferbuf_fixed_init (struct xfer_buffer *xferbuf, void *data, size_t len) |
| Initialise fixed-size data transfer buffer. | |
| static void | xferbuf_void_init (struct xfer_buffer *xferbuf) |
| Initialise void data transfer buffer. | |
| static void | xferbuf_image_init (struct xfer_buffer *xferbuf, struct image *image) |
| Initialise image-based data transfer buffer. | |
| void | xferbuf_free (struct xfer_buffer *xferbuf) |
| Free data transfer buffer. | |
| int | xferbuf_write (struct xfer_buffer *xferbuf, size_t offset, const void *data, size_t len) |
| Write to data transfer buffer. | |
| int | xferbuf_read (struct xfer_buffer *xferbuf, size_t offset, void *data, size_t len) |
| Read from data transfer buffer. | |
| int | xferbuf_deliver (struct xfer_buffer *xferbuf, struct io_buffer *iobuf, struct xfer_metadata *meta) |
| Add received data to data transfer buffer. | |
| struct xfer_buffer * | xfer_buffer (struct interface *intf) |
| Get underlying data transfer buffer. | |
Variables | |
| struct xfer_buffer_operations | xferbuf_malloc_operations |
| malloc()-based data buffer operations | |
| struct xfer_buffer_operations | xferbuf_umalloc_operations |
| umalloc()-based data buffer operations | |
| struct xfer_buffer_operations | xferbuf_fixed_operations |
| Fixed-size data buffer operations. | |
| struct xfer_buffer_operations | xferbuf_void_operations |
| Void data buffer operations. | |
| struct xfer_buffer_operations | xferbuf_image_operations |
| Image-based data buffer operations. | |
Data transfer buffers.
Definition in file xferbuf.h.
| #define xfer_buffer_TYPE | ( | object_type | ) |
Definition at line 138 of file xferbuf.h.
Referenced by xfer_buffer().
| FILE_LICENCE | ( | GPL2_OR_LATER_OR_UBDL | ) |
| FILE_SECBOOT | ( | PERMITTED | ) |
|
inlinestatic |
Initialise malloc()-based data transfer buffer.
| xferbuf | Data transfer buffer |
Data will be automatically allocated using malloc().
Definition at line 66 of file xferbuf.h.
References xfer_buffer::op, and xferbuf_malloc_operations.
Referenced by create_validator(), and peerblk_open().
|
inlinestatic |
Initialise umalloc()-based data transfer buffer.
| xferbuf | Data transfer buffer |
Data will be automatically allocated using umalloc() (and may therefore alter the system memory map).
Definition at line 79 of file xferbuf.h.
References xfer_buffer::op, and xferbuf_umalloc_operations.
Referenced by peermux_filter().
|
inlinestatic |
Initialise fixed-size data transfer buffer.
Data will be never be automatically allocated.
Definition at line 93 of file xferbuf.h.
References data, xfer_buffer::data, len, xfer_buffer::len, xfer_buffer::op, and xferbuf_fixed_operations.
Referenced by atacmd_data_buffer(), atacmd_data_priv(), block_translate(), efi_pxe_mtftp(), scsicmd_read_capacity_cmd(), scsicmd_read_cmd(), and scsicmd_write_cmd().
|
inlinestatic |
Initialise void data transfer buffer.
| xferbuf | Data transfer buffer |
No data will be allocated, but the length will be recorded. This can be used to capture xfer_seek() results.
Definition at line 108 of file xferbuf.h.
References xfer_buffer::op, and xferbuf_void_operations.
Referenced by atacmd_data_none(), block_translate(), efi_pxe_mtftp(), and scsicmd_command().
|
inlinestatic |
Initialise image-based data transfer buffer.
| xferbuf | Data transfer buffer |
| image | Backing (empty) image |
The data transfer buffer does not retain a separate reference to the image. The caller must ensure that the image remains in scope for the lifetime of the data transfer buffer.
Definition at line 123 of file xferbuf.h.
References xfer_buffer::data, xfer_buffer::op, and xferbuf_image_operations.
Referenced by create_downloader().
|
extern |
Free data transfer buffer.
| xferbuf | Data transfer buffer |
Definition at line 88 of file xferbuf.c.
References xfer_buffer::len, xfer_buffer::max, xfer_buffer::op, xfer_buffer::pos, and xfer_buffer_operations::realloc.
Referenced by peerblk_reset(), peermux_free(), validator_free(), and validator_xfer_close().
|
extern |
Write to data transfer buffer.
Definition at line 133 of file xferbuf.c.
References xfer_buffer_operations::access, data, EOVERFLOW, len, memcpy(), offset, xfer_buffer::op, profile_start(), profile_stop(), raw, rc, and xferbuf_ensure_size().
Referenced by aoecmd_ata_rsp(), fcpcmd_recv_rddata(), iscsi_rx_data_in(), peerblk_decrypt_write(), peerblk_retrieval_rx(), usbblk_in_data(), and xferbuf_deliver().
|
extern |
Read from data transfer buffer.
Definition at line 166 of file xferbuf.c.
References xfer_buffer_operations::access, data, ENOENT, ENOTTY, len, xfer_buffer::len, memcpy(), offset, xfer_buffer::op, profile_start(), profile_stop(), and raw.
Referenced by aoecmd_ata_cmd(), fcpcmd_send_wrdata(), iscsi_tx_data_out(), peerblk_decrypt_read(), and usbblk_out_data().
|
extern |
Add received data to data transfer buffer.
| xferbuf | Data transfer buffer |
| iobuf | I/O buffer |
| meta | Data transfer metadata |
| rc | Return status code |
Definition at line 198 of file xferbuf.c.
References io_buffer::data, done, free_iob(), iob_len(), len, meta, xfer_buffer::pos, profile_start(), profile_stop(), rc, XFER_FL_ABS_OFFSET, and xferbuf_write().
Referenced by blktrans_deliver(), downloader_deliver(), efi_pxe_tftp_deliver(), peermux_info_deliver(), and validator_xfer_deliver().
|
extern |
Get underlying data transfer buffer.
| interface | Data transfer interface |
| xferbuf | Data transfer buffer, or NULL on error |
This call will check that the xfer_buffer() handler belongs to the destination interface which also provides xfer_deliver() for this interface.
This is done to prevent accidental accesses to a data transfer buffer which may be located behind a non-transparent datapath via a series of pass-through interfaces.
Definition at line 380 of file xferbuf.c.
References dest, interface::intf, intf_get_dest_op, intf_object(), intf_put(), NULL, op, xfer_buffer_TYPE, and xfer_deliver().
Referenced by http_content_buffer(), peerblk_decrypt(), and peermux_block_buffer().
|
extern |
malloc()-based data buffer operations
Definition at line 255 of file xferbuf.c.
Referenced by xferbuf_malloc_init().
|
extern |
umalloc()-based data buffer operations
Definition at line 278 of file xferbuf.c.
Referenced by xferbuf_umalloc_init().
|
extern |
Fixed-size data buffer operations.
Definition at line 304 of file xferbuf.c.
Referenced by xferbuf_fixed_init().
|
extern |
Void data buffer operations.
Definition at line 325 of file xferbuf.c.
Referenced by xferbuf_void_init().
|
extern |
Image-based data buffer operations.
Definition at line 361 of file xferbuf.c.
Referenced by xferbuf_image_init().