|
iPXE
|
Virtual I/O network device. More...
#include <stdint.h>#include <string.h>#include <unistd.h>#include <errno.h>#include <byteswap.h>#include <ipxe/netdevice.h>#include <ipxe/ethernet.h>#include <ipxe/if_ether.h>#include <ipxe/iobuf.h>#include <ipxe/malloc.h>#include <ipxe/pci.h>#include "virtio-net.h"Go to the source code of this file.
Functions | |
| FILE_LICENCE (GPL2_OR_LATER_OR_UBDL) | |
| FILE_SECBOOT (PERMITTED) | |
| static void | virtio_net_mac (struct net_device *netdev) |
| Get MAC address. | |
| static void | virtio_net_mtu (struct net_device *netdev) |
| Get MTU. | |
| static int | virtio_net_enable (struct virtio_net *vnet, struct virtio_net_queue *queue) |
| Enable queue. | |
| static void | virtio_net_submit (struct virtio_net *vnet, struct virtio_net_queue *queue, struct io_buffer *iobuf, size_t len) |
| Submit I/O buffer to queue. | |
| static struct io_buffer * | virtio_net_complete (struct virtio_net *vnet, struct virtio_net_queue *queue, size_t *len) |
| Complete I/O buffer. | |
| static void | virtio_net_refill_rx (struct virtio_net *vnet) |
| Refill receive queue. | |
| static int | virtio_net_open (struct net_device *netdev) |
| Open network device. | |
| static void | virtio_net_close (struct net_device *netdev) |
| Close network device. | |
| static int | virtio_net_transmit (struct net_device *netdev, struct io_buffer *iobuf) |
| Transmit packet. | |
| static void | virtio_net_poll_tx (struct net_device *netdev) |
| Poll for completed packets. | |
| static void | virtio_net_poll_rx (struct net_device *netdev) |
| Poll for received packets. | |
| static void | virtio_net_poll (struct net_device *netdev) |
| Poll for completed and received packets. | |
| static int | virtio_net_probe (struct pci_device *pci) |
| Probe PCI device. | |
| static void | virtio_net_remove (struct pci_device *pci) |
| Remove PCI device. | |
Variables | |
| const struct virtio_features | virtio_net_features |
| Supported features. | |
| static struct net_device_operations | virtio_net_operations |
| Virtio network device operations. | |
| static struct pci_device_id | virtio_net_ids [] |
| Virtio network PCI device IDs. | |
| struct pci_driver virtio_net_driver | __pci_driver |
| Virtio network PCI driver. | |
Virtual I/O network device.
Definition in file virtio-net.c.
| FILE_LICENCE | ( | GPL2_OR_LATER_OR_UBDL | ) |
| FILE_SECBOOT | ( | PERMITTED | ) |
|
static |
Get MAC address.
| netdev | Network device |
Definition at line 68 of file virtio-net.c.
References DBGC, virtio_device::device, ETH_ALEN, eth_random_addr(), virtio_device::features, ioread8, is_valid_ether_addr(), virtio_device::name, netdev, virtio_net::virtio, VIRTIO_FEAT0_NET_MAC, VIRTIO_NET_MAC, and virtio_features::word.
Referenced by virtio_net_probe().
|
static |
Get MTU.
| netdev | Network device |
Definition at line 94 of file virtio-net.c.
References DBGC, virtio_device::device, ETH_HLEN, virtio_device::features, ioread16, virtio_device::name, netdev, virtio_net::virtio, VIRTIO_FEAT0_NET_MTU, VIRTIO_NET_MTU, and virtio_features::word.
Referenced by virtio_net_probe().
|
static |
Enable queue.
| vnet | Virtio network device |
| queue | Virtio network queue |
| rc | Return status code |
Definition at line 123 of file virtio-net.c.
References count, cpu_to_le16, cpu_to_le32, cpu_to_le64, DBGC, desc, dma(), virtio_device::dma, dma_unmap(), fill, virtio_net::hlen, index, max, virtio_device::name, NULL, queue, rc, slot, strerror(), virtio_net::virtio, VIRTIO_DESC_FL_NEXT, virtio_enable(), VIRTIO_NET_DESCS, and write.
Referenced by virtio_net_open().
|
static |
Submit I/O buffer to queue.
Definition at line 195 of file virtio-net.c.
References assert, cpu_to_le32, cpu_to_le64, io_buffer::data, DBGC2, desc, index, iob_dma(), len, virtio_device::name, NULL, queue, slot, virtio_net::virtio, VIRTIO_NET_DESCS, and virtio_submit().
Referenced by virtio_net_refill_rx(), and virtio_net_transmit().
|
static |
Complete I/O buffer.
| vnet | Virtio network device |
| queue | Virtio network queue |
| len | Length to fill in (or NULL to ignore) |
| iobuf | I/O buffer |
Definition at line 234 of file virtio-net.c.
References assert, cons, DBGC2, index, len, virtio_device::name, NULL, queue, slot, virtio_net::virtio, virtio_complete(), and VIRTIO_NET_DESCS.
Referenced by virtio_net_poll_rx(), and virtio_net_poll_tx().
|
static |
Refill receive queue.
| vnet | Virtio network device |
Definition at line 274 of file virtio-net.c.
References alloc_rx_iob(), virtio_device::dma, len, virtio_net::mfs, queue, virtio_net::rx, virtio_net::virtio, virtio_net_submit(), and virtio_notify().
Referenced by virtio_net_open(), and virtio_net_poll().
|
static |
Open network device.
| netdev | Network device |
| rc | Return status code |
Definition at line 307 of file virtio-net.c.
References DBGC, dma_unmap(), ETH_HLEN, hdr, virtio_net_queue::hdr, virtio_net::hlen, virtio_net_queue::map, virtio_net::mfs, virtio_device::name, netdev, virtio_net_queue::queue, rc, virtio_net::rx, strerror(), virtio_net::tx, virtio_net::virtio, virtio_free(), virtio_init(), virtio_is_legacy(), virtio_net_enable(), virtio_net_features, virtio_net_refill_rx(), virtio_reset(), VIRTIO_STAT_DRIVER_OK, and virtio_status().
|
static |
Close network device.
| netdev | Network device |
Definition at line 368 of file virtio-net.c.
References dma_unmap(), free_rx_iob(), virtio_net_queue::hdr, virtio_net_queue::map, netdev, virtio_net_queue::queue, virtio_net::rx, virtio_net::rx_iobufs, virtio_net::tx, virtio_net::virtio, virtio_free(), VIRTIO_NET_RX_MAX, and virtio_reset().
|
static |
Transmit packet.
| netdev | Network device |
| iobuf | I/O buffer |
| rc | Return status code |
Definition at line 396 of file virtio-net.c.
References iob_len(), netdev, netdev_tx_defer(), queue, virtio_net::tx, virtio_net_submit(), and virtio_notify().
|
static |
Poll for completed packets.
| netdev | Network device |
Definition at line 421 of file virtio-net.c.
References netdev, netdev_tx_complete(), NULL, queue, virtio_net::tx, virtio_completions(), and virtio_net_complete().
Referenced by virtio_net_poll().
|
static |
Poll for received packets.
| netdev | Network device |
Definition at line 440 of file virtio-net.c.
References virtio_net::hlen, iob_put, len, netdev, netdev_rx(), queue, virtio_net::rx, virtio_completions(), and virtio_net_complete().
Referenced by virtio_net_poll().
|
static |
Poll for completed and received packets.
| netdev | Network device |
Definition at line 461 of file virtio-net.c.
References netdev, virtio_net_poll_rx(), virtio_net_poll_tx(), and virtio_net_refill_rx().
|
static |
Probe PCI device.
| pci | PCI device |
| rc | Return status code |
Definition at line 495 of file virtio-net.c.
References alloc_etherdev(), DBGC, pci_device::dev, pci_device::dma, DMA_RX, DMA_TX, ENOMEM, memset(), virtio_device::name, netdev, netdev_init(), netdev_link_up(), netdev_nullify(), netdev_put(), pci_set_drvdata(), rc, register_netdev(), virtio_net::rx, virtio_net::rx_iobufs, virtio_net::rx_slots, strerror(), virtio_net::tx, virtio_net::tx_iobufs, virtio_net::tx_slots, unregister_netdev(), virtio_net::virtio, VIRTIO_DESC_FL_WRITE, virtio_init(), virtio_net_features, virtio_net_mac(), virtio_net_mtu(), virtio_net_operations, virtio_net_queue_init(), VIRTIO_NET_RX_COUNT, VIRTIO_NET_RX_INDEX, VIRTIO_NET_RX_MAX, VIRTIO_NET_TX_COUNT, VIRTIO_NET_TX_INDEX, VIRTIO_NET_TX_MAX, virtio_pci_map(), virtio_reset(), and virtio_unmap().
|
static |
Remove PCI device.
| pci | PCI device |
Definition at line 568 of file virtio-net.c.
References netdev, netdev_nullify(), netdev_put(), pci_get_drvdata(), unregister_netdev(), virtio_net::virtio, virtio_reset(), and virtio_unmap().
| const struct virtio_features virtio_net_features |
Supported features.
Definition at line 47 of file virtio-net.c.
Referenced by virtio_net_open(), and virtio_net_probe().
|
static |
Virtio network device operations.
Definition at line 475 of file virtio-net.c.
Referenced by virtio_net_probe().
|
static |
| struct pci_driver virtio_net_driver __pci_driver |
Virtio network PCI driver.
Definition at line 592 of file virtio-net.c.