vtpci_common
vtpci_read_isr(struct vtpci_common *cn)
vtpci_get_vq_size(struct vtpci_common *cn, int idx)
vtpci_get_vq_notify_off(struct vtpci_common *cn, int idx)
vtpci_set_vq(struct vtpci_common *cn, struct virtqueue *vq)
vtpci_disable_vq(struct vtpci_common *cn, int idx)
vtpci_register_cfg_msix(struct vtpci_common *cn, struct vtpci_interrupt *intr)
vtpci_register_vq_msix(struct vtpci_common *cn, int idx,
vtpci_init(struct vtpci_common *cn, device_t dev, bool modern)
vtpci_add_child(struct vtpci_common *cn)
vtpci_delete_child(struct vtpci_common *cn)
vtpci_child_detached(struct vtpci_common *cn)
vtpci_reinit(struct vtpci_common *cn)
vtpci_describe_features(struct vtpci_common *cn, const char *msg,
vtpci_negotiate_features(struct vtpci_common *cn,
vtpci_with_feature(struct vtpci_common *cn, uint64_t feature)
vtpci_read_ivar(struct vtpci_common *cn, int index, uintptr_t *result)
vtpci_write_ivar(struct vtpci_common *cn, int index, uintptr_t value)
vtpci_alloc_virtqueues(struct vtpci_common *cn, int nvqs,
vtpci_alloc_msix(struct vtpci_common *cn, int nvectors)
vtpci_alloc_msi(struct vtpci_common *cn)
vtpci_alloc_intr_msix_pervq(struct vtpci_common *cn)
vtpci_alloc_intr_msix_shared(struct vtpci_common *cn)
vtpci_alloc_intr_msi(struct vtpci_common *cn)
vtpci_alloc_intr_intx(struct vtpci_common *cn)
vtpci_alloc_interrupt(struct vtpci_common *cn, int rid, int flags,
vtpci_free_interrupt(struct vtpci_common *cn, struct vtpci_interrupt *intr)
vtpci_free_interrupts(struct vtpci_common *cn)
static void vtpci_describe_features(struct vtpci_common *, const char *,
static int vtpci_alloc_msix(struct vtpci_common *, int);
vtpci_free_virtqueues(struct vtpci_common *cn)
static int vtpci_alloc_msi(struct vtpci_common *);
static int vtpci_alloc_intr_msix_pervq(struct vtpci_common *);
vtpci_release_child_resources(struct vtpci_common *cn)
static int vtpci_alloc_intr_msix_shared(struct vtpci_common *);
vtpci_cleanup_setup_intr_attempt(struct vtpci_common *cn)
static int vtpci_alloc_intr_msi(struct vtpci_common *);
vtpci_alloc_intr_resources(struct vtpci_common *cn)
static int vtpci_alloc_intr_intx(struct vtpci_common *);
static int vtpci_alloc_interrupt(struct vtpci_common *, int, int,
static void vtpci_free_interrupt(struct vtpci_common *,
vtpci_setup_intx_interrupt(struct vtpci_common *cn, enum intr_type type)
vtpci_setup_pervq_msix_interrupts(struct vtpci_common *cn, enum intr_type type)
static void vtpci_free_interrupts(struct vtpci_common *);
static void vtpci_free_virtqueues(struct vtpci_common *);
static void vtpci_cleanup_setup_intr_attempt(struct vtpci_common *);
vtpci_set_host_msix_vectors(struct vtpci_common *cn)
static int vtpci_alloc_intr_resources(struct vtpci_common *);
static int vtpci_setup_intx_interrupt(struct vtpci_common *,
static int vtpci_setup_pervq_msix_interrupts(struct vtpci_common *,
vtpci_setup_msix_interrupts(struct vtpci_common *cn, enum intr_type type)
static int vtpci_set_host_msix_vectors(struct vtpci_common *);
vtpci_setup_intrs(struct vtpci_common *cn, enum intr_type type)
static int vtpci_setup_msix_interrupts(struct vtpci_common *,
vtpci_setup_interrupts(struct vtpci_common *cn, enum intr_type type)
static int vtpci_setup_intrs(struct vtpci_common *, enum intr_type);
static int vtpci_reinit_virtqueue(struct vtpci_common *, int);
vtpci_reinit_virtqueue(struct vtpci_common *cn, int idx)
struct vtpci_common *cn;
static void vtpci_setup_sysctl(struct vtpci_common *);
struct vtpci_common *cn;
struct vtpci_common *cn;
struct vtpci_common *cn;
vtpci_feature_sysctl(struct sysctl_req *req, struct vtpci_common *cn,
struct vtpci_common *cn;
struct vtpci_common *cn;
vtpci_setup_sysctl(struct vtpci_common *cn)
vtpci_is_modern(struct vtpci_common *cn)
vtpci_virtqueue_count(struct vtpci_common *cn)
void vtpci_init(struct vtpci_common *cn, device_t dev, bool modern);
int vtpci_add_child(struct vtpci_common *cn);
int vtpci_delete_child(struct vtpci_common *cn);
void vtpci_child_detached(struct vtpci_common *cn);
int vtpci_reinit(struct vtpci_common *cn);
uint64_t vtpci_negotiate_features(struct vtpci_common *cn,
bool vtpci_with_feature(struct vtpci_common *cn, uint64_t feature);
int vtpci_read_ivar(struct vtpci_common *cn, int index, uintptr_t *result);
int vtpci_write_ivar(struct vtpci_common *cn, int index, uintptr_t value);
int vtpci_alloc_virtqueues(struct vtpci_common *cn, int nvqs,
int vtpci_setup_interrupts(struct vtpci_common *cn, enum intr_type type);
void vtpci_release_child_resources(struct vtpci_common *cn);
vtpci_child_device(struct vtpci_common *cn)
vtpci_is_msix_available(struct vtpci_common *cn)
vtpci_is_msix_enabled(struct vtpci_common *cn)
VIRTIO_PCI_CONFIG_OFF(vtpci_is_msix_enabled(&(_sc)->vtpci_common))
vtpci_init(&sc->vtpci_common, dev, false);
if (vtpci_is_msix_available(&sc->vtpci_common) &&
error = vtpci_add_child(&sc->vtpci_common);
error = vtpci_delete_child(&sc->vtpci_common);
vtpci_child_detached(&sc->vtpci_common);
struct vtpci_common *cn;
cn = &sc->vtpci_common;
struct vtpci_common *cn;
cn = &sc->vtpci_common;
features = vtpci_negotiate_features(&sc->vtpci_common,
return (vtpci_with_feature(&sc->vtpci_common, feature));
struct vtpci_common *cn;
cn = &sc->vtpci_common;
return (vtpci_setup_interrupts(&sc->vtpci_common, type));
struct vtpci_common *cn;
cn = &sc->vtpci_common;
struct vtpci_common vtpci_common;
child = vtpci_child_device(&sc->vtpci_common);
if (!vtpci_is_msix_available(&sc->vtpci_common) ||
child = vtpci_child_device(&sc->vtpci_common);
for (idx = 0; idx < sc->vtpci_common.vtpci_nvqs; idx++) {
vtpci_init(&sc->vtpci_common, dev, true);
error = vtpci_add_child(&sc->vtpci_common);
error = vtpci_delete_child(&sc->vtpci_common);
vtpci_child_detached(&sc->vtpci_common);
struct vtpci_common *cn;
cn = &sc->vtpci_common;
struct vtpci_common *cn;
cn = &sc->vtpci_common;
features = vtpci_negotiate_features(&sc->vtpci_common,
return (vtpci_with_feature(&sc->vtpci_common, feature));
struct vtpci_common *cn;
cn = &sc->vtpci_common;
error = vtpci_setup_interrupts(&sc->vtpci_common, type);
struct vtpci_common *cn;
cn = &sc->vtpci_common;
struct vtpci_common vtpci_common;