Deleted Added
full compact
virtio.c (266592) virtio.c (267393)
1/*-
2 * Copyright (c) 2013 Chris Torek <torek @ torek net>
3 * All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
7 * are met:
8 * 1. Redistributions of source code must retain the above copyright

--- 11 unchanged lines hidden (view full) ---

20 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
21 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
22 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
23 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
24 * SUCH DAMAGE.
25 */
26
27#include <sys/cdefs.h>
1/*-
2 * Copyright (c) 2013 Chris Torek <torek @ torek net>
3 * All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
7 * are met:
8 * 1. Redistributions of source code must retain the above copyright

--- 11 unchanged lines hidden (view full) ---

20 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
21 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
22 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
23 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
24 * SUCH DAMAGE.
25 */
26
27#include <sys/cdefs.h>
28__FBSDID("$FreeBSD: stable/10/usr.sbin/bhyve/virtio.c 266592 2014-05-23 19:06:35Z jhb $");
28__FBSDID("$FreeBSD: stable/10/usr.sbin/bhyve/virtio.c 267393 2014-06-12 13:13:15Z jhb $");
29
30#include <sys/param.h>
31#include <sys/uio.h>
32
33#include <stdio.h>
34#include <stdint.h>
35#include <pthread.h>
36

--- 57 unchanged lines hidden (view full) ---

94 vq->vq_flags = 0;
95 vq->vq_last_avail = 0;
96 vq->vq_pfn = 0;
97 vq->vq_msix_idx = VIRTIO_MSI_NO_VECTOR;
98 }
99 vs->vs_negotiated_caps = 0;
100 vs->vs_curq = 0;
101 /* vs->vs_status = 0; -- redundant */
29
30#include <sys/param.h>
31#include <sys/uio.h>
32
33#include <stdio.h>
34#include <stdint.h>
35#include <pthread.h>
36

--- 57 unchanged lines hidden (view full) ---

94 vq->vq_flags = 0;
95 vq->vq_last_avail = 0;
96 vq->vq_pfn = 0;
97 vq->vq_msix_idx = VIRTIO_MSI_NO_VECTOR;
98 }
99 vs->vs_negotiated_caps = 0;
100 vs->vs_curq = 0;
101 /* vs->vs_status = 0; -- redundant */
102 VS_LOCK(vs);
103 if (vs->vs_isr)
104 pci_lintr_deassert(vs->vs_pi);
102 vs->vs_isr = 0;
105 vs->vs_isr = 0;
106 VS_UNLOCK(vs);
103 vs->vs_msix_cfg_idx = VIRTIO_MSI_NO_VECTOR;
104}
105
106/*
107 * Set I/O BAR (usually 0) to map PCI config registers.
108 */
109void
110vi_set_io_bar(struct virtio_softc *vs, int barnum)

--- 21 unchanged lines hidden (view full) ---

132 int nvec;
133
134 if (use_msix) {
135 vs->vs_flags |= VIRTIO_USE_MSIX;
136 vi_reset_dev(vs); /* set all vectors to NO_VECTOR */
137 nvec = vs->vs_vc->vc_nvq + 1;
138 if (pci_emul_add_msixcap(vs->vs_pi, nvec, barnum))
139 return (1);
107 vs->vs_msix_cfg_idx = VIRTIO_MSI_NO_VECTOR;
108}
109
110/*
111 * Set I/O BAR (usually 0) to map PCI config registers.
112 */
113void
114vi_set_io_bar(struct virtio_softc *vs, int barnum)

--- 21 unchanged lines hidden (view full) ---

136 int nvec;
137
138 if (use_msix) {
139 vs->vs_flags |= VIRTIO_USE_MSIX;
140 vi_reset_dev(vs); /* set all vectors to NO_VECTOR */
141 nvec = vs->vs_vc->vc_nvq + 1;
142 if (pci_emul_add_msixcap(vs->vs_pi, nvec, barnum))
143 return (1);
140 } else {
144 } else
141 vs->vs_flags &= ~VIRTIO_USE_MSIX;
145 vs->vs_flags &= ~VIRTIO_USE_MSIX;
142 /* Only 1 MSI vector for bhyve */
143 pci_emul_add_msicap(vs->vs_pi, 1);
144 }
146 /* Only 1 MSI vector for bhyve */
147 pci_emul_add_msicap(vs->vs_pi, 1);
145 return (0);
146}
147
148/*
149 * Initialize the currently-selected virtio queue (vs->vs_curq).
150 * The guest just gave us a page frame number, from which we can
151 * calculate the addresses of the queue.
152 */

--- 433 unchanged lines hidden (view full) ---

586 value = 0; /* XXX */
587 break;
588 case VTCFG_R_STATUS:
589 value = vs->vs_status;
590 break;
591 case VTCFG_R_ISR:
592 value = vs->vs_isr;
593 vs->vs_isr = 0; /* a read clears this flag */
148 return (0);
149}
150
151/*
152 * Initialize the currently-selected virtio queue (vs->vs_curq).
153 * The guest just gave us a page frame number, from which we can
154 * calculate the addresses of the queue.
155 */

--- 433 unchanged lines hidden (view full) ---

589 value = 0; /* XXX */
590 break;
591 case VTCFG_R_STATUS:
592 value = vs->vs_status;
593 break;
594 case VTCFG_R_ISR:
595 value = vs->vs_isr;
596 vs->vs_isr = 0; /* a read clears this flag */
597 if (value)
598 pci_lintr_deassert(pi);
594 break;
595 case VTCFG_R_CFGVEC:
596 value = vs->vs_msix_cfg_idx;
597 break;
598 case VTCFG_R_QVEC:
599 value = vs->vs_curq < vc->vc_nvq ?
600 vs->vs_queues[vs->vs_curq].vq_msix_idx :
601 VIRTIO_MSI_NO_VECTOR;

--- 145 unchanged lines hidden ---
599 break;
600 case VTCFG_R_CFGVEC:
601 value = vs->vs_msix_cfg_idx;
602 break;
603 case VTCFG_R_QVEC:
604 value = vs->vs_curq < vc->vc_nvq ?
605 vs->vs_queues[vs->vs_curq].vq_msix_idx :
606 VIRTIO_MSI_NO_VECTOR;

--- 145 unchanged lines hidden ---