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 --- |