iPXE
|
I/O buffers. More...
Go to the source code of this file.
Data Structures | |
struct | io_buffer |
A persistent I/O buffer. More... | |
Macros | |
#define | IOB_ZLEN 128 |
Minimum I/O buffer length. More... | |
#define | iob_reserve(iobuf, len) |
#define | iob_push(iobuf, len) |
#define | iob_pull(iobuf, len) |
#define | iob_put(iobuf, len) |
#define | iob_unput(iobuf, len) |
#define | iob_disown(iobuf) |
Disown an I/O buffer. More... | |
Functions | |
FILE_LICENCE (GPL2_OR_LATER_OR_UBDL) | |
static void * | iob_reserve (struct io_buffer *iobuf, size_t len) |
Reserve space at start of I/O buffer. More... | |
static void * | iob_push (struct io_buffer *iobuf, size_t len) |
Add data to start of I/O buffer. More... | |
static void * | iob_pull (struct io_buffer *iobuf, size_t len) |
Remove data from start of I/O buffer. More... | |
static void * | iob_put (struct io_buffer *iobuf, size_t len) |
Add data to end of I/O buffer. More... | |
static void | iob_unput (struct io_buffer *iobuf, size_t len) |
Remove data from end of I/O buffer. More... | |
static void | iob_empty (struct io_buffer *iobuf) |
Empty an I/O buffer. More... | |
static size_t | iob_len (struct io_buffer *iobuf) |
Calculate length of data in an I/O buffer. More... | |
static size_t | iob_headroom (struct io_buffer *iobuf) |
Calculate available space at start of an I/O buffer. More... | |
static size_t | iob_tailroom (struct io_buffer *iobuf) |
Calculate available space at end of an I/O buffer. More... | |
static void | iob_populate (struct io_buffer *iobuf, void *data, size_t len, size_t max_len) |
Create a temporary I/O buffer. More... | |
static __always_inline int | iob_map (struct io_buffer *iobuf, struct dma_device *dma, size_t len, int flags) |
Map I/O buffer for DMA. More... | |
static __always_inline int | iob_map_tx (struct io_buffer *iobuf, struct dma_device *dma) |
Map I/O buffer for transmit DMA. More... | |
static __always_inline int | iob_map_rx (struct io_buffer *iobuf, struct dma_device *dma) |
Map empty I/O buffer for receive DMA. More... | |
static __always_inline physaddr_t | iob_dma (struct io_buffer *iobuf) |
Get I/O buffer DMA address. More... | |
static __always_inline void | iob_unmap (struct io_buffer *iobuf) |
Unmap I/O buffer for DMA. More... | |
struct io_buffer *__malloc | alloc_iob_raw (size_t len, size_t align, size_t offset) |
Allocate I/O buffer with specified alignment and offset. More... | |
struct io_buffer *__malloc | alloc_iob (size_t len) |
Allocate I/O buffer. More... | |
void | free_iob (struct io_buffer *iobuf) |
Free I/O buffer. More... | |
struct io_buffer *__malloc | alloc_rx_iob (size_t len, struct dma_device *dma) |
Allocate and map I/O buffer for receive DMA. More... | |
void | free_rx_iob (struct io_buffer *iobuf) |
Unmap and free I/O buffer for receive DMA. More... | |
void | iob_pad (struct io_buffer *iobuf, size_t min_len) |
Pad I/O buffer. More... | |
int | iob_ensure_headroom (struct io_buffer *iobuf, size_t len) |
Ensure I/O buffer has sufficient headroom. More... | |
struct io_buffer * | iob_concatenate (struct list_head *list) |
Concatenate I/O buffers into a single buffer. More... | |
struct io_buffer * | iob_split (struct io_buffer *iobuf, size_t len) |
Split I/O buffer. More... | |
I/O buffers.
Definition in file iobuf.h.
#define IOB_ZLEN 128 |
Minimum I/O buffer length.
alloc_iob() will round up the allocated length to this size if necessary. This is used on behalf of hardware that is not capable of auto-padding.
#define iob_reserve | ( | iobuf, | |
len | |||
) |
#define iob_push | ( | iobuf, | |
len | |||
) |
#define iob_pull | ( | iobuf, | |
len | |||
) |
#define iob_put | ( | iobuf, | |
len | |||
) |
#define iob_unput | ( | iobuf, | |
len | |||
) |
#define iob_disown | ( | iobuf | ) |
Disown an I/O buffer.
iobuf | I/O buffer |
There are many functions that take ownership of the I/O buffer they are passed as a parameter. The caller should not retain a pointer to the I/O buffer. Use iob_disown() to automatically nullify the caller's pointer, e.g.:
xfer_deliver_iob ( xfer, iob_disown ( iobuf ) );
This will ensure that iobuf is set to NULL for any code after the call to xfer_deliver_iob().
FILE_LICENCE | ( | GPL2_OR_LATER_OR_UBDL | ) |
Reserve space at start of I/O buffer.
iobuf | I/O buffer |
len | Length to reserve |
data | Pointer to new start of buffer |
Definition at line 62 of file iobuf.h.
References io_buffer::data, len, and io_buffer::tail.
Add data to start of I/O buffer.
iobuf | I/O buffer |
len | Length to add |
data | Pointer to new start of buffer |
Definition at line 80 of file iobuf.h.
References io_buffer::data, and len.
Remove data from start of I/O buffer.
iobuf | I/O buffer |
len | Length to remove |
data | Pointer to new start of buffer |
Definition at line 97 of file iobuf.h.
References assert(), io_buffer::data, len, and io_buffer::tail.
Add data to end of I/O buffer.
iobuf | I/O buffer |
len | Length to add |
data | Pointer to newly added space |
Definition at line 115 of file iobuf.h.
References len, and io_buffer::tail.
Remove data from end of I/O buffer.
iobuf | I/O buffer |
len | Length to remove |
Definition at line 132 of file iobuf.h.
References len, and io_buffer::tail.
|
inlinestatic |
Empty an I/O buffer.
iobuf | I/O buffer |
Definition at line 145 of file iobuf.h.
References io_buffer::data, and io_buffer::tail.
Calculate length of data in an I/O buffer.
iobuf | I/O buffer |
len | Length of data in buffer |
Definition at line 155 of file iobuf.h.
References io_buffer::data, and io_buffer::tail.
Referenced by a3c90x_process_tx_packets(), a3c90x_transmit(), acm_control_transmit(), acm_intr_complete(), acm_transmit(), aoe_rx(), aoecmd_rx(), aoecmd_tx(), arbel_fill_mlx_send_wqe(), arbel_fill_rc_send_wqe(), arbel_fill_ud_send_wqe(), arp_rx(), ath5k_tx_processq(), ath5k_txbuf_setup(), ath_tx_send_normal(), ath_tx_setup_buffer(), atl1e_tx_map(), atl_transmit(), axge_in_complete(), axge_intr_complete(), axge_out_transmit(), b44_transmit(), bnxt_add_vlan(), bnxt_tx(), bnxt_tx_adjust_pkt(), bnxt_tx_complete(), ccmp_decrypt(), ccmp_encrypt(), dhcp_deliver(), dhcpv6_rx(), dhcpv6_tx(), dm96xx_in_complete(), dm96xx_intr_complete(), dm96xx_out_transmit(), dns_xfer_deliver(), eapol_eap_rx(), eapol_rx(), ecm_intr_complete(), efab_transmit(), efi_download_deliver_iob(), efi_pxe_udp_read(), efi_snp_receive(), efi_undi_get_status(), efi_usb_async_complete(), efi_usb_sync_transfer(), efx_hunt_build_tx_desc(), efx_hunt_transmit(), ehci_endpoint_message(), ehci_endpoint_stream(), ena_transmit(), eoib_complete_recv(), eoib_duplicate(), eoib_transmit(), eth_pull(), eth_slow_lacp_dump(), eth_slow_marker_dump(), eth_slow_rx(), exanic_transmit(), falcon_build_tx_desc(), fc_els_rx(), fc_ns_query_deliver(), fc_port_deliver(), fcoe_deliver(), fcoe_fip_rx(), fcoe_rx(), fcpcmd_recv_rddata(), fcpcmd_recv_rsp(), fcpcmd_recv_unknown(), fcpcmd_recv_xfer_rdy(), fcpcmd_send_wrdata(), forcedeth_transmit(), fragment_reassemble(), ftp_control_deliver(), gdbudp_recv(), gdbudp_send(), golan_post_send(), gve_poll_rx(), gve_transmit(), hermon_fill_eth_send_wqe(), hermon_fill_mlx_send_wqe(), hermon_fill_rc_send_wqe(), hermon_fill_ud_send_wqe(), http_conn_deliver(), http_rx_chunk_data(), http_rx_linebuf(), http_rx_transfer_identity(), hub_complete(), ib_cmrc_complete_recv(), ib_cmrc_xfer_deliver(), ib_mi_complete_recv(), ib_pull(), ib_push(), icmp_rx_echo_reply(), icmp_rx_echo_request(), icmp_tx_echo(), icmpv4_rx(), icmpv6_rx(), icplus_transmit(), ifec_net_transmit(), igbvf_transmit(), imux_in_complete(), imux_rx_tcp(), imux_tx(), imux_tx_tcp(), intel_transmit(), intelxl_transmit(), iob_concatenate(), iob_map_rx(), iob_map_tx(), iob_pad(), iob_split(), ipair_deliver(), iphone_in_complete(), ipoib_complete_recv(), ipoib_transmit(), ipv4_pshdr_chksum(), ipv4_rx(), ipv4_tx(), ipv6_rx(), ipv6_tx(), iscsi_socket_deliver(), jme_fill_tx_desc(), jme_tx_clean(), legacy_transmit(), linda_post_send(), lldp_rx(), loopback_wait(), mnpnet_transmit(), myri10ge_net_transmit(), myson_transmit(), natsemi_transmit(), ncm_in_complete(), ncm_intr_complete(), ncm_out_transmit(), ndp_rx_neighbour(), ndp_rx_router_advertisement(), net80211_accum_frags(), net80211_ll_pull(), net80211_probe_step(), net80211_rx_frag(), net_poll(), netdev_rx(), netdev_tx(), netfront_transmit(), netvsc_transmit(), nfs_deliver(), nii_transmit(), ntp_deliver(), pcnet32_transmit(), peerblk_deliver(), peerblk_raw_rx(), peerblk_retrieval_rx(), peerdisc_socket_rx(), phantom_refill_rx_ring(), phantom_transmit(), ping_rx(), pinger_deliver(), pnic_transmit(), posix_file_xfer_deliver(), pxe_tftp_xfer_deliver(), pxenv_udp_read(), pxenv_undi_isr(), qib7322_post_send(), rdc_transmit(), read_user(), realtek_transmit(), rhine_transmit(), rndis_rx(), rndis_rx_data(), rndis_rx_initialise(), rndis_rx_message(), rndis_rx_query_oid(), rndis_rx_set_oid(), rndis_rx_status(), rndis_tx_complete_err(), rndis_tx_data(), rndis_tx_defer(), rndis_tx_message(), rtl818x_tx(), shomron_fill_eth_send_wqe(), sis190_transmit(), skge_xmit_frame(), sky2_xmit_frame(), slam_mc_socket_deliver(), slam_pull_header(), slam_pull_value(), slam_socket_deliver(), smsc75xx_in_complete(), smsc75xx_out_transmit(), smsc95xx_in_complete(), smsc95xx_out_transmit(), smscusb_intr_complete(), snpnet_transmit(), srp_login(), srpdev_deliver(), stp_rx(), tcp_process_rx_queue(), tcp_process_tx_queue(), tcp_rx(), tcp_rx_data(), tcp_rx_enqueue(), tcp_xmit_reset(), tcp_xmit_sack(), tftp_rx(), tftp_rx_data(), tg3_transmit(), tg3_tx_complete(), tkip_decrypt(), tkip_encrypt(), tls_cipherstream_deliver(), tls_hmac_list(), tls_new_alert(), tls_new_change_cipher(), tls_new_ciphertext(), tls_new_handshake(), tls_new_record(), tls_new_unknown(), tls_plainstream_deliver(), tls_send_plaintext(), tls_verify_padding(), txnic_send(), udp_rx(), udp_tx(), uhci_endpoint_message(), uhci_endpoint_poll(), uhci_endpoint_stream(), uhci_enqueue(), undinet_poll(), undinet_transmit(), usb_control(), usb_message(), usb_refill_limit(), usb_stream(), usbblk_in_complete(), usbio_bulk_in_poll(), usbio_bulk_out_poll(), usbio_control_poll(), usbio_endpoint_message(), usbio_interrupt_poll(), usbkbd_complete(), velocity_transmit(), virtnet_enqueue_iob(), virtnet_process_rx_packets(), vlan_rx(), vmbus_send_data(), vmxnet3_poll_tx(), vmxnet3_transmit(), vxge_hw_fifo_txdl_buffer_set(), wep_decrypt(), wep_encrypt(), xcm_deliver(), xfer_deliver(), xferbuf_deliver(), xhci_endpoint_message(), and xhci_endpoint_stream().
Calculate available space at start of an I/O buffer.
iobuf | I/O buffer |
len | Length of data available at start of buffer |
Definition at line 165 of file iobuf.h.
References io_buffer::data, and io_buffer::head.
Referenced by eoib_transmit(), fragment_reassemble(), iob_ensure_headroom(), iob_pad(), net80211_probe_step(), and usb_message().
Calculate available space at end of an I/O buffer.
iobuf | I/O buffer |
len | Length of data available at end of buffer |
Definition at line 175 of file iobuf.h.
References io_buffer::end, and io_buffer::tail.
Referenced by alloc_iob_okx(), arbel_complete(), arbel_post_recv(), ath5k_rxbuf_setup(), dhcp_tx(), exanic_poll_rx(), flexboot_nodnic_complete(), flexboot_nodnic_post_recv(), golan_complete(), golan_post_recv(), hermon_complete(), hermon_post_recv(), ib_post_recv(), iob_map_rx(), ipoib_translate_tx_arp(), linda_complete_recv(), linda_post_recv(), netfront_refill_rx(), nii_poll_rx(), qib7322_complete_recv(), qib7322_post_recv(), slam_put_value(), snpnet_poll_rx(), tftp_send_rrq(), tls_cipherstream_deliver(), tls_newdata_process_data(), tls_newdata_process_header(), and undinet_poll().
|
inlinestatic |
Create a temporary I/O buffer.
iobuf | I/O buffer |
data | Data buffer |
len | Length of data |
max_len | Length of buffer |
It is sometimes useful to use the iob_xxx() methods on temporary data buffers.
Definition at line 190 of file iobuf.h.
References data, io_buffer::data, io_buffer::end, io_buffer::head, len, and io_buffer::tail.
Referenced by add_tls(), arbel_fill_mlx_send_wqe(), efi_undi_fill_header(), hermon_fill_mlx_send_wqe(), linda_complete_recv(), linda_post_send(), qib7322_complete_recv(), and qib7322_post_send().
|
inlinestatic |
Map I/O buffer for DMA.
iobuf | I/O buffer |
dma | DMA device |
len | Length to map |
flags | Mapping flags |
rc | Return status code |
Definition at line 226 of file iobuf.h.
References io_buffer::data, dma(), flags, len, io_buffer::map, and virt_to_phys().
Referenced by iob_map_rx(), iob_map_tx(), xhci_endpoint_message(), and xhci_endpoint_stream().
|
inlinestatic |
Map I/O buffer for transmit DMA.
iobuf | I/O buffer |
dma | DMA device |
rc | Return status code |
Definition at line 240 of file iobuf.h.
References dma(), DMA_TX, iob_len(), and iob_map().
Referenced by netdev_tx(), rdc_transmit(), and realtek_transmit().
|
inlinestatic |
Map empty I/O buffer for receive DMA.
iobuf | I/O buffer |
dma | DMA device |
rc | Return status code |
Definition at line 252 of file iobuf.h.
References assert(), dma(), DMA_RX, iob_len(), iob_map(), and iob_tailroom().
Referenced by alloc_rx_iob().
|
inlinestatic |
Get I/O buffer DMA address.
iobuf | I/O buffer |
addr | DMA address |
Definition at line 264 of file iobuf.h.
References io_buffer::data, dma(), and io_buffer::map.
Referenced by atl_rx_ring_fill(), atl_transmit(), intel_refill_rx(), intel_transmit(), intelxl_refill_rx(), intelxl_transmit(), rdc_refill_rx(), rdc_transmit(), realtek_refill_rx(), realtek_transmit(), virtnet_enqueue_iob(), xhci_endpoint_message(), and xhci_endpoint_stream().
|
inlinestatic |
Unmap I/O buffer for DMA.
iobuf | I/O buffer |
dma | DMA device |
rc | Return status code |
Definition at line 275 of file iobuf.h.
References dma_unmap(), and io_buffer::map.
Referenced by alloc_rx_iob(), free_rx_iob(), net_discard(), netdev_rx(), netdev_rx_err(), netdev_tx_err(), xhci_endpoint_close(), xhci_endpoint_message(), xhci_endpoint_stream(), and xhci_transfer().
Allocate I/O buffer with specified alignment and offset.
len | Required length of buffer |
align | Physical alignment |
offset | Offset from physical alignment |
iobuf | I/O buffer, or NULL if none available |
align
will be rounded up to the nearest power of two.
Definition at line 48 of file iobuf.c.
References align, assert(), data, io_buffer::data, io_buffer::end, fls, free_phys(), io_buffer::head, len, malloc(), malloc_phys_offset(), io_buffer::map, memset(), NULL, offset, and io_buffer::tail.
Referenced by alloc_iob(), alloc_iob_fail_okx(), alloc_iob_okx(), ath_rx_init(), ath_rx_tasklet(), iob_concatenate(), ipoib_alloc_iob(), and tls_newdata_process_header().
Allocate I/O buffer.
len | Required length of buffer |
iobuf | I/O buffer, or NULL if none available |
The I/O buffer will be physically aligned on its own size (rounded up to the nearest power of two).
Definition at line 129 of file iobuf.c.
References alloc_iob_raw(), IOB_ZLEN, and len.
Referenced by a3c90x_refill_rx_ring(), acm_control_receive(), alloc_rx_iob(), aoecmd_tx(), arp_tx_request(), ath5k_rx_iob_alloc(), atl1e_clean_rx_irq(), axge_in_complete(), b44_init_rx_ring(), b44_rx_refill(), bnxt_alloc_rx_iob(), ccmp_decrypt(), ccmp_encrypt(), eapol_tx(), efab_fill_rx_queue(), efi_snp_transmit(), efi_usb_sync_transfer(), efx_hunt_rxq_fill(), ena_refill_rx(), eoib_duplicate(), exanic_poll_rx(), fcoe_alloc_iob(), fcoe_fip_tx_keepalive(), fcoe_fip_tx_solicitation(), fcoe_fip_tx_vlan(), fragment_reassemble(), gdbudp_send(), gve_poll_rx(), http_rx_chunk_data(), http_tx_request(), hunt_mcdi_init(), ib_mi_send(), icplus_refill_rx(), ifec_get_rx_desc(), igbvf_refill_rx_ring(), igbvf_setup_rx_resources(), imux_alloc_iob(), imux_tx_syn(), imux_tx_version(), iob_split(), jme_make_new_rx_buf(), legacy_poll(), loopback_test(), mnpnet_poll_rx(), myri10ge_net_open(), myri10ge_net_poll(), myson_refill_rx(), natsemi_refill_rx(), ncm_in_complete(), ndp_tx_ll_addr(), net80211_accum_frags(), net80211_probe_start(), net80211_probe_step(), net80211_send_assoc(), net80211_send_auth(), net80211_send_disassoc(), netfront_refill_rx(), nii_poll_rx(), nv_alloc_rx(), oncrpc_call(), pcnet32_refill_rx_ring(), phantom_refill_rx_ring(), ping_alloc_iob(), pnic_poll(), pxenv_undi_transmit(), realtek_legacy_poll_rx(), rhine_refill_rx(), rndis_alloc_iob(), rtl818x_handle_rx(), rtl818x_init_rx_ring(), sis190_alloc_rx_iob(), skge_rx_refill(), sky2_rx_alloc(), snpnet_poll_rx(), tcp_xmit_reset(), tcp_xmit_sack(), tg3_alloc_rx_iob(), tkip_decrypt(), tkip_encrypt(), txnic_refill_rq(), udp_xfer_alloc_iob(), undinet_poll(), usb_control(), usb_prefill(), usb_refill_limit(), usbblk_out_command(), usbblk_out_data(), velocity_refill_rx(), vmbus_xfer_page_iobufs(), vmxnet3_refill_rx(), vxge_hw_ring_replenish(), vxge_hw_vpath_poll_rx(), wep_decrypt(), wep_encrypt(), wpa_alloc_frame(), and xfer_alloc_iob().
void free_iob | ( | struct io_buffer * | iobuf | ) |
Free I/O buffer.
iobuf | I/O buffer |
Definition at line 146 of file iobuf.c.
References assert(), io_buffer::data, dma_mapped(), io_buffer::end, free, free_phys(), io_buffer::head, len, io_buffer::map, and io_buffer::tail.
Referenced by __vxge_hw_ring_delete(), a3c90x_free_rx_iobuf(), acm_control_receive(), acm_in_complete(), acm_intr_complete(), alloc_iob_okx(), alloc_rx_iob(), aoe_rx(), aoecmd_rx(), arp_rx(), ath5k_rxbuf_free(), ath9k_stop(), ath9k_tx(), ath_rx_cleanup(), axge_in_complete(), axge_intr_complete(), b44_free_rx_ring(), b44_rx_refill(), bnxt_free_rx_iob(), ccmp_decrypt(), dhcp_deliver(), dhcp_tx(), dhcpv6_rx(), dm96xx_in_complete(), dm96xx_intr_complete(), dns_xfer_deliver(), eapol_eap_rx(), eapol_key_rx(), eapol_rx(), ecm_in_complete(), ecm_intr_complete(), efab_free_resources(), efab_receive(), efi_download_deliver_iob(), efi_local_step(), efi_pxe_udp_close(), efi_pxe_udp_deliver(), efi_pxe_udp_read(), efi_pxe_udp_write(), efi_snp_flush(), efi_snp_receive(), efi_snp_transmit(), efi_usb_async_complete(), efi_usb_sync_transfer(), efx_hunt_close(), ena_empty_rx(), eoib_heartbeat_rx(), eth_slow_marker_rx(), eth_slow_rx(), fc_els_rx(), fc_ns_query_deliver(), fc_port_deliver(), fc_xchg_rx(), fc_xchg_tx(), fcoe_deliver(), fcoe_fip_rx(), fcoe_rx(), fcpcmd_recv_rddata(), fcpcmd_recv_rsp(), fcpcmd_recv_unknown(), fcpcmd_recv_xfer_rdy(), fragment_expired(), fragment_reassemble(), free_rx_iob(), free_tls(), ftp_control_deliver(), gdbudp_recv(), http_conn_deliver(), http_content_deliver(), http_tx_request(), hunt_mcdi_fini(), ib_cmrc_complete_recv(), ib_cmrc_complete_send(), ib_cmrc_xfer_deliver(), ib_complete_recv(), ib_complete_send(), ib_mi_complete_recv(), ib_mi_send(), ib_refill_recv(), icmp_rx_echo_reply(), icmp_rx_echo_request(), icmp_tx_echo_request(), icmpv4_rx(), icmpv6_rx(), icplus_close(), ifec_free(), igbvf_free_rx_resources(), imux_in_complete(), imux_out_complete(), imux_rx_tcp(), imux_tx(), iob_concatenate(), ipair_deliver(), iphone_in_complete(), ipv4_rx(), ipv4_tx(), ipv6_rx(), ipv6_tx(), iscsi_socket_deliver(), jme_free_rx_buf(), legacy_poll(), lldp_rx(), loopback_wait(), lotest_flush(), lotest_rx(), myri10ge_net_close(), myri10ge_net_open(), myson_close(), natsemi_close(), ncm_intr_complete(), ndp_rx_neighbour(), ndp_rx_router_advertisement(), net80211_free_frags(), net80211_free_wlan(), net80211_handle_mgmt(), net80211_probe_finish_all(), net80211_probe_finish_best(), net80211_probe_step(), net80211_rx(), net80211_rx_frag(), net80211_tx_mgmt(), net_discard(), net_poll(), net_rx(), netdev_rx_err(), netdev_tx_err(), netfront_close(), netfront_discard(), netvsc_recv_data(), nfs_deliver(), nfs_mount_deliver(), nfs_pm_deliver(), nii_close(), ntp_deliver(), nv_free_rxtx_resources(), pcnet32_free_rx_resources(), peerblk_deliver(), peerblk_raw_rx(), peerblk_retrieval_rx(), peerdisc_socket_rx(), phantom_close(), ping_rx(), pinger_deliver(), posix_file_free(), posix_file_xfer_deliver(), pxe_tftp_xfer_deliver(), pxe_udp_deliver(), pxe_udp_discard(), pxenv_udp_close(), pxenv_udp_read(), pxenv_undi_isr(), pxenv_undi_transmit(), rarp_rx(), read_user(), rhine_close(), rndis_rx_initialise(), rndis_rx_query_oid(), rndis_rx_set_oid(), rndis_rx_status(), rndis_tx_complete_err(), rndis_tx_halt(), rndis_tx_initialise(), rndis_tx_oid(), rtl818x_free_rx_ring(), sis190_free(), skge_rx_clean(), sky2_rx_clean(), slam_mc_socket_deliver(), slam_socket_deliver(), slam_tx_nack(), smsc75xx_in_complete(), smsc95xx_in_complete(), smscusb_intr_complete(), snpnet_close(), srpdev_deliver(), stp_rx(), tcp_close(), tcp_discard(), tcp_process_tx_queue(), tcp_rx(), tcp_rx_data(), tcp_rx_enqueue(), tcpip_rx(), tcpip_tx(), tftp_rx(), tftp_rx_data(), tg3_rx_iob_free(), tkip_decrypt(), tls_cipherstream_deliver(), tls_new_record(), tls_newdata_process_header(), tls_plainstream_deliver(), tls_send_plaintext(), txnic_destroy_rq(), udp_rx(), udp_tx(), unregister_usb(), usb_control(), usb_flush(), usbblk_in_complete(), usbblk_out_command(), usbblk_out_complete(), usbblk_out_data(), velocity_close(), vlan_rx(), vmbus_xfer_page_iobufs(), vxge_hw_ring_replenish(), wep_decrypt(), xcm_deliver(), xfer_deliver(), and xferbuf_deliver().
struct io_buffer* __malloc alloc_rx_iob | ( | size_t | len, |
struct dma_device * | dma | ||
) |
Allocate and map I/O buffer for receive DMA.
len | Length of I/O buffer |
dma | DMA device |
iobuf | I/O buffer, or NULL on error |
Definition at line 181 of file iobuf.c.
References alloc_iob(), dma(), free_iob(), iob_map_rx(), iob_unmap(), len, NULL, and rc.
Referenced by atl_rx_ring_fill(), intel_refill_rx(), intelxl_refill_rx(), rdc_refill_rx(), realtek_refill_rx(), and virtnet_refill_rx_virtqueue().
void free_rx_iob | ( | struct io_buffer * | iobuf | ) |
Unmap and free I/O buffer for receive DMA.
iobuf | I/O buffer |
Definition at line 208 of file iobuf.c.
References free_iob(), and iob_unmap().
Referenced by intel_empty_rx(), intelxl_empty_rx(), rdc_close(), realtek_close(), and virtnet_close().
Pad I/O buffer.
iobuf | I/O buffer |
min_len | Minimum length |
This function pads and aligns I/O buffers, for devices that aren't capable of padding in hardware, or that require specific alignment in TX buffers. The packet data will end up aligned to a multiple of IOB_ALIGN
.
min_len
must not exceed
IOB_ZLEN. |
Definition at line 49 of file iobpad.c.
References assert(), data, io_buffer::data, iob_headroom(), iob_len(), iob_push, iob_put, iob_unput, IOB_ZLEN, len, memmove(), memset(), and pad_len.
Referenced by bnxt_tx_adjust_pkt(), eoib_transmit(), forcedeth_transmit(), legacy_transmit(), myri10ge_net_transmit(), nii_transmit(), pnic_transmit(), rdc_transmit(), realtek_transmit(), rhine_transmit(), sis190_transmit(), snpnet_transmit(), tg3_transmit(), and velocity_transmit().
Ensure I/O buffer has sufficient headroom.
iobuf | I/O buffer |
len | Required headroom |
This function currently only checks for the required headroom; it does not reallocate the I/O buffer if required. If we ever have a code path that requires this functionality, it's a fairly trivial change to make.
Definition at line 228 of file iobuf.c.
References ENOBUFS, iob_headroom(), and len.
Referenced by axge_out_transmit(), dm96xx_out_transmit(), efi_pxe_udp_deliver(), ncm_out_transmit(), pxe_udp_deliver(), smsc75xx_out_transmit(), smsc95xx_out_transmit(), and udp_tx().
Concatenate I/O buffers into a single buffer.
list | List of I/O buffers |
iobuf | Concatenated I/O buffer, or NULL on allocation failure |
After a successful concatenation, the list will be empty.
Definition at line 243 of file iobuf.c.
References alloc_iob_raw(), io_buffer::data, free_iob(), INIT_LIST_HEAD, iob_len(), iob_put, len, io_buffer::list, list_del, list_first_entry, list_for_each_entry, list_for_each_entry_safe, list_is_singular, memcpy(), NULL, and tmp.
Referenced by netfront_poll_rx(), and tls_new_record().
Split I/O buffer.
iobuf | I/O buffer |
len | Length to split into a new I/O buffer |
split | New I/O buffer, or NULL on allocation failure |
Split the first len
bytes of the existing I/O buffer into a separate I/O buffer. The resulting buffers are likely to have no headroom or tailroom.
If this call fails, then the original buffer will be unmodified.
Definition at line 291 of file iobuf.c.
References alloc_iob(), assert(), io_buffer::data, iob_len(), iob_pull, iob_put, len, memcpy(), and NULL.