|
iPXE
|
Virtual I/O device. More...
#include <string.h>#include <assert.h>#include <errno.h>#include <unistd.h>#include <ipxe/pci.h>#include <ipxe/virtio.h>Go to the source code of this file.
Functions | |
| FILE_LICENCE (GPL2_OR_LATER_OR_UBDL) | |
| FILE_SECBOOT (PERMITTED) | |
| static int | virtio_legacy_reset (struct virtio_device *virtio) |
| Reset device. | |
| static unsigned int | virtio_legacy_status (struct virtio_device *virtio) |
| Report driver status. | |
| static void | virtio_legacy_supported (struct virtio_device *virtio) |
| Get supported features. | |
| static void | virtio_legacy_negotiate (struct virtio_device *virtio) |
| Negotiate device features. | |
| static void | virtio_legacy_size (struct virtio_device *virtio, struct virtio_queue *queue, unsigned int count) |
| Set queue size. | |
| static void | virtio_legacy_enable (struct virtio_device *virtio, struct virtio_queue *queue) |
| Enable queue. | |
| static int | virtio_pci_reset (struct virtio_device *virtio) |
| Reset device. | |
| static unsigned int | virtio_pci_status (struct virtio_device *virtio) |
| Report driver status. | |
| static void | virtio_pci_supported (struct virtio_device *virtio) |
| Get supported features. | |
| static void | virtio_pci_negotiate (struct virtio_device *virtio) |
| Negotiate device features. | |
| static void | virtio_pci_size (struct virtio_device *virtio, struct virtio_queue *queue, unsigned int count) |
| Set queue size. | |
| static void | virtio_pci_address (struct virtio_device *virtio, struct virtio_queue *queue, void *addr, unsigned int offset) |
| Program queue address. | |
| static void | virtio_pci_enable (struct virtio_device *virtio, struct virtio_queue *queue) |
| Enable queue. | |
| static int | virtio_pci_cap (struct virtio_device *virtio, struct pci_device *pci, unsigned int type, struct virtio_pci_capability *cap) |
| Find PCI capability. | |
| static void * | virtio_pci_map_cap (struct virtio_device *virtio, struct pci_device *pci, struct virtio_pci_capability *cap) |
| Map PCI capability. | |
| int | virtio_pci_map (struct virtio_device *virtio, struct pci_device *pci) |
| Map PCI device. | |
| int | virtio_reset (struct virtio_device *virtio) |
| Reset device. | |
| unsigned int | virtio_status (struct virtio_device *virtio, unsigned int stat) |
| Report driver status. | |
| static void | virtio_negotiate (struct virtio_device *virtio, const struct virtio_features *driver) |
| Negotiate features. | |
| int | virtio_init (struct virtio_device *virtio, const struct virtio_features *driver) |
| Initialise device. | |
| int | virtio_enable (struct virtio_device *virtio, struct virtio_queue *queue, unsigned int count) |
| Enable queue. | |
| void | virtio_free (struct virtio_device *virtio, struct virtio_queue *queue) |
| Free queue. | |
| void | virtio_unmap (struct virtio_device *virtio) |
| Unmap device. | |
Variables | |
| static struct virtio_operations | virtio_legacy_operations |
| Original ("legacy") device operations. | |
| static struct virtio_operations | virtio_pci_operations |
| PCI ("modern") device operations. | |
Virtual I/O device.
Definition in file virtio.c.
| FILE_LICENCE | ( | GPL2_OR_LATER_OR_UBDL | ) |
| FILE_SECBOOT | ( | PERMITTED | ) |
|
static |
Reset device.
| virtio | Virtio device |
| rc | Return status code |
Definition at line 53 of file virtio.c.
References virtio_device::common, DBGC, ETIMEDOUT, ioread8, iowrite8, mdelay(), virtio_device::name, stat, VIRTIO_LEG_STAT, and VIRTIO_RESET_MAX_WAIT_MS.
|
static |
Report driver status.
| virtio | Virtio device |
| stat | Actual device status |
Definition at line 78 of file virtio.c.
References virtio_device::common, ioread8, iowrite8, virtio_device::stat, and VIRTIO_LEG_STAT.
|
static |
Get supported features.
| virtio | Virtio device |
Definition at line 92 of file virtio.c.
References virtio_device::common, ioread32, supported, virtio_device::supported, VIRTIO_FEATURE_WORDS, and VIRTIO_LEG_FEAT.
|
static |
Negotiate device features.
| virtio | Virtio device |
Definition at line 109 of file virtio.c.
References assert, virtio_device::common, features, virtio_device::features, iowrite32, VIRTIO_FEATURE_WORDS, and VIRTIO_LEG_USED.
|
static |
Set queue size.
Definition at line 128 of file virtio.c.
References virtio_device::common, count, ioread16, iowrite16, len, queue, virtio_align(), virtio_cq_size(), virtio_desc_size(), VIRTIO_LEG_SEL, VIRTIO_LEG_SIZE, and virtio_sq_size().
|
static |
Enable queue.
| virtio | Virtio device |
| queue | Virtio queue |
Definition at line 155 of file virtio.c.
References assert, base, virtio_device::common, count, dma(), iowrite16, iowrite32, len, queue, virtio_align(), virtio_cq_size(), virtio_desc_size(), VIRTIO_LEG_BASE, VIRTIO_LEG_SEL, VIRTIO_PAGE, and virtio_sq_size().
|
static |
Reset device.
| virtio | Virtio device |
| rc | Return status code |
Definition at line 200 of file virtio.c.
References virtio_device::common, DBGC, ETIMEDOUT, ioread8, iowrite8, mdelay(), virtio_device::name, stat, VIRTIO_PCI_STAT, and VIRTIO_RESET_MAX_WAIT_MS.
|
static |
Report driver status.
| virtio | Virtio device |
| stat | Actual device status |
Definition at line 225 of file virtio.c.
References virtio_device::common, ioread8, iowrite8, virtio_device::stat, and VIRTIO_PCI_STAT.
|
static |
Get supported features.
| virtio | Virtio device |
Definition at line 239 of file virtio.c.
References virtio_device::common, ioread32, iowrite32, supported, virtio_device::supported, VIRTIO_FEATURE_WORDS, VIRTIO_PCI_FEAT, and VIRTIO_PCI_FEAT_SEL.
|
static |
Negotiate device features.
| virtio | Virtio device |
Definition at line 256 of file virtio.c.
References virtio_device::common, features, virtio_device::features, iowrite32, VIRTIO_FEATURE_WORDS, VIRTIO_PCI_USED, and VIRTIO_PCI_USED_SEL.
|
static |
Set queue size.
Definition at line 275 of file virtio.c.
References virtio_device::common, count, ioread16, iowrite16, len, max, queue, virtio_align(), virtio_cq_size(), virtio_desc_size(), VIRTIO_PCI_SEL, VIRTIO_PCI_SIZE, and virtio_sq_size().
|
static |
Program queue address.
Definition at line 308 of file virtio.c.
References addr, virtio_device::common, dma(), iowrite32, offset, phys, and queue.
Referenced by virtio_pci_enable().
|
static |
Enable queue.
| virtio | Virtio device |
| queue | Virtio queue |
Definition at line 330 of file virtio.c.
References assert, base, virtio_device::common, count, iowrite16, len, queue, virtio_align(), virtio_cq_size(), virtio_desc_size(), virtio_pci_address(), VIRTIO_PCI_CQ, VIRTIO_PCI_DESC, VIRTIO_PCI_ENABLE, VIRTIO_PCI_SEL, VIRTIO_PCI_SQ, and virtio_sq_size().
|
static |
Find PCI capability.
| virtio | Virtio device |
| pci | PCI device |
| type | Capability type |
| cap | Virtio PCI capability to fill in |
| rc | Return status code |
Definition at line 375 of file virtio.c.
References virtio_pci_capability::bar, DBGC, DBGC2, ENOENT, virtio_pci_capability::len, virtio_device::name, virtio_pci_capability::offset, pci_bar_start(), PCI_BASE_ADDRESS, PCI_BASE_ADDRESS_5, PCI_CAP_ID_VNDR, PCI_CAP_LEN, pci_find_capability(), pci_find_next_capability(), pci_read_config_byte(), pci_read_config_dword(), virtio_pci_capability::pos, reg, type, virtio_pci_capability::type, VIRTIO_PCI_CAP_BAR, VIRTIO_PCI_CAP_END, VIRTIO_PCI_CAP_OFFSET, and VIRTIO_PCI_CAP_TYPE.
Referenced by virtio_pci_map().
|
static |
Map PCI capability.
| virtio | Virtio device |
| pci | PCI device |
| cap | Virtio PCI capability |
| io_addr | I/O address, or NULL on error |
Definition at line 438 of file virtio.c.
References addr, virtio_pci_capability::bar, DBGC, DBGC2, virtio_device::name, NULL, virtio_pci_capability::offset, pci_bar_is_io(), pci_bar_start(), PCI_BASE_ADDRESS, pci_ioremap(), reg, and VIRTIO_PAGE.
Referenced by virtio_pci_map().
| int virtio_pci_map | ( | struct virtio_device * | virtio, |
| struct pci_device * | pci ) |
Map PCI device.
| virtio | Virtio device |
| pci | PCI device |
| rc | Return status code |
Definition at line 479 of file virtio.c.
References adjust_pci_device(), virtio_pci_capability::bar, common, virtio_device::common, ctrl, DBGC, pci_device::dev, virtio_device::device, pci_device::dma, virtio_device::dma, dma_set_mask_64bit(), ENODEV, iounmap(), virtio_pci_capability::len, virtio_device::multiplier, device::name, virtio_device::name, virtio_device::notify, virtio_pci_capability::offset, virtio_device::op, PCI_CAP_ID_MSIX, pci_find_capability(), PCI_MSIX_CTRL_ENABLE, pci_read_config_dword(), pci_read_config_word(), virtio_pci_capability::pos, rc, VIRTIO_LEG_DB, VIRTIO_LEG_DEV, VIRTIO_LEG_DEV_MSIX, virtio_legacy_operations, virtio_pci_cap(), VIRTIO_PCI_CAP_NOTIFY_END, VIRTIO_PCI_CAP_NOTIFY_MULT, VIRTIO_PCI_CAP_TYPE_COMMON, VIRTIO_PCI_CAP_TYPE_DEVICE, VIRTIO_PCI_CAP_TYPE_NOTIFY, virtio_pci_map_cap(), and virtio_pci_operations.
Referenced by virtio_net_probe().
| int virtio_reset | ( | struct virtio_device * | virtio | ) |
Reset device.
| virtio | Virtio device |
| rc | Return status code |
Definition at line 580 of file virtio.c.
References DBGC, virtio_device::name, virtio_device::op, rc, virtio_operations::reset, virtio_device::stat, and strerror().
Referenced by virtio_init(), virtio_net_close(), virtio_net_open(), virtio_net_probe(), and virtio_net_remove().
| unsigned int virtio_status | ( | struct virtio_device * | virtio, |
| unsigned int | stat ) |
Report driver status.
| virtio | Virtio device |
| stat | Additional driver status bits |
| stat | Actual device status |
Definition at line 603 of file virtio.c.
References virtio_device::op, stat, virtio_device::stat, and virtio_operations::status.
Referenced by virtio_init(), and virtio_net_open().
|
static |
Negotiate features.
| virtio | Virtio device |
| driver | Driver supported features |
Definition at line 619 of file virtio.c.
References DBGC, features, virtio_device::features, virtio_device::name, virtio_operations::negotiate, virtio_device::op, virtio_device::supported, virtio_operations::supported, VIRTIO_FEATURE_WORDS, and virtio_features::word.
Referenced by virtio_init().
| int virtio_init | ( | struct virtio_device * | virtio, |
| const struct virtio_features * | driver ) |
Initialise device.
| virtio | Virtio device |
| driver | Driver supported features |
| rc | Return status code |
Definition at line 650 of file virtio.c.
References DBGC, ENOTSUP, virtio_device::features, virtio_device::name, rc, stat, VIRTIO_FEAT1_MODERN, virtio_negotiate(), virtio_reset(), VIRTIO_STAT_ACKNOWLEDGE, VIRTIO_STAT_DRIVER, VIRTIO_STAT_FAIL, VIRTIO_STAT_FEATURES_OK, virtio_status(), and virtio_features::word.
Referenced by virtio_net_open(), and virtio_net_probe().
| int virtio_enable | ( | struct virtio_device * | virtio, |
| struct virtio_queue * | queue, | ||
| unsigned int | count ) |
Enable queue.
| rc | Return status code |
Definition at line 696 of file virtio.c.
References count, DBGC, virtio_device::dma, dma_alloc(), dma_free(), virtio_operations::enable, ENODEV, ENOMEM, memset(), virtio_device::multiplier, virtio_device::name, virtio_device::notify, NULL, offset, virtio_device::op, queue, rc, virtio_operations::size, virtio_cq_size(), virtio_desc_size(), VIRTIO_PAGE, and virtio_sq_size().
Referenced by virtio_net_enable().
| void virtio_free | ( | struct virtio_device * | virtio, |
| struct virtio_queue * | queue ) |
Free queue.
| virtio | Virtio device |
| queue | Virtio queue |
Definition at line 764 of file virtio.c.
References DBGC, dma_free(), virtio_device::name, NULL, and queue.
Referenced by virtio_net_close(), and virtio_net_open().
| void virtio_unmap | ( | struct virtio_device * | virtio | ) |
Unmap device.
| virtio | Virtio device |
Definition at line 780 of file virtio.c.
References virtio_device::common, virtio_device::device, iounmap(), and virtio_device::notify.
Referenced by virtio_net_probe(), and virtio_net_remove().
|
static |
Original ("legacy") device operations.
Definition at line 178 of file virtio.c.
Referenced by virtio_pci_map().
|
static |
PCI ("modern") device operations.
Definition at line 357 of file virtio.c.
Referenced by virtio_pci_map().